]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
wifi: mt76: mt7996: Convert mt7996_wed_rro_addr to LE
authorLorenzo Bianconi <lorenzo@kernel.org>
Tue, 9 Sep 2025 09:45:19 +0000 (11:45 +0200)
committerFelix Fietkau <nbd@nbd.name>
Mon, 15 Sep 2025 07:47:41 +0000 (09:47 +0200)
Do not use bitmask in mt7996_wed_rro_addr DMA descriptor in order to not
break endianness

Fixes: 950d0abb5cd94 ("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>
drivers/net/wireless/mediatek/mt76/mt7996/init.c
drivers/net/wireless/mediatek/mt76/mt7996/mt7996.h

index 0104b50ce3f6d52d762dc2f87e5caa5d36ce69b8..f70e24d989cbd0454fa4f9273c87057258ded0f9 100644 (file)
@@ -852,6 +852,7 @@ void mt7996_rro_hw_init(struct mt7996_dev *dev)
 static int mt7996_wed_rro_init(struct mt7996_dev *dev)
 {
 #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 mt7996_wed_rro_addr *addr;
        void *ptr;
@@ -890,7 +891,7 @@ static int mt7996_wed_rro_init(struct mt7996_dev *dev)
 
                addr = dev->wed_rro.addr_elem[i].ptr;
                for (j = 0; j < MT7996_RRO_WINDOW_MAX_SIZE; j++) {
-                       addr->signature = 0xff;
+                       addr->data = cpu_to_le32(val);
                        addr++;
                }
 
@@ -922,7 +923,7 @@ static int mt7996_wed_rro_init(struct mt7996_dev *dev)
        dev->wed_rro.session.ptr = ptr;
        addr = dev->wed_rro.session.ptr;
        for (i = 0; i < MT7996_RRO_WINDOW_MAX_LEN; i++) {
-               addr->signature = 0xff;
+               addr->data = cpu_to_le32(val);
                addr++;
        }
 
@@ -990,6 +991,7 @@ static void mt7996_wed_rro_free(struct mt7996_dev *dev)
 static void mt7996_wed_rro_work(struct work_struct *work)
 {
 #ifdef CONFIG_NET_MEDIATEK_SOC_WED
+       u32 val = FIELD_PREP(WED_RRO_ADDR_SIGNATURE_MASK, 0xff);
        struct mt7996_dev *dev;
        LIST_HEAD(list);
 
@@ -1026,7 +1028,7 @@ static void mt7996_wed_rro_work(struct work_struct *work)
                                MT7996_RRO_WINDOW_MAX_LEN;
 reset:
                        elem = ptr + elem_id * sizeof(*elem);
-                       elem->signature = 0xff;
+                       elem->data |= cpu_to_le32(val);
                }
                mt7996_mcu_wed_rro_reset_sessions(dev, e->id);
 out:
index f6dfd36a44c0bf587d3ac85a5a9d38e24deb14d4..313f6923d071a71152cadceaaf09dfd80b005287 100644 (file)
@@ -285,13 +285,12 @@ struct mt7996_hif {
        enum pcie_link_width width;
 };
 
+#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 {
-       u32 head_low;
-       u32 head_high : 4;
-       u32 count: 11;
-       u32 oor: 1;
-       u32 rsv : 8;
-       u32 signature : 8;
+       __le32 head_low;
+       __le32 data;
 };
 
 struct mt7996_wed_rro_session_id {