--- /dev/null
+From 2b53d07891630dead46d65c8f896955fd3ae0302 Mon Sep 17 00:00:00 2001
+From: Darren Hart <dvhart@linux.intel.com>
+Date: Mon, 16 Jan 2012 09:50:19 +0000
+Subject: pch_gbe: Do not abort probe on bad MAC
+
+From: Darren Hart <dvhart@linux.intel.com>
+
+commit 2b53d07891630dead46d65c8f896955fd3ae0302 upstream.
+
+If the MAC is invalid or not implemented, do not abort the probe. Issue
+a warning and prevent bringing the interface up until a MAC is set manually
+(via ifconfig $IFACE hw ether $MAC).
+
+Tested on two platforms, one with a valid MAC, the other without a MAC. The real
+MAC is used if present, the interface fails to come up until the MAC is set on
+the other. They successfully get an IP over DHCP and pass a simple ping and
+login over ssh test.
+
+This is meant to allow the Inforce SYS940X development board:
+http://www.inforcecomputing.com/SYS940X_ECX.html
+(and others suffering from a missing MAC) to work with the mainline kernel.
+Without this patch, the probe will fail and the interface will not be created,
+preventing the user from configuring the MAC manually.
+
+This does not make any attempt to address a missing or invalid MAC for the
+pch_phub driver.
+
+Signed-off-by: Darren Hart <dvhart@linux.intel.com>
+CC: Arjan van de Ven <arjan@linux.intel.com>
+CC: Alan Cox <alan@linux.intel.com>
+CC: Tomoya MORINAGA <tomoya.rohm@gmail.com>
+CC: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
+CC: "David S. Miller" <davem@davemloft.net>
+CC: Paul Gortmaker <paul.gortmaker@windriver.com>
+CC: Jon Mason <jdmason@kudzu.us>
+CC: Mark Brown <broonie@opensource.wolfsonmicro.com>
+CC: David Laight <David.Laight@ACULAB.COM>
+CC: Joe Perches <joe@perches.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Tomoya MORINAGA <tomoya.rohm@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c | 17 ++++++++++++++---
+ 1 file changed, 14 insertions(+), 3 deletions(-)
+
+--- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
++++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
+@@ -1745,6 +1745,12 @@ int pch_gbe_up(struct pch_gbe_adapter *a
+ struct pch_gbe_rx_ring *rx_ring = adapter->rx_ring;
+ int err;
+
++ /* Ensure we have a valid MAC */
++ if (!is_valid_ether_addr(adapter->hw.mac.addr)) {
++ pr_err("Error: Invalid MAC address\n");
++ return -EINVAL;
++ }
++
+ /* hardware has been reset, we need to reload some things */
+ pch_gbe_set_multi(netdev);
+
+@@ -2467,9 +2473,14 @@ static int pch_gbe_probe(struct pci_dev
+
+ memcpy(netdev->dev_addr, adapter->hw.mac.addr, netdev->addr_len);
+ if (!is_valid_ether_addr(netdev->dev_addr)) {
+- dev_err(&pdev->dev, "Invalid MAC Address\n");
+- ret = -EIO;
+- goto err_free_adapter;
++ /*
++ * If the MAC is invalid (or just missing), display a warning
++ * but do not abort setting up the device. pch_gbe_up will
++ * prevent the interface from being brought up until a valid MAC
++ * is set.
++ */
++ dev_err(&pdev->dev, "Invalid MAC address, "
++ "interface disabled.\n");
+ }
+ setup_timer(&adapter->watchdog_timer, pch_gbe_watchdog,
+ (unsigned long)adapter);
--- /dev/null
+From 73f98eab9b9e0bab492ca06add5657d9e702ddb1 Mon Sep 17 00:00:00 2001
+From: Dan Carpenter <dan.carpenter@oracle.com>
+Date: Wed, 29 Feb 2012 21:17:08 +0000
+Subject: pch_gbe: memory corruption calling pch_gbe_validate_option()
+
+From: Dan Carpenter <dan.carpenter@oracle.com>
+
+commit 73f98eab9b9e0bab492ca06add5657d9e702ddb1 upstream.
+
+pch_gbe_validate_option() modifies 32 bits of memory but we pass
+&hw->phy.autoneg_advertised which only has 16 bits and &hw->mac.fc
+which only has 8 bits.
+
+Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Tomoya MORINAGA <tomoya.rohm@gmail.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_param.c | 15 ++++++++-------
+ 1 file changed, 8 insertions(+), 7 deletions(-)
+
+--- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_param.c
++++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_param.c
+@@ -321,10 +321,10 @@ static void pch_gbe_check_copper_options
+ pr_debug("AutoNeg specified along with Speed or Duplex, AutoNeg parameter ignored\n");
+ hw->phy.autoneg_advertised = opt.def;
+ } else {
+- hw->phy.autoneg_advertised = AutoNeg;
+- pch_gbe_validate_option(
+- (int *)(&hw->phy.autoneg_advertised),
+- &opt, adapter);
++ int tmp = AutoNeg;
++
++ pch_gbe_validate_option(&tmp, &opt, adapter);
++ hw->phy.autoneg_advertised = tmp;
+ }
+ }
+
+@@ -495,9 +495,10 @@ void pch_gbe_check_options(struct pch_gb
+ .arg = { .l = { .nr = (int)ARRAY_SIZE(fc_list),
+ .p = fc_list } }
+ };
+- hw->mac.fc = FlowControl;
+- pch_gbe_validate_option((int *)(&hw->mac.fc),
+- &opt, adapter);
++ int tmp = FlowControl;
++
++ pch_gbe_validate_option(&tmp, &opt, adapter);
++ hw->mac.fc = tmp;
+ }
+
+ pch_gbe_check_copper_options(adapter);