Lines Matching full:lp
25 * @lp: Pointer to axienet local data structure.
31 static int axienet_mdio_wait_until_ready(struct axienet_local *lp) in axienet_mdio_wait_until_ready() argument
35 return readx_poll_timeout(axinet_ior_read_mcr, lp, in axienet_mdio_wait_until_ready()
42 * @lp: Pointer to axienet local data structure.
46 static void axienet_mdio_mdc_enable(struct axienet_local *lp) in axienet_mdio_mdc_enable() argument
48 axienet_iow(lp, XAE_MDIO_MC_OFFSET, in axienet_mdio_mdc_enable()
49 ((u32)lp->mii_clk_div | XAE_MDIO_MC_MDIOEN_MASK)); in axienet_mdio_mdc_enable()
54 * @lp: Pointer to axienet local data structure.
58 static void axienet_mdio_mdc_disable(struct axienet_local *lp) in axienet_mdio_mdc_disable() argument
62 mc_reg = axienet_ior(lp, XAE_MDIO_MC_OFFSET); in axienet_mdio_mdc_disable()
63 axienet_iow(lp, XAE_MDIO_MC_OFFSET, in axienet_mdio_mdc_disable()
83 struct axienet_local *lp = bus->priv; in axienet_mdio_read() local
85 axienet_mdio_mdc_enable(lp); in axienet_mdio_read()
87 ret = axienet_mdio_wait_until_ready(lp); in axienet_mdio_read()
89 axienet_mdio_mdc_disable(lp); in axienet_mdio_read()
93 axienet_iow(lp, XAE_MDIO_MCR_OFFSET, in axienet_mdio_read()
101 ret = axienet_mdio_wait_until_ready(lp); in axienet_mdio_read()
103 axienet_mdio_mdc_disable(lp); in axienet_mdio_read()
107 rc = axienet_ior(lp, XAE_MDIO_MRD_OFFSET) & 0x0000FFFF; in axienet_mdio_read()
109 dev_dbg(lp->dev, "axienet_mdio_read(phy_id=%i, reg=%x) == %x\n", in axienet_mdio_read()
112 axienet_mdio_mdc_disable(lp); in axienet_mdio_read()
133 struct axienet_local *lp = bus->priv; in axienet_mdio_write() local
135 dev_dbg(lp->dev, "axienet_mdio_write(phy_id=%i, reg=%x, val=%x)\n", in axienet_mdio_write()
138 axienet_mdio_mdc_enable(lp); in axienet_mdio_write()
140 ret = axienet_mdio_wait_until_ready(lp); in axienet_mdio_write()
142 axienet_mdio_mdc_disable(lp); in axienet_mdio_write()
146 axienet_iow(lp, XAE_MDIO_MWD_OFFSET, (u32)val); in axienet_mdio_write()
147 axienet_iow(lp, XAE_MDIO_MCR_OFFSET, in axienet_mdio_write()
155 ret = axienet_mdio_wait_until_ready(lp); in axienet_mdio_write()
157 axienet_mdio_mdc_disable(lp); in axienet_mdio_write()
160 axienet_mdio_mdc_disable(lp); in axienet_mdio_write()
166 * @lp: Pointer to axienet local data structure.
175 static int axienet_mdio_enable(struct axienet_local *lp, struct device_node *np) in axienet_mdio_enable() argument
182 lp->mii_clk_div = 0; in axienet_mdio_enable()
184 if (lp->axi_clk) { in axienet_mdio_enable()
185 host_clock = clk_get_rate(lp->axi_clk); in axienet_mdio_enable()
194 netdev_warn(lp->ndev, "Could not find CPU device node.\n"); in axienet_mdio_enable()
200 netdev_warn(lp->ndev, "CPU clock-frequency property not found.\n"); in axienet_mdio_enable()
205 netdev_info(lp->ndev, "Setting assumed host clock to %u\n", in axienet_mdio_enable()
212 netdev_info(lp->ndev, "Setting non-standard mdio bus frequency to %u Hz\n", in axienet_mdio_enable()
251 netdev_warn(lp->ndev, "MDIO clock divisor overflow\n"); in axienet_mdio_enable()
254 lp->mii_clk_div = (u8)clk_div; in axienet_mdio_enable()
256 netdev_dbg(lp->ndev, in axienet_mdio_enable()
258 lp->mii_clk_div, host_clock); in axienet_mdio_enable()
260 axienet_mdio_mdc_enable(lp); in axienet_mdio_enable()
262 ret = axienet_mdio_wait_until_ready(lp); in axienet_mdio_enable()
264 axienet_mdio_mdc_disable(lp); in axienet_mdio_enable()
271 * @lp: Pointer to axienet local data structure.
280 int axienet_mdio_setup(struct axienet_local *lp) in axienet_mdio_setup() argument
291 (unsigned long long)lp->regs_start); in axienet_mdio_setup()
293 bus->priv = lp; in axienet_mdio_setup()
297 bus->parent = lp->dev; in axienet_mdio_setup()
298 lp->mii_bus = bus; in axienet_mdio_setup()
300 mdio_node = of_get_child_by_name(lp->dev->of_node, "mdio"); in axienet_mdio_setup()
301 ret = axienet_mdio_enable(lp, mdio_node); in axienet_mdio_setup()
308 axienet_mdio_mdc_disable(lp); in axienet_mdio_setup()
312 axienet_mdio_mdc_disable(lp); in axienet_mdio_setup()
316 lp->mii_bus = NULL; in axienet_mdio_setup()
322 * @lp: Pointer to axienet local data structure.
326 void axienet_mdio_teardown(struct axienet_local *lp) in axienet_mdio_teardown() argument
328 mdiobus_unregister(lp->mii_bus); in axienet_mdio_teardown()
329 mdiobus_free(lp->mii_bus); in axienet_mdio_teardown()
330 lp->mii_bus = NULL; in axienet_mdio_teardown()