Fixes from Compex to make OpenWrt run on WP54AG, thanks !
authorFlorian Fainelli <florian@openwrt.org>
Mon, 2 Apr 2007 09:34:39 +0000 (09:34 +0000)
committerFlorian Fainelli <florian@openwrt.org>
Mon, 2 Apr 2007 09:34:39 +0000 (09:34 +0000)
SVN-Revision: 6817

target/linux/adm5120-2.6/config/default
target/linux/adm5120-2.6/files/drivers/mtd/maps/adm5120_mtd.c
target/linux/adm5120-2.6/files/drivers/net/adm5120sw.h
target/linux/adm5120-2.6/patches/101-mtd-mxflash.patch [new file with mode: 0755]

index 93304bcf349422dde85b05d5a8734d67d390f455..cf45c9fd7ed15b62340603201bc03467b5572ac4 100644 (file)
@@ -117,8 +117,6 @@ CONFIG_INET_TCP_DIAG=y
 CONFIG_INET_TUNNEL=y
 CONFIG_INET_XFRM_TUNNEL=y
 CONFIG_INITRAMFS_SOURCE=""
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
 CONFIG_INPUT=y
 # CONFIG_INPUT_EVDEV is not set
 CONFIG_IOSCHED_CFQ=y
@@ -160,7 +158,7 @@ CONFIG_LEGACY_PTY_COUNT=256
 CONFIG_MAGIC_SYSRQ=y
 # CONFIG_MII is not set
 # CONFIG_MINIX_FS is not set
-CONFIG_MINI_FO=y
+# CONFIG_MINI_FO is not set
 CONFIG_MIPS=y
 CONFIG_MIPS_ADM5120=y
 CONFIG_MIPS_ADM5120_ENET=y
@@ -199,11 +197,13 @@ CONFIG_MODULE_FORCE_UNLOAD=y
 CONFIG_MTD=y
 # CONFIG_MTD_ABSENT is not set
 CONFIG_MTD_ADM5120=y
-CONFIG_MTD_BLOCK=y
+# CONFIG_MTD_BLOCK is not set
 # CONFIG_MTD_BLOCK2MTD is not set
+# CONFIG_MTD_BLOCK_RO is not set
 CONFIG_MTD_CFI=y
 # CONFIG_MTD_CFI_ADV_OPTIONS is not set
 CONFIG_MTD_CFI_AMDSTD=y
+CONFIG_MTD_CFI_AMDSTD_FORCE_BOTTOM_BOOT=y
 CONFIG_MTD_CFI_I1=y
 CONFIG_MTD_CFI_I2=y
 # CONFIG_MTD_CFI_I4 is not set
@@ -213,8 +213,8 @@ CONFIG_MTD_CFI_I2=y
 CONFIG_MTD_CFI_UTIL=y
 CONFIG_MTD_CHAR=y
 CONFIG_MTD_CMDLINE_PARTS=y
-# CONFIG_MTD_COMPLEX_MAPPINGS is not set
-CONFIG_MTD_CONCAT=y
+CONFIG_MTD_COMPLEX_MAPPINGS=y
+CONFIG_MTD_CONCAT=m
 # CONFIG_MTD_DEBUG is not set
 # CONFIG_MTD_DOC2000 is not set
 # CONFIG_MTD_DOC2001 is not set
@@ -229,9 +229,16 @@ CONFIG_MTD_MAP_BANK_WIDTH_4=y
 # CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
 # CONFIG_MTD_MTDRAM is not set
 CONFIG_MTD_MYLOADER_PARTS=y
+CONFIG_MTD_NAND=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_ECC_SMC is not set
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_NANDSIM is not set
+CONFIG_MTD_NAND_VERIFY_WRITE=y
 # CONFIG_MTD_OBSOLETE_CHIPS is not set
 # CONFIG_MTD_ONENAND is not set
 CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_PCI is not set
 # CONFIG_MTD_PHRAM is not set
 # CONFIG_MTD_PHYSMAP is not set
 # CONFIG_MTD_PLATRAM is not set
index 426ab67c824a69c97e4bea81b0e7d2f3459b1570..df506d7fa845f975752493a207dcbc430f88fe62 100644 (file)
@@ -57,6 +57,15 @@ extern int parse_myloader_partitions(struct mtd_info *master,
                         struct mtd_partition **pparts,
                         unsigned long origin);
 
+/* Macros for switching flash bank 
+   ADM5120 only support 2MB flash address space
+   so GPIO5 is used as A20
+ */
+#define GPIO_IO        ((volatile unsigned long *)0xb20000b8)
+#define FLASH_A20_GPIO  5
+#define FLASH_BOUNDARY  0x200000
+
+
 #define TRX_MAGIC      0x30524448      /* "HDR0" */
 #define TRX_VERSION    1
 #define TRX_MAX_LEN    0x3A0000
@@ -98,6 +107,52 @@ static struct mtd_partition adm5120_cfe_parts[] = {
        { name: NULL, },
 };
 
+
+static void flash_switch_bank(unsigned long addr)
+{
+       unsigned long val;
+
+       /* Set GPIO as output */
+       val = *GPIO_IO | (1 << (FLASH_A20_GPIO+16));
+       if ( addr & FLASH_BOUNDARY ) {
+               val |= 1 << (FLASH_A20_GPIO + 24);
+       } else {
+               val &= ~(1 << (FLASH_A20_GPIO + 24));
+       }
+       *GPIO_IO = val;
+}
+
+static map_word adm5120_map_read(struct map_info *map, unsigned long ofs)
+{
+    flash_switch_bank(ofs);
+       return inline_map_read(map, ofs);
+}
+
+static void adm5120_map_write(struct map_info *map, const map_word datum, unsigned long ofs)
+{
+    flash_switch_bank(ofs);
+       inline_map_write(map, datum, ofs);
+}
+
+static void adm5120_map_copy_from(struct map_info *map, void *to, unsigned long from, ssize_t len)
+{
+       ssize_t tmp;
+
+       if (from < FLASH_BOUNDARY) {
+               tmp = (len < (FLASH_BOUNDARY - from)) ? len : (FLASH_BOUNDARY - from);
+               flash_switch_bank(0);
+               inline_map_copy_from(map, to, from, tmp);
+               to = (void *)((char *)to + tmp);
+               from += tmp;
+               len -= tmp;
+       }
+       if (len > 0) {
+               flash_switch_bank(FLASH_BOUNDARY);
+               inline_map_copy_from(map, to, from, len);
+       }
+    
+}
+
 static int __init
 find_cfe_size(struct mtd_info *mtd, size_t size)
 {
@@ -402,6 +457,9 @@ int __init init_adm5120_map(void)
                return -EIO;
        }
        simple_map_init(&adm5120_map);
+       adm5120_map.read = adm5120_map_read;
+       adm5120_map.write = adm5120_map_write;
+       adm5120_map.copy_from = adm5120_map_copy_from;
        
        if (!(adm5120_mtd = do_map_probe("cfi_probe", &adm5120_map))) {
                printk("Failed to do_map_probe\n");
index 09ef9fe394117bdf7e25d8b8791487cca0d39c6a..19388a90644c756e46f94f510832287e2f5ce89d 100644 (file)
@@ -69,7 +69,7 @@ struct adm5120_dma {
        u32 status;
 } __attribute__ ((packed));
 
-#define        ADM5120_DMA_MASK        0x00ffffff
+#define        ADM5120_DMA_MASK        0x01ffffff
 #define ADM5120_DMA_OWN                0x80000000      /* buffer owner */
 #define ADM5120_DMA_RINGEND    0x10000000      /* Last in DMA ring */
 
diff --git a/target/linux/adm5120-2.6/patches/101-mtd-mxflash.patch b/target/linux/adm5120-2.6/patches/101-mtd-mxflash.patch
new file mode 100755 (executable)
index 0000000..754a91e
--- /dev/null
@@ -0,0 +1,31 @@
+--- linux-2.6.19.2/drivers/mtd/chips/Kconfig.old       2007-01-11 03:10:36.000000000 +0800
++++ linux-2.6.19.2/drivers/mtd/chips/Kconfig   2007-03-29 14:43:32.000000000 +0800
+@@ -199,6 +199,14 @@
+         provides support for one of those command sets, used on chips
+         including the AMD Am29LV320.
++config MTD_CFI_AMDSTD_FORCE_BOTTOM_BOOT
++      bool "Force bottom boot for Macronix flash chips"
++      depends on MTD_CFI_AMDSTD
++      help
++        Some Macronix flash chips have wrong CFI info, and the driver may
++        detect the type incorrectly. Select this if the chip part number
++        ends with BTC.
++
+ config MTD_CFI_STAA
+       tristate "Support for ST (Advanced Architecture) flash chips"
+       depends on MTD_GEN_PROBE
+--- linux-2.6.19.2/drivers/mtd/chips/cfi_cmdset_0002.c.old     2007-03-22 16:14:56.000000000 +0800
++++ linux-2.6.19.2/drivers/mtd/chips/cfi_cmdset_0002.c 2007-03-29 14:07:28.000000000 +0800
+@@ -320,6 +320,11 @@
+               cfi_tell_features(extp);
+ #endif
++#ifdef CONFIG_MTD_CFI_AMDSTD_FORCE_BOTTOM_BOOT
++              extp->TopBottom = 2;
++              bootloc = extp->TopBottom;
++#endif
++
+               bootloc = extp->TopBottom;
+               if ((bootloc != 2) && (bootloc != 3)) {
+                       printk(KERN_WARNING "%s: CFI does not contain boot "