mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 23:24:38 +00:00
phy: cadence: Sierra: Move the link operations from serdes phy to link device
In commit6f46c7441a
("phy: cadence: Sierra: Add a UCLASS_PHY device for links"), a separate udevice of type UCLASS_PHY was created for each link. Therefore, move the corresponding link operations under the link device. Also, change the uclass of sierra phy to UCLASS_MISC as it is no longer the phy device. Fixes:6f46c7441a
("phy: cadence: Sierra: Add a UCLASS_PHY device for links") Signed-off-by: Aswath Govindraju <a-govindraju@ti.com> Reviewed-by: Georgi Vlaev <g-vlaev@ti.com>
This commit is contained in:
parent
ee5a284b29
commit
b78f81eb5d
1 changed files with 20 additions and 39 deletions
|
@ -358,26 +358,10 @@ static inline int cdns_reset_deassert(struct reset_control *rst)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline struct cdns_sierra_inst *phy_get_drvdata(struct phy *phy)
|
static int cdns_sierra_link_init(struct phy *gphy)
|
||||||
{
|
{
|
||||||
struct cdns_sierra_phy *sp = dev_get_priv(phy->dev);
|
struct cdns_sierra_inst *ins = dev_get_priv(gphy->dev);
|
||||||
int index;
|
struct cdns_sierra_phy *phy = dev_get_priv(gphy->dev->parent);
|
||||||
|
|
||||||
if (phy->id >= SIERRA_MAX_LANES)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
for (index = 0; index < sp->nsubnodes; index++) {
|
|
||||||
if (phy->id == sp->phys[index]->mlane)
|
|
||||||
return sp->phys[index];
|
|
||||||
}
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int cdns_sierra_phy_init(struct phy *gphy)
|
|
||||||
{
|
|
||||||
struct cdns_sierra_inst *ins = phy_get_drvdata(gphy);
|
|
||||||
struct cdns_sierra_phy *phy = dev_get_priv(gphy->dev);
|
|
||||||
struct cdns_sierra_data *init_data = phy->init_data;
|
struct cdns_sierra_data *init_data = phy->init_data;
|
||||||
struct cdns_sierra_vals *pma_cmn_vals, *pma_ln_vals;
|
struct cdns_sierra_vals *pma_cmn_vals, *pma_ln_vals;
|
||||||
enum cdns_sierra_phy_type phy_type = ins->phy_type;
|
enum cdns_sierra_phy_type phy_type = ins->phy_type;
|
||||||
|
@ -443,10 +427,11 @@ static int cdns_sierra_phy_init(struct phy *gphy)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cdns_sierra_phy_on(struct phy *gphy)
|
static int cdns_sierra_link_on(struct phy *gphy)
|
||||||
{
|
{
|
||||||
struct cdns_sierra_inst *ins = phy_get_drvdata(gphy);
|
struct cdns_sierra_inst *ins = dev_get_priv(gphy->dev);
|
||||||
struct cdns_sierra_phy *sp = dev_get_priv(gphy->dev);
|
struct cdns_sierra_phy *sp = dev_get_priv(gphy->dev->parent);
|
||||||
|
|
||||||
struct udevice *dev = gphy->dev;
|
struct udevice *dev = gphy->dev;
|
||||||
u32 val;
|
u32 val;
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -503,16 +488,16 @@ static int cdns_sierra_phy_on(struct phy *gphy)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cdns_sierra_phy_off(struct phy *gphy)
|
static int cdns_sierra_link_off(struct phy *gphy)
|
||||||
{
|
{
|
||||||
struct cdns_sierra_inst *ins = phy_get_drvdata(gphy);
|
struct cdns_sierra_inst *ins = dev_get_priv(gphy->dev);
|
||||||
|
|
||||||
return reset_assert_bulk(ins->lnk_rst);
|
return reset_assert_bulk(ins->lnk_rst);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cdns_sierra_phy_reset(struct phy *gphy)
|
static int cdns_sierra_link_reset(struct phy *gphy)
|
||||||
{
|
{
|
||||||
struct cdns_sierra_phy *sp = dev_get_priv(gphy->dev);
|
struct cdns_sierra_phy *sp = dev_get_priv(gphy->dev->parent);
|
||||||
|
|
||||||
reset_control_assert(sp->phy_rst);
|
reset_control_assert(sp->phy_rst);
|
||||||
reset_control_deassert(sp->phy_rst);
|
reset_control_deassert(sp->phy_rst);
|
||||||
|
@ -520,10 +505,10 @@ static int cdns_sierra_phy_reset(struct phy *gphy)
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct phy_ops ops = {
|
static const struct phy_ops ops = {
|
||||||
.init = cdns_sierra_phy_init,
|
.init = cdns_sierra_link_init,
|
||||||
.power_on = cdns_sierra_phy_on,
|
.power_on = cdns_sierra_link_on,
|
||||||
.power_off = cdns_sierra_phy_off,
|
.power_off = cdns_sierra_link_off,
|
||||||
.reset = cdns_sierra_phy_reset,
|
.reset = cdns_sierra_link_reset,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct cdns_sierra_pll_mux_sel {
|
struct cdns_sierra_pll_mux_sel {
|
||||||
|
@ -580,7 +565,7 @@ static const struct clk_ops cdns_sierra_pll_mux_ops = {
|
||||||
.set_parent = cdns_sierra_pll_mux_set_parent,
|
.set_parent = cdns_sierra_pll_mux_set_parent,
|
||||||
};
|
};
|
||||||
|
|
||||||
int cdns_sierra_pll_mux_probe(struct udevice *dev)
|
static int cdns_sierra_pll_mux_probe(struct udevice *dev)
|
||||||
{
|
{
|
||||||
struct cdns_sierra_pll_mux *priv = dev_get_priv(dev);
|
struct cdns_sierra_pll_mux *priv = dev_get_priv(dev);
|
||||||
struct cdns_sierra_phy *sp = dev_get_priv(dev->parent);
|
struct cdns_sierra_phy *sp = dev_get_priv(dev->parent);
|
||||||
|
@ -1012,9 +997,8 @@ static int cdns_sierra_phy_get_resets(struct cdns_sierra_phy *sp,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int cdns_sierra_bind_link_nodes(struct cdns_sierra_phy *sp)
|
static int cdns_sierra_phy_bind(struct udevice *dev)
|
||||||
{
|
{
|
||||||
struct udevice *dev = sp->dev;
|
|
||||||
struct driver *link_drv;
|
struct driver *link_drv;
|
||||||
ofnode child;
|
ofnode child;
|
||||||
int rc;
|
int rc;
|
||||||
|
@ -1079,6 +1063,7 @@ U_BOOT_DRIVER(sierra_phy_link) = {
|
||||||
.name = "sierra_phy_link",
|
.name = "sierra_phy_link",
|
||||||
.id = UCLASS_PHY,
|
.id = UCLASS_PHY,
|
||||||
.probe = cdns_sierra_link_probe,
|
.probe = cdns_sierra_link_probe,
|
||||||
|
.ops = &ops,
|
||||||
.priv_auto = sizeof(struct cdns_sierra_inst),
|
.priv_auto = sizeof(struct cdns_sierra_inst),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1141,10 +1126,6 @@ static int cdns_sierra_phy_probe(struct udevice *dev)
|
||||||
}
|
}
|
||||||
|
|
||||||
sp->autoconf = dev_read_bool(dev, "cdns,autoconf");
|
sp->autoconf = dev_read_bool(dev, "cdns,autoconf");
|
||||||
/* Binding link nodes as children to serdes */
|
|
||||||
ret = cdns_sierra_bind_link_nodes(sp);
|
|
||||||
if (ret)
|
|
||||||
goto clk_disable;
|
|
||||||
|
|
||||||
dev_info(dev, "sierra probed\n");
|
dev_info(dev, "sierra probed\n");
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1971,10 +1952,10 @@ static const struct udevice_id cdns_sierra_id_table[] = {
|
||||||
|
|
||||||
U_BOOT_DRIVER(sierra_phy_provider) = {
|
U_BOOT_DRIVER(sierra_phy_provider) = {
|
||||||
.name = "cdns,sierra",
|
.name = "cdns,sierra",
|
||||||
.id = UCLASS_PHY,
|
.id = UCLASS_MISC,
|
||||||
.of_match = cdns_sierra_id_table,
|
.of_match = cdns_sierra_id_table,
|
||||||
.probe = cdns_sierra_phy_probe,
|
.probe = cdns_sierra_phy_probe,
|
||||||
.remove = cdns_sierra_phy_remove,
|
.remove = cdns_sierra_phy_remove,
|
||||||
.ops = &ops,
|
.bind = cdns_sierra_phy_bind,
|
||||||
.priv_auto = sizeof(struct cdns_sierra_phy),
|
.priv_auto = sizeof(struct cdns_sierra_phy),
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in a new issue