mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-06-13 15:03:58 +03:00
dm: i2c: EEPROM simulator allow tests visibility of addr and offset
Improve i2c EEPROM simulator testing by providing access functions to check the previous chip addr and offset. Given that we can now directly test the offsets, also simplified the offset mapping and allow for wrapping acceses. Signed-off-by: Robert Beckett <bob.beckett@collabora.com> Reviewed-by: Heiko Schocher <hs@denx.de>
This commit is contained in:
committed by
Heiko Schocher
parent
85968522b9
commit
22e93511be
@@ -15,6 +15,7 @@
|
||||
#include <dm/test.h>
|
||||
#include <dm/uclass-internal.h>
|
||||
#include <dm/util.h>
|
||||
#include <hexdump.h>
|
||||
#include <test/ut.h>
|
||||
|
||||
static const int busnum;
|
||||
@@ -185,35 +186,54 @@ static int dm_test_i2c_offset(struct unit_test_state *uts)
|
||||
ut_assertok(i2c_set_chip_offset_len(dev, 0));
|
||||
ut_assertok(dm_i2c_write(dev, 10 /* ignored */, (uint8_t *)"AB", 2));
|
||||
ut_assertok(dm_i2c_read(dev, 0, buf, 5));
|
||||
ut_assertok(memcmp(buf, "AB\0\0\0\0", sizeof(buf)));
|
||||
ut_asserteq_mem("AB\0\0\0\0", buf, sizeof(buf));
|
||||
ut_asserteq(0, sanbox_i2c_eeprom_get_prev_offset(eeprom));
|
||||
|
||||
/* Offset length 1 */
|
||||
sandbox_i2c_eeprom_set_offset_len(eeprom, 1);
|
||||
ut_assertok(i2c_set_chip_offset_len(dev, 1));
|
||||
ut_assertok(dm_i2c_write(dev, 2, (uint8_t *)"AB", 2));
|
||||
ut_asserteq(2, sanbox_i2c_eeprom_get_prev_offset(eeprom));
|
||||
ut_assertok(dm_i2c_read(dev, 0, buf, 5));
|
||||
ut_assertok(memcmp(buf, "ABAB\0", sizeof(buf)));
|
||||
ut_asserteq_mem("ABAB\0", buf, sizeof(buf));
|
||||
ut_asserteq(0, sanbox_i2c_eeprom_get_prev_offset(eeprom));
|
||||
|
||||
/* Offset length 2 boundary - check model wrapping */
|
||||
sandbox_i2c_eeprom_set_offset_len(eeprom, 2);
|
||||
ut_assertok(i2c_set_chip_offset_len(dev, 2));
|
||||
ut_assertok(dm_i2c_write(dev, 0xFF, (uint8_t *)"A", 1));
|
||||
ut_asserteq(0xFF, sanbox_i2c_eeprom_get_prev_offset(eeprom));
|
||||
ut_assertok(dm_i2c_write(dev, 0x100, (uint8_t *)"B", 1));
|
||||
ut_asserteq(0x100, sanbox_i2c_eeprom_get_prev_offset(eeprom));
|
||||
ut_assertok(dm_i2c_write(dev, 0x101, (uint8_t *)"C", 1));
|
||||
ut_asserteq(0x101, sanbox_i2c_eeprom_get_prev_offset(eeprom));
|
||||
ut_assertok(dm_i2c_read(dev, 0xFF, buf, 5));
|
||||
ut_asserteq_mem("ABCAB", buf, sizeof(buf));
|
||||
ut_asserteq(0xFF, sanbox_i2c_eeprom_get_prev_offset(eeprom));
|
||||
|
||||
/* Offset length 2 */
|
||||
sandbox_i2c_eeprom_set_offset_len(eeprom, 2);
|
||||
ut_assertok(i2c_set_chip_offset_len(dev, 2));
|
||||
ut_assertok(dm_i2c_write(dev, 0x210, (uint8_t *)"AB", 2));
|
||||
ut_assertok(dm_i2c_read(dev, 0x210, buf, 5));
|
||||
ut_assertok(memcmp(buf, "AB\0\0\0", sizeof(buf)));
|
||||
ut_assertok(dm_i2c_write(dev, 0x2020, (uint8_t *)"AB", 2));
|
||||
ut_assertok(dm_i2c_read(dev, 0x2020, buf, 5));
|
||||
ut_asserteq_mem("AB\0\0\0", buf, sizeof(buf));
|
||||
ut_asserteq(0x2020, sanbox_i2c_eeprom_get_prev_offset(eeprom));
|
||||
|
||||
/* Offset length 3 */
|
||||
sandbox_i2c_eeprom_set_offset_len(eeprom, 2);
|
||||
ut_assertok(i2c_set_chip_offset_len(dev, 2));
|
||||
ut_assertok(dm_i2c_write(dev, 0x410, (uint8_t *)"AB", 2));
|
||||
ut_assertok(dm_i2c_read(dev, 0x410, buf, 5));
|
||||
ut_assertok(memcmp(buf, "AB\0\0\0", sizeof(buf)));
|
||||
sandbox_i2c_eeprom_set_offset_len(eeprom, 3);
|
||||
ut_assertok(i2c_set_chip_offset_len(dev, 3));
|
||||
ut_assertok(dm_i2c_write(dev, 0x303030, (uint8_t *)"AB", 2));
|
||||
ut_assertok(dm_i2c_read(dev, 0x303030, buf, 5));
|
||||
ut_asserteq_mem("AB\0\0\0", buf, sizeof(buf));
|
||||
ut_asserteq(0x303030, sanbox_i2c_eeprom_get_prev_offset(eeprom));
|
||||
|
||||
/* Offset length 4 */
|
||||
sandbox_i2c_eeprom_set_offset_len(eeprom, 2);
|
||||
ut_assertok(i2c_set_chip_offset_len(dev, 2));
|
||||
ut_assertok(dm_i2c_write(dev, 0x420, (uint8_t *)"AB", 2));
|
||||
ut_assertok(dm_i2c_read(dev, 0x420, buf, 5));
|
||||
ut_assertok(memcmp(buf, "AB\0\0\0", sizeof(buf)));
|
||||
sandbox_i2c_eeprom_set_offset_len(eeprom, 4);
|
||||
ut_assertok(i2c_set_chip_offset_len(dev, 4));
|
||||
ut_assertok(dm_i2c_write(dev, 0x40404040, (uint8_t *)"AB", 2));
|
||||
ut_assertok(dm_i2c_read(dev, 0x40404040, buf, 5));
|
||||
ut_asserteq_mem("AB\0\0\0", buf, sizeof(buf));
|
||||
ut_asserteq(0x40404040, sanbox_i2c_eeprom_get_prev_offset(eeprom));
|
||||
|
||||
/* Restore defaults */
|
||||
sandbox_i2c_eeprom_set_offset_len(eeprom, 1);
|
||||
|
||||
Reference in New Issue
Block a user