Lines Matching refs:dev

76 #define MMD_SETUP(mode, dev)		(((u16)(mode) << PORT_MMD_OP_MODE_S) | (dev))  argument
115 struct udevice *dev; member
122 static inline int ksz_i2c_read(struct udevice *dev, u32 reg, u8 *val, int len) in ksz_i2c_read() argument
124 return dm_i2c_read(dev, reg, val, len); in ksz_i2c_read()
127 static inline int ksz_i2c_write(struct udevice *dev, u32 reg, u8 *val, int len) in ksz_i2c_write() argument
129 return dm_i2c_write(dev, reg, val, len); in ksz_i2c_write()
151 static int ksz_spi_xfer(struct udevice *dev, u32 reg, const u8 *out, in ksz_spi_xfer() argument
169 ret = dm_spi_claim_bus(dev); in ksz_spi_xfer()
186 ret = dm_spi_xfer(dev, 32, &addr, NULL, SPI_XFER_BEGIN); in ksz_spi_xfer()
192 ret = dm_spi_xfer(dev, len * 8, out, in, SPI_XFER_END); in ksz_spi_xfer()
201 dm_spi_xfer(dev, 0, NULL, NULL, SPI_XFER_END); in ksz_spi_xfer()
203 dm_spi_release_bus(dev); in ksz_spi_xfer()
208 static inline int ksz_spi_read(struct udevice *dev, u32 reg, u8 *val, int len) in ksz_spi_read() argument
210 return ksz_spi_xfer(dev, reg, NULL, val, len); in ksz_spi_read()
213 static inline int ksz_spi_write(struct udevice *dev, u32 reg, u8 *val, int len) in ksz_spi_write() argument
215 return ksz_spi_xfer(dev, reg, val, NULL, len); in ksz_spi_write()
224 static inline int ksz_read8(struct udevice *dev, u32 reg, u8 *val) in ksz_read8() argument
226 struct ksz_dsa_priv *priv = dev_get_priv(dev); in ksz_read8()
229 int ret = phy_ops->read(dev, reg, val, 1); in ksz_read8()
231 dev_dbg(dev, "%s 0x%04x<<0x%02x\n", __func__, reg, *val); in ksz_read8()
236 static inline int ksz_pread8(struct udevice *dev, int port, int reg, u8 *val) in ksz_pread8() argument
238 return ksz_read8(dev, PORT_CTRL_ADDR(port, reg), val); in ksz_pread8()
241 static inline int ksz_write8(struct udevice *dev, u32 reg, u8 val) in ksz_write8() argument
243 struct ksz_dsa_priv *priv = dev_get_priv(dev); in ksz_write8()
246 dev_dbg(dev, "%s 0x%04x>>0x%02x\n", __func__, reg, val); in ksz_write8()
247 return phy_ops->write(dev, reg, &val, 1); in ksz_write8()
250 static inline int ksz_pwrite8(struct udevice *dev, int port, int reg, u8 val) in ksz_pwrite8() argument
252 return ksz_write8(dev, PORT_CTRL_ADDR(port, reg), val); in ksz_pwrite8()
255 static inline int ksz_write16(struct udevice *dev, u32 reg, u16 val) in ksz_write16() argument
257 struct ksz_dsa_priv *priv = dev_get_priv(dev); in ksz_write16()
263 dev_dbg(dev, "%s 0x%04x>>0x%04x\n", __func__, reg, val); in ksz_write16()
265 return phy_ops->write(dev, reg, buf, 2); in ksz_write16()
268 static inline int ksz_pwrite16(struct udevice *dev, int port, int reg, u16 val) in ksz_pwrite16() argument
270 return ksz_write16(dev, PORT_CTRL_ADDR(port, reg), val); in ksz_pwrite16()
273 static inline int ksz_read16(struct udevice *dev, u32 reg, u16 *val) in ksz_read16() argument
275 struct ksz_dsa_priv *priv = dev_get_priv(dev); in ksz_read16()
280 ret = phy_ops->read(dev, reg, buf, 2); in ksz_read16()
282 dev_dbg(dev, "%s 0x%04x<<0x%04x\n", __func__, reg, *val); in ksz_read16()
287 static inline int ksz_pread16(struct udevice *dev, int port, int reg, u16 *val) in ksz_pread16() argument
289 return ksz_read16(dev, PORT_CTRL_ADDR(port, reg), val); in ksz_pread16()
292 static inline int ksz_read32(struct udevice *dev, u32 reg, u32 *val) in ksz_read32() argument
294 struct ksz_dsa_priv *priv = dev_get_priv(dev); in ksz_read32()
297 return phy_ops->read(dev, reg, (u8 *)val, 4); in ksz_read32()
300 static inline int ksz_pread32(struct udevice *dev, int port, int reg, u32 *val) in ksz_pread32() argument
302 return ksz_read32(dev, PORT_CTRL_ADDR(port, reg), val); in ksz_pread32()
305 static inline int ksz_write32(struct udevice *dev, u32 reg, u32 val) in ksz_write32() argument
307 struct ksz_dsa_priv *priv = dev_get_priv(dev); in ksz_write32()
315 dev_dbg(dev, "%s 0x%04x>>0x%04x\n", __func__, reg, val); in ksz_write32()
317 return phy_ops->write(dev, reg, buf, 4); in ksz_write32()
320 static inline int ksz_pwrite32(struct udevice *dev, int port, int reg, u32 val) in ksz_pwrite32() argument
322 return ksz_write32(dev, PORT_CTRL_ADDR(port, reg), val); in ksz_pwrite32()
325 static __maybe_unused void ksz_port_mmd_read(struct udevice *dev, int port, in ksz_port_mmd_read() argument
328 ksz_pwrite16(dev, port, REG_PORT_PHY_MMD_SETUP, MMD_SETUP(PORT_MMD_OP_INDEX, addr)); in ksz_port_mmd_read()
329 ksz_pwrite16(dev, port, REG_PORT_PHY_MMD_INDEX_DATA, reg); in ksz_port_mmd_read()
330 ksz_pwrite16(dev, port, REG_PORT_PHY_MMD_SETUP, MMD_SETUP(PORT_MMD_OP_DATA_NO_INCR, addr)); in ksz_port_mmd_read()
331 ksz_pread16(dev, port, REG_PORT_PHY_MMD_INDEX_DATA, val); in ksz_port_mmd_read()
332 dev_dbg(dev, "%s P%d 0x%02x:0x%04x<<0x%04x\n", __func__, port + 1, addr, reg, *val); in ksz_port_mmd_read()
335 static void ksz_port_mmd_write(struct udevice *dev, int port, u8 addr, u16 reg, u16 val) in ksz_port_mmd_write() argument
337 dev_dbg(dev, "%s P%d 0x%02x:0x%04x>>0x%04x\n", __func__, port + 1, addr, addr, val); in ksz_port_mmd_write()
338 ksz_pwrite16(dev, port, REG_PORT_PHY_MMD_SETUP, MMD_SETUP(PORT_MMD_OP_INDEX, addr)); in ksz_port_mmd_write()
339 ksz_pwrite16(dev, port, REG_PORT_PHY_MMD_INDEX_DATA, addr); in ksz_port_mmd_write()
340 ksz_pwrite16(dev, port, REG_PORT_PHY_MMD_SETUP, MMD_SETUP(PORT_MMD_OP_DATA_NO_INCR, addr)); in ksz_port_mmd_write()
341 ksz_pwrite16(dev, port, REG_PORT_PHY_MMD_INDEX_DATA, val); in ksz_port_mmd_write()
347 static void ksz_phy_errata_setup(struct udevice *dev, int port) in ksz_phy_errata_setup() argument
349 dev_dbg(dev, "%s P%d\n", __func__, port + 1); in ksz_phy_errata_setup()
352 ksz_port_mmd_write(dev, port, 0x01, 0x6f, 0xdd0b); in ksz_phy_errata_setup()
353 ksz_port_mmd_write(dev, port, 0x01, 0x8f, 0x6032); in ksz_phy_errata_setup()
354 ksz_port_mmd_write(dev, port, 0x01, 0x9d, 0x248c); in ksz_phy_errata_setup()
355 ksz_port_mmd_write(dev, port, 0x01, 0x75, 0x0060); in ksz_phy_errata_setup()
356 ksz_port_mmd_write(dev, port, 0x01, 0xd3, 0x7777); in ksz_phy_errata_setup()
357 ksz_port_mmd_write(dev, port, 0x1c, 0x06, 0x3008); in ksz_phy_errata_setup()
358 ksz_port_mmd_write(dev, port, 0x1c, 0x08, 0x2001); in ksz_phy_errata_setup()
361 ksz_port_mmd_write(dev, port, 0x1c, 0x04, 0x00d0); in ksz_phy_errata_setup()
364 ksz_port_mmd_write(dev, port, 0x07, 0x3c, 0x0000); in ksz_phy_errata_setup()
367 ksz_port_mmd_write(dev, port, 0x1c, 0x13, 0x6eff); in ksz_phy_errata_setup()
368 ksz_port_mmd_write(dev, port, 0x1c, 0x14, 0xe6ff); in ksz_phy_errata_setup()
369 ksz_port_mmd_write(dev, port, 0x1c, 0x15, 0x6eff); in ksz_phy_errata_setup()
370 ksz_port_mmd_write(dev, port, 0x1c, 0x16, 0xe6ff); in ksz_phy_errata_setup()
371 ksz_port_mmd_write(dev, port, 0x1c, 0x17, 0x00ff); in ksz_phy_errata_setup()
372 ksz_port_mmd_write(dev, port, 0x1c, 0x18, 0x43ff); in ksz_phy_errata_setup()
373 ksz_port_mmd_write(dev, port, 0x1c, 0x19, 0xc3ff); in ksz_phy_errata_setup()
374 ksz_port_mmd_write(dev, port, 0x1c, 0x1a, 0x6fff); in ksz_phy_errata_setup()
375 ksz_port_mmd_write(dev, port, 0x1c, 0x1b, 0x07ff); in ksz_phy_errata_setup()
376 ksz_port_mmd_write(dev, port, 0x1c, 0x1c, 0x0fff); in ksz_phy_errata_setup()
377 ksz_port_mmd_write(dev, port, 0x1c, 0x1d, 0xe7ff); in ksz_phy_errata_setup()
378 ksz_port_mmd_write(dev, port, 0x1c, 0x1e, 0xefff); in ksz_phy_errata_setup()
379 ksz_port_mmd_write(dev, port, 0x1c, 0x20, 0xeeee); in ksz_phy_errata_setup()
391 static int dm_ksz_mdio_read(struct udevice *dev, int addr, int devad, int reg) in dm_ksz_mdio_read() argument
393 struct ksz_mdio_priv *priv = dev_get_priv(dev); in dm_ksz_mdio_read()
397 ksz_pread16(ksz->dev, addr, 0x100 + (reg << 1), &val); in dm_ksz_mdio_read()
398 dev_dbg(ksz->dev, "%s P%d reg=0x%04x:0x%04x<<0x%04x\n", __func__, in dm_ksz_mdio_read()
404 static int dm_ksz_mdio_write(struct udevice *dev, int addr, int devad, int reg, u16 val) in dm_ksz_mdio_write() argument
406 struct ksz_mdio_priv *priv = dev_get_priv(dev); in dm_ksz_mdio_write()
409 dev_dbg(ksz->dev, "%s P%d reg=0x%04x:%04x>>0x%04x\n", in dm_ksz_mdio_write()
411 ksz_pwrite16(ksz->dev, addr, 0x100 + (reg << 1), val); in dm_ksz_mdio_write()
421 static int ksz_mdio_bind(struct udevice *dev) in ksz_mdio_bind() argument
426 dev_dbg(dev, "%s\n", __func__); in ksz_mdio_bind()
428 device_set_name(dev, name); in ksz_mdio_bind()
433 static int ksz_mdio_probe(struct udevice *dev) in ksz_mdio_probe() argument
435 struct ksz_mdio_priv *priv = dev_get_priv(dev); in ksz_mdio_probe()
437 dev_dbg(dev, "%s\n", __func__); in ksz_mdio_probe()
438 priv->ksz = dev_get_priv(dev->parent); in ksz_mdio_probe()
513 static int ksz_port_setup(struct udevice *dev, int port, in ksz_port_setup() argument
516 struct dsa_pdata *pdata = dev_get_uclass_plat(dev); in ksz_port_setup()
517 struct ksz_dsa_priv *priv = dev_get_priv(dev); in ksz_port_setup()
520 dev_dbg(dev, "%s P%d %s\n", __func__, port + 1, in ksz_port_setup()
526 ksz_phy_errata_setup(dev, port); in ksz_port_setup()
529 ksz_pread8(dev, port, REG_PORT_XMII_CTRL_1, &data8); in ksz_port_setup()
530 dev_dbg(dev, "%s P%d cpu interface %s\n", __func__, port + 1, in ksz_port_setup()
560 ksz_write8(dev, PORT_CTRL_ADDR(port, REG_PORT_XMII_CTRL_1), data8); in ksz_port_setup()
566 static int ksz_port_probe(struct udevice *dev, int port, struct phy_device *phy) in ksz_port_probe() argument
577 static int ksz_port_enable(struct udevice *dev, int port, struct phy_device *phy) in ksz_port_enable() argument
579 struct dsa_pdata *pdata = dev_get_uclass_plat(dev); in ksz_port_enable()
580 struct ksz_dsa_priv *priv = dev_get_priv(dev); in ksz_port_enable()
584 dev_dbg(dev, "%s P%d 0x%x %s\n", __func__, port + 1, phy->phy_id, in ksz_port_enable()
588 ret = ksz_port_setup(dev, port, phy->interface); in ksz_port_enable()
590 dev_err(dev, "port setup failed: %d\n", ret); in ksz_port_enable()
595 ksz_pread8(priv->dev, port, REG_PORT_MSTP_STATE, &data8); in ksz_port_enable()
598 ksz_pwrite8(priv->dev, port, REG_PORT_MSTP_STATE, data8); in ksz_port_enable()
605 ksz_read8(priv->dev, REG_SW_OPERATION, &data8); in ksz_port_enable()
607 ksz_write8(priv->dev, REG_SW_OPERATION, data8); in ksz_port_enable()
612 static void ksz_port_disable(struct udevice *dev, int port, struct phy_device *phy) in ksz_port_disable() argument
614 struct dsa_pdata *pdata = dev_get_uclass_plat(dev); in ksz_port_disable()
615 struct ksz_dsa_priv *priv = dev_get_priv(dev); in ksz_port_disable()
618 dev_dbg(dev, "%s P%d 0x%x\n", __func__, port + 1, phy->phy_id); in ksz_port_disable()
625 ksz_pread8(priv->dev, port, REG_PORT_MSTP_STATE, &data8); in ksz_port_disable()
628 ksz_pwrite8(priv->dev, port, REG_PORT_MSTP_STATE, data8); in ksz_port_disable()
643 static int ksz_probe_mdio(struct udevice *dev) in ksz_probe_mdio() argument
648 mdios = dev_read_subnode(dev, "mdios"); in ksz_probe_mdio()
654 ret = device_bind_driver_to_node(dev, in ksz_probe_mdio()
658 dev_err(dev, "failed to probe %s: %d\n", name, ret); in ksz_probe_mdio()
665 static void ksz_ops_register(struct udevice *dev, struct ksz_phy_ops *ops) in ksz_ops_register() argument
667 struct ksz_dsa_priv *priv = dev_get_priv(dev); in ksz_ops_register()
680 static int ksz_probe(struct udevice *dev) in ksz_probe() argument
682 struct dsa_pdata *pdata = dev_get_uclass_plat(dev); in ksz_probe()
683 struct ksz_dsa_priv *priv = dev_get_priv(dev); in ksz_probe()
689 parent_id = device_get_uclass_id(dev_get_parent(dev)); in ksz_probe()
693 ksz_ops_register(dev, &phy_i2c_ops); in ksz_probe()
695 ret = i2c_set_chip_offset_len(dev, 2); in ksz_probe()
705 ksz_ops_register(dev, &phy_spi_ops); in ksz_probe()
710 dev_err(dev, "invalid parent bus (%s)\n", in ksz_probe()
721 priv->dev = dev; in ksz_probe()
724 ksz_read8(priv->dev, REG_SW_OPERATION, &data8); in ksz_probe()
726 ksz_write8(priv->dev, REG_SW_OPERATION, data8); in ksz_probe()
729 ret = ksz_read32(dev, REG_CHIP_ID0__1, &id); in ksz_probe()
733 dev_dbg(dev, "%s id=0x%08x\n", __func__, id); in ksz_probe()
751 dev_err(dev, "invalid chip id: 0x%08x\n", id); in ksz_probe()
760 ret = ksz_probe_mdio(dev); in ksz_probe()
766 ksz_pread8(priv->dev, i, REG_PORT_MSTP_STATE, &data8); in ksz_probe()
768 ksz_pwrite8(priv->dev, i, REG_PORT_MSTP_STATE, data8); in ksz_probe()