blob: d78d45368d1ff2cff0f05ac4ea8e26626a761e12 [file] [log] [blame]
/*
* 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);