mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 10:00:17 +00:00
wifi: mt76: mt7996: Convert mt7996_wed_rro_addr to LE
[ Upstream commit809054a60d] Do not use bitmask in mt7996_wed_rro_addr DMA descriptor in order to not break endianness Fixes:950d0abb5c("wifi: mt76: mt7996: add wed rx support") Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org> Link: https://patch.msgid.link/20250909-mt7996-rro-rework-v5-11-7d66f6eb7795@kernel.org Signed-off-by: Felix Fietkau <nbd@nbd.name> Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
fabb57c09c
commit
417b0f520e
@@ -734,6 +734,7 @@ void mt7996_wfsys_reset(struct mt7996_dev *dev)
|
|||||||
static int mt7996_wed_rro_init(struct mt7996_dev *dev)
|
static int mt7996_wed_rro_init(struct mt7996_dev *dev)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_NET_MEDIATEK_SOC_WED
|
#ifdef CONFIG_NET_MEDIATEK_SOC_WED
|
||||||
|
u32 val = FIELD_PREP(WED_RRO_ADDR_SIGNATURE_MASK, 0xff);
|
||||||
struct mtk_wed_device *wed = &dev->mt76.mmio.wed;
|
struct mtk_wed_device *wed = &dev->mt76.mmio.wed;
|
||||||
u32 reg = MT_RRO_ADDR_ELEM_SEG_ADDR0;
|
u32 reg = MT_RRO_ADDR_ELEM_SEG_ADDR0;
|
||||||
struct mt7996_wed_rro_addr *addr;
|
struct mt7996_wed_rro_addr *addr;
|
||||||
@@ -773,7 +774,7 @@ static int mt7996_wed_rro_init(struct mt7996_dev *dev)
|
|||||||
|
|
||||||
addr = dev->wed_rro.addr_elem[i].ptr;
|
addr = dev->wed_rro.addr_elem[i].ptr;
|
||||||
for (j = 0; j < MT7996_RRO_WINDOW_MAX_SIZE; j++) {
|
for (j = 0; j < MT7996_RRO_WINDOW_MAX_SIZE; j++) {
|
||||||
addr->signature = 0xff;
|
addr->data = cpu_to_le32(val);
|
||||||
addr++;
|
addr++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -791,7 +792,7 @@ static int mt7996_wed_rro_init(struct mt7996_dev *dev)
|
|||||||
dev->wed_rro.session.ptr = ptr;
|
dev->wed_rro.session.ptr = ptr;
|
||||||
addr = dev->wed_rro.session.ptr;
|
addr = dev->wed_rro.session.ptr;
|
||||||
for (i = 0; i < MT7996_RRO_WINDOW_MAX_LEN; i++) {
|
for (i = 0; i < MT7996_RRO_WINDOW_MAX_LEN; i++) {
|
||||||
addr->signature = 0xff;
|
addr->data = cpu_to_le32(val);
|
||||||
addr++;
|
addr++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -891,6 +892,7 @@ static void mt7996_wed_rro_free(struct mt7996_dev *dev)
|
|||||||
static void mt7996_wed_rro_work(struct work_struct *work)
|
static void mt7996_wed_rro_work(struct work_struct *work)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_NET_MEDIATEK_SOC_WED
|
#ifdef CONFIG_NET_MEDIATEK_SOC_WED
|
||||||
|
u32 val = FIELD_PREP(WED_RRO_ADDR_SIGNATURE_MASK, 0xff);
|
||||||
struct mt7996_dev *dev;
|
struct mt7996_dev *dev;
|
||||||
LIST_HEAD(list);
|
LIST_HEAD(list);
|
||||||
|
|
||||||
@@ -927,7 +929,7 @@ static void mt7996_wed_rro_work(struct work_struct *work)
|
|||||||
MT7996_RRO_WINDOW_MAX_LEN;
|
MT7996_RRO_WINDOW_MAX_LEN;
|
||||||
reset:
|
reset:
|
||||||
elem = ptr + elem_id * sizeof(*elem);
|
elem = ptr + elem_id * sizeof(*elem);
|
||||||
elem->signature = 0xff;
|
elem->data |= cpu_to_le32(val);
|
||||||
}
|
}
|
||||||
mt7996_mcu_wed_rro_reset_sessions(dev, e->id);
|
mt7996_mcu_wed_rro_reset_sessions(dev, e->id);
|
||||||
out:
|
out:
|
||||||
|
|||||||
@@ -277,13 +277,12 @@ struct mt7996_hif {
|
|||||||
int irq;
|
int irq;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define WED_RRO_ADDR_SIGNATURE_MASK GENMASK(31, 24)
|
||||||
|
#define WED_RRO_ADDR_COUNT_MASK GENMASK(14, 4)
|
||||||
|
#define WED_RRO_ADDR_HEAD_HIGH_MASK GENMASK(3, 0)
|
||||||
struct mt7996_wed_rro_addr {
|
struct mt7996_wed_rro_addr {
|
||||||
u32 head_low;
|
__le32 head_low;
|
||||||
u32 head_high : 4;
|
__le32 data;
|
||||||
u32 count: 11;
|
|
||||||
u32 oor: 1;
|
|
||||||
u32 rsv : 8;
|
|
||||||
u32 signature : 8;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
struct mt7996_wed_rro_session_id {
|
struct mt7996_wed_rro_session_id {
|
||||||
|
|||||||
Reference in New Issue
Block a user