From: Dinesh Maniyam Date: Wed, 6 Aug 2025 04:32:29 +0000 (+0800) Subject: drivers: i3c: Add i3c sandbox simple test. X-Git-Tag: v2025.10-rc2~14^2~6 X-Git-Url: http://git.openpandora.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=ca4c92cbffff17ca071774feba849db1b6319220;p=pandora-u-boot.git drivers: i3c: Add i3c sandbox simple test. Add s simple test for the I3C uclass in sandbox. Signed-off-by: Dinesh Maniyam --- diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts index bb696c5ef7f..a2c739a2044 100644 --- a/arch/sandbox/dts/test.dts +++ b/arch/sandbox/dts/test.dts @@ -936,6 +936,14 @@ }; }; + i3c0 { + compatible = "sandbox,i3c"; + }; + + i3c1 { + compatible = "sandbox,i3c"; + }; + bootcount@0 { compatible = "u-boot,bootcount-rtc"; rtc = <&rtc_1>; diff --git a/drivers/i3c/Kconfig b/drivers/i3c/Kconfig index d4451057de0..d877a744353 100644 --- a/drivers/i3c/Kconfig +++ b/drivers/i3c/Kconfig @@ -14,6 +14,12 @@ menuconfig I3C If you want I3C support, you should say Y here and also to the specific driver for your bus adapter(s) below. +config I3C_SANDBOX + bool "Enable support for the sandbox I3C" + help + This is a sandbox I3C used for testing. It provides 2 interfaces and + records the settings passed into it. + if I3C source "drivers/i3c/master/Kconfig" diff --git a/drivers/i3c/Makefile b/drivers/i3c/Makefile index 5ddc4743c86..d38d2350c9a 100644 --- a/drivers/i3c/Makefile +++ b/drivers/i3c/Makefile @@ -2,3 +2,4 @@ obj-y := i3c-uclass.o device.o master.o obj-y += master/ +obj-$(CONFIG_I3C_SANDBOX) += sandbox_i3c.o diff --git a/drivers/i3c/sandbox_i3c.c b/drivers/i3c/sandbox_i3c.c new file mode 100644 index 00000000000..e452e982566 --- /dev/null +++ b/drivers/i3c/sandbox_i3c.c @@ -0,0 +1,56 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2025 Altera Corporation + */ + +#include +#include +#include +#include + +struct sandbox_i3c_priv { + struct i3c_priv_xfer i3c_xfers; +}; + +static int sandbox_i3c_priv_read(struct udevice *dev, u32 dev_number, + u8 *buf, u32 buf_size) +{ + struct sandbox_i3c_priv *priv = dev_get_priv(dev); + struct i3c_priv_xfer i3c_xfers; + + i3c_xfers = priv->i3c_xfers; + i3c_xfers.data.in = buf; + i3c_xfers.len = buf_size; + + return 0; +} + +static int sandbox_i3c_priv_write(struct udevice *dev, u32 dev_number, + u8 *buf, u32 buf_size) +{ + struct sandbox_i3c_priv *priv = dev_get_priv(dev); + struct i3c_priv_xfer i3c_xfers; + + i3c_xfers = priv->i3c_xfers; + i3c_xfers.data.out = buf; + i3c_xfers.len = buf_size; + + return 0; +} + +static const struct dm_i3c_ops sandbox_i3c_ops = { + .read = sandbox_i3c_priv_read, + .write = sandbox_i3c_priv_write, +}; + +static const struct udevice_id sandbox_i3c_ids[] = { + { .compatible = "sandbox,i3c" }, + { } +}; + +U_BOOT_DRIVER(i3c_sandbox) = { + .name = "i3c_sandbox", + .id = UCLASS_I3C, + .of_match = sandbox_i3c_ids, + .ops = &sandbox_i3c_ops, +}; diff --git a/test/dm/Makefile b/test/dm/Makefile index d15859eca30..474e77a2151 100644 --- a/test/dm/Makefile +++ b/test/dm/Makefile @@ -58,6 +58,7 @@ obj-$(CONFIG_FWU_MDATA_GPT_BLK) += fwu_mdata.o obj-$(CONFIG_SANDBOX) += host.o obj-$(CONFIG_DM_HWSPINLOCK) += hwspinlock.o obj-$(CONFIG_DM_I2C) += i2c.o +obj-$(CONFIG_I3C) += i3c.o obj-$(CONFIG_SOUND) += i2s.o obj-$(CONFIG_CLK_K210_SET_RATE) += k210_pll.o obj-$(CONFIG_IOMMU) += iommu.o diff --git a/test/dm/i3c.c b/test/dm/i3c.c new file mode 100644 index 00000000000..81336e67555 --- /dev/null +++ b/test/dm/i3c.c @@ -0,0 +1,34 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (C) 2025 Altera Corporation + */ + +#include +#include +#include +#include + +DECLARE_GLOBAL_DATA_PTR; + +/* Basic test of the i3c uclass */ +static int dm_test_i3c_base(struct unit_test_state *uts) +{ + struct udevice *dev; + + ut_assertok(uclass_get_device(UCLASS_I3C, 0, &dev)); + ut_assertok(dm_i3c_read(dev, 0, NULL, 1)); + ut_assertok(dm_i3c_read(dev, 0, NULL, 4)); + ut_assertok(dm_i3c_write(dev, 0, "AABB", 2)); + ut_assertok(dm_i3c_write(dev, 0, "AABBCCDD", 4)); + + ut_assertok(uclass_get_device(UCLASS_I3C, 1, &dev)); + ut_assertok(dm_i3c_read(dev, 1, NULL, 1)); + ut_assertok(dm_i3c_read(dev, 1, NULL, 4)); + ut_assertok(dm_i3c_write(dev, 1, "AABB", 2)); + ut_assertok(dm_i3c_write(dev, 1, "AABBCCDD", 4)); + + ut_asserteq(-ENODEV, uclass_get_device(UCLASS_I3C, 2, &dev)); + + return 0; +} +DM_TEST(dm_test_i3c_base, UTF_SCAN_PDATA | UTF_SCAN_FDT);