From dc12ebbbdb765153805d2b17d18edf5fe0813d5a Mon Sep 17 00:00:00 2001 From: Simon Glass Date: Sun, 29 Dec 2019 21:19:25 -0700 Subject: [PATCH] dm: test: Add a test driver for devres Add a driver which does devres allocations so that we can write tests for devres. Signed-off-by: Simon Glass --- arch/sandbox/dts/test.dts | 4 ++++ include/dm/uclass-id.h | 1 + include/test/test.h | 9 ++++++++ test/dm/test-fdt.c | 47 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 61 insertions(+) diff --git a/arch/sandbox/dts/test.dts b/arch/sandbox/dts/test.dts index 57513a449f..3aef40d5ca 100644 --- a/arch/sandbox/dts/test.dts +++ b/arch/sandbox/dts/test.dts @@ -201,6 +201,10 @@ compatible = "denx,u-boot-fdt-test1"; }; + devres-test { + compatible = "denx,u-boot-devres-test"; + }; + clocks { clk_fixed: clk-fixed { compatible = "fixed-clock"; diff --git a/include/dm/uclass-id.h b/include/dm/uclass-id.h index c1bab17ad1..c9f49df3f2 100644 --- a/include/dm/uclass-id.h +++ b/include/dm/uclass-id.h @@ -19,6 +19,7 @@ enum uclass_id { UCLASS_TEST_BUS, UCLASS_TEST_PROBE, UCLASS_TEST_DUMMY, + UCLASS_TEST_DEVRES, UCLASS_SPI_EMUL, /* sandbox SPI device emulator */ UCLASS_I2C_EMUL, /* sandbox I2C device emulator */ UCLASS_I2C_EMUL_PARENT, /* parent for I2C device emulators */ diff --git a/include/test/test.h b/include/test/test.h index 98fbcd11f6..5977c59d3f 100644 --- a/include/test/test.h +++ b/include/test/test.h @@ -46,5 +46,14 @@ struct unit_test { .func = _name, \ } +/* Sizes for devres tests */ +enum { + TEST_DEVRES_SIZE = 100, + TEST_DEVRES_COUNT = 10, + TEST_DEVRES_TOTAL = TEST_DEVRES_SIZE * TEST_DEVRES_COUNT, + + /* A different size */ + TEST_DEVRES_SIZE2 = 15, +}; #endif /* __TEST_TEST_H */ diff --git a/test/dm/test-fdt.c b/test/dm/test-fdt.c index 1fb8b5c248..bbac37761d 100644 --- a/test/dm/test-fdt.c +++ b/test/dm/test-fdt.c @@ -153,6 +153,53 @@ UCLASS_DRIVER(testprobe) = { .flags = DM_UC_FLAG_SEQ_ALIAS, }; +struct dm_testdevres_pdata { + void *ptr; +}; + +struct dm_testdevres_priv { + void *ptr; +}; + +static int testdevres_drv_bind(struct udevice *dev) +{ + struct dm_testdevres_pdata *pdata = dev_get_platdata(dev); + + pdata->ptr = devm_kmalloc(dev, TEST_DEVRES_SIZE, 0); + + return 0; +} + +static int testdevres_drv_probe(struct udevice *dev) +{ + struct dm_testdevres_priv *priv = dev_get_priv(dev); + + priv->ptr = devm_kmalloc(dev, TEST_DEVRES_SIZE2, 0); + + return 0; +} + +static const struct udevice_id testdevres_ids[] = { + { .compatible = "denx,u-boot-devres-test" }, + { } +}; + +U_BOOT_DRIVER(testdevres_drv) = { + .name = "testdevres_drv", + .of_match = testdevres_ids, + .id = UCLASS_TEST_DEVRES, + .bind = testdevres_drv_bind, + .probe = testdevres_drv_probe, + .platdata_auto_alloc_size = sizeof(struct dm_testdevres_pdata), + .priv_auto_alloc_size = sizeof(struct dm_testdevres_priv), +}; + +UCLASS_DRIVER(testdevres) = { + .name = "testdevres", + .id = UCLASS_TEST_DEVRES, + .flags = DM_UC_FLAG_SEQ_ALIAS, +}; + int dm_check_devices(struct unit_test_state *uts, int num_devices) { struct udevice *dev; -- 2.25.1