Commit b843d928 authored by David S. Miller's avatar David S. Miller

Merge conflicts with Linus's ioremap sparse changes.

parents 9c537673 1347a23b
...@@ -331,7 +331,7 @@ static void _tw32_flush(struct tg3 *tp, u32 off, u32 val) ...@@ -331,7 +331,7 @@ static void _tw32_flush(struct tg3 *tp, u32 off, u32 val)
pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val); pci_write_config_dword(tp->pdev, TG3PCI_REG_DATA, val);
spin_unlock_irqrestore(&tp->indirect_lock, flags); spin_unlock_irqrestore(&tp->indirect_lock, flags);
} else { } else {
void __iomem *dest = tp->regs + off; unsigned long dest = tp->regs + off;
writel(val, dest); writel(val, dest);
readl(dest); /* always flush PCI write */ readl(dest); /* always flush PCI write */
} }
...@@ -339,7 +339,7 @@ static void _tw32_flush(struct tg3 *tp, u32 off, u32 val) ...@@ -339,7 +339,7 @@ static void _tw32_flush(struct tg3 *tp, u32 off, u32 val)
static inline void _tw32_rx_mbox(struct tg3 *tp, u32 off, u32 val) static inline void _tw32_rx_mbox(struct tg3 *tp, u32 off, u32 val)
{ {
void __iomem *mbox = tp->regs + off; unsigned long mbox = tp->regs + off;
writel(val, mbox); writel(val, mbox);
if (tp->tg3_flags & TG3_FLAG_MBOX_WRITE_REORDER) if (tp->tg3_flags & TG3_FLAG_MBOX_WRITE_REORDER)
readl(mbox); readl(mbox);
...@@ -347,7 +347,7 @@ static inline void _tw32_rx_mbox(struct tg3 *tp, u32 off, u32 val) ...@@ -347,7 +347,7 @@ static inline void _tw32_rx_mbox(struct tg3 *tp, u32 off, u32 val)
static inline void _tw32_tx_mbox(struct tg3 *tp, u32 off, u32 val) static inline void _tw32_tx_mbox(struct tg3 *tp, u32 off, u32 val)
{ {
void __iomem *mbox = tp->regs + off; unsigned long mbox = tp->regs + off;
writel(val, mbox); writel(val, mbox);
if (tp->tg3_flags & TG3_FLAG_TXD_MBOX_HWBUG) if (tp->tg3_flags & TG3_FLAG_TXD_MBOX_HWBUG)
writel(val, mbox); writel(val, mbox);
...@@ -2956,6 +2956,7 @@ static void tg3_set_txd(struct tg3 *tp, int entry, ...@@ -2956,6 +2956,7 @@ static void tg3_set_txd(struct tg3 *tp, int entry,
dma_addr_t mapping, int len, u32 flags, dma_addr_t mapping, int len, u32 flags,
u32 mss_and_is_end) u32 mss_and_is_end)
{ {
struct tg3_tx_buffer_desc *txd = &tp->tx_ring[entry];
int is_end = (mss_and_is_end & 0x1); int is_end = (mss_and_is_end & 0x1);
u32 mss = (mss_and_is_end >> 1); u32 mss = (mss_and_is_end >> 1);
u32 vlan_tag = 0; u32 vlan_tag = 0;
...@@ -2967,35 +2968,11 @@ static void tg3_set_txd(struct tg3 *tp, int entry, ...@@ -2967,35 +2968,11 @@ static void tg3_set_txd(struct tg3 *tp, int entry,
flags &= 0xffff; flags &= 0xffff;
} }
vlan_tag |= (mss << TXD_MSS_SHIFT); vlan_tag |= (mss << TXD_MSS_SHIFT);
if (tp->tg3_flags & TG3_FLAG_HOST_TXDS) {
struct tg3_tx_buffer_desc *txd = &tp->tx_ring[entry];
txd->addr_hi = ((u64) mapping >> 32); txd->addr_hi = ((u64) mapping >> 32);
txd->addr_lo = ((u64) mapping & 0xffffffff); txd->addr_lo = ((u64) mapping & 0xffffffff);
txd->len_flags = (len << TXD_LEN_SHIFT) | flags; txd->len_flags = (len << TXD_LEN_SHIFT) | flags;
txd->vlan_tag = vlan_tag << TXD_VLAN_TAG_SHIFT; txd->vlan_tag = vlan_tag << TXD_VLAN_TAG_SHIFT;
} else {
struct tx_ring_info *txr = &tp->tx_buffers[entry];
void __iomem *txd;
txd = (tp->regs +
NIC_SRAM_WIN_BASE +
NIC_SRAM_TX_BUFFER_DESC);
txd += (entry * TXD_SIZE);
/* Save some PIOs */
if (sizeof(dma_addr_t) != sizeof(u32))
writel(((u64) mapping >> 32),
txd + TXD_ADDR + TG3_64BIT_REG_HIGH);
writel(((u64) mapping & 0xffffffff),
txd + TXD_ADDR + TG3_64BIT_REG_LOW);
writel(len << TXD_LEN_SHIFT | flags, txd + TXD_LEN_FLAGS);
if (txr->prev_vlan_tag != vlan_tag) {
writel(vlan_tag << TXD_VLAN_TAG_SHIFT, txd + TXD_VLAN_TAG);
txr->prev_vlan_tag = vlan_tag;
}
}
} }
static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len) static inline int tg3_4g_overflow_test(dma_addr_t mapping, int len)
...@@ -3036,11 +3013,7 @@ static int tg3_start_xmit(struct sk_buff *skb, struct net_device *dev) ...@@ -3036,11 +3013,7 @@ static int tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
* So we really do need to disable interrupts when taking * So we really do need to disable interrupts when taking
* tx_lock here. * tx_lock here.
*/ */
local_irq_save(flags); spin_lock_irqsave(&tp->tx_lock, flags);
if (!spin_trylock(&tp->tx_lock)) {
local_irq_restore(flags);
return -1;
}
/* This is a hard error, log it. */ /* This is a hard error, log it. */
if (unlikely(TX_BUFFS_AVAIL(tp) <= (skb_shinfo(skb)->nr_frags + 1))) { if (unlikely(TX_BUFFS_AVAIL(tp) <= (skb_shinfo(skb)->nr_frags + 1))) {
...@@ -3188,19 +3161,7 @@ static int tg3_start_xmit(struct sk_buff *skb, struct net_device *dev) ...@@ -3188,19 +3161,7 @@ static int tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
} }
/* Packets are ready, update Tx producer idx local and on card. */ /* Packets are ready, update Tx producer idx local and on card. */
if (tp->tg3_flags & TG3_FLAG_HOST_TXDS) { tw32_tx_mbox((MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW), entry);
tw32_tx_mbox((MAILBOX_SNDHOST_PROD_IDX_0 +
TG3_64BIT_REG_LOW), entry);
} else {
/* First, make sure tg3 sees last descriptor fully
* in SRAM.
*/
if (tp->tg3_flags & TG3_FLAG_MBOX_WRITE_REORDER)
tr32(MAILBOX_SNDNIC_PROD_IDX_0 + TG3_64BIT_REG_LOW);
tw32_tx_mbox((MAILBOX_SNDNIC_PROD_IDX_0 +
TG3_64BIT_REG_LOW), entry);
}
tp->tx_prod = entry; tp->tx_prod = entry;
if (TX_BUFFS_AVAIL(tp) <= (MAX_SKB_FRAGS + 1)) if (TX_BUFFS_AVAIL(tp) <= (MAX_SKB_FRAGS + 1))
...@@ -3339,7 +3300,6 @@ static void tg3_free_rings(struct tg3 *tp) ...@@ -3339,7 +3300,6 @@ static void tg3_free_rings(struct tg3 *tp)
*/ */
static void tg3_init_rings(struct tg3 *tp) static void tg3_init_rings(struct tg3 *tp)
{ {
void __iomem *start, *end;
u32 i; u32 i;
/* Free up all the SKBs. */ /* Free up all the SKBs. */
...@@ -3349,21 +3309,7 @@ static void tg3_init_rings(struct tg3 *tp) ...@@ -3349,21 +3309,7 @@ static void tg3_init_rings(struct tg3 *tp)
memset(tp->rx_std, 0, TG3_RX_RING_BYTES); memset(tp->rx_std, 0, TG3_RX_RING_BYTES);
memset(tp->rx_jumbo, 0, TG3_RX_JUMBO_RING_BYTES); memset(tp->rx_jumbo, 0, TG3_RX_JUMBO_RING_BYTES);
memset(tp->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp)); memset(tp->rx_rcb, 0, TG3_RX_RCB_RING_BYTES(tp));
if (tp->tg3_flags & TG3_FLAG_HOST_TXDS) {
memset(tp->tx_ring, 0, TG3_TX_RING_BYTES); memset(tp->tx_ring, 0, TG3_TX_RING_BYTES);
} else {
start = (tp->regs +
NIC_SRAM_WIN_BASE +
NIC_SRAM_TX_BUFFER_DESC);
end = start + TG3_TX_RING_BYTES;
while (start < end) {
writel(0, start);
start += 4;
}
for (i = 0; i < TG3_TX_RING_SIZE; i++)
tp->tx_buffers[i].prev_vlan_tag = 0;
}
/* Initialize invariants of the rings, we only set this /* Initialize invariants of the rings, we only set this
* stuff once. This works because the card does not * stuff once. This works because the card does not
...@@ -3494,15 +3440,10 @@ static int tg3_alloc_consistent(struct tg3 *tp) ...@@ -3494,15 +3440,10 @@ static int tg3_alloc_consistent(struct tg3 *tp)
if (!tp->rx_rcb) if (!tp->rx_rcb)
goto err_out; goto err_out;
if (tp->tg3_flags & TG3_FLAG_HOST_TXDS) {
tp->tx_ring = pci_alloc_consistent(tp->pdev, TG3_TX_RING_BYTES, tp->tx_ring = pci_alloc_consistent(tp->pdev, TG3_TX_RING_BYTES,
&tp->tx_desc_mapping); &tp->tx_desc_mapping);
if (!tp->tx_ring) if (!tp->tx_ring)
goto err_out; goto err_out;
} else {
tp->tx_ring = NULL;
tp->tx_desc_mapping = 0;
}
tp->hw_status = pci_alloc_consistent(tp->pdev, tp->hw_status = pci_alloc_consistent(tp->pdev,
TG3_HW_STATUS_SIZE, TG3_HW_STATUS_SIZE,
...@@ -4966,10 +4907,7 @@ static int tg3_reset_hw(struct tg3 *tp) ...@@ -4966,10 +4907,7 @@ static int tg3_reset_hw(struct tg3 *tp)
GRC_MODE_4X_NIC_SEND_RINGS | GRC_MODE_4X_NIC_SEND_RINGS |
GRC_MODE_NO_TX_PHDR_CSUM | GRC_MODE_NO_TX_PHDR_CSUM |
GRC_MODE_NO_RX_PHDR_CSUM); GRC_MODE_NO_RX_PHDR_CSUM);
if (tp->tg3_flags & TG3_FLAG_HOST_TXDS)
tp->grc_mode |= GRC_MODE_HOST_SENDBDS; tp->grc_mode |= GRC_MODE_HOST_SENDBDS;
else
tp->grc_mode |= GRC_MODE_4X_NIC_SEND_RINGS;
if (tp->tg3_flags & TG3_FLAG_NO_TX_PSEUDO_CSUM) if (tp->tg3_flags & TG3_FLAG_NO_TX_PSEUDO_CSUM)
tp->grc_mode |= GRC_MODE_NO_TX_PHDR_CSUM; tp->grc_mode |= GRC_MODE_NO_TX_PHDR_CSUM;
if (tp->tg3_flags & TG3_FLAG_NO_RX_PSEUDO_CSUM) if (tp->tg3_flags & TG3_FLAG_NO_RX_PSEUDO_CSUM)
...@@ -5122,18 +5060,11 @@ static int tg3_reset_hw(struct tg3 *tp) ...@@ -5122,18 +5060,11 @@ static int tg3_reset_hw(struct tg3 *tp)
tw32_mailbox(MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW, 0); tw32_mailbox(MAILBOX_SNDHOST_PROD_IDX_0 + TG3_64BIT_REG_LOW, 0);
tw32_tx_mbox(MAILBOX_SNDNIC_PROD_IDX_0 + TG3_64BIT_REG_LOW, 0); tw32_tx_mbox(MAILBOX_SNDNIC_PROD_IDX_0 + TG3_64BIT_REG_LOW, 0);
if (tp->tg3_flags & TG3_FLAG_HOST_TXDS) {
tg3_set_bdinfo(tp, NIC_SRAM_SEND_RCB, tg3_set_bdinfo(tp, NIC_SRAM_SEND_RCB,
tp->tx_desc_mapping, tp->tx_desc_mapping,
(TG3_TX_RING_SIZE << (TG3_TX_RING_SIZE <<
BDINFO_FLAGS_MAXLEN_SHIFT), BDINFO_FLAGS_MAXLEN_SHIFT),
NIC_SRAM_TX_BUFFER_DESC); NIC_SRAM_TX_BUFFER_DESC);
} else {
tg3_set_bdinfo(tp, NIC_SRAM_SEND_RCB,
0,
BDINFO_FLAGS_DISABLED,
NIC_SRAM_TX_BUFFER_DESC);
}
/* There is only one receive return ring on 5705/5750, no need /* There is only one receive return ring on 5705/5750, no need
* to explicitly disable the others. * to explicitly disable the others.
...@@ -5679,8 +5610,8 @@ static int tg3_open(struct net_device *dev) ...@@ -5679,8 +5610,8 @@ static int tg3_open(struct net_device *dev)
spin_unlock(&tp->tx_lock); spin_unlock(&tp->tx_lock);
spin_unlock_irq(&tp->lock); spin_unlock_irq(&tp->lock);
/* If you move this call, make sure TG3_FLAG_HOST_TXDS in /* The placement of this call is tied
* tp->tg3_flags is accurate at that new place. * to the setup and use of Host TX descriptors.
*/ */
err = tg3_alloc_consistent(tp); err = tg3_alloc_consistent(tp);
if (err) if (err)
...@@ -6295,9 +6226,7 @@ static void tg3_set_rx_mode(struct net_device *dev) ...@@ -6295,9 +6226,7 @@ static void tg3_set_rx_mode(struct net_device *dev)
struct tg3 *tp = netdev_priv(dev); struct tg3 *tp = netdev_priv(dev);
spin_lock_irq(&tp->lock); spin_lock_irq(&tp->lock);
spin_lock(&tp->tx_lock);
__tg3_set_rx_mode(dev); __tg3_set_rx_mode(dev);
spin_unlock(&tp->tx_lock);
spin_unlock_irq(&tp->lock); spin_unlock_irq(&tp->lock);
} }
...@@ -7616,7 +7545,7 @@ static int __devinit tg3_get_invariants(struct tg3 *tp) ...@@ -7616,7 +7545,7 @@ static int __devinit tg3_get_invariants(struct tg3 *tp)
chiprevid == CHIPREV_ID_5701_B0 || chiprevid == CHIPREV_ID_5701_B0 ||
chiprevid == CHIPREV_ID_5701_B2 || chiprevid == CHIPREV_ID_5701_B2 ||
chiprevid == CHIPREV_ID_5701_B5) { chiprevid == CHIPREV_ID_5701_B5) {
void __iomem *sram_base; unsigned long sram_base;
/* Write some dummy words into the SRAM status block /* Write some dummy words into the SRAM status block
* area, see if it reads back correctly. If the return * area, see if it reads back correctly. If the return
...@@ -7635,23 +7564,6 @@ static int __devinit tg3_get_invariants(struct tg3 *tp) ...@@ -7635,23 +7564,6 @@ static int __devinit tg3_get_invariants(struct tg3 *tp)
udelay(50); udelay(50);
tg3_nvram_init(tp); tg3_nvram_init(tp);
/* Always use host TXDs, it performs better in particular
* with multi-frag packets. The tests below are kept here
* as documentation should we change this decision again
* in the future.
*/
tp->tg3_flags |= TG3_FLAG_HOST_TXDS;
#if 0
/* Determine if TX descriptors will reside in
* main memory or in the chip SRAM.
*/
if ((tp->tg3_flags & TG3_FLAG_PCIX_TARGET_HWBUG) != 0 ||
GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5705 ||
GET_ASIC_REV(tp->pci_chip_rev_id) == ASIC_REV_5750)
tp->tg3_flags |= TG3_FLAG_HOST_TXDS;
#endif
grc_misc_cfg = tr32(GRC_MISC_CFG); grc_misc_cfg = tr32(GRC_MISC_CFG);
grc_misc_cfg &= GRC_MISC_CFG_BOARD_ID_MASK; grc_misc_cfg &= GRC_MISC_CFG_BOARD_ID_MASK;
...@@ -8261,7 +8173,6 @@ static int __devinit tg3_init_one(struct pci_dev *pdev, ...@@ -8261,7 +8173,6 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
if (pci_using_dac) if (pci_using_dac)
dev->features |= NETIF_F_HIGHDMA; dev->features |= NETIF_F_HIGHDMA;
dev->features |= NETIF_F_LLTX;
#if TG3_VLAN_TAG_USED #if TG3_VLAN_TAG_USED
dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX; dev->features |= NETIF_F_HW_VLAN_TX | NETIF_F_HW_VLAN_RX;
dev->vlan_rx_register = tg3_vlan_rx_register; dev->vlan_rx_register = tg3_vlan_rx_register;
...@@ -8307,7 +8218,7 @@ static int __devinit tg3_init_one(struct pci_dev *pdev, ...@@ -8307,7 +8218,7 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
spin_lock_init(&tp->indirect_lock); spin_lock_init(&tp->indirect_lock);
INIT_WORK(&tp->reset_task, tg3_reset_task, tp); INIT_WORK(&tp->reset_task, tg3_reset_task, tp);
tp->regs = ioremap(tg3reg_base, tg3reg_len); tp->regs = (unsigned long) ioremap(tg3reg_base, tg3reg_len);
if (tp->regs == 0UL) { if (tp->regs == 0UL) {
printk(KERN_ERR PFX "Cannot map device registers, " printk(KERN_ERR PFX "Cannot map device registers, "
"aborting.\n"); "aborting.\n");
...@@ -8454,11 +8365,10 @@ static int __devinit tg3_init_one(struct pci_dev *pdev, ...@@ -8454,11 +8365,10 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
printk("%2.2x%c", dev->dev_addr[i], printk("%2.2x%c", dev->dev_addr[i],
i == 5 ? '\n' : ':'); i == 5 ? '\n' : ':');
printk(KERN_INFO "%s: HostTXDS[%d] RXcsums[%d] LinkChgREG[%d] " printk(KERN_INFO "%s: RXcsums[%d] LinkChgREG[%d] "
"MIirq[%d] ASF[%d] Split[%d] WireSpeed[%d] " "MIirq[%d] ASF[%d] Split[%d] WireSpeed[%d] "
"TSOcap[%d] \n", "TSOcap[%d] \n",
dev->name, dev->name,
(tp->tg3_flags & TG3_FLAG_HOST_TXDS) != 0,
(tp->tg3_flags & TG3_FLAG_RX_CHECKSUMS) != 0, (tp->tg3_flags & TG3_FLAG_RX_CHECKSUMS) != 0,
(tp->tg3_flags & TG3_FLAG_USE_LINKCHG_REG) != 0, (tp->tg3_flags & TG3_FLAG_USE_LINKCHG_REG) != 0,
(tp->tg3_flags & TG3_FLAG_USE_MI_INTERRUPT) != 0, (tp->tg3_flags & TG3_FLAG_USE_MI_INTERRUPT) != 0,
...@@ -8470,7 +8380,7 @@ static int __devinit tg3_init_one(struct pci_dev *pdev, ...@@ -8470,7 +8380,7 @@ static int __devinit tg3_init_one(struct pci_dev *pdev,
return 0; return 0;
err_out_iounmap: err_out_iounmap:
iounmap(tp->regs); iounmap((void *) tp->regs);
err_out_free_dev: err_out_free_dev:
free_netdev(dev); free_netdev(dev);
...@@ -8492,7 +8402,7 @@ static void __devexit tg3_remove_one(struct pci_dev *pdev) ...@@ -8492,7 +8402,7 @@ static void __devexit tg3_remove_one(struct pci_dev *pdev)
struct tg3 *tp = netdev_priv(dev); struct tg3 *tp = netdev_priv(dev);
unregister_netdev(dev); unregister_netdev(dev);
iounmap(tp->regs); iounmap((void *)tp->regs);
free_netdev(dev); free_netdev(dev);
pci_release_regions(pdev); pci_release_regions(pdev);
pci_disable_device(pdev); pci_disable_device(pdev);
......
...@@ -1549,7 +1549,7 @@ ...@@ -1549,7 +1549,7 @@
* exist only in the cards on-chip SRAM. All 16 send bds are under * exist only in the cards on-chip SRAM. All 16 send bds are under
* the same mode, they may not be configured individually. * the same mode, they may not be configured individually.
* *
* The mode we use is controlled by TG3_FLAG_HOST_TXDS in tp->tg3_flags. * This driver always uses host memory TX descriptors.
* *
* To use host memory TX descriptors: * To use host memory TX descriptors:
* 1) Set GRC_MODE_HOST_SENDBDS in GRC_MODE register. * 1) Set GRC_MODE_HOST_SENDBDS in GRC_MODE register.
...@@ -2005,7 +2005,6 @@ struct tg3 { ...@@ -2005,7 +2005,6 @@ struct tg3 {
spinlock_t tx_lock; spinlock_t tx_lock;
/* TX descs are only used if TG3_FLAG_HOST_TXDS is set. */
struct tg3_tx_buffer_desc *tx_ring; struct tg3_tx_buffer_desc *tx_ring;
struct tx_ring_info *tx_buffers; struct tx_ring_info *tx_buffers;
dma_addr_t tx_desc_mapping; dma_addr_t tx_desc_mapping;
...@@ -2041,7 +2040,6 @@ struct tg3 { ...@@ -2041,7 +2040,6 @@ struct tg3 {
u32 rx_offset; u32 rx_offset;
u32 tg3_flags; u32 tg3_flags;
#define TG3_FLAG_HOST_TXDS 0x00000001
#define TG3_FLAG_TXD_MBOX_HWBUG 0x00000002 #define TG3_FLAG_TXD_MBOX_HWBUG 0x00000002
#define TG3_FLAG_RX_CHECKSUMS 0x00000004 #define TG3_FLAG_RX_CHECKSUMS 0x00000004
#define TG3_FLAG_USE_LINKCHG_REG 0x00000008 #define TG3_FLAG_USE_LINKCHG_REG 0x00000008
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment