tests/kernel/device: Add tests for device deferred init
Ensure that devices are not ready before calling `device_init()`, but are after the call. Signed-off-by: Ederson de Souza <ederson.desouza@intel.com>
This commit is contained in:
parent
eeebb4d911
commit
2febacc60b
4 changed files with 83 additions and 1 deletions
|
@ -52,6 +52,20 @@
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
fakedeferdriver@E7000000 {
|
||||||
|
compatible = "fakedeferdriver";
|
||||||
|
reg = <0xE7000000 0x2000>;
|
||||||
|
status = "okay";
|
||||||
|
zephyr,deferred-init;
|
||||||
|
};
|
||||||
|
|
||||||
|
fakedeferdriver@E8000000 {
|
||||||
|
compatible = "fakedeferdriver";
|
||||||
|
reg = <0xE8000000 0x2000>;
|
||||||
|
status = "okay";
|
||||||
|
zephyr,deferred-init;
|
||||||
|
};
|
||||||
|
|
||||||
fakedomain_0: fakedomain_0 {
|
fakedomain_0: fakedomain_0 {
|
||||||
compatible = "fakedomain";
|
compatible = "fakedomain";
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
|
@ -49,6 +49,20 @@
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
|
||||||
|
fakedeferdriver@E7000000 {
|
||||||
|
compatible = "fakedeferdriver";
|
||||||
|
reg = <0x0 0xE7000000 0x0 0x2000>;
|
||||||
|
status = "okay";
|
||||||
|
zephyr,deferred-init;
|
||||||
|
};
|
||||||
|
|
||||||
|
fakedeferdriver@E8000000 {
|
||||||
|
compatible = "fakedeferdriver";
|
||||||
|
reg = <0x0 0xE8000000 0x0 0x2000>;
|
||||||
|
status = "okay";
|
||||||
|
zephyr,deferred-init;
|
||||||
|
};
|
||||||
|
|
||||||
fakedomain_0: fakedomain_0 {
|
fakedomain_0: fakedomain_0 {
|
||||||
compatible = "fakedomain";
|
compatible = "fakedomain";
|
||||||
status = "okay";
|
status = "okay";
|
||||||
|
|
8
tests/kernel/device/dts/bindings/fakedeferdriver.yml
Normal file
8
tests/kernel/device/dts/bindings/fakedeferdriver.yml
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
# Copyright (c) 2023 Intel Corporation
|
||||||
|
# SPDX-License-Identifier: Apache-2.0
|
||||||
|
|
||||||
|
description: Properties for fake deferred driver.
|
||||||
|
|
||||||
|
compatible: "fakedeferdriver"
|
||||||
|
|
||||||
|
include: base.yaml
|
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
#include <zephyr/kernel.h>
|
#include <zephyr/kernel.h>
|
||||||
#include <zephyr/device.h>
|
#include <zephyr/device.h>
|
||||||
|
#include <zephyr/drivers/gpio.h>
|
||||||
#include <zephyr/init.h>
|
#include <zephyr/init.h>
|
||||||
#include <zephyr/ztest.h>
|
#include <zephyr/ztest.h>
|
||||||
#include <zephyr/sys/printk.h>
|
#include <zephyr/sys/printk.h>
|
||||||
|
@ -21,10 +22,23 @@
|
||||||
#define MY_DRIVER_A "my_driver_A"
|
#define MY_DRIVER_A "my_driver_A"
|
||||||
#define MY_DRIVER_B "my_driver_B"
|
#define MY_DRIVER_B "my_driver_B"
|
||||||
|
|
||||||
|
#define FAKEDEFERDRIVER0 DEVICE_DT_GET(DT_PATH(fakedeferdriver_e7000000))
|
||||||
|
#define FAKEDEFERDRIVER1 DEVICE_DT_GET(DT_PATH(fakedeferdriver_e8000000))
|
||||||
|
|
||||||
/* A device without init call */
|
/* A device without init call */
|
||||||
DEVICE_DEFINE(dummy_noinit, DUMMY_NOINIT, NULL, NULL, NULL, NULL,
|
DEVICE_DEFINE(dummy_noinit, DUMMY_NOINIT, NULL, NULL, NULL, NULL,
|
||||||
POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, NULL);
|
POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, NULL);
|
||||||
|
|
||||||
|
/* To access from userspace, the device needs an API. Use a dummy GPIO one */
|
||||||
|
static const struct gpio_driver_api fakedeferdriverapi;
|
||||||
|
|
||||||
|
/* Fake deferred devices */
|
||||||
|
DEVICE_DT_DEFINE(DT_INST(0, fakedeferdriver), NULL, NULL, NULL, NULL,
|
||||||
|
POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT, NULL);
|
||||||
|
DEVICE_DT_DEFINE(DT_INST(1, fakedeferdriver), NULL, NULL, NULL, NULL,
|
||||||
|
POST_KERNEL, CONFIG_KERNEL_INIT_PRIORITY_DEFAULT,
|
||||||
|
&fakedeferdriverapi);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Test cases to verify device objects
|
* @brief Test cases to verify device objects
|
||||||
*
|
*
|
||||||
|
@ -387,9 +401,41 @@ ZTEST(device, test_abstraction_driver_common)
|
||||||
zassert_true(baz == 2, "common API do_that fail");
|
zassert_true(baz == 2, "common API do_that fail");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ZTEST(device, test_deferred_init)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
zassert_false(device_is_ready(FAKEDEFERDRIVER0));
|
||||||
|
|
||||||
|
ret = device_init(FAKEDEFERDRIVER0);
|
||||||
|
zassert_true(ret == 0);
|
||||||
|
|
||||||
|
zassert_true(device_is_ready(FAKEDEFERDRIVER0));
|
||||||
|
}
|
||||||
|
|
||||||
|
ZTEST_USER(device, test_deferred_init_user)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
zassert_false(device_is_ready(FAKEDEFERDRIVER1));
|
||||||
|
|
||||||
|
ret = device_init(FAKEDEFERDRIVER1);
|
||||||
|
zassert_true(ret == 0);
|
||||||
|
|
||||||
|
zassert_true(device_is_ready(FAKEDEFERDRIVER1));
|
||||||
|
}
|
||||||
|
|
||||||
|
void *user_setup(void)
|
||||||
|
{
|
||||||
|
#ifdef CONFIG_USERSPACE
|
||||||
|
k_object_access_grant(FAKEDEFERDRIVER1, k_current_get());
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @}
|
* @}
|
||||||
*/
|
*/
|
||||||
|
|
||||||
ZTEST_SUITE(device, NULL, NULL, NULL, NULL, NULL);
|
ZTEST_SUITE(device, NULL, user_setup, NULL, NULL, NULL);
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue