Skip to content

Commit 819845c

Browse files
shiqinggjren1
authored andcommitted
dm: add ACPI info for ipu pass-through
IPU devices are using I2C device with physical BDF 0:16.0. The I2C controller has the dependency on ACPI info. This patch is to add ACPI info for the I2C controller and the two IPU devices that are under the scope of I2C. Note: This patch is specific for GP platform. Signed-off-by: Shiqing Gao <shiqing.gao@intel.com>
1 parent fcb95d0 commit 819845c

File tree

1 file changed

+233
-0
lines changed

1 file changed

+233
-0
lines changed

devicemodel/hw/pci/passthrough.c

Lines changed: 233 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1577,6 +1577,236 @@ write_dsdt_hdas(struct pci_vdev *dev)
15771577
dsdt_line("}");
15781578
}
15791579

1580+
static void
1581+
write_dsdt_ipu_i2c(struct pci_vdev *dev)
1582+
{
1583+
printf("write virt-%x:%x.%x in dsdt for ipu's i2c-bus @ 00:16.0\n",
1584+
dev->bus, dev->slot, dev->func);
1585+
1586+
/* physical I2C 0:16.0 */
1587+
dsdt_line("Device (I2C1)");
1588+
dsdt_line("{");
1589+
dsdt_line(" Name (_ADR, 0x%04X%04X)", dev->slot, dev->func);
1590+
dsdt_line(" Name (_DDN, \"Intel(R) I2C Controller #1\")");
1591+
dsdt_line(" Name (_UID, One)");
1592+
dsdt_line(" Name (LINK, \"\\\\_SB.PCI0.I2C1\")");
1593+
dsdt_line(" Name (RBUF, ResourceTemplate ()");
1594+
dsdt_line(" {");
1595+
dsdt_line(" })");
1596+
dsdt_line(" Name (IC0S, 0x00061A80)");
1597+
dsdt_line(" Name (_DSD, Package (0x02)");
1598+
dsdt_line(" {");
1599+
dsdt_line(" ToUUID (\"daffd814-6eba-4d8c-8a91-bc9bbf4aa301\")"
1600+
" ,");
1601+
dsdt_line(" Package (0x01)");
1602+
dsdt_line(" {");
1603+
dsdt_line(" Package (0x02)");
1604+
dsdt_line(" {");
1605+
dsdt_line(" \"clock-frequency\", ");
1606+
dsdt_line(" IC0S");
1607+
dsdt_line(" }");
1608+
dsdt_line(" }");
1609+
dsdt_line(" })");
1610+
1611+
dsdt_line(" Method (FMCN, 0, Serialized)");
1612+
dsdt_line(" {");
1613+
dsdt_line(" Name (PKG, Package (0x03)");
1614+
dsdt_line(" {");
1615+
dsdt_line(" 0x64, ");
1616+
dsdt_line(" 0xD6, ");
1617+
dsdt_line(" 0x1C");
1618+
dsdt_line(" })");
1619+
dsdt_line(" Return (PKG)");
1620+
dsdt_line(" }");
1621+
dsdt_line("");
1622+
1623+
dsdt_line(" Method (FPCN, 0, Serialized)");
1624+
dsdt_line(" {");
1625+
dsdt_line(" Name (PKG, Package (0x03)");
1626+
dsdt_line(" {");
1627+
dsdt_line(" 0x26, ");
1628+
dsdt_line(" 0x50, ");
1629+
dsdt_line(" 0x0C");
1630+
dsdt_line(" })");
1631+
dsdt_line(" Return (PKG)");
1632+
dsdt_line(" }");
1633+
dsdt_line("");
1634+
1635+
dsdt_line(" Method (HSCN, 0, Serialized)");
1636+
dsdt_line(" {");
1637+
dsdt_line(" Name (PKG, Package (0x03)");
1638+
dsdt_line(" {");
1639+
dsdt_line(" 0x05, ");
1640+
dsdt_line(" 0x18, ");
1641+
dsdt_line(" 0x0C");
1642+
dsdt_line(" })");
1643+
dsdt_line(" Return (PKG)");
1644+
dsdt_line(" }");
1645+
dsdt_line("");
1646+
1647+
dsdt_line(" Method (SSCN, 0, Serialized)");
1648+
dsdt_line(" {");
1649+
dsdt_line(" Name (PKG, Package (0x03)");
1650+
dsdt_line(" {");
1651+
dsdt_line(" 0x0244, ");
1652+
dsdt_line(" 0x02DA, ");
1653+
dsdt_line(" 0x1C");
1654+
dsdt_line(" })");
1655+
dsdt_line(" Return (PKG)");
1656+
dsdt_line(" }");
1657+
dsdt_line("");
1658+
1659+
dsdt_line(" Method (_CRS, 0, NotSerialized)");
1660+
dsdt_line(" {");
1661+
dsdt_line(" Return (RBUF)");
1662+
dsdt_line(" }");
1663+
dsdt_line("");
1664+
1665+
/* CAM1 */
1666+
dsdt_line(" Device (CAM1)");
1667+
dsdt_line(" {");
1668+
dsdt_line(" Name (_ADR, Zero) // _ADR: Address");
1669+
dsdt_line(" Name (_HID, \"ADV7481A\") // _HID: Hardware ID");
1670+
dsdt_line(" Name (_CID, \"ADV7481A\") // _CID: Compatible ID");
1671+
dsdt_line(" Name (_UID, One) // _UID: Unique ID");
1672+
1673+
dsdt_line(" Method (_CRS, 0, Serialized)");
1674+
dsdt_line(" {");
1675+
dsdt_line(" Name (SBUF, ResourceTemplate ()");
1676+
dsdt_line(" {");
1677+
dsdt_line(" GpioIo (Exclusive, PullDefault, 0x0000, "
1678+
"0x0000, IoRestrictionInputOnly,");
1679+
dsdt_line(" \"\\\\_SB.GPO0\", 0x00, "
1680+
"ResourceConsumer, ,");
1681+
dsdt_line(" )");
1682+
dsdt_line(" { // Pin list");
1683+
dsdt_line(" 0x001E");
1684+
dsdt_line(" }");
1685+
dsdt_line(" I2cSerialBusV2 (0x0070, "
1686+
"ControllerInitiated, 0x00061A80,");
1687+
dsdt_line(" AddressingMode7Bit, "
1688+
"\"\\\\_SB.PCI0.I2C1\",");
1689+
dsdt_line(" 0x00, ResourceConsumer, , Exclusive,");
1690+
dsdt_line(" )");
1691+
dsdt_line(" })");
1692+
dsdt_line(" Return (SBUF)");
1693+
dsdt_line(" }");
1694+
1695+
dsdt_line(" Method (_DSM, 4, NotSerialized)");
1696+
dsdt_line(" {");
1697+
dsdt_line(" If ((Arg0 == ToUUID ("
1698+
"\"377ba76a-f390-4aff-ab38-9b1bf33a3015\")))");
1699+
dsdt_line(" {");
1700+
dsdt_line(" Return (\"ADV7481A\")");
1701+
dsdt_line(" }");
1702+
dsdt_line("");
1703+
dsdt_line(" If ((Arg0 == ToUUID ("
1704+
"\"ea3b7bd8-e09b-4239-ad6e-ed525f3f26ab\")))");
1705+
dsdt_line(" {");
1706+
dsdt_line(" Return (0x40)");
1707+
dsdt_line(" }");
1708+
dsdt_line("");
1709+
dsdt_line(" If ((Arg0 == ToUUID ("
1710+
"\"8dbe2651-70c1-4c6f-ac87-a37cb46e4af6\")))");
1711+
dsdt_line(" {");
1712+
dsdt_line(" Return (0xFF)");
1713+
dsdt_line(" }");
1714+
dsdt_line("");
1715+
dsdt_line(" If ((Arg0 == ToUUID ("
1716+
"\"26257549-9271-4ca4-bb43-c4899d5a4881\")))");
1717+
dsdt_line(" {");
1718+
dsdt_line(" If (Arg2 == One)");
1719+
dsdt_line(" {");
1720+
dsdt_line(" Return (0x02)");
1721+
dsdt_line(" }");
1722+
dsdt_line(" If (Arg2 == 0x02)");
1723+
dsdt_line(" {");
1724+
dsdt_line(" Return (0x02001000)");
1725+
dsdt_line(" }");
1726+
dsdt_line(" If (Arg2 == 0x03)");
1727+
dsdt_line(" {");
1728+
dsdt_line(" Return (0x02000E01)");
1729+
dsdt_line(" }");
1730+
dsdt_line(" }");
1731+
dsdt_line(" Return (Zero)");
1732+
dsdt_line(" }");
1733+
dsdt_line(" }");
1734+
dsdt_line("");
1735+
1736+
/* CAM2 */
1737+
dsdt_line(" Device (CAM2)");
1738+
dsdt_line(" {");
1739+
dsdt_line(" Name (_ADR, Zero) // _ADR: Address");
1740+
dsdt_line(" Name (_HID, \"ADV7481B\") // _HID: Hardware ID");
1741+
dsdt_line(" Name (_CID, \"ADV7481B\") // _CID: Compatible ID");
1742+
dsdt_line(" Name (_UID, One) // _UID: Unique ID");
1743+
1744+
dsdt_line(" Method (_CRS, 0, Serialized)");
1745+
dsdt_line(" {");
1746+
dsdt_line(" Name (SBUF, ResourceTemplate ()");
1747+
dsdt_line(" {");
1748+
dsdt_line(" GpioIo (Exclusive, PullDefault, 0x0000, "
1749+
"0x0000, IoRestrictionInputOnly,");
1750+
dsdt_line(" \"\\\\_SB.GPO0\", 0x00, "
1751+
"ResourceConsumer, ,");
1752+
dsdt_line(" )");
1753+
dsdt_line(" { // Pin list");
1754+
dsdt_line(" 0x001E");
1755+
dsdt_line(" }");
1756+
dsdt_line(" I2cSerialBusV2 (0x0071, "
1757+
"ControllerInitiated, 0x00061A80,");
1758+
dsdt_line(" AddressingMode7Bit, "
1759+
"\"\\\\_SB.PCI0.I2C1\",");
1760+
dsdt_line(" 0x00, ResourceConsumer, , Exclusive,");
1761+
dsdt_line(" )");
1762+
dsdt_line(" })");
1763+
dsdt_line(" Return (SBUF)");
1764+
dsdt_line(" }");
1765+
1766+
dsdt_line(" Method (_DSM, 4, NotSerialized) ");
1767+
dsdt_line(" {");
1768+
dsdt_line(" If ((Arg0 == ToUUID ("
1769+
"\"377ba76a-f390-4aff-ab38-9b1bf33a3015\")))");
1770+
dsdt_line(" {");
1771+
dsdt_line(" Return (\"ADV7481B\")");
1772+
dsdt_line(" }");
1773+
dsdt_line("");
1774+
dsdt_line(" If ((Arg0 == ToUUID ("
1775+
"\"ea3b7bd8-e09b-4239-ad6e-ed525f3f26ab\")))");
1776+
dsdt_line(" {");
1777+
dsdt_line(" Return (0x14)");
1778+
dsdt_line(" }");
1779+
dsdt_line("");
1780+
dsdt_line(" If ((Arg0 == ToUUID ("
1781+
"\"8dbe2651-70c1-4c6f-ac87-a37cb46e4af6\")))");
1782+
dsdt_line(" {");
1783+
dsdt_line(" Return (0xFF)");
1784+
dsdt_line(" }");
1785+
dsdt_line("");
1786+
dsdt_line(" If ((Arg0 == ToUUID ("
1787+
"\"26257549-9271-4ca4-bb43-c4899d5a4881\")))");
1788+
dsdt_line(" {");
1789+
dsdt_line(" If (Arg2 == One)");
1790+
dsdt_line(" {");
1791+
dsdt_line(" Return (0x02)");
1792+
dsdt_line(" }");
1793+
dsdt_line(" If (Arg2 == 0x02)");
1794+
dsdt_line(" {");
1795+
dsdt_line(" Return (0x02001000)");
1796+
dsdt_line(" }");
1797+
dsdt_line(" If (Arg2 == 0x03)");
1798+
dsdt_line(" {");
1799+
dsdt_line(" Return (0x02000E01)");
1800+
dsdt_line(" }");
1801+
dsdt_line(" }");
1802+
dsdt_line(" Return (Zero)");
1803+
dsdt_line(" }");
1804+
dsdt_line(" }");
1805+
dsdt_line("");
1806+
1807+
dsdt_line("}");
1808+
}
1809+
15801810
static void
15811811
passthru_write_dsdt(struct pci_vdev *dev)
15821812
{
@@ -1600,6 +1830,9 @@ passthru_write_dsdt(struct pci_vdev *dev)
16001830
else if (device == 0x5a98)
16011831
/* HDAS @ 00:e.0 */
16021832
write_dsdt_hdas(dev);
1833+
else if (device == 0x5aac)
1834+
/* i2c @ 00:16.0 for ipu */
1835+
write_dsdt_ipu_i2c(dev);
16031836

16041837
}
16051838

0 commit comments

Comments
 (0)