1 /*
2  * Copyright(c) 2022 AMD
3  * SPDX-License-Identifier: Apache-2.0
4  *
5  * Author:      Basavaraj Hiregoudar <basavaraj.hiregoudar@amd.com>
6  * DineshKumar Kalva <dineshkumar.kalva@amd.com>
7  */
8 #ifndef ZEPHYR_SOC_AMD_ADSP_MEMORY_H_
9 #define ZEPHYR_SOC_AMD_ADSP_MEMORY_H_
10 
11 #define PLATFORM_CORE_COUNT      1
12 #define PLATFORM_PRIMARY_CORE_ID 0
13 
14 #define IRAM_BASE 0x7F000000
15 #define IRAM_SIZE 0x60000
16 
17 #define IRAM_RESERVE_HEADER_SPACE 0x400
18 
19 #define MEM_RESET_TEXT_SIZE             0x400
20 #define MEM_RESET_LIT_SIZE              0x8
21 #define XCHAL_RESET_VECTOR_PADDR_IRAM   0x7F000000
22 #define XCHAL_WINDOW_VECTORS_PADDR_IRAM 0x7F000400
23 
24 #define XCHAL_VECBASE_RESET_PADDR_IRAM (IRAM_BASE + IRAM_RESERVE_HEADER_SPACE)
25 
26 #define MEM_VECBASE_LIT_SIZE 0x178
27 #define MEM_WIN_TEXT_SIZE    0x178
28 
29 /* Vector and literal sizes - not in core-isa.h */
30 #define MEM_VECT_LIT_SIZE  0x7
31 #define MEM_VECT_TEXT_SIZE 0x37
32 
33 #define XCHAL_INTLEVEL2_VECTOR_PADDR_IRAM (XCHAL_VECBASE_RESET_PADDR_IRAM + 0x180)
34 
35 #define XCHAL_INTLEVEL3_VECTOR_PADDR_IRAM (XCHAL_VECBASE_RESET_PADDR_IRAM + 0x1C0)
36 
37 #define XCHAL_INTLEVEL4_VECTOR_PADDR_IRAM (XCHAL_VECBASE_RESET_PADDR_IRAM + 0x200)
38 
39 #define XCHAL_INTLEVEL5_VECTOR_PADDR_IRAM (XCHAL_VECBASE_RESET_PADDR_IRAM + 0x240)
40 
41 #define XCHAL_INTLEVEL6_VECTOR_PADDR_IRAM (XCHAL_VECBASE_RESET_PADDR_IRAM + 0x280)
42 
43 #define XCHAL_INTLEVEL7_VECTOR_PADDR_IRAM (XCHAL_VECBASE_RESET_PADDR_IRAM + 0x2C0)
44 
45 #define XCHAL_KERNEL_VECTOR_PADDR_IRAM (XCHAL_VECBASE_RESET_PADDR_IRAM + 0x300)
46 
47 #define XCHAL_USER_VECTOR_PADDR_IRAM (XCHAL_VECBASE_RESET_PADDR_IRAM + 0x340)
48 
49 #define XCHAL_DOUBLEEXC_VECTOR_PADDR_IRAM (XCHAL_VECBASE_RESET_PADDR_IRAM + 0x3C0)
50 
51 /* Location for the intList section which is later used to construct the
52  * Interrupt Descriptor Table (IDT). This is a bogus address as this
53  * section will be stripped off in the final image.
54  */
55 #define IDT_BASE               (IRAM_BASE + IRAM_SIZE)
56 /* size of the Interrupt Descriptor Table (IDT) */
57 #define IDT_SIZE               0x2000
58 /* physical DSP addresses */
59 #define IRAM_BASE              0x7F000000
60 #define IRAM_SIZE              0x60000    /* 384K */
61 #define SRAM0_BASE             0x9FF00000 /* Scratch mem */
62 #define SRAM1_BASE             0x60006000
63 #define SRAM1_SIZE             0x80000 /* 256K Data Mem */
64 #define DRAM0_BASE             0xE0000000
65 #define DRAM0_SIZE             0x20000 /* 128K ,to use for heap mem */
66 #define DMA0_BASE              PU_REGISTER_BASE
67 #define DMA0_SIZE              0x4
68 #define PU_REGISTER_BASE       (0x9FD00000 - 0x01240000)
69 #define ACP_I2S_RX_RINGBUFADDR 0x1242000
70 /* DAI DMA register base address */
71 #define DAI_BASE               (PU_REGISTER_BASE + ACP_I2S_RX_RINGBUFADDR)
72 #define DAI_BASE_REM           (PU_REGISTER_BASE + ACP_P1_I2S_RX_RINGBUFADDR)
73 #define DAI_SIZE               0x4
74 #define BT_TX_FIFO_OFFST       (ACP_P1_BT_TX_FIFOADDR - ACP_P1_I2S_RX_RINGBUFADDR)
75 #define BT_RX_FIFO_OFFST       (ACP_P1_BT_RX_FIFOADDR - ACP_P1_I2S_RX_RINGBUFADDR)
76 #define HS_TX_FIFO_OFFST       (ACP_P1_HS_TX_FIFOADDR - ACP_P1_I2S_RX_RINGBUFADDR)
77 #define HS_RX_FIFO_OFFST       (ACP_P1_HS_TX_FIFOADDR - ACP_P1_I2S_RX_RINGBUFADDR)
78 #define UUID_ENTRY_ELF_BASE    0x1FFFA000
79 #define UUID_ENTRY_ELF_SIZE                                                                        \
80 	0x6000 /* Log buffer  base need to be updated properly, these are used in linker scripts   \
81 		*/
82 #define LOG_ENTRY_ELF_BASE    0x20000000
83 #define LOG_ENTRY_ELF_SIZE    0x2000000
84 #define EXT_MANIFEST_ELF_BASE (LOG_ENTRY_ELF_BASE + LOG_ENTRY_ELF_SIZE)
85 #define EXT_MANIFEST_ELF_SIZE 0x2000000 /* Stack configuration */
86 #define SOF_STACK_SIZE        0x1000
87 #define SOF_STACK_TOTAL_SIZE  SOF_STACK_SIZE
88 #define SOF_STACK_END         (DRAM0_BASE + DRAM0_SIZE)
89 #define SOF_STACK_BASE        (SOF_STACK_END + SOF_STACK_SIZE) /* Mailbox configuration */
90 #define SRAM_OUTBOX_BASE      SRAM0_BASE
91 #define SRAM_OUTBOX_SIZE      0x400
92 #define SRAM_OUTBOX_OFFSET    0
93 #define SRAM_INBOX_BASE       (SRAM_OUTBOX_BASE + SRAM_OUTBOX_SIZE)
94 #define SRAM_INBOX_SIZE       0x400
95 #define SRAM_INBOX_OFFSET     SRAM_OUTBOX_SIZE
96 #define SRAM_DEBUG_BASE       (SRAM_INBOX_BASE + SRAM_INBOX_SIZE)
97 #define SRAM_DEBUG_SIZE       0x400
98 #define SRAM_DEBUG_OFFSET     (SRAM_INBOX_OFFSET + SRAM_INBOX_SIZE)
99 #define SRAM_EXCEPT_BASE      (SRAM_DEBUG_BASE + SRAM_DEBUG_SIZE)
100 #define SRAM_EXCEPT_SIZE      0x400
101 #define SRAM_EXCEPT_OFFSET    (SRAM_DEBUG_OFFSET + SRAM_DEBUG_SIZE)
102 #define SRAM_STREAM_BASE      (SRAM_EXCEPT_BASE + SRAM_EXCEPT_SIZE)
103 #define SRAM_STREAM_SIZE      0x400
104 #define SRAM_STREAM_OFFSET    (SRAM_EXCEPT_OFFSET + SRAM_EXCEPT_SIZE)
105 #define SRAM_TRACE_BASE       (SRAM_STREAM_BASE + SRAM_STREAM_SIZE)
106 #define SRAM_TRACE_SIZE       0x400
107 #define SRAM_TRACE_OFFSET     (SRAM_STREAM_OFFSET + SRAM_STREAM_SIZE)
108 #define SOF_MAILBOX_SIZE                                                                           \
109 	(SRAM_INBOX_SIZE + SRAM_OUTBOX_SIZE + SRAM_DEBUG_SIZE + SRAM_EXCEPT_SIZE +                 \
110 	 SRAM_STREAM_SIZE + SRAM_TRACE_SIZE)
111 /* Heap section sizes for module pool */
112 #define HEAP_RT_COUNT8        0
113 #define HEAP_RT_COUNT16       48
114 #define HEAP_RT_COUNT32       48
115 #define HEAP_RT_COUNT64       32
116 #define HEAP_RT_COUNT128      60
117 #define HEAP_RT_COUNT256      32
118 #define HEAP_RT_COUNT512      4
119 #define HEAP_RT_COUNT1024     12
120 #define HEAP_RT_COUNT2048     12
121 /* Heap section sizes for system runtime heap */
122 #define HEAP_SYS_RT_COUNT64   64
123 #define HEAP_SYS_RT_COUNT512  20 /*rembrandt-arch*/
124 #define HEAP_SYS_RT_COUNT1024 6
125 /* Heap configuration */
126 #define HEAP_SYSTEM_BASE      DRAM0_BASE /* SRAM1_BASE */
127 #define HEAP_SYSTEM_SIZE      0xE000
128 #define HEAP_SYSTEM_0_BASE    HEAP_SYSTEM_BASE
129 #define HEAP_SYS_RUNTIME_BASE (HEAP_SYSTEM_BASE + HEAP_SYSTEM_SIZE)
130 #define HEAP_SYS_RUNTIME_SIZE                                                                      \
131 	(HEAP_SYS_RT_COUNT64 * 64 + HEAP_SYS_RT_COUNT512 * 512 + HEAP_SYS_RT_COUNT1024 * 1024)
132 #define HEAP_RUNTIME_BASE (HEAP_SYS_RUNTIME_BASE + HEAP_SYS_RUNTIME_SIZE)
133 #define HEAP_RUNTIME_SIZE                                                                          \
134 	(HEAP_RT_COUNT8 * 8 + HEAP_RT_COUNT16 * 16 + HEAP_RT_COUNT32 * 32 + HEAP_RT_COUNT64 * 64 + \
135 	 HEAP_RT_COUNT128 * 128 + HEAP_RT_COUNT256 * 256 + HEAP_RT_COUNT512 * 512 +                \
136 	 HEAP_RT_COUNT1024 * 1024 + HEAP_RT_COUNT2048 * 2048)
137 #define HEAP_BUFFER_BASE                 (HEAP_RUNTIME_BASE + HEAP_RUNTIME_SIZE)
138 #define HEAP_BUFFER_SIZE                 (0xF000)
139 #define HEAP_BUFFER_BLOCK_SIZE           0x180
140 #define HEAP_BUFFER_COUNT                (HEAP_BUFFER_SIZE / HEAP_BUFFER_BLOCK_SIZE)
141 #define PLATFORM_HEAP_SYSTEM             1
142 #define PLATFORM_HEAP_SYSTEM_RUNTIME     1
143 #define PLATFORM_HEAP_RUNTIME            1
144 #define PLATFORM_HEAP_BUFFER             1
145 /* Vector and literal sizes - not in core-isa.h */
146 #define SOF_MEM_VECT_LIT_SIZE            0x7
147 #define SOF_MEM_VECT_TEXT_SIZE           0x37
148 #define SOF_MEM_VECT_SIZE                (SOF_MEM_VECT_TEXT_SIZE + SOF_MEM_VECT_LIT_SIZE)
149 #define SOF_MEM_RESET_TEXT_SIZE          0x400
150 #define SOF_MEM_RESET_LIT_SIZE           0x8
151 #define SOF_MEM_VECBASE_LIT_SIZE         0x178
152 #define SOF_MEM_WIN_TEXT_SIZE            0x178
153 #define SOF_MEM_RO_SIZE                  0x8
154 #define uncache_to_cache(address)        address
155 #define cache_to_uncache(address)        address
156 #define is_uncached(address)             0
157 #define HEAP_BUF_ALIGNMENT               PLATFORM_DCACHE_ALIGN
158 /* brief EDF task's default stack size in bytes */
159 #define PLATFORM_TASK_DEFAULT_STACK_SIZE 3072
160 #endif /* ZEPHYR_SOC_AMD_ADSP_MEMORY_H_ */
161