mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-28 15:41:40 +00:00
igep00x0: runtime flash detection
Signed-off-by: Ladislav Michl <ladis@linux-mips.org>
This commit is contained in:
parent
c2d47fa666
commit
97ee70606c
1 changed files with 53 additions and 18 deletions
|
@ -17,6 +17,10 @@
|
||||||
#include <asm/arch/mux.h>
|
#include <asm/arch/mux.h>
|
||||||
#include <asm/arch/sys_proto.h>
|
#include <asm/arch/sys_proto.h>
|
||||||
#include <asm/mach-types.h>
|
#include <asm/mach-types.h>
|
||||||
|
#include <linux/mtd/nand.h>
|
||||||
|
#include <linux/mtd/nand.h>
|
||||||
|
#include <linux/mtd/onenand.h>
|
||||||
|
#include <jffs2/load_kernel.h>
|
||||||
#include "igep00x0.h"
|
#include "igep00x0.h"
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
@ -56,7 +60,25 @@ U_BOOT_DEVICE(igep_uart) = {
|
||||||
*/
|
*/
|
||||||
int board_init(void)
|
int board_init(void)
|
||||||
{
|
{
|
||||||
gpmc_init(); /* in SRAM or SDRAM, finish GPMC */
|
int loops = 100;
|
||||||
|
|
||||||
|
/* find out flash memory type, assume NAND first */
|
||||||
|
gpmc_cs0_flash = MTD_DEV_TYPE_NAND;
|
||||||
|
gpmc_init();
|
||||||
|
|
||||||
|
/* Issue a RESET and then READID */
|
||||||
|
writeb(NAND_CMD_RESET, &gpmc_cfg->cs[0].nand_cmd);
|
||||||
|
writeb(NAND_CMD_STATUS, &gpmc_cfg->cs[0].nand_cmd);
|
||||||
|
while ((readl(&gpmc_cfg->cs[0].nand_dat) & NAND_STATUS_READY)
|
||||||
|
!= NAND_STATUS_READY) {
|
||||||
|
udelay(1);
|
||||||
|
if (--loops == 0) {
|
||||||
|
gpmc_cs0_flash = MTD_DEV_TYPE_ONENAND;
|
||||||
|
gpmc_init(); /* reinitialize for OneNAND */
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* boot param addr */
|
/* boot param addr */
|
||||||
gd->bd->bi_boot_params = (OMAP34XX_SDRC_CS0 + 0x100);
|
gd->bd->bi_boot_params = (OMAP34XX_SDRC_CS0 + 0x100);
|
||||||
|
|
||||||
|
@ -75,29 +97,42 @@ int board_init(void)
|
||||||
*/
|
*/
|
||||||
void get_board_mem_timings(struct board_sdrc_timings *timings)
|
void get_board_mem_timings(struct board_sdrc_timings *timings)
|
||||||
{
|
{
|
||||||
|
int mfr, id, err = identify_nand_chip(&mfr, &id);
|
||||||
|
|
||||||
timings->mr = MICRON_V_MR_165;
|
timings->mr = MICRON_V_MR_165;
|
||||||
#ifdef CONFIG_BOOT_NAND
|
if (!err && mfr == NAND_MFR_MICRON) {
|
||||||
timings->mcfg = MICRON_V_MCFG_200(256 << 20);
|
timings->mcfg = MICRON_V_MCFG_200(256 << 20);
|
||||||
timings->ctrla = MICRON_V_ACTIMA_200;
|
timings->ctrla = MICRON_V_ACTIMA_200;
|
||||||
timings->ctrlb = MICRON_V_ACTIMB_200;
|
timings->ctrlb = MICRON_V_ACTIMB_200;
|
||||||
timings->rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_200MHz;
|
timings->rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_200MHz;
|
||||||
#else
|
gpmc_cs0_flash = MTD_DEV_TYPE_NAND;
|
||||||
|
} else {
|
||||||
if (get_cpu_family() == CPU_OMAP34XX) {
|
if (get_cpu_family() == CPU_OMAP34XX) {
|
||||||
timings->mcfg = NUMONYX_V_MCFG_165(256 << 20);
|
timings->mcfg = NUMONYX_V_MCFG_165(256 << 20);
|
||||||
timings->ctrla = NUMONYX_V_ACTIMA_165;
|
timings->ctrla = NUMONYX_V_ACTIMA_165;
|
||||||
timings->ctrlb = NUMONYX_V_ACTIMB_165;
|
timings->ctrlb = NUMONYX_V_ACTIMB_165;
|
||||||
timings->rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_165MHz;
|
timings->rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_165MHz;
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
timings->mcfg = NUMONYX_V_MCFG_200(256 << 20);
|
timings->mcfg = NUMONYX_V_MCFG_200(256 << 20);
|
||||||
timings->ctrla = NUMONYX_V_ACTIMA_200;
|
timings->ctrla = NUMONYX_V_ACTIMA_200;
|
||||||
timings->ctrlb = NUMONYX_V_ACTIMB_200;
|
timings->ctrlb = NUMONYX_V_ACTIMB_200;
|
||||||
timings->rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_200MHz;
|
timings->rfr_ctrl = SDP_3430_SDRC_RFR_CTRL_200MHz;
|
||||||
}
|
}
|
||||||
#endif
|
gpmc_cs0_flash = MTD_DEV_TYPE_ONENAND;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
int onenand_board_init(struct mtd_info *mtd)
|
||||||
|
{
|
||||||
|
if (gpmc_cs0_flash == MTD_DEV_TYPE_ONENAND) {
|
||||||
|
struct onenand_chip *this = mtd->priv;
|
||||||
|
this->base = (void *)CONFIG_SYS_ONENAND_BASE;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(CONFIG_CMD_NET)
|
#if defined(CONFIG_CMD_NET)
|
||||||
static void reset_net_chip(int gpio)
|
static void reset_net_chip(int gpio)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue