developer | bd9fa1e | 2023-10-16 11:04:00 +0800 | [diff] [blame^] | 1 | From df9f668cf78a4c8dbc505f5fc0fb27a14e94f4c1 Mon Sep 17 00:00:00 2001 |
| 2 | From: StanleyYP Wang <StanleyYP.Wang@mediatek.com> |
| 3 | Date: Fri, 14 Jul 2023 17:29:35 +0800 |
| 4 | Subject: [PATCH 28/98] wifi: mt76: mt7996: add kite & eagle CR offset revision |
| 5 | |
| 6 | Signed-off-by: StanleyYP Wang <StanleyYP.Wang@mediatek.com> |
| 7 | --- |
| 8 | mt7996/mmio.c | 58 +++++++++++++++++++++++++++++++++++++++ |
| 9 | mt7996/regs.h | 76 +++++++++++++++++++++++++++++++++++---------------- |
| 10 | 2 files changed, 111 insertions(+), 23 deletions(-) |
| 11 | |
| 12 | diff --git a/mt7996/mmio.c b/mt7996/mmio.c |
| 13 | index 567f930..2132b2e 100644 |
| 14 | --- a/mt7996/mmio.c |
| 15 | +++ b/mt7996/mmio.c |
| 16 | @@ -28,6 +28,58 @@ static const struct __base mt7996_reg_base[] = { |
| 17 | [WF_RATE_BASE] = { { 0x820ee000, 0x820fe000, 0x830ee000 } }, |
| 18 | }; |
| 19 | |
| 20 | +static const u32 mt7996_offs[] = { |
| 21 | + [MIB_RVSR0] = 0x720, |
| 22 | + [MIB_RVSR1] = 0x724, |
| 23 | + [MIB_BTSCR5] = 0x788, |
| 24 | + [MIB_BTSCR6] = 0x798, |
| 25 | + [MIB_RSCR1] = 0x7ac, |
| 26 | + [MIB_RSCR27] = 0x954, |
| 27 | + [MIB_RSCR28] = 0x958, |
| 28 | + [MIB_RSCR29] = 0x95c, |
| 29 | + [MIB_RSCR30] = 0x960, |
| 30 | + [MIB_RSCR31] = 0x964, |
| 31 | + [MIB_RSCR33] = 0x96c, |
| 32 | + [MIB_RSCR35] = 0x974, |
| 33 | + [MIB_RSCR36] = 0x978, |
| 34 | + [MIB_BSCR0] = 0x9cc, |
| 35 | + [MIB_BSCR1] = 0x9d0, |
| 36 | + [MIB_BSCR2] = 0x9d4, |
| 37 | + [MIB_BSCR3] = 0x9d8, |
| 38 | + [MIB_BSCR4] = 0x9dc, |
| 39 | + [MIB_BSCR5] = 0x9e0, |
| 40 | + [MIB_BSCR6] = 0x9e4, |
| 41 | + [MIB_BSCR7] = 0x9e8, |
| 42 | + [MIB_BSCR17] = 0xa10, |
| 43 | + [MIB_TRDR1] = 0xa28, |
| 44 | +}; |
| 45 | + |
| 46 | +static const u32 mt7992_offs[] = { |
| 47 | + [MIB_RVSR0] = 0x760, |
| 48 | + [MIB_RVSR1] = 0x764, |
| 49 | + [MIB_BTSCR5] = 0x7c8, |
| 50 | + [MIB_BTSCR6] = 0x7d8, |
| 51 | + [MIB_RSCR1] = 0x7f0, |
| 52 | + [MIB_RSCR27] = 0x998, |
| 53 | + [MIB_RSCR28] = 0x99c, |
| 54 | + [MIB_RSCR29] = 0x9a0, |
| 55 | + [MIB_RSCR30] = 0x9a4, |
| 56 | + [MIB_RSCR31] = 0x9a8, |
| 57 | + [MIB_RSCR33] = 0x9b0, |
| 58 | + [MIB_RSCR35] = 0x9b8, |
| 59 | + [MIB_RSCR36] = 0x9bc, |
| 60 | + [MIB_BSCR0] = 0xac8, |
| 61 | + [MIB_BSCR1] = 0xacc, |
| 62 | + [MIB_BSCR2] = 0xad0, |
| 63 | + [MIB_BSCR3] = 0xad4, |
| 64 | + [MIB_BSCR4] = 0xad8, |
| 65 | + [MIB_BSCR5] = 0xadc, |
| 66 | + [MIB_BSCR6] = 0xae0, |
| 67 | + [MIB_BSCR7] = 0xae4, |
| 68 | + [MIB_BSCR17] = 0xb0c, |
| 69 | + [MIB_TRDR1] = 0xb24, |
| 70 | +}; |
| 71 | + |
| 72 | static const struct __map mt7996_reg_map[] = { |
| 73 | { 0x54000000, 0x02000, 0x1000 }, /* WFDMA_0 (PCIE0 MCU DMA0) */ |
| 74 | { 0x55000000, 0x03000, 0x1000 }, /* WFDMA_1 (PCIE0 MCU DMA1) */ |
| 75 | @@ -369,8 +421,14 @@ static int mt7996_mmio_init(struct mt76_dev *mdev, |
| 76 | |
| 77 | switch (device_id) { |
| 78 | case 0x7990: |
| 79 | + dev->reg.base = mt7996_reg_base; |
| 80 | + dev->reg.offs_rev = mt7996_offs; |
| 81 | + dev->reg.map = mt7996_reg_map; |
| 82 | + dev->reg.map_size = ARRAY_SIZE(mt7996_reg_map); |
| 83 | + break; |
| 84 | case 0x7992: |
| 85 | dev->reg.base = mt7996_reg_base; |
| 86 | + dev->reg.offs_rev = mt7992_offs; |
| 87 | dev->reg.map = mt7996_reg_map; |
| 88 | dev->reg.map_size = ARRAY_SIZE(mt7996_reg_map); |
| 89 | break; |
| 90 | diff --git a/mt7996/regs.h b/mt7996/regs.h |
| 91 | index e76dae6..de5df91 100644 |
| 92 | --- a/mt7996/regs.h |
| 93 | +++ b/mt7996/regs.h |
| 94 | @@ -19,6 +19,7 @@ struct __base { |
| 95 | /* used to differentiate between generations */ |
| 96 | struct mt7996_reg_desc { |
| 97 | const struct __base *base; |
| 98 | + const u32 *offs_rev; |
| 99 | const struct __map *map; |
| 100 | u32 map_size; |
| 101 | }; |
| 102 | @@ -39,6 +40,35 @@ enum base_rev { |
| 103 | |
| 104 | #define __BASE(_id, _band) (dev->reg.base[(_id)].band_base[(_band)]) |
| 105 | |
| 106 | +enum offs_rev { |
| 107 | + MIB_RVSR0, |
| 108 | + MIB_RVSR1, |
| 109 | + MIB_BTSCR5, |
| 110 | + MIB_BTSCR6, |
| 111 | + MIB_RSCR1, |
| 112 | + MIB_RSCR27, |
| 113 | + MIB_RSCR28, |
| 114 | + MIB_RSCR29, |
| 115 | + MIB_RSCR30, |
| 116 | + MIB_RSCR31, |
| 117 | + MIB_RSCR33, |
| 118 | + MIB_RSCR35, |
| 119 | + MIB_RSCR36, |
| 120 | + MIB_BSCR0, |
| 121 | + MIB_BSCR1, |
| 122 | + MIB_BSCR2, |
| 123 | + MIB_BSCR3, |
| 124 | + MIB_BSCR4, |
| 125 | + MIB_BSCR5, |
| 126 | + MIB_BSCR6, |
| 127 | + MIB_BSCR7, |
| 128 | + MIB_BSCR17, |
| 129 | + MIB_TRDR1, |
| 130 | + __MT_OFFS_MAX, |
| 131 | +}; |
| 132 | + |
| 133 | +#define __OFFS(id) (dev->reg.offs_rev[(id)]) |
| 134 | + |
| 135 | /* RRO TOP */ |
| 136 | #define MT_RRO_TOP_BASE 0xA000 |
| 137 | #define MT_RRO_TOP(ofs) (MT_RRO_TOP_BASE + (ofs)) |
| 138 | @@ -172,32 +202,32 @@ enum base_rev { |
| 139 | #define MT_WF_MIB_BASE(_band) __BASE(WF_MIB_BASE, (_band)) |
| 140 | #define MT_WF_MIB(_band, ofs) (MT_WF_MIB_BASE(_band) + (ofs)) |
| 141 | |
| 142 | -#define MT_MIB_BSCR0(_band) MT_WF_MIB(_band, 0x9cc) |
| 143 | -#define MT_MIB_BSCR1(_band) MT_WF_MIB(_band, 0x9d0) |
| 144 | -#define MT_MIB_BSCR2(_band) MT_WF_MIB(_band, 0x9d4) |
| 145 | -#define MT_MIB_BSCR3(_band) MT_WF_MIB(_band, 0x9d8) |
| 146 | -#define MT_MIB_BSCR4(_band) MT_WF_MIB(_band, 0x9dc) |
| 147 | -#define MT_MIB_BSCR5(_band) MT_WF_MIB(_band, 0x9e0) |
| 148 | -#define MT_MIB_BSCR6(_band) MT_WF_MIB(_band, 0x9e4) |
| 149 | -#define MT_MIB_BSCR7(_band) MT_WF_MIB(_band, 0x9e8) |
| 150 | -#define MT_MIB_BSCR17(_band) MT_WF_MIB(_band, 0xa10) |
| 151 | +#define MT_MIB_BSCR0(_band) MT_WF_MIB(_band, __OFFS(MIB_BSCR0)) |
| 152 | +#define MT_MIB_BSCR1(_band) MT_WF_MIB(_band, __OFFS(MIB_BSCR1)) |
| 153 | +#define MT_MIB_BSCR2(_band) MT_WF_MIB(_band, __OFFS(MIB_BSCR2)) |
| 154 | +#define MT_MIB_BSCR3(_band) MT_WF_MIB(_band, __OFFS(MIB_BSCR3)) |
| 155 | +#define MT_MIB_BSCR4(_band) MT_WF_MIB(_band, __OFFS(MIB_BSCR4)) |
| 156 | +#define MT_MIB_BSCR5(_band) MT_WF_MIB(_band, __OFFS(MIB_BSCR5)) |
| 157 | +#define MT_MIB_BSCR6(_band) MT_WF_MIB(_band, __OFFS(MIB_BSCR6)) |
| 158 | +#define MT_MIB_BSCR7(_band) MT_WF_MIB(_band, __OFFS(MIB_BSCR7)) |
| 159 | +#define MT_MIB_BSCR17(_band) MT_WF_MIB(_band, __OFFS(MIB_BSCR17)) |
| 160 | |
| 161 | #define MT_MIB_TSCR5(_band) MT_WF_MIB(_band, 0x6c4) |
| 162 | #define MT_MIB_TSCR6(_band) MT_WF_MIB(_band, 0x6c8) |
| 163 | #define MT_MIB_TSCR7(_band) MT_WF_MIB(_band, 0x6d0) |
| 164 | |
| 165 | -#define MT_MIB_RSCR1(_band) MT_WF_MIB(_band, 0x7ac) |
| 166 | +#define MT_MIB_RSCR1(_band) MT_WF_MIB(_band, __OFFS(MIB_RSCR1)) |
| 167 | /* rx mpdu counter, full 32 bits */ |
| 168 | -#define MT_MIB_RSCR31(_band) MT_WF_MIB(_band, 0x964) |
| 169 | -#define MT_MIB_RSCR33(_band) MT_WF_MIB(_band, 0x96c) |
| 170 | +#define MT_MIB_RSCR31(_band) MT_WF_MIB(_band, __OFFS(MIB_RSCR31)) |
| 171 | +#define MT_MIB_RSCR33(_band) MT_WF_MIB(_band, __OFFS(MIB_RSCR33)) |
| 172 | |
| 173 | #define MT_MIB_SDR6(_band) MT_WF_MIB(_band, 0x020) |
| 174 | #define MT_MIB_SDR6_CHANNEL_IDL_CNT_MASK GENMASK(15, 0) |
| 175 | |
| 176 | -#define MT_MIB_RVSR0(_band) MT_WF_MIB(_band, 0x720) |
| 177 | +#define MT_MIB_RVSR0(_band) MT_WF_MIB(_band, __OFFS(MIB_RVSR0)) |
| 178 | |
| 179 | -#define MT_MIB_RSCR35(_band) MT_WF_MIB(_band, 0x974) |
| 180 | -#define MT_MIB_RSCR36(_band) MT_WF_MIB(_band, 0x978) |
| 181 | +#define MT_MIB_RSCR35(_band) MT_WF_MIB(_band, __OFFS(MIB_RSCR35)) |
| 182 | +#define MT_MIB_RSCR36(_band) MT_WF_MIB(_band, __OFFS(MIB_RSCR36)) |
| 183 | |
| 184 | /* tx ampdu cnt, full 32 bits */ |
| 185 | #define MT_MIB_TSCR0(_band) MT_WF_MIB(_band, 0x6b0) |
| 186 | @@ -210,16 +240,16 @@ enum base_rev { |
| 187 | #define MT_MIB_TSCR4(_band) MT_WF_MIB(_band, 0x6c0) |
| 188 | |
| 189 | /* rx ampdu count, 32-bit */ |
| 190 | -#define MT_MIB_RSCR27(_band) MT_WF_MIB(_band, 0x954) |
| 191 | +#define MT_MIB_RSCR27(_band) MT_WF_MIB(_band, __OFFS(MIB_RSCR27)) |
| 192 | |
| 193 | /* rx ampdu bytes count, 32-bit */ |
| 194 | -#define MT_MIB_RSCR28(_band) MT_WF_MIB(_band, 0x958) |
| 195 | +#define MT_MIB_RSCR28(_band) MT_WF_MIB(_band, __OFFS(MIB_RSCR28)) |
| 196 | |
| 197 | /* rx ampdu valid subframe count */ |
| 198 | -#define MT_MIB_RSCR29(_band) MT_WF_MIB(_band, 0x95c) |
| 199 | +#define MT_MIB_RSCR29(_band) MT_WF_MIB(_band, __OFFS(MIB_RSCR29)) |
| 200 | |
| 201 | /* rx ampdu valid subframe bytes count, 32bits */ |
| 202 | -#define MT_MIB_RSCR30(_band) MT_WF_MIB(_band, 0x960) |
| 203 | +#define MT_MIB_RSCR30(_band) MT_WF_MIB(_band, __OFFS(MIB_RSCR30)) |
| 204 | |
| 205 | /* remaining windows protected stats */ |
| 206 | #define MT_MIB_SDR27(_band) MT_WF_MIB(_band, 0x080) |
| 207 | @@ -228,18 +258,18 @@ enum base_rev { |
| 208 | #define MT_MIB_SDR28(_band) MT_WF_MIB(_band, 0x084) |
| 209 | #define MT_MIB_SDR28_TX_RWP_NEED_CNT GENMASK(15, 0) |
| 210 | |
| 211 | -#define MT_MIB_RVSR1(_band) MT_WF_MIB(_band, 0x724) |
| 212 | +#define MT_MIB_RVSR1(_band) MT_WF_MIB(_band, __OFFS(MIB_RVSR1)) |
| 213 | |
| 214 | /* rx blockack count, 32 bits */ |
| 215 | #define MT_MIB_TSCR1(_band) MT_WF_MIB(_band, 0x6b4) |
| 216 | |
| 217 | #define MT_MIB_BTSCR0(_band) MT_WF_MIB(_band, 0x5e0) |
| 218 | -#define MT_MIB_BTSCR5(_band) MT_WF_MIB(_band, 0x788) |
| 219 | -#define MT_MIB_BTSCR6(_band) MT_WF_MIB(_band, 0x798) |
| 220 | +#define MT_MIB_BTSCR5(_band) MT_WF_MIB(_band, __OFFS(MIB_BTSCR5)) |
| 221 | +#define MT_MIB_BTSCR6(_band) MT_WF_MIB(_band, __OFFS(MIB_BTSCR6)) |
| 222 | |
| 223 | #define MT_MIB_BFTFCR(_band) MT_WF_MIB(_band, 0x5d0) |
| 224 | |
| 225 | -#define MT_TX_AGG_CNT(_band, n) MT_WF_MIB(_band, 0xa28 + ((n) << 2)) |
| 226 | +#define MT_TX_AGG_CNT(_band, n) MT_WF_MIB(_band, __OFFS(MIB_TRDR1) + ((n) << 2)) |
| 227 | #define MT_MIB_ARNG(_band, n) MT_WF_MIB(_band, 0x0b0 + ((n) << 2)) |
| 228 | #define MT_MIB_ARNCR_RANGE(val, n) (((val) >> ((n) << 4)) & GENMASK(9, 0)) |
| 229 | |
| 230 | -- |
| 231 | 2.18.0 |
| 232 | |