aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorDhananjay Phadke <dhananjay.phadke@qlogic.com>2010-04-01 15:01:30 -0400
committerDavid S. Miller <davem@davemloft.net>2010-04-03 17:19:13 -0400
commitb47acacd7c888ef550fb786dd02db69d9eb2faee (patch)
tree960a55f66a1270cea01f31833dbcfac10566b460 /drivers/net
parent897e8c7c450dac2912b677c6e6bf8b04aa5bdf72 (diff)
qlcnic: update oncard memory size check
All QLogic converged NICs have 128-bit 128MB on card memory. Fix the limit check from 64MB to 128MB and remove unnecessary 64-bit read/write checks. Signed-off-by: Dhananjay Phadke <dhananjay.phadke@qlogic.com> Signed-off-by: Amit Kumar Salecha <amit.salecha@qlogic.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/qlcnic/qlcnic_hdr.h2
-rw-r--r--drivers/net/qlcnic/qlcnic_hw.c55
2 files changed, 25 insertions, 32 deletions
diff --git a/drivers/net/qlcnic/qlcnic_hdr.h b/drivers/net/qlcnic/qlcnic_hdr.h
index 25465a9a7dd0..e9fb692d83ab 100644
--- a/drivers/net/qlcnic/qlcnic_hdr.h
+++ b/drivers/net/qlcnic/qlcnic_hdr.h
@@ -449,7 +449,7 @@ enum {
449#define QLCNIC_ADDR_OCM1 (0x0000000200400000ULL) 449#define QLCNIC_ADDR_OCM1 (0x0000000200400000ULL)
450#define QLCNIC_ADDR_OCM1_MAX (0x00000002004fffffULL) 450#define QLCNIC_ADDR_OCM1_MAX (0x00000002004fffffULL)
451#define QLCNIC_ADDR_QDR_NET (0x0000000300000000ULL) 451#define QLCNIC_ADDR_QDR_NET (0x0000000300000000ULL)
452#define QLCNIC_ADDR_QDR_NET_MAX_P3 (0x0000000303ffffffULL) 452#define QLCNIC_ADDR_QDR_NET_MAX (0x0000000307ffffffULL)
453 453
454/* 454/*
455 * Register offsets for MN 455 * Register offsets for MN
diff --git a/drivers/net/qlcnic/qlcnic_hw.c b/drivers/net/qlcnic/qlcnic_hw.c
index b977874f28ce..419f46efa5df 100644
--- a/drivers/net/qlcnic/qlcnic_hw.c
+++ b/drivers/net/qlcnic/qlcnic_hw.c
@@ -963,7 +963,6 @@ qlcnic_pci_mem_write_2M(struct qlcnic_adapter *adapter,
963{ 963{
964 int i, j, ret; 964 int i, j, ret;
965 u32 temp, off8; 965 u32 temp, off8;
966 u64 stride;
967 void __iomem *mem_crb; 966 void __iomem *mem_crb;
968 967
969 /* Only 64-bit aligned access */ 968 /* Only 64-bit aligned access */
@@ -972,7 +971,7 @@ qlcnic_pci_mem_write_2M(struct qlcnic_adapter *adapter,
972 971
973 /* P3 onward, test agent base for MIU and SIU is same */ 972 /* P3 onward, test agent base for MIU and SIU is same */
974 if (ADDR_IN_RANGE(off, QLCNIC_ADDR_QDR_NET, 973 if (ADDR_IN_RANGE(off, QLCNIC_ADDR_QDR_NET,
975 QLCNIC_ADDR_QDR_NET_MAX_P3)) { 974 QLCNIC_ADDR_QDR_NET_MAX)) {
976 mem_crb = qlcnic_get_ioaddr(adapter, 975 mem_crb = qlcnic_get_ioaddr(adapter,
977 QLCNIC_CRB_QDR_NET+MIU_TEST_AGT_BASE); 976 QLCNIC_CRB_QDR_NET+MIU_TEST_AGT_BASE);
978 goto correct; 977 goto correct;
@@ -990,9 +989,7 @@ qlcnic_pci_mem_write_2M(struct qlcnic_adapter *adapter,
990 return -EIO; 989 return -EIO;
991 990
992correct: 991correct:
993 stride = QLCNIC_IS_REVISION_P3P(adapter->ahw.revision_id) ? 16 : 8; 992 off8 = off & ~0xf;
994
995 off8 = off & ~(stride-1);
996 993
997 mutex_lock(&adapter->ahw.mem_lock); 994 mutex_lock(&adapter->ahw.mem_lock);
998 995
@@ -1000,30 +997,28 @@ correct:
1000 writel(0, (mem_crb + MIU_TEST_AGT_ADDR_HI)); 997 writel(0, (mem_crb + MIU_TEST_AGT_ADDR_HI));
1001 998
1002 i = 0; 999 i = 0;
1003 if (stride == 16) { 1000 writel(TA_CTL_ENABLE, (mem_crb + TEST_AGT_CTRL));
1004 writel(TA_CTL_ENABLE, (mem_crb + TEST_AGT_CTRL)); 1001 writel((TA_CTL_START | TA_CTL_ENABLE),
1005 writel((TA_CTL_START | TA_CTL_ENABLE), 1002 (mem_crb + TEST_AGT_CTRL));
1006 (mem_crb + TEST_AGT_CTRL));
1007
1008 for (j = 0; j < MAX_CTL_CHECK; j++) {
1009 temp = readl(mem_crb + TEST_AGT_CTRL);
1010 if ((temp & TA_CTL_BUSY) == 0)
1011 break;
1012 }
1013 1003
1014 if (j >= MAX_CTL_CHECK) { 1004 for (j = 0; j < MAX_CTL_CHECK; j++) {
1015 ret = -EIO; 1005 temp = readl(mem_crb + TEST_AGT_CTRL);
1016 goto done; 1006 if ((temp & TA_CTL_BUSY) == 0)
1017 } 1007 break;
1008 }
1018 1009
1019 i = (off & 0xf) ? 0 : 2; 1010 if (j >= MAX_CTL_CHECK) {
1020 writel(readl(mem_crb + MIU_TEST_AGT_RDDATA(i)), 1011 ret = -EIO;
1021 mem_crb + MIU_TEST_AGT_WRDATA(i)); 1012 goto done;
1022 writel(readl(mem_crb + MIU_TEST_AGT_RDDATA(i+1)),
1023 mem_crb + MIU_TEST_AGT_WRDATA(i+1));
1024 i = (off & 0xf) ? 2 : 0;
1025 } 1013 }
1026 1014
1015 i = (off & 0xf) ? 0 : 2;
1016 writel(readl(mem_crb + MIU_TEST_AGT_RDDATA(i)),
1017 mem_crb + MIU_TEST_AGT_WRDATA(i));
1018 writel(readl(mem_crb + MIU_TEST_AGT_RDDATA(i+1)),
1019 mem_crb + MIU_TEST_AGT_WRDATA(i+1));
1020 i = (off & 0xf) ? 2 : 0;
1021
1027 writel(data & 0xffffffff, 1022 writel(data & 0xffffffff,
1028 mem_crb + MIU_TEST_AGT_WRDATA(i)); 1023 mem_crb + MIU_TEST_AGT_WRDATA(i));
1029 writel((data >> 32) & 0xffffffff, 1024 writel((data >> 32) & 0xffffffff,
@@ -1059,7 +1054,7 @@ qlcnic_pci_mem_read_2M(struct qlcnic_adapter *adapter,
1059{ 1054{
1060 int j, ret; 1055 int j, ret;
1061 u32 temp, off8; 1056 u32 temp, off8;
1062 u64 val, stride; 1057 u64 val;
1063 void __iomem *mem_crb; 1058 void __iomem *mem_crb;
1064 1059
1065 /* Only 64-bit aligned access */ 1060 /* Only 64-bit aligned access */
@@ -1068,7 +1063,7 @@ qlcnic_pci_mem_read_2M(struct qlcnic_adapter *adapter,
1068 1063
1069 /* P3 onward, test agent base for MIU and SIU is same */ 1064 /* P3 onward, test agent base for MIU and SIU is same */
1070 if (ADDR_IN_RANGE(off, QLCNIC_ADDR_QDR_NET, 1065 if (ADDR_IN_RANGE(off, QLCNIC_ADDR_QDR_NET,
1071 QLCNIC_ADDR_QDR_NET_MAX_P3)) { 1066 QLCNIC_ADDR_QDR_NET_MAX)) {
1072 mem_crb = qlcnic_get_ioaddr(adapter, 1067 mem_crb = qlcnic_get_ioaddr(adapter,
1073 QLCNIC_CRB_QDR_NET+MIU_TEST_AGT_BASE); 1068 QLCNIC_CRB_QDR_NET+MIU_TEST_AGT_BASE);
1074 goto correct; 1069 goto correct;
@@ -1088,9 +1083,7 @@ qlcnic_pci_mem_read_2M(struct qlcnic_adapter *adapter,
1088 return -EIO; 1083 return -EIO;
1089 1084
1090correct: 1085correct:
1091 stride = QLCNIC_IS_REVISION_P3P(adapter->ahw.revision_id) ? 16 : 8; 1086 off8 = off & ~0xf;
1092
1093 off8 = off & ~(stride-1);
1094 1087
1095 mutex_lock(&adapter->ahw.mem_lock); 1088 mutex_lock(&adapter->ahw.mem_lock);
1096 1089
@@ -1112,7 +1105,7 @@ correct:
1112 ret = -EIO; 1105 ret = -EIO;
1113 } else { 1106 } else {
1114 off8 = MIU_TEST_AGT_RDDATA_LO; 1107 off8 = MIU_TEST_AGT_RDDATA_LO;
1115 if ((stride == 16) && (off & 0xf)) 1108 if (off & 0xf)
1116 off8 = MIU_TEST_AGT_RDDATA_UPPER_LO; 1109 off8 = MIU_TEST_AGT_RDDATA_UPPER_LO;
1117 1110
1118 temp = readl(mem_crb + off8 + 4); 1111 temp = readl(mem_crb + off8 + 4);