r6040: move down second PHY detection to r6040_init_one
Instead of fully initializing an unusable second r6040 device, perform the PHY detection earlier and bail out in r6040_init_one when we could not read the PHY identifier. Signed-off-by: Mark Kelly <mark@bifferos.com> Signed-off-by: Florian Fainelli <florian@openwrt.org> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
d516478ff6
commit
e03f614af7
1 changed files with 7 additions and 8 deletions
|
@ -750,14 +750,6 @@ static int r6040_up(struct net_device *dev)
|
||||||
struct r6040_private *lp = netdev_priv(dev);
|
struct r6040_private *lp = netdev_priv(dev);
|
||||||
void __iomem *ioaddr = lp->base;
|
void __iomem *ioaddr = lp->base;
|
||||||
int ret;
|
int ret;
|
||||||
u16 val;
|
|
||||||
|
|
||||||
/* Check presence of a second PHY */
|
|
||||||
val = r6040_phy_read(ioaddr, lp->phy_addr, 2);
|
|
||||||
if (val == 0xFFFF) {
|
|
||||||
printk(KERN_ERR DRV_NAME " no second PHY attached\n");
|
|
||||||
return -EIO;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Initialise and alloc RX/TX buffers */
|
/* Initialise and alloc RX/TX buffers */
|
||||||
r6040_init_txbufs(dev);
|
r6040_init_txbufs(dev);
|
||||||
|
@ -1194,6 +1186,13 @@ static int __devinit r6040_init_one(struct pci_dev *pdev,
|
||||||
lp->mii_if.phy_id_mask = 0x1f;
|
lp->mii_if.phy_id_mask = 0x1f;
|
||||||
lp->mii_if.reg_num_mask = 0x1f;
|
lp->mii_if.reg_num_mask = 0x1f;
|
||||||
|
|
||||||
|
/* Check the vendor ID on the PHY, if 0xffff assume none attached */
|
||||||
|
if (r6040_phy_read(ioaddr, lp->phy_addr, 2) == 0xffff) {
|
||||||
|
printk(KERN_ERR DRV_NAME ": Failed to detect an attached PHY\n");
|
||||||
|
err = -ENODEV;
|
||||||
|
goto err_out_unmap;
|
||||||
|
}
|
||||||
|
|
||||||
/* Register net device. After this dev->name assign */
|
/* Register net device. After this dev->name assign */
|
||||||
err = register_netdev(dev);
|
err = register_netdev(dev);
|
||||||
if (err) {
|
if (err) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue