xref: /rk3399_ARM-atf/include/drivers/nxp/dcfg/dcfg.h (revision 08695df91dffb2e45c01866b760d73cb531a071b)
1050a99a6SPankaj Gupta /*
2050a99a6SPankaj Gupta  * Copyright 2018-2021 NXP
3050a99a6SPankaj Gupta  *
4050a99a6SPankaj Gupta  * SPDX-License-Identifier: BSD-3-Clause
5050a99a6SPankaj Gupta  *
6050a99a6SPankaj Gupta  */
7050a99a6SPankaj Gupta 
8050a99a6SPankaj Gupta #ifndef DCFG_H
9050a99a6SPankaj Gupta #define DCFG_H
10050a99a6SPankaj Gupta 
11050a99a6SPankaj Gupta #include <endian.h>
12050a99a6SPankaj Gupta 
13050a99a6SPankaj Gupta #if defined(CONFIG_CHASSIS_2)
14050a99a6SPankaj Gupta #include <dcfg_lsch2.h>
15050a99a6SPankaj Gupta #elif defined(CONFIG_CHASSIS_3_2)
16050a99a6SPankaj Gupta #include <dcfg_lsch3.h>
17050a99a6SPankaj Gupta #endif
18050a99a6SPankaj Gupta 
19050a99a6SPankaj Gupta #ifdef NXP_GUR_BE
20050a99a6SPankaj Gupta #define gur_in32(a)		bswap32(mmio_read_32((uintptr_t)(a)))
21050a99a6SPankaj Gupta #define gur_out32(a, v)		mmio_write_32((uintptr_t)(a), bswap32(v))
22050a99a6SPankaj Gupta #elif defined(NXP_GUR_LE)
23050a99a6SPankaj Gupta #define gur_in32(a)		mmio_read_32((uintptr_t)(a))
24050a99a6SPankaj Gupta #define gur_out32(a, v)		mmio_write_32((uintptr_t)(a), v)
25050a99a6SPankaj Gupta #else
26050a99a6SPankaj Gupta #error Please define CCSR GUR register endianness
27050a99a6SPankaj Gupta #endif
28050a99a6SPankaj Gupta 
29050a99a6SPankaj Gupta typedef struct {
30*08695df9SJiafei Pan 	union {
31*08695df9SJiafei Pan 		uint32_t val;
32*08695df9SJiafei Pan 		struct {
33*08695df9SJiafei Pan 			uint32_t min_ver:4;
34*08695df9SJiafei Pan 			uint32_t maj_ver:4;
35*08695df9SJiafei Pan #if defined(CONFIG_CHASSIS_3) || defined(CONFIG_CHASSIS_3_2)
36*08695df9SJiafei Pan 			uint32_t personality:6;
37*08695df9SJiafei Pan 			uint32_t rsv1:2;
38*08695df9SJiafei Pan #elif defined(CONFIG_CHASSIS_2)
39*08695df9SJiafei Pan 			uint32_t personality:8;
40*08695df9SJiafei Pan 
41050a99a6SPankaj Gupta #endif
42*08695df9SJiafei Pan #if defined(CONFIG_CHASSIS_3) || defined(CONFIG_CHASSIS_3_2)
43*08695df9SJiafei Pan 			uint32_t dev_id:6;
44*08695df9SJiafei Pan 			uint32_t rsv2:2;
45*08695df9SJiafei Pan 			uint32_t family:4;
46*08695df9SJiafei Pan #elif defined(CONFIG_CHASSIS_2)
47*08695df9SJiafei Pan 			uint32_t dev_id:12;
48*08695df9SJiafei Pan #endif
49*08695df9SJiafei Pan 			uint32_t mfr_id;
50*08695df9SJiafei Pan 		} __packed bf;
51*08695df9SJiafei Pan 		struct {
52*08695df9SJiafei Pan 			uint32_t maj_min:8;
53*08695df9SJiafei Pan 			uint32_t version; /* SoC version without major and minor info */
54*08695df9SJiafei Pan 		} __packed bf_ver;
55*08695df9SJiafei Pan 	} __packed svr_reg;
56050a99a6SPankaj Gupta 	bool sec_enabled;
57*08695df9SJiafei Pan 	bool is_populated;
58050a99a6SPankaj Gupta } soc_info_t;
59050a99a6SPankaj Gupta 
60050a99a6SPankaj Gupta typedef struct {
61050a99a6SPankaj Gupta 	bool is_populated;
62050a99a6SPankaj Gupta 	uint8_t ocram_present;
63050a99a6SPankaj Gupta 	uint8_t ddrc1_present;
64*08695df9SJiafei Pan #if defined(CONFIG_CHASSIS_3) || defined(CONFIG_CHASSIS_3_2)
65050a99a6SPankaj Gupta 	uint8_t ddrc2_present;
66050a99a6SPankaj Gupta #endif
67050a99a6SPankaj Gupta } devdisr5_info_t;
68050a99a6SPankaj Gupta 
69050a99a6SPankaj Gupta typedef struct {
70050a99a6SPankaj Gupta 	uint32_t porsr1;
71050a99a6SPankaj Gupta 	uintptr_t g_nxp_dcfg_addr;
72050a99a6SPankaj Gupta 	unsigned long nxp_sysclk_freq;
73050a99a6SPankaj Gupta 	unsigned long nxp_ddrclk_freq;
74050a99a6SPankaj Gupta 	unsigned int nxp_plat_clk_divider;
75050a99a6SPankaj Gupta } dcfg_init_info_t;
76050a99a6SPankaj Gupta 
77050a99a6SPankaj Gupta 
78050a99a6SPankaj Gupta struct sysinfo {
79050a99a6SPankaj Gupta 	unsigned long freq_platform;
80050a99a6SPankaj Gupta 	unsigned long freq_ddr_pll0;
81050a99a6SPankaj Gupta 	unsigned long freq_ddr_pll1;
82050a99a6SPankaj Gupta };
83050a99a6SPankaj Gupta 
84050a99a6SPankaj Gupta int get_clocks(struct sysinfo *sys);
85050a99a6SPankaj Gupta 
86050a99a6SPankaj Gupta /* Read the PORSR1 register */
87050a99a6SPankaj Gupta uint32_t read_reg_porsr1(void);
88050a99a6SPankaj Gupta 
89050a99a6SPankaj Gupta /*******************************************************************************
90050a99a6SPankaj Gupta  * Returns true if secur eboot is enabled on board
91050a99a6SPankaj Gupta  * mode = 0  (development mode - sb_en = 1)
92050a99a6SPankaj Gupta  * mode = 1 (production mode - ITS = 1)
93050a99a6SPankaj Gupta  ******************************************************************************/
94050a99a6SPankaj Gupta bool check_boot_mode_secure(uint32_t *mode);
95050a99a6SPankaj Gupta 
96050a99a6SPankaj Gupta const soc_info_t *get_soc_info();
97050a99a6SPankaj Gupta const devdisr5_info_t *get_devdisr5_info();
98050a99a6SPankaj Gupta 
99050a99a6SPankaj Gupta void dcfg_init(dcfg_init_info_t *dcfg_init_data);
100050a99a6SPankaj Gupta bool is_sec_enabled(void);
101050a99a6SPankaj Gupta 
102050a99a6SPankaj Gupta void error_handler(int error_code);
103050a99a6SPankaj Gupta #endif /*	DCFG_H	*/
104