ixp400-eth: incorporate new patches from nslu2 CVS into 1.5
authorJohn Bowler <jbowler@nslu2-linux.org>
Tue, 10 Jan 2006 01:06:43 +0000 (01:06 +0000)
committerOpenEmbedded Project <openembedded-devel@lists.openembedded.org>
Tue, 10 Jan 2006 01:06:43 +0000 (01:06 +0000)
 - three new patches from dwery:
    continue-if-qmgr-init-fails, int-random, stop-on-rmmod
   change to device name (eth vs ixp) handling from rwhitby so that is
    works on non-OE builds (plus debug code added to debug.patch)
   sanitise patches to make them easier to compare

12 files changed:
packages/ixp425-eth/ixp400-eth-1.5/2.6.14.patch
packages/ixp425-eth/ixp400-eth-1.5/2.6.15.patch
packages/ixp425-eth/ixp400-eth-1.5/Makefile.patch
packages/ixp425-eth/ixp400-eth-1.5/continue-if-qmgr-init-fails.patch [new file with mode: 0644]
packages/ixp425-eth/ixp400-eth-1.5/debug.patch
packages/ixp425-eth/ixp400-eth-1.5/device-name.patch
packages/ixp425-eth/ixp400-eth-1.5/int-random.patch [new file with mode: 0644]
packages/ixp425-eth/ixp400-eth-1.5/le.patch
packages/ixp425-eth/ixp400-eth-1.5/mac-address.patch
packages/ixp425-eth/ixp400-eth-1.5/poll-controller.patch
packages/ixp425-eth/ixp400-eth-1.5/stop-on-rmmod.patch [new file with mode: 0644]
packages/ixp425-eth/ixp400-eth_1.5.bb

index 9d8dcc6..f3426e4 100644 (file)
@@ -1,5 +1,8 @@
---- ./ixp400_eth.c     2005-11-19 23:27:54.541565744 -0800
-+++ ./ixp400_eth.c     2005-11-19 23:28:56.253449028 -0800
+ ixp400_eth.c |    8 ++++++--
+ 1 file changed, 6 insertions(+), 2 deletions(-)
+
+--- ixp400-eth/ixp400_eth.c    1970-01-01 00:00:00.000000000 +0000
++++ ixp400-eth/ixp400_eth.c    1970-01-01 00:00:00.000000000 +0000
 @@ -1838,7 +1838,11 @@ static inline void dev_eth_type_trans(un
      skb->len -= header_len;
     
index 143c509..83115d8 100644 (file)
@@ -1,5 +1,10 @@
---- ./ixp400_eth.c.orig        2005-11-13 16:17:57.943717806 -0800
-+++ ./ixp400_eth.c     2005-11-13 16:29:00.829430574 -0800
+2.6.15 needs platform_device.h
+
+ ixp400_eth.c |    4 ++++
+ 1 file changed, 4 insertions(+)
+
+--- ixp400-eth/ixp400_eth.c    1970-01-01 00:00:00.000000000 +0000
++++ ixp400-eth/ixp400_eth.c    1970-01-01 00:00:00.000000000 +0000
 @@ -65,6 +65,10 @@
  #include <linux/sysctl.h>
  #include <linux/unistd.h>
index 2120391..3bc51f0 100644 (file)
@@ -1,5 +1,8 @@
---- ./Makefile 2005-09-06 00:17:15.000000000 -0700
-+++ ./Makefile 2005-10-02 22:15:19.974595551 -0700
+This is an OpenEmbedded only patch to make the code buildable in
+the OpenEmbedded environment.
+
+--- ixp400-eth/Makefile        1970-01-01 00:00:00.000000000 +0000
++++ ixp400-eth/Makefile        1970-01-01 00:00:00.000000000 +0000
 @@ -0,0 +1,30 @@
 +obj-m := ixp400_eth.o
 +
diff --git a/packages/ixp425-eth/ixp400-eth-1.5/continue-if-qmgr-init-fails.patch b/packages/ixp425-eth/ixp400-eth-1.5/continue-if-qmgr-init-fails.patch
new file mode 100644 (file)
index 0000000..8508790
--- /dev/null
@@ -0,0 +1,22 @@
+tries to go on even if queue manager initialization
+fails. this is hand because you'll be allowed to
+insert ixp400_eth immediately after you have removed
+it, without re-inserting ixp400.
+
+ ixp400_eth.c |    5 +----
+ 1 file changed, 1 insertion(+), 4 deletions(-)
+
+--- ixp400-eth/ixp400_eth.c    1970-01-01 00:00:00.000000000 +0000
++++ ixp400-eth/ixp400_eth.c    1970-01-01 00:00:00.000000000 +0000
+@@ -2850,10 +2850,7 @@ static int qmgr_init(void)
+     /* Initialise Queue Manager */
+     P_VERBOSE("Initialising Queue Manager...\n");
+     if ((res = ixQMgrInit()))
+-    {
+-      P_ERROR("Error initialising queue manager!\n");
+-      return -1;
+-    }
++      P_ERROR("Error initialising queue manager, trying to continue!\n");
+     TRACE;
index f88457c..c684c07 100644 (file)
@@ -1,7 +1,62 @@
-# This patch is not necessary but helps when debugging the build
---- ./ixp400_eth.c     2005-11-20 13:26:14.890767165 -0800
-+++ ./ixp400_eth.c     2005-11-20 13:45:32.163589752 -0800
-@@ -3249,6 +3249,8 @@ static int __devinit dev_eth_probe(struc
+This patch is not necessary but helps when debugging the build
+
+--- ixp400-eth/ixp400_eth.c    1970-01-01 00:00:00.000000000 +0000
++++ ixp400-eth/ixp400_eth.c    1970-01-01 00:00:00.000000000 +0000
+@@ -1350,9 +1350,10 @@ static int dev_media_check_thread (void*
+       
+           if (res != IX_ETH_ACC_SUCCESS)
+           {
+-              P_WARN("ixEthMiiLinkStatus failed on PHY%d.\n"
++              P_WARN("%s: ixEthMiiLinkStatus failed on PHY%d.\n"
+                      "\tCan't determine\nthe auto negotiated parameters. "
+                      "Using default values.\n",
++                     dev->name,
+                      phyNum); 
+               /* something is bad, gracefully stops the loop */
+               priv->maintenanceCheckStopped = TRUE;
+@@ -2213,7 +2214,8 @@ static int port_enable(struct net_device
+          IX_IEEE803_MAC_ADDRESS_SIZE);
+     if ((res = ixEthAccPortUnicastMacAddressSet(priv->port_id, &npeMacAddr)))
+     {
+-        P_VERBOSE("Failed to set MAC address %2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x for port %d\n",
++        P_VERBOSE("%s: Failed to set MAC address %2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x for port %d\n",
++             dev->name,
+              (unsigned)npeMacAddr.macAddress[0],
+              (unsigned)npeMacAddr.macAddress[1],
+              (unsigned)npeMacAddr.macAddress[2],
+@@ -2707,8 +2709,8 @@ static int do_dev_ioctl(struct net_devic
+           down (miiAccessMutex);     /* lock the MII register access mutex */
+           if ((res = ixEthAccMiiReadRtn (data->phy_id, data->reg_num, &data->val_out)))
+           {
+-              P_ERROR("Error reading MII reg %d on phy %d\n",
+-                     data->reg_num, data->phy_id);
++              P_ERROR("%s: Error reading MII reg %d on phy %d\n",
++                     dev->name, data->reg_num, data->phy_id);
+               res = -1;
+           }
+           up (miiAccessMutex);        /* release the MII register access mutex */
+@@ -2720,8 +2722,8 @@ static int do_dev_ioctl(struct net_devic
+           down (miiAccessMutex);     /* lock the MII register access mutex */
+           if ((res = ixEthAccMiiWriteRtn (data->phy_id, data->reg_num, data->val_in)))
+           {
+-              P_ERROR("Error writing MII reg %d on phy %d\n",
+-                        data->reg_num, data->phy_id);
++              P_ERROR("%s: Error writing MII reg %d on phy %d\n",
++                        dev->name, data->reg_num, data->phy_id);
+               res = -1;
+           }
+           up (miiAccessMutex);        /* release the MII register access mutex */
+@@ -3049,7 +3051,8 @@ static int set_mac_address(struct net_de
+     /* Set MAC addr in h/w (ethAcc checks for MAC address to be valid) */
+     if ((res = ixEthAccPortUnicastMacAddressSet(priv->port_id, &npeMacAddr)))
+     {
+-        P_VERBOSE("Failed to set MAC address %2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x for port %d\n",
++        P_VERBOSE("%s: Failed to set MAC address %2.2x:%2.2x:%2.2x:%2.2x:%2.2x:%2.2x for port %d\n",
++             dev->name,
+              (unsigned)npeMacAddr.macAddress[0],
+              (unsigned)npeMacAddr.macAddress[1],
+              (unsigned)npeMacAddr.macAddress[2],
+@@ -3267,6 +3270,8 @@ static int __devinit dev_eth_probe(struc
        kmalloc(sizeof(struct semaphore), GFP_KERNEL);
      if (!priv->maintenanceCheckThreadComplete)
      {
@@ -10,7 +65,7 @@
        goto error;
      }
      priv->lock = SPIN_LOCK_UNLOCKED;
-@@ -3355,7 +3361,11 @@ static int __devinit dev_eth_probe(struc
+@@ -3360,7 +3365,11 @@ static int __devinit dev_eth_probe(struc
  
  #if IS_KERNEL26
      if (register_netdev(ndev))
@@ -22,7 +77,7 @@
  #else
      found_devices++;
  #endif /* IS_KERNEL26 */
-@@ -3365,6 +3375,8 @@ static int __devinit dev_eth_probe(struc
+@@ -3370,6 +3379,8 @@ static int __devinit dev_eth_probe(struc
      /* register EthAcc callbacks for this port */
      if (dev_rxtxcallback_register(portId, (UINT32)ndev))
      {
@@ -31,7 +86,7 @@
        goto error;
      }
  
-@@ -3388,6 +3400,7 @@ static int __devinit dev_eth_probe(struc
+@@ -3393,6 +3404,7 @@ static int __devinit dev_eth_probe(struc
  
  /* Error handling: enter here whenever error detected */
  error:
      TRACE;
  
  #ifdef CONFIG_IXP400_ETH_QDISC_ENABLED
-@@ -3523,6 +3536,9 @@ static int __init ixp400_eth_init(void)
+@@ -3465,21 +3477,21 @@ static int __devexit dev_eth_remove(int 
+       {
+           if (IX_SUCCESS != ixNpeDlNpeStopAndReset(IX_NPEDL_NPEID_NPEA))
+           {
+-              P_NOTICE("Error Halting NPE for Ethernet port %d!\n", portId);
++              P_NOTICE("%s: Error Halting NPE for Ethernet port %d!\n", ndev->name, portId);
+           }
+       }
+       if (default_npeImageId[portId] == IX_ETH_NPE_B_IMAGE_ID)
+       {
+           if (IX_SUCCESS != ixNpeDlNpeStopAndReset(IX_NPEDL_NPEID_NPEB))
+           {
+-              P_NOTICE("Error Halting NPE for Ethernet port %d!\n", portId);
++              P_NOTICE("%s: Error Halting NPE for Ethernet port %d!\n", ndev->name, portId);
+           }
+       }
+       if (default_npeImageId[portId] == IX_ETH_NPE_C_IMAGE_ID)
+       {
+           if (IX_SUCCESS != ixNpeDlNpeStopAndReset(IX_NPEDL_NPEID_NPEC))
+           {
+-              P_NOTICE("Error Halting NPE for Ethernet port %d!\n", portId);
++              P_NOTICE("%s: Error Halting NPE for Ethernet port %d!\n", ndev->name, portId);
+           }
+       }
+@@ -3528,6 +3540,9 @@ static int __init ixp400_eth_init(void)
      TRACE;
  
      P_INFO("Initializing IXP400 NPE Ethernet driver software v. " MOD_VERSION " \n");
index b0e0d32..d8bbc97 100644 (file)
@@ -1,14 +1,47 @@
---- ./ixp400_eth.c     2005-11-20 16:58:48.973330982 -0800
-+++ ./ixp400_eth.c     2005-11-20 17:01:26.719257307 -0800
-@@ -161,7 +161,11 @@ MODULE_PARM(dev_max_count, "i");
+ register the ethernet devices as ethX
+
+ ixp400_eth.c |   41 +++++++++++++++++++----------------------
+ 1 file changed, 19 insertions(+), 22 deletions(-)
+
+--- ixp400-eth/ixp400_eth.c    1970-01-01 00:00:00.000000000 +0000
++++ ixp400-eth/ixp400_eth.c    1970-01-01 00:00:00.000000000 +0000
+@@ -160,9 +160,6 @@ MODULE_PARM_DESC(phy_reset, "If non-zero
+ MODULE_PARM(dev_max_count, "i");
  MODULE_PARM_DESC(dev_max_count, "Number of devices to initialize");
  
- /* devices will be called ixp0 and ixp1 */
-+#ifdef IX_DEVICE_NAME_ETH
-+#define DEVICE_NAME "eth"
-+#else
- #define DEVICE_NAME "ixp"
-+#endif
+-/* devices will be called ixp0 and ixp1 */
+-#define DEVICE_NAME "ixp"
+-
  /* boolean values for PHY link speed, duplex, and autonegotiation */
  #define PHY_SPEED_10    0
+ #define PHY_SPEED_100   1
+@@ -1570,7 +1568,7 @@ static int dev_pmu_timer_setup(void)
+     if (request_irq(IX_OSAL_IXP400_XSCALE_PMU_IRQ_LVL,
+                     dev_pmu_timer_os_isr,
+                     SA_SHIRQ,
+-                    DEVICE_NAME,
++                    MODULE_NAME,
+                     (void *)IRQ_ANY_PARAMETER))
+     {
+         P_ERROR("Failed to reassign irq to PMU timer interrupt!\n");
+@@ -3009,8 +3008,8 @@ static int phy_init(void)
+       if (port_id == IX_ETH_PORT_2) npe_id = "C";
+       if (port_id == IX_ETH_PORT_3) npe_id = "A";
+-      P_INFO("%s%d is using NPE%s and the PHY at address %d\n",
+-             DEVICE_NAME, dev_count, npe_id, phyAddresses[port_id]);
++      P_INFO("ethernet %d using NPE%s and the PHY at address %d\n",
++             dev_count, npe_id, phyAddresses[port_id]);
+       /* Set the MAC to the same duplex mode as the phy */
+       ixEthAccPortDuplexModeSet(port_id,
+@@ -3215,9 +3215,6 @@ static int __devinit dev_eth_probe(struc
+     /* set the private port ID */
+     priv->port_id  = portId;
+-    /* set device name */
+-    sprintf(ndev->name, DEVICE_NAME"%d", priv->port_id);
+-
+     TRACE;
+     /* initialize RX pool */
diff --git a/packages/ixp425-eth/ixp400-eth-1.5/int-random.patch b/packages/ixp425-eth/ixp400-eth-1.5/int-random.patch
new file mode 100644 (file)
index 0000000..fede9da
--- /dev/null
@@ -0,0 +1,16 @@
+use the ethernet device interrupts to gather entropy
+
+ ixp400_eth.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- ixp400-eth/ixp400_eth.c    1970-01-01 00:00:00.000000000 +0000
++++ ixp400-eth/ixp400_eth.c    1970-01-01 00:00:00.000000000 +0000
+@@ -2864,7 +2864,7 @@ static int qmgr_init(void)
+     if (request_irq(IX_OSAL_IXP400_QM1_IRQ_LVL,
+                     dev_qmgr_os_isr,
+-                    SA_SHIRQ,
++                    SA_SHIRQ | SA_SAMPLE_RANDOM,
+                     MODULE_NAME,
+                     (void *)IRQ_ANY_PARAMETER))
+     {
index 37c4150..3d56901 100644 (file)
@@ -1,6 +1,11 @@
---- ./ixp400_eth.c     2005-11-20 18:25:26.812410374 -0800
-+++ ./ixp400_eth.c     2005-11-20 18:50:22.126504557 -0800
-@@ -2046,6 +2046,16 @@ static void rx_cb(UINT32 callbackTag, IX
+little endian support
+
+ ixp400_eth.c |   20 ++++++++++++++++++++
+ 1 file changed, 20 insertions(+)
+
+--- ixp400-eth/ixp400_eth.c    1970-01-01 00:00:00.000000000 +0000
++++ ixp400-eth/ixp400_eth.c    1970-01-01 00:00:00.000000000 +0000
+@@ -2040,6 +2040,16 @@ static void rx_cb(UINT32 callbackTag, IX
        skb->tail = skb->data + len;
        skb->len = len;
        
 +              *p = ntohl(*p), ++p;
 +      }
 +#endif
-+      
++
  #ifdef DEBUG_DUMP
        skb_dump("rx", skb);
  #endif
-@@ -2436,6 +2446,16 @@ static int dev_hard_start_xmit(struct sk
+@@ -2431,6 +2441,16 @@ static int dev_hard_start_xmit(struct sk
        return 0;
      }
  
index bd16124..1845dd3 100644 (file)
@@ -1,5 +1,5 @@
---- ./ixp400_eth.c.base        2005-11-28 23:59:34.476404165 -0800
-+++ ./ixp400_eth.c     2005-11-29 00:42:44.587389574 -0800
+--- ixp400-eth/ixp400_eth.c    1970-01-01 00:00:00.000000000 +0000
++++ ixp400-eth/ixp400_eth.c    1970-01-01 00:00:00.000000000 +0000
 @@ -23,10 +23,10 @@
   * This driver is written and optimized for Intel Xscale technology.
   *
index 22049c3..64fb310 100644 (file)
@@ -1,6 +1,11 @@
---- ./ixp400_eth.c     2005-11-19 23:36:44.482912850 -0800
-+++ ./ixp400_eth.c     2005-11-19 23:39:13.080263492 -0800
-@@ -347,6 +347,12 @@ static int dev_pmu_timer_init(void);
+poll controller support
+
+ ixp400_eth.c |   22 ++++++++++++++++++++++
+ 1 file changed, 22 insertions(+)
+
+--- ixp400-eth/ixp400_eth.c    1970-01-01 00:00:00.000000000 +0000
++++ ixp400-eth/ixp400_eth.c    1970-01-01 00:00:00.000000000 +0000
+@@ -348,6 +348,12 @@ static int dev_pmu_timer_init(void);
  extern void 
  ixEthTxFrameDoneQMCallback(IxQMgrQId qId, IxQMgrCallbackId callbackId);
  
@@ -13,7 +18,7 @@
  /* Private device data */
  typedef struct {
      spinlock_t lock;  /* multicast management lock */
-@@ -3056,6 +3062,19 @@ static int set_mac_address(struct net_de
+@@ -3060,6 +3066,19 @@ static int set_mac_address(struct net_de
      return 0;
  }
  
@@ -33,7 +38,7 @@
  
  /* 
   *  TX QDISC
-@@ -3269,6 +3288,9 @@ static int __devinit dev_eth_probe(struc
+@@ -3270,6 +3289,9 @@ static int __devinit dev_eth_probe(struc
      ndev->get_stats = dev_get_stats;
      ndev->set_multicast_list = dev_set_multicast_list;
      ndev->flags |= IFF_MULTICAST;
diff --git a/packages/ixp425-eth/ixp400-eth-1.5/stop-on-rmmod.patch b/packages/ixp425-eth/ixp400-eth-1.5/stop-on-rmmod.patch
new file mode 100644 (file)
index 0000000..2ddc989
--- /dev/null
@@ -0,0 +1,29 @@
+devices must be explicitely stopped when
+the driver is going do be removed, otherwise
+it will simply hang.
+
+ ixp400_eth.c |   13 ++++++++++---
+ 1 file changed, 10 insertions(+), 3 deletions(-)
+
+--- ixp400-eth/ixp400_eth.c    1970-01-01 00:00:00.000000000 +0000
++++ ixp400-eth/ixp400_eth.c    1970-01-01 00:00:00.000000000 +0000
+@@ -3800,9 +3800,16 @@ void __exit ixp400_eth_exit(void)
+     TRACE;
+-    /* We can only get here when the module use count is 0,
+-     * so there's no need to stop devices.
+-     */
++    /* stop devices */
++
++#if IS_KERNEL26
++    for (dev_count = 0;
++       dev_count < dev_max_count;  /* module parameter */
++       dev_count++)
++    {
++      do_dev_stop(platform_get_drvdata(&ixp400_eth_devices[dev_count]));
++    }
++#endif
+     if (no_ixp400_sw_init == 0) /* module parameter */
+     {
index 24eb358..96287fb 100644 (file)
@@ -6,16 +6,19 @@ HOMEPAGE = "http://www.intel.com/design/network/products/npfamily/ixp420.htm"
 LICENSE = "GPL"
 
 SRC_URI = "ftp://aiedownload.intel.com/df-support/9519/eng/GPL_ixp400LinuxEthernetDriverPatch-1_5.zip"
-SRC_URI += "file://Makefile.patch;patch=1"
 SRC_URI += "file://2.6.14.patch;patch=1"
 SRC_URI += "file://2.6.15.patch;patch=1"
 SRC_URI += "file://device-name.patch;patch=1"
 SRC_URI += "file://poll-controller.patch;patch=1"
 SRC_URI += "file://le.patch;patch=1"
 SRC_URI += "file://mac-address.patch;patch=1"
+SRC_URI += "file://int-random.patch;patch=1"
+SRC_URI += "file://stop-on-rmmod.patch;patch=1"
+SRC_URI += "file://continue-if-qmgr-init-fails.patch;patch=1"
 SRC_URI += "file://debug.patch;patch=1"
+SRC_URI += "file://Makefile.patch;patch=1"
 
-PR = "r1"
+PR = "r2"
 
 DEPENDS = "ixp4xx-csr"
 RDEPENDS = "ixp4xx-csr"