NetXen: Fix second rmmod failure observed on PowerPC machines.

Signed-off by: Mithlesh Thukral <mithlesh@netxen.com>

Signed-off-by: Jeff Garzik <jeff@garzik.org>

authored by Linsys Contractor Mithlesh Thukral and committed by Jeff Garzik e0e20a1a 0c25cfe1

+20 -17
+3 -2
drivers/net/netxen/netxen_nic_hw.c
··· 508 508 void netxen_load_firmware(struct netxen_adapter *adapter) 509 509 { 510 510 int i; 511 - long data, size = 0; 512 - long flashaddr = NETXEN_FLASH_BASE, memaddr = NETXEN_PHANTOM_MEM_BASE; 511 + u32 data, size = 0; 512 + u32 flashaddr = NETXEN_FLASH_BASE, memaddr = NETXEN_PHANTOM_MEM_BASE; 513 513 u64 off; 514 514 void __iomem *addr; 515 515 ··· 951 951 netxen_nic_driver_name); 952 952 return; 953 953 } 954 + *ptr32 = le32_to_cpu(*ptr32); 954 955 ptr32++; 955 956 addr += sizeof(u32); 956 957 }
+13 -10
drivers/net/netxen/netxen_nic_init.c
··· 38 38 #include "netxen_nic_phan_reg.h" 39 39 40 40 struct crb_addr_pair { 41 - long addr; 42 - long data; 41 + u32 addr; 42 + u32 data; 43 43 }; 44 44 45 45 #define NETXEN_MAX_CRB_XFORM 60 46 46 static unsigned int crb_addr_xform[NETXEN_MAX_CRB_XFORM]; 47 - #define NETXEN_ADDR_ERROR ((unsigned long ) 0xffffffff ) 47 + #define NETXEN_ADDR_ERROR (0xffffffff) 48 48 49 49 #define crb_addr_transform(name) \ 50 50 crb_addr_xform[NETXEN_HW_PX_MAP_CRB_##name] = \ ··· 252 252 * netxen_decode_crb_addr(0 - utility to translate from internal Phantom CRB 253 253 * address to external PCI CRB address. 254 254 */ 255 - unsigned long netxen_decode_crb_addr(unsigned long addr) 255 + u32 netxen_decode_crb_addr(u32 addr) 256 256 { 257 257 int i; 258 - unsigned long base_addr, offset, pci_base; 258 + u32 base_addr, offset, pci_base; 259 259 260 260 crb_addr_transform_setup(); 261 261 ··· 756 756 int n, i; 757 757 int init_delay = 0; 758 758 struct crb_addr_pair *buf; 759 - unsigned long off; 759 + u32 off; 760 760 761 761 /* resetall */ 762 762 status = netxen_nic_get_board_info(adapter); ··· 813 813 if (verbose) 814 814 printk("%s: PCI: 0x%08x == 0x%08x\n", 815 815 netxen_nic_driver_name, (unsigned int) 816 - netxen_decode_crb_addr((unsigned long) 817 - addr), val); 816 + netxen_decode_crb_addr(addr), val); 818 817 } 819 818 for (i = 0; i < n; i++) { 820 819 821 - off = netxen_decode_crb_addr((unsigned long)buf[i].addr); 820 + off = netxen_decode_crb_addr(buf[i].addr); 822 821 if (off == NETXEN_ADDR_ERROR) { 823 - printk(KERN_ERR"CRB init value out of range %lx\n", 822 + printk(KERN_ERR"CRB init value out of range %x\n", 824 823 buf[i].addr); 825 824 continue; 826 825 } ··· 926 927 void netxen_free_adapter_offload(struct netxen_adapter *adapter) 927 928 { 928 929 if (adapter->dummy_dma.addr) { 930 + writel(0, NETXEN_CRB_NORMALIZE(adapter, 931 + CRB_HOST_DUMMY_BUF_ADDR_HI)); 932 + writel(0, NETXEN_CRB_NORMALIZE(adapter, 933 + CRB_HOST_DUMMY_BUF_ADDR_LO)); 929 934 pci_free_consistent(adapter->ahw.pdev, 930 935 NETXEN_HOST_DUMMY_DMA_SIZE, 931 936 adapter->dummy_dma.addr,
+4 -5
drivers/net/netxen/netxen_nic_main.c
··· 434 434 adapter->port_count++; 435 435 adapter->port[i] = port; 436 436 } 437 - #ifndef CONFIG_PPC64 438 437 writel(0, NETXEN_CRB_NORMALIZE(adapter, CRB_CMDPEG_STATE)); 439 438 netxen_pinit_from_rom(adapter, 0); 440 439 udelay(500); 441 440 netxen_load_firmware(adapter); 442 441 netxen_phantom_init(adapter, NETXEN_NIC_PEG_TUNE); 443 - #endif 444 442 /* 445 443 * delay a while to ensure that the Pegs are up & running. 446 444 * Otherwise, we might see some flaky behaviour. ··· 527 529 free_irq(adapter->irq, adapter); 528 530 netxen_nic_stop_all_ports(adapter); 529 531 /* leave the hw in the same state as reboot */ 530 - netxen_pinit_from_rom(adapter, 0); 531 532 writel(0, NETXEN_CRB_NORMALIZE(adapter, CRB_CMDPEG_STATE)); 533 + netxen_pinit_from_rom(adapter, 0); 534 + udelay(500); 532 535 netxen_load_firmware(adapter); 533 536 netxen_free_adapter_offload(adapter); 534 537 535 - udelay(500); /* Delay for a while to drain the DMA engines */ 538 + mdelay(1000); /* Delay for a while to drain the DMA engines */ 536 539 for (i = 0; i < adapter->port_count; i++) { 537 540 port = adapter->port[i]; 538 541 if ((port) && (port->netdev)) { ··· 544 545 545 546 if ((adapter->flags & NETXEN_NIC_MSI_ENABLED)) 546 547 pci_disable_msi(pdev); 547 - pci_set_drvdata(pdev, NULL); 548 548 if (adapter->is_up == NETXEN_ADAPTER_UP_MAGIC) 549 549 netxen_free_hw_resources(adapter); 550 550 ··· 554 556 555 557 pci_release_regions(pdev); 556 558 pci_disable_device(pdev); 559 + pci_set_drvdata(pdev, NULL); 557 560 558 561 for (ctxid = 0; ctxid < MAX_RCV_CTX; ++ctxid) { 559 562 recv_ctx = &adapter->recv_ctx[ctxid];