Message ID | 20190603094720.23503-2-alexm.osslist@gmail.com |
---|---|
State | Superseded |
Delegated to: | Joe Hershberger |
Headers | show |
Series | [U-Boot,1/2,v2] net: introduce MDIO DM class for MDIO devices | expand |
Hi Alex, On Mon, Jun 3, 2019 at 5:47 PM Alex Marginean <alexm.osslist@gmail.com> wrote: > > A very simple test for DM_MDIO, mimicks a register write/read through the > sandbox bus to a dummy PHY. > > Signed-off-by: Alex Marginean <alexm.osslist@gmail.com> > --- > > Changes in v2: > - new patch, v1 didn't have a test included > > arch/sandbox/dts/test.dts | 4 ++ > configs/sandbox_defconfig | 2 + > drivers/net/Kconfig | 10 +++++ > drivers/net/Makefile | 1 + > drivers/net/mdio_sandbox.c | 92 ++++++++++++++++++++++++++++++++++++++ > test/dm/Makefile | 1 + > test/dm/mdio.c | 48 ++++++++++++++++++++ > 7 files changed, 158 insertions(+) > create mode 100644 drivers/net/mdio_sandbox.c > create mode 100644 test/dm/mdio.c > Reviewed-by: Bin Meng <bmeng.cn@gmail.com> Tested-by: Bin Meng <bmeng.cn@gmail.com> However, please see some nits below. > diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts > index 8b2d6451c6..70b7e4c275 100644 > --- a/arch/sandbox/dts/test.dts > +++ b/arch/sandbox/dts/test.dts > @@ -799,6 +799,10 @@ > dmas = <&dma 0>, <&dma 1>, <&dma 2>; > dma-names = "m2m", "tx0", "rx0"; > }; > + > + mdio-test { > + compatible = "sandbox,mdio_sandbox"; nits: it reads better if we had "sandbox,mdio" > + }; > }; > > #include "sandbox_pmic.dtsi" > diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig > index 4877f1099a..2a00df9807 100644 > --- a/configs/sandbox_defconfig > +++ b/configs/sandbox_defconfig nits: I think we need update all sandbox defconfigs, or just update arch/Kconfig and imply PHYLIB & DM_MDIO there. > @@ -139,7 +139,9 @@ CONFIG_SPI_FLASH_SPANSION=y > CONFIG_SPI_FLASH_STMICRO=y > CONFIG_SPI_FLASH_SST=y > CONFIG_SPI_FLASH_WINBOND=y > +CONFIG_PHYLIB=y > CONFIG_DM_ETH=y > +CONFIG_DM_MDIO=y > CONFIG_NVME=y > CONFIG_PCI=y > CONFIG_DM_PCI=y > diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig > index 6fba5a84dd..635f8d72c2 100644 > --- a/drivers/net/Kconfig > +++ b/drivers/net/Kconfig > @@ -24,6 +24,16 @@ config DM_MDIO > This is currently implemented in net/mdio-uclass.c > Look in include/miiphy.h for details. > > +config MDIO_SANDBOX > + depends on DM_MDIO && SANDBOX > + default y > + bool "Sandbox: Mocked MDIO driver" > + help > + This driver implements dummy read/write/reset MDIO functions mimicking > + a bus with a single PHY. > + > + This driver is used in for testing in test/dm/mdio.c > + > menuconfig NETDEVICES > bool "Network device support" > depends on NET > diff --git a/drivers/net/Makefile b/drivers/net/Makefile > index 8d02a37896..40038427db 100644 > --- a/drivers/net/Makefile > +++ b/drivers/net/Makefile > @@ -77,3 +77,4 @@ obj-y += ti/ > obj-$(CONFIG_MEDIATEK_ETH) += mtk_eth.o > obj-y += mscc_eswitch/ > obj-$(CONFIG_HIGMACV300_ETH) += higmacv300.o > +obj-$(CONFIG_MDIO_SANDBOX) += mdio_sandbox.o > diff --git a/drivers/net/mdio_sandbox.c b/drivers/net/mdio_sandbox.c > new file mode 100644 > index 0000000000..d55a7c4466 > --- /dev/null > +++ b/drivers/net/mdio_sandbox.c > @@ -0,0 +1,92 @@ > +// SPDX-License-Identifier: GPL-2.0+ > +/* > + * (C) Copyright 2019 > + * Alex Marginean, NXP > + */ > + > +#include <dm.h> > +#include <errno.h> > +#include <miiphy.h> > + > +#define SANDBOX_PHY_ADDR 5 > +#define SANDBOX_PHY_REG 0 > + > +struct mdio_sandbox_priv { > + int enabled; > + u16 reg; > +}; > + > +static int mdio_sandbox_read(struct udevice *dev, int addr, int devad, int reg) > +{ > + struct mdio_sandbox_priv *priv = dev_get_priv(dev); > + > + if (!priv->enabled) > + return -ENODEV; > + > + if (addr != SANDBOX_PHY_ADDR) > + return -ENODEV; > + if (devad != MDIO_DEVAD_NONE) > + return -ENODEV; > + if (reg != SANDBOX_PHY_REG) > + return -ENODEV; > + > + return priv->reg; > +} > + > +static int mdio_sandbox_write(struct udevice *dev, int addr, int devad, int reg, > + u16 val) > +{ > + struct mdio_sandbox_priv *priv = dev_get_priv(dev); > + > + if (!priv->enabled) > + return -ENODEV; > + > + if (addr != SANDBOX_PHY_ADDR) > + return -ENODEV; > + if (devad != MDIO_DEVAD_NONE) > + return -ENODEV; > + if (reg != SANDBOX_PHY_REG) > + return -ENODEV; > + > + priv->reg = val; > + > + return 0; > +} > + > +static int mdio_sandbox_reset(struct udevice *dev) > +{ > + struct mdio_sandbox_priv *priv = dev_get_priv(dev); > + > + priv->reg = 0; > + > + return 0; > +} > + > +static const struct mdio_ops mdio_sandbox_ops = { > + .read = mdio_sandbox_read, > + .write = mdio_sandbox_write, > + .reset = mdio_sandbox_reset, > +}; > + > +int mdio_sandbox_probe(struct udevice *dev) This should be static. > +{ > + struct mdio_sandbox_priv *priv = dev_get_priv(dev); > + > + priv->enabled = 1; > + > + return 0; > +} > + > +static const struct udevice_id mdio_sandbox_ids[] = { > + { .compatible = "sandbox,mdio_sandbox" }, > + { } > +}; > + > +U_BOOT_DRIVER(mdio_sandbox) = { > + .name = "mdio_sandbox", > + .id = UCLASS_MDIO, > + .of_match = mdio_sandbox_ids, > + .probe = mdio_sandbox_probe, > + .ops = &mdio_sandbox_ops, > + .priv_auto_alloc_size = sizeof(struct mdio_sandbox_priv), > +}; > diff --git a/test/dm/Makefile b/test/dm/Makefile > index 49857c5092..3f042e3ab4 100644 > --- a/test/dm/Makefile > +++ b/test/dm/Makefile > @@ -60,4 +60,5 @@ obj-$(CONFIG_SOUND) += sound.o > obj-$(CONFIG_TEE) += tee.o > obj-$(CONFIG_VIRTIO_SANDBOX) += virtio.o > obj-$(CONFIG_DMA) += dma.o > +obj-$(CONFIG_DM_MDIO) += mdio.o > endif > diff --git a/test/dm/mdio.c b/test/dm/mdio.c > new file mode 100644 > index 0000000000..aabb8c2d52 > --- /dev/null > +++ b/test/dm/mdio.c > @@ -0,0 +1,48 @@ > +// SPDX-License-Identifier: GPL-2.0+ > +/* > + * (C) Copyright 2019 > + * Alex Marginean, NXP > + */ > + > +#include <common.h> > +#include <dm.h> > +#include <dm/test.h> > +#include <misc.h> > +#include <test/ut.h> > +#include <miiphy.h> > + > +/* macros copied over from mdio_sandbox.c */ > +#define SANDBOX_PHY_ADDR 5 > +#define SANDBOX_PHY_REG 0 > + > +#define TEST_REG_VALUE 0xabcd > + > +static int dm_test_mdio(struct unit_test_state *uts) > +{ > + struct uclass *uc; > + struct udevice *dev; > + struct mdio_ops *ops; > + u16 reg; > + > + ut_assertok(uclass_get(UCLASS_MDIO, &uc)); > + > + ut_assertok(uclass_get_device_by_name(UCLASS_MDIO, "mdio-test", &dev)); > + > + ops = mdio_get_ops(dev); > + ut_assertnonnull(ops); > + ut_assertnonnull(ops->read); > + ut_assertnonnull(ops->write); > + > + ut_assertok(ops->write(dev, SANDBOX_PHY_ADDR, MDIO_DEVAD_NONE, > + SANDBOX_PHY_REG, TEST_REG_VALUE)); > + reg = ops->read(dev, SANDBOX_PHY_ADDR, MDIO_DEVAD_NONE, > + SANDBOX_PHY_REG); > + ut_asserteq(reg, TEST_REG_VALUE); > + > + ut_assert(ops->read(dev, SANDBOX_PHY_ADDR + 1, MDIO_DEVAD_NONE, > + SANDBOX_PHY_REG) != 0); Please add a test for ops->reset. > + > + return 0; > +} > + > +DM_TEST(dm_test_mdio, DM_TESTF_SCAN_FDT); > -- Regards, Bin
Hi Bin, On 6/3/2019 3:52 PM, Bin Meng wrote: > Hi Alex, > > On Mon, Jun 3, 2019 at 5:47 PM Alex Marginean <alexm.osslist@gmail.com> wrote: >> >> A very simple test for DM_MDIO, mimicks a register write/read through the >> sandbox bus to a dummy PHY. >> >> Signed-off-by: Alex Marginean <alexm.osslist@gmail.com> >> --- >> >> Changes in v2: >> - new patch, v1 didn't have a test included >> >> arch/sandbox/dts/test.dts | 4 ++ >> configs/sandbox_defconfig | 2 + >> drivers/net/Kconfig | 10 +++++ >> drivers/net/Makefile | 1 + >> drivers/net/mdio_sandbox.c | 92 ++++++++++++++++++++++++++++++++++++++ >> test/dm/Makefile | 1 + >> test/dm/mdio.c | 48 ++++++++++++++++++++ >> 7 files changed, 158 insertions(+) >> create mode 100644 drivers/net/mdio_sandbox.c >> create mode 100644 test/dm/mdio.c >> > > Reviewed-by: Bin Meng <bmeng.cn@gmail.com> > Tested-by: Bin Meng <bmeng.cn@gmail.com> > > However, please see some nits below. Thank you for the review, I'll send a v3 for these later today. Alex > >> diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts >> index 8b2d6451c6..70b7e4c275 100644 >> --- a/arch/sandbox/dts/test.dts >> +++ b/arch/sandbox/dts/test.dts >> @@ -799,6 +799,10 @@ >> dmas = <&dma 0>, <&dma 1>, <&dma 2>; >> dma-names = "m2m", "tx0", "rx0"; >> }; >> + >> + mdio-test { >> + compatible = "sandbox,mdio_sandbox"; > > nits: it reads better if we had "sandbox,mdio" > >> + }; >> }; >> >> #include "sandbox_pmic.dtsi" >> diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig >> index 4877f1099a..2a00df9807 100644 >> --- a/configs/sandbox_defconfig >> +++ b/configs/sandbox_defconfig > > nits: I think we need update all sandbox defconfigs, or just update > arch/Kconfig and imply PHYLIB & DM_MDIO there. > >> @@ -139,7 +139,9 @@ CONFIG_SPI_FLASH_SPANSION=y >> CONFIG_SPI_FLASH_STMICRO=y >> CONFIG_SPI_FLASH_SST=y >> CONFIG_SPI_FLASH_WINBOND=y >> +CONFIG_PHYLIB=y >> CONFIG_DM_ETH=y >> +CONFIG_DM_MDIO=y >> CONFIG_NVME=y >> CONFIG_PCI=y >> CONFIG_DM_PCI=y >> diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig >> index 6fba5a84dd..635f8d72c2 100644 >> --- a/drivers/net/Kconfig >> +++ b/drivers/net/Kconfig >> @@ -24,6 +24,16 @@ config DM_MDIO >> This is currently implemented in net/mdio-uclass.c >> Look in include/miiphy.h for details. >> >> +config MDIO_SANDBOX >> + depends on DM_MDIO && SANDBOX >> + default y >> + bool "Sandbox: Mocked MDIO driver" >> + help >> + This driver implements dummy read/write/reset MDIO functions mimicking >> + a bus with a single PHY. >> + >> + This driver is used in for testing in test/dm/mdio.c >> + >> menuconfig NETDEVICES >> bool "Network device support" >> depends on NET >> diff --git a/drivers/net/Makefile b/drivers/net/Makefile >> index 8d02a37896..40038427db 100644 >> --- a/drivers/net/Makefile >> +++ b/drivers/net/Makefile >> @@ -77,3 +77,4 @@ obj-y += ti/ >> obj-$(CONFIG_MEDIATEK_ETH) += mtk_eth.o >> obj-y += mscc_eswitch/ >> obj-$(CONFIG_HIGMACV300_ETH) += higmacv300.o >> +obj-$(CONFIG_MDIO_SANDBOX) += mdio_sandbox.o >> diff --git a/drivers/net/mdio_sandbox.c b/drivers/net/mdio_sandbox.c >> new file mode 100644 >> index 0000000000..d55a7c4466 >> --- /dev/null >> +++ b/drivers/net/mdio_sandbox.c >> @@ -0,0 +1,92 @@ >> +// SPDX-License-Identifier: GPL-2.0+ >> +/* >> + * (C) Copyright 2019 >> + * Alex Marginean, NXP >> + */ >> + >> +#include <dm.h> >> +#include <errno.h> >> +#include <miiphy.h> >> + >> +#define SANDBOX_PHY_ADDR 5 >> +#define SANDBOX_PHY_REG 0 >> + >> +struct mdio_sandbox_priv { >> + int enabled; >> + u16 reg; >> +}; >> + >> +static int mdio_sandbox_read(struct udevice *dev, int addr, int devad, int reg) >> +{ >> + struct mdio_sandbox_priv *priv = dev_get_priv(dev); >> + >> + if (!priv->enabled) >> + return -ENODEV; >> + >> + if (addr != SANDBOX_PHY_ADDR) >> + return -ENODEV; >> + if (devad != MDIO_DEVAD_NONE) >> + return -ENODEV; >> + if (reg != SANDBOX_PHY_REG) >> + return -ENODEV; >> + >> + return priv->reg; >> +} >> + >> +static int mdio_sandbox_write(struct udevice *dev, int addr, int devad, int reg, >> + u16 val) >> +{ >> + struct mdio_sandbox_priv *priv = dev_get_priv(dev); >> + >> + if (!priv->enabled) >> + return -ENODEV; >> + >> + if (addr != SANDBOX_PHY_ADDR) >> + return -ENODEV; >> + if (devad != MDIO_DEVAD_NONE) >> + return -ENODEV; >> + if (reg != SANDBOX_PHY_REG) >> + return -ENODEV; >> + >> + priv->reg = val; >> + >> + return 0; >> +} >> + >> +static int mdio_sandbox_reset(struct udevice *dev) >> +{ >> + struct mdio_sandbox_priv *priv = dev_get_priv(dev); >> + >> + priv->reg = 0; >> + >> + return 0; >> +} >> + >> +static const struct mdio_ops mdio_sandbox_ops = { >> + .read = mdio_sandbox_read, >> + .write = mdio_sandbox_write, >> + .reset = mdio_sandbox_reset, >> +}; >> + >> +int mdio_sandbox_probe(struct udevice *dev) > > This should be static. > >> +{ >> + struct mdio_sandbox_priv *priv = dev_get_priv(dev); >> + >> + priv->enabled = 1; >> + >> + return 0; >> +} >> + >> +static const struct udevice_id mdio_sandbox_ids[] = { >> + { .compatible = "sandbox,mdio_sandbox" }, >> + { } >> +}; >> + >> +U_BOOT_DRIVER(mdio_sandbox) = { >> + .name = "mdio_sandbox", >> + .id = UCLASS_MDIO, >> + .of_match = mdio_sandbox_ids, >> + .probe = mdio_sandbox_probe, >> + .ops = &mdio_sandbox_ops, >> + .priv_auto_alloc_size = sizeof(struct mdio_sandbox_priv), >> +}; >> diff --git a/test/dm/Makefile b/test/dm/Makefile >> index 49857c5092..3f042e3ab4 100644 >> --- a/test/dm/Makefile >> +++ b/test/dm/Makefile >> @@ -60,4 +60,5 @@ obj-$(CONFIG_SOUND) += sound.o >> obj-$(CONFIG_TEE) += tee.o >> obj-$(CONFIG_VIRTIO_SANDBOX) += virtio.o >> obj-$(CONFIG_DMA) += dma.o >> +obj-$(CONFIG_DM_MDIO) += mdio.o >> endif >> diff --git a/test/dm/mdio.c b/test/dm/mdio.c >> new file mode 100644 >> index 0000000000..aabb8c2d52 >> --- /dev/null >> +++ b/test/dm/mdio.c >> @@ -0,0 +1,48 @@ >> +// SPDX-License-Identifier: GPL-2.0+ >> +/* >> + * (C) Copyright 2019 >> + * Alex Marginean, NXP >> + */ >> + >> +#include <common.h> >> +#include <dm.h> >> +#include <dm/test.h> >> +#include <misc.h> >> +#include <test/ut.h> >> +#include <miiphy.h> >> + >> +/* macros copied over from mdio_sandbox.c */ >> +#define SANDBOX_PHY_ADDR 5 >> +#define SANDBOX_PHY_REG 0 >> + >> +#define TEST_REG_VALUE 0xabcd >> + >> +static int dm_test_mdio(struct unit_test_state *uts) >> +{ >> + struct uclass *uc; >> + struct udevice *dev; >> + struct mdio_ops *ops; >> + u16 reg; >> + >> + ut_assertok(uclass_get(UCLASS_MDIO, &uc)); >> + >> + ut_assertok(uclass_get_device_by_name(UCLASS_MDIO, "mdio-test", &dev)); >> + >> + ops = mdio_get_ops(dev); >> + ut_assertnonnull(ops); >> + ut_assertnonnull(ops->read); >> + ut_assertnonnull(ops->write); >> + >> + ut_assertok(ops->write(dev, SANDBOX_PHY_ADDR, MDIO_DEVAD_NONE, >> + SANDBOX_PHY_REG, TEST_REG_VALUE)); >> + reg = ops->read(dev, SANDBOX_PHY_ADDR, MDIO_DEVAD_NONE, >> + SANDBOX_PHY_REG); >> + ut_asserteq(reg, TEST_REG_VALUE); >> + >> + ut_assert(ops->read(dev, SANDBOX_PHY_ADDR + 1, MDIO_DEVAD_NONE, >> + SANDBOX_PHY_REG) != 0); > > Please add a test for ops->reset. > >> + >> + return 0; >> +} >> + >> +DM_TEST(dm_test_mdio, DM_TESTF_SCAN_FDT); >> -- > > Regards, > Bin >
diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts index 8b2d6451c6..70b7e4c275 100644 --- a/arch/sandbox/dts/test.dts +++ b/arch/sandbox/dts/test.dts @@ -799,6 +799,10 @@ dmas = <&dma 0>, <&dma 1>, <&dma 2>; dma-names = "m2m", "tx0", "rx0"; }; + + mdio-test { + compatible = "sandbox,mdio_sandbox"; + }; }; #include "sandbox_pmic.dtsi" diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig index 4877f1099a..2a00df9807 100644 --- a/configs/sandbox_defconfig +++ b/configs/sandbox_defconfig @@ -139,7 +139,9 @@ CONFIG_SPI_FLASH_SPANSION=y CONFIG_SPI_FLASH_STMICRO=y CONFIG_SPI_FLASH_SST=y CONFIG_SPI_FLASH_WINBOND=y +CONFIG_PHYLIB=y CONFIG_DM_ETH=y +CONFIG_DM_MDIO=y CONFIG_NVME=y CONFIG_PCI=y CONFIG_DM_PCI=y diff --git a/drivers/net/Kconfig b/drivers/net/Kconfig index 6fba5a84dd..635f8d72c2 100644 --- a/drivers/net/Kconfig +++ b/drivers/net/Kconfig @@ -24,6 +24,16 @@ config DM_MDIO This is currently implemented in net/mdio-uclass.c Look in include/miiphy.h for details. +config MDIO_SANDBOX + depends on DM_MDIO && SANDBOX + default y + bool "Sandbox: Mocked MDIO driver" + help + This driver implements dummy read/write/reset MDIO functions mimicking + a bus with a single PHY. + + This driver is used in for testing in test/dm/mdio.c + menuconfig NETDEVICES bool "Network device support" depends on NET diff --git a/drivers/net/Makefile b/drivers/net/Makefile index 8d02a37896..40038427db 100644 --- a/drivers/net/Makefile +++ b/drivers/net/Makefile @@ -77,3 +77,4 @@ obj-y += ti/ obj-$(CONFIG_MEDIATEK_ETH) += mtk_eth.o obj-y += mscc_eswitch/ obj-$(CONFIG_HIGMACV300_ETH) += higmacv300.o +obj-$(CONFIG_MDIO_SANDBOX) += mdio_sandbox.o diff --git a/drivers/net/mdio_sandbox.c b/drivers/net/mdio_sandbox.c new file mode 100644 index 0000000000..d55a7c4466 --- /dev/null +++ b/drivers/net/mdio_sandbox.c @@ -0,0 +1,92 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * (C) Copyright 2019 + * Alex Marginean, NXP + */ + +#include <dm.h> +#include <errno.h> +#include <miiphy.h> + +#define SANDBOX_PHY_ADDR 5 +#define SANDBOX_PHY_REG 0 + +struct mdio_sandbox_priv { + int enabled; + u16 reg; +}; + +static int mdio_sandbox_read(struct udevice *dev, int addr, int devad, int reg) +{ + struct mdio_sandbox_priv *priv = dev_get_priv(dev); + + if (!priv->enabled) + return -ENODEV; + + if (addr != SANDBOX_PHY_ADDR) + return -ENODEV; + if (devad != MDIO_DEVAD_NONE) + return -ENODEV; + if (reg != SANDBOX_PHY_REG) + return -ENODEV; + + return priv->reg; +} + +static int mdio_sandbox_write(struct udevice *dev, int addr, int devad, int reg, + u16 val) +{ + struct mdio_sandbox_priv *priv = dev_get_priv(dev); + + if (!priv->enabled) + return -ENODEV; + + if (addr != SANDBOX_PHY_ADDR) + return -ENODEV; + if (devad != MDIO_DEVAD_NONE) + return -ENODEV; + if (reg != SANDBOX_PHY_REG) + return -ENODEV; + + priv->reg = val; + + return 0; +} + +static int mdio_sandbox_reset(struct udevice *dev) +{ + struct mdio_sandbox_priv *priv = dev_get_priv(dev); + + priv->reg = 0; + + return 0; +} + +static const struct mdio_ops mdio_sandbox_ops = { + .read = mdio_sandbox_read, + .write = mdio_sandbox_write, + .reset = mdio_sandbox_reset, +}; + +int mdio_sandbox_probe(struct udevice *dev) +{ + struct mdio_sandbox_priv *priv = dev_get_priv(dev); + + priv->enabled = 1; + + return 0; +} + +static const struct udevice_id mdio_sandbox_ids[] = { + { .compatible = "sandbox,mdio_sandbox" }, + { } +}; + +U_BOOT_DRIVER(mdio_sandbox) = { + .name = "mdio_sandbox", + .id = UCLASS_MDIO, + .of_match = mdio_sandbox_ids, + .probe = mdio_sandbox_probe, + .ops = &mdio_sandbox_ops, + .priv_auto_alloc_size = sizeof(struct mdio_sandbox_priv), +}; diff --git a/test/dm/Makefile b/test/dm/Makefile index 49857c5092..3f042e3ab4 100644 --- a/test/dm/Makefile +++ b/test/dm/Makefile @@ -60,4 +60,5 @@ obj-$(CONFIG_SOUND) += sound.o obj-$(CONFIG_TEE) += tee.o obj-$(CONFIG_VIRTIO_SANDBOX) += virtio.o obj-$(CONFIG_DMA) += dma.o +obj-$(CONFIG_DM_MDIO) += mdio.o endif diff --git a/test/dm/mdio.c b/test/dm/mdio.c new file mode 100644 index 0000000000..aabb8c2d52 --- /dev/null +++ b/test/dm/mdio.c @@ -0,0 +1,48 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * (C) Copyright 2019 + * Alex Marginean, NXP + */ + +#include <common.h> +#include <dm.h> +#include <dm/test.h> +#include <misc.h> +#include <test/ut.h> +#include <miiphy.h> + +/* macros copied over from mdio_sandbox.c */ +#define SANDBOX_PHY_ADDR 5 +#define SANDBOX_PHY_REG 0 + +#define TEST_REG_VALUE 0xabcd + +static int dm_test_mdio(struct unit_test_state *uts) +{ + struct uclass *uc; + struct udevice *dev; + struct mdio_ops *ops; + u16 reg; + + ut_assertok(uclass_get(UCLASS_MDIO, &uc)); + + ut_assertok(uclass_get_device_by_name(UCLASS_MDIO, "mdio-test", &dev)); + + ops = mdio_get_ops(dev); + ut_assertnonnull(ops); + ut_assertnonnull(ops->read); + ut_assertnonnull(ops->write); + + ut_assertok(ops->write(dev, SANDBOX_PHY_ADDR, MDIO_DEVAD_NONE, + SANDBOX_PHY_REG, TEST_REG_VALUE)); + reg = ops->read(dev, SANDBOX_PHY_ADDR, MDIO_DEVAD_NONE, + SANDBOX_PHY_REG); + ut_asserteq(reg, TEST_REG_VALUE); + + ut_assert(ops->read(dev, SANDBOX_PHY_ADDR + 1, MDIO_DEVAD_NONE, + SANDBOX_PHY_REG) != 0); + + return 0; +} + +DM_TEST(dm_test_mdio, DM_TESTF_SCAN_FDT);
A very simple test for DM_MDIO, mimicks a register write/read through the sandbox bus to a dummy PHY. Signed-off-by: Alex Marginean <alexm.osslist@gmail.com> --- Changes in v2: - new patch, v1 didn't have a test included arch/sandbox/dts/test.dts | 4 ++ configs/sandbox_defconfig | 2 + drivers/net/Kconfig | 10 +++++ drivers/net/Makefile | 1 + drivers/net/mdio_sandbox.c | 92 ++++++++++++++++++++++++++++++++++++++ test/dm/Makefile | 1 + test/dm/mdio.c | 48 ++++++++++++++++++++ 7 files changed, 158 insertions(+) create mode 100644 drivers/net/mdio_sandbox.c create mode 100644 test/dm/mdio.c