aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/sky2.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/net/sky2.c')
-rw-r--r--drivers/net/sky2.c21
1 files changed, 9 insertions, 12 deletions
diff --git a/drivers/net/sky2.c b/drivers/net/sky2.c
index c057694cf047..1acca982ac14 100644
--- a/drivers/net/sky2.c
+++ b/drivers/net/sky2.c
@@ -2488,33 +2488,30 @@ static int sky2_set_ringparam(struct net_device *dev,
2488 return err; 2488 return err;
2489} 2489}
2490 2490
2491#define SKY2_REGS_LEN 0x1000
2492static int sky2_get_regs_len(struct net_device *dev) 2491static int sky2_get_regs_len(struct net_device *dev)
2493{ 2492{
2494 return SKY2_REGS_LEN; 2493 return 0x4000;
2495} 2494}
2496 2495
2497/* 2496/*
2498 * Returns copy of control register region 2497 * Returns copy of control register region
2499 * I/O region is divided into banks and certain regions are unreadable 2498 * Note: access to the RAM address register set will cause timeouts.
2500 */ 2499 */
2501static void sky2_get_regs(struct net_device *dev, struct ethtool_regs *regs, 2500static void sky2_get_regs(struct net_device *dev, struct ethtool_regs *regs,
2502 void *p) 2501 void *p)
2503{ 2502{
2504 const struct sky2_port *sky2 = netdev_priv(dev); 2503 const struct sky2_port *sky2 = netdev_priv(dev);
2505 unsigned long offs;
2506 const void __iomem *io = sky2->hw->regs; 2504 const void __iomem *io = sky2->hw->regs;
2507 static const unsigned long bankmap = 0xfff3f305;
2508 2505
2506 BUG_ON(regs->len < B3_RI_WTO_R1);
2509 regs->version = 1; 2507 regs->version = 1;
2510 for (offs = 0; offs < regs->len; offs += 128) { 2508 memset(p, 0, regs->len);
2511 u32 len = min_t(u32, 128, regs->len - offs);
2512 2509
2513 if (bankmap & (1 << (offs / 128))) 2510 memcpy_fromio(p, io, B3_RAM_ADDR);
2514 memcpy_fromio(p + offs, io + offs, len); 2511
2515 else 2512 memcpy_fromio(p + B3_RI_WTO_R1,
2516 memset(p + offs, 0, len); 2513 io + B3_RI_WTO_R1,
2517 } 2514 regs->len - B3_RI_WTO_R1);
2518} 2515}
2519 2516
2520static struct ethtool_ops sky2_ethtool_ops = { 2517static struct ethtool_ops sky2_ethtool_ops = {