diff options
Diffstat (limited to 'x-loader/drivers')
-rw-r--r-- | x-loader/drivers/Makefile | 38 | ||||
-rw-r--r-- | x-loader/drivers/k9f1g08r0a.c | 55 | ||||
-rw-r--r-- | x-loader/drivers/serial.c | 15 |
3 files changed, 62 insertions, 46 deletions
diff --git a/x-loader/drivers/Makefile b/x-loader/drivers/Makefile index c581817..da3feda 100644 --- a/x-loader/drivers/Makefile +++ b/x-loader/drivers/Makefile @@ -25,58 +25,60 @@ include $(TOPDIR)/config.mk # CFLAGS += -DET_DEBUG -DDEBUG -LIB = libdrivers.a -OBJS = serial.o ns16550.o onenand.o omap24xx_i2c.o +LIB = $(obj)libdrivers.a +COBJS = serial.o ns16550.o omap24xx_i2c.o ifeq ($(BOARD), omap3430sdp) -OBJS += k9f1g08r0a.o +COBJS += k9f1g08r0a.o endif ifeq ($(BOARD), omap3430labrador) -OBJS += k9f1g08r0a.o +COBJS += k9f1g08r0a.o endif ifeq ($(BOARD), omap3530beagle) -OBJS += k9f1g08r0a.o +COBJS += k9f1g08r0a.o +endif + +ifeq ($(BOARD), omap3530gta04) +COBJS += k9f1g08r0a.o endif ifeq ($(BOARD), omap3evm) -OBJS += k9f1g08r0a.o +COBJS += k9f1g08r0a.o onenand.o endif ifeq ($(BOARD), overo) -OBJS += k9f1g08r0a.o +COBJS += k9f1g08r0a.o endif ifeq ($(BOARD), omap2420h4) -OBJS += k9k1216.o +COBJS += k9k1216.o endif ifeq ($(BOARD), omap2430sdp) -OBJS += k9k1216.o -endif - -ifeq ($(BOARD), omap1710h3) -OBJS += k9f5616.o +COBJS += k9k1216.o endif - ## Disabled for now: ## cs8900.o ct69000.o dataflash.o dc2114x.o ds1722.o \ ## lan91c96.o mw_eeprom.o natsemi.o \ ## smc91111.o smiLynxEM.o spi_eeprom.o sym53c8xx.o \ ## +SRCS := $(COBJS:.o=.c) +OBJS := $(addprefix $(obj),$(COBJS)) + all: $(LIB) -$(LIB): $(OBJS) +$(LIB): $(obj).depend $(OBJS) $(AR) crv $@ $(OBJS) ######################################################################### -.depend: Makefile $(OBJS:.o=.c) - $(CC) -M $(CFLAGS) $(OBJS:.o=.c) > $@ +# defines $(obj).depend target +include $(SRCTREE)/rules.mk -sinclude .depend +sinclude $(obj).depend ######################################################################### diff --git a/x-loader/drivers/k9f1g08r0a.c b/x-loader/drivers/k9f1g08r0a.c index 8968a1b..988533c 100644 --- a/x-loader/drivers/k9f1g08r0a.c +++ b/x-loader/drivers/k9f1g08r0a.c @@ -42,6 +42,7 @@ */ #define MT29F1G_MFR 0x2c /* Micron */ #define MT29F1G_MFR2 0x20 /* numonyx */ +#define MT29F1G_MFR3 0xad /* Hynix */ #define MT29F1G_ID 0xa1 /* x8, 1GiB */ #define MT29F2G_ID 0xba /* x16, 2GiB */ #define MT29F4G_ID 0xbc /* x16, 4GiB */ @@ -154,6 +155,29 @@ static int NanD_Address(unsigned int numbytes, unsigned long ofs) return 0; } +int nand_readid(int *mfr, int *id) +{ + NAND_ENABLE_CE(); + + if (NanD_Command(NAND_CMD_RESET)) { + NAND_DISABLE_CE(); + return 1; + } + + if (NanD_Command(NAND_CMD_READID)) { + NAND_DISABLE_CE(); + return 1; + } + + NanD_Address(ADDR_COLUMN, 0); + + *mfr = READ_NAND(NAND_ADDR); + *id = READ_NAND(NAND_ADDR); + + NAND_DISABLE_CE(); + return 0; +} + /* read chip mfr and id * return 0 if they match board config * return 1 if not @@ -162,34 +186,39 @@ int nand_chip() { int mfr, id; - NAND_ENABLE_CE(); + NAND_ENABLE_CE(); - if (NanD_Command(NAND_CMD_RESET)) { - printf("Err: RESET\n"); - NAND_DISABLE_CE(); + if (NanD_Command(NAND_CMD_RESET)) { + printf("Err: RESET\n"); + NAND_DISABLE_CE(); return 1; } - if (NanD_Command(NAND_CMD_READID)) { - printf("Err: READID\n"); - NAND_DISABLE_CE(); + if (NanD_Command(NAND_CMD_READID)) { + printf("Err: READID\n"); + NAND_DISABLE_CE(); return 1; - } + } - NanD_Address(ADDR_COLUMN, 0); + NanD_Address(ADDR_COLUMN, 0); - mfr = READ_NAND(NAND_ADDR); + mfr = READ_NAND(NAND_ADDR); id = READ_NAND(NAND_ADDR); NAND_DISABLE_CE(); - if (((mfr == MT29F1G_MFR || mfr == MT29F1G_MFR2) && + if (((mfr == MT29F1G_MFR || mfr == MT29F1G_MFR2 || mfr == MT29F1G_MFR3) && (id == MT29F1G_ID || id == MT29F2G_ID || id == MT29F4G_ID)) || (mfr == K9F1G08R0A_MFR && (id == K9F1G08R0A_ID))) { return 0; } else { - printf("Unknown chip: mfr was 0x%02x, id was 0x%02x\n", mfr, id); - return 1; + if ((mfr == 0) && (id == 0)) { + printf("No NAND detected\n"); + return 0; + } else { + printf("Unknown chip: mfr was 0x%02x, id was 0x%02x\n", mfr, id); + return 1; + } } } diff --git a/x-loader/drivers/serial.c b/x-loader/drivers/serial.c index b9ecf2a..026acf9 100644 --- a/x-loader/drivers/serial.c +++ b/x-loader/drivers/serial.c @@ -45,21 +45,6 @@ static NS16550_t console = (NS16550_t) CFG_NS16550_COM4; static int calc_divisor (void) { -// DECLARE_GLOBAL_DATA_PTR; -#ifdef CONFIG_OMAP1510 - /* If can't cleanly clock 115200 set div to 1 */ - if ((CFG_NS16550_CLK == 12000000) && (CONFIG_BAUDRATE == 115200)) { - console->osc_12m_sel = OSC_12M_SEL; /* enable 6.5 * divisor */ - return (1); /* return 1 for base divisor */ - } - console->osc_12m_sel = 0; /* clear if previsouly set */ -#endif -#if defined(CONFIG_OMAP1610) || defined(CONFIG_OMAP1710) - /* If can't cleanly clock 115200 set div to 1 */ - if ((CFG_NS16550_CLK == 48000000) && (CONFIG_BAUDRATE == 115200)) { - return (26); /* return 26 for base divisor */ - } -#endif return (CFG_NS16550_CLK / 16 / CONFIG_BAUDRATE); } |