aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-01-14 11:39:52 -0800
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-01-14 11:39:52 -0800
commit24bf7251532a9616fffb5cbc56ce261b6fb18234 (patch)
tree15a8433d112d82ce193f37ae434c3a446d6d00ed
parent69d078128c3a0308dff06e1faa4a5a9646012b37 (diff)
downloadltsi-kernel-24bf7251532a9616fffb5cbc56ce261b6fb18234.tar.gz
MinnowBoard patches added
-rw-r--r--patches.minnowboard/pch_gbe-add-minnowboard-support.patch293
-rw-r--r--patches.minnowboard/pch_gbe-convert-pr_-to-netdev_.patch1157
-rw-r--r--patches.minnowboard/pch_gbe-use-managed-functions-pcim_-and-devm_.patch144
-rw-r--r--patches.minnowboard/pch_gbe-use-pch_gbe_phy_regs_len-instead-of-32.patch35
-rw-r--r--patches.minnowboard/pch_uart-use-dmi-interface-for-board-detection.patch107
-rw-r--r--patches.minnowboard/pci-add-circuitco-vendor-id-and-subsystem-id.patch33
-rw-r--r--patches.minnowboard/serial-pch_uart-fix-compilation-warning.patch41
-rw-r--r--patches.minnowboard/serial-pch_uart-fix-signed-ness-and-casting-of-uartclk-related-fields.patch86
-rw-r--r--patches.minnowboard/serial-pch_uart-remove-__initdata-annotation-from-dmi_table.patch37
-rw-r--r--series14
10 files changed, 1947 insertions, 0 deletions
diff --git a/patches.minnowboard/pch_gbe-add-minnowboard-support.patch b/patches.minnowboard/pch_gbe-add-minnowboard-support.patch
new file mode 100644
index 00000000000000..8eeff6c64a227b
--- /dev/null
+++ b/patches.minnowboard/pch_gbe-add-minnowboard-support.patch
@@ -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
index 00000000000000..9ff1d7acb4744d
--- /dev/null
+++ b/patches.minnowboard/pch_gbe-convert-pr_-to-netdev_.patch
@@ -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
index 00000000000000..90f6a436631963
--- /dev/null
+++ b/patches.minnowboard/pch_gbe-use-managed-functions-pcim_-and-devm_.patch
@@ -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
index 00000000000000..62a4d1f017f61e
--- /dev/null
+++ b/patches.minnowboard/pch_gbe-use-pch_gbe_phy_regs_len-instead-of-32.patch
@@ -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
index 00000000000000..8c33bd7fcb53b1
--- /dev/null
+++ b/patches.minnowboard/pch_uart-use-dmi-interface-for-board-detection.patch
@@ -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
index 00000000000000..04ee87538ce517
--- /dev/null
+++ b/patches.minnowboard/pci-add-circuitco-vendor-id-and-subsystem-id.patch
@@ -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
index 00000000000000..3e78a7f6995cce
--- /dev/null
+++ b/patches.minnowboard/serial-pch_uart-fix-compilation-warning.patch
@@ -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
index 00000000000000..dc62bd60ffdaed
--- /dev/null
+++ b/patches.minnowboard/serial-pch_uart-fix-signed-ness-and-casting-of-uartclk-related-fields.patch
@@ -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
index 00000000000000..c81ff9142e49f8
--- /dev/null
+++ b/patches.minnowboard/serial-pch_uart-remove-__initdata-annotation-from-dmi_table.patch
@@ -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 c86d90272cdf19..1916a720ac2710 100644
--- a/series
+++ b/series
@@ -2542,6 +2542,20 @@ 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
#