fsl_pq_mdio: Clean up tbi address configuration

The code for setting the address of the internal TBI PHY was
convoluted enough without a maze of ifdefs. Clean it up a bit
so we allow the logic to fail down to -ENODEV at the end of
the if/else ladder, rather than using ifdefs to repeat the same
failure code over and over.

Also, remove the support for the auto-configuration. I'm not aware of
anyone using it, and it ends up using the bus mutex before it's been
initialized.

Signed-off-by: Andy Fleming <afleming@freescale.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
Andy Fleming 2011-11-11 05:10:39 +00:00 committed by David S. Miller
parent e19df76a11
commit 952c5ca14e
1 changed files with 8 additions and 45 deletions

View File

@ -183,28 +183,10 @@ void fsl_pq_mdio_bus_name(char *name, struct device_node *np)
} }
EXPORT_SYMBOL_GPL(fsl_pq_mdio_bus_name); EXPORT_SYMBOL_GPL(fsl_pq_mdio_bus_name);
/* Scan the bus in reverse, looking for an empty spot */
static int fsl_pq_mdio_find_free(struct mii_bus *new_bus)
{
int i;
for (i = PHY_MAX_ADDR; i > 0; i--) {
u32 phy_id;
if (get_phy_id(new_bus, i, &phy_id))
return -1;
if (phy_id == 0xffffffff)
break;
}
return i;
}
#if defined(CONFIG_GIANFAR) || defined(CONFIG_GIANFAR_MODULE)
static u32 __iomem *get_gfar_tbipa(struct fsl_pq_mdio __iomem *regs, struct device_node *np) static u32 __iomem *get_gfar_tbipa(struct fsl_pq_mdio __iomem *regs, struct device_node *np)
{ {
#if defined(CONFIG_GIANFAR) || defined(CONFIG_GIANFAR_MODULE)
struct gfar __iomem *enet_regs; struct gfar __iomem *enet_regs;
/* /*
@ -220,15 +202,15 @@ static u32 __iomem *get_gfar_tbipa(struct fsl_pq_mdio __iomem *regs, struct devi
} else if (of_device_is_compatible(np, "fsl,etsec2-mdio") || } else if (of_device_is_compatible(np, "fsl,etsec2-mdio") ||
of_device_is_compatible(np, "fsl,etsec2-tbi")) { of_device_is_compatible(np, "fsl,etsec2-tbi")) {
return of_iomap(np, 1); return of_iomap(np, 1);
} else }
return NULL;
}
#endif #endif
return NULL;
}
#if defined(CONFIG_UCC_GETH) || defined(CONFIG_UCC_GETH_MODULE)
static int get_ucc_id_for_range(u64 start, u64 end, u32 *ucc_id) static int get_ucc_id_for_range(u64 start, u64 end, u32 *ucc_id)
{ {
#if defined(CONFIG_UCC_GETH) || defined(CONFIG_UCC_GETH_MODULE)
struct device_node *np = NULL; struct device_node *np = NULL;
int err = 0; int err = 0;
@ -261,9 +243,10 @@ static int get_ucc_id_for_range(u64 start, u64 end, u32 *ucc_id)
return err; return err;
else else
return -EINVAL; return -EINVAL;
} #else
return -ENODEV;
#endif #endif
}
static int fsl_pq_mdio_probe(struct platform_device *ofdev) static int fsl_pq_mdio_probe(struct platform_device *ofdev)
{ {
@ -339,19 +322,13 @@ static int fsl_pq_mdio_probe(struct platform_device *ofdev)
of_device_is_compatible(np, "fsl,etsec2-mdio") || of_device_is_compatible(np, "fsl,etsec2-mdio") ||
of_device_is_compatible(np, "fsl,etsec2-tbi") || of_device_is_compatible(np, "fsl,etsec2-tbi") ||
of_device_is_compatible(np, "gianfar")) { of_device_is_compatible(np, "gianfar")) {
#if defined(CONFIG_GIANFAR) || defined(CONFIG_GIANFAR_MODULE)
tbipa = get_gfar_tbipa(regs, np); tbipa = get_gfar_tbipa(regs, np);
if (!tbipa) { if (!tbipa) {
err = -EINVAL; err = -EINVAL;
goto err_free_irqs; goto err_free_irqs;
} }
#else
err = -ENODEV;
goto err_free_irqs;
#endif
} else if (of_device_is_compatible(np, "fsl,ucc-mdio") || } else if (of_device_is_compatible(np, "fsl,ucc-mdio") ||
of_device_is_compatible(np, "ucc_geth_phy")) { of_device_is_compatible(np, "ucc_geth_phy")) {
#if defined(CONFIG_UCC_GETH) || defined(CONFIG_UCC_GETH_MODULE)
u32 id; u32 id;
static u32 mii_mng_master; static u32 mii_mng_master;
@ -364,10 +341,6 @@ static int fsl_pq_mdio_probe(struct platform_device *ofdev)
mii_mng_master = id; mii_mng_master = id;
ucc_set_qe_mux_mii_mng(id - 1); ucc_set_qe_mux_mii_mng(id - 1);
} }
#else
err = -ENODEV;
goto err_free_irqs;
#endif
} else { } else {
err = -ENODEV; err = -ENODEV;
goto err_free_irqs; goto err_free_irqs;
@ -386,16 +359,6 @@ static int fsl_pq_mdio_probe(struct platform_device *ofdev)
} }
if (tbiaddr == -1) { if (tbiaddr == -1) {
out_be32(tbipa, 0);
tbiaddr = fsl_pq_mdio_find_free(new_bus);
}
/*
* We define TBIPA at 0 to be illegal, opting to fail for boards that
* have PHYs at 1-31, rather than change tbipa and rescan.
*/
if (tbiaddr == 0) {
err = -EBUSY; err = -EBUSY;
goto err_free_irqs; goto err_free_irqs;