Message ID | 20221108082330.2086671-3-lukma@denx.de (mailing list archive) |
---|---|
State | Changes Requested |
Delegated to: | Netdev Maintainers |
Headers | show |
Series | net: dsa: Add support for mv88e6020 and mv88e6071 | expand |
On Tue, Nov 08, 2022 at 09:23:23AM +0100, Lukasz Majewski wrote: > From: Matthias Schiffer <matthias.schiffer@ew.tq-group.com> > > In dual chip mode (6250 family), not only global and port registers are > shifted by sw_addr, but also the PHY addresses. Account for this in the > IRQ mapping. > +++ b/drivers/net/dsa/mv88e6xxx/smi.c > @@ -186,5 +186,9 @@ int mv88e6xxx_smi_init(struct mv88e6xxx_chip *chip, > if (chip->smi_ops->init) > return chip->smi_ops->init(chip); > > + chip->phy_base_addr = chip->info->phy_base_addr; > + if (chip->info->dual_chip) > + chip->phy_base_addr += sw_addr; > + > return 0; Again, reviewing first to last, i assume the will be a patch soon implementing get_phy_address(), and it will have the same logic. Why not call it here, a default implementation which returns info->phy_base_addr, and a version for 6250 which returns sw_addr. Andrew
Hi Andrew, > On Tue, Nov 08, 2022 at 09:23:23AM +0100, Lukasz Majewski wrote: > > From: Matthias Schiffer <matthias.schiffer@ew.tq-group.com> > > > > In dual chip mode (6250 family), not only global and port registers > > are shifted by sw_addr, but also the PHY addresses. Account for > > this in the IRQ mapping. > > > +++ b/drivers/net/dsa/mv88e6xxx/smi.c > > @@ -186,5 +186,9 @@ int mv88e6xxx_smi_init(struct mv88e6xxx_chip > > *chip, if (chip->smi_ops->init) > > return chip->smi_ops->init(chip); > > > > + chip->phy_base_addr = chip->info->phy_base_addr; > > + if (chip->info->dual_chip) > > + chip->phy_base_addr += sw_addr; > > + > > return 0; > > > Again, reviewing first to last, i assume the will be a patch soon > implementing get_phy_address(), and it will have the same logic. Why > not call it here, a default implementation which returns > info->phy_base_addr, and a version for 6250 which returns sw_addr. > I will squash Matthias patches and prepare new set of them with proper operation's ordering. > Andrew Best regards, Lukasz Majewski -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de
diff --git a/drivers/net/dsa/mv88e6xxx/chip.h b/drivers/net/dsa/mv88e6xxx/chip.h index e693154cf803..b03f279a673d 100644 --- a/drivers/net/dsa/mv88e6xxx/chip.h +++ b/drivers/net/dsa/mv88e6xxx/chip.h @@ -328,6 +328,7 @@ struct mv88e6xxx_chip { const struct mv88e6xxx_bus_ops *smi_ops; struct mii_bus *bus; int sw_addr; + unsigned int phy_base_addr; /* Handles automatic disabling and re-enabling of the PHY * polling unit. diff --git a/drivers/net/dsa/mv88e6xxx/global2.c b/drivers/net/dsa/mv88e6xxx/global2.c index fa65ecd9cb85..fd6ba1fc6bef 100644 --- a/drivers/net/dsa/mv88e6xxx/global2.c +++ b/drivers/net/dsa/mv88e6xxx/global2.c @@ -1172,7 +1172,7 @@ int mv88e6xxx_g2_irq_mdio_setup(struct mv88e6xxx_chip *chip, err = irq; goto out; } - bus->irq[chip->info->phy_base_addr + phy] = irq; + bus->irq[chip->phy_base_addr + phy] = irq; } return 0; out: diff --git a/drivers/net/dsa/mv88e6xxx/smi.c b/drivers/net/dsa/mv88e6xxx/smi.c index a990271b7482..520e47b375b2 100644 --- a/drivers/net/dsa/mv88e6xxx/smi.c +++ b/drivers/net/dsa/mv88e6xxx/smi.c @@ -186,5 +186,9 @@ int mv88e6xxx_smi_init(struct mv88e6xxx_chip *chip, if (chip->smi_ops->init) return chip->smi_ops->init(chip); + chip->phy_base_addr = chip->info->phy_base_addr; + if (chip->info->dual_chip) + chip->phy_base_addr += sw_addr; + return 0; }