1 // SPDX-License-Identifier: GPL-2.0+ 2 /* 3 * Copyright 2017-2018 NXP 4 */ 5 6 #include <common.h> 7 #include <i2c.h> 8 #include <asm/io.h> 9 #include <asm/arch/clock.h> 10 #include <asm/arch/fsl_serdes.h> 11 #ifdef CONFIG_FSL_LS_PPA 12 #include <asm/arch/ppa.h> 13 #endif 14 #include <asm/arch/mmu.h> 15 #include <asm/arch/soc.h> 16 #include <fsl_esdhc.h> 17 #include <hwconfig.h> 18 #include <environment.h> 19 #include <fsl_mmdc.h> 20 #include <netdev.h> 21 #include <fsl_sec.h> 22 23 DECLARE_GLOBAL_DATA_PTR; 24 25 static inline int get_board_version(void) 26 { 27 uint32_t val; 28 #ifdef CONFIG_TARGET_LS1012AFRDM 29 val = 0; 30 #else 31 struct ccsr_gpio *pgpio = (void *)(GPIO2_BASE_ADDR); 32 33 val = in_be32(&pgpio->gpdat) & BOARD_REV_MASK;/*Get GPIO2 11,12,14*/ 34 35 #endif 36 return val; 37 } 38 39 int checkboard(void) 40 { 41 #ifdef CONFIG_TARGET_LS1012AFRDM 42 puts("Board: LS1012AFRDM "); 43 #else 44 int rev; 45 46 rev = get_board_version(); 47 48 puts("Board: FRWY-LS1012A "); 49 50 puts("Version"); 51 52 switch (rev) { 53 case BOARD_REV_A_B: 54 puts(": RevA/B "); 55 break; 56 case BOARD_REV_C: 57 puts(": RevC "); 58 break; 59 default: 60 puts(": unknown"); 61 break; 62 } 63 #endif 64 65 return 0; 66 } 67 68 #ifdef CONFIG_TARGET_LS1012AFRWY 69 int esdhc_status_fixup(void *blob, const char *compat) 70 { 71 char esdhc0_path[] = "/soc/esdhc@1560000"; 72 char esdhc1_path[] = "/soc/esdhc@1580000"; 73 74 do_fixup_by_path(blob, esdhc0_path, "status", "okay", 75 sizeof("okay"), 1); 76 77 do_fixup_by_path(blob, esdhc1_path, "status", "disabled", 78 sizeof("disabled"), 1); 79 return 0; 80 } 81 #endif 82 83 int dram_init(void) 84 { 85 #ifdef CONFIG_TARGET_LS1012AFRWY 86 int board_rev; 87 #endif 88 struct fsl_mmdc_info mparam = { 89 0x04180000, /* mdctl */ 90 0x00030035, /* mdpdc */ 91 0x12554000, /* mdotc */ 92 0xbabf7954, /* mdcfg0 */ 93 0xdb328f64, /* mdcfg1 */ 94 0x01ff00db, /* mdcfg2 */ 95 0x00001680, /* mdmisc */ 96 0x0f3c8000, /* mdref */ 97 0x00002000, /* mdrwd */ 98 0x00bf1023, /* mdor */ 99 0x0000003f, /* mdasp */ 100 0x0000022a, /* mpodtctrl */ 101 0xa1390003, /* mpzqhwctrl */ 102 }; 103 104 #ifdef CONFIG_TARGET_LS1012AFRWY 105 board_rev = get_board_version(); 106 107 if (board_rev == BOARD_REV_C) { 108 mparam.mdctl = 0x05180000; 109 gd->ram_size = SYS_SDRAM_SIZE_1024; 110 } else { 111 gd->ram_size = SYS_SDRAM_SIZE_512; 112 } 113 #else 114 gd->ram_size = CONFIG_SYS_SDRAM_SIZE; 115 #endif 116 mmdc_init(&mparam); 117 118 #if !defined(CONFIG_SPL) || defined(CONFIG_SPL_BUILD) 119 /* This will break-before-make MMU for DDR */ 120 update_early_mmu_table(); 121 #endif 122 123 return 0; 124 } 125 126 int board_early_init_f(void) 127 { 128 fsl_lsch2_early_init_f(); 129 130 return 0; 131 } 132 133 int board_init(void) 134 { 135 struct ccsr_cci400 *cci = (struct ccsr_cci400 *)(CONFIG_SYS_IMMR + 136 CONFIG_SYS_CCI400_OFFSET); 137 138 /* 139 * Set CCI-400 control override register to enable barrier 140 * transaction 141 */ 142 out_le32(&cci->ctrl_ord, CCI400_CTRLORD_EN_BARRIER); 143 144 #ifdef CONFIG_ENV_IS_NOWHERE 145 gd->env_addr = (ulong)&default_environment[0]; 146 #endif 147 148 #ifdef CONFIG_FSL_CAAM 149 sec_init(); 150 #endif 151 152 #ifdef CONFIG_FSL_LS_PPA 153 ppa_init(); 154 #endif 155 return 0; 156 } 157 158 int ft_board_setup(void *blob, bd_t *bd) 159 { 160 arch_fixup_fdt(blob); 161 162 ft_cpu_setup(blob, bd); 163 164 return 0; 165 } 166