// 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_CNT	2

#define TEST_REG_VALUE		0xabcd

static int dm_test_mdio_mux(struct unit_test_state *uts)
{
	struct uclass *uc;
	struct udevice *mux;
	struct udevice *mdio_ch0, *mdio_ch1, *mdio;
	struct mdio_ops *ops, *ops_parent;
	struct mdio_mux_ops *mmops;
	u16 reg;

	ut_assertok(uclass_get(UCLASS_MDIO_MUX, &uc));

	ut_assertok(uclass_get_device_by_name(UCLASS_MDIO_MUX, "mdio-mux-test",
					      &mux));

	ut_assertok(uclass_get_device_by_name(UCLASS_MDIO, "mdio-ch-test@0",
					      &mdio_ch0));
	ut_assertok(uclass_get_device_by_name(UCLASS_MDIO, "mdio-ch-test@1",
					      &mdio_ch1));

	ut_assertok(uclass_get_device_by_name(UCLASS_MDIO, "mdio-test", &mdio));

	ops = mdio_get_ops(mdio_ch0);
	ut_assertnonnull(ops);
	ut_assertnonnull(ops->read);
	ut_assertnonnull(ops->write);

	mmops = mdio_mux_get_ops(mux);
	ut_assertnonnull(mmops);
	ut_assertnonnull(mmops->select);

	ops_parent = mdio_get_ops(mdio);
	ut_assertnonnull(ops);
	ut_assertnonnull(ops->read);

	/*
	 * mux driver sets last register on the emulated PHY whenever a group
	 * is selected to the selection #.  Just reading that register from
	 * either of the child buses should return the id of the child bus
	 */
	reg = ops->read(mdio_ch0, SANDBOX_PHY_ADDR, MDIO_DEVAD_NONE,
			SANDBOX_PHY_REG_CNT - 1);
	ut_asserteq(reg, 0);

	reg = ops->read(mdio_ch1, SANDBOX_PHY_ADDR, MDIO_DEVAD_NONE,
			SANDBOX_PHY_REG_CNT - 1);
	ut_asserteq(reg, 1);

	mmops->select(mux, MDIO_MUX_SELECT_NONE, 5);
	reg = ops_parent->read(mdio, SANDBOX_PHY_ADDR, MDIO_DEVAD_NONE,
			SANDBOX_PHY_REG_CNT - 1);
	ut_asserteq(reg, 5);

	mmops->deselect(mux, 5);
	reg = ops_parent->read(mdio, SANDBOX_PHY_ADDR, MDIO_DEVAD_NONE,
			SANDBOX_PHY_REG_CNT - 1);
	ut_asserteq(reg, (u16)MDIO_MUX_SELECT_NONE);

	return 0;
}

DM_TEST(dm_test_mdio_mux, DM_TESTF_SCAN_FDT);
