1 /**
2  * Copyright (c) 2025 Basalte bv
3  * SPDX-License-Identifier: Apache-2.0
4  */
5 
6 #include <zephyr/ztest.h>
7 #include <zephyr/nvmem.h>
8 
9 #define consumer0 DT_NODELABEL(test_consumer0)
10 #define nvmem0    DT_ALIAS(nvmem0)
11 
12 static const struct nvmem_cell cell0 = NVMEM_CELL_GET_BY_IDX(consumer0, 0);
13 static const struct nvmem_cell cell10 = NVMEM_CELL_GET_BY_NAME(consumer0, cell10);
14 
ZTEST(nvmem_api,test_nvmem_api)15 ZTEST(nvmem_api, test_nvmem_api)
16 {
17 	uint8_t buf[0x10];
18 	int ret;
19 
20 	zexpect_equal_ptr(cell0.dev, DEVICE_DT_GET(nvmem0));
21 	zexpect_equal(cell0.offset, 0);
22 	zexpect_equal(cell0.size, 0x10);
23 	zexpect_false(cell0.read_only);
24 
25 	zexpect_equal_ptr(cell10.dev, DEVICE_DT_GET(nvmem0));
26 	zexpect_equal(cell10.offset, 0x10);
27 	zexpect_equal(cell10.size, 0x10);
28 	zexpect_true(cell10.read_only);
29 
30 	for (size_t i = 0; i < sizeof(buf); ++i) {
31 		buf[i] = 2 * i;
32 	}
33 
34 	ret = nvmem_cell_write(&cell0, buf, 0, sizeof(buf));
35 	zassert_ok(ret, "Failed to write NVMEM");
36 
37 	memset(buf, 0, sizeof(buf));
38 
39 	ret = nvmem_cell_read(&cell0, buf, 0, sizeof(buf));
40 	zassert_ok(ret, "Failed to read NVMEM");
41 
42 	for (size_t i = 0; i < sizeof(buf); ++i) {
43 		zexpect_equal(buf[i], 2 * i);
44 	}
45 
46 	ret = nvmem_cell_write(&cell10, buf, 0, sizeof(buf));
47 	zassert_equal(ret, -EROFS, "Expected read-only NVMEM");
48 }
49 
ZTEST(nvmem_api,test_nvmem_missing)50 ZTEST(nvmem_api, test_nvmem_missing)
51 {
52 	const struct nvmem_cell missing_idx = NVMEM_CELL_GET_BY_IDX_OR(consumer0, 10, {});
53 	const struct nvmem_cell missing_name = NVMEM_CELL_GET_BY_NAME_OR(consumer0, missing, {});
54 
55 	zassert_is_null(missing_idx.dev);
56 	zassert_is_null(missing_name.dev);
57 }
58 
59 ZTEST_SUITE(nvmem_api, NULL, NULL, NULL, NULL, NULL);
60