mb/amd/birman_plus/ec: Rectify ECRAM register bits

Rectify wrong EC module RAM register bits
based on PI source code 1.0.0.1b

Change-Id: I1a13d99a55a4aa02a5cb0e67ffa4ed555f91a471
Signed-off-by: Ana Carolina Cabral <ana.cpmelo95@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/86084
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Patrick Rudolph <patrick.rudolph@9elements.com>
This commit is contained in:
Ana Carolina Cabral 2025-01-16 12:19:44 -03:00 committed by Felix Held
commit 637c35cd67

View file

@ -8,6 +8,9 @@
#define BIRMAN_EC_CMD 0x666
#define BIRMAN_EC_DATA 0x662
#define EC_GPIO_0_ADDR 0xA0
#define EC0_EVAL_PRSNTn BIT(2)
#define EC_GPIO_1_ADDR 0xA1
#define EC1_EVAL_PWREN BIT(1)
@ -23,22 +26,25 @@
#define EC3_LOM_RST_AUX BIT(1)
#define EC3_EVAL_RST_AUX BIT(0)
#define EC_GPIO_6_ADDR 0xA6
#define EC6_TPNL_BUF_EN BIT(1)
#define EC6_TPAD_BUF_EN BIT(0)
#define EC_GPIO_7_ADDR 0xA7
#define EC7_WWAN_PWR_OFF_N BIT(7)
#define EC7_BT_RADIO_DIS BIT(2)
#define EC7_WL_RADIO_DIS BIT(0)
#define EC7_WL_RADIO_EN BIT(0)
#define EC_GPIO_8_ADDR 0xA8
#define EC8_ADAPTER_OFF BIT(5)
#define EC8_EVAL_SMBUS1_N_SW BIT(3)
#define EC8_MP2_SEL BIT(2)
#define EC8_DT_N_SSD1_SW BIT(1)
#define EC_GPIO_9_ADDR 0xA9
#define EC9_CAM0_PWR_EN BIT(7)
#define EC9_CAM1_PWR_EN BIT(6)
#define EC9_WWAN_RST BIT(5)
#define EC9_DT_PWREN BIT(2)
#define EC9_WWAN_RST_N BIT(5)
#define EC9_SSD1_PWREN BIT(2)
#define EC9_TPM_PWR_EN BIT(1)
#define EC9_TPM_S0I3_N BIT(0)
@ -52,15 +58,9 @@
#define ECA_SMBUS1_EN BIT(1)
#define ECA_SMBUS0_EN BIT(0)
#define EC_GPIO_C_ADDR 0xAC
#define ECC_TPNL_BUF_EN BIT(6)
#define ECC_TPAD_BUF_EN BIT(5)
#define ECC_NFC_BUF_EN BIT(4)
#define EC_GPIO_D_ADDR 0xAD
#define ECD_TPNL_PWR_EN BIT(7)
#define ECD_TPNL_EN BIT(6)
#define ECD_SSD1_PWR_EN BIT(5)
#define ECD_FPR_PWR_EN BIT(3)
#define ECD_FPR_OFF_N BIT(2)
#define ECD_FPR_LOCK_N BIT(1)
@ -73,19 +73,18 @@
#define ECE_WLAN_PWR_EN BIT(4)
#define ECE_WWAN_PWR_EN BIT(3)
#define ECE_CAM_PWR_EN BIT(2)
#define ECE_FPR_N_GBE_SEL BIT(1)
#define ECE_BT_N_TPNL_SEL BIT(0)
#define ECE_FPR_N_GBE_SEL BIT(1) //USB5_MUX_FPR#_GBE_SEL
#define ECE_BT_N_TPNL_SEL BIT(0) //USB6_MUX_BT#_TPNL_SEL
#define EC_GPIO_F_ADDR 0xAF
#define ECF_CAM_FW_WP_N BIT(7)
#define ECF_I2C_MUX_OE_N BIT(4)
#define ECF_WLAN0_N_WWAN1_SW BIT(1)
#define ECF_WWAN0_N_WLAN1_SW BIT(0)
#define ECF_SD_MAIN_PWR_EN BIT(6)
#define ECF_SDE_N_WLAN1_SW BIT(1)
#define ECF_GBE_N_WWAN1_SW BIT(0)
#define EC_GPIO_G_ADDR 0xB0
#define ECG_IR_LED_PWR_EN BIT(7)
#define ECG_U0_WLAN_HDR_SEL BIT(6)
#define ECG_DT_SSD1_MUX_OFF BIT(5)
#define ECG_NFC_BUF_EN BIT(5)
#define ECG_WLAN_WWAN_MUX_OFF BIT(4)
static void configure_ec_gpio(void)
@ -105,7 +104,10 @@ static void configure_ec_gpio(void)
if (CONFIG(ENABLE_EVAL_CARD)) {
tmp |= EC2_EVAL_SLOT_PWREN;
if (CONFIG(ENABLE_EVAL_19V)) {
tmp |= EC2_EVAL_19V_EN;
uint8_t eval_present = !(ec_read(EC_GPIO_0_ADDR) & EC0_EVAL_PRSNTn);
if (eval_present) {
tmp |= EC2_EVAL_19V_EN;
}
} else {
tmp &= ~EC2_EVAL_19V_EN;
}
@ -122,72 +124,114 @@ static void configure_ec_gpio(void)
printk(BIOS_SPEW, "Write reg [0x%02x] = 0x%02x\n", EC_GPIO_3_ADDR, tmp);
ec_write(EC_GPIO_3_ADDR, tmp);
tmp = ec_read(EC_GPIO_6_ADDR);
tmp |= EC6_TPNL_BUF_EN | EC6_TPAD_BUF_EN;
printk(BIOS_SPEW, "Write reg [0x%02x] = 0x%02x\n", EC_GPIO_6_ADDR, tmp);
ec_write(EC_GPIO_6_ADDR, tmp);
tmp = ec_read(EC_GPIO_7_ADDR);
tmp &= ~EC7_BT_RADIO_DIS;
tmp &= ~EC7_WL_RADIO_DIS;
tmp |= EC7_WWAN_PWR_OFF_N;
tmp &= ~(EC7_BT_RADIO_DIS | EC7_BT_RADIO_DIS);
printk(BIOS_SPEW, "Write reg [0x%02x] = 0x%02x\n", EC_GPIO_7_ADDR, tmp);
ec_write(EC_GPIO_7_ADDR, tmp);
tmp = ec_read(EC_GPIO_8_ADDR);
tmp |= EC8_DT_N_SSD1_SW;
tmp |= EC8_MP2_SEL;
printk(BIOS_SPEW, "Write reg [0x%02x] = 0x%02x\n", EC_GPIO_8_ADDR, tmp);
ec_write(EC_GPIO_8_ADDR, tmp);
tmp = ec_read(EC_GPIO_9_ADDR);
tmp |= EC9_CAM0_PWR_EN | EC9_CAM1_PWR_EN | EC9_WWAN_RST | EC9_TPM_PWR_EN | EC9_DT_PWREN;
tmp |= EC9_CAM0_PWR_EN | EC9_CAM1_PWR_EN | EC9_TPM_PWR_EN;
if (CONFIG(DISABLE_WWAN_GBE_BIRMANPLUS)) {
tmp &= ~EC9_WWAN_RST_N;
} else {
tmp |= EC9_WWAN_RST_N;
}
if (CONFIG(ENABLE_SSD1_BIRMANPLUS)) {
tmp |= EC9_SSD1_PWREN;
} else {
tmp &= ~EC9_SSD1_PWREN;
}
printk(BIOS_SPEW, "Write reg [0x%02x] = 0x%02x\n", EC_GPIO_9_ADDR, tmp);
ec_write(EC_GPIO_9_ADDR, tmp);
tmp = ec_read(EC_GPIO_A_ADDR);
tmp = ECA_MUX1_S0 | ECA_SMBUS1_EN | ECA_SMBUS0_EN;
// Touch Panel under I2C0 bus (default)
tmp &= ~(ECA_MUX0_S1 | ECA_MUX0_S0);
// Touch Pad Under I2C1 bus (default)
tmp |= ECA_MUX1_S0;
tmp &= ~ECA_MUX1_S1;
// NFC under I2C0 bus (default)
tmp &= ~(ECA_MUX2_S0 | ECA_MUX2_S1);
printk(BIOS_SPEW, "Write reg [0x%02x] = 0x%02x\n", EC_GPIO_A_ADDR, tmp);
ec_write(EC_GPIO_A_ADDR, tmp);
tmp = ec_read(EC_GPIO_C_ADDR);
tmp |= ECC_TPNL_BUF_EN | ECC_TPAD_BUF_EN | ECC_NFC_BUF_EN;
printk(BIOS_SPEW, "Write reg [0x%02x] = 0x%02x\n", EC_GPIO_C_ADDR, tmp);
ec_write(EC_GPIO_C_ADDR, tmp);
tmp = ec_read(EC_GPIO_D_ADDR);
tmp |= ECD_TPNL_PWR_EN | ECD_TPNL_EN | ECD_TPAD_DISABLE_N | ECD_SSD1_PWR_EN;
tmp |= ECD_TPNL_PWR_EN | ECD_TPNL_EN | ECD_TPAD_DISABLE_N;
printk(BIOS_SPEW, "Write reg [0x%02x] = 0x%02x\n", EC_GPIO_D_ADDR, tmp);
ec_write(EC_GPIO_D_ADDR, tmp);
tmp = ec_read(EC_GPIO_E_ADDR);
tmp |= ECE_LOM_PWR_EN | ECE_SSD0_PWR_EN | ECE_SD_PWR_EN;
tmp |= ECE_CAM_PWR_EN | ECE_FPR_N_GBE_SEL;
tmp |= ECE_SSD0_PWR_EN | ECE_CAM_PWR_EN | ECE_FPR_N_GBE_SEL;
tmp &= ~ECE_BT_N_TPNL_SEL;
if (CONFIG(ENABLE_SDCARD_BIRMANPLUS)) {
tmp |= ECE_SD_PWR_EN;
} else {
tmp &= ~ECE_SD_PWR_EN;
}
if (CONFIG(ENABLE_GBE_BIRMANPLUS)) {
tmp |= ECE_LOM_PWR_EN;
} else {
tmp &= ~ECE_LOM_PWR_EN;
}
if (CONFIG(DISABLE_WWAN_GBE_BIRMANPLUS)) { // no WWAN, turn off WWAN power
tmp &= ~ECE_WWAN_PWR_EN;
} else {
tmp |= ECE_WWAN_PWR_EN;
}
if (CONFIG(DISABLE_WLAN_SD_BIRMANPLUS)) { // no WLAN, turn off WLAN power
tmp &= ~ECE_WLAN_PWR_EN;
} else {
tmp |= ECE_WLAN_PWR_EN;
}
printk(BIOS_SPEW, "Write reg [0x%02x] = 0x%02x\n", EC_GPIO_E_ADDR, tmp);
ec_write(EC_GPIO_E_ADDR, tmp);
tmp = ec_read(EC_GPIO_F_ADDR);
if (CONFIG(ENABLE_SDCARD_BIRMANPLUS)) {
tmp |= ECF_SD_MAIN_PWR_EN;
} else {
tmp &= ~ECF_SD_MAIN_PWR_EN;
}
if (CONFIG(ENABLE_WLAN02_BIRMANPLUS)) {
tmp |= ECF_WWAN0_N_WLAN1_SW;
tmp &= ~ECF_GBE_N_WWAN1_SW; // Enable x2 WLAN, SD disable
} else {
tmp &= ~ECF_WWAN0_N_WLAN1_SW;
tmp |= ECF_GBE_N_WWAN1_SW; // Default GBE x1 WWAN x1
}
if (CONFIG(ENABLE_WWAN02_BIRMANPLUS)) {
tmp |= ECF_WLAN0_N_WWAN1_SW;
tmp &= ~ECF_SDE_N_WLAN1_SW; // Enable x2 WWAN, GBE disable
} else {
tmp &= ~ECF_WLAN0_N_WWAN1_SW;
tmp |= ECF_SDE_N_WLAN1_SW; // Default SDCard x1 WLAN x1
}
printk(BIOS_SPEW, "Write reg [0x%02x] = 0x%02x\n", EC_GPIO_F_ADDR, tmp);
ec_write(EC_GPIO_F_ADDR, tmp);
tmp = ec_read(EC_GPIO_G_ADDR);
tmp &= ~ECG_DT_SSD1_MUX_OFF;
tmp &= ~ECG_WLAN_WWAN_MUX_OFF;
tmp |= ECG_IR_LED_PWR_EN | ECG_U0_WLAN_HDR_SEL;
tmp &= ~ECG_WLAN_WWAN_MUX_OFF; // Keep low to avoid GPP13, GPP14 not work.
tmp |= ECG_IR_LED_PWR_EN | ECG_U0_WLAN_HDR_SEL | ECG_NFC_BUF_EN;
printk(BIOS_SPEW, "Write reg [0x%02x] = 0x%02x\n", EC_GPIO_G_ADDR, tmp);
ec_write(EC_GPIO_G_ADDR, tmp);
}