summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPoornima Tom <poornima.tom@intel.com>2021-01-08 16:40:53 +0530
committerCommit Bot <commit-bot@chromium.org>2021-01-15 03:23:45 +0000
commitaf530fafb0daf094030f9cc4504f2647f204aa71 (patch)
tree6369b461fc719249ee33d60e507422b13cd12e97
parenteaf3ff76c4d5c1e504394282432be5cd4006138a (diff)
downloadchrome-ec-af530fafb0daf094030f9cc4504f2647f204aa71.tar.gz
adlrvp:Split the ADLRVP board files
Common ADL RVP configuration and ITE8xx EC controller specific configuration are placed separately in two different files. This will help in easier porting of board files for different EC vendors who use MECC connector. BRANCH=none BUG=none TEST=ADLRVP-P & ADLRVP-M with ITE EC boot to OS. Signed-off-by: Poornima Tom <poornima.tom@intel.com> Change-Id: I6ec9aa216aeb3d552d355f31d6ec4361345c85ee Reviewed-on: https://chromium-review.googlesource.com/c/chromiumos/platform/ec/+/2626805 Reviewed-by: Vijay P Hiremath <vijay.p.hiremath@intel.com> Reviewed-by: caveh jalali <caveh@chromium.org> Commit-Queue: caveh jalali <caveh@chromium.org>
l---------board/adlrvpm_ite/adlrvp.c1
l---------board/adlrvpm_ite/adlrvp.h1
-rw-r--r--board/adlrvpp_ite/adlrvp.c334
-rw-r--r--board/adlrvpp_ite/adlrvp.h132
-rw-r--r--board/adlrvpp_ite/board.c342
-rw-r--r--board/adlrvpp_ite/board.h94
-rw-r--r--board/adlrvpp_ite/build.mk2
7 files changed, 481 insertions, 425 deletions
diff --git a/board/adlrvpm_ite/adlrvp.c b/board/adlrvpm_ite/adlrvp.c
new file mode 120000
index 0000000000..2c01b35bb9
--- /dev/null
+++ b/board/adlrvpm_ite/adlrvp.c
@@ -0,0 +1 @@
+../adlrvpp_ite/adlrvp.c \ No newline at end of file
diff --git a/board/adlrvpm_ite/adlrvp.h b/board/adlrvpm_ite/adlrvp.h
new file mode 120000
index 0000000000..d6d94a2fdf
--- /dev/null
+++ b/board/adlrvpm_ite/adlrvp.h
@@ -0,0 +1 @@
+../adlrvpp_ite/adlrvp.h \ No newline at end of file
diff --git a/board/adlrvpp_ite/adlrvp.c b/board/adlrvpp_ite/adlrvp.c
new file mode 100644
index 0000000000..d9620c5908
--- /dev/null
+++ b/board/adlrvpp_ite/adlrvp.c
@@ -0,0 +1,334 @@
+/* Copyright 2021 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+/* Intel ADLRVP board-specific common configuration */
+
+#include "bb_retimer.h"
+#include "charger.h"
+#include "common.h"
+#include "hooks.h"
+#include "isl9241.h"
+#include "pca9675.h"
+#include "power/icelake.h"
+#include "sn5s330.h"
+#include "system.h"
+#include "task.h"
+#include "usbc_ppc.h"
+#include "util.h"
+
+#define CPRINTS(format, args...) cprints(CC_COMMAND, format, ## args)
+#define CPRINTF(format, args...) cprintf(CC_COMMAND, format, ## args)
+
+/* Mutex for BB retimer shared NVM access */
+static struct mutex bb_nvm_mutex;
+
+/* TCPC AIC GPIO Configuration */
+const struct tcpc_aic_gpio_config_t tcpc_aic_gpios[] = {
+ [TYPE_C_PORT_0] = {
+ .tcpc_alert = GPIO_USBC_TCPC_ALRT_P0,
+ .ppc_alert = GPIO_USBC_TCPC_PPC_ALRT_P0,
+ .ppc_intr_handler = sn5s330_interrupt,
+ },
+ [TYPE_C_PORT_1] = {
+ .tcpc_alert = GPIO_USBC_TCPC_ALRT_P1,
+ .ppc_alert = GPIO_USBC_TCPC_PPC_ALRT_P1,
+ .ppc_intr_handler = sn5s330_interrupt,
+ },
+#if defined(HAS_TASK_PD_C2)
+ [TYPE_C_PORT_2] = {
+ .tcpc_alert = GPIO_USBC_TCPC_ALRT_P2,
+ .ppc_alert = GPIO_USBC_TCPC_PPC_ALRT_P2,
+ .ppc_intr_handler = sn5s330_interrupt,
+ },
+#endif
+#if defined(HAS_TASK_PD_C3)
+ [TYPE_C_PORT_3] = {
+ .tcpc_alert = GPIO_USBC_TCPC_ALRT_P3,
+ .ppc_alert = GPIO_USBC_TCPC_PPC_ALRT_P3,
+ .ppc_intr_handler = sn5s330_interrupt,
+ },
+#endif
+};
+BUILD_ASSERT(ARRAY_SIZE(tcpc_aic_gpios) == CONFIG_USB_PD_PORT_MAX_COUNT);
+
+/* USB-C PPC configuration */
+struct ppc_config_t ppc_chips[] = {
+ [TYPE_C_PORT_0] = {
+ .i2c_port = I2C_PORT_TYPEC_0,
+ .i2c_addr_flags = I2C_ADDR_SN5S330_TCPC_AIC_PPC,
+ .drv = &sn5s330_drv,
+ },
+ [TYPE_C_PORT_1] = {
+ .i2c_port = I2C_PORT_TYPEC_1,
+ .i2c_addr_flags = I2C_ADDR_SN5S330_TCPC_AIC_PPC,
+ .drv = &sn5s330_drv
+ },
+#if defined(HAS_TASK_PD_C2)
+ [TYPE_C_PORT_2] = {
+ .i2c_port = I2C_PORT_TYPEC_2,
+ .i2c_addr_flags = I2C_ADDR_SN5S330_TCPC_AIC_PPC,
+ .drv = &sn5s330_drv,
+ },
+#endif
+#if defined(HAS_TASK_PD_C3)
+ [TYPE_C_PORT_3] = {
+ .i2c_port = I2C_PORT_TYPEC_3,
+ .i2c_addr_flags = I2C_ADDR_SN5S330_TCPC_AIC_PPC,
+ .drv = &sn5s330_drv,
+ },
+#endif
+};
+BUILD_ASSERT(ARRAY_SIZE(ppc_chips) == CONFIG_USB_PD_PORT_MAX_COUNT);
+unsigned int ppc_cnt = ARRAY_SIZE(ppc_chips);
+
+/* USB-C retimer Configuration */
+struct usb_mux usbc0_tcss_usb_mux = {
+ .usb_port = TYPE_C_PORT_0,
+ .driver = &virtual_usb_mux_driver,
+ .hpd_update = &virtual_hpd_update,
+};
+struct usb_mux usbc1_tcss_usb_mux = {
+ .usb_port = TYPE_C_PORT_1,
+ .driver = &virtual_usb_mux_driver,
+ .hpd_update = &virtual_hpd_update,
+};
+#if defined(HAS_TASK_PD_C2)
+struct usb_mux usbc2_tcss_usb_mux = {
+ .usb_port = TYPE_C_PORT_2,
+ .driver = &virtual_usb_mux_driver,
+ .hpd_update = &virtual_hpd_update,
+};
+#endif
+#if defined(HAS_TASK_PD_C3)
+struct usb_mux usbc3_tcss_usb_mux = {
+ .usb_port = TYPE_C_PORT_3,
+ .driver = &virtual_usb_mux_driver,
+ .hpd_update = &virtual_hpd_update,
+};
+#endif
+
+/* USB muxes Configuration */
+const struct usb_mux usb_muxes[] = {
+ [TYPE_C_PORT_0] = {
+ .usb_port = TYPE_C_PORT_0,
+ .next_mux = &usbc0_tcss_usb_mux,
+ .driver = &bb_usb_retimer,
+ .i2c_port = I2C_PORT_TYPEC_0,
+ .i2c_addr_flags = I2C_PORT0_BB_RETIMER_ADDR,
+ },
+ [TYPE_C_PORT_1] = {
+ .usb_port = TYPE_C_PORT_1,
+ .next_mux = &usbc1_tcss_usb_mux,
+ .driver = &bb_usb_retimer,
+ .i2c_port = I2C_PORT_TYPEC_1,
+ .i2c_addr_flags = I2C_PORT1_BB_RETIMER_ADDR,
+ },
+#if defined(HAS_TASK_PD_C2)
+ [TYPE_C_PORT_2] = {
+ .usb_port = TYPE_C_PORT_2,
+ .next_mux = &usbc2_tcss_usb_mux,
+ .driver = &bb_usb_retimer,
+ .i2c_port = I2C_PORT_TYPEC_2,
+ .i2c_addr_flags = I2C_PORT2_BB_RETIMER_ADDR,
+ },
+#endif
+#if defined(HAS_TASK_PD_C3)
+ [TYPE_C_PORT_3] = {
+ .usb_port = TYPE_C_PORT_3,
+ .next_mux = &usbc3_tcss_usb_mux,
+ .driver = &bb_usb_retimer,
+ .i2c_port = I2C_PORT_TYPEC_3,
+ .i2c_addr_flags = I2C_PORT3_BB_RETIMER_ADDR,
+ },
+#endif
+};
+BUILD_ASSERT(ARRAY_SIZE(usb_muxes) == CONFIG_USB_PD_PORT_MAX_COUNT);
+
+/* Each TCPC have corresponding IO expander */
+const struct pca9675_ioexpander pca9675_iox[] = {
+ [TYPE_C_PORT_0] = {
+ .i2c_host_port = I2C_PORT_TYPEC_0,
+ .i2c_addr_flags = I2C_ADDR_PCA9675_TCPC_AIC_IOEX,
+ .io_direction = TCPC_AIC_IOE_DIRECTION,
+ },
+ [TYPE_C_PORT_1] = {
+ .i2c_host_port = I2C_PORT_TYPEC_1,
+ .i2c_addr_flags = I2C_ADDR_PCA9675_TCPC_AIC_IOEX,
+ .io_direction = TCPC_AIC_IOE_DIRECTION,
+ },
+#if defined(HAS_TASK_PD_C2)
+ [TYPE_C_PORT_2] = {
+ .i2c_host_port = I2C_PORT_TYPEC_2,
+ .i2c_addr_flags = I2C_ADDR_PCA9675_TCPC_AIC_IOEX,
+ .io_direction = TCPC_AIC_IOE_DIRECTION,
+ },
+#endif
+#if defined(HAS_TASK_PD_C3)
+ [TYPE_C_PORT_3] = {
+ .i2c_host_port = I2C_PORT_TYPEC_3,
+ .i2c_addr_flags = I2C_ADDR_PCA9675_TCPC_AIC_IOEX,
+ .io_direction = TCPC_AIC_IOE_DIRECTION,
+ },
+#endif
+};
+BUILD_ASSERT(ARRAY_SIZE(pca9675_iox) == CONFIG_USB_PD_PORT_MAX_COUNT);
+
+/* Charger Chips */
+const struct charger_config_t chg_chips[] = {
+ {
+ .i2c_port = I2C_PORT_CHARGER,
+ .i2c_addr_flags = ISL9241_ADDR_FLAGS,
+ .drv = &isl9241_drv,
+ },
+};
+
+void board_overcurrent_event(int port, int is_overcurrented)
+{
+ /* Port 0 & 1 and 2 & 3 share same line for over current indication */
+ /* If PD_C2 task is defined, PD_C3 task is assumed to be defined. */
+#if defined(HAS_TASK_PD_C2)
+ int ioex = port < TYPE_C_PORT_2 ?
+ TYPE_C_PORT_1 : TYPE_C_PORT_3;
+#else
+ int ioex = TYPE_C_PORT_1;
+#endif
+
+ if (is_overcurrented)
+ pca9675_update_pins(ioex, TCPC_AIC_IOE_OC, 0);
+ else
+ pca9675_update_pins(ioex, 0, TCPC_AIC_IOE_OC);
+}
+
+__override void bb_retimer_power_handle(const struct usb_mux *me, int on_off)
+{
+ /* Handle retimer's power domain.*/
+ if (on_off) {
+ /*
+ * BB retimer NVM can be shared between multiple ports, hence
+ * lock enabling the retimer until the current retimer request
+ * is complete.
+ */
+ mutex_lock(&bb_nvm_mutex);
+
+ pca9675_update_pins(me->usb_port,
+ TCPC_AIC_IOE_BB_RETIMER_LS_EN, 0);
+
+ /*
+ * Tpw, minimum time from VCC to RESET_N de-assertion is 100us
+ * For boards that don't provide a load switch control, the
+ * retimer_init() function ensures power is up before calling
+ * this function.
+ */
+ msleep(1);
+ pca9675_update_pins(me->usb_port,
+ TCPC_AIC_IOE_BB_RETIMER_RST, 0);
+
+ /* Allow 20ms time for the retimer to be initialized. */
+ msleep(20);
+
+ mutex_unlock(&bb_nvm_mutex);
+ } else {
+ pca9675_update_pins(me->usb_port,
+ 0, TCPC_AIC_IOE_BB_RETIMER_RST);
+ msleep(1);
+ pca9675_update_pins(me->usb_port,
+ 0, TCPC_AIC_IOE_BB_RETIMER_LS_EN);
+ }
+}
+
+static void board_connect_c0_sbu_deferred(void)
+{
+ int ccd_intr_level = gpio_get_level(GPIO_CCD_MODE_ODL);
+
+ if (ccd_intr_level) {
+ /* Default set the SBU lines to AUX mode on TCPC-AIC */
+ pca9675_update_pins(TYPE_C_PORT_0, 0,
+ TCPC_AIC_IOE_USB_MUX_CNTRL_1 |
+ TCPC_AIC_IOE_USB_MUX_CNTRL_0);
+ } else {
+ /* Set the SBU lines to CCD mode on TCPC-AIC */
+ pca9675_update_pins(TYPE_C_PORT_0,
+ TCPC_AIC_IOE_USB_MUX_CNTRL_1,
+ TCPC_AIC_IOE_USB_MUX_CNTRL_0);
+ }
+}
+DECLARE_DEFERRED(board_connect_c0_sbu_deferred);
+
+void board_connect_c0_sbu(enum gpio_signal s)
+{
+ hook_call_deferred(&board_connect_c0_sbu_deferred_data, 0);
+}
+
+static void enable_h1_irq(void)
+{
+ gpio_enable_interrupt(GPIO_CCD_MODE_ODL);
+}
+DECLARE_HOOK(HOOK_INIT, enable_h1_irq, HOOK_PRIO_LAST);
+
+static void tcpc_aic_init(void)
+{
+ int i;
+
+ /* Initialize the IOEXPANDER on TCPC-AIC */
+ for (i = 0; i < CONFIG_USB_PD_PORT_MAX_COUNT; i++)
+ pca9675_init(i);
+
+ /* Default set the SBU lines to AUX mode on both the TCPC-AIC */
+ board_connect_c0_sbu_deferred();
+
+#if defined(HAS_TASK_PD_C2)
+ /* Only TCPC-0 can do CCD or BSSB, Default set SBU lines to AUX */
+ pca9675_update_pins(TYPE_C_PORT_2, 0,
+ TCPC_AIC_IOE_USB_MUX_CNTRL_1 | TCPC_AIC_IOE_USB_MUX_CNTRL_0);
+#endif
+}
+DECLARE_HOOK(HOOK_INIT, tcpc_aic_init, HOOK_PRIO_INIT_PCA9675);
+
+/******************************************************************************/
+/* PWROK signal configuration */
+/*
+ * On ADLRVP, SYS_PWROK_EC is an output controlled by EC and uses ALL_SYS_PWRGD
+ * as input.
+ */
+const struct intel_x86_pwrok_signal pwrok_signal_assert_list[] = {
+ {
+ .gpio = GPIO_SYS_PWROK_EC,
+ .delay_ms = 3,
+ },
+};
+const int pwrok_signal_assert_count = ARRAY_SIZE(pwrok_signal_assert_list);
+
+const struct intel_x86_pwrok_signal pwrok_signal_deassert_list[] = {
+ {
+ .gpio = GPIO_SYS_PWROK_EC,
+ },
+};
+const int pwrok_signal_deassert_count = ARRAY_SIZE(pwrok_signal_assert_list);
+
+/*
+ * Returns board information (board id[7:0] and Fab id[15:8]) on success
+ * -1 on error.
+ */
+int board_get_version(void)
+{
+ int port0, port1;
+ int fab_id, board_id, bom_id;
+
+ if (ioexpander_read_intelrvp_version(&port0, &port1))
+ return -1;
+ /*
+ * Port0: bit 0 - BOM ID(2)
+ * bit 2:1 - FAB ID(1:0) + 1
+ * Port1: bit 7:6 - BOM ID(1:0)
+ * bit 5:0 - BOARD ID(5:0)
+ */
+ bom_id = ((port1 & 0xC0) >> 6) | ((port0 & 0x01) << 2);
+ fab_id = ((port0 & 0x06) >> 1) + 1;
+ board_id = port1 & 0x3F;
+
+ CPRINTS("BID:0x%x, FID:0x%x, BOM:0x%x", board_id, fab_id, bom_id);
+
+ return board_id | (fab_id << 8);
+}
diff --git a/board/adlrvpp_ite/adlrvp.h b/board/adlrvpp_ite/adlrvp.h
new file mode 100644
index 0000000000..7525988270
--- /dev/null
+++ b/board/adlrvpp_ite/adlrvp.h
@@ -0,0 +1,132 @@
+/* Copyright 2021 The Chromium OS Authors. All rights reserved.
+ * Use of this source code is governed by a BSD-style license that can be
+ * found in the LICENSE file.
+ */
+
+/* Intel ADL-RVP specific configuration */
+
+#ifndef __ADLRVP_BOARD_H
+#define __ADLRVP_BOARD_H
+
+#include "baseboard.h"
+
+/* MECC config */
+#define CONFIG_INTEL_RVP_MECC_VERSION_1_0
+
+/* Support early firmware selection */
+#define CONFIG_VBOOT_EFS2
+
+/* Chipset */
+#define CONFIG_CHIPSET_TIGERLAKE
+
+/* USB PD config */
+#if defined(HAS_TASK_PD_C2) && defined(HAS_TASK_PD_C3)
+#define CONFIG_USB_PD_PORT_MAX_COUNT 4
+#else
+#define CONFIG_USB_PD_PORT_MAX_COUNT 2
+#endif
+#define CONFIG_USB_MUX_VIRTUAL
+#define PD_MAX_POWER_MW 100000
+
+/* TCPC AIC config */
+/* Support NXP PCA9675 I/O expander. */
+#define CONFIG_IO_EXPANDER_PCA9675
+#define I2C_ADDR_PCA9675_TCPC_AIC_IOEX 0x21
+#define CONFIG_IO_EXPANDER_PORT_COUNT CONFIG_USB_PD_PORT_MAX_COUNT
+
+/* DC Jack charge ports */
+#undef CONFIG_DEDICATED_CHARGE_PORT_COUNT
+#define CONFIG_DEDICATED_CHARGE_PORT_COUNT 1
+#define DEDICATED_CHARGE_PORT CONFIG_USB_PD_PORT_MAX_COUNT
+
+/* PPC */
+#define CONFIG_USBC_PPC_SN5S330
+#define CONFIG_USB_PD_VBUS_DETECT_PPC
+#define CONFIG_USB_PD_DISCHARGE_PPC
+#define I2C_ADDR_SN5S330_TCPC_AIC_PPC 0x40
+
+/* TCPC */
+#define CONFIG_USB_PD_DISCHARGE
+#define CONFIG_USB_PD_TCPM_FUSB302
+#define I2C_ADDR_FUSB302_TCPC_AIC 0x22
+
+/* Config BB retimer */
+#define CONFIG_USBC_RETIMER_INTEL_BB
+#define I2C_PORT0_BB_RETIMER_ADDR 0x56
+#define I2C_PORT1_BB_RETIMER_ADDR 0x57
+#if defined(HAS_TASK_PD_C2)
+#define I2C_PORT2_BB_RETIMER_ADDR 0x58
+#endif
+#if defined(HAS_TASK_PD_C3)
+#define I2C_PORT3_BB_RETIMER_ADDR 0x59
+#endif
+
+/* Enable VCONN */
+#define CONFIG_USBC_VCONN
+#define CONFIG_USBC_VCONN_SWAP
+#define PD_VCONN_SWAP_DELAY 5000 /* us */
+
+/* Enabling Thunderbolt-compatible mode */
+#define CONFIG_USB_PD_TBT_COMPAT_MODE
+
+/* Enabling USB4 mode */
+#define CONFIG_USB_PD_USB4
+
+/* Config Fan */
+#define CONFIG_FANS 1
+#define BOARD_FAN_MIN_RPM 3000
+#define BOARD_FAN_MAX_RPM 10000
+
+/*
+ * TCPC AIC used on all the ports are identical expect the I2C lines which
+ * are on the respective TCPC port's EC I2C line. Hence, I2C address and
+ * the GPIOs to control the retimers are also same for all the ports.
+ */
+#define TCPC_AIC_IOE_BB_RETIMER_RST PCA9675_IO_P00
+#define TCPC_AIC_IOE_BB_RETIMER_LS_EN PCA9675_IO_P01
+#define TCPC_AIC_IOE_USB_MUX_CNTRL_1 PCA9675_IO_P04
+#define TCPC_AIC_IOE_USB_MUX_CNTRL_0 PCA9675_IO_P05
+#define TCPC_AIC_IOE_OC PCA9675_IO_P10
+
+#define TCPC_AIC_IOE_DIRECTION (PCA9675_DEFAULT_IO_DIRECTION & \
+ ~(TCPC_AIC_IOE_BB_RETIMER_RST | TCPC_AIC_IOE_BB_RETIMER_LS_EN | \
+ TCPC_AIC_IOE_USB_MUX_CNTRL_1 | TCPC_AIC_IOE_USB_MUX_CNTRL_0 | \
+ TCPC_AIC_IOE_OC))
+
+/* Charger */
+#define CONFIG_CHARGER_ISL9241
+
+/* Port 80 */
+#define PORT80_I2C_ADDR MAX695X_I2C_ADDR1_FLAGS
+
+/* Board Id */
+#define I2C_ADDR_PCA9555_BOARD_ID_GPIO 0x22
+
+#ifndef __ASSEMBLER__
+
+enum adlrvp_charge_ports {
+ TYPE_C_PORT_0,
+ TYPE_C_PORT_1,
+#if defined(HAS_TASK_PD_C2)
+ TYPE_C_PORT_2,
+#endif
+#if defined(HAS_TASK_PD_C3)
+ TYPE_C_PORT_3,
+#endif
+};
+
+enum battery_type {
+ BATTERY_GETAC_SMP_HHP_408,
+ BATTERY_TYPE_COUNT,
+};
+
+void espi_reset_pin_asserted_interrupt(enum gpio_signal signal);
+void extpower_interrupt(enum gpio_signal signal);
+void ppc_interrupt(enum gpio_signal signal);
+void tcpc_alert_event(enum gpio_signal signal);
+void board_connect_c0_sbu(enum gpio_signal s);
+int board_get_version(void);
+
+#endif /* !__ASSEMBLER__ */
+
+#endif /* __ADLRVP_BOARD_H */
diff --git a/board/adlrvpp_ite/board.c b/board/adlrvpp_ite/board.c
index 7c656f868e..d9105e1396 100644
--- a/board/adlrvpp_ite/board.c
+++ b/board/adlrvpp_ite/board.c
@@ -3,61 +3,27 @@
* found in the LICENSE file.
*/
-/* Intel ADL-P-RVP-ITE board-specific configuration */
-
-#include "bb_retimer.h"
+/* Intel ADLRVP-ITE board-specific configuration */
#include "button.h"
-#include "common.h"
-#include "charger.h"
#include "fan.h"
#include "fusb302.h"
#include "gpio.h"
-#include "hooks.h"
#include "i2c.h"
-#include "isl9241.h"
#include "it83xx_pd.h"
#include "lid_switch.h"
-#include "pca9675.h"
#include "power.h"
-#include "power/icelake.h"
#include "power_button.h"
#include "pwm.h"
#include "pwm_chip.h"
-#include "sn5s330.h"
#include "switch.h"
-#include "system.h"
-#include "task.h"
#include "tablet_mode.h"
#include "uart.h"
#include "usb_pd_tbt.h"
#include "usb_pd_tcpm.h"
-#include "usbc_ppc.h"
#include "util.h"
#include "gpio_list.h" /* Must come after other header files. */
-#define CPRINTS(format, args...) cprints(CC_COMMAND, format, ## args)
-#define CPRINTF(format, args...) cprintf(CC_COMMAND, format, ## args)
-
-/*
- * TCPC AIC used on all the ports are identical expect the I2C lines which
- * are on the respective TCPC port's EC I2C line. Hence, I2C address and
- * the GPIOs to control the retimers are also same for all the ports.
- */
-#define TCPC_AIC_IOE_BB_RETIMER_RST PCA9675_IO_P00
-#define TCPC_AIC_IOE_BB_RETIMER_LS_EN PCA9675_IO_P01
-#define TCPC_AIC_IOE_USB_MUX_CNTRL_1 PCA9675_IO_P04
-#define TCPC_AIC_IOE_USB_MUX_CNTRL_0 PCA9675_IO_P05
-#define TCPC_AIC_IOE_OC PCA9675_IO_P10
-
-#define TCPC_AIC_IOE_DIRECTION (PCA9675_DEFAULT_IO_DIRECTION & \
- ~(TCPC_AIC_IOE_BB_RETIMER_RST | TCPC_AIC_IOE_BB_RETIMER_LS_EN | \
- TCPC_AIC_IOE_USB_MUX_CNTRL_1 | TCPC_AIC_IOE_USB_MUX_CNTRL_0 | \
- TCPC_AIC_IOE_OC))
-
-/* Mutex for BB retimer shared NVM access */
-static struct mutex bb_nvm_mutex;
-
/******************************************************************************/
/* I2C ports */
const struct i2c_port_t i2c_ports[] = {
@@ -89,7 +55,7 @@ const struct i2c_port_t i2c_ports[] = {
.scl = GPIO_USBC_TCPC_I2C_CLK_P2,
.sda = GPIO_USBC_TCPC_I2C_DATA_P2,
},
-#if defined(BOARD_ADLRVPP_ITE)
+#if defined(HAS_TASK_PD_C2)
[I2C_CHAN_TYPEC_2] = {
.name = "typec_2",
.port = IT83XX_I2C_CH_E,
@@ -97,6 +63,8 @@ const struct i2c_port_t i2c_ports[] = {
.scl = GPIO_USBC_TCPC_I2C_CLK_P1,
.sda = GPIO_USBC_TCPC_I2C_DATA_P1,
},
+#endif
+#if defined(HAS_TASK_PD_C3)
[I2C_CHAN_TYPEC_3] = {
.name = "typec_3",
.port = IT83XX_I2C_CH_D,
@@ -109,33 +77,6 @@ const struct i2c_port_t i2c_ports[] = {
BUILD_ASSERT(ARRAY_SIZE(i2c_ports) == I2C_CHAN_COUNT);
const unsigned int i2c_ports_used = ARRAY_SIZE(i2c_ports);
-/* TCPC AIC GPIO Configuration */
-const struct tcpc_aic_gpio_config_t tcpc_aic_gpios[] = {
- [TYPE_C_PORT_0] = {
- .tcpc_alert = GPIO_USBC_TCPC_ALRT_P0,
- .ppc_alert = GPIO_USBC_TCPC_PPC_ALRT_P0,
- .ppc_intr_handler = sn5s330_interrupt,
- },
- [TYPE_C_PORT_1] = {
- .tcpc_alert = GPIO_USBC_TCPC_ALRT_P1,
- .ppc_alert = GPIO_USBC_TCPC_PPC_ALRT_P1,
- .ppc_intr_handler = sn5s330_interrupt,
- },
-#if defined(BOARD_ADLRVPP_ITE)
- [TYPE_C_PORT_2] = {
- .tcpc_alert = GPIO_USBC_TCPC_ALRT_P2,
- .ppc_alert = GPIO_USBC_TCPC_PPC_ALRT_P2,
- .ppc_intr_handler = sn5s330_interrupt,
- },
- [TYPE_C_PORT_3] = {
- .tcpc_alert = GPIO_USBC_TCPC_ALRT_P3,
- .ppc_alert = GPIO_USBC_TCPC_PPC_ALRT_P3,
- .ppc_intr_handler = sn5s330_interrupt,
- },
-#endif
-};
-BUILD_ASSERT(ARRAY_SIZE(tcpc_aic_gpios) == CONFIG_USB_PD_PORT_MAX_COUNT);
-
/* USB-C TCPC Configuration */
const struct tcpc_config_t tcpc_config[] = {
[TYPE_C_PORT_0] = {
@@ -151,7 +92,7 @@ const struct tcpc_config_t tcpc_config[] = {
},
.drv = &fusb302_tcpm_drv,
},
-#if defined(BOARD_ADLRVPP_ITE)
+#if defined(HAS_TASK_PD_C2)
[TYPE_C_PORT_2] = {
.bus_type = EC_BUS_TYPE_I2C,
.i2c_info = {
@@ -160,6 +101,8 @@ const struct tcpc_config_t tcpc_config[] = {
},
.drv = &fusb302_tcpm_drv,
},
+#endif
+#if defined(HAS_TASK_PD_C3)
[TYPE_C_PORT_3] = {
.bus_type = EC_BUS_TYPE_I2C,
.i2c_info = {
@@ -171,274 +114,3 @@ const struct tcpc_config_t tcpc_config[] = {
#endif
};
BUILD_ASSERT(ARRAY_SIZE(tcpc_config) == CONFIG_USB_PD_PORT_MAX_COUNT);
-
-/* USB-C PPC configuration */
-struct ppc_config_t ppc_chips[] = {
- [TYPE_C_PORT_0] = {
- .i2c_port = I2C_PORT_TYPEC_0,
- .i2c_addr_flags = I2C_ADDR_SN5S330_TCPC_AIC_PPC,
- .drv = &sn5s330_drv,
- },
- [TYPE_C_PORT_1] = {
- .i2c_port = I2C_PORT_TYPEC_1,
- .i2c_addr_flags = I2C_ADDR_SN5S330_TCPC_AIC_PPC,
- .drv = &sn5s330_drv
- },
-#if defined(BOARD_ADLRVPP_ITE)
- [TYPE_C_PORT_2] = {
- .i2c_port = I2C_PORT_TYPEC_2,
- .i2c_addr_flags = I2C_ADDR_SN5S330_TCPC_AIC_PPC,
- .drv = &sn5s330_drv,
- },
- [TYPE_C_PORT_3] = {
- .i2c_port = I2C_PORT_TYPEC_3,
- .i2c_addr_flags = I2C_ADDR_SN5S330_TCPC_AIC_PPC,
- .drv = &sn5s330_drv,
- },
-#endif
-};
-BUILD_ASSERT(ARRAY_SIZE(ppc_chips) == CONFIG_USB_PD_PORT_MAX_COUNT);
-unsigned int ppc_cnt = ARRAY_SIZE(ppc_chips);
-
-/* USB-C retimer Configuration */
-struct usb_mux usbc0_tcss_usb_mux = {
- .usb_port = TYPE_C_PORT_0,
- .driver = &virtual_usb_mux_driver,
- .hpd_update = &virtual_hpd_update,
-};
-struct usb_mux usbc1_tcss_usb_mux = {
- .usb_port = TYPE_C_PORT_1,
- .driver = &virtual_usb_mux_driver,
- .hpd_update = &virtual_hpd_update,
-};
-#if defined(BOARD_ADLRVPP_ITE)
-struct usb_mux usbc2_tcss_usb_mux = {
- .usb_port = TYPE_C_PORT_2,
- .driver = &virtual_usb_mux_driver,
- .hpd_update = &virtual_hpd_update,
-};
-struct usb_mux usbc3_tcss_usb_mux = {
- .usb_port = TYPE_C_PORT_3,
- .driver = &virtual_usb_mux_driver,
- .hpd_update = &virtual_hpd_update,
-};
-#endif
-
-/* USB muxes Configuration */
-const struct usb_mux usb_muxes[] = {
- [TYPE_C_PORT_0] = {
- .usb_port = TYPE_C_PORT_0,
- .next_mux = &usbc0_tcss_usb_mux,
- .driver = &bb_usb_retimer,
- .i2c_port = I2C_PORT_TYPEC_0,
- .i2c_addr_flags = I2C_PORT0_BB_RETIMER_ADDR,
- },
- [TYPE_C_PORT_1] = {
- .usb_port = TYPE_C_PORT_1,
- .next_mux = &usbc1_tcss_usb_mux,
- .driver = &bb_usb_retimer,
- .i2c_port = I2C_PORT_TYPEC_1,
- .i2c_addr_flags = I2C_PORT1_BB_RETIMER_ADDR,
- },
-#if defined(BOARD_ADLRVPP_ITE)
- [TYPE_C_PORT_2] = {
- .usb_port = TYPE_C_PORT_2,
- .next_mux = &usbc2_tcss_usb_mux,
- .driver = &bb_usb_retimer,
- .i2c_port = I2C_PORT_TYPEC_2,
- .i2c_addr_flags = I2C_PORT2_BB_RETIMER_ADDR,
- },
- [TYPE_C_PORT_3] = {
- .usb_port = TYPE_C_PORT_3,
- .next_mux = &usbc3_tcss_usb_mux,
- .driver = &bb_usb_retimer,
- .i2c_port = I2C_PORT_TYPEC_3,
- .i2c_addr_flags = I2C_PORT3_BB_RETIMER_ADDR,
- },
-#endif
-};
-BUILD_ASSERT(ARRAY_SIZE(usb_muxes) == CONFIG_USB_PD_PORT_MAX_COUNT);
-
-/* Each TCPC have corresponding IO expander */
-const struct pca9675_ioexpander pca9675_iox[] = {
- [TYPE_C_PORT_0] = {
- .i2c_host_port = I2C_PORT_TYPEC_0,
- .i2c_addr_flags = I2C_ADDR_PCA9675_TCPC_AIC_IOEX,
- .io_direction = TCPC_AIC_IOE_DIRECTION,
- },
- [TYPE_C_PORT_1] = {
- .i2c_host_port = I2C_PORT_TYPEC_1,
- .i2c_addr_flags = I2C_ADDR_PCA9675_TCPC_AIC_IOEX,
- .io_direction = TCPC_AIC_IOE_DIRECTION,
- },
-#if defined(BOARD_ADLRVPP_ITE)
- [TYPE_C_PORT_2] = {
- .i2c_host_port = I2C_PORT_TYPEC_2,
- .i2c_addr_flags = I2C_ADDR_PCA9675_TCPC_AIC_IOEX,
- .io_direction = TCPC_AIC_IOE_DIRECTION,
- },
- [TYPE_C_PORT_3] = {
- .i2c_host_port = I2C_PORT_TYPEC_3,
- .i2c_addr_flags = I2C_ADDR_PCA9675_TCPC_AIC_IOEX,
- .io_direction = TCPC_AIC_IOE_DIRECTION,
- },
-#endif
-};
-BUILD_ASSERT(ARRAY_SIZE(usb_muxes) == CONFIG_USB_PD_PORT_MAX_COUNT);
-
-/* Charger Chips */
-const struct charger_config_t chg_chips[] = {
- {
- .i2c_port = I2C_PORT_CHARGER,
- .i2c_addr_flags = ISL9241_ADDR_FLAGS,
- .drv = &isl9241_drv,
- },
-};
-
-void board_overcurrent_event(int port, int is_overcurrented)
-{
- /* Port 0 & 1 and 2 & 3 share same line for over current indication */
-#if defined(BOARD_ADLRVPP_ITE)
- int ioex = port < TYPE_C_PORT_2 ?
- TYPE_C_PORT_1 : TYPE_C_PORT_3;
-#else
- int ioex = TYPE_C_PORT_1;
-#endif
-
- if (is_overcurrented)
- pca9675_update_pins(ioex, TCPC_AIC_IOE_OC, 0);
- else
- pca9675_update_pins(ioex, 0, TCPC_AIC_IOE_OC);
-}
-
-__override void bb_retimer_power_handle(const struct usb_mux *me, int on_off)
-{
- /* Handle retimer's power domain.*/
- if (on_off) {
- /*
- * BB retimer NVM can be shared between multiple ports, hence
- * lock enabling the retimer until the current retimer request
- * is complete.
- */
- mutex_lock(&bb_nvm_mutex);
-
- pca9675_update_pins(me->usb_port,
- TCPC_AIC_IOE_BB_RETIMER_LS_EN, 0);
-
- /*
- * Tpw, minimum time from VCC to RESET_N de-assertion is 100us
- * For boards that don't provide a load switch control, the
- * retimer_init() function ensures power is up before calling
- * this function.
- */
- msleep(1);
- pca9675_update_pins(me->usb_port,
- TCPC_AIC_IOE_BB_RETIMER_RST, 0);
-
- /* Allow 20ms time for the retimer to be initialized. */
- msleep(20);
-
- mutex_unlock(&bb_nvm_mutex);
- } else {
- pca9675_update_pins(me->usb_port,
- 0, TCPC_AIC_IOE_BB_RETIMER_RST);
- msleep(1);
- pca9675_update_pins(me->usb_port,
- 0, TCPC_AIC_IOE_BB_RETIMER_LS_EN);
- }
-}
-
-static void board_connect_c0_sbu_deferred(void)
-{
- int ccd_intr_level = gpio_get_level(GPIO_CCD_MODE_ODL);
-
- if (ccd_intr_level) {
- /* Default set the SBU lines to AUX mode on TCPC-AIC */
- pca9675_update_pins(TYPE_C_PORT_0, 0,
- TCPC_AIC_IOE_USB_MUX_CNTRL_1 |
- TCPC_AIC_IOE_USB_MUX_CNTRL_0);
- } else {
- /* Set the SBU lines to CCD mode on TCPC-AIC */
- pca9675_update_pins(TYPE_C_PORT_0,
- TCPC_AIC_IOE_USB_MUX_CNTRL_1,
- TCPC_AIC_IOE_USB_MUX_CNTRL_0);
- }
-}
-DECLARE_DEFERRED(board_connect_c0_sbu_deferred);
-
-void board_connect_c0_sbu(enum gpio_signal s)
-{
- hook_call_deferred(&board_connect_c0_sbu_deferred_data, 0);
-}
-
-static void enable_h1_irq(void)
-{
- gpio_enable_interrupt(GPIO_CCD_MODE_ODL);
-}
-DECLARE_HOOK(HOOK_INIT, enable_h1_irq, HOOK_PRIO_LAST);
-
-static void tcpc_aic_init(void)
-{
- int i;
-
- /* Initialize the IOEXPANDER on TCPC-AIC */
- for (i = 0; i < CONFIG_USB_PD_PORT_MAX_COUNT; i++)
- pca9675_init(i);
-
- /* Default set the SBU lines to AUX mode on both the TCPC-AIC */
- board_connect_c0_sbu_deferred();
-
-#if defined(BOARD_ADLRVPP_ITE)
- /* Only TCPC-0 can do CCD or BSSB, Default set SBU lines to AUX */
- pca9675_update_pins(TYPE_C_PORT_2, 0,
- TCPC_AIC_IOE_USB_MUX_CNTRL_1 | TCPC_AIC_IOE_USB_MUX_CNTRL_0);
-#endif
-}
-DECLARE_HOOK(HOOK_INIT, tcpc_aic_init, HOOK_PRIO_INIT_PCA9675);
-
-/******************************************************************************/
-/* PWROK signal configuration */
-/*
- * On ADLRVP, SYS_PWROK_EC is an output controlled by EC and uses ALL_SYS_PWRGD
- * as input.
- */
-const struct intel_x86_pwrok_signal pwrok_signal_assert_list[] = {
- {
- .gpio = GPIO_SYS_PWROK_EC,
- .delay_ms = 3,
- },
-};
-const int pwrok_signal_assert_count = ARRAY_SIZE(pwrok_signal_assert_list);
-
-const struct intel_x86_pwrok_signal pwrok_signal_deassert_list[] = {
- {
- .gpio = GPIO_SYS_PWROK_EC,
- },
-};
-const int pwrok_signal_deassert_count = ARRAY_SIZE(pwrok_signal_assert_list);
-
-/*
- * Returns board information (board id[7:0] and Fab id[15:8]) on success
- * -1 on error.
- */
-int board_get_version(void)
-{
- int port0, port1;
- int fab_id, board_id, bom_id;
-
- if (ioexpander_read_intelrvp_version(&port0, &port1))
- return -1;
- /*
- * Port0: bit 0 - BOM ID(2)
- * bit 2:1 - FAB ID(1:0) + 1
- * Port1: bit 7:6 - BOM ID(1:0)
- * bit 5:0 - BOARD ID(5:0)
- */
- bom_id = ((port1 & 0xC0) >> 6) | ((port0 & 0x01) << 2);
- fab_id = ((port0 & 0x06) >> 1) + 1;
- board_id = port1 & 0x3F;
-
- CPRINTS("BID:0x%x, FID:0x%x, BOM:0x%x", board_id, fab_id, bom_id);
-
- return board_id | (fab_id << 8);
-}
diff --git a/board/adlrvpp_ite/board.h b/board/adlrvpp_ite/board.h
index fb8dc0f048..ea858da722 100644
--- a/board/adlrvpp_ite/board.h
+++ b/board/adlrvpp_ite/board.h
@@ -11,16 +11,7 @@
/* ITE EC variant */
#define VARIANT_INTELRVP_EC_IT8320
-#include "baseboard.h"
-
-/* MECC config */
-#define CONFIG_INTEL_RVP_MECC_VERSION_1_0
-
-/* Support early firmware selection */
-#define CONFIG_VBOOT_EFS2
-
-/* Chipset */
-#define CONFIG_CHIPSET_TIGERLAKE
+#include "adlrvp.h"
/*
* Macros for GPIO signals used in common code that don't match the
@@ -62,8 +53,6 @@
/* I2C ports & Configs */
#define CONFIG_IT83XX_SMCLK2_ON_GPC7
-/* charger */
-#define CONFIG_CHARGER_ISL9241
#define I2C_PORT_CHARGER IT83XX_I2C_CH_B
/* Battery */
@@ -71,79 +60,27 @@
/* Board ID */
#define I2C_PORT_PCA9555_BOARD_ID_GPIO IT83XX_I2C_CH_B
-#define I2C_ADDR_PCA9555_BOARD_ID_GPIO 0x22
/* Port 80 */
#define I2C_PORT_PORT80 IT83XX_I2C_CH_B
-#define PORT80_I2C_ADDR MAX695X_I2C_ADDR1_FLAGS
-
-/* USB PD config */
-#if defined(BOARD_ADLRVPP_ITE)
-#define CONFIG_USB_PD_PORT_MAX_COUNT 4
-#else
-#define CONFIG_USB_PD_PORT_MAX_COUNT 2
-#endif
-#define CONFIG_USB_MUX_VIRTUAL
-#define PD_MAX_POWER_MW 100000
/* USB-C I2C */
#define I2C_PORT_TYPEC_0 IT83XX_I2C_CH_C
#define I2C_PORT_TYPEC_1 IT83XX_I2C_CH_F
-#if defined(BOARD_ADLRVPP_ITE)
+#if defined(HAS_TASK_PD_C2)
#define I2C_PORT_TYPEC_2 IT83XX_I2C_CH_E
+#endif
+#if defined(HAS_TASK_PD_C3)
#define I2C_PORT_TYPEC_3 IT83XX_I2C_CH_D
#endif
-/* TCPC AIC config */
-/* Support NXP PCA9675 I/O expander. */
-#define CONFIG_IO_EXPANDER_PCA9675
-#define I2C_ADDR_PCA9675_TCPC_AIC_IOEX 0x21
-#define CONFIG_IO_EXPANDER_PORT_COUNT CONFIG_USB_PD_PORT_MAX_COUNT
-
-/* DC Jack charge ports */
-#undef CONFIG_DEDICATED_CHARGE_PORT_COUNT
-#define CONFIG_DEDICATED_CHARGE_PORT_COUNT 1
-#define DEDICATED_CHARGE_PORT CONFIG_USB_PD_PORT_MAX_COUNT
-
-/* PPC */
-#define CONFIG_USBC_PPC_SN5S330
-#define CONFIG_USB_PD_VBUS_DETECT_PPC
-#define CONFIG_USB_PD_DISCHARGE_PPC
-#define I2C_ADDR_SN5S330_TCPC_AIC_PPC 0x40
-
/* TCPC */
-#define CONFIG_USB_PD_DISCHARGE
#define CONFIG_USB_PD_TCPM_ITE_ON_CHIP
#define CONFIG_USB_PD_ITE_ACTIVE_PORT_COUNT 1
-#define CONFIG_USB_PD_TCPM_FUSB302
-#define I2C_ADDR_FUSB302_TCPC_AIC 0x22
-
-/* Config BB retimer */
-#define CONFIG_USBC_RETIMER_INTEL_BB
-#define I2C_PORT0_BB_RETIMER_ADDR 0x50
-#define I2C_PORT1_BB_RETIMER_ADDR 0x51
-#if defined(BOARD_ADLRVPP_ITE)
-#define I2C_PORT2_BB_RETIMER_ADDR 0x52
-#define I2C_PORT3_BB_RETIMER_ADDR 0x53
-#endif
-
-/* Enable VCONN */
-#define CONFIG_USBC_VCONN
-#define CONFIG_USBC_VCONN_SWAP
-#define PD_VCONN_SWAP_DELAY 5000 /* us */
-
-/* Enabling Thunderbolt-compatible mode */
-#define CONFIG_USB_PD_TBT_COMPAT_MODE
-
-/* Enabling USB4 mode */
-#define CONFIG_USB_PD_USB4
/* Config Fan */
-#define CONFIG_FANS 1
#define GPIO_FAN_POWER_EN GPIO_EC_THRM_SEN_PWRGATE_N
#define GPIO_ALL_SYS_PWRGD GPIO_ALL_SYS_PWRGD_EC
-#define BOARD_FAN_MIN_RPM 3000
-#define BOARD_FAN_MAX_RPM 10000
#ifndef __ASSEMBLER__
@@ -152,34 +89,13 @@ enum adlrvp_i2c_channel {
I2C_CHAN_BATT_CHG,
I2C_CHAN_TYPEC_0,
I2C_CHAN_TYPEC_1,
-#if defined(BOARD_ADLRVPP_ITE)
+#if defined(HAS_TASK_PD_C2)
I2C_CHAN_TYPEC_2,
I2C_CHAN_TYPEC_3,
#endif
I2C_CHAN_COUNT,
};
-enum adlrvp_charge_ports {
- TYPE_C_PORT_0,
- TYPE_C_PORT_1,
-#if defined(BOARD_ADLRVPP_ITE)
- TYPE_C_PORT_2,
- TYPE_C_PORT_3,
-#endif
-};
-
-enum battery_type {
- BATTERY_GETAC_SMP_HHP_408,
- BATTERY_TYPE_COUNT,
-};
-
-void espi_reset_pin_asserted_interrupt(enum gpio_signal signal);
-void extpower_interrupt(enum gpio_signal signal);
-void ppc_interrupt(enum gpio_signal signal);
-void tcpc_alert_event(enum gpio_signal signal);
-void board_connect_c0_sbu(enum gpio_signal s);
-int board_get_version(void);
-
#endif /* !__ASSEMBLER__ */
#endif /* __CROS_EC_BOARD_H */
diff --git a/board/adlrvpp_ite/build.mk b/board/adlrvpp_ite/build.mk
index 81dcb59de3..4476638a1a 100644
--- a/board/adlrvpp_ite/build.mk
+++ b/board/adlrvpp_ite/build.mk
@@ -11,5 +11,5 @@ CHIP_FAMILY:=it8320
CHIP_VARIANT:=it8320dx
BASEBOARD:=intelrvp
-board-y=board.o
+board-y=board.o adlrvp.o
board-$(CONFIG_BATTERY_SMART)+=battery.o