[PATCH] atl1c: fix issue of io access mode for AR8152 v2.1

2012-07-19 Thread cjren
When io access mode is enabled by BOOTROM or BIOS for AR8152 v2.1,
the register can't be read/write by memory access mode.
Clearing Bit 8  of Register 0x21c could fixed the issue.

Signed-off-by: Cloud Ren 
Cc: stable 
Signed-off-by: xiong 
---
 drivers/net/ethernet/atheros/atl1c/atl1c_hw.h   |5 +
 drivers/net/ethernet/atheros/atl1c/atl1c_main.c |   16 +++-
 2 files changed, 20 insertions(+), 1 deletions(-)

diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_hw.h 
b/drivers/net/ethernet/atheros/atl1c/atl1c_hw.h
index 17d935b..21d8c4d 100644
--- a/drivers/net/ethernet/atheros/atl1c/atl1c_hw.h
+++ b/drivers/net/ethernet/atheros/atl1c/atl1c_hw.h
@@ -74,6 +74,8 @@ void atl1c_post_phy_linkchg(struct atl1c_hw *hw, u16 
link_speed);
 #define PCI_DEVICE_ID_ATHEROS_L1D_2_0  0x1083 /* AR8151 v2.0 Gigabit 1000 */
 #define L2CB_V10   0xc0
 #define L2CB_V11   0xc1
+#define L2CB_V20   0xc0
+#define L2CB_V21   0xc1
 
 /* register definition */
 #define REG_DEVICE_CAP 0x5C
@@ -87,6 +89,9 @@ void atl1c_post_phy_linkchg(struct atl1c_hw *hw, u16 
link_speed);
 #define LINK_CTRL_L1_EN0x02
 #define LINK_CTRL_EXT_SYNC 0x80
 
+#define REG_PCIE_IND_ACC_ADDR  0x80
+#define REG_PCIE_IND_ACC_DATA  0x84
+
 #define REG_DEV_SERIALNUM_CTRL 0x200
 #define REG_DEV_MAC_SEL_MASK   0x0 /* 0:EUI; 1:MAC */
 #define REG_DEV_MAC_SEL_SHIFT  0
diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c 
b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
index 36d3783..1bf5bbf 100644
--- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
+++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
@@ -727,6 +727,8 @@ static const struct atl1c_platform_patch plats[] 
__devinitdata = {
 
 static void __devinit atl1c_patch_assign(struct atl1c_hw *hw)
 {
+   struct pci_dev  *pdev = hw->adapter->pdev;
+   u32 misc_ctrl;
int i = 0;
 
hw->msi_lnkpatch = false;
@@ -741,6 +743,18 @@ static void __devinit atl1c_patch_assign(struct atl1c_hw 
*hw)
}
i++;
}
+
+   if (hw->device_id == PCI_DEVICE_ID_ATHEROS_L2C_B2 &&
+   hw->revision_id == L2CB_V21) {
+   /* config acess mode */
+   pci_write_config_dword(pdev, REG_PCIE_IND_ACC_ADDR,
+  REG_PCIE_DEV_MISC_CTRL);
+   pci_read_config_dword(pdev, REG_PCIE_IND_ACC_DATA, _ctrl);
+   misc_ctrl &= ~0x100;
+   pci_write_config_dword(pdev, REG_PCIE_IND_ACC_ADDR,
+  REG_PCIE_DEV_MISC_CTRL);
+   pci_write_config_dword(pdev, REG_PCIE_IND_ACC_DATA, misc_ctrl);
+   }
 }
 /**
  * atl1c_sw_init - Initialize general software structures (struct 
atl1c_adapter)
@@ -768,7 +782,7 @@ static int __devinit atl1c_sw_init(struct atl1c_adapter 
*adapter)
hw->device_id = pdev->device;
hw->subsystem_vendor_id = pdev->subsystem_vendor;
hw->subsystem_id = pdev->subsystem_device;
-   AT_READ_REG(hw, PCI_CLASS_REVISION, );
+   pci_read_config_dword(pdev, PCI_CLASS_REVISION, );
hw->revision_id = revision & 0xFF;
/* before link up, we assume hibernate is true */
hw->hibernate = true;
-- 
1.5.4.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH] atl1c: fix issue of io access mode for AR8152 v2.1

2012-07-19 Thread cjren
When io access mode is enabled by BOOTROM or BIOS for AR8152 v2.1,
the register can't be read/write by memory access mode.
Clearing Bit 8  of Register 0x21c could fixed the issue.

Signed-off-by: Cloud Ren cj...@qca.qualcomm.com
Cc: stable sta...@vger.kernel.org
Signed-off-by: xiong xi...@qca.qualcomm.com
---
 drivers/net/ethernet/atheros/atl1c/atl1c_hw.h   |5 +
 drivers/net/ethernet/atheros/atl1c/atl1c_main.c |   16 +++-
 2 files changed, 20 insertions(+), 1 deletions(-)

diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_hw.h 
b/drivers/net/ethernet/atheros/atl1c/atl1c_hw.h
index 17d935b..21d8c4d 100644
--- a/drivers/net/ethernet/atheros/atl1c/atl1c_hw.h
+++ b/drivers/net/ethernet/atheros/atl1c/atl1c_hw.h
@@ -74,6 +74,8 @@ void atl1c_post_phy_linkchg(struct atl1c_hw *hw, u16 
link_speed);
 #define PCI_DEVICE_ID_ATHEROS_L1D_2_0  0x1083 /* AR8151 v2.0 Gigabit 1000 */
 #define L2CB_V10   0xc0
 #define L2CB_V11   0xc1
+#define L2CB_V20   0xc0
+#define L2CB_V21   0xc1
 
 /* register definition */
 #define REG_DEVICE_CAP 0x5C
@@ -87,6 +89,9 @@ void atl1c_post_phy_linkchg(struct atl1c_hw *hw, u16 
link_speed);
 #define LINK_CTRL_L1_EN0x02
 #define LINK_CTRL_EXT_SYNC 0x80
 
+#define REG_PCIE_IND_ACC_ADDR  0x80
+#define REG_PCIE_IND_ACC_DATA  0x84
+
 #define REG_DEV_SERIALNUM_CTRL 0x200
 #define REG_DEV_MAC_SEL_MASK   0x0 /* 0:EUI; 1:MAC */
 #define REG_DEV_MAC_SEL_SHIFT  0
diff --git a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c 
b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
index 36d3783..1bf5bbf 100644
--- a/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
+++ b/drivers/net/ethernet/atheros/atl1c/atl1c_main.c
@@ -727,6 +727,8 @@ static const struct atl1c_platform_patch plats[] 
__devinitdata = {
 
 static void __devinit atl1c_patch_assign(struct atl1c_hw *hw)
 {
+   struct pci_dev  *pdev = hw-adapter-pdev;
+   u32 misc_ctrl;
int i = 0;
 
hw-msi_lnkpatch = false;
@@ -741,6 +743,18 @@ static void __devinit atl1c_patch_assign(struct atl1c_hw 
*hw)
}
i++;
}
+
+   if (hw-device_id == PCI_DEVICE_ID_ATHEROS_L2C_B2 
+   hw-revision_id == L2CB_V21) {
+   /* config acess mode */
+   pci_write_config_dword(pdev, REG_PCIE_IND_ACC_ADDR,
+  REG_PCIE_DEV_MISC_CTRL);
+   pci_read_config_dword(pdev, REG_PCIE_IND_ACC_DATA, misc_ctrl);
+   misc_ctrl = ~0x100;
+   pci_write_config_dword(pdev, REG_PCIE_IND_ACC_ADDR,
+  REG_PCIE_DEV_MISC_CTRL);
+   pci_write_config_dword(pdev, REG_PCIE_IND_ACC_DATA, misc_ctrl);
+   }
 }
 /**
  * atl1c_sw_init - Initialize general software structures (struct 
atl1c_adapter)
@@ -768,7 +782,7 @@ static int __devinit atl1c_sw_init(struct atl1c_adapter 
*adapter)
hw-device_id = pdev-device;
hw-subsystem_vendor_id = pdev-subsystem_vendor;
hw-subsystem_id = pdev-subsystem_device;
-   AT_READ_REG(hw, PCI_CLASS_REVISION, revision);
+   pci_read_config_dword(pdev, PCI_CLASS_REVISION, revision);
hw-revision_id = revision  0xFF;
/* before link up, we assume hibernate is true */
hw-hibernate = true;
-- 
1.5.4.5

--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/