/* * Copyright 2021 Google LLC * SPDX-License-Identifier: Apache-2.0 */ #include #include #include #include #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);