|
12 | 12 | */ |
13 | 13 | #if defined(CONFIG_SOC_MT8186) |
14 | 14 | #define MTK_AFE_BASE 0x11210000 |
| 15 | +#define SRAM_CPU_START 0x10800000 |
15 | 16 | #elif defined(CONFIG_SOC_SERIES_MT818X) |
16 | 17 | #define MTK_AFE_BASE 0x10b10000 |
| 18 | +#define SRAM_CPU_START 0x10d00000 |
17 | 19 | #elif defined(CONFIG_SOC_MT8195) |
18 | 20 | #define MTK_AFE_BASE 0x10890000 |
| 21 | +#define SRAM_CPU_START 0x10840000 |
19 | 22 | #elif defined(CONFIG_SOC_MT8196) |
20 | 23 | #define MTK_AFE_BASE 0x1a110000 |
| 24 | +#define SRAM_CPU_START 0x1a210000 |
21 | 25 | #else |
22 | 26 | #error Unrecognized device |
23 | 27 | #endif |
24 | 28 |
|
| 29 | +#define SRAM_ADSP_START DT_REG_ADDR(DT_NODELABEL(sram0)) |
| 30 | +#define SRAM_SIZE DT_REG_SIZE(DT_NODELABEL(sram0)) |
| 31 | +#define SRAM_ADSP_END (SRAM_ADSP_START + SRAM_SIZE) |
| 32 | +#define SRAM_CPU_END (SRAM_CPU_START + SRAM_SIZE) |
| 33 | + |
25 | 34 | /* Bitfield register: address, left shift amount, and number of bits */ |
26 | 35 | struct afe_bitfld { |
27 | 36 | uint32_t reg; |
@@ -199,6 +208,28 @@ static const struct dai_info mtk_dai_info = { |
199 | 208 | .num_dai_types = ARRAY_SIZE(mtk_dai_types), |
200 | 209 | }; |
201 | 210 |
|
| 211 | +#if defined(CONFIG_SOC_SERIES_MT818X) || defined(CONFIG_SOC_MT8195) |
| 212 | +static unsigned int mtk_afe2adsp_addr(unsigned int addr) |
| 213 | +{ |
| 214 | + /* CPU -> ADSP address remap */ |
| 215 | + if ((addr >= SRAM_CPU_START) && (addr < SRAM_CPU_END)) { |
| 216 | + addr = SRAM_ADSP_START + (addr - SRAM_CPU_START); |
| 217 | + } |
| 218 | + |
| 219 | + return addr; |
| 220 | +} |
| 221 | + |
| 222 | +static unsigned int mtk_adsp2afe_addr(unsigned int addr) |
| 223 | +{ |
| 224 | + /* ADSP -> CPU address remap */ |
| 225 | + if ((addr >= SRAM_ADSP_START) && (addr < SRAM_ADSP_END)) { |
| 226 | + addr = SRAM_CPU_START + (addr - SRAM_ADSP_START); |
| 227 | + } |
| 228 | + |
| 229 | + return addr; |
| 230 | +} |
| 231 | +#endif |
| 232 | + |
202 | 233 | /* Static table of fs register values. TODO: binary search */ |
203 | 234 | static unsigned int mtk_afe_fs_timing(unsigned int rate) |
204 | 235 | { |
@@ -279,6 +310,10 @@ struct mtk_base_afe_platform mtk_afe_platform = { |
279 | 310 | .dais_size = ARRAY_SIZE(mtk_dais), |
280 | 311 | .afe_fs = mtk_afe_fs, |
281 | 312 | .irq_fs = mtk_afe_fs_timing, |
| 313 | +#if defined(CONFIG_SOC_SERIES_MT818X) || defined(CONFIG_SOC_MT8195) |
| 314 | + .afe2adsp_addr = mtk_afe2adsp_addr, |
| 315 | + .adsp2afe_addr = mtk_adsp2afe_addr, |
| 316 | +#endif |
282 | 317 | }; |
283 | 318 |
|
284 | 319 | int mtk_dai_init(struct sof *sof) |
|
0 commit comments