* [patch next 1/2] netxen: support larger dma addressing
@ 2009-03-03 2:02 Dhananjay Phadke
2009-03-03 2:02 ` [patch next 2/2] netxen: firmware download improvements Dhananjay Phadke
2009-03-03 8:10 ` [patch next 1/2] netxen: support larger dma addressing David Miller
0 siblings, 2 replies; 4+ messages in thread
From: Dhananjay Phadke @ 2009-03-03 2:02 UTC (permalink / raw)
To: netdev; +Cc: davem
Support larger dma mask if firmware indicates capability
to handle larger addresses.
Signed-off-by: Dhananjay Phadke <dhananjay@netxen.com>
---
drivers/net/netxen/netxen_nic.h | 2 -
drivers/net/netxen/netxen_nic_main.c | 76 ++++++++++++++++++------------
drivers/net/netxen/netxen_nic_phan_reg.h | 1 +
3 files changed, 46 insertions(+), 33 deletions(-)
diff --git a/drivers/net/netxen/netxen_nic.h b/drivers/net/netxen/netxen_nic.h
index bbdd8f2..bd5fbb4 100644
--- a/drivers/net/netxen/netxen_nic.h
+++ b/drivers/net/netxen/netxen_nic.h
@@ -1256,8 +1256,6 @@ struct netxen_adapter {
u32 crb_win;
rwlock_t adapter_lock;
- uint64_t dma_mask;
-
u32 cmd_producer;
__le32 *cmd_consumer;
u32 last_cmd_consumer;
diff --git a/drivers/net/netxen/netxen_nic_main.c b/drivers/net/netxen/netxen_nic_main.c
index 02f5240..0ce7cf0 100644
--- a/drivers/net/netxen/netxen_nic_main.c
+++ b/drivers/net/netxen/netxen_nic_main.c
@@ -166,50 +166,61 @@ static inline void netxen_nic_enable_int(struct netxen_adapter *adapter)
static int nx_set_dma_mask(struct netxen_adapter *adapter, uint8_t revision_id)
{
struct pci_dev *pdev = adapter->pdev;
- int err;
- uint64_t mask;
-
-#ifdef CONFIG_IA64
- adapter->dma_mask = DMA_32BIT_MASK;
-#else
- if (revision_id >= NX_P3_B0) {
- /* should go to DMA_64BIT_MASK */
- adapter->dma_mask = DMA_39BIT_MASK;
- mask = DMA_39BIT_MASK;
- } else if (revision_id == NX_P3_A2) {
- adapter->dma_mask = DMA_39BIT_MASK;
- mask = DMA_39BIT_MASK;
- } else if (revision_id == NX_P2_C1) {
- adapter->dma_mask = DMA_35BIT_MASK;
- mask = DMA_35BIT_MASK;
- } else {
- adapter->dma_mask = DMA_32BIT_MASK;
- mask = DMA_32BIT_MASK;
- goto set_32_bit_mask;
- }
+ uint64_t mask, cmask;
+
+ adapter->pci_using_dac = 0;
+ mask = DMA_32BIT_MASK;
/*
* Consistent DMA mask is set to 32 bit because it cannot be set to
* 35 bits. For P3 also leave it at 32 bits for now. Only the rings
* come off this pool.
*/
+ cmask = DMA_32BIT_MASK;
+
+#ifndef CONFIG_IA64
+ if (revision_id >= NX_P3_B0)
+ mask = DMA_39BIT_MASK;
+ else if (revision_id == NX_P2_C1)
+ mask = DMA_35BIT_MASK;
+#endif
if (pci_set_dma_mask(pdev, mask) == 0 &&
- pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK) == 0) {
+ pci_set_consistent_dma_mask(pdev, cmask) == 0) {
adapter->pci_using_dac = 1;
return 0;
}
-set_32_bit_mask:
-#endif /* CONFIG_IA64 */
- err = pci_set_dma_mask(pdev, DMA_32BIT_MASK);
- if (!err)
- err = pci_set_consistent_dma_mask(pdev, DMA_32BIT_MASK);
- if (err) {
- DPRINTK(ERR, "No usable DMA configuration, aborting:%d\n", err);
- return err;
+ return -EIO;
+}
+
+/* Update addressable range if firmware supports it */
+static int
+nx_update_dma_mask(struct netxen_adapter *adapter)
+{
+ int change, shift, err;
+ uint64_t mask, old_mask;
+ struct pci_dev *pdev = adapter->pdev;
+
+ change = 0;
+
+ shift = netxen_nic_reg_read(adapter, CRB_DMA_SHIFT);
+ if (shift >= 32)
+ return 0;
+
+ if (NX_IS_REVISION_P3(adapter->ahw.revision_id) && (shift > 9))
+ change = 1;
+ else if ((adapter->ahw.revision_id == NX_P2_C1) && (shift <= 4))
+ change = 1;
+
+ if (change) {
+ old_mask = pdev->dma_mask;
+ mask = (1ULL<<(32+shift)) - 1;
+
+ err = pci_set_dma_mask(pdev, mask);
+ if (err)
+ return pci_set_dma_mask(pdev, old_mask);
}
- adapter->pci_using_dac = 0;
return 0;
}
@@ -674,6 +685,7 @@ netxen_start_firmware(struct netxen_adapter *adapter)
netxen_pinit_from_rom(adapter, 0);
msleep(1);
}
+ netxen_nic_reg_write(adapter, CRB_DMA_SHIFT, 0x55555555);
netxen_load_firmware(adapter);
if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) {
@@ -851,6 +863,8 @@ netxen_nic_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
goto err_out_iounmap;
}
+ nx_update_dma_mask(adapter);
+
netxen_nic_flash_print(adapter);
if (NX_IS_REVISION_P3(revision_id)) {
diff --git a/drivers/net/netxen/netxen_nic_phan_reg.h b/drivers/net/netxen/netxen_nic_phan_reg.h
index 2a368f2..5018333 100644
--- a/drivers/net/netxen/netxen_nic_phan_reg.h
+++ b/drivers/net/netxen/netxen_nic_phan_reg.h
@@ -91,6 +91,7 @@
#define CRB_RX_LRO_START_NUM NETXEN_NIC_REG(0xc0)
#define CRB_MPORT_MODE NETXEN_NIC_REG(0xc4) /* Multiport Mode */
#define CRB_CMD_RING_SIZE NETXEN_NIC_REG(0xc8)
+#define CRB_DMA_SHIFT NETXEN_NIC_REG(0xcc)
#define CRB_INT_VECTOR NETXEN_NIC_REG(0xd4)
#define CRB_CTX_RESET NETXEN_NIC_REG(0xd8)
#define CRB_HOST_STS_PROD NETXEN_NIC_REG(0xdc)
--
1.6.0.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* [patch next 2/2] netxen: firmware download improvements
2009-03-03 2:02 [patch next 1/2] netxen: support larger dma addressing Dhananjay Phadke
@ 2009-03-03 2:02 ` Dhananjay Phadke
2009-03-03 8:10 ` David Miller
2009-03-03 8:10 ` [patch next 1/2] netxen: support larger dma addressing David Miller
1 sibling, 1 reply; 4+ messages in thread
From: Dhananjay Phadke @ 2009-03-03 2:02 UTC (permalink / raw)
To: netdev; +Cc: davem
o set port mode after resetting device.
o prefer cut-through firmware (doesn't require on-card memory).
o load flashed firmware if newer.
Signed-off-by: Dhananjay Phadke <dhananjay@netxen.com>
---
drivers/net/netxen/netxen_nic_hw.c | 27 ++++++++++++++++++++-------
drivers/net/netxen/netxen_nic_main.c | 7 ++++---
2 files changed, 24 insertions(+), 10 deletions(-)
diff --git a/drivers/net/netxen/netxen_nic_hw.c b/drivers/net/netxen/netxen_nic_hw.c
index b15246c..b564d69 100644
--- a/drivers/net/netxen/netxen_nic_hw.c
+++ b/drivers/net/netxen/netxen_nic_hw.c
@@ -1069,6 +1069,16 @@ netxen_validate_firmware(struct netxen_adapter *adapter, const char *fwname,
return -EINVAL;
}
+ /* check if flashed firmware is newer */
+ if (netxen_rom_fast_read(adapter,
+ NX_FW_VERSION_OFFSET, (int *)&val))
+ return -EIO;
+ major = (__force u32)val & 0xff;
+ minor = ((__force u32)val >> 8) & 0xff;
+ build = (__force u32)val >> 16;
+ if (NETXEN_VERSION_CODE(major, minor, build) > ver)
+ return -EINVAL;
+
netxen_nic_reg_write(adapter, NETXEN_CAM_RAM(0x1fc),
NETXEN_BDINFO_MAGIC);
return 0;
@@ -1087,6 +1097,12 @@ int netxen_load_firmware(struct netxen_adapter *adapter)
goto request_fw;
}
+ if (NX_IS_REVISION_P3(adapter->ahw.revision_id)) {
+ fw_name = NX_P3_CT_ROMIMAGE;
+ goto request_fw;
+ }
+
+request_mn:
capability = 0;
netxen_rom_fast_read(adapter,
@@ -1100,15 +1116,12 @@ int netxen_load_firmware(struct netxen_adapter *adapter)
}
}
-request_ct:
- fw_name = NX_P3_CT_ROMIMAGE;
-
request_fw:
rc = request_firmware(&fw, fw_name, &pdev->dev);
if (rc != 0) {
- if (fw_name == NX_P3_MN_ROMIMAGE) {
+ if (fw_name == NX_P3_CT_ROMIMAGE) {
msleep(1);
- goto request_ct;
+ goto request_mn;
}
fw = NULL;
@@ -1119,9 +1132,9 @@ request_fw:
if (rc != 0) {
release_firmware(fw);
- if (fw_name == NX_P3_MN_ROMIMAGE) {
+ if (fw_name == NX_P3_CT_ROMIMAGE) {
msleep(1);
- goto request_ct;
+ goto request_mn;
}
fw = NULL;
diff --git a/drivers/net/netxen/netxen_nic_main.c b/drivers/net/netxen/netxen_nic_main.c
index 0ce7cf0..dfd66ea 100644
--- a/drivers/net/netxen/netxen_nic_main.c
+++ b/drivers/net/netxen/netxen_nic_main.c
@@ -676,16 +676,17 @@ netxen_start_firmware(struct netxen_adapter *adapter)
return err;
}
- if (NX_IS_REVISION_P3(adapter->ahw.revision_id))
- netxen_set_port_mode(adapter);
-
if (first_boot != 0x55555555) {
adapter->pci_write_normalize(adapter,
CRB_CMDPEG_STATE, 0);
netxen_pinit_from_rom(adapter, 0);
msleep(1);
}
+
netxen_nic_reg_write(adapter, CRB_DMA_SHIFT, 0x55555555);
+ if (NX_IS_REVISION_P3(adapter->ahw.revision_id))
+ netxen_set_port_mode(adapter);
+
netxen_load_firmware(adapter);
if (NX_IS_REVISION_P2(adapter->ahw.revision_id)) {
--
1.6.0.2
^ permalink raw reply related [flat|nested] 4+ messages in thread
* Re: [patch next 1/2] netxen: support larger dma addressing
2009-03-03 2:02 [patch next 1/2] netxen: support larger dma addressing Dhananjay Phadke
2009-03-03 2:02 ` [patch next 2/2] netxen: firmware download improvements Dhananjay Phadke
@ 2009-03-03 8:10 ` David Miller
1 sibling, 0 replies; 4+ messages in thread
From: David Miller @ 2009-03-03 8:10 UTC (permalink / raw)
To: dhananjay; +Cc: netdev
From: Dhananjay Phadke <dhananjay@netxen.com>
Date: Mon, 2 Mar 2009 18:02:16 -0800
> Support larger dma mask if firmware indicates capability
> to handle larger addresses.
>
> Signed-off-by: Dhananjay Phadke <dhananjay@netxen.com>
Applied.
^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [patch next 2/2] netxen: firmware download improvements
2009-03-03 2:02 ` [patch next 2/2] netxen: firmware download improvements Dhananjay Phadke
@ 2009-03-03 8:10 ` David Miller
0 siblings, 0 replies; 4+ messages in thread
From: David Miller @ 2009-03-03 8:10 UTC (permalink / raw)
To: dhananjay; +Cc: netdev
From: Dhananjay Phadke <dhananjay@netxen.com>
Date: Mon, 2 Mar 2009 18:02:17 -0800
> o set port mode after resetting device.
> o prefer cut-through firmware (doesn't require on-card memory).
> o load flashed firmware if newer.
>
> Signed-off-by: Dhananjay Phadke <dhananjay@netxen.com>
Also applied, thanks.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2009-03-03 8:10 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-03-03 2:02 [patch next 1/2] netxen: support larger dma addressing Dhananjay Phadke
2009-03-03 2:02 ` [patch next 2/2] netxen: firmware download improvements Dhananjay Phadke
2009-03-03 8:10 ` David Miller
2009-03-03 8:10 ` [patch next 1/2] netxen: support larger dma addressing David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).