Lines Matching full:lane
47 struct a38x_comphy_lane lane[MAX_A38X_COMPHY]; member
52 * row index = serdes lane,
64 static void a38x_set_conf(struct a38x_comphy_lane *lane, bool enable) in a38x_set_conf() argument
66 struct a38x_comphy *priv = lane->priv; in a38x_set_conf()
72 conf |= BIT(lane->port); in a38x_set_conf()
74 conf &= ~BIT(lane->port); in a38x_set_conf()
79 static void a38x_comphy_set_reg(struct a38x_comphy_lane *lane, in a38x_comphy_set_reg() argument
84 val = readl_relaxed(lane->base + offset) & ~mask; in a38x_comphy_set_reg()
85 writel(val | value, lane->base + offset); in a38x_comphy_set_reg()
88 static void a38x_comphy_set_speed(struct a38x_comphy_lane *lane, in a38x_comphy_set_speed() argument
91 a38x_comphy_set_reg(lane, COMPHY_CFG1, in a38x_comphy_set_speed()
97 static int a38x_comphy_poll(struct a38x_comphy_lane *lane, in a38x_comphy_poll() argument
103 ret = readl_relaxed_poll_timeout_atomic(lane->base + offset, val, in a38x_comphy_poll()
108 dev_err(lane->priv->dev, in a38x_comphy_poll()
109 "comphy%u: timed out waiting for status\n", lane->n); in a38x_comphy_poll()
120 struct a38x_comphy_lane *lane = phy_get_drvdata(phy); in a38x_comphy_set_mode() local
141 a38x_set_conf(lane, false); in a38x_comphy_set_mode()
143 a38x_comphy_set_speed(lane, gen, gen); in a38x_comphy_set_mode()
145 ret = a38x_comphy_poll(lane, COMPHY_STAT1, in a38x_comphy_set_mode()
152 a38x_set_conf(lane, true); in a38x_comphy_set_mode()
165 struct a38x_comphy_lane *lane; in a38x_comphy_xlate() local
176 lane = phy_get_drvdata(phy); in a38x_comphy_xlate()
177 if (lane->port >= 0) in a38x_comphy_xlate()
180 lane->port = args->args[0]; in a38x_comphy_xlate()
182 val = readl_relaxed(lane->priv->base + COMPHY_SELECTOR); in a38x_comphy_xlate()
183 val = (val >> (4 * lane->n)) & 0xf; in a38x_comphy_xlate()
185 if (!gbe_mux[lane->n][lane->port] || in a38x_comphy_xlate()
186 val != gbe_mux[lane->n][lane->port]) { in a38x_comphy_xlate()
187 dev_warn(lane->priv->dev, in a38x_comphy_xlate()
188 "comphy%u: not configured for GBE\n", lane->n); in a38x_comphy_xlate()
234 if (val >= MAX_A38X_COMPHY || priv->lane[val].base) { in a38x_comphy_probe()
245 priv->lane[val].base = base + 0x28 * val; in a38x_comphy_probe()
246 priv->lane[val].priv = priv; in a38x_comphy_probe()
247 priv->lane[val].n = val; in a38x_comphy_probe()
248 priv->lane[val].port = -1; in a38x_comphy_probe()
249 phy_set_drvdata(phy, &priv->lane[val]); in a38x_comphy_probe()