MinnowBoard patches added
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 14 Jan 2014 19:39:52 +0000 (11:39 -0800)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 14 Jan 2014 19:39:52 +0000 (11:39 -0800)
patches.minnowboard/pch_gbe-add-minnowboard-support.patch [new file with mode: 0644]
patches.minnowboard/pch_gbe-convert-pr_-to-netdev_.patch [new file with mode: 0644]
patches.minnowboard/pch_gbe-use-managed-functions-pcim_-and-devm_.patch [new file with mode: 0644]
patches.minnowboard/pch_gbe-use-pch_gbe_phy_regs_len-instead-of-32.patch [new file with mode: 0644]
patches.minnowboard/pch_uart-use-dmi-interface-for-board-detection.patch [new file with mode: 0644]
patches.minnowboard/pci-add-circuitco-vendor-id-and-subsystem-id.patch [new file with mode: 0644]
patches.minnowboard/serial-pch_uart-fix-compilation-warning.patch [new file with mode: 0644]
patches.minnowboard/serial-pch_uart-fix-signed-ness-and-casting-of-uartclk-related-fields.patch [new file with mode: 0644]
patches.minnowboard/serial-pch_uart-remove-__initdata-annotation-from-dmi_table.patch [new file with mode: 0644]
series

diff --git a/patches.minnowboard/pch_gbe-add-minnowboard-support.patch b/patches.minnowboard/pch_gbe-add-minnowboard-support.patch
new file mode 100644 (file)
index 0000000..8eeff6c
--- /dev/null
@@ -0,0 +1,293 @@
+From f1a26fdf5944ff950888ae0017e546690353f85f Mon Sep 17 00:00:00 2001
+From: Darren Hart <dvhart@linux.intel.com>
+Date: Sat, 18 May 2013 14:46:00 -0700
+Subject: pch_gbe: Add MinnowBoard support
+
+From: Darren Hart <dvhart@linux.intel.com>
+
+commit f1a26fdf5944ff950888ae0017e546690353f85f upstream.
+
+The MinnowBoard uses an AR803x PHY with the PCH GBE which requires
+special handling. Use the MinnowBoard PCI Subsystem ID to detect this
+and add a pci_device_id.driver_data structure and functions to handle
+platform setup.
+
+The AR803x does not implement the RGMII 2ns TX clock delay in the trace
+routing nor via strapping. Add a detection method for the board and the
+PHY and enable the TX clock delay via the registers.
+
+This PHY will hibernate without link for 10 seconds. Ensure the PHY is
+awake for probe and then disable hibernation. A future improvement would
+be to convert pch_gbe to using PHYLIB and making sure we can wake the
+PHY at the necessary times rather than permanently disabling it.
+
+Signed-off-by: Darren Hart <dvhart@linux.intel.com>
+Cc: "David S. Miller" <davem@davemloft.net>
+Cc: "H. Peter Anvin" <hpa@zytor.com>
+Cc: Peter Waskiewicz <peter.p.waskiewicz.jr@intel.com>
+Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+Cc: Joe Perches <joe@perches.com>
+Cc: netdev@vger.kernel.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe.h      |   15 ++
+ drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c |   49 +++++++++
+ drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_phy.c  |   97 +++++++++++++++++++
+ drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_phy.h  |    1 
+ 4 files changed, 162 insertions(+)
+
+--- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe.h
++++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe.h
+@@ -582,6 +582,19 @@ struct pch_gbe_hw_stats {
+ };
+ /**
++ * struct pch_gbe_privdata - PCI Device ID driver data
++ * @phy_tx_clk_delay:         Bool, configure the PHY TX delay in software
++ * @phy_disable_hibernate:    Bool, disable PHY hibernation
++ * @platform_init:            Platform initialization callback, called from
++ *                            probe, prior to PHY initialization.
++ */
++struct pch_gbe_privdata {
++      bool phy_tx_clk_delay;
++      bool phy_disable_hibernate;
++      int (*platform_init)(struct pci_dev *pdev);
++};
++
++/**
+  * struct pch_gbe_adapter - board specific private data structure
+  * @stats_lock:       Spinlock structure for status
+  * @ethtool_lock:     Spinlock structure for ethtool
+@@ -604,6 +617,7 @@ struct pch_gbe_hw_stats {
+  * @rx_buffer_len:    Receive buffer length
+  * @tx_queue_len:     Transmit queue length
+  * @have_msi:         PCI MSI mode flag
++ * @pch_gbe_privdata: PCI Device ID driver_data
+  */
+ struct pch_gbe_adapter {
+@@ -631,6 +645,7 @@ struct pch_gbe_adapter {
+       int hwts_tx_en;
+       int hwts_rx_en;
+       struct pci_dev *ptp_pdev;
++      struct pch_gbe_privdata *pdata;
+ };
+ #define pch_gbe_hw_to_adapter(hw)     container_of(hw, struct pch_gbe_adapter, hw)
+--- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
++++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
+@@ -23,6 +23,7 @@
+ #include <linux/module.h>
+ #include <linux/net_tstamp.h>
+ #include <linux/ptp_classify.h>
++#include <linux/gpio.h>
+ #define DRV_VERSION     "1.01"
+ const char pch_driver_version[] = DRV_VERSION;
+@@ -111,6 +112,8 @@ const char pch_driver_version[] = DRV_VE
+ #define PTP_L4_MULTICAST_SA "01:00:5e:00:01:81"
+ #define PTP_L2_MULTICAST_SA "01:1b:19:00:00:00"
++#define MINNOW_PHY_RESET_GPIO         13
++
+ static unsigned int copybreak __read_mostly = PCH_GBE_COPYBREAK_DEFAULT;
+ static int pch_gbe_mdio_read(struct net_device *netdev, int addr, int reg);
+@@ -2635,6 +2638,9 @@ static int pch_gbe_probe(struct pci_dev
+       adapter->pdev = pdev;
+       adapter->hw.back = adapter;
+       adapter->hw.reg = pcim_iomap_table(pdev)[PCH_GBE_PCI_BAR];
++      adapter->pdata = (struct pch_gbe_privdata *)pci_id->driver_data;
++      if (adapter->pdata && adapter->pdata->platform_init)
++              adapter->pdata->platform_init(pdev);
+       adapter->ptp_pdev = pci_get_bus_and_slot(adapter->pdev->bus->number,
+                                              PCI_DEVFN(12, 4));
+@@ -2710,6 +2716,10 @@ static int pch_gbe_probe(struct pci_dev
+       dev_dbg(&pdev->dev, "PCH Network Connection\n");
++      /* Disable hibernation on certain platforms */
++      if (adapter->pdata && adapter->pdata->phy_disable_hibernate)
++              pch_gbe_phy_disable_hibernate(&adapter->hw);
++
+       device_set_wakeup_enable(&pdev->dev, 1);
+       return 0;
+@@ -2720,9 +2730,48 @@ err_free_netdev:
+       return ret;
+ }
++/* The AR803X PHY on the MinnowBoard requires a physical pin to be toggled to
++ * ensure it is awake for probe and init. Request the line and reset the PHY.
++ */
++static int pch_gbe_minnow_platform_init(struct pci_dev *pdev)
++{
++      unsigned long flags = GPIOF_DIR_OUT | GPIOF_INIT_HIGH | GPIOF_EXPORT;
++      unsigned gpio = MINNOW_PHY_RESET_GPIO;
++      int ret;
++
++      ret = devm_gpio_request_one(&pdev->dev, gpio, flags,
++                                  "minnow_phy_reset");
++      if (ret) {
++              dev_err(&pdev->dev,
++                      "ERR: Can't request PHY reset GPIO line '%d'\n", gpio);
++              return ret;
++      }
++
++      gpio_set_value(gpio, 0);
++      usleep_range(1250, 1500);
++      gpio_set_value(gpio, 1);
++      usleep_range(1250, 1500);
++
++      return ret;
++}
++
++static struct pch_gbe_privdata pch_gbe_minnow_privdata = {
++      .phy_tx_clk_delay = true,
++      .phy_disable_hibernate = true,
++      .platform_init = pch_gbe_minnow_platform_init,
++};
++
+ static DEFINE_PCI_DEVICE_TABLE(pch_gbe_pcidev_id) = {
+       {.vendor = PCI_VENDOR_ID_INTEL,
+        .device = PCI_DEVICE_ID_INTEL_IOH1_GBE,
++       .subvendor = PCI_VENDOR_ID_CIRCUITCO,
++       .subdevice = PCI_SUBSYSTEM_ID_CIRCUITCO_MINNOWBOARD,
++       .class = (PCI_CLASS_NETWORK_ETHERNET << 8),
++       .class_mask = (0xFFFF00),
++       .driver_data = (kernel_ulong_t)&pch_gbe_minnow_privdata
++       },
++      {.vendor = PCI_VENDOR_ID_INTEL,
++       .device = PCI_DEVICE_ID_INTEL_IOH1_GBE,
+        .subvendor = PCI_ANY_ID,
+        .subdevice = PCI_ANY_ID,
+        .class = (PCI_CLASS_NETWORK_ETHERNET << 8),
+--- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_phy.c
++++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_phy.c
+@@ -74,6 +74,15 @@
+ #define MII_SR_100X_FD_CAPS      0x4000       /* 100X  Full Duplex Capable */
+ #define MII_SR_100T4_CAPS        0x8000       /* 100T4 Capable */
++/* AR8031 PHY Debug Registers */
++#define PHY_AR803X_ID           0x00001374
++#define PHY_AR8031_DBG_OFF      0x1D
++#define PHY_AR8031_DBG_DAT      0x1E
++#define PHY_AR8031_SERDES       0x05
++#define PHY_AR8031_HIBERNATE    0x0B
++#define PHY_AR8031_SERDES_TX_CLK_DLY   0x0100 /* TX clock delay of 2.0ns */
++#define PHY_AR8031_PS_HIB_EN           0x8000 /* Hibernate enable */
++
+ /* Phy Id Register (word 2) */
+ #define PHY_REVISION_MASK        0x000F
+@@ -249,6 +258,51 @@ inline void pch_gbe_phy_set_rgmii(struct
+ }
+ /**
++ * pch_gbe_phy_tx_clk_delay - Setup TX clock delay via the PHY
++ * @hw:                   Pointer to the HW structure
++ * Returns
++ *    0:              Successful.
++ *    -EINVAL:        Invalid argument.
++ */
++static int pch_gbe_phy_tx_clk_delay(struct pch_gbe_hw *hw)
++{
++      /* The RGMII interface requires a ~2ns TX clock delay. This is typically
++       * done in layout with a longer trace or via PHY strapping, but can also
++       * be done via PHY configuration registers.
++       */
++      struct pch_gbe_adapter *adapter = pch_gbe_hw_to_adapter(hw);
++      u16 mii_reg;
++      int ret = 0;
++
++      switch (hw->phy.id) {
++      case PHY_AR803X_ID:
++              netdev_dbg(adapter->netdev,
++                         "Configuring AR803X PHY for 2ns TX clock delay\n");
++              pch_gbe_phy_read_reg_miic(hw, PHY_AR8031_DBG_OFF, &mii_reg);
++              ret = pch_gbe_phy_write_reg_miic(hw, PHY_AR8031_DBG_OFF,
++                                               PHY_AR8031_SERDES);
++              if (ret)
++                      break;
++
++              pch_gbe_phy_read_reg_miic(hw, PHY_AR8031_DBG_DAT, &mii_reg);
++              mii_reg |= PHY_AR8031_SERDES_TX_CLK_DLY;
++              ret = pch_gbe_phy_write_reg_miic(hw, PHY_AR8031_DBG_DAT,
++                                               mii_reg);
++              break;
++      default:
++              netdev_err(adapter->netdev,
++                         "Unknown PHY (%x), could not set TX clock delay\n",
++                         hw->phy.id);
++              return -EINVAL;
++      }
++
++      if (ret)
++              netdev_err(adapter->netdev,
++                         "Could not configure tx clock delay for PHY\n");
++      return ret;
++}
++
++/**
+  * pch_gbe_phy_init_setting - PHY initial setting
+  * @hw:                   Pointer to the HW structure
+  */
+@@ -278,4 +332,47 @@ void pch_gbe_phy_init_setting(struct pch
+       mii_reg |= PHYSP_CTRL_ASSERT_CRS_TX;
+       pch_gbe_phy_write_reg_miic(hw, PHY_PHYSP_CONTROL, mii_reg);
++      /* Setup a TX clock delay on certain platforms */
++      if (adapter->pdata && adapter->pdata->phy_tx_clk_delay)
++              pch_gbe_phy_tx_clk_delay(hw);
++}
++
++/**
++ * pch_gbe_phy_disable_hibernate - Disable the PHY low power state
++ * @hw:                   Pointer to the HW structure
++ * Returns
++ *    0:              Successful.
++ *    -EINVAL:        Invalid argument.
++ */
++int pch_gbe_phy_disable_hibernate(struct pch_gbe_hw *hw)
++{
++      struct pch_gbe_adapter *adapter = pch_gbe_hw_to_adapter(hw);
++      u16 mii_reg;
++      int ret = 0;
++
++      switch (hw->phy.id) {
++      case PHY_AR803X_ID:
++              netdev_dbg(adapter->netdev,
++                         "Disabling hibernation for AR803X PHY\n");
++              ret = pch_gbe_phy_write_reg_miic(hw, PHY_AR8031_DBG_OFF,
++                                               PHY_AR8031_HIBERNATE);
++              if (ret)
++                      break;
++
++              pch_gbe_phy_read_reg_miic(hw, PHY_AR8031_DBG_DAT, &mii_reg);
++              mii_reg &= ~PHY_AR8031_PS_HIB_EN;
++              ret = pch_gbe_phy_write_reg_miic(hw, PHY_AR8031_DBG_DAT,
++                                               mii_reg);
++              break;
++      default:
++              netdev_err(adapter->netdev,
++                         "Unknown PHY (%x), could not disable hibernation\n",
++                         hw->phy.id);
++              return -EINVAL;
++      }
++
++      if (ret)
++              netdev_err(adapter->netdev,
++                         "Could not disable PHY hibernation\n");
++      return ret;
+ }
+--- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_phy.h
++++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_phy.h
+@@ -33,5 +33,6 @@ void pch_gbe_phy_power_up(struct pch_gbe
+ void pch_gbe_phy_power_down(struct pch_gbe_hw *hw);
+ void pch_gbe_phy_set_rgmii(struct pch_gbe_hw *hw);
+ void pch_gbe_phy_init_setting(struct pch_gbe_hw *hw);
++int pch_gbe_phy_disable_hibernate(struct pch_gbe_hw *hw);
+ #endif /* _PCH_GBE_PHY_H_ */
diff --git a/patches.minnowboard/pch_gbe-convert-pr_-to-netdev_.patch b/patches.minnowboard/pch_gbe-convert-pr_-to-netdev_.patch
new file mode 100644 (file)
index 0000000..9ff1d7a
--- /dev/null
@@ -0,0 +1,1157 @@
+From 453ca931f515161902dbb325d7f39a992c3059ce Mon Sep 17 00:00:00 2001
+From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+Date: Fri, 28 Jun 2013 14:02:53 +0300
+Subject: pch_gbe: convert pr_* to netdev_*
+
+From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+
+commit 453ca931f515161902dbb325d7f39a992c3059ce upstream.
+
+We may use nice macros to prefix our messages with proper device name.
+
+Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe.h         |    2 
+ drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_api.c     |   49 +-
+ drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_ethtool.c |    2 
+ drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c    |  275 +++++++++-------
+ drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_param.c   |   63 ++-
+ drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_phy.c     |   23 -
+ 6 files changed, 250 insertions(+), 164 deletions(-)
+
+--- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe.h
++++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe.h
+@@ -633,6 +633,8 @@ struct pch_gbe_adapter {
+       struct pci_dev *ptp_pdev;
+ };
++#define pch_gbe_hw_to_adapter(hw)     container_of(hw, struct pch_gbe_adapter, hw)
++
+ extern const char pch_driver_version[];
+ /* pch_gbe_main.c */
+--- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_api.c
++++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_api.c
+@@ -70,7 +70,9 @@ static s32 pch_gbe_plat_init_hw(struct p
+       ret_val = pch_gbe_phy_get_id(hw);
+       if (ret_val) {
+-              pr_err("pch_gbe_phy_get_id error\n");
++              struct pch_gbe_adapter *adapter = pch_gbe_hw_to_adapter(hw);
++
++              netdev_err(adapter->netdev, "pch_gbe_phy_get_id error\n");
+               return ret_val;
+       }
+       pch_gbe_phy_init_setting(hw);
+@@ -115,7 +117,9 @@ static void pch_gbe_plat_init_function_p
+ inline s32 pch_gbe_hal_setup_init_funcs(struct pch_gbe_hw *hw)
+ {
+       if (!hw->reg) {
+-              pr_err("ERROR: Registers not mapped\n");
++              struct pch_gbe_adapter *adapter = pch_gbe_hw_to_adapter(hw);
++
++              netdev_err(adapter->netdev, "ERROR: Registers not mapped\n");
+               return -ENOSYS;
+       }
+       pch_gbe_plat_init_function_pointers(hw);
+@@ -128,10 +132,13 @@ inline s32 pch_gbe_hal_setup_init_funcs(
+  */
+ inline void pch_gbe_hal_get_bus_info(struct pch_gbe_hw *hw)
+ {
+-      if (!hw->func->get_bus_info)
+-              pr_err("ERROR: configuration\n");
+-      else
+-              hw->func->get_bus_info(hw);
++      if (!hw->func->get_bus_info) {
++              struct pch_gbe_adapter *adapter = pch_gbe_hw_to_adapter(hw);
++
++              netdev_err(adapter->netdev, "ERROR: configuration\n");
++              return;
++      }
++      hw->func->get_bus_info(hw);
+ }
+ /**
+@@ -144,7 +151,9 @@ inline void pch_gbe_hal_get_bus_info(str
+ inline s32 pch_gbe_hal_init_hw(struct pch_gbe_hw *hw)
+ {
+       if (!hw->func->init_hw) {
+-              pr_err("ERROR: configuration\n");
++              struct pch_gbe_adapter *adapter = pch_gbe_hw_to_adapter(hw);
++
++              netdev_err(adapter->netdev, "ERROR: configuration\n");
+               return -ENOSYS;
+       }
+       return hw->func->init_hw(hw);
+@@ -190,10 +199,13 @@ inline s32 pch_gbe_hal_write_phy_reg(str
+  */
+ inline void pch_gbe_hal_phy_hw_reset(struct pch_gbe_hw *hw)
+ {
+-      if (!hw->func->reset_phy)
+-              pr_err("ERROR: configuration\n");
+-      else
+-              hw->func->reset_phy(hw);
++      if (!hw->func->reset_phy) {
++              struct pch_gbe_adapter *adapter = pch_gbe_hw_to_adapter(hw);
++
++              netdev_err(adapter->netdev, "ERROR: configuration\n");
++              return;
++      }
++      hw->func->reset_phy(hw);
+ }
+ /**
+@@ -202,10 +214,13 @@ inline void pch_gbe_hal_phy_hw_reset(str
+  */
+ inline void pch_gbe_hal_phy_sw_reset(struct pch_gbe_hw *hw)
+ {
+-      if (!hw->func->sw_reset_phy)
+-              pr_err("ERROR: configuration\n");
+-      else
+-              hw->func->sw_reset_phy(hw);
++      if (!hw->func->sw_reset_phy) {
++              struct pch_gbe_adapter *adapter = pch_gbe_hw_to_adapter(hw);
++
++              netdev_err(adapter->netdev, "ERROR: configuration\n");
++              return;
++      }
++      hw->func->sw_reset_phy(hw);
+ }
+ /**
+@@ -218,7 +233,9 @@ inline void pch_gbe_hal_phy_sw_reset(str
+ inline s32 pch_gbe_hal_read_mac_addr(struct pch_gbe_hw *hw)
+ {
+       if (!hw->func->read_mac_addr) {
+-              pr_err("ERROR: configuration\n");
++              struct pch_gbe_adapter *adapter = pch_gbe_hw_to_adapter(hw);
++
++              netdev_err(adapter->netdev, "ERROR: configuration\n");
+               return -ENOSYS;
+       }
+       return hw->func->read_mac_addr(hw);
+--- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_ethtool.c
++++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_ethtool.c
+@@ -122,7 +122,7 @@ static int pch_gbe_set_settings(struct n
+       }
+       ret = mii_ethtool_sset(&adapter->mii, ecmd);
+       if (ret) {
+-              pr_err("Error: mii_ethtool_sset\n");
++              netdev_err(netdev, "Error: mii_ethtool_sset\n");
+               return ret;
+       }
+       hw->mac.link_speed = speed;
+--- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
++++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
+@@ -300,6 +300,7 @@ inline void pch_gbe_mac_load_mac_addr(st
+  */
+ s32 pch_gbe_mac_read_mac_addr(struct pch_gbe_hw *hw)
+ {
++      struct pch_gbe_adapter *adapter = pch_gbe_hw_to_adapter(hw);
+       u32  adr1a, adr1b;
+       adr1a = ioread32(&hw->reg->mac_adr[0].high);
+@@ -312,7 +313,7 @@ s32 pch_gbe_mac_read_mac_addr(struct pch
+       hw->mac.addr[4] = (u8)(adr1b & 0xFF);
+       hw->mac.addr[5] = (u8)((adr1b >> 8) & 0xFF);
+-      pr_debug("hw->mac.addr : %pM\n", hw->mac.addr);
++      netdev_dbg(adapter->netdev, "hw->mac.addr : %pM\n", hw->mac.addr);
+       return 0;
+ }
+@@ -324,6 +325,7 @@ s32 pch_gbe_mac_read_mac_addr(struct pch
+ static void pch_gbe_wait_clr_bit(void *reg, u32 bit)
+ {
+       u32 tmp;
++
+       /* wait busy */
+       tmp = 1000;
+       while ((ioread32(reg) & bit) && --tmp)
+@@ -340,9 +342,10 @@ static void pch_gbe_wait_clr_bit(void *r
+  */
+ static void pch_gbe_mac_mar_set(struct pch_gbe_hw *hw, u8 * addr, u32 index)
+ {
++      struct pch_gbe_adapter *adapter = pch_gbe_hw_to_adapter(hw);
+       u32 mar_low, mar_high, adrmask;
+-      pr_debug("index : 0x%x\n", index);
++      netdev_dbg(adapter->netdev, "index : 0x%x\n", index);
+       /*
+        * HW expects these in little endian so we reverse the byte order
+@@ -468,10 +471,11 @@ static void pch_gbe_mac_mc_addr_list_upd
+  */
+ s32 pch_gbe_mac_force_mac_fc(struct pch_gbe_hw *hw)
+ {
++      struct pch_gbe_adapter *adapter = pch_gbe_hw_to_adapter(hw);
+       struct pch_gbe_mac_info *mac = &hw->mac;
+       u32 rx_fctrl;
+-      pr_debug("mac->fc = %u\n", mac->fc);
++      netdev_dbg(adapter->netdev, "mac->fc = %u\n", mac->fc);
+       rx_fctrl = ioread32(&hw->reg->RX_FCTRL);
+@@ -493,14 +497,16 @@ s32 pch_gbe_mac_force_mac_fc(struct pch_
+               mac->tx_fc_enable = true;
+               break;
+       default:
+-              pr_err("Flow control param set incorrectly\n");
++              netdev_err(adapter->netdev,
++                         "Flow control param set incorrectly\n");
+               return -EINVAL;
+       }
+       if (mac->link_duplex == DUPLEX_HALF)
+               rx_fctrl &= ~PCH_GBE_FL_CTRL_EN;
+       iowrite32(rx_fctrl, &hw->reg->RX_FCTRL);
+-      pr_debug("RX_FCTRL reg : 0x%08x  mac->tx_fc_enable : %d\n",
+-               ioread32(&hw->reg->RX_FCTRL), mac->tx_fc_enable);
++      netdev_dbg(adapter->netdev,
++                 "RX_FCTRL reg : 0x%08x  mac->tx_fc_enable : %d\n",
++                 ioread32(&hw->reg->RX_FCTRL), mac->tx_fc_enable);
+       return 0;
+ }
+@@ -511,10 +517,11 @@ s32 pch_gbe_mac_force_mac_fc(struct pch_
+  */
+ static void pch_gbe_mac_set_wol_event(struct pch_gbe_hw *hw, u32 wu_evt)
+ {
++      struct pch_gbe_adapter *adapter = pch_gbe_hw_to_adapter(hw);
+       u32 addr_mask;
+-      pr_debug("wu_evt : 0x%08x  ADDR_MASK reg : 0x%08x\n",
+-               wu_evt, ioread32(&hw->reg->ADDR_MASK));
++      netdev_dbg(adapter->netdev, "wu_evt : 0x%08x  ADDR_MASK reg : 0x%08x\n",
++                 wu_evt, ioread32(&hw->reg->ADDR_MASK));
+       if (wu_evt) {
+               /* Set Wake-On-Lan address mask */
+@@ -546,6 +553,7 @@ static void pch_gbe_mac_set_wol_event(st
+ u16 pch_gbe_mac_ctrl_miim(struct pch_gbe_hw *hw, u32 addr, u32 dir, u32 reg,
+                       u16 data)
+ {
++      struct pch_gbe_adapter *adapter = pch_gbe_hw_to_adapter(hw);
+       u32 data_out = 0;
+       unsigned int i;
+       unsigned long flags;
+@@ -558,7 +566,7 @@ u16 pch_gbe_mac_ctrl_miim(struct pch_gbe
+               udelay(20);
+       }
+       if (i == 0) {
+-              pr_err("pch-gbe.miim won't go Ready\n");
++              netdev_err(adapter->netdev, "pch-gbe.miim won't go Ready\n");
+               spin_unlock_irqrestore(&hw->miim_lock, flags);
+               return 0;       /* No way to indicate timeout error */
+       }
+@@ -573,9 +581,9 @@ u16 pch_gbe_mac_ctrl_miim(struct pch_gbe
+       }
+       spin_unlock_irqrestore(&hw->miim_lock, flags);
+-      pr_debug("PHY %s: reg=%d, data=0x%04X\n",
+-               dir == PCH_GBE_MIIM_OPER_READ ? "READ" : "WRITE", reg,
+-               dir == PCH_GBE_MIIM_OPER_READ ? data_out : data);
++      netdev_dbg(adapter->netdev, "PHY %s: reg=%d, data=0x%04X\n",
++                 dir == PCH_GBE_MIIM_OPER_READ ? "READ" : "WRITE", reg,
++                 dir == PCH_GBE_MIIM_OPER_READ ? data_out : data);
+       return (u16) data_out;
+ }
+@@ -585,6 +593,7 @@ u16 pch_gbe_mac_ctrl_miim(struct pch_gbe
+  */
+ static void pch_gbe_mac_set_pause_packet(struct pch_gbe_hw *hw)
+ {
++      struct pch_gbe_adapter *adapter = pch_gbe_hw_to_adapter(hw);
+       unsigned long tmp2, tmp3;
+       /* Set Pause packet */
+@@ -606,10 +615,13 @@ static void pch_gbe_mac_set_pause_packet
+       /* Transmit Pause Packet */
+       iowrite32(PCH_GBE_PS_PKT_RQ, &hw->reg->PAUSE_REQ);
+-      pr_debug("PAUSE_PKT1-5 reg : 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",
+-               ioread32(&hw->reg->PAUSE_PKT1), ioread32(&hw->reg->PAUSE_PKT2),
+-               ioread32(&hw->reg->PAUSE_PKT3), ioread32(&hw->reg->PAUSE_PKT4),
+-               ioread32(&hw->reg->PAUSE_PKT5));
++      netdev_dbg(adapter->netdev,
++                 "PAUSE_PKT1-5 reg : 0x%08x 0x%08x 0x%08x 0x%08x 0x%08x\n",
++                 ioread32(&hw->reg->PAUSE_PKT1),
++                 ioread32(&hw->reg->PAUSE_PKT2),
++                 ioread32(&hw->reg->PAUSE_PKT3),
++                 ioread32(&hw->reg->PAUSE_PKT4),
++                 ioread32(&hw->reg->PAUSE_PKT5));
+       return;
+ }
+@@ -669,7 +681,7 @@ static int pch_gbe_init_phy(struct pch_g
+                       break;
+       }
+       adapter->hw.phy.addr = adapter->mii.phy_id;
+-      pr_debug("phy_addr = %d\n", adapter->mii.phy_id);
++      netdev_dbg(netdev, "phy_addr = %d\n", adapter->mii.phy_id);
+       if (addr == 32)
+               return -EAGAIN;
+       /* Selected the phy and isolate the rest */
+@@ -758,13 +770,15 @@ void pch_gbe_reinit_locked(struct pch_gb
+  */
+ void pch_gbe_reset(struct pch_gbe_adapter *adapter)
+ {
++      struct net_device *netdev = adapter->netdev;
++
+       pch_gbe_mac_reset_hw(&adapter->hw);
+       /* reprogram multicast address register after reset */
+-      pch_gbe_set_multi(adapter->netdev);
++      pch_gbe_set_multi(netdev);
+       /* Setup the receive address. */
+       pch_gbe_mac_init_rx_addrs(&adapter->hw, PCH_GBE_MAR_ENTRIES);
+       if (pch_gbe_hal_init_hw(&adapter->hw))
+-              pr_err("Hardware Error\n");
++              netdev_err(netdev, "Hardware Error\n");
+ }
+ /**
+@@ -778,7 +792,7 @@ static void pch_gbe_free_irq(struct pch_
+       free_irq(adapter->pdev->irq, netdev);
+       if (adapter->have_msi) {
+               pci_disable_msi(adapter->pdev);
+-              pr_debug("call pci_disable_msi\n");
++              netdev_dbg(netdev, "call pci_disable_msi\n");
+       }
+ }
+@@ -795,7 +809,8 @@ static void pch_gbe_irq_disable(struct p
+       ioread32(&hw->reg->INT_ST);
+       synchronize_irq(adapter->pdev->irq);
+-      pr_debug("INT_EN reg : 0x%08x\n", ioread32(&hw->reg->INT_EN));
++      netdev_dbg(adapter->netdev, "INT_EN reg : 0x%08x\n",
++                 ioread32(&hw->reg->INT_EN));
+ }
+ /**
+@@ -809,7 +824,8 @@ static void pch_gbe_irq_enable(struct pc
+       if (likely(atomic_dec_and_test(&adapter->irq_sem)))
+               iowrite32(PCH_GBE_INT_ENABLE_MASK, &hw->reg->INT_EN);
+       ioread32(&hw->reg->INT_ST);
+-      pr_debug("INT_EN reg : 0x%08x\n", ioread32(&hw->reg->INT_EN));
++      netdev_dbg(adapter->netdev, "INT_EN reg : 0x%08x\n",
++                 ioread32(&hw->reg->INT_EN));
+ }
+@@ -846,9 +862,9 @@ static void pch_gbe_configure_tx(struct
+       struct pch_gbe_hw *hw = &adapter->hw;
+       u32 tdba, tdlen, dctrl;
+-      pr_debug("dma addr = 0x%08llx  size = 0x%08x\n",
+-               (unsigned long long)adapter->tx_ring->dma,
+-               adapter->tx_ring->size);
++      netdev_dbg(adapter->netdev, "dma addr = 0x%08llx  size = 0x%08x\n",
++                 (unsigned long long)adapter->tx_ring->dma,
++                 adapter->tx_ring->size);
+       /* Setup the HW Tx Head and Tail descriptor pointers */
+       tdba = adapter->tx_ring->dma;
+@@ -894,9 +910,9 @@ static void pch_gbe_configure_rx(struct
+       struct pch_gbe_hw *hw = &adapter->hw;
+       u32 rdba, rdlen, rxdma;
+-      pr_debug("dma adr = 0x%08llx  size = 0x%08x\n",
+-               (unsigned long long)adapter->rx_ring->dma,
+-               adapter->rx_ring->size);
++      netdev_dbg(adapter->netdev, "dma adr = 0x%08llx  size = 0x%08x\n",
++                 (unsigned long long)adapter->rx_ring->dma,
++                 adapter->rx_ring->size);
+       pch_gbe_mac_force_mac_fc(hw);
+@@ -907,9 +923,10 @@ static void pch_gbe_configure_rx(struct
+       rxdma &= ~PCH_GBE_RX_DMA_EN;
+       iowrite32(rxdma, &hw->reg->DMA_CTRL);
+-      pr_debug("MAC_RX_EN reg = 0x%08x  DMA_CTRL reg = 0x%08x\n",
+-               ioread32(&hw->reg->MAC_RX_EN),
+-               ioread32(&hw->reg->DMA_CTRL));
++      netdev_dbg(adapter->netdev,
++                 "MAC_RX_EN reg = 0x%08x  DMA_CTRL reg = 0x%08x\n",
++                 ioread32(&hw->reg->MAC_RX_EN),
++                 ioread32(&hw->reg->DMA_CTRL));
+       /* Setup the HW Rx Head and Tail Descriptor Pointers and
+        * the Base and Length of the Rx Descriptor Ring */
+@@ -977,7 +994,8 @@ static void pch_gbe_clean_tx_ring(struct
+               buffer_info = &tx_ring->buffer_info[i];
+               pch_gbe_unmap_and_free_tx_resource(adapter, buffer_info);
+       }
+-      pr_debug("call pch_gbe_unmap_and_free_tx_resource() %d count\n", i);
++      netdev_dbg(adapter->netdev,
++                 "call pch_gbe_unmap_and_free_tx_resource() %d count\n", i);
+       size = (unsigned long)sizeof(struct pch_gbe_buffer) * tx_ring->count;
+       memset(tx_ring->buffer_info, 0, size);
+@@ -1009,7 +1027,8 @@ pch_gbe_clean_rx_ring(struct pch_gbe_ada
+               buffer_info = &rx_ring->buffer_info[i];
+               pch_gbe_unmap_and_free_rx_resource(adapter, buffer_info);
+       }
+-      pr_debug("call pch_gbe_unmap_and_free_rx_resource() %d count\n", i);
++      netdev_dbg(adapter->netdev,
++                 "call pch_gbe_unmap_and_free_rx_resource() %d count\n", i);
+       size = (unsigned long)sizeof(struct pch_gbe_buffer) * rx_ring->count;
+       memset(rx_ring->buffer_info, 0, size);
+@@ -1087,7 +1106,7 @@ static void pch_gbe_watchdog(unsigned lo
+       struct net_device *netdev = adapter->netdev;
+       struct pch_gbe_hw *hw = &adapter->hw;
+-      pr_debug("right now = %ld\n", jiffies);
++      netdev_dbg(netdev, "right now = %ld\n", jiffies);
+       pch_gbe_update_stats(adapter);
+       if ((mii_link_ok(&adapter->mii)) && (!netif_carrier_ok(netdev))) {
+@@ -1095,7 +1114,7 @@ static void pch_gbe_watchdog(unsigned lo
+               netdev->tx_queue_len = adapter->tx_queue_len;
+               /* mii library handles link maintenance tasks */
+               if (mii_ethtool_gset(&adapter->mii, &cmd)) {
+-                      pr_err("ethtool get setting Error\n");
++                      netdev_err(netdev, "ethtool get setting Error\n");
+                       mod_timer(&adapter->watchdog_timer,
+                                 round_jiffies(jiffies +
+                                               PCH_GBE_WATCHDOG_PERIOD));
+@@ -1213,7 +1232,7 @@ static void pch_gbe_tx_queue(struct pch_
+                                         buffer_info->length,
+                                         DMA_TO_DEVICE);
+       if (dma_mapping_error(&adapter->pdev->dev, buffer_info->dma)) {
+-              pr_err("TX DMA map failed\n");
++              netdev_err(adapter->netdev, "TX DMA map failed\n");
+               buffer_info->dma = 0;
+               buffer_info->time_stamp = 0;
+               tx_ring->next_to_use = ring_num;
+@@ -1333,13 +1352,13 @@ static irqreturn_t pch_gbe_intr(int irq,
+       /* When request status is no interruption factor */
+       if (unlikely(!int_st))
+               return IRQ_NONE;        /* Not our interrupt. End processing. */
+-      pr_debug("%s occur int_st = 0x%08x\n", __func__, int_st);
++      netdev_dbg(netdev, "%s occur int_st = 0x%08x\n", __func__, int_st);
+       if (int_st & PCH_GBE_INT_RX_FRAME_ERR)
+               adapter->stats.intr_rx_frame_err_count++;
+       if (int_st & PCH_GBE_INT_RX_FIFO_ERR)
+               if (!adapter->rx_stop_flag) {
+                       adapter->stats.intr_rx_fifo_err_count++;
+-                      pr_debug("Rx fifo over run\n");
++                      netdev_dbg(netdev, "Rx fifo over run\n");
+                       adapter->rx_stop_flag = true;
+                       int_en = ioread32(&hw->reg->INT_EN);
+                       iowrite32((int_en & ~PCH_GBE_INT_RX_FIFO_ERR),
+@@ -1359,7 +1378,7 @@ static irqreturn_t pch_gbe_intr(int irq,
+       /* When Rx descriptor is empty  */
+       if ((int_st & PCH_GBE_INT_RX_DSC_EMP)) {
+               adapter->stats.intr_rx_dsc_empty_count++;
+-              pr_debug("Rx descriptor is empty\n");
++              netdev_dbg(netdev, "Rx descriptor is empty\n");
+               int_en = ioread32(&hw->reg->INT_EN);
+               iowrite32((int_en & ~PCH_GBE_INT_RX_DSC_EMP), &hw->reg->INT_EN);
+               if (hw->mac.tx_fc_enable) {
+@@ -1382,8 +1401,8 @@ static irqreturn_t pch_gbe_intr(int irq,
+                       __napi_schedule(&adapter->napi);
+               }
+       }
+-      pr_debug("return = 0x%08x  INT_EN reg = 0x%08x\n",
+-               IRQ_HANDLED, ioread32(&hw->reg->INT_EN));
++      netdev_dbg(netdev, "return = 0x%08x  INT_EN reg = 0x%08x\n",
++                 IRQ_HANDLED, ioread32(&hw->reg->INT_EN));
+       return IRQ_HANDLED;
+ }
+@@ -1437,9 +1456,10 @@ pch_gbe_alloc_rx_buffers(struct pch_gbe_
+               rx_desc->buffer_addr = (buffer_info->dma);
+               rx_desc->gbec_status = DSC_INIT16;
+-              pr_debug("i = %d  buffer_info->dma = 0x08%llx  buffer_info->length = 0x%x\n",
+-                       i, (unsigned long long)buffer_info->dma,
+-                       buffer_info->length);
++              netdev_dbg(netdev,
++                         "i = %d  buffer_info->dma = 0x08%llx  buffer_info->length = 0x%x\n",
++                         i, (unsigned long long)buffer_info->dma,
++                         buffer_info->length);
+               if (unlikely(++i == rx_ring->count))
+                       i = 0;
+@@ -1531,12 +1551,13 @@ pch_gbe_clean_tx(struct pch_gbe_adapter
+       bool cleaned = false;
+       int unused, thresh;
+-      pr_debug("next_to_clean : %d\n", tx_ring->next_to_clean);
++      netdev_dbg(adapter->netdev, "next_to_clean : %d\n",
++                 tx_ring->next_to_clean);
+       i = tx_ring->next_to_clean;
+       tx_desc = PCH_GBE_TX_DESC(*tx_ring, i);
+-      pr_debug("gbec_status:0x%04x  dma_status:0x%04x\n",
+-               tx_desc->gbec_status, tx_desc->dma_status);
++      netdev_dbg(adapter->netdev, "gbec_status:0x%04x  dma_status:0x%04x\n",
++                 tx_desc->gbec_status, tx_desc->dma_status);
+       unused = PCH_GBE_DESC_UNUSED(tx_ring);
+       thresh = tx_ring->count - PCH_GBE_TX_WEIGHT;
+@@ -1544,8 +1565,10 @@ pch_gbe_clean_tx(struct pch_gbe_adapter
+       {  /* current marked clean, tx queue filling up, do extra clean */
+               int j, k;
+               if (unused < 8) {  /* tx queue nearly full */
+-                      pr_debug("clean_tx: transmit queue warning (%x,%x) unused=%d\n",
+-                              tx_ring->next_to_clean,tx_ring->next_to_use,unused);
++                      netdev_dbg(adapter->netdev,
++                                 "clean_tx: transmit queue warning (%x,%x) unused=%d\n",
++                                 tx_ring->next_to_clean, tx_ring->next_to_use,
++                                 unused);
+               }
+               /* current marked clean, scan for more that need cleaning. */
+@@ -1557,49 +1580,56 @@ pch_gbe_clean_tx(struct pch_gbe_adapter
+                       if (++k >= tx_ring->count) k = 0;  /*increment, wrap*/
+               }
+               if (j < PCH_GBE_TX_WEIGHT) {
+-                      pr_debug("clean_tx: unused=%d loops=%d found tx_desc[%x,%x:%x].gbec_status=%04x\n",
+-                              unused,j, i,k, tx_ring->next_to_use, tx_desc->gbec_status);
++                      netdev_dbg(adapter->netdev,
++                                 "clean_tx: unused=%d loops=%d found tx_desc[%x,%x:%x].gbec_status=%04x\n",
++                                 unused, j, i, k, tx_ring->next_to_use,
++                                 tx_desc->gbec_status);
+                       i = k;  /*found one to clean, usu gbec_status==2000.*/
+               }
+       }
+       while ((tx_desc->gbec_status & DSC_INIT16) == 0x0000) {
+-              pr_debug("gbec_status:0x%04x\n", tx_desc->gbec_status);
++              netdev_dbg(adapter->netdev, "gbec_status:0x%04x\n",
++                         tx_desc->gbec_status);
+               buffer_info = &tx_ring->buffer_info[i];
+               skb = buffer_info->skb;
+               cleaned = true;
+               if ((tx_desc->gbec_status & PCH_GBE_TXD_GMAC_STAT_ABT)) {
+                       adapter->stats.tx_aborted_errors++;
+-                      pr_err("Transfer Abort Error\n");
++                      netdev_err(adapter->netdev, "Transfer Abort Error\n");
+               } else if ((tx_desc->gbec_status & PCH_GBE_TXD_GMAC_STAT_CRSER)
+                         ) {
+                       adapter->stats.tx_carrier_errors++;
+-                      pr_err("Transfer Carrier Sense Error\n");
++                      netdev_err(adapter->netdev,
++                                 "Transfer Carrier Sense Error\n");
+               } else if ((tx_desc->gbec_status & PCH_GBE_TXD_GMAC_STAT_EXCOL)
+                         ) {
+                       adapter->stats.tx_aborted_errors++;
+-                      pr_err("Transfer Collision Abort Error\n");
++                      netdev_err(adapter->netdev,
++                                 "Transfer Collision Abort Error\n");
+               } else if ((tx_desc->gbec_status &
+                           (PCH_GBE_TXD_GMAC_STAT_SNGCOL |
+                            PCH_GBE_TXD_GMAC_STAT_MLTCOL))) {
+                       adapter->stats.collisions++;
+                       adapter->stats.tx_packets++;
+                       adapter->stats.tx_bytes += skb->len;
+-                      pr_debug("Transfer Collision\n");
++                      netdev_dbg(adapter->netdev, "Transfer Collision\n");
+               } else if ((tx_desc->gbec_status & PCH_GBE_TXD_GMAC_STAT_CMPLT)
+                         ) {
+                       adapter->stats.tx_packets++;
+                       adapter->stats.tx_bytes += skb->len;
+               }
+               if (buffer_info->mapped) {
+-                      pr_debug("unmap buffer_info->dma : %d\n", i);
++                      netdev_dbg(adapter->netdev,
++                                 "unmap buffer_info->dma : %d\n", i);
+                       dma_unmap_single(&adapter->pdev->dev, buffer_info->dma,
+                                        buffer_info->length, DMA_TO_DEVICE);
+                       buffer_info->mapped = false;
+               }
+               if (buffer_info->skb) {
+-                      pr_debug("trim buffer_info->skb : %d\n", i);
++                      netdev_dbg(adapter->netdev,
++                                 "trim buffer_info->skb : %d\n", i);
+                       skb_trim(buffer_info->skb, 0);
+               }
+               tx_desc->gbec_status = DSC_INIT16;
+@@ -1613,8 +1643,9 @@ pch_gbe_clean_tx(struct pch_gbe_adapter
+                       break;
+               }
+       }
+-      pr_debug("called pch_gbe_unmap_and_free_tx_resource() %d count\n",
+-               cleaned_count);
++      netdev_dbg(adapter->netdev,
++                 "called pch_gbe_unmap_and_free_tx_resource() %d count\n",
++                 cleaned_count);
+       if (cleaned_count > 0)  { /*skip this if nothing cleaned*/
+               /* Recover from running out of Tx resources in xmit_frame */
+               spin_lock(&tx_ring->tx_lock);
+@@ -1622,12 +1653,13 @@ pch_gbe_clean_tx(struct pch_gbe_adapter
+               {
+                       netif_wake_queue(adapter->netdev);
+                       adapter->stats.tx_restart_count++;
+-                      pr_debug("Tx wake queue\n");
++                      netdev_dbg(adapter->netdev, "Tx wake queue\n");
+               }
+               tx_ring->next_to_clean = i;
+-              pr_debug("next_to_clean : %d\n", tx_ring->next_to_clean);
++              netdev_dbg(adapter->netdev, "next_to_clean : %d\n",
++                         tx_ring->next_to_clean);
+               spin_unlock(&tx_ring->tx_lock);
+       }
+       return cleaned;
+@@ -1684,22 +1716,22 @@ pch_gbe_clean_rx(struct pch_gbe_adapter
+                                  buffer_info->length, DMA_FROM_DEVICE);
+               buffer_info->mapped = false;
+-              pr_debug("RxDecNo = 0x%04x  Status[DMA:0x%02x GBE:0x%04x "
+-                       "TCP:0x%08x]  BufInf = 0x%p\n",
+-                       i, dma_status, gbec_status, tcp_ip_status,
+-                       buffer_info);
++              netdev_dbg(netdev,
++                         "RxDecNo = 0x%04x  Status[DMA:0x%02x GBE:0x%04x TCP:0x%08x]  BufInf = 0x%p\n",
++                         i, dma_status, gbec_status, tcp_ip_status,
++                         buffer_info);
+               /* Error check */
+               if (unlikely(gbec_status & PCH_GBE_RXD_GMAC_STAT_NOTOCTAL)) {
+                       adapter->stats.rx_frame_errors++;
+-                      pr_err("Receive Not Octal Error\n");
++                      netdev_err(netdev, "Receive Not Octal Error\n");
+               } else if (unlikely(gbec_status &
+                               PCH_GBE_RXD_GMAC_STAT_NBLERR)) {
+                       adapter->stats.rx_frame_errors++;
+-                      pr_err("Receive Nibble Error\n");
++                      netdev_err(netdev, "Receive Nibble Error\n");
+               } else if (unlikely(gbec_status &
+                               PCH_GBE_RXD_GMAC_STAT_CRCERR)) {
+                       adapter->stats.rx_crc_errors++;
+-                      pr_err("Receive CRC Error\n");
++                      netdev_err(netdev, "Receive CRC Error\n");
+               } else {
+                       /* get receive length */
+                       /* length convert[-3], length includes FCS length */
+@@ -1730,8 +1762,9 @@ pch_gbe_clean_rx(struct pch_gbe_adapter
+                       napi_gro_receive(&adapter->napi, skb);
+                       (*work_done)++;
+-                      pr_debug("Receive skb->ip_summed: %d length: %d\n",
+-                               skb->ip_summed, length);
++                      netdev_dbg(netdev,
++                                 "Receive skb->ip_summed: %d length: %d\n",
++                                 skb->ip_summed, length);
+               }
+               /* return some buffers to hardware, one at a time is too slow */
+               if (unlikely(cleaned_count >= PCH_GBE_RX_BUFFER_WRITE)) {
+@@ -1787,10 +1820,10 @@ int pch_gbe_setup_tx_resources(struct pc
+               tx_desc = PCH_GBE_TX_DESC(*tx_ring, desNo);
+               tx_desc->gbec_status = DSC_INIT16;
+       }
+-      pr_debug("tx_ring->desc = 0x%p  tx_ring->dma = 0x%08llx\n"
+-               "next_to_clean = 0x%08x  next_to_use = 0x%08x\n",
+-               tx_ring->desc, (unsigned long long)tx_ring->dma,
+-               tx_ring->next_to_clean, tx_ring->next_to_use);
++      netdev_dbg(adapter->netdev,
++                 "tx_ring->desc = 0x%p  tx_ring->dma = 0x%08llx next_to_clean = 0x%08x  next_to_use = 0x%08x\n",
++                 tx_ring->desc, (unsigned long long)tx_ring->dma,
++                 tx_ring->next_to_clean, tx_ring->next_to_use);
+       return 0;
+ }
+@@ -1829,10 +1862,10 @@ int pch_gbe_setup_rx_resources(struct pc
+               rx_desc = PCH_GBE_RX_DESC(*rx_ring, desNo);
+               rx_desc->gbec_status = DSC_INIT16;
+       }
+-      pr_debug("rx_ring->desc = 0x%p  rx_ring->dma = 0x%08llx "
+-               "next_to_clean = 0x%08x  next_to_use = 0x%08x\n",
+-               rx_ring->desc, (unsigned long long)rx_ring->dma,
+-               rx_ring->next_to_clean, rx_ring->next_to_use);
++      netdev_dbg(adapter->netdev,
++                 "rx_ring->desc = 0x%p  rx_ring->dma = 0x%08llx next_to_clean = 0x%08x  next_to_use = 0x%08x\n",
++                 rx_ring->desc, (unsigned long long)rx_ring->dma,
++                 rx_ring->next_to_clean, rx_ring->next_to_use);
+       return 0;
+ }
+@@ -1886,9 +1919,9 @@ static int pch_gbe_request_irq(struct pc
+       flags = IRQF_SHARED;
+       adapter->have_msi = false;
+       err = pci_enable_msi(adapter->pdev);
+-      pr_debug("call pci_enable_msi\n");
++      netdev_dbg(netdev, "call pci_enable_msi\n");
+       if (err) {
+-              pr_debug("call pci_enable_msi - Error: %d\n", err);
++              netdev_dbg(netdev, "call pci_enable_msi - Error: %d\n", err);
+       } else {
+               flags = 0;
+               adapter->have_msi = true;
+@@ -1896,9 +1929,11 @@ static int pch_gbe_request_irq(struct pc
+       err = request_irq(adapter->pdev->irq, &pch_gbe_intr,
+                         flags, netdev->name, netdev);
+       if (err)
+-              pr_err("Unable to allocate interrupt Error: %d\n", err);
+-      pr_debug("adapter->have_msi : %d  flags : 0x%04x  return : 0x%04x\n",
+-               adapter->have_msi, flags, err);
++              netdev_err(netdev, "Unable to allocate interrupt Error: %d\n",
++                         err);
++      netdev_dbg(netdev,
++                 "adapter->have_msi : %d  flags : 0x%04x  return : 0x%04x\n",
++                 adapter->have_msi, flags, err);
+       return err;
+ }
+@@ -1919,7 +1954,7 @@ int pch_gbe_up(struct pch_gbe_adapter *a
+       /* Ensure we have a valid MAC */
+       if (!is_valid_ether_addr(adapter->hw.mac.addr)) {
+-              pr_err("Error: Invalid MAC address\n");
++              netdev_err(netdev, "Error: Invalid MAC address\n");
+               goto out;
+       }
+@@ -1933,12 +1968,14 @@ int pch_gbe_up(struct pch_gbe_adapter *a
+       err = pch_gbe_request_irq(adapter);
+       if (err) {
+-              pr_err("Error: can't bring device up - irq request failed\n");
++              netdev_err(netdev,
++                         "Error: can't bring device up - irq request failed\n");
+               goto out;
+       }
+       err = pch_gbe_alloc_rx_buffers_pool(adapter, rx_ring, rx_ring->count);
+       if (err) {
+-              pr_err("Error: can't bring device up - alloc rx buffers pool failed\n");
++              netdev_err(netdev,
++                         "Error: can't bring device up - alloc rx buffers pool failed\n");
+               goto freeirq;
+       }
+       pch_gbe_alloc_tx_buffers(adapter, tx_ring);
+@@ -2015,11 +2052,11 @@ static int pch_gbe_sw_init(struct pch_gb
+       /* Initialize the hardware-specific values */
+       if (pch_gbe_hal_setup_init_funcs(hw)) {
+-              pr_err("Hardware Initialization Failure\n");
++              netdev_err(netdev, "Hardware Initialization Failure\n");
+               return -EIO;
+       }
+       if (pch_gbe_alloc_queues(adapter)) {
+-              pr_err("Unable to allocate memory for queues\n");
++              netdev_err(netdev, "Unable to allocate memory for queues\n");
+               return -ENOMEM;
+       }
+       spin_lock_init(&adapter->hw.miim_lock);
+@@ -2030,9 +2067,10 @@ static int pch_gbe_sw_init(struct pch_gb
+       pch_gbe_init_stats(adapter);
+-      pr_debug("rx_buffer_len : %d  mac.min_frame_size : %d  mac.max_frame_size : %d\n",
+-               (u32) adapter->rx_buffer_len,
+-               hw->mac.min_frame_size, hw->mac.max_frame_size);
++      netdev_dbg(netdev,
++                 "rx_buffer_len : %d  mac.min_frame_size : %d  mac.max_frame_size : %d\n",
++                 (u32) adapter->rx_buffer_len,
++                 hw->mac.min_frame_size, hw->mac.max_frame_size);
+       return 0;
+ }
+@@ -2061,7 +2099,7 @@ static int pch_gbe_open(struct net_devic
+       err = pch_gbe_up(adapter);
+       if (err)
+               goto err_up;
+-      pr_debug("Success End\n");
++      netdev_dbg(netdev, "Success End\n");
+       return 0;
+ err_up:
+@@ -2072,7 +2110,7 @@ err_setup_rx:
+       pch_gbe_free_tx_resources(adapter, adapter->tx_ring);
+ err_setup_tx:
+       pch_gbe_reset(adapter);
+-      pr_err("Error End\n");
++      netdev_err(netdev, "Error End\n");
+       return err;
+ }
+@@ -2116,8 +2154,9 @@ static int pch_gbe_xmit_frame(struct sk_
+       if (unlikely(!PCH_GBE_DESC_UNUSED(tx_ring))) {
+               netif_stop_queue(netdev);
+               spin_unlock_irqrestore(&tx_ring->tx_lock, flags);
+-              pr_debug("Return : BUSY  next_to use : 0x%08x  next_to clean : 0x%08x\n",
+-                       tx_ring->next_to_use, tx_ring->next_to_clean);
++              netdev_dbg(netdev,
++                         "Return : BUSY  next_to use : 0x%08x  next_to clean : 0x%08x\n",
++                         tx_ring->next_to_use, tx_ring->next_to_clean);
+               return NETDEV_TX_BUSY;
+       }
+@@ -2152,7 +2191,7 @@ static void pch_gbe_set_multi(struct net
+       int i;
+       int mc_count;
+-      pr_debug("netdev->flags : 0x%08x\n", netdev->flags);
++      netdev_dbg(netdev, "netdev->flags : 0x%08x\n", netdev->flags);
+       /* Check for Promiscuous and All Multicast modes */
+       rctl = ioread32(&hw->reg->RX_MODE);
+@@ -2192,7 +2231,8 @@ static void pch_gbe_set_multi(struct net
+                                       PCH_GBE_MAR_ENTRIES);
+       kfree(mta_list);
+-      pr_debug("RX_MODE reg(check bit31,30 ADD,MLT) : 0x%08x  netdev->mc_count : 0x%08x\n",
++      netdev_dbg(netdev,
++               "RX_MODE reg(check bit31,30 ADD,MLT) : 0x%08x  netdev->mc_count : 0x%08x\n",
+                ioread32(&hw->reg->RX_MODE), mc_count);
+ }
+@@ -2218,12 +2258,12 @@ static int pch_gbe_set_mac(struct net_de
+               pch_gbe_mac_mar_set(&adapter->hw, adapter->hw.mac.addr, 0);
+               ret_val = 0;
+       }
+-      pr_debug("ret_val : 0x%08x\n", ret_val);
+-      pr_debug("dev_addr : %pM\n", netdev->dev_addr);
+-      pr_debug("mac_addr : %pM\n", adapter->hw.mac.addr);
+-      pr_debug("MAC_ADR1AB reg : 0x%08x 0x%08x\n",
+-               ioread32(&adapter->hw.reg->mac_adr[0].high),
+-               ioread32(&adapter->hw.reg->mac_adr[0].low));
++      netdev_dbg(netdev, "ret_val : 0x%08x\n", ret_val);
++      netdev_dbg(netdev, "dev_addr : %pM\n", netdev->dev_addr);
++      netdev_dbg(netdev, "mac_addr : %pM\n", adapter->hw.mac.addr);
++      netdev_dbg(netdev, "MAC_ADR1AB reg : 0x%08x 0x%08x\n",
++                 ioread32(&adapter->hw.reg->mac_adr[0].high),
++                 ioread32(&adapter->hw.reg->mac_adr[0].low));
+       return ret_val;
+ }
+@@ -2245,7 +2285,7 @@ static int pch_gbe_change_mtu(struct net
+       max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN;
+       if ((max_frame < ETH_ZLEN + ETH_FCS_LEN) ||
+               (max_frame > PCH_GBE_MAX_JUMBO_FRAME_SIZE)) {
+-              pr_err("Invalid MTU setting\n");
++              netdev_err(netdev, "Invalid MTU setting\n");
+               return -EINVAL;
+       }
+       if (max_frame <= PCH_GBE_FRAME_SIZE_2048)
+@@ -2274,9 +2314,10 @@ static int pch_gbe_change_mtu(struct net
+               adapter->hw.mac.max_frame_size = max_frame;
+       }
+-      pr_debug("max_frame : %d  rx_buffer_len : %d  mtu : %d  max_frame_size : %d\n",
+-               max_frame, (u32) adapter->rx_buffer_len, netdev->mtu,
+-               adapter->hw.mac.max_frame_size);
++      netdev_dbg(netdev,
++                 "max_frame : %d  rx_buffer_len : %d  mtu : %d  max_frame_size : %d\n",
++                 max_frame, (u32) adapter->rx_buffer_len, netdev->mtu,
++                 adapter->hw.mac.max_frame_size);
+       return 0;
+ }
+@@ -2317,7 +2358,7 @@ static int pch_gbe_ioctl(struct net_devi
+ {
+       struct pch_gbe_adapter *adapter = netdev_priv(netdev);
+-      pr_debug("cmd : 0x%04x\n", cmd);
++      netdev_dbg(netdev, "cmd : 0x%04x\n", cmd);
+       if (cmd == SIOCSHWTSTAMP)
+               return hwtstamp_ioctl(netdev, ifr, cmd);
+@@ -2354,7 +2395,7 @@ static int pch_gbe_napi_poll(struct napi
+       bool poll_end_flag = false;
+       bool cleaned = false;
+-      pr_debug("budget : %d\n", budget);
++      netdev_dbg(adapter->netdev, "budget : %d\n", budget);
+       pch_gbe_clean_rx(adapter, adapter->rx_ring, &work_done, budget);
+       cleaned = pch_gbe_clean_tx(adapter, adapter->tx_ring);
+@@ -2377,8 +2418,9 @@ static int pch_gbe_napi_poll(struct napi
+               pch_gbe_enable_dma_rx(&adapter->hw);
+       }
+-      pr_debug("poll_end_flag : %d  work_done : %d  budget : %d\n",
+-               poll_end_flag, work_done, budget);
++      netdev_dbg(adapter->netdev,
++                 "poll_end_flag : %d  work_done : %d  budget : %d\n",
++                 poll_end_flag, work_done, budget);
+       return work_done;
+ }
+@@ -2435,7 +2477,7 @@ static pci_ers_result_t pch_gbe_io_slot_
+       struct pch_gbe_hw *hw = &adapter->hw;
+       if (pci_enable_device(pdev)) {
+-              pr_err("Cannot re-enable PCI device after reset\n");
++              netdev_err(netdev, "Cannot re-enable PCI device after reset\n");
+               return PCI_ERS_RESULT_DISCONNECT;
+       }
+       pci_set_master(pdev);
+@@ -2455,7 +2497,8 @@ static void pch_gbe_io_resume(struct pci
+       if (netif_running(netdev)) {
+               if (pch_gbe_up(adapter)) {
+-                      pr_debug("can't bring device back up after reset\n");
++                      netdev_dbg(netdev,
++                                 "can't bring device back up after reset\n");
+                       return;
+               }
+       }
+@@ -2509,7 +2552,7 @@ static int pch_gbe_resume(struct device
+       err = pci_enable_device(pdev);
+       if (err) {
+-              pr_err("Cannot enable PCI device from suspend\n");
++              netdev_err(netdev, "Cannot enable PCI device from suspend\n");
+               return err;
+       }
+       pci_set_master(pdev);
+@@ -2609,7 +2652,7 @@ static int pch_gbe_probe(struct pci_dev
+       adapter->ptp_pdev = pci_get_bus_and_slot(adapter->pdev->bus->number,
+                                              PCI_DEVFN(12, 4));
+       if (ptp_filter_init(ptp_filter, ARRAY_SIZE(ptp_filter))) {
+-              pr_err("Bad ptp filter\n");
++              dev_err(&pdev->dev, "Bad ptp filter\n");
+               return -EINVAL;
+       }
+--- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_param.c
++++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_param.c
+@@ -237,16 +237,17 @@ static int pch_gbe_validate_option(int *
+       case enable_option:
+               switch (*value) {
+               case OPTION_ENABLED:
+-                      pr_debug("%s Enabled\n", opt->name);
++                      netdev_dbg(adapter->netdev, "%s Enabled\n", opt->name);
+                       return 0;
+               case OPTION_DISABLED:
+-                      pr_debug("%s Disabled\n", opt->name);
++                      netdev_dbg(adapter->netdev, "%s Disabled\n", opt->name);
+                       return 0;
+               }
+               break;
+       case range_option:
+               if (*value >= opt->arg.r.min && *value <= opt->arg.r.max) {
+-                      pr_debug("%s set to %i\n", opt->name, *value);
++                      netdev_dbg(adapter->netdev, "%s set to %i\n",
++                                 opt->name, *value);
+                       return 0;
+               }
+               break;
+@@ -258,7 +259,8 @@ static int pch_gbe_validate_option(int *
+                       ent = &opt->arg.l.p[i];
+                       if (*value == ent->i) {
+                               if (ent->str[0] != '\0')
+-                                      pr_debug("%s\n", ent->str);
++                                      netdev_dbg(adapter->netdev, "%s\n",
++                                                 ent->str);
+                               return 0;
+                       }
+               }
+@@ -268,8 +270,8 @@ static int pch_gbe_validate_option(int *
+               BUG();
+       }
+-      pr_debug("Invalid %s value specified (%i) %s\n",
+-               opt->name, *value, opt->err);
++      netdev_dbg(adapter->netdev, "Invalid %s value specified (%i) %s\n",
++                 opt->name, *value, opt->err);
+       *value = opt->def;
+       return -1;
+ }
+@@ -318,7 +320,8 @@ static void pch_gbe_check_copper_options
+                                        .p = an_list} }
+               };
+               if (speed || dplx) {
+-                      pr_debug("AutoNeg specified along with Speed or Duplex, AutoNeg parameter ignored\n");
++                      netdev_dbg(adapter->netdev,
++                                 "AutoNeg specified along with Speed or Duplex, AutoNeg parameter ignored\n");
+                       hw->phy.autoneg_advertised = opt.def;
+               } else {
+                       int tmp = AutoNeg;
+@@ -332,13 +335,16 @@ static void pch_gbe_check_copper_options
+       case 0:
+               hw->mac.autoneg = hw->mac.fc_autoneg = 1;
+               if ((speed || dplx))
+-                      pr_debug("Speed and duplex autonegotiation enabled\n");
++                      netdev_dbg(adapter->netdev,
++                                 "Speed and duplex autonegotiation enabled\n");
+               hw->mac.link_speed = SPEED_10;
+               hw->mac.link_duplex = DUPLEX_HALF;
+               break;
+       case HALF_DUPLEX:
+-              pr_debug("Half Duplex specified without Speed\n");
+-              pr_debug("Using Autonegotiation at Half Duplex only\n");
++              netdev_dbg(adapter->netdev,
++                         "Half Duplex specified without Speed\n");
++              netdev_dbg(adapter->netdev,
++                         "Using Autonegotiation at Half Duplex only\n");
+               hw->mac.autoneg = hw->mac.fc_autoneg = 1;
+               hw->phy.autoneg_advertised = PHY_ADVERTISE_10_HALF |
+                                               PHY_ADVERTISE_100_HALF;
+@@ -346,8 +352,10 @@ static void pch_gbe_check_copper_options
+               hw->mac.link_duplex = DUPLEX_HALF;
+               break;
+       case FULL_DUPLEX:
+-              pr_debug("Full Duplex specified without Speed\n");
+-              pr_debug("Using Autonegotiation at Full Duplex only\n");
++              netdev_dbg(adapter->netdev,
++                         "Full Duplex specified without Speed\n");
++              netdev_dbg(adapter->netdev,
++                         "Using Autonegotiation at Full Duplex only\n");
+               hw->mac.autoneg = hw->mac.fc_autoneg = 1;
+               hw->phy.autoneg_advertised = PHY_ADVERTISE_10_FULL |
+                                               PHY_ADVERTISE_100_FULL |
+@@ -356,8 +364,10 @@ static void pch_gbe_check_copper_options
+               hw->mac.link_duplex = DUPLEX_FULL;
+               break;
+       case SPEED_10:
+-              pr_debug("10 Mbps Speed specified without Duplex\n");
+-              pr_debug("Using Autonegotiation at 10 Mbps only\n");
++              netdev_dbg(adapter->netdev,
++                         "10 Mbps Speed specified without Duplex\n");
++              netdev_dbg(adapter->netdev,
++                         "Using Autonegotiation at 10 Mbps only\n");
+               hw->mac.autoneg = hw->mac.fc_autoneg = 1;
+               hw->phy.autoneg_advertised = PHY_ADVERTISE_10_HALF |
+                                               PHY_ADVERTISE_10_FULL;
+@@ -365,22 +375,24 @@ static void pch_gbe_check_copper_options
+               hw->mac.link_duplex = DUPLEX_HALF;
+               break;
+       case SPEED_10 + HALF_DUPLEX:
+-              pr_debug("Forcing to 10 Mbps Half Duplex\n");
++              netdev_dbg(adapter->netdev, "Forcing to 10 Mbps Half Duplex\n");
+               hw->mac.autoneg = hw->mac.fc_autoneg = 0;
+               hw->phy.autoneg_advertised = 0;
+               hw->mac.link_speed = SPEED_10;
+               hw->mac.link_duplex = DUPLEX_HALF;
+               break;
+       case SPEED_10 + FULL_DUPLEX:
+-              pr_debug("Forcing to 10 Mbps Full Duplex\n");
++              netdev_dbg(adapter->netdev, "Forcing to 10 Mbps Full Duplex\n");
+               hw->mac.autoneg = hw->mac.fc_autoneg = 0;
+               hw->phy.autoneg_advertised = 0;
+               hw->mac.link_speed = SPEED_10;
+               hw->mac.link_duplex = DUPLEX_FULL;
+               break;
+       case SPEED_100:
+-              pr_debug("100 Mbps Speed specified without Duplex\n");
+-              pr_debug("Using Autonegotiation at 100 Mbps only\n");
++              netdev_dbg(adapter->netdev,
++                         "100 Mbps Speed specified without Duplex\n");
++              netdev_dbg(adapter->netdev,
++                         "Using Autonegotiation at 100 Mbps only\n");
+               hw->mac.autoneg = hw->mac.fc_autoneg = 1;
+               hw->phy.autoneg_advertised = PHY_ADVERTISE_100_HALF |
+                                               PHY_ADVERTISE_100_FULL;
+@@ -388,28 +400,33 @@ static void pch_gbe_check_copper_options
+               hw->mac.link_duplex = DUPLEX_HALF;
+               break;
+       case SPEED_100 + HALF_DUPLEX:
+-              pr_debug("Forcing to 100 Mbps Half Duplex\n");
++              netdev_dbg(adapter->netdev,
++                         "Forcing to 100 Mbps Half Duplex\n");
+               hw->mac.autoneg = hw->mac.fc_autoneg = 0;
+               hw->phy.autoneg_advertised = 0;
+               hw->mac.link_speed = SPEED_100;
+               hw->mac.link_duplex = DUPLEX_HALF;
+               break;
+       case SPEED_100 + FULL_DUPLEX:
+-              pr_debug("Forcing to 100 Mbps Full Duplex\n");
++              netdev_dbg(adapter->netdev,
++                         "Forcing to 100 Mbps Full Duplex\n");
+               hw->mac.autoneg = hw->mac.fc_autoneg = 0;
+               hw->phy.autoneg_advertised = 0;
+               hw->mac.link_speed = SPEED_100;
+               hw->mac.link_duplex = DUPLEX_FULL;
+               break;
+       case SPEED_1000:
+-              pr_debug("1000 Mbps Speed specified without Duplex\n");
++              netdev_dbg(adapter->netdev,
++                         "1000 Mbps Speed specified without Duplex\n");
+               goto full_duplex_only;
+       case SPEED_1000 + HALF_DUPLEX:
+-              pr_debug("Half Duplex is not supported at 1000 Mbps\n");
++              netdev_dbg(adapter->netdev,
++                         "Half Duplex is not supported at 1000 Mbps\n");
+               /* fall through */
+       case SPEED_1000 + FULL_DUPLEX:
+ full_duplex_only:
+-              pr_debug("Using Autonegotiation at 1000 Mbps Full Duplex only\n");
++              netdev_dbg(adapter->netdev,
++                         "Using Autonegotiation at 1000 Mbps Full Duplex only\n");
+               hw->mac.autoneg = hw->mac.fc_autoneg = 1;
+               hw->phy.autoneg_advertised = PHY_ADVERTISE_1000_FULL;
+               hw->mac.link_speed = SPEED_1000;
+--- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_phy.c
++++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_phy.c
+@@ -97,6 +97,7 @@
+  */
+ s32 pch_gbe_phy_get_id(struct pch_gbe_hw *hw)
+ {
++      struct pch_gbe_adapter *adapter = pch_gbe_hw_to_adapter(hw);
+       struct pch_gbe_phy_info *phy = &hw->phy;
+       s32 ret;
+       u16 phy_id1;
+@@ -115,8 +116,9 @@ s32 pch_gbe_phy_get_id(struct pch_gbe_hw
+       phy->id = (u32)phy_id1;
+       phy->id = ((phy->id << 6) | ((phy_id2 & 0xFC00) >> 10));
+       phy->revision = (u32) (phy_id2 & 0x000F);
+-      pr_debug("phy->id : 0x%08x  phy->revision : 0x%08x\n",
+-               phy->id, phy->revision);
++      netdev_dbg(adapter->netdev,
++                 "phy->id : 0x%08x  phy->revision : 0x%08x\n",
++                 phy->id, phy->revision);
+       return 0;
+ }
+@@ -134,7 +136,10 @@ s32 pch_gbe_phy_read_reg_miic(struct pch
+       struct pch_gbe_phy_info *phy = &hw->phy;
+       if (offset > PHY_MAX_REG_ADDRESS) {
+-              pr_err("PHY Address %d is out of range\n", offset);
++              struct pch_gbe_adapter *adapter = pch_gbe_hw_to_adapter(hw);
++
++              netdev_err(adapter->netdev, "PHY Address %d is out of range\n",
++                         offset);
+               return -EINVAL;
+       }
+       *data = pch_gbe_mac_ctrl_miim(hw, phy->addr, PCH_GBE_HAL_MIIM_READ,
+@@ -156,7 +161,10 @@ s32 pch_gbe_phy_write_reg_miic(struct pc
+       struct pch_gbe_phy_info *phy = &hw->phy;
+       if (offset > PHY_MAX_REG_ADDRESS) {
+-              pr_err("PHY Address %d is out of range\n", offset);
++              struct pch_gbe_adapter *adapter = pch_gbe_hw_to_adapter(hw);
++
++              netdev_err(adapter->netdev, "PHY Address %d is out of range\n",
++                         offset);
+               return -EINVAL;
+       }
+       pch_gbe_mac_ctrl_miim(hw, phy->addr, PCH_GBE_HAL_MIIM_WRITE,
+@@ -246,15 +254,14 @@ inline void pch_gbe_phy_set_rgmii(struct
+  */
+ void pch_gbe_phy_init_setting(struct pch_gbe_hw *hw)
+ {
+-      struct pch_gbe_adapter *adapter;
++      struct pch_gbe_adapter *adapter = pch_gbe_hw_to_adapter(hw);
+       struct ethtool_cmd     cmd = { .cmd = ETHTOOL_GSET };
+       int ret;
+       u16 mii_reg;
+-      adapter = container_of(hw, struct pch_gbe_adapter, hw);
+       ret = mii_ethtool_gset(&adapter->mii, &cmd);
+       if (ret)
+-              pr_err("Error: mii_ethtool_gset\n");
++              netdev_err(adapter->netdev, "Error: mii_ethtool_gset\n");
+       ethtool_cmd_speed_set(&cmd, hw->mac.link_speed);
+       cmd.duplex = hw->mac.link_duplex;
+@@ -263,7 +270,7 @@ void pch_gbe_phy_init_setting(struct pch
+       pch_gbe_phy_write_reg_miic(hw, MII_BMCR, BMCR_RESET);
+       ret = mii_ethtool_sset(&adapter->mii, &cmd);
+       if (ret)
+-              pr_err("Error: mii_ethtool_sset\n");
++              netdev_err(adapter->netdev, "Error: mii_ethtool_sset\n");
+       pch_gbe_phy_sw_reset(hw);
diff --git a/patches.minnowboard/pch_gbe-use-managed-functions-pcim_-and-devm_.patch b/patches.minnowboard/pch_gbe-use-managed-functions-pcim_-and-devm_.patch
new file mode 100644 (file)
index 0000000..90f6a43
--- /dev/null
@@ -0,0 +1,144 @@
+From 29cc436cb90da4cabf404d8ceedc762fc7387b15 Mon Sep 17 00:00:00 2001
+From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+Date: Fri, 28 Jun 2013 14:02:54 +0300
+Subject: pch_gbe: use managed functions pcim_* and devm_*
+
+From: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+
+commit 29cc436cb90da4cabf404d8ceedc762fc7387b15 upstream.
+
+This makes the error handling much more simpler than open-coding everything and
+in addition makes the probe function smaller an tidier.
+
+Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+Signed-off-by: David S. Miller <davem@davemloft.net>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c |   50 +++++--------------
+ 1 file changed, 15 insertions(+), 35 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
+@@ -636,15 +636,15 @@ static void pch_gbe_mac_set_pause_packet
+  */
+ static int pch_gbe_alloc_queues(struct pch_gbe_adapter *adapter)
+ {
+-      adapter->tx_ring = kzalloc(sizeof(*adapter->tx_ring), GFP_KERNEL);
++      adapter->tx_ring = devm_kzalloc(&adapter->pdev->dev,
++                                      sizeof(*adapter->tx_ring), GFP_KERNEL);
+       if (!adapter->tx_ring)
+               return -ENOMEM;
+-      adapter->rx_ring = kzalloc(sizeof(*adapter->rx_ring), GFP_KERNEL);
+-      if (!adapter->rx_ring) {
+-              kfree(adapter->tx_ring);
++      adapter->rx_ring = devm_kzalloc(&adapter->pdev->dev,
++                                      sizeof(*adapter->rx_ring), GFP_KERNEL);
++      if (!adapter->rx_ring)
+               return -ENOMEM;
+-      }
+       return 0;
+ }
+@@ -2588,13 +2588,7 @@ static void pch_gbe_remove(struct pci_de
+       pch_gbe_hal_phy_hw_reset(&adapter->hw);
+-      kfree(adapter->tx_ring);
+-      kfree(adapter->rx_ring);
+-
+-      iounmap(adapter->hw.reg);
+-      pci_release_regions(pdev);
+       free_netdev(netdev);
+-      pci_disable_device(pdev);
+ }
+ static int pch_gbe_probe(struct pci_dev *pdev,
+@@ -2604,7 +2598,7 @@ static int pch_gbe_probe(struct pci_dev
+       struct pch_gbe_adapter *adapter;
+       int ret;
+-      ret = pci_enable_device(pdev);
++      ret = pcim_enable_device(pdev);
+       if (ret)
+               return ret;
+@@ -2617,24 +2611,22 @@ static int pch_gbe_probe(struct pci_dev
+                       if (ret) {
+                               dev_err(&pdev->dev, "ERR: No usable DMA "
+                                       "configuration, aborting\n");
+-                              goto err_disable_device;
++                              return ret;
+                       }
+               }
+       }
+-      ret = pci_request_regions(pdev, KBUILD_MODNAME);
++      ret = pcim_iomap_regions(pdev, 1 << PCH_GBE_PCI_BAR, pci_name(pdev));
+       if (ret) {
+               dev_err(&pdev->dev,
+                       "ERR: Can't reserve PCI I/O and memory resources\n");
+-              goto err_disable_device;
++              return ret;
+       }
+       pci_set_master(pdev);
+       netdev = alloc_etherdev((int)sizeof(struct pch_gbe_adapter));
+-      if (!netdev) {
+-              ret = -ENOMEM;
+-              goto err_release_pci;
+-      }
++      if (!netdev)
++              return -ENOMEM;
+       SET_NETDEV_DEV(netdev, &pdev->dev);
+       pci_set_drvdata(pdev, netdev);
+@@ -2642,18 +2634,14 @@ static int pch_gbe_probe(struct pci_dev
+       adapter->netdev = netdev;
+       adapter->pdev = pdev;
+       adapter->hw.back = adapter;
+-      adapter->hw.reg = pci_iomap(pdev, PCH_GBE_PCI_BAR, 0);
+-      if (!adapter->hw.reg) {
+-              ret = -EIO;
+-              dev_err(&pdev->dev, "Can't ioremap\n");
+-              goto err_free_netdev;
+-      }
++      adapter->hw.reg = pcim_iomap_table(pdev)[PCH_GBE_PCI_BAR];
+       adapter->ptp_pdev = pci_get_bus_and_slot(adapter->pdev->bus->number,
+                                              PCI_DEVFN(12, 4));
+       if (ptp_filter_init(ptp_filter, ARRAY_SIZE(ptp_filter))) {
+               dev_err(&pdev->dev, "Bad ptp filter\n");
+-              return -EINVAL;
++              ret = -EINVAL;
++              goto err_free_netdev;
+       }
+       netdev->netdev_ops = &pch_gbe_netdev_ops;
+@@ -2671,7 +2659,7 @@ static int pch_gbe_probe(struct pci_dev
+       /* setup the private structure */
+       ret = pch_gbe_sw_init(adapter);
+       if (ret)
+-              goto err_iounmap;
++              goto err_free_netdev;
+       /* Initialize PHY */
+       ret = pch_gbe_init_phy(adapter);
+@@ -2727,16 +2715,8 @@ static int pch_gbe_probe(struct pci_dev
+ err_free_adapter:
+       pch_gbe_hal_phy_hw_reset(&adapter->hw);
+-      kfree(adapter->tx_ring);
+-      kfree(adapter->rx_ring);
+-err_iounmap:
+-      iounmap(adapter->hw.reg);
+ err_free_netdev:
+       free_netdev(netdev);
+-err_release_pci:
+-      pci_release_regions(pdev);
+-err_disable_device:
+-      pci_disable_device(pdev);
+       return ret;
+ }
diff --git a/patches.minnowboard/pch_gbe-use-pch_gbe_phy_regs_len-instead-of-32.patch b/patches.minnowboard/pch_gbe-use-pch_gbe_phy_regs_len-instead-of-32.patch
new file mode 100644 (file)
index 0000000..62a4d1f
--- /dev/null
@@ -0,0 +1,35 @@
+From b04d68ebb04aa2d4ab9392c5353a53c81be7b847 Mon Sep 17 00:00:00 2001
+From: Darren Hart <dvhart@linux.intel.com>
+Date: Sat, 18 May 2013 14:45:55 -0700
+Subject: pch_gbe: Use PCH_GBE_PHY_REGS_LEN instead of 32
+
+From: Darren Hart <dvhart@linux.intel.com>
+
+commit b04d68ebb04aa2d4ab9392c5353a53c81be7b847 upstream.
+
+Avoid using magic numbers when we have perfectly good defines just lying
+around.
+
+Signed-off-by: Darren Hart <dvhart@linux.intel.com>
+Cc: "David S. Miller" <davem@davemloft.net>
+Cc: "H. Peter Anvin" <hpa@zytor.com>
+Cc: Peter Waskiewicz <peter.p.waskiewicz.jr@intel.com>
+Cc: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
+Cc: netdev@vger.kernel.org
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
++++ b/drivers/net/ethernet/oki-semi/pch_gbe/pch_gbe_main.c
+@@ -682,7 +682,7 @@ static int pch_gbe_init_phy(struct pch_g
+       }
+       adapter->hw.phy.addr = adapter->mii.phy_id;
+       netdev_dbg(netdev, "phy_addr = %d\n", adapter->mii.phy_id);
+-      if (addr == 32)
++      if (addr == PCH_GBE_PHY_REGS_LEN)
+               return -EAGAIN;
+       /* Selected the phy and isolate the rest */
+       for (addr = 0; addr < PCH_GBE_PHY_REGS_LEN; addr++) {
diff --git a/patches.minnowboard/pch_uart-use-dmi-interface-for-board-detection.patch b/patches.minnowboard/pch_uart-use-dmi-interface-for-board-detection.patch
new file mode 100644 (file)
index 0000000..8c33bd7
--- /dev/null
@@ -0,0 +1,107 @@
+From 4e3234897fbc4c83286f3cd3105d38b26634812d Mon Sep 17 00:00:00 2001
+From: Darren Hart <dvhart@linux.intel.com>
+Date: Fri, 12 Jul 2013 17:58:05 -0700
+Subject: pch_uart: Use DMI interface for board detection
+
+From: Darren Hart <dvhart@linux.intel.com>
+
+commit 4e3234897fbc4c83286f3cd3105d38b26634812d upstream.
+
+Use the DMI interface rather than manually matching DMI strings.
+
+Signed-off-by: Darren Hart <dvhart@linux.intel.com>
+Cc: Michael Brunner <mibru@gmx.de>
+Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/tty/serial/pch_uart.c |   71 ++++++++++++++++++++++++++++--------------
+ 1 file changed, 49 insertions(+), 22 deletions(-)
+
+--- a/drivers/tty/serial/pch_uart.c
++++ b/drivers/tty/serial/pch_uart.c
+@@ -373,35 +373,62 @@ static const struct file_operations port
+ };
+ #endif        /* CONFIG_DEBUG_FS */
++static struct dmi_system_id __initdata pch_uart_dmi_table[] = {
++      {
++              .ident = "CM-iTC",
++              {
++                      DMI_MATCH(DMI_BOARD_NAME, "CM-iTC"),
++              },
++              (void *)CMITC_UARTCLK,
++      },
++      {
++              .ident = "FRI2",
++              {
++                      DMI_MATCH(DMI_BIOS_VERSION, "FRI2"),
++              },
++              (void *)FRI2_64_UARTCLK,
++      },
++      {
++              .ident = "Fish River Island II",
++              {
++                      DMI_MATCH(DMI_PRODUCT_NAME, "Fish River Island II"),
++              },
++              (void *)FRI2_48_UARTCLK,
++      },
++      {
++              .ident = "COMe-mTT",
++              {
++                      DMI_MATCH(DMI_BOARD_NAME, "COMe-mTT"),
++              },
++              (void *)NTC1_UARTCLK,
++      },
++      {
++              .ident = "nanoETXexpress-TT",
++              {
++                      DMI_MATCH(DMI_BOARD_NAME, "nanoETXexpress-TT"),
++              },
++              (void *)NTC1_UARTCLK,
++      },
++      {
++              .ident = "MinnowBoard",
++              {
++                      DMI_MATCH(DMI_BOARD_NAME, "MinnowBoard"),
++              },
++              (void *)MINNOW_UARTCLK,
++      },
++};
++
+ /* Return UART clock, checking for board specific clocks. */
+ static int pch_uart_get_uartclk(void)
+ {
+-      const char *cmp;
++      const struct dmi_system_id *d;
+       if (user_uartclk)
+               return user_uartclk;
+-      cmp = dmi_get_system_info(DMI_BOARD_NAME);
+-      if (cmp && strstr(cmp, "CM-iTC"))
+-              return CMITC_UARTCLK;
+-
+-      cmp = dmi_get_system_info(DMI_BIOS_VERSION);
+-      if (cmp && strnstr(cmp, "FRI2", 4))
+-              return FRI2_64_UARTCLK;
+-
+-      cmp = dmi_get_system_info(DMI_PRODUCT_NAME);
+-      if (cmp && strstr(cmp, "Fish River Island II"))
+-              return FRI2_48_UARTCLK;
+-
+-      /* Kontron COMe-mTT10 (nanoETXexpress-TT) */
+-      cmp = dmi_get_system_info(DMI_BOARD_NAME);
+-      if (cmp && (strstr(cmp, "COMe-mTT") ||
+-                  strstr(cmp, "nanoETXexpress-TT")))
+-              return NTC1_UARTCLK;
+-
+-      cmp = dmi_get_system_info(DMI_BOARD_NAME);
+-      if (cmp && strstr(cmp, "MinnowBoard"))
+-              return MINNOW_UARTCLK;
++      d = dmi_first_match(pch_uart_dmi_table);
++      if (d)
++              return (int)d->driver_data;
+       return DEFAULT_UARTCLK;
+ }
diff --git a/patches.minnowboard/pci-add-circuitco-vendor-id-and-subsystem-id.patch b/patches.minnowboard/pci-add-circuitco-vendor-id-and-subsystem-id.patch
new file mode 100644 (file)
index 0000000..04ee875
--- /dev/null
@@ -0,0 +1,33 @@
+From 91bbe923d18cfff4286a84e59b9d5b61389c3027 Mon Sep 17 00:00:00 2001
+From: Darren Hart <dvhart@linux.intel.com>
+Date: Tue, 25 Jun 2013 20:08:46 -0600
+Subject: PCI: Add CircuitCo vendor ID and subsystem ID
+
+From: Darren Hart <dvhart@linux.intel.com>
+
+commit 91bbe923d18cfff4286a84e59b9d5b61389c3027 upstream.
+
+Add CircuitCo's newly created VENDOR ID and their first board subsystem
+ID for the MinnowBoard.
+
+[bhelgaas: sort, change DEVICE_ID to SUBSYSTEM_ID]
+Signed-off-by: Darren Hart <dvhart@linux.intel.com>
+Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ include/linux/pci_ids.h |    3 +++
+ 1 file changed, 3 insertions(+)
+
+--- a/include/linux/pci_ids.h
++++ b/include/linux/pci_ids.h
+@@ -2478,6 +2478,9 @@
+ #define PCI_VENDOR_ID_ASMEDIA         0x1b21
++#define PCI_VENDOR_ID_CIRCUITCO               0x1cc8
++#define PCI_SUBSYSTEM_ID_CIRCUITCO_MINNOWBOARD        0x0001
++
+ #define PCI_VENDOR_ID_TEKRAM          0x1de1
+ #define PCI_DEVICE_ID_TEKRAM_DC290    0xdc29
diff --git a/patches.minnowboard/serial-pch_uart-fix-compilation-warning.patch b/patches.minnowboard/serial-pch_uart-fix-compilation-warning.patch
new file mode 100644 (file)
index 0000000..3e78a7f
--- /dev/null
@@ -0,0 +1,41 @@
+From 09a5163f5c0eb0944f3a2c219acd75933f74fda2 Mon Sep 17 00:00:00 2001
+From: Luis Henriques <luis.henriques@canonical.com>
+Date: Wed, 14 Aug 2013 23:18:37 +0100
+Subject: serial: pch_uart: fix compilation warning
+
+From: Luis Henriques <luis.henriques@canonical.com>
+
+commit 09a5163f5c0eb0944f3a2c219acd75933f74fda2 upstream.
+
+Function wait_for_xmitr is invoked only on functions that either depend
+on CONFIG_CONSOLE_POLL or CONFIG_SERIAL_PCH_UART_CONSOLE.
+
+This patch fixes the following warning:
+
+drivers/tty/serial/pch_uart.c:1504:13: warning: ‘wait_for_xmitr’ defined but not used [-Wunused-function]
+
+Signed-off-by: Luis Henriques <luis.henriques@canonical.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/tty/serial/pch_uart.c |    2 ++
+ 1 file changed, 2 insertions(+)
+
+--- a/drivers/tty/serial/pch_uart.c
++++ b/drivers/tty/serial/pch_uart.c
+@@ -1527,6 +1527,7 @@ static int pch_uart_verify_port(struct u
+       return 0;
+ }
++#if defined(CONFIG_CONSOLE_POLL) || defined(CONFIG_SERIAL_PCH_UART_CONSOLE)
+ /*
+  *    Wait for transmitter & holding register to empty
+  */
+@@ -1557,6 +1558,7 @@ static void wait_for_xmitr(struct eg20t_
+               }
+       }
+ }
++#endif /* CONFIG_CONSOLE_POLL || CONFIG_SERIAL_PCH_UART_CONSOLE */
+ #ifdef CONFIG_CONSOLE_POLL
+ /*
diff --git a/patches.minnowboard/serial-pch_uart-fix-signed-ness-and-casting-of-uartclk-related-fields.patch b/patches.minnowboard/serial-pch_uart-fix-signed-ness-and-casting-of-uartclk-related-fields.patch
new file mode 100644 (file)
index 0000000..dc62bd6
--- /dev/null
@@ -0,0 +1,86 @@
+From e26439ce03f0808f5d797ca33f180fdb8258335a Mon Sep 17 00:00:00 2001
+From: Darren Hart <dvhart@linux.intel.com>
+Date: Mon, 29 Jul 2013 15:15:07 -0700
+Subject: serial: pch_uart: Fix signed-ness and casting of uartclk related fields
+
+From: Darren Hart <dvhart@linux.intel.com>
+
+commit e26439ce03f0808f5d797ca33f180fdb8258335a upstream.
+
+Storing one struct per known board would be overkill. Pre-cast the
+driver_data pointer to an unsigned long to avoid the pointer to int
+compiler warning:
+
+drivers/tty/serial/pch_uart.c:431:10: warning: cast from pointer to
+integer of different size [-Wpointer-to-int-cast]
+
+Unify the signed-ness of the baud and uartclk types throughout the
+driver.
+
+Signed-off-by: Darren Hart <dvhart@linux.intel.com>
+Reported-by: kbuild test robot <fengguang.wu@intel.com>
+Cc: Jiri Slaby <jslaby@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/tty/serial/pch_uart.c |   13 ++++++-------
+ 1 file changed, 6 insertions(+), 7 deletions(-)
+
+--- a/drivers/tty/serial/pch_uart.c
++++ b/drivers/tty/serial/pch_uart.c
+@@ -232,7 +232,7 @@ struct eg20t_port {
+       unsigned int iobase;
+       struct pci_dev *pdev;
+       int fifo_size;
+-      int uartclk;
++      unsigned int uartclk;
+       int start_tx;
+       int start_rx;
+       int tx_empty;
+@@ -419,7 +419,7 @@ static struct dmi_system_id pch_uart_dmi
+ };
+ /* Return UART clock, checking for board specific clocks. */
+-static int pch_uart_get_uartclk(void)
++static unsigned int pch_uart_get_uartclk(void)
+ {
+       const struct dmi_system_id *d;
+@@ -428,7 +428,7 @@ static int pch_uart_get_uartclk(void)
+       d = dmi_first_match(pch_uart_dmi_table);
+       if (d)
+-              return (int)d->driver_data;
++              return (unsigned long)d->driver_data;
+       return DEFAULT_UARTCLK;
+ }
+@@ -449,7 +449,7 @@ static void pch_uart_hal_disable_interru
+       iowrite8(ier, priv->membase + UART_IER);
+ }
+-static int pch_uart_hal_set_line(struct eg20t_port *priv, int baud,
++static int pch_uart_hal_set_line(struct eg20t_port *priv, unsigned int baud,
+                                unsigned int parity, unsigned int bits,
+                                unsigned int stb)
+ {
+@@ -484,7 +484,7 @@ static int pch_uart_hal_set_line(struct
+       lcr |= bits;
+       lcr |= stb;
+-      dev_dbg(priv->port.dev, "%s:baud = %d, div = %04x, lcr = %02x (%lu)\n",
++      dev_dbg(priv->port.dev, "%s:baud = %u, div = %04x, lcr = %02x (%lu)\n",
+                __func__, baud, div, lcr, jiffies);
+       iowrite8(PCH_UART_LCR_DLAB, priv->membase + UART_LCR);
+       iowrite8(dll, priv->membase + PCH_UART_DLL);
+@@ -1393,9 +1393,8 @@ static void pch_uart_shutdown(struct uar
+ static void pch_uart_set_termios(struct uart_port *port,
+                                struct ktermios *termios, struct ktermios *old)
+ {
+-      int baud;
+       int rtn;
+-      unsigned int parity, bits, stb;
++      unsigned int baud, parity, bits, stb;
+       struct eg20t_port *priv;
+       unsigned long flags;
diff --git a/patches.minnowboard/serial-pch_uart-remove-__initdata-annotation-from-dmi_table.patch b/patches.minnowboard/serial-pch_uart-remove-__initdata-annotation-from-dmi_table.patch
new file mode 100644 (file)
index 0000000..c81ff91
--- /dev/null
@@ -0,0 +1,37 @@
+From 0a09ae98eade956bbc681cb905584effe4a1ed95 Mon Sep 17 00:00:00 2001
+From: Darren Hart <dvhart@linux.intel.com>
+Date: Mon, 29 Jul 2013 09:58:14 -0700
+Subject: serial: pch_uart: Remove __initdata annotation from dmi_table
+
+From: Darren Hart <dvhart@linux.intel.com>
+
+commit 0a09ae98eade956bbc681cb905584effe4a1ed95 upstream.
+
+The dmi_table is best accessed from the probe function, which is not
+an __init function. Drop the __initdata annotation from the dmi_table
+to avoid the section mismatch compiler warnings:
+
+WARNING: drivers/tty/serial/pch_uart.o(.text+0x4871): Section mismatch
+in reference from the function pch_uart_init_port() to the variable
+.init.data:pch_uart_dmi_table
+
+Signed-off-by: Darren Hart <dvhart@linux.intel.com>
+Reported-by: kbuild test robot <fengguang.wu@intel.com>
+Cc: Jiri Slaby <jslaby@suse.cz>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+
+---
+ drivers/tty/serial/pch_uart.c |    2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+--- a/drivers/tty/serial/pch_uart.c
++++ b/drivers/tty/serial/pch_uart.c
+@@ -373,7 +373,7 @@ static const struct file_operations port
+ };
+ #endif        /* CONFIG_DEBUG_FS */
+-static struct dmi_system_id __initdata pch_uart_dmi_table[] = {
++static struct dmi_system_id pch_uart_dmi_table[] = {
+       {
+               .ident = "CM-iTC",
+               {
diff --git a/series b/series
index c86d90272cdf194e6d1566fe15f340e6a6dde0f4..1916a720ac27101053f0decf61059ff1a86338f0 100644 (file)
--- a/series
+++ b/series
@@ -2541,6 +2541,20 @@ patches.zynq/of-remove-ifdef-from-linux-of_platform.h.patch
 patches.zynq/i2c-si570-merge-support-for-si570-clock-generator.patch
 
 
+#############################################################################
+# MinnowBoard patches
+#
+patches.minnowboard/pch_uart-use-dmi-interface-for-board-detection.patch
+patches.minnowboard/serial-pch_uart-remove-__initdata-annotation-from-dmi_table.patch
+patches.minnowboard/serial-pch_uart-fix-signed-ness-and-casting-of-uartclk-related-fields.patch
+patches.minnowboard/serial-pch_uart-fix-compilation-warning.patch
+patches.minnowboard/pch_gbe-convert-pr_-to-netdev_.patch
+patches.minnowboard/pch_gbe-use-managed-functions-pcim_-and-devm_.patch
+patches.minnowboard/pch_gbe-use-pch_gbe_phy_regs_len-instead-of-32.patch
+patches.minnowboard/pci-add-circuitco-vendor-id-and-subsystem-id.patch
+patches.minnowboard/pch_gbe-add-minnowboard-support.patch
+
+
 #############################################################################
 # fixes that go after all of the above
 #