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