1cpu: CPU.CortexM @ sysbus
2    cpuType: "cortex-m4f"
3    nvic: nvic
4
5nvic: IRQControllers.NVIC @ sysbus 0xE000E000
6    -> cpu@0
7
8dwt: Miscellaneous.DWT @ sysbus 0xE0001000
9    frequency: 72000000
10
11rom: Memory.MappedMemory @ sysbus 0x00000000
12    size: 0x10000
13
14code_ram: Memory.MappedMemory @ {
15        sysbus 0x10058000;
16        sysbus 0x20058000
17    }
18    size: 0x68000
19
20data_ram: Memory.MappedMemory @ {
21        sysbus 0x200C0000;
22        sysbus 0x100C0000
23    }
24    size: 0x17800
25
26battery_backed_ram: Memory.MappedMemory @ sysbus 0x400AF000
27    // Size should be 0x40
28    size: 0x400
29
30internal_flash: Memory.MappedMemory @ sysbus 0x64000000
31    size: 0x100000
32
33nvicIrq33: Miscellaneous.CombinedInput @ none
34    numberOfInputs: 2
35    -> nvic@33
36
37nvicIrq32: Miscellaneous.CombinedInput @ none
38    numberOfInputs: 2
39    -> nvic@32
40
41nvicIrq38: Miscellaneous.CombinedInput @ none
42    numberOfInputs: 2
43    -> nvic@38
44
45nvicIrq39: Miscellaneous.CombinedInput @ none
46    numberOfInputs: 2
47    -> nvic@39
48
49cr_uart1: UART.NPCX_UART @ sysbus 0x400E0000
50    IRQ -> nvicIrq33@0
51    DMAReceive -> mdma1@0
52
53cr_uart2: UART.NPCX_UART @ sysbus 0x400E2000
54    IRQ -> nvicIrq32@0
55    DMAReceive -> mdma2@0
56
57cr_uart3: UART.NPCX_UART @ sysbus 0x400E4000
58    IRQ -> nvicIrq38@0
59    DMAReceive -> mdma3@0
60
61cr_uart4: UART.NPCX_UART @ sysbus 0x400E6000
62    IRQ -> nvicIrq39@0
63    DMAReceive -> mdma4@0
64
65itim32_1: Timers.NPCX_ITIM @ sysbus 0x400B0000
66    -> nvic@28
67
68itim32_2: Timers.NPCX_ITIM @ sysbus 0x400B2000
69    -> nvic@27
70
71itim32_3: Timers.NPCX_ITIM @ sysbus 0x400B4000
72    -> nvic@17
73
74itim32_4: Timers.NPCX_ITIM @ sysbus 0x400B6000
75    -> nvic@43
76
77itim32_5: Timers.NPCX_ITIM @ sysbus 0x400B8000
78    -> nvic@44
79
80itim32_6: Timers.NPCX_ITIM @ sysbus 0x400BA000
81    -> nvic@45
82
83itim64: Timers.NPCX_ITIM @ sysbus 0x400BE000
84    is64Bit: true
85    -> nvic@58
86
87image_type: Memory.ArrayMemory @ sysbus 0x4000C009
88    size: 0x1
89
90twd: Timers.NPCX_TWD @ sysbus 0x400D8000
91    -> nvic@31
92
93mtc: Timers.NPCX_MTC @ sysbus 0x400B7000
94    -> nvic@5
95
96mdma1: DMA.NPCX_MDMA @ sysbus 0x40011100
97    sourceAddress: 0x400E0002
98    destinationAddress: 0x400E0000
99    -> nvicIrq33@1
100
101mdma2: DMA.NPCX_MDMA @ sysbus 0x40011200
102    sourceAddress: 0x400E2002
103    destinationAddress: 0x400E2000
104    -> nvicIrq32@1
105
106mdma3: DMA.NPCX_MDMA @ sysbus 0x40011300
107    sourceAddress: 0x400E4002
108    destinationAddress: 0x400E4000
109    -> nvicIrq38@1
110
111mdma4: DMA.NPCX_MDMA @ sysbus 0x40011400
112    sourceAddress: 0x400E6002
113    destinationAddress: 0x400E6000
114    -> nvicIrq39@1
115
116mdma5: DMA.NPCX_MDMA @ sysbus 0x40011500
117    // For MDMA5 the source and destination addresses can be different
118    // based on the state of `I3C_MS` flag in the `DEV_CTL3` register
119    // of the System Configuration peripheral.
120    // This is currently not implemented.
121    sourceAddress: 0x400E00C0
122    destinationAddress: 0x400E00B0
123
124spip: SPI.NPCX_SPIP @ sysbus 0x400D2000
125
126lfcg: Miscellaneous.NPCX_LFCG @ sysbus 0x400B5100
127
128hfcg: Miscellaneous.NPCX_HFCG @ sysbus 0x400B5000
129
130fiu: SPI.NPCX_FIU @ sysbus 0x40020000
131
132internal_flash_controller: SPI.NPCX_Flash @ fiu
133    memory: internal_flash
134
135gpio0: GPIOPort.NPCX_GPIO @ sysbus 0x40081000
136
137gpio1: GPIOPort.NPCX_GPIO @ sysbus 0x40083000
138
139gpio2: GPIOPort.NPCX_GPIO @ sysbus 0x40085000
140
141gpio3: GPIOPort.NPCX_GPIO @ sysbus 0x40087000
142
143gpio4: GPIOPort.NPCX_GPIO @ sysbus 0x40089000
144
145gpio5: GPIOPort.NPCX_GPIO @ sysbus 0x4008B000
146
147gpio6: GPIOPort.NPCX_GPIO @ sysbus 0x4008D000
148
149gpio7: GPIOPort.NPCX_GPIO @ sysbus 0x4008F000
150
151gpio8: GPIOPort.NPCX_GPIO @ sysbus 0x40091000
152
153gpio9: GPIOPort.NPCX_GPIO @ sysbus 0x40093000
154
155gpioa: GPIOPort.NPCX_GPIO @ sysbus 0x40095000
156
157gpiob: GPIOPort.NPCX_GPIO @ sysbus 0x40097000
158
159gpioc: GPIOPort.NPCX_GPIO @ sysbus 0x40099000
160
161gpiod: GPIOPort.NPCX_GPIO @ sysbus 0x4009B000
162
163gpioe: GPIOPort.NPCX_GPIO @ sysbus 0x4009D000
164
165gpiof: GPIOPort.NPCX_GPIO @ sysbus 0x4009F000
166
167smbus0: I2C.NPCX_SMBus @ sysbus 0x40009000
168    IRQ -> nvic@13
169
170smbus1: I2C.NPCX_SMBus @ sysbus 0x4000B000
171    IRQ -> nvic@14
172
173smbus2: I2C.NPCX_SMBus @ sysbus 0x400C0000
174    IRQ -> nvic@36
175
176smbus3: I2C.NPCX_SMBus @ sysbus 0x400C2000
177    IRQ -> nvic@37
178
179smbus4: I2C.NPCX_SMBus @ sysbus 0x40008000
180    IRQ -> nvic@19
181
182smbus5: I2C.NPCX_SMBus @ sysbus 0x40017000
183    IRQ -> nvic@20
184
185smbus6: I2C.NPCX_SMBus @ sysbus 0x40018000
186    IRQ -> nvic@16
187
188smbus7: I2C.NPCX_SMBus @ sysbus 0x40019000
189    IRQ -> nvic@8
190
191// DEV_CTL4 register from the System Configuration peripheral
192// Its `Write-Protect Internal Flash` bit is used to force
193// write protection of the internal flash
194DEV_CTL4: Python.PythonPeripheral @ sysbus 0x400C3006
195    size: 0x1
196    initable: true
197    script: '''
198if request.isInit:
199    value = 0xA
200    is_locked = False
201    WRITE_PROTECTION = (1 << 5)
202
203elif request.isRead:
204    request.value = value
205
206elif request.isWrite:
207    if is_locked:
208        request.value |= WRITE_PROTECTION
209    elif request.value & WRITE_PROTECTION:
210        is_locked = True
211        # This signal (WP) is active-low
212        self.GetMachine()["sysbus.fiu.internal_flash_controller"].OnGPIO(0, False)
213        value = request.value
214
215    value = request.value
216'''
217
218// SWRST_CTL4 register from the System Configuration peripheral
219SWRST_CTL4: Python.PythonPeripheral @ sysbus 0x400C3110
220    size: 0x4
221    initable: true
222    script: '''
223if request.isInit:
224    MDMA2_RESET = (1 << 25)
225elif request.isWrite:
226    if request.value & MDMA2_RESET:
227        self.GetMachine()["sysbus.mdma2"].Reset()
228'''
229
230// Mocking "Power Management Channel (PMCH) device registers", as RW memory
231pm1: Memory.ArrayMemory @ sysbus 0x400C9000
232    size: 0x100
233
234pm2: Memory.ArrayMemory @ sysbus 0x400CB000
235    size: 0x100
236
237pm3: Memory.ArrayMemory @ sysbus 0x400CD000
238    size: 0x100
239
240pm4: Memory.ArrayMemory @ sysbus 0x400CF000
241    size: 0x100
242
243sysbus:
244    init:
245        // Script contains implementation for select bootrom functions
246        // that on hardware would be present in board's read-only memory
247        Machine ExecutePythonFromFile @scripts/pydev/nuvoton_npcx9_bootrom.py
248
249        Tag <0x400C3000 0x400> "System Configuration"
250        Tag <0x400C3100 0x2>   "SWRST_TRG" 0xFFFF
251        Tag <0x400F8000 0x400> "FLM"
252        Tag <0x40011000 0x100> "GDMA"
253        Tag <0x400BB000 0x100> "MIWU0"
254        Tag <0x400BD000 0x100> "MIWU1"
255        Tag <0x400BF000 0x100> "MIWU2"
256        Tag <0x400A3000 0x100> "Keyboard scan"
257        Tag <0x400A5000 0x100> "System Glue Functions"
258        Tag <0x400B1000 0x100> "PS/2"
259        Tag <0x400E1000 0x100> "MTF16-1"
260        Tag <0x400E3000 0x100> "MTF16-2"
261        Tag <0x400E5000 0x100> "MTF16-3"
262        Tag <0x400D7000 0x100> "LTC"
263        Tag <0x40080000 0x100> "PWM0"
264        Tag <0x40082000 0x100> "PWM1"
265        Tag <0x40084000 0x100> "PWM2"
266        Tag <0x40086000 0x100> "PWM3"
267        Tag <0x40088000 0x100> "PWM4"
268        Tag <0x4008A000 0x100> "PWM5"
269        Tag <0x4008C000 0x100> "PWM6"
270        Tag <0x4008E000 0x100> "PWM7"
271        Tag <0x400D1000 0x100> "ADC"
272        Tag <0x40009000 0x100> "SMBUS0"
273        Tag <0x4000B000 0x100> "SMBUS1"
274        Tag <0x400C0000 0x100> "SMBUS2"
275        Tag <0x400C2000 0x100> "SMBUS3"
276        Tag <0x40008000 0x100> "SMBUS4"
277        Tag <0x40017000 0x100> "SMBUS5"
278        Tag <0x40018000 0x100> "SMBUS6"
279        Tag <0x40019000 0x100> "SMBUS7"
280        Tag <0x400D4000 0x100> "PECI"
281        Tag <0x4000F000 0x200> "SHI"
282        Tag <0x400AF100 0x100> "BBRM"
283        Tag <0x4000C000 0x100> "MDC"
284        Tag <0x40007000 0x100> "OTPI"
285        Tag <0x4000D000 0x100> "PMC"
286        Tag <0x400C3000 0x100> "Debugger Interface"
287        Tag <0x400C7000 0x100> "Keyboard and Mouse Interface"
288        Tag <0x400C9000 0x100> "PM1"
289        Tag <0x400CB000 0x100> "PM2"
290        Tag <0x400CD000 0x100> "PM3"
291        Tag <0x400CF000 0x100> "PM4"
292        Tag <0x4000E000 0x100> "Host Modules"
293        Tag <0x40010000 0x80> "SHM"
294        Tag <0x40010080 0x80> "eSHM"
295        Tag <0x400C1000 0x100> "MSWC"
296        Tag <0x4000A000 0x100> "eSPI_SIF"
297