board: fsl: lx2160aqds: modify the phy fixup code
Now that we are representing the MDIO mux in LX2160AQDS board in producer/consumer terms, the consumer nodes' has been changed. Therefore, modify the device tree fixups according to change in device tree. Signed-off-by: Pankaj Bansal <pankaj.bansal@nxp.com> Acked-by: Joe Hershberger <joe.hershberger@ni.com> Reviewed-by: Prabhakar Kushwaha <prabhakar.kushwaha@nxp.com>
This commit is contained in:
parent
43ad41e6ae
commit
d296842c2d
@ -628,8 +628,9 @@ int fdt_fixup_dpmac_phy_handle(void *fdt, int dpmac_id, int node_phandle)
|
|||||||
int fdt_get_ioslot_offset(void *fdt, struct mii_dev *mii_dev, int fpga_offset)
|
int fdt_get_ioslot_offset(void *fdt, struct mii_dev *mii_dev, int fpga_offset)
|
||||||
{
|
{
|
||||||
char mdio_ioslot_str[] = "mdio@00";
|
char mdio_ioslot_str[] = "mdio@00";
|
||||||
char mdio_mux_str[] = "mdio-mux-0";
|
|
||||||
struct lx2160a_qds_mdio *priv;
|
struct lx2160a_qds_mdio *priv;
|
||||||
|
u64 reg;
|
||||||
|
u32 phandle;
|
||||||
int offset, mux_val;
|
int offset, mux_val;
|
||||||
|
|
||||||
/*Test if the MDIO bus is real mdio bus or muxing front end ?*/
|
/*Test if the MDIO bus is real mdio bus or muxing front end ?*/
|
||||||
@ -643,15 +644,32 @@ int fdt_get_ioslot_offset(void *fdt, struct mii_dev *mii_dev, int fpga_offset)
|
|||||||
debug("real_bus_num = %d, ioslot = %d\n",
|
debug("real_bus_num = %d, ioslot = %d\n",
|
||||||
priv->realbusnum, priv->ioslot);
|
priv->realbusnum, priv->ioslot);
|
||||||
|
|
||||||
sprintf(mdio_mux_str, "mdio-mux-%1d", priv->realbusnum);
|
if (priv->realbusnum == EMI1)
|
||||||
offset = fdt_subnode_offset(fdt, fpga_offset, mdio_mux_str);
|
reg = CONFIG_SYS_FSL_WRIOP1_MDIO1;
|
||||||
|
else
|
||||||
|
reg = CONFIG_SYS_FSL_WRIOP1_MDIO2;
|
||||||
|
|
||||||
|
offset = fdt_node_offset_by_compat_reg(fdt, "fsl,fman-memac-mdio", reg);
|
||||||
if (offset < 0) {
|
if (offset < 0) {
|
||||||
printf("%s node not found under node %s in device tree\n",
|
printf("mdio@%llx node not found in device tree\n", reg);
|
||||||
mdio_mux_str, fdt_get_name(fdt, fpga_offset, NULL));
|
return offset;
|
||||||
|
}
|
||||||
|
|
||||||
|
phandle = fdt_get_phandle(fdt, offset);
|
||||||
|
phandle = cpu_to_fdt32(phandle);
|
||||||
|
offset = fdt_node_offset_by_prop_value(fdt, -1, "mdio-parent-bus",
|
||||||
|
&phandle, 4);
|
||||||
|
if (offset < 0) {
|
||||||
|
printf("mdio-mux-%d node not found in device tree\n",
|
||||||
|
priv->realbusnum == EMI1 ? 1 : 2);
|
||||||
return offset;
|
return offset;
|
||||||
}
|
}
|
||||||
|
|
||||||
mux_val = lx2160a_qds_get_mdio_mux_val(priv->realbusnum, priv->ioslot);
|
mux_val = lx2160a_qds_get_mdio_mux_val(priv->realbusnum, priv->ioslot);
|
||||||
|
if (priv->realbusnum == EMI1)
|
||||||
|
mux_val >>= BRDCFG4_EMI1SEL_SHIFT;
|
||||||
|
else
|
||||||
|
mux_val >>= BRDCFG4_EMI2SEL_SHIFT;
|
||||||
sprintf(mdio_ioslot_str, "mdio@%x", (u8)mux_val);
|
sprintf(mdio_ioslot_str, "mdio@%x", (u8)mux_val);
|
||||||
|
|
||||||
offset = fdt_subnode_offset(fdt, offset, mdio_ioslot_str);
|
offset = fdt_subnode_offset(fdt, offset, mdio_ioslot_str);
|
||||||
@ -675,7 +693,9 @@ int fdt_create_phy_node(void *fdt, int offset, u8 phyaddr, int *subnodeoffset,
|
|||||||
|
|
||||||
*subnodeoffset = fdt_add_subnode(fdt, offset, phy_node_name);
|
*subnodeoffset = fdt_add_subnode(fdt, offset, phy_node_name);
|
||||||
if (*subnodeoffset <= 0) {
|
if (*subnodeoffset <= 0) {
|
||||||
printf("Could not add subnode %s\n", phy_node_name);
|
printf("Could not add subnode %s inside node %s err = %s\n",
|
||||||
|
phy_node_name, fdt_get_name(fdt, offset, NULL),
|
||||||
|
fdt_strerror(*subnodeoffset));
|
||||||
return *subnodeoffset;
|
return *subnodeoffset;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -779,7 +799,6 @@ int fdt_fixup_board_phy(void *fdt)
|
|||||||
}
|
}
|
||||||
if (dpmac_id == NUM_WRIOP_PORTS)
|
if (dpmac_id == NUM_WRIOP_PORTS)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
ret = fdt_create_phy_node(fdt, offset, i,
|
ret = fdt_create_phy_node(fdt, offset, i,
|
||||||
&subnodeoffset,
|
&subnodeoffset,
|
||||||
phy_dev, phandle);
|
phy_dev, phandle);
|
||||||
@ -792,6 +811,11 @@ int fdt_fixup_board_phy(void *fdt)
|
|||||||
fdt_del_node(fdt, subnodeoffset);
|
fdt_del_node(fdt, subnodeoffset);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
/* calculate offset again as new node addition may have
|
||||||
|
* changed offset;
|
||||||
|
*/
|
||||||
|
offset = fdt_get_ioslot_offset(fdt, mii_dev,
|
||||||
|
fpga_offset);
|
||||||
phandle++;
|
phandle++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user