Compare commits

..

1 Commits

Author SHA1 Message Date
Tim Crawford
b376d29c5c ec/system76/ec: Remove RPM calculation
This calculation depends on the EC configuration. The EC is now
responsible for the calculation, and the RAM values have the actual RPM
values.

Change-Id: Ifabbcb5922643e218ed7c4984b1d41aee841bb39
Signed-off-by: Tim Crawford <tcrawford@system76.com>
2024-05-09 09:06:08 -06:00
15 changed files with 11 additions and 160 deletions

View File

@@ -5,7 +5,6 @@ all-y += system76_ec.c
ramstage-y += smbios.c
ramstage-$(CONFIG_EC_SYSTEM76_EC_LOCKDOWN) += lockdown.c
ramstage-y += usbc_mux.c
smm-$(CONFIG_DEBUG_SMI) += system76_ec.c

View File

@@ -146,10 +146,6 @@ Device (S76D) {
Local1 = ^^PCI0.LPCB.EC0.RPM2
}
}
If (Local1 != 0) {
// 60 * (EC frequency / 120) / 2
Local1 = 2156250 / Local1
}
Return ((Local1 << 8) | Local0)
}

View File

@@ -1,132 +0,0 @@
/* SPDX-License-Identifier: GPL-2.0-only */
#include "system76_ec.h"
#include <console/console.h>
#include <delay.h>
#include <device/usbc_mux.h>
#include <timer.h>
#include <types.h>
#define CMD_USBC_MUX_INFO 23
enum usbc_mux_flags {
USBC_MUX_DP = BIT(0),
USBC_MUX_USB = BIT(1),
USBC_MUX_CABLE = BIT(2),
USBC_MUX_POLARITY = BIT(3),
USBC_MUX_HPD_LVL = BIT(4),
USBC_MUX_HPD_IRQ = BIT(5),
USBC_MUX_UFP = BIT(6),
USBC_MUX_DBG_ACC = BIT(7),
};
static int system76_ec_get_mux_info(int port, struct usbc_mux_info *info)
{
uint8_t request[1] = { port };
uint8_t reply[3] = { 0 };
uint8_t flags;
uint8_t pin_mode;
bool res;
if (!info)
return -1;
res = system76_ec_cmd(CMD_USBC_MUX_INFO, request, ARRAY_SIZE(request),
reply, ARRAY_SIZE(reply));
if (!res)
return -1;
flags = reply[1];
pin_mode = reply[2];
info->dp = !!(flags & USBC_MUX_DP);
info->usb = !!(flags & USBC_MUX_USB);
info->cable = !!(flags & USBC_MUX_CABLE);
info->polarity = !!(flags & USBC_MUX_POLARITY);
info->hpd_lvl = !!(flags & USBC_MUX_HPD_LVL);
info->hpd_irq = !!(flags & USBC_MUX_HPD_IRQ);
info->ufp = !!(flags & USBC_MUX_UFP);
info->dbg_acc = !!(flags & USBC_MUX_DBG_ACC);
info->dp_pin_mode = pin_mode;
printk(BIOS_SPEW, "%s: dp=%u, usb=%u\n", __func__, info->dp, info->usb);
printk(BIOS_SPEW, "%s: cable=%u, polarity=%u\n", __func__, info->cable, info->polarity);
printk(BIOS_SPEW, "%s: hpd_lvl=%u, hpd_irq=%u\n", __func__, info->hpd_lvl, info->hpd_irq);
printk(BIOS_SPEW, "%s: ufp=%u, dbg_acc=%u\n", __func__, info->ufp, info->dbg_acc);
printk(BIOS_SPEW, "%s: pin_mode=0x%x\n", __func__, info->dp_pin_mode);
return 0;
}
static int system76_ec_wait_for_connection(long timeout_ms)
{
// TODO
return 1;
}
static int system76_ec_enter_dp_mode(int port)
{
// TODO
return 0;
}
static int system76_ec_wait_for_dp_mode_entry(int port, long timeout_ms)
{
struct usbc_mux_info info;
if (system76_ec_get_mux_info(port, &info) < 0) {
printk(BIOS_WARNING, "%s: could not get usbc mux info\n", __func__);
return -1;
}
if (!info.dp) {
printk(BIOS_WARNING, "DP mode not ready\n");
return -1;
}
return 0;
}
static int system76_ec_wait_for_hpd(int port, long timeout_ms)
{
struct usbc_mux_info info;
struct stopwatch sw;
stopwatch_init_msecs_expire(&sw, timeout_ms);
while (1) {
if (system76_ec_get_mux_info(port, &info) < 0) {
printk(BIOS_WARNING, "%s: could not get usbc mux info\n", __func__);
return -1;
}
if (info.hpd_lvl)
break;
if (stopwatch_expired(&sw)) {
printk(BIOS_WARNING, "HPD not ready after %ldms\n", timeout_ms);
return -1;
}
mdelay(100);
}
printk(BIOS_INFO, "HPD ready after %lldms\n", stopwatch_duration_msecs(&sw));
return 0;
}
static const struct usbc_ops system76_ec_usbc_ops = {
.mux_ops = {
.get_mux_info = system76_ec_get_mux_info,
},
.dp_ops = {
.wait_for_connection = system76_ec_wait_for_connection,
.enter_dp_mode = system76_ec_enter_dp_mode,
.wait_for_dp_mode_entry = system76_ec_wait_for_dp_mode_entry,
.wait_for_hpd = system76_ec_wait_for_hpd,
},
};
const struct usbc_ops *usbc_get_ops(void)
{
return &system76_ec_usbc_ops;
}

View File

@@ -3,9 +3,6 @@
#ifndef __USBC_MUX_H__
#define __USBC_MUX_H__
#include <stdbool.h>
#include <stdint.h>
/* struct to hold all USB-C mux related variables */
struct usbc_mux_info {
bool dp; /* DP connected */

View File

@@ -11,8 +11,6 @@ config BOARD_SYSTEM76_ADL_COMMON
select DRIVERS_INTEL_USB4_RETIMER
select EC_SYSTEM76_EC
select EC_SYSTEM76_EC_LOCKDOWN
select ENABLE_TCSS_DISPLAY_DETECTION
select ENABLE_TCSS_USB_DETECTION
select HAVE_ACPI_RESUME
select HAVE_ACPI_TABLES
select HAVE_CMOS_DEFAULT

View File

@@ -45,13 +45,6 @@ config BOARD_SYSTEM76_LEMP13
select SOC_INTEL_METEORLAKE_U_H
select SOC_INTEL_ENABLE_USB4_PCIE_RESOURCES
config BOARD_SYSTEM76_LEMP13_B
select BOARD_SYSTEM76_MTL_COMMON
select DRIVERS_I2C_TAS5825M
select HAVE_SPD_IN_CBFS
select SOC_INTEL_METEORLAKE_U_H
select SOC_INTEL_ENABLE_USB4_PCIE_RESOURCES
if BOARD_SYSTEM76_MTL_COMMON
config MAINBOARD_DIR
@@ -59,7 +52,7 @@ config MAINBOARD_DIR
config VARIANT_DIR
default "darp10" if BOARD_SYSTEM76_DARP10 || BOARD_SYSTEM76_DARP10_B
default "lemp13" if BOARD_SYSTEM76_LEMP13 || BOARD_SYSTEM76_LEMP13_B
default "lemp13" if BOARD_SYSTEM76_LEMP13
config OVERRIDE_DEVICETREE
default "variants/\$(CONFIG_VARIANT_DIR)/overridetree.cb"
@@ -68,17 +61,15 @@ config MAINBOARD_PART_NUMBER
default "darp10" if BOARD_SYSTEM76_DARP10
default "darp10-b" if BOARD_SYSTEM76_DARP10_B
default "lemp13" if BOARD_SYSTEM76_LEMP13
default "lemp13-b" if BOARD_SYSTEM76_LEMP13_B
config MAINBOARD_SMBIOS_PRODUCT_NAME
default "Darter Pro" if BOARD_SYSTEM76_DARP10 || BOARD_SYSTEM76_DARP10_B
default "Lemur Pro" if BOARD_SYSTEM76_LEMP13 || BOARD_SYSTEM76_LEMP13_B
default "Lemur Pro" if BOARD_SYSTEM76_LEMP13
config MAINBOARD_VERSION
default "darp10" if BOARD_SYSTEM76_DARP10
default "darp10-b" if BOARD_SYSTEM76_DARP10_B
default "lemp13" if BOARD_SYSTEM76_LEMP13
default "lemp13-b" if BOARD_SYSTEM76_LEMP13_B
config CMOS_DEFAULT_FILE
default "src/mainboard/\$(MAINBOARDDIR)/cmos.default"

View File

@@ -8,6 +8,3 @@ config BOARD_SYSTEM76_DARP10_B
config BOARD_SYSTEM76_LEMP13
bool "lemp13"
config BOARD_SYSTEM76_LEMP13_B
bool "lemp13-b"

View File

@@ -9,8 +9,6 @@ config BOARD_SYSTEM76_RPL_COMMON
select DRIVERS_I2C_HID
select EC_SYSTEM76_EC
select EC_SYSTEM76_EC_LOCKDOWN
select ENABLE_TCSS_DISPLAY_DETECTION
select ENABLE_TCSS_USB_DETECTION
select HAVE_ACPI_RESUME
select HAVE_ACPI_TABLES
select HAVE_CMOS_DEFAULT

View File

@@ -652,6 +652,13 @@ WEAK_DEV_PTR(tcss_usb3_port4);
static void fill_fsps_tcss_params(FSP_S_CONFIG *s_cfg,
const struct soc_intel_alderlake_config *config)
{
const struct device *tcss_port_arr[] = {
DEV_PTR(tcss_usb3_port1),
DEV_PTR(tcss_usb3_port2),
DEV_PTR(tcss_usb3_port3),
DEV_PTR(tcss_usb3_port4),
};
s_cfg->TcssAuxOri = config->tcss_aux_ori;
/* Explicitly clear this field to avoid using defaults */
@@ -669,8 +676,8 @@ static void fill_fsps_tcss_params(FSP_S_CONFIG *s_cfg,
s_cfg->D3ColdEnable = CONFIG(D3COLD_SUPPORT);
s_cfg->UsbTcPortEn = 0;
for (int i = 0; i < ARRAY_SIZE(config->tcss_ports); i++) {
if (config->tcss_ports[i].enable)
for (int i = 0; i < MAX_TYPE_C_PORTS; i++) {
if (is_dev_enabled(tcss_port_arr[i]))
s_cfg->UsbTcPortEn |= BIT(i);
}