| /* |
| * Copyright 2021 Google LLC |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #include <zephyr/device.h> |
| #include <zephyr/drivers/bbram.h> |
| #include <string.h> |
| #include <zephyr/ztest.h> |
| |
| #define BBRAM_NODELABEL DT_NODELABEL(bbram) |
| #define BBRAM_SIZE DT_PROP(BBRAM_NODELABEL, size) |
| |
| ZTEST(bbram, test_get_size) |
| { |
| const struct device *const dev = DEVICE_DT_GET(BBRAM_NODELABEL); |
| size_t size; |
| |
| zassert_true(device_is_ready(dev), "Device is not ready"); |
| |
| zassert_ok(bbram_get_size(dev, &size)); |
| zassert_equal(size, BBRAM_SIZE); |
| } |
| |
| ZTEST(bbram, test_bbram_out_of_bounds) |
| { |
| const struct device *const dev = DEVICE_DT_GET(BBRAM_NODELABEL); |
| uint8_t buffer[BBRAM_SIZE]; |
| |
| zassert_equal(bbram_read(dev, 0, 0, buffer), -EFAULT); |
| zassert_equal(bbram_read(dev, 0, BBRAM_SIZE + 1, buffer), -EFAULT); |
| zassert_equal(bbram_read(dev, BBRAM_SIZE - 1, 2, buffer), -EFAULT); |
| zassert_equal(bbram_write(dev, 0, 0, buffer), -EFAULT); |
| zassert_equal(bbram_write(dev, 0, BBRAM_SIZE + 1, buffer), -EFAULT); |
| zassert_equal(bbram_write(dev, BBRAM_SIZE - 1, 2, buffer), -EFAULT); |
| } |
| |
| ZTEST(bbram, test_read_write) |
| { |
| const struct device *const dev = DEVICE_DT_GET(BBRAM_NODELABEL); |
| uint8_t buffer[BBRAM_SIZE]; |
| uint8_t expected[BBRAM_SIZE]; |
| |
| for (int i = 0; i < BBRAM_SIZE; ++i) { |
| expected[i] = i; |
| } |
| /* Set and verify content. */ |
| zassert_ok(bbram_write(dev, 0, BBRAM_SIZE, expected)); |
| zassert_ok(bbram_read(dev, 0, BBRAM_SIZE, buffer)); |
| zassert_mem_equal(buffer, expected, BBRAM_SIZE, NULL); |
| } |
| |
| ZTEST(bbram, test_set_invalid) |
| { |
| const struct device *const dev = DEVICE_DT_GET(BBRAM_NODELABEL); |
| |
| zassert_equal(bbram_check_invalid(dev), 0); |
| zassert_ok(bbram_emul_set_invalid(dev, true)); |
| zassert_equal(bbram_check_invalid(dev), 1); |
| zassert_equal(bbram_check_invalid(dev), 0); |
| } |
| |
| ZTEST(bbram, test_set_standby) |
| { |
| const struct device *const dev = DEVICE_DT_GET(BBRAM_NODELABEL); |
| |
| zassert_equal(bbram_check_standby_power(dev), 0); |
| zassert_ok(bbram_emul_set_standby_power_state(dev, true)); |
| zassert_equal(bbram_check_standby_power(dev), 1); |
| zassert_equal(bbram_check_standby_power(dev), 0); |
| } |
| |
| ZTEST(bbram, test_set_power) |
| { |
| const struct device *const dev = DEVICE_DT_GET(BBRAM_NODELABEL); |
| |
| zassert_equal(bbram_check_power(dev), 0); |
| zassert_ok(bbram_emul_set_power_state(dev, true)); |
| zassert_equal(bbram_check_power(dev), 1); |
| zassert_equal(bbram_check_power(dev), 0); |
| } |
| |
| ZTEST(bbram, test_reset_invalid_on_read) |
| { |
| const struct device *const dev = DEVICE_DT_GET(BBRAM_NODELABEL); |
| uint8_t buffer[BBRAM_SIZE]; |
| |
| zassert_ok(bbram_emul_set_invalid(dev, true)); |
| zassert_equal(bbram_read(dev, 0, BBRAM_SIZE, buffer), -EFAULT); |
| zassert_equal(bbram_check_invalid(dev), 0); |
| } |
| |
| ZTEST(bbram, test_reset_invalid_on_write) |
| { |
| const struct device *const dev = DEVICE_DT_GET(BBRAM_NODELABEL); |
| uint8_t buffer[BBRAM_SIZE]; |
| |
| zassert_ok(bbram_emul_set_invalid(dev, true)); |
| zassert_equal(bbram_write(dev, 0, BBRAM_SIZE, buffer), -EFAULT); |
| zassert_equal(bbram_check_invalid(dev), 0); |
| } |
| |
| static void before(void *data) |
| { |
| ARG_UNUSED(data); |
| const struct device *const dev = DEVICE_DT_GET(BBRAM_NODELABEL); |
| |
| bbram_emul_set_invalid(dev, false); |
| bbram_emul_set_standby_power_state(dev, false); |
| bbram_emul_set_power_state(dev, false); |
| } |
| |
| ZTEST_SUITE(bbram, NULL, NULL, before, NULL, NULL); |