diff options
| author | Dhananjay Phadke <dhananjay@netxen.com> | 2009-07-17 11:27:06 -0400 |
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2009-07-20 11:23:28 -0400 |
| commit | cf981ffb31e8f41f4899a56560f81322f94f22d1 (patch) | |
| tree | 5cca292a4e8f4cef0b9986508e712588f5edbd8f | |
| parent | 3ba81f3ece3cfa4ffb06d21ac93b8cad7fbe6a73 (diff) | |
netxen: fix context deletion sequence
o Use D3 reset context deletion for NX2031, it cleans up
more resources in the firmware.
o Release rx buffers after hardware context has been reset.
o Delete tx context after rx context, some firmware control
commands are sent on tx context, so it should be the last
to go.
Signed-off-by: Dhananjay Phadke <dhananjay@netxen.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
| -rw-r--r-- | drivers/net/netxen/netxen_nic.h | 1 | ||||
| -rw-r--r-- | drivers/net/netxen/netxen_nic_ctx.c | 13 | ||||
| -rw-r--r-- | drivers/net/netxen/netxen_nic_main.c | 2 |
3 files changed, 9 insertions, 7 deletions
diff --git a/drivers/net/netxen/netxen_nic.h b/drivers/net/netxen/netxen_nic.h index e1cdba752e09..9fa71faf4ceb 100644 --- a/drivers/net/netxen/netxen_nic.h +++ b/drivers/net/netxen/netxen_nic.h | |||
| @@ -210,6 +210,7 @@ | |||
| 210 | #define NETXEN_CTX_SIGNATURE 0xdee0 | 210 | #define NETXEN_CTX_SIGNATURE 0xdee0 |
| 211 | #define NETXEN_CTX_SIGNATURE_V2 0x0002dee0 | 211 | #define NETXEN_CTX_SIGNATURE_V2 0x0002dee0 |
| 212 | #define NETXEN_CTX_RESET 0xbad0 | 212 | #define NETXEN_CTX_RESET 0xbad0 |
| 213 | #define NETXEN_CTX_D3_RESET 0xacc0 | ||
| 213 | #define NETXEN_RCV_PRODUCER(ringid) (ringid) | 214 | #define NETXEN_RCV_PRODUCER(ringid) (ringid) |
| 214 | 215 | ||
| 215 | #define PHAN_PEG_RCV_INITIALIZED 0xff01 | 216 | #define PHAN_PEG_RCV_INITIALIZED 0xff01 |
diff --git a/drivers/net/netxen/netxen_nic_ctx.c b/drivers/net/netxen/netxen_nic_ctx.c index 4754f5cffad0..9f8ae4719e2f 100644 --- a/drivers/net/netxen/netxen_nic_ctx.c +++ b/drivers/net/netxen/netxen_nic_ctx.c | |||
| @@ -684,10 +684,8 @@ int netxen_alloc_hw_resources(struct netxen_adapter *adapter) | |||
| 684 | goto err_out_free; | 684 | goto err_out_free; |
| 685 | } else { | 685 | } else { |
| 686 | err = netxen_init_old_ctx(adapter); | 686 | err = netxen_init_old_ctx(adapter); |
| 687 | if (err) { | 687 | if (err) |
| 688 | netxen_free_hw_resources(adapter); | 688 | goto err_out_free; |
| 689 | return err; | ||
| 690 | } | ||
| 691 | } | 689 | } |
| 692 | 690 | ||
| 693 | return 0; | 691 | return 0; |
| @@ -708,15 +706,18 @@ void netxen_free_hw_resources(struct netxen_adapter *adapter) | |||
| 708 | int port = adapter->portnum; | 706 | int port = adapter->portnum; |
| 709 | 707 | ||
| 710 | if (adapter->fw_major >= 4) { | 708 | if (adapter->fw_major >= 4) { |
| 711 | nx_fw_cmd_destroy_tx_ctx(adapter); | ||
| 712 | nx_fw_cmd_destroy_rx_ctx(adapter); | 709 | nx_fw_cmd_destroy_rx_ctx(adapter); |
| 710 | nx_fw_cmd_destroy_tx_ctx(adapter); | ||
| 713 | } else { | 711 | } else { |
| 714 | netxen_api_lock(adapter); | 712 | netxen_api_lock(adapter); |
| 715 | NXWR32(adapter, CRB_CTX_SIGNATURE_REG(port), | 713 | NXWR32(adapter, CRB_CTX_SIGNATURE_REG(port), |
| 716 | NETXEN_CTX_RESET | port); | 714 | NETXEN_CTX_D3_RESET | port); |
| 717 | netxen_api_unlock(adapter); | 715 | netxen_api_unlock(adapter); |
| 718 | } | 716 | } |
| 719 | 717 | ||
| 718 | /* Allow dma queues to drain after context reset */ | ||
| 719 | msleep(20); | ||
| 720 | |||
| 720 | recv_ctx = &adapter->recv_ctx; | 721 | recv_ctx = &adapter->recv_ctx; |
| 721 | 722 | ||
| 722 | if (recv_ctx->hwctx != NULL) { | 723 | if (recv_ctx->hwctx != NULL) { |
diff --git a/drivers/net/netxen/netxen_nic_main.c b/drivers/net/netxen/netxen_nic_main.c index 27539ddf94c4..9a7c4c8029de 100644 --- a/drivers/net/netxen/netxen_nic_main.c +++ b/drivers/net/netxen/netxen_nic_main.c | |||
| @@ -943,8 +943,8 @@ err_out_free_sw: | |||
| 943 | static void | 943 | static void |
| 944 | netxen_nic_detach(struct netxen_adapter *adapter) | 944 | netxen_nic_detach(struct netxen_adapter *adapter) |
| 945 | { | 945 | { |
| 946 | netxen_release_rx_buffers(adapter); | ||
| 947 | netxen_free_hw_resources(adapter); | 946 | netxen_free_hw_resources(adapter); |
| 947 | netxen_release_rx_buffers(adapter); | ||
| 948 | netxen_nic_free_irq(adapter); | 948 | netxen_nic_free_irq(adapter); |
| 949 | netxen_free_sw_resources(adapter); | 949 | netxen_free_sw_resources(adapter); |
| 950 | 950 | ||
