summaryrefslogtreecommitdiff
path: root/zephyr
diff options
context:
space:
mode:
authorPeter Marheine <pmarheine@chromium.org>2022-11-10 16:37:09 +1100
committerChromeos LUCI <chromeos-scoped@luci-project-accounts.iam.gserviceaccount.com>2022-11-23 03:58:51 +0000
commitb75dc90677f29424e6f0d63f294dce4b39782135 (patch)
tree17002ffbd6b6f660b1a5a1a1e1911e741fa4ac73 /zephyr
parentf1b563c350acf6a1b687c682f07770aa8210dc01 (diff)
downloadchrome-ec-b75dc90677f29424e6f0d63f294dce4b39782135.tar.gz
Add CONFIG_CHARGER_MIN_INPUT_CURRENT_LIMIT
This splits the dual use of CONFIG_CHARGER_INPUT_CURRENT into two different symbols, changing the uses of that which are used to set a minimum current limit to be CONFIG_CHARGER_MAX_INPUT_CURRENT_LIMIT. Most boards implement this in the same way within either the board or baseboard, so handling of the new option is moved into charge_set_input_current_limit (which is called by every user of the option) and every board which repeated this pattern has the new symbol set to the same value as the old one, with the duplicated code deleted. One functional change to the charge manager is made: when charging stops, the input current limit is set to the default value (CONFIG_CHARGER_INPUT_CURRENT) rather than 0. This captures the intent that the default current is appropriate at any time, which was previously configured by individual boards' implementation of board_set_charge_limit() while still allowing the limit to be set lower as needed. To verify that all changes are appropriate, the following has been manually checked: * All boards with a change to a .c file also have a .h change * All boards without a changed .h file have a changed baseboard.h * For Zephyr projects, those with a changed .c file have config added for the minimum limit and others (only corsola) are unchanged to leave it off. This is intended to verify that each board that duplicated the MAX() logic has its configuration updated to use the shared copy, and that boards with that code in the baseboard also update their configuration. BUG=b:163093572 TEST=make buildall; zmake build -a BRANCH=none LOW_COVERAGE_REASON=added lines will soon be deleted Change-Id: Ia460a16293c1fb82aac3784fd9be57ba0985f2fe Signed-off-by: Peter Marheine <pmarheine@chromium.org> Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/4019703 Reviewed-by: Keith Short <keithshort@chromium.org> Code-Coverage: Zoss <zoss-cl-coverage@prod.google.com>
Diffstat (limited to 'zephyr')
-rw-r--r--zephyr/Kconfig.usbc20
-rw-r--r--zephyr/program/brya/prj.conf1
-rw-r--r--zephyr/program/herobrine/program.conf1
-rw-r--r--zephyr/program/herobrine/src/usbc_config.c3
-rw-r--r--zephyr/program/intelrvp/prj.conf1
-rw-r--r--zephyr/program/intelrvp/src/chg_usb_pd.c3
-rw-r--r--zephyr/program/nissa/program.conf1
-rw-r--r--zephyr/program/nissa/src/common.c3
-rw-r--r--zephyr/program/rex/prj.conf1
-rw-r--r--zephyr/program/rex/src/usbc_config.c3
-rw-r--r--zephyr/program/skyrim/prj.conf1
-rw-r--r--zephyr/program/skyrim/src/usbc_config.c3
-rw-r--r--zephyr/program/trogdor/lazor/prj.conf1
-rw-r--r--zephyr/program/trogdor/lazor/src/usbc_config.c3
-rw-r--r--zephyr/shim/include/config_chip.h6
-rw-r--r--zephyr/test/drivers/bc12_pi3usb9201/src/pi3usb9201.c8
-rw-r--r--zephyr/test/drivers/common/src/stubs.c3
-rw-r--r--zephyr/test/drivers/common_charger/src/test_charge_state_v2.c13
-rw-r--r--zephyr/test/drivers/testcase.yaml1
19 files changed, 60 insertions, 16 deletions
diff --git a/zephyr/Kconfig.usbc b/zephyr/Kconfig.usbc
index 5350c1cbbf..7f65419a4b 100644
--- a/zephyr/Kconfig.usbc
+++ b/zephyr/Kconfig.usbc
@@ -44,6 +44,26 @@ config PLATFORM_EC_CHARGER_INPUT_CURRENT
chargers, this should be set to 512 mA in order to not brown-out
low-current USB charge ports in accordance with USB-PD r3.0 Sec. 7.3
+config PLATFORM_EC_CHARGER_MIN_INPUT_CURRENT_LIMIT
+ int "Minimum charger input current limit in mA"
+ default 0
+ depends on PLATFORM_EC_CHARGE_MANAGER
+ help
+ Minimum current limit in mA that will ever be set for chargers, even if a
+ lower limit is requested.
+
+ If set, this should usually be set to no more than 2.5W divided by the
+ maximum supported input voltage in order to satisfy USB-PD pSnkStdby
+ requirements. Higher values may help devices stay alive under low-battery
+ conditions at the cost of violating standby power limits.
+
+ Many boards set this to large values, since historically this number was
+ usually equal to the default current limit. New boards should avoid doing
+ so if possible, and usually leave this unset: customization of
+ board_set_charge_limit() should be considered instead if a device sometimes
+ requires amounts of power in violation of specs, to limit those violations
+ only to situations where they are necessary.
+
config PLATFORM_EC_CHARGER_INPUT_CURRENT_DERATE_PCT
int "Charger input current derating percentage"
default 0
diff --git a/zephyr/program/brya/prj.conf b/zephyr/program/brya/prj.conf
index e9d35dc0e2..0d248c6487 100644
--- a/zephyr/program/brya/prj.conf
+++ b/zephyr/program/brya/prj.conf
@@ -105,6 +105,7 @@ CONFIG_PLATFORM_EC_CHARGER_BQ25720_VSYS_TH2_CUSTOM=y
CONFIG_PLATFORM_EC_CHARGER_BQ25720_VSYS_TH2_DV=70
CONFIG_PLATFORM_EC_CHARGER_DISCHARGE_ON_AC=y
CONFIG_PLATFORM_EC_CHARGER_DISCHARGE_ON_AC_CHARGER=y
+CONFIG_PLATFORM_EC_CHARGER_MIN_INPUT_CURRENT_LIMIT=512
CONFIG_PLATFORM_EC_CHARGER_MIN_BAT_PCT_FOR_POWER_ON=3
CONFIG_PLATFORM_EC_CHARGER_MIN_BAT_PCT_FOR_POWER_ON_WITH_AC=1
CONFIG_PLATFORM_EC_CHARGER_MIN_POWER_MW_FOR_POWER_ON_WITH_BATT=15000
diff --git a/zephyr/program/herobrine/program.conf b/zephyr/program/herobrine/program.conf
index 60b78f6758..d97919cce1 100644
--- a/zephyr/program/herobrine/program.conf
+++ b/zephyr/program/herobrine/program.conf
@@ -70,6 +70,7 @@ CONFIG_PLATFORM_EC_CHARGER_DISCHARGE_ON_AC=y
CONFIG_PLATFORM_EC_CHARGER_DISCHARGE_ON_AC_CHARGER=y
CONFIG_PLATFORM_EC_CHARGER_MIN_BAT_PCT_FOR_POWER_ON=2
CONFIG_PLATFORM_EC_CHARGER_MIN_POWER_MW_FOR_POWER_ON=12500
+CONFIG_PLATFORM_EC_CHARGER_MIN_INPUT_CURRENT_LIMIT=512
CONFIG_PLATFORM_EC_CHARGER_PROFILE_OVERRIDE=y
CONFIG_PLATFORM_EC_CHARGER_PSYS=y
CONFIG_PLATFORM_EC_CHARGER_PSYS_READ=y
diff --git a/zephyr/program/herobrine/src/usbc_config.c b/zephyr/program/herobrine/src/usbc_config.c
index e757e3f2e1..95301120d8 100644
--- a/zephyr/program/herobrine/src/usbc_config.c
+++ b/zephyr/program/herobrine/src/usbc_config.c
@@ -262,8 +262,7 @@ void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
charge_ma = max_ma;
}
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
uint16_t tcpc_get_alert_status(void)
diff --git a/zephyr/program/intelrvp/prj.conf b/zephyr/program/intelrvp/prj.conf
index 890122f510..9ca19c5071 100644
--- a/zephyr/program/intelrvp/prj.conf
+++ b/zephyr/program/intelrvp/prj.conf
@@ -20,6 +20,7 @@ CONFIG_PLATFORM_EC_BATTERY_SMART=y
CONFIG_PLATFORM_EC_BATTERY_TYPE_NO_AUTO_DETECT=y
CONFIG_PLATFORM_EC_CHARGER_MIN_POWER_MW_FOR_POWER_ON_WITH_BATT=15000
CONFIG_PLATFORM_EC_CHARGER_MIN_POWER_MW_FOR_POWER_ON=15001
+CONFIG_PLATFORM_EC_CHARGER_MIN_INPUT_CURRENT_LIMIT=512
#Power Sequencing
CONFIG_PLATFORM_EC_BOARD_RESET_AFTER_POWER_ON=y
diff --git a/zephyr/program/intelrvp/src/chg_usb_pd.c b/zephyr/program/intelrvp/src/chg_usb_pd.c
index 63a1853b4d..81a44238e4 100644
--- a/zephyr/program/intelrvp/src/chg_usb_pd.c
+++ b/zephyr/program/intelrvp/src/chg_usb_pd.c
@@ -124,6 +124,5 @@ int board_set_active_charge_port(int port)
void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
int charge_mv)
{
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
diff --git a/zephyr/program/nissa/program.conf b/zephyr/program/nissa/program.conf
index 8fd87c94b5..b445c60b6f 100644
--- a/zephyr/program/nissa/program.conf
+++ b/zephyr/program/nissa/program.conf
@@ -129,6 +129,7 @@ CONFIG_PLATFORM_EC_CHARGER_DISCHARGE_ON_AC_CHARGER=y
CONFIG_PLATFORM_EC_OCPC_DEF_DRIVELIMIT_MILLIVOLTS=200
# Assume 4% overdraw, which could be changed with actual characterization
CONFIG_PLATFORM_EC_CHARGER_INPUT_CURRENT_DERATE_PCT=4
+CONFIG_PLATFORM_EC_CHARGER_MIN_INPUT_CURRENT_LIMIT=512
# Reduce logging so that state transitions do not cause protocol issues
# pd dump [1-3] can be used to increase the debugging level
diff --git a/zephyr/program/nissa/src/common.c b/zephyr/program/nissa/src/common.c
index bfcbabcbaa..3600005ae1 100644
--- a/zephyr/program/nissa/src/common.c
+++ b/zephyr/program/nissa/src/common.c
@@ -83,8 +83,7 @@ DECLARE_HOOK(HOOK_INIT, board_setup_init, HOOK_PRIO_INIT_I2C);
__overridable void board_set_charge_limit(int port, int supplier, int charge_ma,
int max_ma, int charge_mv)
{
- int icl = MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT);
- charge_set_input_current_limit(icl, charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
int pd_check_vconn_swap(int port)
diff --git a/zephyr/program/rex/prj.conf b/zephyr/program/rex/prj.conf
index e5900afd54..8b99cc373c 100644
--- a/zephyr/program/rex/prj.conf
+++ b/zephyr/program/rex/prj.conf
@@ -77,6 +77,7 @@ CONFIG_PLATFORM_EC_CHARGER_SENSE_RESISTOR=5
CONFIG_PLATFORM_EC_CHARGER_SENSE_RESISTOR_AC=10
CONFIG_PLATFORM_EC_CHARGER_MIN_POWER_MW_FOR_POWER_ON=30000
CONFIG_PLATFORM_EC_CHARGER_MIN_POWER_MW_FOR_POWER_ON_WITH_BATT=15000
+CONFIG_PLATFORM_EC_CHARGER_MIN_INPUT_CURRENT_LIMIT=512
# USBC
CONFIG_PLATFORM_EC_USBC_PPC=y
diff --git a/zephyr/program/rex/src/usbc_config.c b/zephyr/program/rex/src/usbc_config.c
index 6f09887eed..ed51be6160 100644
--- a/zephyr/program/rex/src/usbc_config.c
+++ b/zephyr/program/rex/src/usbc_config.c
@@ -195,8 +195,7 @@ void bc12_interrupt(enum gpio_signal signal)
void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
int charge_mv)
{
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
static void board_disable_charger_ports(void)
diff --git a/zephyr/program/skyrim/prj.conf b/zephyr/program/skyrim/prj.conf
index 951926f537..4d0ed48e6f 100644
--- a/zephyr/program/skyrim/prj.conf
+++ b/zephyr/program/skyrim/prj.conf
@@ -70,6 +70,7 @@ CONFIG_PLATFORM_EC_BATTERY_REVIVE_DISCONNECT=y
# Charger
CONFIG_PLATFORM_EC_CHARGER_DISCHARGE_ON_AC=y
CONFIG_PLATFORM_EC_CHARGER_INPUT_CURRENT=512
+CONFIG_PLATFORM_EC_CHARGER_MIN_INPUT_CURRENT_LIMIT=512
CONFIG_PLATFORM_EC_CHARGER_ISL9241=y
CONFIG_PLATFORM_EC_CHARGER_SENSE_RESISTOR=10
CONFIG_PLATFORM_EC_CHARGER_SENSE_RESISTOR_AC=20
diff --git a/zephyr/program/skyrim/src/usbc_config.c b/zephyr/program/skyrim/src/usbc_config.c
index 1b728f1cf0..eaa327ff4e 100644
--- a/zephyr/program/skyrim/src/usbc_config.c
+++ b/zephyr/program/skyrim/src/usbc_config.c
@@ -193,8 +193,7 @@ int board_set_active_charge_port(int port)
void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
int charge_mv)
{
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
void sbu_fault_interrupt(enum gpio_signal signal)
diff --git a/zephyr/program/trogdor/lazor/prj.conf b/zephyr/program/trogdor/lazor/prj.conf
index d8cf4009ea..5f29c3f5c2 100644
--- a/zephyr/program/trogdor/lazor/prj.conf
+++ b/zephyr/program/trogdor/lazor/prj.conf
@@ -73,6 +73,7 @@ CONFIG_PLATFORM_EC_CHARGER_DISCHARGE_ON_AC=y
CONFIG_PLATFORM_EC_CHARGER_DISCHARGE_ON_AC_CHARGER=y
CONFIG_PLATFORM_EC_CHARGER_MIN_BAT_PCT_FOR_POWER_ON=2
CONFIG_PLATFORM_EC_CHARGER_MIN_POWER_MW_FOR_POWER_ON=10000
+CONFIG_PLATFORM_EC_CHARGER_MIN_INPUT_CURRENT_LIMIT=512
CONFIG_PLATFORM_EC_CHARGER_PROFILE_OVERRIDE=y
CONFIG_PLATFORM_EC_CHARGER_PSYS=y
CONFIG_PLATFORM_EC_CHARGER_PSYS_READ=y
diff --git a/zephyr/program/trogdor/lazor/src/usbc_config.c b/zephyr/program/trogdor/lazor/src/usbc_config.c
index 9639b556a0..c3860dc005 100644
--- a/zephyr/program/trogdor/lazor/src/usbc_config.c
+++ b/zephyr/program/trogdor/lazor/src/usbc_config.c
@@ -314,8 +314,7 @@ void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
charge_ma = max_ma;
}
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
uint16_t tcpc_get_alert_status(void)
diff --git a/zephyr/shim/include/config_chip.h b/zephyr/shim/include/config_chip.h
index b0c0aa2a47..c0d388b60b 100644
--- a/zephyr/shim/include/config_chip.h
+++ b/zephyr/shim/include/config_chip.h
@@ -1083,6 +1083,12 @@ extern char mock_jump_data[CONFIG_PLATFORM_EC_PRESERVED_END_OF_RAM_SIZE];
#define CONFIG_CHARGER_INPUT_CURRENT CONFIG_PLATFORM_EC_CHARGER_INPUT_CURRENT
#endif
+#undef CONFIG_CHARGER_MIN_INPUT_CURRENT_LIMIT
+#ifdef CONFIG_PLATFORM_EC_CHARGER_MIN_INPUT_CURRENT_LIMIT
+#define CONFIG_CHARGER_MIN_INPUT_CURRENT_LIMIT \
+ CONFIG_PLATFORM_EC_CHARGER_MIN_INPUT_CURRENT_LIMIT
+#endif
+
#undef CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT
#ifdef CONFIG_PLATFORM_EC_CHARGER_INPUT_CURRENT_DERATE_PCT
#define CONFIG_CHARGER_INPUT_CURRENT_DERATE_PCT \
diff --git a/zephyr/test/drivers/bc12_pi3usb9201/src/pi3usb9201.c b/zephyr/test/drivers/bc12_pi3usb9201/src/pi3usb9201.c
index 5d143dcbdb..a384fb1e0a 100644
--- a/zephyr/test/drivers/bc12_pi3usb9201/src/pi3usb9201.c
+++ b/zephyr/test/drivers/bc12_pi3usb9201/src/pi3usb9201.c
@@ -73,7 +73,9 @@ static const struct bc12_status bc12_chg_limits[] = {
[CHG_1_0A] = { .supplier = CHARGE_SUPPLIER_PROPRIETARY,
.current_limit = 1000 },
[CHG_RESERVED] = { .supplier = CHARGE_SUPPLIER_NONE,
- .current_limit = 0 },
+ /* Not charging, limit is set to default */
+ .current_limit =
+ CONFIG_PLATFORM_EC_CHARGER_INPUT_CURRENT },
[CHG_CDP] = { .supplier = CHARGE_SUPPLIER_BC12_CDP,
.current_limit = USB_CHARGER_MAX_CURR_MA },
[CHG_SDP] = { .supplier = CHARGE_SUPPLIER_BC12_SDP,
@@ -209,7 +211,8 @@ test_bc12_pi3usb9201_client_mode(enum pi3usb9201_client_sts detect_result,
NULL);
zassert_equal(charge_manager_get_supplier(), CHARGE_SUPPLIER_NONE,
NULL);
- zassert_equal(charge_manager_get_charger_current(), 0);
+ zassert_equal(charge_manager_get_charger_current(),
+ CONFIG_PLATFORM_EC_CHARGER_INPUT_CURRENT);
zassert_equal(charge_manager_get_charger_voltage(), 0);
}
@@ -258,6 +261,7 @@ ZTEST_USER(bc12, test_bc12_pi3usb9201)
test_bc12_pi3usb9201_host_mode();
for (int c = CHG_OTHER; c <= CHG_DCP; c++) {
+ LOG_INF("Test client mode supplier %d", c);
test_bc12_pi3usb9201_client_mode(
c, bc12_chg_limits[c].supplier,
bc12_chg_limits[c].current_limit);
diff --git a/zephyr/test/drivers/common/src/stubs.c b/zephyr/test/drivers/common/src/stubs.c
index 3cddc5cdfe..2f8ec7a43f 100644
--- a/zephyr/test/drivers/common/src/stubs.c
+++ b/zephyr/test/drivers/common/src/stubs.c
@@ -101,8 +101,7 @@ int board_is_vbus_too_low(int port, enum chg_ramp_vbus_state ramp_state)
void board_set_charge_limit(int port, int supplier, int charge_ma, int max_ma,
int charge_mv)
{
- charge_set_input_current_limit(
- MAX(charge_ma, CONFIG_CHARGER_INPUT_CURRENT), charge_mv);
+ charge_set_input_current_limit(charge_ma, charge_mv);
}
BUILD_ASSERT(CONFIG_USB_PD_PORT_MAX_COUNT == USBC_PORT_COUNT);
diff --git a/zephyr/test/drivers/common_charger/src/test_charge_state_v2.c b/zephyr/test/drivers/common_charger/src/test_charge_state_v2.c
index e1c602e86d..9dfeb5e734 100644
--- a/zephyr/test/drivers/common_charger/src/test_charge_state_v2.c
+++ b/zephyr/test/drivers/common_charger/src/test_charge_state_v2.c
@@ -114,3 +114,16 @@ ZTEST(charge_state_v2, test_current_limit_derating)
CONFIG_PLATFORM_EC_CHARGER_INPUT_CURRENT_DERATE_PCT,
charger_current_limit);
}
+
+ZTEST(charge_state_v2, test_minimum_current_limit)
+{
+ int charger_current_limit;
+
+ charge_set_input_current_limit(50, 5000);
+ zassert_ok(charger_get_input_current_limit(0, &charger_current_limit));
+ zassert_equal(charger_current_limit, 96,
+ "Minimum input current limit should be %d mA,"
+ " but current limit is %d (capped to %d)",
+ 96, charger_current_limit,
+ CONFIG_PLATFORM_EC_CHARGER_MIN_INPUT_CURRENT_LIMIT);
+}
diff --git a/zephyr/test/drivers/testcase.yaml b/zephyr/test/drivers/testcase.yaml
index db341b3048..59456ac5f0 100644
--- a/zephyr/test/drivers/testcase.yaml
+++ b/zephyr/test/drivers/testcase.yaml
@@ -63,6 +63,7 @@ tests:
drivers.common_charger:
extra_configs:
- CONFIG_PLATFORM_EC_CHARGER_INPUT_CURRENT_DERATE_PCT=5
+ - CONFIG_PLATFORM_EC_CHARGER_MIN_INPUT_CURRENT_LIMIT=100
- CONFIG_LINK_TEST_SUITE_COMMON_CHARGER=y
# Set to focus testing for Herobrine
# Config is y only in nissa