Skip to content

Commit 6eaadc3

Browse files
yliu80wenlingz
authored andcommitted
dm: passthru: support SD hotplug
Add SDC ACPI device in dsdt, and assign GPIO 0 to SDC for SD card detection. Currently, the SD card hotplug function needs to insert SD card when system boot, otherwise, it does not work. Since it needs P2SB virtualization to set SD card presence state, and P2SB does not support user space interfaces so this is an known issue. Tracked-On: #2512 Reviewed-by: Binbin Wu <binbin.wu@intel.com> Signed-off-by: Yuan Liu <yuan1.liu@intel.com> Acked-by: Yu Wang <yu1.wang@intel.com>
1 parent 784bfa2 commit 6eaadc3

File tree

1 file changed

+40
-0
lines changed

1 file changed

+40
-0
lines changed

devicemodel/hw/pci/passthrough.c

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1683,6 +1683,43 @@ write_dsdt_urt1(struct pci_vdev *dev)
16831683
dsdt_line("}");
16841684
}
16851685

1686+
static void
1687+
write_dsdt_sdc(struct pci_vdev *dev)
1688+
{
1689+
printf("write SDC-%x:%x.%x in dsdt for SDC @ 00:1b.0\n",
1690+
dev->bus,
1691+
dev->slot,
1692+
dev->func);
1693+
dsdt_line("Device (SDC)");
1694+
dsdt_line("{");
1695+
dsdt_line(" Name (_ADR, 0x%04X%04X)", dev->slot, dev->func);
1696+
dsdt_line(" Name (_DDN, \"Intel(R) SD Card Controller\")");
1697+
dsdt_line(" Name (_UID, One)");
1698+
dsdt_line(" Method (_CRS, 0, NotSerialized)");
1699+
dsdt_line(" {");
1700+
dsdt_line(" Name (RBUF, ResourceTemplate ()");
1701+
dsdt_line(" {");
1702+
dsdt_line(" GpioInt (Edge, ActiveBoth, SharedAndWake, "
1703+
"PullNone, 0, ");
1704+
dsdt_line(" \"\\\\_SB_.PCI0.AGPI\", 0, ResourceConsumer, ,");
1705+
dsdt_line(" )");
1706+
dsdt_line(" { // Pin list");
1707+
dsdt_line(" 0");
1708+
dsdt_line(" }");
1709+
dsdt_line(" GpioIo (Exclusive, PullDefault, 0x0000, "
1710+
"0x0000, IoRestrictionInputOnly,");
1711+
dsdt_line(" \"\\\\_SB._PCI0.AGPI\", 0x00, "
1712+
"ResourceConsumer, ,");
1713+
dsdt_line(" )");
1714+
dsdt_line(" { // Pin list");
1715+
dsdt_line(" 0");
1716+
dsdt_line(" }");
1717+
dsdt_line(" })");
1718+
dsdt_line(" Return (RBUF)");
1719+
dsdt_line(" }");
1720+
dsdt_line("}");
1721+
}
1722+
16861723
static void
16871724
passthru_write_dsdt(struct pci_vdev *dev)
16881725
{
@@ -1712,6 +1749,9 @@ passthru_write_dsdt(struct pci_vdev *dev)
17121749
else if (device == 0x5abc)
17131750
/* URT1 @ 00:18.0 for bluetooth*/
17141751
write_dsdt_urt1(dev);
1752+
else if (device == 0x5aca)
1753+
/* SDC @ 00:1b.0 */
1754+
write_dsdt_sdc(dev);
17151755

17161756
}
17171757

0 commit comments

Comments
 (0)