summaryrefslogtreecommitdiff
path: root/zephyr/program/rex/src
diff options
context:
space:
mode:
Diffstat (limited to 'zephyr/program/rex/src')
-rw-r--r--zephyr/program/rex/src/board_power.c61
-rw-r--r--zephyr/program/rex/src/usb_pd_policy.c77
-rw-r--r--zephyr/program/rex/src/usbc_config.c292
3 files changed, 0 insertions, 430 deletions
diff --git a/zephyr/program/rex/src/board_power.c b/zephyr/program/rex/src/board_power.c
deleted file mode 100644
index 655edaa452..0000000000
--- a/zephyr/program/rex/src/board_power.c
+++ /dev/null
@@ -1,61 +0,0 @@
-/* Copyright 2022 The ChromiumOS Authors
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "gpio/gpio.h"
-#include "gpio_signal.h"
-
-#include <zephyr/drivers/gpio.h>
-#include <zephyr/logging/log.h>
-
-#include <ap_power/ap_power.h>
-#include <ap_power/ap_power_events.h>
-#include <ap_power/ap_power_interface.h>
-#include <ap_power_override_functions.h>
-#include <power_signals.h>
-#include <x86_power_signals.h>
-
-LOG_MODULE_DECLARE(ap_pwrseq, LOG_LEVEL_INF);
-
-#if CONFIG_X86_NON_DSX_PWRSEQ_MTL
-#define X86_NON_DSX_MTL_FORCE_SHUTDOWN_TO_MS 50
-
-void board_ap_power_force_shutdown(void)
-{
- int timeout_ms = X86_NON_DSX_MTL_FORCE_SHUTDOWN_TO_MS;
-
- /* Turn off PCH_RMSRST to meet tPCH12 */
- power_signal_set(PWR_EC_PCH_RSMRST, 0);
-
- /* Turn off PRIM load switch. */
- power_signal_set(PWR_EN_PP3300_A, 0);
-
- /* Wait RSMRST to be off. */
- while (power_signal_get(PWR_RSMRST) && (timeout_ms > 0)) {
- k_msleep(1);
- timeout_ms--;
- };
-
- if (power_signal_get(PWR_RSMRST)) {
- LOG_WRN("RSMRST_ODL didn't go low! Assuming G3.");
- }
-}
-
-void board_ap_power_action_g3_s5(void)
-{
- /* Turn on the PP3300_PRIM rail. */
- power_signal_set(PWR_EN_PP3300_A, 1);
-
- if (!power_wait_signals_timeout(
- IN_PGOOD_ALL_CORE,
- AP_PWRSEQ_DT_VALUE(wait_signal_timeout))) {
- ap_power_ev_send_callbacks(AP_POWER_PRE_INIT);
- }
-}
-
-bool board_ap_power_check_power_rails_enabled(void)
-{
- return power_signal_get(PWR_EN_PP3300_A);
-}
-#endif /* CONFIG_X86_NON_DSX_PWRSEQ_MTL */
diff --git a/zephyr/program/rex/src/usb_pd_policy.c b/zephyr/program/rex/src/usb_pd_policy.c
deleted file mode 100644
index 7c78c4ebae..0000000000
--- a/zephyr/program/rex/src/usb_pd_policy.c
+++ /dev/null
@@ -1,77 +0,0 @@
-/* Copyright 2022 The ChromiumOS Authors
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-/* Shared USB-C policy for Rex boards */
-
-#include "charge_manager.h"
-#include "chipset.h"
-#include "common.h"
-#include "compile_time_macros.h"
-#include "console.h"
-#include "ec_commands.h"
-#include "ioexpander.h"
-#include "system.h"
-#include "usb_mux.h"
-#include "usb_pd.h"
-#include "usbc_ppc.h"
-#include "util.h"
-
-#include <zephyr/drivers/gpio.h>
-
-int pd_check_vconn_swap(int port)
-{
- /* Allow VCONN swaps if the AP is on. */
- return chipset_in_state(CHIPSET_STATE_ANY_SUSPEND | CHIPSET_STATE_ON);
-}
-
-void pd_power_supply_reset(int port)
-{
- /* Disable VBUS. */
- ppc_vbus_source_enable(port, 0);
-
- /* Enable discharge if we were previously sourcing 5V */
- if (IS_ENABLED(CONFIG_USB_PD_DISCHARGE))
- pd_set_vbus_discharge(port, 1);
-
- /* Notify host of power info change. */
- pd_send_host_event(PD_EVENT_POWER_CHANGE);
-}
-
-int pd_set_power_supply_ready(int port)
-{
- int rv;
-
- /* Disable charging. */
- rv = ppc_vbus_sink_enable(port, 0);
- if (rv)
- return rv;
-
- if (IS_ENABLED(CONFIG_USB_PD_DISCHARGE)) {
- pd_set_vbus_discharge(port, 0);
- }
-
- /* Provide Vbus. */
- rv = ppc_vbus_source_enable(port, 1);
- if (rv) {
- return rv;
- }
-
- /* Notify host of power info change. */
- pd_send_host_event(PD_EVENT_POWER_CHANGE);
-
- return EC_SUCCESS;
-}
-
-/* Used by Vbus discharge common code with CONFIG_USB_PD_DISCHARGE */
-int board_vbus_source_enabled(int port)
-{
- return tcpm_get_src_ctrl(port);
-}
-
-/* Used by USB charger task with CONFIG_USB_PD_5V_EN_CUSTOM */
-int board_is_sourcing_vbus(int port)
-{
- return board_vbus_source_enabled(port);
-}
diff --git a/zephyr/program/rex/src/usbc_config.c b/zephyr/program/rex/src/usbc_config.c
deleted file mode 100644
index df260f6730..0000000000
--- a/zephyr/program/rex/src/usbc_config.c
+++ /dev/null
@@ -1,292 +0,0 @@
-/* Copyright 2022 The ChromiumOS Authors
- * Use of this source code is governed by a BSD-style license that can be
- * found in the LICENSE file.
- */
-
-#include "battery_fuel_gauge.h"
-#include "charge_manager.h"
-#include "charge_ramp.h"
-#include "charge_state.h"
-#include "charge_state_v2.h"
-#include "charger.h"
-#include "driver/charger/isl9241.h"
-#include "driver/ppc/nx20p348x.h"
-#include "driver/retimer/bb_retimer_public.h"
-#include "driver/tcpm/nct38xx.h"
-#include "driver/tcpm/ps8xxx_public.h"
-#include "driver/tcpm/tcpci.h"
-#include "gpio/gpio_int.h"
-#include "hooks.h"
-#include "i2c.h"
-#include "ioexpander.h"
-#include "ppc/syv682x_public.h"
-#include "system.h"
-#include "task.h"
-#include "usb_mux.h"
-#include "usbc_ppc.h"
-
-#include <zephyr/drivers/gpio.h>
-
-#define CPRINTSUSB(format, args...) cprints(CC_USBCHARGE, format, ##args)
-#define CPRINTFUSB(format, args...) cprintf(CC_USBCHARGE, format, ##args)
-
-/*******************************************************************/
-/* USB-C Configuration Start */
-
-/* USB-C ports */
-enum usbc_port { USBC_PORT_C0 = 0, USBC_PORT_C1, USBC_PORT_COUNT };
-BUILD_ASSERT(USBC_PORT_COUNT == CONFIG_USB_PD_PORT_MAX_COUNT);
-
-static void usbc_interrupt_init(void)
-{
- /* Only reset TCPC if not sysjump */
- if (!system_jumped_late()) {
- board_reset_pd_mcu();
- }
-
- /* Enable PPC interrupts. */
- gpio_enable_dt_interrupt(GPIO_INT_FROM_NODELABEL(int_usb_c0_ppc));
- gpio_enable_dt_interrupt(GPIO_INT_FROM_NODELABEL(int_usb_c1_ppc));
-
- /* Enable TCPC interrupts. */
- gpio_enable_dt_interrupt(GPIO_INT_FROM_NODELABEL(int_usb_c0_tcpc));
- gpio_enable_dt_interrupt(GPIO_INT_FROM_NODELABEL(int_usb_c1_tcpc));
-
- /* Enable BC 1.2 interrupts */
- gpio_enable_dt_interrupt(GPIO_INT_FROM_NODELABEL(int_usb_c0_bc12));
- gpio_enable_dt_interrupt(GPIO_INT_FROM_NODELABEL(int_usb_c1_bc12));
-
- /* Enable SBU fault interrupts */
- gpio_enable_dt_interrupt(GPIO_INT_FROM_NODELABEL(int_usb_c0_sbu_fault));
-}
-DECLARE_HOOK(HOOK_INIT, usbc_interrupt_init, HOOK_PRIO_POST_I2C);
-
-void board_overcurrent_event(int port, int is_overcurrented)
-{
- /*
- * TODO: Meteorlake PCH does not use Physical GPIO for over current
- * error, hence Send 'Over Current Virtual Wire' eSPI signal.
- */
-}
-
-void sbu_fault_interrupt(enum gpio_signal signal)
-{
- int port = USBC_PORT_C0;
-
- CPRINTSUSB("C%d: SBU fault", port);
- pd_handle_overcurrent(port);
-}
-
-void tcpc_alert_event(enum gpio_signal signal)
-{
- int port;
-
- switch (signal) {
- case GPIO_USB_C0_TCPC_INT_ODL:
- port = 0;
- break;
- case GPIO_USB_C1_TCPC_INT_ODL:
- port = 1;
- break;
- default:
- return;
- }
-
- schedule_deferred_pd_interrupt(port);
-}
-
-static void reset_nct38xx_port(int port)
-{
- const struct gpio_dt_spec *reset_gpio_l;
- const struct device *ioex_port0, *ioex_port1;
-
- /* TODO(b/225189538): Save and restore ioex signals */
- if (port == USBC_PORT_C0) {
- reset_gpio_l = GPIO_DT_FROM_NODELABEL(gpio_usb_c0_tcpc_rst_odl);
- ioex_port0 = DEVICE_DT_GET(DT_NODELABEL(ioex_c0_port0));
- ioex_port1 = DEVICE_DT_GET(DT_NODELABEL(ioex_c0_port1));
- } else {
- /* Invalid port: do nothing */
- return;
- }
-
- gpio_pin_set_dt(reset_gpio_l, 0);
- msleep(NCT38XX_RESET_HOLD_DELAY_MS);
- gpio_pin_set_dt(reset_gpio_l, 1);
- nct38xx_reset_notify(port);
- if (NCT3807_RESET_POST_DELAY_MS != 0) {
- msleep(NCT3807_RESET_POST_DELAY_MS);
- }
-
- /* Re-enable the IO expander pins */
- gpio_reset_port(ioex_port0);
- gpio_reset_port(ioex_port1);
-}
-
-void board_reset_pd_mcu(void)
-{
- /* Reset TCPC0 */
- reset_nct38xx_port(USBC_PORT_C0);
-
- /* Reset TCPC1 */
- gpio_pin_set_dt(GPIO_DT_FROM_NODELABEL(gpio_usb_c1_rt_rst_r_odl), 0);
- msleep(PS8XXX_RESET_DELAY_MS);
- gpio_pin_set_dt(GPIO_DT_FROM_NODELABEL(gpio_usb_c1_rt_rst_r_odl), 1);
- msleep(PS8815_FW_INIT_DELAY_MS);
-}
-
-uint16_t tcpc_get_alert_status(void)
-{
- uint16_t status = 0;
- const struct gpio_dt_spec *tcpc_c0_rst_l;
- const struct gpio_dt_spec *tcpc_c0_int_l;
- const struct gpio_dt_spec *tcpc_c1_rst_l;
- const struct gpio_dt_spec *tcpc_c1_int_l;
-
- tcpc_c0_rst_l = GPIO_DT_FROM_NODELABEL(gpio_usb_c0_tcpc_rst_odl);
- tcpc_c0_int_l = GPIO_DT_FROM_NODELABEL(gpio_usb_c0_tcpc_int_odl);
-
- tcpc_c1_rst_l = GPIO_DT_FROM_NODELABEL(gpio_usb_c1_rt_rst_r_odl);
- tcpc_c1_int_l = GPIO_DT_FROM_NODELABEL(gpio_usb_c1_tcpc_int_odl);
-
- /*
- * Check which port has the ALERT line set and ignore if that TCPC has
- * its reset line active.
- */
- if (!gpio_pin_get_dt(tcpc_c0_int_l) && gpio_pin_get_dt(tcpc_c0_rst_l)) {
- status |= PD_STATUS_TCPC_ALERT_0;
- }
-
- if (!gpio_pin_get_dt(tcpc_c1_int_l) && gpio_pin_get_dt(tcpc_c1_rst_l)) {
- status |= PD_STATUS_TCPC_ALERT_1;
- }
-
- return status;
-}
-
-void ppc_interrupt(enum gpio_signal signal)
-{
- switch (signal) {
- case GPIO_USB_C0_PPC_INT_ODL:
- syv682x_interrupt(USBC_PORT_C0);
- break;
- case GPIO_USB_C1_PPC_INT_ODL:
- nx20p348x_interrupt(USBC_PORT_C1);
- break;
- default:
- break;
- }
-}
-
-void bc12_interrupt(enum gpio_signal signal)
-{
- switch (signal) {
- case GPIO_USB_C0_BC12_INT_ODL:
- usb_charger_task_set_event(0, USB_CHG_EVENT_BC12);
- break;
- case GPIO_USB_C1_BC12_INT_ODL:
- usb_charger_task_set_event(1, USB_CHG_EVENT_BC12);
- break;
- default:
- break;
- }
-}
-
-static void board_disable_charger_ports(void)
-{
- int i;
-
- CPRINTSUSB("Disabling all charger ports");
-
- /* Disable all ports. */
- for (i = 0; i < ppc_cnt; i++) {
- /*
- * If this port had booted in dead battery mode, go
- * ahead and reset it so EN_SNK responds properly.
- */
- if (nct38xx_get_boot_type(i) == NCT38XX_BOOT_DEAD_BATTERY) {
- reset_nct38xx_port(i);
- pd_set_error_recovery(i);
- }
-
- /*
- * Do not return early if one fails otherwise we can
- * get into a boot loop assertion failure.
- */
- if (ppc_vbus_sink_enable(i, 0)) {
- CPRINTSUSB("Disabling C%d as sink failed.", i);
- }
- }
-}
-
-int board_set_active_charge_port(int port)
-{
- int is_valid_port = (port >= 0 && port < CONFIG_USB_PD_PORT_MAX_COUNT);
- int i;
- int rv;
-
- if (port == CHARGE_PORT_NONE) {
- board_disable_charger_ports();
- return EC_SUCCESS;
- } else if (!is_valid_port) {
- return EC_ERROR_INVAL;
- }
-
- /*
- * Check if we can reset any ports in dead battery mode
- *
- * The NCT3807 may continue to keep EN_SNK low on the dead battery port
- * and allow a dangerous level of voltage to pass through to the initial
- * charge port (see b/183660105). We must reset the ports if we have
- * sufficient battery to do so, which will bring EN_SNK back under
- * normal control.
- */
- rv = EC_SUCCESS;
- if (port == USBC_PORT_C0 &&
- nct38xx_get_boot_type(port) == NCT38XX_BOOT_DEAD_BATTERY) {
- /* Handle dead battery boot case */
- CPRINTSUSB("Found dead battery on C0");
- /*
- * If we have battery, get this port reset ASAP.
- * This means temporarily rejecting charge manager
- * sets to it.
- */
- if (pd_is_battery_capable()) {
- reset_nct38xx_port(port);
- pd_set_error_recovery(port);
- }
- }
-
- if (rv != EC_SUCCESS) {
- return rv;
- }
-
- /* Check if the port is sourcing VBUS. */
- if (tcpm_get_src_ctrl(port)) {
- CPRINTSUSB("Skip enable C%d", port);
- return EC_ERROR_INVAL;
- }
-
- CPRINTSUSB("New charge port: C%d", port);
-
- /*
- * Turn off the other ports' sink path FETs, before enabling the
- * requested charge port.
- */
- for (i = 0; i < ppc_cnt; i++) {
- if (i == port) {
- continue;
- }
- if (ppc_vbus_sink_enable(i, 0)) {
- CPRINTSUSB("C%d: sink path disable failed.", i);
- }
- }
-
- /* Enable requested charge port. */
- if (ppc_vbus_sink_enable(port, 1)) {
- CPRINTSUSB("C%d: sink path enable failed.", port);
- return EC_ERROR_UNKNOWN;
- }
-
- return EC_SUCCESS;
-}