phy: mvebu-cp110-comphy: explicitly set the pipe selector
The pipe selector is used to select some modes (such as USB or PCIe). Otherwise it must be set to 0 (or "unconnected"). This patch does this to ensure it is not set to an incompatible value when using the supported modes (SGMII, 10GKR). Signed-off-by: Antoine Tenart <antoine.tenart@free-electrons.com> Signed-off-by: Kishon Vijay Abraham I <kishon@ti.com>
This commit is contained in:
Родитель
caef3e0b65
Коммит
17fb745d4a
|
@ -111,6 +111,8 @@
|
||||||
#define MVEBU_COMPHY_CONF6_40B BIT(18)
|
#define MVEBU_COMPHY_CONF6_40B BIT(18)
|
||||||
#define MVEBU_COMPHY_SELECTOR 0x1140
|
#define MVEBU_COMPHY_SELECTOR 0x1140
|
||||||
#define MVEBU_COMPHY_SELECTOR_PHY(n) ((n) * 0x4)
|
#define MVEBU_COMPHY_SELECTOR_PHY(n) ((n) * 0x4)
|
||||||
|
#define MVEBU_COMPHY_PIPE_SELECTOR 0x1144
|
||||||
|
#define MVEBU_COMPHY_PIPE_SELECTOR_PIPE(n) ((n) * 0x4)
|
||||||
|
|
||||||
#define MVEBU_COMPHY_LANES 6
|
#define MVEBU_COMPHY_LANES 6
|
||||||
#define MVEBU_COMPHY_PORTS 3
|
#define MVEBU_COMPHY_PORTS 3
|
||||||
|
@ -475,6 +477,10 @@ static int mvebu_comphy_power_on(struct phy *phy)
|
||||||
if (mux < 0)
|
if (mux < 0)
|
||||||
return -ENOTSUPP;
|
return -ENOTSUPP;
|
||||||
|
|
||||||
|
regmap_read(priv->regmap, MVEBU_COMPHY_PIPE_SELECTOR, &val);
|
||||||
|
val &= ~(0xf << MVEBU_COMPHY_PIPE_SELECTOR_PIPE(lane->id));
|
||||||
|
regmap_write(priv->regmap, MVEBU_COMPHY_PIPE_SELECTOR, val);
|
||||||
|
|
||||||
regmap_read(priv->regmap, MVEBU_COMPHY_SELECTOR, &val);
|
regmap_read(priv->regmap, MVEBU_COMPHY_SELECTOR, &val);
|
||||||
val &= ~(0xf << MVEBU_COMPHY_SELECTOR_PHY(lane->id));
|
val &= ~(0xf << MVEBU_COMPHY_SELECTOR_PHY(lane->id));
|
||||||
val |= mux << MVEBU_COMPHY_SELECTOR_PHY(lane->id);
|
val |= mux << MVEBU_COMPHY_SELECTOR_PHY(lane->id);
|
||||||
|
@ -526,6 +532,10 @@ static int mvebu_comphy_power_off(struct phy *phy)
|
||||||
val &= ~(0xf << MVEBU_COMPHY_SELECTOR_PHY(lane->id));
|
val &= ~(0xf << MVEBU_COMPHY_SELECTOR_PHY(lane->id));
|
||||||
regmap_write(priv->regmap, MVEBU_COMPHY_SELECTOR, val);
|
regmap_write(priv->regmap, MVEBU_COMPHY_SELECTOR, val);
|
||||||
|
|
||||||
|
regmap_read(priv->regmap, MVEBU_COMPHY_PIPE_SELECTOR, &val);
|
||||||
|
val &= ~(0xf << MVEBU_COMPHY_PIPE_SELECTOR_PIPE(lane->id));
|
||||||
|
regmap_write(priv->regmap, MVEBU_COMPHY_PIPE_SELECTOR, val);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче