xref: /aosp_15_r20/external/arm-trusted-firmware/include/drivers/brcm/chimp.h (revision 54fd6939e177f8ff529b10183254802c76df6d08)
1*54fd6939SJiyong Park /*
2*54fd6939SJiyong Park  * Copyright (c) 2016 - 2020, Broadcom
3*54fd6939SJiyong Park  *
4*54fd6939SJiyong Park  * SPDX-License-Identifier: BSD-3-Clause
5*54fd6939SJiyong Park  */
6*54fd6939SJiyong Park 
7*54fd6939SJiyong Park #ifndef SR_CHIMP_H
8*54fd6939SJiyong Park #define SR_CHIMP_H
9*54fd6939SJiyong Park 
10*54fd6939SJiyong Park #include <common/bl_common.h>
11*54fd6939SJiyong Park #include <common/debug.h>
12*54fd6939SJiyong Park #include <lib/mmio.h>
13*54fd6939SJiyong Park 
14*54fd6939SJiyong Park #include <platform_def.h>
15*54fd6939SJiyong Park 
16*54fd6939SJiyong Park #define CHIMP_WINDOW_SIZE 0x400000
17*54fd6939SJiyong Park #define CHIMP_ERROR_OFFSET 28
18*54fd6939SJiyong Park #define CHIMP_ERROR_MASK 0xf0000000
19*54fd6939SJiyong Park 
20*54fd6939SJiyong Park #ifndef EMULATION_SETUP
21*54fd6939SJiyong Park #define CHIMP_HANDSHAKE_TIMEOUT_MS 10000
22*54fd6939SJiyong Park #else
23*54fd6939SJiyong Park /*
24*54fd6939SJiyong Park  * 1hr timeout for test in emulator
25*54fd6939SJiyong Park  * By doing this ChiMP is given a chance to boot
26*54fd6939SJiyong Park  * fully from the QSPI
27*54fd6939SJiyong Park  * (on Palladium this takes upto 50 min depending on QSPI clk)
28*54fd6939SJiyong Park  */
29*54fd6939SJiyong Park 
30*54fd6939SJiyong Park #define CHIMP_HANDSHAKE_TIMEOUT_MS 3600000
31*54fd6939SJiyong Park #endif
32*54fd6939SJiyong Park 
33*54fd6939SJiyong Park #define CHIMP_BPE_MODE_ID_PATTERN				(0x25000000)
34*54fd6939SJiyong Park #define CHIMP_BPE_MODE_ID_MASK					(0x7f000000)
35*54fd6939SJiyong Park #define NIC_RESET_RELEASE_TIMEOUT_US		(10)
36*54fd6939SJiyong Park 
37*54fd6939SJiyong Park /* written by M0, used by ChiMP ROM */
38*54fd6939SJiyong Park #define SR_IN_SMARTNIC_MODE_BIT					0
39*54fd6939SJiyong Park /* written by M0, used by ChiMP ROM */
40*54fd6939SJiyong Park #define SR_CHIMP_SECURE_BOOT_BIT				1
41*54fd6939SJiyong Park /* cleared by AP, set by ChiMP BC2 code */
42*54fd6939SJiyong Park #define SR_FLASH_ACCESS_DONE_BIT				2
43*54fd6939SJiyong Park 
44*54fd6939SJiyong Park #ifdef USE_CHIMP
45*54fd6939SJiyong Park void bcm_chimp_write(uintptr_t addr, uint32_t value);
46*54fd6939SJiyong Park uint32_t bcm_chimp_read(uintptr_t addr);
47*54fd6939SJiyong Park uint32_t bcm_chimp_read_ctrl(uint32_t offset);
48*54fd6939SJiyong Park void bcm_chimp_clrbits(uintptr_t addr, uint32_t bits);
49*54fd6939SJiyong Park void bcm_chimp_setbits(uintptr_t addr, uint32_t bits);
50*54fd6939SJiyong Park int bcm_chimp_is_nic_mode(void);
51*54fd6939SJiyong Park void bcm_chimp_fru_prog_done(bool status);
52*54fd6939SJiyong Park int bcm_chimp_handshake_done(void);
53*54fd6939SJiyong Park int bcm_chimp_wait_handshake(void);
54*54fd6939SJiyong Park /* Fastboot-related*/
55*54fd6939SJiyong Park int bcm_chimp_initiate_fastboot(int fastboot_type);
56*54fd6939SJiyong Park #else
bcm_chimp_write(uintptr_t addr,uint32_t value)57*54fd6939SJiyong Park static inline void bcm_chimp_write(uintptr_t addr, uint32_t value)
58*54fd6939SJiyong Park {
59*54fd6939SJiyong Park }
bcm_chimp_read(uintptr_t addr)60*54fd6939SJiyong Park static inline uint32_t bcm_chimp_read(uintptr_t addr)
61*54fd6939SJiyong Park {
62*54fd6939SJiyong Park 	return 0;
63*54fd6939SJiyong Park }
bcm_chimp_read_ctrl(uint32_t offset)64*54fd6939SJiyong Park static inline uint32_t bcm_chimp_read_ctrl(uint32_t offset)
65*54fd6939SJiyong Park {
66*54fd6939SJiyong Park 	return 0;
67*54fd6939SJiyong Park }
bcm_chimp_clrbits(uintptr_t addr,uint32_t bits)68*54fd6939SJiyong Park static inline void bcm_chimp_clrbits(uintptr_t addr, uint32_t bits)
69*54fd6939SJiyong Park {
70*54fd6939SJiyong Park }
bcm_chimp_setbits(uintptr_t addr,uint32_t bits)71*54fd6939SJiyong Park static inline void bcm_chimp_setbits(uintptr_t addr, uint32_t bits)
72*54fd6939SJiyong Park {
73*54fd6939SJiyong Park }
bcm_chimp_is_nic_mode(void)74*54fd6939SJiyong Park static inline int bcm_chimp_is_nic_mode(void)
75*54fd6939SJiyong Park {
76*54fd6939SJiyong Park 	return 0;
77*54fd6939SJiyong Park }
bcm_chimp_fru_prog_done(bool status)78*54fd6939SJiyong Park static inline void bcm_chimp_fru_prog_done(bool status)
79*54fd6939SJiyong Park {
80*54fd6939SJiyong Park }
bcm_chimp_handshake_done(void)81*54fd6939SJiyong Park static inline int bcm_chimp_handshake_done(void)
82*54fd6939SJiyong Park {
83*54fd6939SJiyong Park 	return 0;
84*54fd6939SJiyong Park }
bcm_chimp_wait_handshake(void)85*54fd6939SJiyong Park static inline int bcm_chimp_wait_handshake(void)
86*54fd6939SJiyong Park {
87*54fd6939SJiyong Park 	return 0;
88*54fd6939SJiyong Park }
bcm_chimp_initiate_fastboot(int fastboot_type)89*54fd6939SJiyong Park static inline int bcm_chimp_initiate_fastboot(int fastboot_type)
90*54fd6939SJiyong Park {
91*54fd6939SJiyong Park 	return 0;
92*54fd6939SJiyong Park }
93*54fd6939SJiyong Park #endif /* USE_CHIMP */
94*54fd6939SJiyong Park #endif
95