summaryrefslogtreecommitdiff
path: root/src/soc/intel/cannonlake
diff options
context:
space:
mode:
authorKane Chen <kane.chen@intel.com>2020-04-13 20:48:54 +0800
committerTim Wawrzynczak <twawrzynczak@chromium.org>2020-04-28 15:43:36 +0000
commitd2b2be39296d910178173273017800a1b054a1ba (patch)
tree093bc25858c3ae8eb5bfb9ab06e361c0eae5d097 /src/soc/intel/cannonlake
parent007faee9486bcc24e1bc7011717ae88d7eb5e62b (diff)
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>
Diffstat (limited to 'src/soc/intel/cannonlake')
-rw-r--r--src/soc/intel/cannonlake/acpi/scs.asl56
1 files changed, 56 insertions, 0 deletions
diff --git a/src/soc/intel/cannonlake/acpi/scs.asl b/src/soc/intel/cannonlake/acpi/scs.asl
index 775c99781a..8dd3003053 100644
--- a/src/soc/intel/cannonlake/acpi/scs.asl
+++ b/src/soc/intel/cannonlake/acpi/scs.asl
@@ -20,9 +20,12 @@ Scope (\_SB.PCI0) {
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 @@ Scope (\_SB.PCI0) {
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 */