mirror of
https://github.com/torvalds/linux.git
synced 2026-09-23 05:04:02 +02:00
ath.git update for v7.3-rc4
In ath12k: revert an undocumented and unapproved DT ABI that was added during the v7.3 merge window. In wcn36xx and ath11k: fix preexisting object lifetime issues. -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQQ/mtSHzPUi16IfDEksFbugiYzLewUCaqimKwAKCRAsFbugiYzL e42dAQC/ynEbnEKbL7LDQj/+Gdyu5ZBph7jOMJPNEXa3lmDNUAD+PcjlAxMv7plX +c1KiIdXayvOSojP10FH3RWl2NoEHgk= =by+N -----END PGP SIGNATURE----- Merge tag 'ath-current-20260914' of git://git.kernel.org/pub/scm/linux/kernel/git/ath/ath Jeff Johnson says: ================== ath.git update for v7.3-rc4 In ath12k: revert an undocumented and unapproved DT ABI that was added during the v7.3 merge window. In wcn36xx and ath11k: fix preexisting object lifetime issues. ================== Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
commit
769ec67d0a
|
|
@ -873,6 +873,22 @@ static int ath11k_mac_set_kickout(struct ath11k_vif *arvif)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void ath11k_mac_station_cleanup(struct ieee80211_sta *sta)
|
||||
{
|
||||
struct ath11k_sta *arsta;
|
||||
|
||||
if (!sta)
|
||||
return;
|
||||
|
||||
arsta = ath11k_sta_to_arsta(sta);
|
||||
|
||||
kfree(arsta->tx_stats);
|
||||
arsta->tx_stats = NULL;
|
||||
|
||||
kfree(arsta->rx_stats);
|
||||
arsta->rx_stats = NULL;
|
||||
}
|
||||
|
||||
void ath11k_mac_peer_cleanup_all(struct ath11k *ar)
|
||||
{
|
||||
struct ath11k_peer *peer, *tmp;
|
||||
|
|
@ -885,6 +901,7 @@ void ath11k_mac_peer_cleanup_all(struct ath11k *ar)
|
|||
list_for_each_entry_safe(peer, tmp, &ab->peers, list) {
|
||||
ath11k_peer_rx_tid_cleanup(ar, peer);
|
||||
ath11k_peer_rhash_delete(ab, peer);
|
||||
ath11k_mac_station_cleanup(peer->sta);
|
||||
list_del(&peer->list);
|
||||
kfree(peer);
|
||||
}
|
||||
|
|
@ -9892,7 +9909,6 @@ static int ath11k_mac_station_remove(struct ath11k *ar,
|
|||
{
|
||||
struct ath11k_base *ab = ar->ab;
|
||||
struct ath11k_vif *arvif = ath11k_vif_to_arvif(vif);
|
||||
struct ath11k_sta *arsta = ath11k_sta_to_arsta(sta);
|
||||
int ret;
|
||||
|
||||
if (ab->hw_params.vdev_start_delay &&
|
||||
|
|
@ -9916,12 +9932,7 @@ static int ath11k_mac_station_remove(struct ath11k *ar,
|
|||
sta->addr, arvif->vdev_id);
|
||||
|
||||
ath11k_mac_dec_num_stations(arvif, sta);
|
||||
|
||||
kfree(arsta->tx_stats);
|
||||
arsta->tx_stats = NULL;
|
||||
|
||||
kfree(arsta->rx_stats);
|
||||
arsta->rx_stats = NULL;
|
||||
ath11k_mac_station_cleanup(sta);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,21 +15,6 @@
|
|||
#include "dp.h"
|
||||
#include "core.h"
|
||||
|
||||
/*
|
||||
* Node name to UserPD ID mapping
|
||||
*
|
||||
* The io_start field is used for additional validation when the reg
|
||||
* property is present in the device tree. If io_start is 0, only
|
||||
* node_name matching is performed.
|
||||
*
|
||||
* For platforms where not all WiFi nodes have a 'reg' property, set
|
||||
* io_start to 0 for those entries. The driver will match purely by
|
||||
* node name in such cases.
|
||||
*/
|
||||
static const struct ath12k_ahb_userpd_map ath12k_wifi7_ahb_userpd_map[] = {
|
||||
{ .io_start = 0x0c000000, .node_name = "wifi", .upd_id = ATH12K_AHB_USERPD_ID_0 },
|
||||
};
|
||||
|
||||
static const struct ath12k_ahb_desc ath12k_wifi7_ahb_desc[] = {
|
||||
[ATH12K_HW_IPQ5332_HW10] = {
|
||||
.hw_rev = ATH12K_HW_IPQ5332_HW10,
|
||||
|
|
@ -55,40 +40,6 @@ static const struct of_device_id ath12k_wifi7_ahb_of_match[] = {
|
|||
|
||||
MODULE_DEVICE_TABLE(of, ath12k_wifi7_ahb_of_match);
|
||||
|
||||
/*
|
||||
* ath12k_wifi7_ahb_get_userpd_id - Resolve UserPD ID from DT properties
|
||||
* @ab: ath12k base structure
|
||||
*
|
||||
* Returns: UserPD ID (1-based) on success, 0 on failure
|
||||
*
|
||||
* Resolution logic:
|
||||
* 1. If reg property exist in DT, get userpd_id from io_start
|
||||
* 2. If reg property is absent, get userpd_id from DT node name
|
||||
* 3. Return 0 if no match found (probe will fail)
|
||||
*/
|
||||
static u32 ath12k_wifi7_ahb_get_userpd_id(struct ath12k_base *ab)
|
||||
{
|
||||
const struct ath12k_ahb_userpd_map *map;
|
||||
struct resource *res;
|
||||
size_t i;
|
||||
|
||||
res = platform_get_resource(ab->pdev, IORESOURCE_MEM, 0);
|
||||
|
||||
for (i = 0; i < ARRAY_SIZE(ath12k_wifi7_ahb_userpd_map); i++) {
|
||||
map = &ath12k_wifi7_ahb_userpd_map[i];
|
||||
|
||||
if (res) {
|
||||
if (map->io_start && map->io_start == res->start)
|
||||
return map->upd_id;
|
||||
} else if (map->node_name &&
|
||||
of_node_name_eq(ab->dev->of_node, map->node_name)) {
|
||||
return map->upd_id;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int ath12k_wifi7_ahb_probe(struct platform_device *pdev)
|
||||
{
|
||||
const struct ath12k_ahb_desc *desc;
|
||||
|
|
@ -106,7 +57,7 @@ static int ath12k_wifi7_ahb_probe(struct platform_device *pdev)
|
|||
ab->hw_rev = desc->hw_rev;
|
||||
ab->hif.ops = desc->ops;
|
||||
ab_ahb->scm_auth_enabled = desc->auth_enabled;
|
||||
ab_ahb->userpd_id = ath12k_wifi7_ahb_get_userpd_id(ab);
|
||||
ab_ahb->userpd_id = ATH12K_AHB_USERPD_ID_0;
|
||||
if (!ab_ahb->userpd_id)
|
||||
return -EOPNOTSUPP;
|
||||
|
||||
|
|
|
|||
|
|
@ -1055,7 +1055,7 @@ void wcn36xx_dxe_deinit(struct wcn36xx *wcn)
|
|||
|
||||
free_irq(wcn->tx_irq, wcn);
|
||||
free_irq(wcn->rx_irq, wcn);
|
||||
timer_delete(&wcn->tx_ack_timer);
|
||||
timer_shutdown_sync(&wcn->tx_ack_timer);
|
||||
|
||||
if (wcn->tx_ack_skb) {
|
||||
ieee80211_tx_status_irqsafe(wcn->hw, wcn->tx_ack_skb);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user