NPE microcode is stored in a separate 'microcode' partition on the NAS100d
[openwrt.git] / target / linux / ixp4xx-2.6 / patches / 139-ixp4xx_net_driver_mtd_load_fw.patch
index 532c800..46ba858 100644 (file)
@@ -1,8 +1,17 @@
-Index: linux-2.6.19/drivers/net/ixp4xx/Kconfig
+---
+ drivers/net/ixp4xx/Kconfig             |   10 +
+ drivers/net/ixp4xx/Makefile            |    1 
+ drivers/net/ixp4xx/npe_ucode.c         |  185 +++++++++++++++++++++++++++++++++
+ drivers/net/ixp4xx/ucode_dl.c          |   43 ++++---
+ include/asm-arm/arch-ixp4xx/platform.h |   19 +++
+ include/linux/ixp_npe.h                |    1 
+ 6 files changed, 239 insertions(+), 20 deletions(-)
+
+Index: linux-2.6.20-rc3/drivers/net/ixp4xx/Kconfig
 ===================================================================
---- linux-2.6.19.orig/drivers/net/ixp4xx/Kconfig
-+++ linux-2.6.19/drivers/net/ixp4xx/Kconfig
-@@ -11,6 +11,7 @@ config IXP4XX_NPE
+--- linux-2.6.20-rc3.orig/drivers/net/ixp4xx/Kconfig
++++ linux-2.6.20-rc3/drivers/net/ixp4xx/Kconfig
+@@ -11,6 +11,7 @@
        tristate "IXP4xx NPE support"
        depends on ARCH_IXP4XX
        depends on NET_ETHERNET
@@ -10,7 +19,7 @@ Index: linux-2.6.19/drivers/net/ixp4xx/Kconfig
        help
          The IXP4XX NPE driver supports the 3 CPU co-processors called
          "Network Processing Engines" (NPE). It adds support fo downloading
-@@ -18,7 +19,7 @@ config IXP4XX_NPE
+@@ -18,7 +19,7 @@
          More about this at: Documentation/networking/ixp4xx/README.
          You can either use this OR the Intel Access Library (IAL)
  
@@ -19,7 +28,7 @@ Index: linux-2.6.19/drivers/net/ixp4xx/Kconfig
        bool "Use Firmware hotplug for Microcode download"
        depends on IXP4XX_NPE
        select HOTPLUG
-@@ -28,6 +29,13 @@ config IXP4XX_FW_LOAD
+@@ -28,6 +29,13 @@
          /usr/lib/hotplug/firmware/NPE-[ABC]
          see Documentation/firmware_class/hotplug-script
  
@@ -33,22 +42,21 @@ Index: linux-2.6.19/drivers/net/ixp4xx/Kconfig
  config IXP4XX_MAC
        tristate "IXP4xx MAC support"
        depends on IXP4XX_NPE
-Index: linux-2.6.19/drivers/net/ixp4xx/Makefile
+Index: linux-2.6.20-rc3/drivers/net/ixp4xx/Makefile
 ===================================================================
---- linux-2.6.19.orig/drivers/net/ixp4xx/Makefile
-+++ linux-2.6.19/drivers/net/ixp4xx/Makefile
-@@ -1,6 +1,7 @@
+--- linux-2.6.20-rc3.orig/drivers/net/ixp4xx/Makefile
++++ linux-2.6.20-rc3/drivers/net/ixp4xx/Makefile
+@@ -1,5 +1,6 @@
  obj-$(CONFIG_IXP4XX_QMGR) += ixp4xx_qmgr.o
  obj-$(CONFIG_IXP4XX_NPE) += ixp4xx_npe.o
- obj-$(CONFIG_IXP4XX_MAC) += ixp4xx_mac.o
 +obj-$(CONFIG_IXP4XX_NPE_FW_MTD) += npe_ucode.o
+ obj-$(CONFIG_IXP4XX_MAC) += ixp4xx_mac.o
+ obj-$(CONFIG_IXP4XX_CRYPTO) += ixp4xx_crypto.o
  
- ixp4xx_npe-objs := ucode_dl.o npe_mh.o
- ixp4xx_mac-objs := mac_driver.o qmgr_eth.o phy.o
-Index: linux-2.6.19/drivers/net/ixp4xx/npe_ucode.c
+Index: linux-2.6.20-rc3/drivers/net/ixp4xx/npe_ucode.c
 ===================================================================
 --- /dev/null
-+++ linux-2.6.19/drivers/net/ixp4xx/npe_ucode.c
++++ linux-2.6.20-rc3/drivers/net/ixp4xx/npe_ucode.c
 @@ -0,0 +1,185 @@
 +/*
 + * Provide an NPE platform device for microcode handling
@@ -235,10 +243,10 @@ Index: linux-2.6.19/drivers/net/ixp4xx/npe_ucode.c
 +
 +MODULE_LICENSE("GPL");
 +MODULE_AUTHOR("Alessandro Zummo <a.zummo@towertech.it>");
-Index: linux-2.6.19/drivers/net/ixp4xx/ucode_dl.c
+Index: linux-2.6.20-rc3/drivers/net/ixp4xx/ucode_dl.c
 ===================================================================
---- linux-2.6.19.orig/drivers/net/ixp4xx/ucode_dl.c
-+++ linux-2.6.19/drivers/net/ixp4xx/ucode_dl.c
+--- linux-2.6.20-rc3.orig/drivers/net/ixp4xx/ucode_dl.c
++++ linux-2.6.20-rc3/drivers/net/ixp4xx/ucode_dl.c
 @@ -16,6 +16,7 @@
  #include <linux/firmware.h>
  #include <linux/dma-mapping.h>
@@ -247,9 +255,9 @@ Index: linux-2.6.19/drivers/net/ixp4xx/ucode_dl.c
  #include <asm/uaccess.h>
  #include <asm/io.h>
  
-@@ -30,6 +31,12 @@
- #define IMG_SIZE(image) (((image)->size * sizeof(u32)) + \
-               sizeof(struct dl_image))
+@@ -26,6 +27,12 @@
+ #define DL_MAGIC 0xfeedf00d
+ #define DL_MAGIC_SWAP 0x0df0edfe
  
 +#define IMG_REV_MAJOR(id) (((id) >> 8) & 0x0f)
 +#define IMG_REV_MINOR(id) ((id) & 0x0f)
@@ -257,10 +265,10 @@ Index: linux-2.6.19/drivers/net/ixp4xx/ucode_dl.c
 +#define IMG_NPE(id) (((id) >> 24) & 0x0f)
 +#define IMG_IXP(id) (((id) >> 28) & 0x0f)
 +
- #define BT_INSTR 0
- #define BT_DATA 1
-@@ -38,21 +45,6 @@ enum blk_type {
+ #define EOF_BLOCK 0xf
+ #define IMG_SIZE(image) (((image)->size * sizeof(u32)) + \
+               sizeof(struct dl_image))
+@@ -38,21 +45,6 @@
        data,
  };
  
@@ -282,8 +290,8 @@ Index: linux-2.6.19/drivers/net/ixp4xx/ucode_dl.c
  struct dl_codeblock {
        u32 npe_addr;
        u32 size;
-@@ -134,23 +126,41 @@ struct device *get_npe_by_id(int id)
-                       &id, match_by_npeid);
+@@ -127,20 +119,33 @@
+       return 0;
  }
  
 -static int store_npe_image(struct dl_image *image, struct device *dev)
@@ -292,21 +300,14 @@ Index: linux-2.6.19/drivers/net/ixp4xx/ucode_dl.c
        struct dl_block *blk;
        struct dl_codeblock *cb;
        struct npe_info *npe;
--      int ret=0;
-+      int ret = 0;
+       int ret=0;
 +      u16 crc;
  
        if (!dev) {
 -              dev = get_npe_by_id( (image->id >> 24) & 0xf);
--              put_device(dev);
 +              dev = get_npe_by_id(IMG_NPE(image->id));
-+              if (dev)
-+                      put_device(dev);
-+                      // XXX shouldn't this put_device be outside if(!dev) ?
-+              else
-+                      printk(KERN_ERR "npe: cannot find npe for image %x\n", IMG_NPE(image->id));
+               return_npe_dev(dev);
        }
-+
        if (!dev)
                return -ENODEV;
  
@@ -323,25 +324,9 @@ Index: linux-2.6.19/drivers/net/ixp4xx/ucode_dl.c
 +      crc = crc16(0, (u8 *) image, IMG_SIZE(image));
 +
        npe = dev_get_drvdata(dev);
--      if ( npe_status(npe) & IX_NPEDL_EXCTL_STATUS_RUN) {
-+      if (npe_status(npe) & IX_NPEDL_EXCTL_STATUS_RUN) {
+       if (npe->loaded && (npe->usage > 0)) {
                printk(KERN_INFO "Cowardly refusing to reload an Image "
-                               "into the running %s\n", npe->plat->name);
-               return 0; /* indicate success anyway... */
-@@ -173,9 +183,9 @@ static int store_npe_image(struct dl_ima
-       *(u32*)npe->img_info = cpu_to_be32(image->id);
-       npe_start(npe);
--      printk(KERN_INFO "Image loaded to %s Func:%x, Rel: %x:%x, Status: %x\n",
-+      printk(KERN_INFO "npe: firmware loaded to %s, func: %02x, rev: %x.%x, status: %x, crc: %x\n",
-                       npe->plat->name, npe->img_info[1], npe->img_info[2],
--                      npe->img_info[3], npe_status(npe));
-+                      npe->img_info[3], npe_status(npe), crc);
-       return 0;
- }
-@@ -265,8 +275,7 @@ static ssize_t ucode_write(struct file *
+@@ -267,8 +272,7 @@
  
  static void npe_firmware_probe(struct device *dev)
  {
@@ -351,25 +336,16 @@ Index: linux-2.6.19/drivers/net/ixp4xx/ucode_dl.c
        const struct firmware *fw_entry;
        struct npe_info *npe = dev_get_drvdata(dev);
        struct dl_image *image;
-@@ -388,7 +397,7 @@ static int npe_probe(struct platform_dev
-       npe->plat = plat;
-       disable_npe_irq(npe);
--      if (! (npe_status(npe) & IX_NPEDL_EXCTL_STATUS_RUN))
-+      if (!(npe_status(npe) & IX_NPEDL_EXCTL_STATUS_RUN))
-               npe_firmware_probe(&pdev->dev);
-       return 0;
-@@ -464,3 +473,4 @@ MODULE_LICENSE("GPL");
- MODULE_AUTHOR("Christian Hohnstaedt <chohnstaedt@innominate.com>");
+@@ -477,3 +481,4 @@
  
  EXPORT_SYMBOL(get_npe_by_id);
+ EXPORT_SYMBOL(return_npe_dev);
 +EXPORT_SYMBOL(store_npe_image);
-Index: linux-2.6.19/include/asm-arm/arch-ixp4xx/platform.h
+Index: linux-2.6.20-rc3/include/asm-arm/arch-ixp4xx/platform.h
 ===================================================================
---- linux-2.6.19.orig/include/asm-arm/arch-ixp4xx/platform.h
-+++ linux-2.6.19/include/asm-arm/arch-ixp4xx/platform.h
-@@ -86,6 +86,20 @@ struct ixp4xx_i2c_pins {
+--- linux-2.6.20-rc3.orig/include/asm-arm/arch-ixp4xx/platform.h
++++ linux-2.6.20-rc3/include/asm-arm/arch-ixp4xx/platform.h
+@@ -86,6 +86,21 @@
        unsigned long scl_pin;
  };
  
@@ -387,27 +363,29 @@ Index: linux-2.6.19/include/asm-arm/arch-ixp4xx/platform.h
 +              struct dl_block block[0];
 +      } u;
 +};
++
  struct npe_plat_data {
        const char *name;
        int data_size;
-@@ -103,6 +117,9 @@ struct mac_plat_info {
-       unsigned char hwaddr[6]; /* Desired hardware address */
+@@ -105,6 +120,10 @@
  };
  
 +struct npe_ucode_platform_data {
 +      unsigned char *mtd_partition;
 +};
- struct sys_timer;
-Index: linux-2.6.19/include/linux/ixp_npe.h
++ 
+ /*
+  * This structure provide a means for the board setup code
+  * to give information to th pata_ixp4xx driver. It is
+Index: linux-2.6.20-rc3/include/linux/ixp_npe.h
 ===================================================================
---- linux-2.6.19.orig/include/linux/ixp_npe.h
-+++ linux-2.6.19/include/linux/ixp_npe.h
-@@ -71,6 +71,7 @@ static inline u32 npe_read_ecs_reg(struc
- }
+--- linux-2.6.20-rc3.orig/include/linux/ixp_npe.h
++++ linux-2.6.20-rc3/include/linux/ixp_npe.h
+@@ -99,6 +99,7 @@
  
  extern struct device *get_npe_by_id(int id);
+ extern void return_npe_dev(struct device *dev);
 +extern int store_npe_image(struct dl_image *image, struct device *dev);
  
  /* NPE Messages */
This page took 0.031477 seconds and 4 git commands to generate.