Load the appropriate MTD driver if we were booted from NOR/NAND only, use the TRX mapping by default if bootloader unknown

SVN-Revision: 8032
This commit is contained in:
Florian Fainelli 2007-07-18 12:13:37 +00:00
parent 7031534325
commit 6c8cf15dae
2 changed files with 15 additions and 5 deletions

View file

@ -407,6 +407,10 @@ int __init init_adm5120_map(void)
struct mtd_partition *parts; struct mtd_partition *parts;
int i, parsed_nr_parts = 0; int i, parsed_nr_parts = 0;
#endif #endif
if (adm5120_nand_boot)
return -ENODEV;
printk("adm5120 : flash init : 0x%08x 0x%08x\n", WINDOW_ADDR, adm5120_board.flash0_size); printk("adm5120 : flash init : 0x%08x 0x%08x\n", WINDOW_ADDR, adm5120_board.flash0_size);
adm5120_map.virt = ioremap_nocache(WINDOW_ADDR, adm5120_board.flash0_size); adm5120_map.virt = ioremap_nocache(WINDOW_ADDR, adm5120_board.flash0_size);
@ -433,7 +437,7 @@ int __init init_adm5120_map(void)
#ifdef CONFIG_MTD_PARTITIONS #ifdef CONFIG_MTD_PARTITIONS
if (adm5120_boot_loader == BOOT_LOADER_CFE) if (adm5120_boot_loader == BOOT_LOADER_CFE || adm5120_boot_loader == BOOT_LOADER_UNKNOWN)
{ {
printk(KERN_NOTICE "adm5120 : using CFE flash mapping\n"); printk(KERN_NOTICE "adm5120 : using CFE flash mapping\n");
parts = init_mtd_partitions(adm5120_mtd, size); parts = init_mtd_partitions(adm5120_mtd, size);

View file

@ -13,12 +13,14 @@
#include <linux/mtd/mtd.h> #include <linux/mtd/mtd.h>
#include <linux/mtd/partitions.h> #include <linux/mtd/partitions.h>
#include <linux/delay.h> #include <linux/delay.h>
#include <asm/io.h> #include <asm/io.h>
#include <asm/irq.h> #include <asm/irq.h>
#include <asm/bootinfo.h> #include <asm/bootinfo.h>
#include <asm/mach-adm5120/adm5120_info.h>
#include <asm/mach-adm5120/adm5120_defs.h>
#define SMEM1_BASE 0x10000000 // from ADM5120 documentation #define SMEM1(x) (*((volatile unsigned char *) (KSEG1ADDR(ADM5120_SRAM1_BASE) + x)))
#define SMEM1(x) (*((volatile unsigned char *) (KSEG1ADDR(SMEM1_BASE) + x)))
#define NAND_RW_REG 0x0 //data register #define NAND_RW_REG 0x0 //data register
#define NAND_SET_CEn 0x1 //CE# low #define NAND_SET_CEn 0x1 //CE# low
@ -86,6 +88,10 @@ unsigned get_rbnand_block_size(void) {
EXPORT_SYMBOL(get_rbnand_block_size); EXPORT_SYMBOL(get_rbnand_block_size);
int __init rbmips_init(void) { int __init rbmips_init(void) {
if (!adm5120_nand_boot)
return -ENODEV;
memset(&rmtd, 0, sizeof(rmtd)); memset(&rmtd, 0, sizeof(rmtd));
memset(&rnand, 0, sizeof(rnand)); memset(&rnand, 0, sizeof(rnand));
printk(KERN_INFO "RB1xx nand\n"); printk(KERN_INFO "RB1xx nand\n");
@ -93,11 +99,11 @@ int __init rbmips_init(void) {
MEM32(0xB2000008) = 0x1; MEM32(0xB2000008) = 0x1;
SMEM1(NAND_SET_SPn) = 0x01; SMEM1(NAND_SET_SPn) = 0x01;
SMEM1(NAND_CLR_WPn) = 0x01; SMEM1(NAND_CLR_WPn) = 0x01;
rnand.IO_ADDR_R = (unsigned char *)KSEG1ADDR(SMEM1_BASE); rnand.IO_ADDR_R = (unsigned char *)KSEG1ADDR(ADM5120_SRAM1_BASE);
rnand.IO_ADDR_W = rnand.IO_ADDR_R; rnand.IO_ADDR_W = rnand.IO_ADDR_R;
rnand.cmd_ctrl = rbmips_hwcontrol100; rnand.cmd_ctrl = rbmips_hwcontrol100;
rnand.dev_ready = rb100_dev_ready; rnand.dev_ready = rb100_dev_ready;
p_nand = (void __iomem *)ioremap(( unsigned long)SMEM1_BASE, 0x1000); p_nand = (void __iomem *)ioremap(( unsigned long)ADM5120_SRAM1_BASE, 0x1000);
if (!p_nand) { if (!p_nand) {
printk(KERN_WARNING "RB1xx nand Unable ioremap buffer\n"); printk(KERN_WARNING "RB1xx nand Unable ioremap buffer\n");
return -ENXIO; return -ENXIO;