1 /*
2  * Copyright (c) 2024 Nordic Semiconductor ASA
3  *
4  * SPDX-License-Identifier: BSD-3-Clause
5  */
6 
7 /**
8  * @brief Header containing SoC specific declarations for the
9  * HAL Layer of the Wi-Fi driver.
10  */
11 
12 #ifndef __PAL_H__
13 #define __PAL_H__
14 
15 #include "hal_api_common.h"
16 
17 #define SOC_BOOT_SUCCESS 0
18 #define SOC_BOOT_FAIL 1
19 #define SOC_BOOT_ERRORS 2
20 
21 #ifdef NRF_WIFI_LOW_POWER
22 #define SOC_MMAP_ADDR_RPU_PS_CTRL 0x3FFFFC
23 #endif /* NRF_WIFI_LOW_POWER */
24 
25 #define DEFAULT_IMGPCI_VENDOR_ID 0x0700
26 #define DEFAULT_IMGPCI_DEVICE_ID PCI_ANY_ID
27 #define PCIE_BAR_OFFSET_WLAN_RPU 0x0
28 #define PCIE_DMA_MASK 0xFFFFFFFF
29 
30 
31 #define SOC_MMAP_ADDR_OFFSET_PKTRAM_HOST_VIEW 0x0C0000
32 #define SOC_MMAP_ADDR_OFFSET_PKTRAM_RPU_VIEW 0x380000
33 
34 #ifdef RPU_CONFIG_72
35 #define SOC_MMAP_ADDR_OFFSET_GRAM_PKD 0xC00000
36 #define SOC_MMAP_ADDR_OFFSET_SYSBUS 0xE00000
37 #define SOC_MMAP_ADDR_OFFSET_PBUS 0xE40000
38 #else
39 #define SOC_MMAP_ADDR_OFFSET_GRAM_PKD 0x80000
40 #define SOC_MMAP_ADDR_OFFSET_SYSBUS 0x00000
41 #define SOC_MMAP_ADDR_OFFSET_PBUS 0x40000
42 
43 static const unsigned int SOC_MMAP_ADDR_OFFSETS_MCU[] = {
44 	0x100000,
45 	0x200000
46 };
47 
48 #endif /* RPU_CONFIG_72 */
49 
50 #define RPU_MCU_CORE_INDIRECT_BASE 0xC0000000
51 
52 #define NRF_WIFI_FW_LMAC_PATCH_LOC_PRI "img/wlan/nrf_wifi_lmac_patch_pri.bimg"
53 #define NRF_WIFI_FW_LMAC_PATCH_LOC_SEC "img/wlan/nrf_wifi_lmac_patch_sec.bin"
54 #define NRF_WIFI_FW_UMAC_PATCH_LOC_PRI "img/wlan/nrf_wifi_umac_patch_pri.bimg"
55 #define NRF_WIFI_FW_UMAC_PATCH_LOC_SEC "img/wlan/nrf_wifi_umac_patch_sec.bin"
56 
57 enum nrf_wifi_fw_type {
58 	NRF_WIFI_FW_TYPE_LMAC_PATCH,
59 	NRF_WIFI_FW_TYPE_UMAC_PATCH,
60 	NRF_WIFI_FW_TYPE_MAX
61 };
62 
63 enum nrf_wifi_fw_subtype {
64 	NRF_WIFI_FW_SUBTYPE_PRI,
65 	NRF_WIFI_FW_SUBTYPE_SEC,
66 	NRF_WIFI_FW_SUBTYPE_MAX
67 };
68 
69 bool pal_check_rpu_mcu_regions(enum RPU_PROC_TYPE proc, unsigned int addr_val);
70 
pal_mem_type_to_region(enum HAL_RPU_MEM_TYPE mem_type)71 static inline enum RPU_MCU_ADDR_REGIONS pal_mem_type_to_region(enum HAL_RPU_MEM_TYPE mem_type)
72 {
73 	switch (mem_type) {
74 	case HAL_RPU_MEM_TYPE_CORE_ROM:
75 		return RPU_MCU_ADDR_REGION_ROM;
76 	case HAL_RPU_MEM_TYPE_CORE_RET:
77 		return RPU_MCU_ADDR_REGION_RETENTION;
78 	case HAL_RPU_MEM_TYPE_CORE_SCRATCH:
79 		return RPU_MCU_ADDR_REGION_SCRATCH;
80 	default:
81 		return RPU_MCU_ADDR_REGION_MAX;
82 	}
83 }
84 
85 enum nrf_wifi_status pal_rpu_addr_offset_get(unsigned int rpu_addr,
86 					     unsigned long *addr_offset,
87 					     enum RPU_PROC_TYPE proc);
88 
89 
90 #ifdef NRF_WIFI_LOW_POWER
91 unsigned long pal_rpu_ps_ctrl_reg_addr_get(void);
92 #endif /* NRF_WIFI_LOW_POWER */
93 
94 char *pal_ops_get_fw_loc(enum nrf_wifi_fw_type fw_type,
95 			 enum nrf_wifi_fw_subtype fw_subtype);
96 
97 #endif /* __PAL_H__ */
98