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