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 <sjg@chromium.org>
This commit is contained in:
Simon Glass 2019-12-29 21:19:25 -07:00
parent cce61fc428
commit dc12ebbbdb
4 changed files with 61 additions and 0 deletions

View file

@ -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";

View file

@ -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 */

View file

@ -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 */

View file

@ -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;