diff options
author | YH Lin <yueherngl@google.com> | 2022-11-30 21:44:08 +0000 |
---|---|---|
committer | YH Lin <yueherngl@google.com> | 2022-11-30 21:44:08 +0000 |
commit | af25602b15b22b9ef5821dcba9934311f2157c48 (patch) | |
tree | d0c89ae8814c2ba35c238c6c0644ec6b1602c63a /zephyr/test/drivers/i2c_controller/src/i2c_controller.c | |
parent | 54462f034b635260dd09173b3d082e47fc960ef3 (diff) | |
parent | aa40b859b3a73e5a205bc561c1a29eff38485461 (diff) | |
download | chrome-ec-af25602b15b22b9ef5821dcba9934311f2157c48.tar.gz |
Merge remote-tracking branch cros/main into factory-brya-14517.B-main
Generated by: util/update_release_branch.py --baseboard brya --relevant_paths_file
baseboard/brya/relevant-paths.txt factory-brya-14517.B-main
Relevant changes:
git log --oneline 54462f034b..aa40b859b3 -- baseboard/brya board/agah
board/anahera board/banshee board/brya board/crota board/felwinter
board/gimble board/kano board/mithrax board/osiris board/primus
board/redrix board/taeko board/taniks board/vell board/volmar
driver/bc12/pi3usb9201_public.* driver/charger/bq25710.*
driver/ppc/nx20p348x.* driver/ppc/syv682x_public.*
driver/retimer/bb_retimer_public.* driver/tcpm/nct38xx.*
driver/tcpm/ps8xxx_public.* driver/tcpm/tcpci.* include/power/alderlake*
include/intel_x86.h power/alderlake* power/intel_x86.c
util/getversion.sh
e6da633c38 driver: Sort header files
234a87ae2d tcpci: Add FRS enable to driver structure
a56be59ccd tcpm_header: add test for tcpm_dump_registers
57b3256963 Rename CONFIG_CHARGER_INPUT_CURRENT to _CHARGER_DEFAULT_CURRENT_LIMIT
e420c8ff9a marasov: Modify TypeC and TypeA configuration.
43b53e0045 Add default implementation of board_set_charge_limit
b75dc90677 Add CONFIG_CHARGER_MIN_INPUT_CURRENT_LIMIT
f1b563c350 baseboard: Sort header files
7d01b1e58d driver/retimer/ps8818.h: Add I2C ADDR FLAGS 0x30, 0x58, 0x70
ec31407993 Add CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT
8f89f69a5b crota: disable lid angle sensor for clamshell
BRANCH=None
BUG=b:259002141 b:255184961 b:247100970 b:259354679 b:260630630
BUG=b:163093572 b:254328661
TEST=`emerge-brya chromeos-ec`
Force-Relevant-Builds: all
Change-Id: Ia85a701fbf6b8e67ec214b9e25e0e55e980a6f47
Signed-off-by: YH Lin <yueherngl@google.com>
Diffstat (limited to 'zephyr/test/drivers/i2c_controller/src/i2c_controller.c')
-rw-r--r-- | zephyr/test/drivers/i2c_controller/src/i2c_controller.c | 122 |
1 files changed, 118 insertions, 4 deletions
diff --git a/zephyr/test/drivers/i2c_controller/src/i2c_controller.c b/zephyr/test/drivers/i2c_controller/src/i2c_controller.c index 0beb773297..594c3e6888 100644 --- a/zephyr/test/drivers/i2c_controller/src/i2c_controller.c +++ b/zephyr/test/drivers/i2c_controller/src/i2c_controller.c @@ -2,15 +2,15 @@ * Use of this source code is governed by a BSD-style license that can be * found in the LICENSE file. */ +#include "basic_i2c_device_emul.h" +#include "i2c.h" +#include "test/drivers/test_state.h" + #include <zephyr/device.h> #include <zephyr/fff.h> #include <zephyr/sys/byteorder.h> #include <zephyr/ztest.h> -#include "basic_i2c_device_emul.h" -#include "i2c.h" -#include "test/drivers/test_state.h" - struct i2c_controller_fixture { int port; int addr; @@ -61,6 +61,29 @@ ZTEST_F(i2c_controller, write_read32_be) expected); } +ZTEST_F(i2c_controller, write_read16_be) +{ + uint16_t expected = 0x1122; + int actual; + + zassert_ok(i2c_write16(fixture->port, + fixture->addr | I2C_FLAG_BIG_ENDIAN, 0, + expected)); + + /* Get the first two bytes of the register space as a uint16_t */ + actual = __bswap_16(*((uint16_t *)&fixture->emul_data->regs[0])); + + zassert_equal(expected, actual, "got %04x, expected %08x", actual, + expected); + + /* Now read back through I2C API */ + zassert_ok(i2c_read16(fixture->port, + fixture->addr | I2C_FLAG_BIG_ENDIAN, 0, &actual)); + + zassert_equal(expected, actual, "got %04x, expected %04x", + (uint16_t)actual, expected); +} + ZTEST_F(i2c_controller, read32_fail) { int ret; @@ -98,6 +121,14 @@ ZTEST_F(i2c_controller, field_update16) zassert_equal(set_value, actual, "got %04x, expected %04x", actual, set_value); + + /* Force a failure */ + set_value = 0x0001; + mask = 0x0001; + i2c_common_emul_set_read_fail_reg(&fixture->emul_data->common, 0); + zassert_equal(i2c_field_update16(fixture->port, fixture->addr, 0, mask, + set_value), + EC_ERROR_INVAL); } ZTEST_F(i2c_controller, read_offset16__one_byte) @@ -273,6 +304,89 @@ ZTEST_F(i2c_controller, write_offset16_block) expected); } +ZTEST_F(i2c_controller, pec_disabled) +{ + uint16_t addr_flags; + uint8_t write_data[] = { + 0xAA, + 0xBB, + 0xCC, + 0xDD, + }; + int write_data32 = 0x11223344; + uint8_t read_data[4]; + int actual_read_len; + uint16_t reg = 0x01; + + /* + * Verify I2C reads and writes through the various APIs fail when + * CONFIG_PLATFORM_EC_SMBUS_PEC=n + */ + if (IS_ENABLED(CONFIG_PLATFORM_EC_SMBUS_PEC)) { + ztest_test_skip(); + return; + } + + addr_flags = fixture->addr | I2C_FLAG_PEC; + + zassert_equal(i2c_read32(fixture->port, addr_flags, reg, + (int *)read_data), + EC_ERROR_UNIMPLEMENTED); + zassert_equal(i2c_write32(fixture->port, addr_flags, reg, write_data32), + EC_ERROR_UNIMPLEMENTED); + zassert_equal(i2c_read_sized_block(fixture->port, addr_flags, reg, + read_data, sizeof(read_data), + &actual_read_len), + EC_ERROR_UNIMPLEMENTED); + zassert_equal(i2c_read_sized_block(fixture->port, addr_flags, reg, + read_data, 0, &actual_read_len), + EC_ERROR_INVAL); + zassert_equal(i2c_write_block(fixture->port, addr_flags, reg, + write_data, sizeof(write_data)), + EC_ERROR_UNIMPLEMENTED); +} + +ZTEST_F(i2c_controller, i2c_xfer_unlocked__error_paths) +{ + uint8_t out_buffer[1]; + int out_size; + uint8_t in_buffer[1]; + int in_size; + int flags; + + /* First confirm i2c_xfer_unlocked() works with a lock. */ + out_buffer[0] = 0; + out_size = 1; + in_size = 1; + flags = I2C_XFER_STOP; + + i2c_lock(fixture->port, 1); + zassert_equal(i2c_port_is_locked(fixture->port), 1, + "Port %d not locked", fixture->port); + zassert_ok(i2c_xfer_unlocked(fixture->port, fixture->addr, out_buffer, + out_size, in_buffer, in_size, flags)); + i2c_lock(fixture->port, 0); + zassert_equal(i2c_port_is_locked(fixture->port), 0, "Port %d is locked", + fixture->port); + + /* Try the transfer without a lock. */ + zassert_equal(i2c_xfer_unlocked(fixture->port, fixture->addr, + out_buffer, out_size, in_buffer, + in_size, flags), + EC_ERROR_INVAL); + + /* Set an invalid flag on the transfer, expected to still pass */ + i2c_lock(fixture->port, 1); + zassert_equal(i2c_port_is_locked(fixture->port), 1, + "Port %d not locked", fixture->port); + zassert_ok(i2c_xfer_unlocked( + fixture->port, fixture->addr | I2C_FLAG_ADDR_IS_SPI, out_buffer, + out_size, in_buffer, in_size, flags)); + i2c_lock(fixture->port, 0); + zassert_equal(i2c_port_is_locked(fixture->port), 0, "Port %d is locked", + fixture->port); +} + static struct i2c_controller_fixture i2c_controller_fixture; static void *setup(void) |