1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+ 2*83d290c5STom Rini 34c699a47SLadislav Michl #include <asm/io.h> 44c699a47SLadislav Michl #include <asm/arch/mem.h> 54c699a47SLadislav Michl #include <asm/arch/sys_proto.h> 64c699a47SLadislav Michl #include <jffs2/load_kernel.h> 76ae3900aSMasahiro Yamada #include <linux/mtd/rawnand.h> 84c699a47SLadislav Michl #include "igep00x0.h" 94c699a47SLadislav Michl 104c699a47SLadislav Michl /* 114c699a47SLadislav Michl * Routine: get_board_mem_timings 124c699a47SLadislav Michl * Description: If we use SPL then there is no x-loader nor config header 134c699a47SLadislav Michl * so we have to setup the DDR timings ourself on both banks. 144c699a47SLadislav Michl */ get_board_mem_timings(struct board_sdrc_timings * timings)154c699a47SLadislav Michlvoid get_board_mem_timings(struct board_sdrc_timings *timings) 164c699a47SLadislav Michl { 174c699a47SLadislav Michl int mfr, id, err = identify_nand_chip(&mfr, &id); 184c699a47SLadislav Michl 194c699a47SLadislav Michl timings->mr = MICRON_V_MR_165; 204c699a47SLadislav Michl if (!err) { 214c699a47SLadislav Michl switch (mfr) { 224c699a47SLadislav Michl case NAND_MFR_HYNIX: 234c699a47SLadislav Michl timings->mcfg = HYNIX_V_MCFG_200(256 << 20); 244c699a47SLadislav Michl timings->ctrla = HYNIX_V_ACTIMA_200; 254c699a47SLadislav Michl timings->ctrlb = HYNIX_V_ACTIMB_200; 264c699a47SLadislav Michl break; 274c699a47SLadislav Michl case NAND_MFR_MICRON: 284c699a47SLadislav Michl timings->mcfg = MICRON_V_MCFG_200(256 << 20); 294c699a47SLadislav Michl timings->ctrla = MICRON_V_ACTIMA_200; 304c699a47SLadislav Michl timings->ctrlb = MICRON_V_ACTIMB_200; 314c699a47SLadislav Michl break; 324c699a47SLadislav Michl default: 334c699a47SLadislav Michl /* Should not happen... */ 344c699a47SLadislav Michl break; 354c699a47SLadislav Michl } 364c699a47SLadislav Michl timings->rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_200MHz; 374c699a47SLadislav Michl gpmc_cs0_flash = MTD_DEV_TYPE_NAND; 384c699a47SLadislav Michl } else { 394c699a47SLadislav Michl if (get_cpu_family() == CPU_OMAP34XX) { 404c699a47SLadislav Michl timings->mcfg = NUMONYX_V_MCFG_165(256 << 20); 414c699a47SLadislav Michl timings->ctrla = NUMONYX_V_ACTIMA_165; 424c699a47SLadislav Michl timings->ctrlb = NUMONYX_V_ACTIMB_165; 434c699a47SLadislav Michl timings->rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_165MHz; 444c699a47SLadislav Michl } else { 454c699a47SLadislav Michl timings->mcfg = NUMONYX_V_MCFG_200(256 << 20); 464c699a47SLadislav Michl timings->ctrla = NUMONYX_V_ACTIMA_200; 474c699a47SLadislav Michl timings->ctrlb = NUMONYX_V_ACTIMB_200; 484c699a47SLadislav Michl timings->rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_200MHz; 494c699a47SLadislav Michl } 504c699a47SLadislav Michl gpmc_cs0_flash = MTD_DEV_TYPE_ONENAND; 514c699a47SLadislav Michl } 524c699a47SLadislav Michl } 534c699a47SLadislav Michl 544c699a47SLadislav Michl #ifdef CONFIG_SPL_OS_BOOT spl_start_uboot(void)554c699a47SLadislav Michlint spl_start_uboot(void) 564c699a47SLadislav Michl { 574c699a47SLadislav Michl /* break into full u-boot on 'c' */ 584c699a47SLadislav Michl if (serial_tstc() && serial_getc() == 'c') 594c699a47SLadislav Michl return 1; 604c699a47SLadislav Michl 614c699a47SLadislav Michl return 0; 624c699a47SLadislav Michl } 634c699a47SLadislav Michl #endif 64