/** @file ;****************************************************************************** ;* Copyright 2021 Insyde Software Corp. All Rights Reserved. ;* ;* You may not reproduce, distribute, publish, display, perform, modify, adapt, ;* transmit, broadcast, present, recite, release, license or otherwise exploit ;* any part of this publication in any form, by any means, without the prior ;* written permission of Insyde Software Corp. ;* ;****************************************************************************** */ /** @file @todo ADD DESCRIPTION @copyright INTEL CONFIDENTIAL Copyright 1999 - 2021 Intel Corporation. The source code contained or described herein and all documents related to the source code ("Material") are owned by Intel Corporation or its suppliers or licensors. Title to the Material remains with Intel Corporation or its suppliers and licensors. The Material may contain trade secrets and proprietary and confidential information of Intel Corporation and its suppliers and licensors, and is protected by worldwide copyright and trade secret laws and treaty provisions. No part of the Material may be used, copied, reproduced, modified, published, uploaded, posted, transmitted, distributed, or disclosed in any way without Intel's prior express written permission. No license under any patent, copyright, trade secret or other intellectual property right is granted to or conferred upon you by disclosure or delivery of the Materials, either expressly, by implication, inducement, estoppel or otherwise. Any license under such intellectual property rights must be express and approved by Intel in writing. Unless otherwise agreed by Intel in writing, you may not remove or alter this notice or any other notice embedded in Materials by Intel or Intel's suppliers or licensors in any way. This file contains 'Framework Code' and is licensed as such under the terms of your license agreement with Intel or your vendor. This file may not be modified, except as allowed by additional terms of your license agreement. @par Specification Reference: **/ #ifndef EC_COMMANDS_H_ #define EC_COMMANDS_H_ // // Timeout if EC command/data fails // #define EC_TIME_OUT 0x20000 // // The EC implements an embedded controller interface at ports 0x60/0x64 and a ACPI compliant // system management controller at ports 0x62/0x66. Port 0x66 is the command and status port, // port 0x62 is the data port. // #define EC_D_PORT 0x62 #define EC_C_PORT 0x66 // // Status Port 0x62 // #define EC_S_OVR_TMP 0x80 // Current CPU temperature exceeds the threshold #define EC_S_SMI_EVT 0x40 // SMI event is pending #define EC_S_SCI_EVT 0x20 // SCI event is pending #define EC_S_BURST 0x10 // EC is in burst mode or normal mode #define EC_S_CMD 0x08 // Byte in data register is command/data #define EC_S_IGN 0x04 // Ignored #define EC_S_IBF 0x02 // Input buffer is full/empty #define EC_S_OBF 0x01 // Output buffer is full/empty // // EC commands that are issued to the EC through the command port (0x66). // New commands and command parameters should only be written by the host when IBF=0. // Data read from the EC data port is valid only when OBF=1. // #define EC_C_SMI_NOTIFY_ENABLE 0x04 // Enable SMI notifications to the host #define EC_C_SMI_NOTIFY_DISABLE 0x05 // SMI notifications are disabled and pending notifications cleared #define EC_C_QUERY_SYS_STATUS 0x06 // Returns 1 byte of information about the system status #define EC_C_QUERY_BOARD_ID_BIT 0x0A // Board Id 8 or 16 bit #define EC_C_QUERY_BOARD_BUTTON_BITS 0x0A // Get board button status #define EC_C_SMC_GET_MODE 0x09 // Command to detect EC #define EC_C_RESET 0x0B // EC reset #define EC_C_FAB_ID 0x0D // Get the board fab ID in the lower 3 bits #define EC_C_PLN_ENABLE 0x0F // Enable or disable PLN #define EC_C_SET_CHARGING_METHOD 0x13 // Command to specify charging method. (Normal charging or Fast charging (DFCT)) #define EC_C_GET_PMIC_VENDOR_ID 0x1B // Command to detect the Vendor ID of the PMIC #define EC_C_SLP_S0_VOLTAGE 0x1C // Command to set/reset the bits of register V085ACNT[7:6] #define EC_C_USBC_RETIMER 0x1F // notify EC of Retimer compliance mode enablement status #define EC_C_SYSTEM_POWER_OFF 0x22 // Turn off the system power #define EC_C_ENABLE_POWER_BTN 0x23 // Disable power button functionality #define EC_C_DISABLE_POWER_BTN 0x24 // Enable power button functionality #define EC_C_LOW_POWER_ENTRY 0x2C // Enter Low Power Mode #define EC_C_LOW_POWER_EXIT 0x2D // Exit Low Power Mode #define EC_C_UPDATE_EC 0x2E // Update Device Power #define EC_C_PMIC_VOLTAGE 0x2F // Command to set the VCC and VDDQ Voltage Levels #define EC_C_FAIL_SAFE_FAN_CTRL 0x39 // Set Fail safe FAN speed for given Cpu temp #define EC_C_SET_PECI_MODE 0x3C // Switch PECI mode between Legacy and eSPI mode #define EC_C_LAN_ON 0x46 // Turn on the power to LAN through EC #define EC_C_LAN_OFF 0x47 // Turn off the power to LAN through EC #define EC_C_DIS_PCH_DTS_READ 0x4E // Disable PCH DTS reading #define EC_C_SET_CTEMP 0x58 // The next byte written to the data port will be the shutdown temperature #define EC_C_EN_DTEMP 0x5E // Commands EC to begin reading Thermal Diode and comparing to Critical Temperature #define EC_C_DIS_DTEMP 0x5F // Commands EC to stop reading Thermal Diode #define EC_C_PCH_SMBUS_EN 0x60 // EC PCH SMBus thermal monitoring Enable cmd #define EC_C_PCH_SMBUS_DIS 0x61 // EC PCH SMBus thermal monitoring Disable cmd #define EC_C_PCH_SMBUS_WRITE_EN 0x68 // EC PCH SMBus Write Enable cmd #define EC_C_PCH_SMBUS_WRITE_DIS 0x69 // EC PCH SMBus Write Disable cmd #define EC_C_TS_ON_DIMM_EN 0x6B // TS-on-DIMM thermal monitoring enable command #define EC_C_TS_ON_DIMM_DIS 0x6C // TS-on-DIMM thermal monitoring disable command #define EC_C_PCH_SMBUS_MSG_LENGTH 0x6D // PCH SMBus block read buffer length #define EC_C_PCH_SMBUS_PEC_EN 0x6E // PCH SMBus Packet Error Checking (PEC) Enable command. #define EC_C_PCH_SMBUS_PEC_DIS 0x76 // PCH SMBus Packet Error Checking (PEC) Disable command. #define EC_C_SMBUS_HIGH_SPEED 0x75 // EC SMBus high speed mode command #define EC_C_SMI_QUERY 0x70 // The host reads the data port to retrieve the notifications #define EC_C_SMI_TIMER 0x71 // Commands the EC to generate a periodic SMI to the host #define EC_C_SMI_HOTKEY 0x72 // Get the scan code of hotkey pressed (CTRL + ALT + SHIFT + key) #define EC_C_READ_MEM 0x80 // Read the EC memory #define EC_C_WRITE_MEM 0x81 // Write the EC memory #define EC_C_DOCK_STATUS 0x8A // Get the dock status #define EC_C_EC_REVISION 0x90 // Get the revision for the EC #define EC_C_UPDATE_PWM 0x1A // Update the FAN Speed #define EC_C_SET_PD_FW_UPDATE_MODE 0x1D // Commands EC to enter or exit Retimer FW Update Mode for ALL PD controller #define EC_C_GET_PD_FW_UPDATE_MODE 0x1E // Commands EC to get Status of ALL PD controller Retimer FW Update Mode #define EC_C_ACPI_ENABLE 0xAA // Enable ACPI mode #define EC_C_ACPI_DISABLE 0xAB // Disable ACPI mode #define EC_C_SMI_INJECT 0xBA // The next byte written to the data port will generate an immediate SMI #define EC_C_SMI_DISABLE 0xBC // SMI generation by the EC is disabled #define EC_C_SMI_ENABLE 0xBD // SMI generation by the EC is enabled #define EC_C_USBC_SX_ENTRY_WAIT 0xE2 // Send this command from SMM and wait for response #define EC_C_USBC_SX_EXIT_WAIT 0xE3 // Send this command during boot and wait for response #define EC_C_WDT_WRITE 0xE4 // write command to EC WDT through 0x66 EC_C_PORT #define EC_C_WDT_READ 0xE5 // read command to EC WDT through 0x66 EC_C_PORT #define EC_C_USBC_IOM_READY_NOTIFY 0xE4 // Send this command during boot/resume when IOM is ready #define EC_C_USBC_GET_USB_CONN_STATUS 0xE5 // Send this command during boot before USB enumeration and wait for response #define EC_C_SET_G3TOS5 0xF3 // Set KSC Misc Flags BIT0(G3ToS5) #define EC_C_USBC_PD_STATUS 0xFF // Get PD status from EC RAM // // @todo Those definitions need to be reviewed and cleaned up. // #define EC_B_BOARD_ID 0x0F // Board ID = [3:0] #define EC_B_BOARD_ID_BIT_16 0x80 // Bit7 = 1 means 16 bit implementation #define EC_B_SYS_STATUS_AC 0x10 // AC power status (Bit 4 = 1, AC powered) #define EC_B_SYS_STATUS_THERMAL 0x0F // CPU thermal state (0 ~ 9) #define EC_B_SYS_STATUS_FAN 0x40 // Fan status (Bit 6 = 1, Fan on) #define EC_B_LID_STATUS_OPEN 0x40 // Lid status (Bit 6 = 1, Lid open) #define EC_B_SYS_STATUS_DOCK 0x20 // Dock status (Bit 5 = 1, Docked) #define EC_B_DOCK_STATUS_ATTACH 0x01 // Dock status (Bit 0 = 1, Attach) #define EC_D_LID_STATE 0x03 // Get Lid State (EC RAM offset 0x03 bit6) #define EC_D_FORCE_RESET 0x78 // Enable/Disable ForceResetAfterAcRemoval (EC RAM offset 0x78 bit2) #define EC_D_TEN_SEC_MODE 0x78 // Enable/Disable 10sec Power button Override (EC RAM offset 0x78 bit1) #define EC_D_SATA2_POWER 0xC8 // Enable/Disable SATA port2 power (EC RAM offset 0xC8 bit0) #define EC_D_NORMAL_CHARGING 0x01 // Select normal charging method #define EC_D_FAST_CHARGING 0x02 // Select fast charging (DFCT) method // // EC commands that are only valid if the EC has ACPI mode enabled. // Note that capacity and voltage are 16 bit values, thus you need to read them from // ACPI space with two reads (little Endian). // #define EC_VIRTUAL_BAT_STATUS 48 // Status of the virtual battery (present) #define EC_VIRTUAL_BAT_PRESENT_MASK 0x10 // Bit 4 is the indicator #define EC_REAL_BAT1_STATUS 50 // Status of the first real battery (present, charging) #define EC_REAL_BAT1_REMAINING_PERCENT 52 // Remaining capacity in percentage #define EC_REAL_BAT1_REMAINING_CAPACITY 89 // Remaining capacity in mWh #define EC_REAL_BAT1_RESOLUTION_VOLTAGE 93 // Full resolution voltage in mV #define EC_REAL_BAT2_STATUS 54 // Status of the second real battery (present, charging) #define EC_REAL_BAT2_REMAINING_PERCENT 56 // Remaining capacity in percentage #define EC_REAL_BAT2_REMAINING_CAPACITY 99 // Remaining capacity in mWh #define EC_REAL_BAT2_RESOLUTION_VOLTAGE 103 // Full resolution voltage in mV #define EC_REAL_BAT_PRESENT_MASK 0x8 // Bit 3 is the indicator #define EC_REAL_BAT_CHARGING_MASK 0x1 // Bit 1 is the indicator // // SMI notification code table, read through command EC_C_SMI_QUERY // #define EC_N_SMI_NULL 0x00 // Null marks the end of the SMI notification queue #define EC_N_SMI_HOTKEY 0x20 // Hotkey pressed SMI #define EC_N_SMI_ACINSERTION 0x30 // AC insertion SMI #define EC_N_SMI_ACREMOVAL 0x31 // AC removal SMI #define EC_N_SMI_PWRSW 0x32 // Power switch press SMI #define EC_N_SMI_LID 0x33 // Lid switch change SMI #define EC_N_SMI_VB 0x34 // Virtual battery switch change SMI #define EC_N_SMI_THERM_0 0x60 // Thermal state 0 SMI #define EC_N_SMI_THERM_1 0x61 // Thermal state 1 SMI #define EC_N_SMI_THERM_2 0x62 // Thermal state 2 SMI #define EC_N_SMI_THERM_3 0x63 // Thermal state 3 SMI #define EC_N_SMI_THERM_4 0x64 // Thermal state 4 SMI #define EC_N_SMI_THERM_5 0x65 // Thermal state 5 SMI #define EC_N_SMI_THERM_6 0x66 // Thermal state 6 SMI #define EC_N_SMI_THERM_7 0x67 // Thermal state 7 SMI #define EC_N_SMI_THERM_8 0x68 // Thermal state 8 SMI #define EC_N_SMI_DOCKED 0x70 // Dock complete SMI #define EC_N_SMI_UNDOCKED 0x71 // Undock complete SMI #define EC_N_SMI_UNDOCKREQUEST 0x72 // Undocking request SMI #define EC_N_SMI_TIMER 0x80 // Timer wakeup SMI // // Hotkey scan code (CTRL + ALT + SHIFT + key) // #define EC_HK_ESC 0x01 // ESC #define EC_HK_1 0x02 // 1 ! #define EC_HK_2 0x03 // 2 @ #define EC_HK_3 0x04 // 3 # #define EC_HK_4 0x05 // 4 $ #define EC_HK_5 0x06 // 5 % #define EC_HK_6 0x07 // 6 ^ #define EC_HK_7 0x08 // 7 & #define EC_HK_8 0x09 // 8 * #define EC_HK_9 0x0A // 9 ( #define EC_HK_0 0x0B // 0 ) #define EC_HK_MINUS 0x0C // - _ #define EC_HK_ADD 0x0D // = + #define EC_HK_F1 0x3B // F1 #define EC_HK_F2 0x3C // F2 #define EC_HK_F3 0x3D // F3 #define EC_HK_F4 0x3E // F4 #define EC_HK_F5 0x3F // F5 #define EC_HK_F6 0x40 // F6 #define EC_HK_F7 0x41 // F7 #define EC_HK_F8 0x42 // F8 #define EC_HK_F9 0x43 // F9 #define EC_HK_F10 0x44 // F10 #define EC_HK_F11 0x57 // F11 #define EC_HK_F12 0x58 // F12 // // EC WDT timeout definition // #define EC_WDT_FIRST_BOOT 0xFF // 255 second for the first release boot #define EC_WDT_TIMEOUT 0x80 // 128 second for normal boot #define EC_WDT_ENABLE 0x02 // 10=ARM WDT #define EC_WDT_DISABLE 0x01 // 01=Disarm WDT // // For notify EC to PD firmware to Enable/Disable USB or PCIe. // #define USBC_MISC_VPRO_EN_DIS 0x02 #define USBC_MISC_PCIE_EN_DIS 0x03 #define SMCHOST_USBC_MISC_CMD_HANDLER 0xE3 // // BoardId format definition (Data came from EC_C_FAB_ID command) // // @todo Instead of Build Flag, we could have maintained a generic structure called RvpFields and create TglRvpFields structure by including RvpFields typedef union { UINT16 Raw; struct { UINT16 BoardId :6; // [5:0] - BOARD_IDx UINT16 BomId :3; // [8:6] - BOM_IDx UINT16 FabId :2; // [10:9] - REV_FAB_IDx UINT16 SpdPresent :1; // [11] - SPD_PRSNT UINT16 DdiAConfig :1; // [12] - DDI_A_CONFIG 0: EDP, 1: MIPI UINT16 DdiBConfig :1; // [13] - DDI_B_CONFIG 0: EDP, 1: MIPI UINT16 DdiBDisplay :1; // [14] - DDI_B_DISPLAY 0: INTERNAL, 1: EXTERNAL UINT16 Reserved :1; // [15] - RESERVED } TglRvpFields; } BOARD_ID_INFO; //[-start-191111-IB10189001-add]// // Insyde need some EC command. Copy below from EC.h #define SMC_DEEPSX_CMD 0x29 #define EC_DEBUG_LOW_POWER_ENABLE 0x01 // [0] - Low power mode, when set, the EC idles its CPU core and powers down all unnecessary modules to achieve the lowest possible power consumption for CS. #define EC_POWER_FEATURES_CMD 0x027 // This is the command for setting EC Power features. //[-end-191111-IB10189001-add]// typedef union { UINT16 EcWdtWrite; struct { UINT16 Upgrade :1; // [0] - 1=Initiate upgrade/0=Default UINT16 WdtStatus :2; // [2:1] - 11=Reserved/10=ARM WDT/01=Disarm WDT/00=Disarm WDT,Assert Reset without TopSwap UINT16 WdtMode :2; // [4:3] - 00=Successful completion/NOP/01=Signature verification failure/10=Entry/Exit into/from debug mode/11=Entry/Exit into/from setup mode UINT16 BiosStatus :2; // [6:5] - Current BIOS state/00=default state after reset/01=BIOS message received from PEI/10=BIOS message received from DXE UINT16 Reserved :1; // [7] - reserved UINT16 WdtTimer :8; // [15:8] - 2 seconds set the value to 02h } Bits; } EC_WDT_W_PARAMETER; typedef union { UINT8 EcWdtRead; struct { UINT8 Recovery :1; // [0] - 1 = Recovery Initiated/0 = Default UINT8 Upgrade :1; // [1] - 1 = Initiate upgrade/0 = Default UINT8 WdtStatus :1; // [2] - 0 = wdt disarmed, 1 = wdt armed UINT8 WdtMode :2; // [4:3] - 00=Successful completion/NOP/01=Signature verification failure/10=Entry/Exit into/from debug mode/11=Entry/Exit into/from setup mode UINT8 BiosStatus :2; // [6:5] - Current BIOS state/00=default state after reset/01=BIOS message received from PEI/10=BIOS message received from DXE UINT8 Reserved :1; // [7] - reserved } Bits; } EC_WDT_R_PARAMETER; #endif // EC_COMMANDS_H_