Tim Wawrzynczak has submitted this change. ( https://review.coreboot.org/c/coreboot/+/40467 )
Change subject: soc/intel/cannonlake: Report driver strength by _DSM in eMMC ACPI device ......................................................................
soc/intel/cannonlake: Report driver strength by _DSM in eMMC ACPI device
According to doc 621880, it suggests setting 40 ohm in byte 185 in extCSD.
This commit provides _DSM method for driver to query driving strength.
TEST=mmc extcsd read |grep HS_TIMING and found bit[7:4] is set to 4 BUG=b:154159888
Signed-off-by: Kane Chen kane.chen@intel.com Change-Id: I1b4df8b0d1d2cad3a7f521ad47ee5a4b3320c767 Reviewed-on: https://review.coreboot.org/c/coreboot/+/40467 Tested-by: build bot (Jenkins) no-reply@coreboot.org Reviewed-by: Tim Wawrzynczak twawrzynczak@chromium.org --- M src/soc/intel/cannonlake/acpi/scs.asl 1 file changed, 56 insertions(+), 0 deletions(-)
Approvals: build bot (Jenkins): Verified Tim Wawrzynczak: Looks good to me, approved
diff --git a/src/soc/intel/cannonlake/acpi/scs.asl b/src/soc/intel/cannonlake/acpi/scs.asl index 775c997..8dd3003 100644 --- a/src/soc/intel/cannonlake/acpi/scs.asl +++ b/src/soc/intel/cannonlake/acpi/scs.asl @@ -20,9 +20,12 @@ Name(_ADR, 0x001A0000) Name (_DDN, "eMMC Controller") Name (TEMP, 0) + Name (DSUU, ToUUID("f6c13ea5-65cd-461f-ab7a-29f7e8d5bd61"))
OperationRegion(SCSR, PCI_Config, 0x00, 0x100) Field(SCSR, WordAcc, NoLock, Preserve) { + Offset (0x0), /* PCI VID DID */ + VDID, 32, Offset (0x84), /* PMECTRLSTATUS */ PMCR, 16, Offset (0xA2), /* PG_CONFIG */ @@ -64,6 +67,59 @@ Return (0) } } + /* _DSM x86 Device Specific Method + * Arg0: UUID Unique function identifier + * Arg1: Integer Revision Level + * Arg2: Integer Function Index (0 = Return Supported Functions) + * Arg3: Package Parameters + */ + Method (_DSM, 4) + { + If (LEqual (Arg0, ^DSUU)) { + /* Check the revision */ + If (LGreaterEqual (Arg1, Zero)) { + /* + * Function Index 0 the return value is a buffer + * containing one bit for each function index, starting + * with zero. + * Bit 0 - Indicates whether there is support for any + * functions other than function 0 + * Bit 1 - Indicates support to clear power control + * register + * Bit 2 - Indicates support to set power control + * register + * Bit 3 - Indicates support to set 1.8V signalling + * Bit 4 - Indicates support to set 3.3V signalling + * Bit 5 - Indicates support for HS200 mode + * Bit 6 - Indicates support for HS400 mode + * Bit 9 - Indicates eMMC I/O Driver Strength + */ + If (LEqual (Arg2, Zero)) { + If (Lequal (VDID, 0x02c48086) ) { + /* + * Set bit 9 for CML eMMC to indicate + * eMMC I/O driver strength is supported + */ + Return(Buffer() {0x0, 0x02}) + } + + } + /* + * Function Index 9, the return value is preferred eMMC + * driver strength + * 0 - 50 ohm + * 1 - 33 ohm + * 2 - 66 ohm + * 3 - 100 ohm + * 4 - 40 ohm + */ + If (LEqual (Arg2, 9)) { + Return(Buffer() {0x4}) + } + } + } + Return(Buffer() { 0x0 }) + } }
/* SD CARD */