nRF WiFi
Loading...
Searching...
No Matches
rpu_if.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2024 Nordic Semiconductor ASA
3 *
4 * SPDX-License-Identifier: BSD-3-Clause
5 */
6
11#ifndef __RPU_IF_H__
12#define __RPU_IF_H__
13#include "pack_def.h"
14
15/* Beginning address of the global RAM */
16#define RPU_ADDR_GRAM_START 0xB7000000
17/* Ending address of the global RAM */
18#define RPU_ADDR_GRAM_END 0xB70101FF
19/* Beginning address of the system bus register space */
20#define RPU_ADDR_SBUS_START 0xA4000000
21/* Ending address of the system bus register space */
22#define RPU_ADDR_SBUS_END 0xA4007FFF
23/* Beginning address of the peripheral bus register space */
24#define RPU_ADDR_PBUS_START 0xA5000000
25/* Ending address of the peripheral bus register space */
26#define RPU_ADDR_PBUS_END 0xA503FFFF
27/* Beginning address of the MIPS boot exception vector registers */
28#define RPU_ADDR_BEV_START 0xBFC00000
29/* Ending address of the MIPS boot exception vector registers */
30#define RPU_ADDR_BEV_END 0xBFCFFFFF
31/* Beginning address of the packet RAM */
32#define RPU_ADDR_PKTRAM_START 0xB0000000
33/* Ending address of the packet RAM */
34#define RPU_ADDR_PKTRAM_END 0xB0030FFF
35
36/* Starting address of the LMAC MCU (MCU) retention RAM */
37#define RPU_ADDR_LMAC_CORE_RET_START 0x80040000
38/* Starting address of the UMAC MCU (MCU2) retention RAM */
39#define RPU_ADDR_UMAC_CORE_RET_START 0x80080000
40
55
64 unsigned int start;
65 unsigned int end;
66};
67
79
92static const struct rpu_addr_map RPU_ADDR_MAP_MCU[] = {
93 /* MCU - LMAC */
94 {
95 {
96 {0x80000000, 0x80033FFF},
97 {0x80040000, 0x8004BFFF},
98 {0x80080000, 0x8008FFFF}
99 },
100 },
101 /* MCU2 - UMAC */
102 {
103 {
104 {0x80000000, 0x800617FF},
105 {0x80080000, 0x800A3FFF},
106 {0x80100000, 0x80137FFF},
107 }
108 },
109};
110
111/* Number of boot exception vectors for each MCU */
112#define RPU_MCU_MAX_BOOT_VECTORS 4
113
122 unsigned int addr;
123 unsigned int val;
124};
125
134
135/* Base mask for the nRF70 memory map */
136#define RPU_ADDR_MASK_BASE 0xFF000000
137/* Offset mask for the nRF70 memory map */
138#define RPU_ADDR_MASK_OFFSET 0x00FFFFFF
139/* Offset mask for the boot exception vector */
140#define RPU_ADDR_MASK_BEV_OFFSET 0x000FFFFF
141
142/* Address of the nRF70 interrupt register */
143#define RPU_REG_INT_FROM_RPU_CTRL 0xA4000400
144/* Control bit for enabling/disabling of nRF70 interrupts */
145#define RPU_REG_BIT_INT_FROM_RPU_CTRL 17
146
147/* Address of the nRF70 IRQ register */
148#define RPU_REG_INT_TO_MCU_CTRL 0xA4000480
149
150/* Address of the nRF70 interrupt ack register */
151#define RPU_REG_INT_FROM_MCU_ACK 0xA4000488
152/* Bit to set to ack nRF70 interrupt */
153#define RPU_REG_BIT_INT_FROM_MCU_ACK 31
154
155/* Address of the nRF70 UMAC MCU interrupt enable register */
156#define RPU_REG_INT_FROM_MCU_CTRL 0xA4000494
157/* Bit to set to enable UMAC MCU interrupts */
158#define RPU_REG_BIT_INT_FROM_MCU_CTRL 31
159
160/* Address of the nRF70 register which points to LMAC patch memory address */
161#define RPU_REG_UCC_SLEEP_CTRL_DATA_0 0xA4002C2C
162/* Address of the nRF70 register which points to UMAC patch memory address */
163#define RPU_REG_UCC_SLEEP_CTRL_DATA_1 0xA4002C30
164/* Address of the register to soft reset the LMAC MCU */
165#define RPU_REG_MIPS_MCU_CONTROL 0xA4000000
166/* Address of the register to soft reset the UMAC MCU */
167#define RPU_REG_MIPS_MCU2_CONTROL 0xA4000100
168
169/* Address of the nRF70 interrupt status register */
170#define RPU_REG_MIPS_MCU_UCCP_INT_STATUS 0xA4000004
171/* Bit to check for watchdog interrupt */
172#define RPU_REG_BIT_MIPS_WATCHDOG_INT_STATUS 1
173
174/* Address of the nRF70 watchdog timer register */
175#define RPU_REG_MIPS_MCU_TIMER 0xA400004C /* 24 bit timer@core clock ticks*/
176/* Default watchdog timer value */
177#define RPU_REG_MIPS_MCU_TIMER_RESET_VAL 0xFFFFFF
178
179/* Address of the nRF70 watchdog interrupt clear register */
180#define RPU_REG_MIPS_MCU_UCCP_INT_CLEAR 0xA400000C
181/* Bit to clear the watchdog interrupt */
182#define RPU_REG_BIT_MIPS_WATCHDOG_INT_CLEAR 1
183
184/* Registers to control indirect access to LMAC MCU local memory */
185/* The MCU local memory address needs to be programmed to the control register */
186#define RPU_REG_MIPS_MCU_SYS_CORE_MEM_CTRL 0xA4000030
187/* The data to be written to the MCU local memory needs to be programmed to the data register */
188#define RPU_REG_MIPS_MCU_SYS_CORE_MEM_WDATA 0xA4000034
189
190/* Boot exception vector registers for the LMAC MCU */
191#define RPU_REG_MIPS_MCU_BOOT_EXCP_INSTR_0 0xA4000050
192#define RPU_REG_MIPS_MCU_BOOT_EXCP_INSTR_1 0xA4000054
193#define RPU_REG_MIPS_MCU_BOOT_EXCP_INSTR_2 0xA4000058
194#define RPU_REG_MIPS_MCU_BOOT_EXCP_INSTR_3 0xA400005C
195
196/* Registers to control indirect access to LMAC MCU local memory */
197/* The MCU local memory address needs to be programmed to the control register */
198#define RPU_REG_MIPS_MCU2_SYS_CORE_MEM_CTRL 0xA4000130
199/* The data to be written to the MCU local memory needs to be programmed to the data register */
200#define RPU_REG_MIPS_MCU2_SYS_CORE_MEM_WDATA 0xA4000134
201/* Boot exception vector registers for the LMAC MCU */
202#define RPU_REG_MIPS_MCU2_BOOT_EXCP_INSTR_0 0xA4000150
203#define RPU_REG_MIPS_MCU2_BOOT_EXCP_INSTR_1 0xA4000154
204#define RPU_REG_MIPS_MCU2_BOOT_EXCP_INSTR_2 0xA4000158
205#define RPU_REG_MIPS_MCU2_BOOT_EXCP_INSTR_3 0xA400015C
206
207/* Bit which controls the power state of the nRF70 */
208#define RPU_REG_BIT_PS_CTRL 0
209/* Bit which indicates hardware bus ready state of the nRF70 */
210#define RPU_REG_BIT_PS_STATE 1
211/* Bit which indicates the firmware readiness of the nRF70 */
212#define RPU_REG_BIT_READY_STATE 2
213/* Address which has information about the RX command base */
214#define RPU_MEM_RX_CMD_BASE 0xB7000D58
215
216/* Address which has information about the host port queue manager (HPQM) */
217#define RPU_MEM_HPQ_INFO 0xB0000024
218/* Address which has information about the TX command base */
219#define RPU_MEM_TX_CMD_BASE 0xB00000B8
220
221/* Address which has OTP location containing the factory test program version */
222#define RPU_MEM_OTP_FT_PROG_VERSION 0xB0004FD8
223/* Address which has the OTP flags */
224#define RPU_MEM_OTP_INFO_FLAGS 0xB0004FDC
225/* Address which has the OTP package type */
226#define RPU_MEM_OTP_PACKAGE_TYPE 0xB0004FD4
227
228/* Base address of the area where TX/RX packet buffers can be programmed for transmission/reception */
229#define RPU_MEM_PKT_BASE 0xB0005000
230/* Magic value to indicate start of the command counter synchronization between host and nRF70 */
231#define RPU_CMD_START_MAGIC 0xDEAD
232/* Maximum size of the RX data command */
233#define RPU_DATA_CMD_SIZE_MAX_RX 8
234/* Maximum size of the TX data command */
235#define RPU_DATA_CMD_SIZE_MAX_TX 148
236/* Maximum size of the most common events */
237#define RPU_EVENT_COMMON_SIZE_MAX 128
238
239/* Maximum event size */
240#define MAX_EVENT_POOL_LEN 1000
241/* Maximum number of RX queues */
242#define MAX_NUM_OF_RX_QUEUES 3
243
244/* Packet RAM size in the nRF70 */
245#define RPU_PKTRAM_SIZE (RPU_ADDR_PKTRAM_END - RPU_MEM_PKT_BASE + 1)
246
247/* Base address of the area where ADC output IQ samples are stored */
248#define RPU_MEM_RF_TEST_CAP_BASE 0xB0006000
249
250/* OTP address offsets (word offsets) */
251#define REGION_PROTECT 64
252#define PRODTEST_FT_PROGVERSION 29
253#define PRODTEST_TRIM0 32
254#define PRODTEST_TRIM1 33
255#define PRODTEST_TRIM2 34
256#define PRODTEST_TRIM3 35
257#define PRODTEST_TRIM4 36
258#define PRODTEST_TRIM5 37
259#define PRODTEST_TRIM6 38
260#define PRODTEST_TRIM7 39
261#define PRODTEST_TRIM8 40
262#define PRODTEST_TRIM9 41
263#define PRODTEST_TRIM10 42
264#define PRODTEST_TRIM11 43
265#define PRODTEST_TRIM12 44
266#define PRODTEST_TRIM13 45
267#define PRODTEST_TRIM14 46
268#define INFO_PART 48
269#define INFO_VARIANT 49
270#define INFO_UUID 52
271#define QSPI_KEY 68
272#define MAC0_ADDR 72
273#define MAC1_ADDR 74
274#define CALIB_XO 76
275#define REGION_DEFAULTS 85
276#define PRODRETEST_PROGVERSION 86
277#define PRODRETEST_TRIM0 87
278#define PRODRETEST_TRIM1 88
279#define PRODRETEST_TRIM2 89
280#define PRODRETEST_TRIM3 90
281#define PRODRETEST_TRIM4 91
282#define PRODRETEST_TRIM5 92
283#define PRODRETEST_TRIM6 93
284#define PRODRETEST_TRIM7 94
285#define PRODRETEST_TRIM8 95
286#define PRODRETEST_TRIM9 96
287#define PRODRETEST_TRIM10 97
288#define PRODRETEST_TRIM11 98
289#define PRODRETEST_TRIM12 99
290#define PRODRETEST_TRIM13 100
291#define PRODRETEST_TRIM14 101
292#define OTP_MAX_WORD_LEN 128
293#define QSPI_KEY_LENGTH_BYTES 16
294#define RETRIM_LEN 15
295
296/* Size of XO calibration value stored in the OTP field CALIB_XO */
297#define OTP_SZ_CALIB_XO 1
298
299/* Byte offsets of XO calib value in CALIB_XO field in the OTP */
300#define OTP_OFF_CALIB_XO 0
301
302/* Masks to program bit fields in REGION_DEFAULTS field in the OTP */
303#define QSPI_KEY_FLAG_MASK ~(1U<<0)
304#define MAC0_ADDR_FLAG_MASK ~(1U<<1)
305#define MAC1_ADDR_FLAG_MASK ~(1U<<2)
306#define CALIB_XO_FLAG_MASK ~(1U<<3)
307
308/* RF register address to facilitate OTP access */
309#define OTP_VOLTCTRL_ADDR 0x19004
310/* Voltage value to be written into the above RF register for OTP write access */
311#define OTP_VOLTCTRL_2V5 0x3b
312/* Voltage value to be written into the above RF register for OTP read access */
313#define OTP_VOLTCTRL_1V8 0xb
314
315#define OTP_POLL_ADDR 0x01B804
316#define OTP_WR_DONE 0x1
317#define OTP_READ_VALID 0x2
318#define OTP_READY 0x4
319
320
321#define OTP_RWSBMODE_ADDR 0x01B800
322#define OTP_READ_MODE 0x1
323#define OTP_BYTE_WRITE_MODE 0x42
324
325
326#define OTP_RDENABLE_ADDR 0x01B810
327#define OTP_READREG_ADDR 0x01B814
328
329#define OTP_WRENABLE_ADDR 0x01B808
330#define OTP_WRITEREG_ADDR 0x01B80C
331
332#define OTP_TIMING_REG1_ADDR 0x01B820
333#define OTP_TIMING_REG1_VAL 0x0
334#define OTP_TIMING_REG2_ADDR 0x01B824
335#define OTP_TIMING_REG2_VAL 0x030D8B
336
337#define OTP_FRESH_FROM_FAB 0xFFFFFFFF
338#define OTP_PROGRAMMED 0x00000000
339#define OTP_ENABLE_PATTERN 0x50FA50FA
340#define OTP_INVALID 0xDEADBEEF
341
342#define FT_PROG_VER_MASK 0xF0000
343
352 unsigned int addr;
354
362 unsigned int enqueue_addr;
364 unsigned int dequeue_addr;
366
388
396 unsigned int len;
400 unsigned int resubmit;
402
403#endif /* __RPU_IF_H__ */
#define __NRF_WIFI_PKD
Definition pack_def.h:27
static const struct rpu_addr_map RPU_ADDR_MAP_MCU[]
Memory map of the MCUs in the RPU.
Definition rpu_if.h:92
#define RPU_MCU_MAX_BOOT_VECTORS
Definition rpu_if.h:112
#define MAX_NUM_OF_RX_QUEUES
Definition rpu_if.h:242
RPU_MCU_ADDR_REGIONS
Regions in the MCU local memory.
Definition rpu_if.h:49
@ RPU_MCU_ADDR_REGION_SCRATCH
Definition rpu_if.h:52
@ RPU_MCU_ADDR_REGION_ROM
Definition rpu_if.h:50
@ RPU_MCU_ADDR_REGION_MAX
Definition rpu_if.h:53
@ RPU_MCU_ADDR_REGION_RETENTION
Definition rpu_if.h:51
unsigned int dequeue_addr
Definition rpu_if.h:364
unsigned int enqueue_addr
Definition rpu_if.h:362
Hostport Queue (HPQ) information.
Definition rpu_if.h:360
struct host_rpu_hpq cmd_busy_queue
Definition rpu_if.h:380
struct host_rpu_hpq event_avl_queue
Definition rpu_if.h:378
struct host_rpu_hpq cmd_avl_queue
Definition rpu_if.h:384
struct host_rpu_hpq event_busy_queue
Definition rpu_if.h:376
struct host_rpu_hpq rx_buf_busy_queue[3]
Definition rpu_if.h:386
Information about Hostport Queues (HPQ) to be used for exchanging information between the Host and RP...
Definition rpu_if.h:374
unsigned int len
Definition rpu_if.h:396
unsigned int resubmit
Definition rpu_if.h:400
Common header included in each command/event. This structure encapsulates the common information incl...
Definition rpu_if.h:394
unsigned int addr
Definition rpu_if.h:352
RX buffer related information to be passed to nRF70.
Definition rpu_if.h:350
struct rpu_addr_region regions[RPU_MCU_ADDR_REGION_MAX]
Definition rpu_if.h:77
Address map of the MCU memory.
Definition rpu_if.h:76
unsigned int start
Definition rpu_if.h:64
unsigned int end
Definition rpu_if.h:65
Address limits of each MCU local memory region.
Definition rpu_if.h:63
unsigned int val
Definition rpu_if.h:123
unsigned int addr
Definition rpu_if.h:122
Boot vector definition for a MCU in nRF70.
Definition rpu_if.h:121
struct rpu_mcu_boot_vector vectors[4]
Definition rpu_if.h:132
Boot vectors for the MCUs in nRF70.
Definition rpu_if.h:131