soc/amd: add ACPI code for I3C controller
Add the I3C controllers to the ACPI tables. Most of the ACPI code needed for that is added to the DSDT, since everything, but the enable status of the I3C MMIO devices is known at build-time. To handle the I3C controller enable status, each ACPI device contains the STAT name with the value of 0 in the DSDT and when the device is enabled this STAT name will be overridden in the SSDT. TEST=OS loads the I3C kernel modules on amd/birman_plus. Change-Id: I309d54c81056486573c32d4da54de61b36b5c378 Signed-off-by: Felix Held <felix-coreboot@felixheld.de> Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/87282 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Maximilian Brune <maximilian.brune@9elements.com>
This commit is contained in:
parent
02342b31df
commit
c195859748
5 changed files with 848 additions and 0 deletions
|
|
@ -1,6 +1,38 @@
|
||||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||||
|
|
||||||
|
#include <acpi/acpigen.h>
|
||||||
|
#include <amdblocks/i2c.h>
|
||||||
|
#include <console/console.h>
|
||||||
#include <device/device.h>
|
#include <device/device.h>
|
||||||
|
#include <types.h>
|
||||||
|
|
||||||
|
#if CONFIG(HAVE_ACPI_TABLES)
|
||||||
|
static const char *i3c_acpi_name(const struct device *dev)
|
||||||
|
{
|
||||||
|
size_t i;
|
||||||
|
size_t num_ctrlrs;
|
||||||
|
const struct soc_i3c_ctrlr_info *ctrlr = soc_get_i3c_ctrlr_info(&num_ctrlrs);
|
||||||
|
|
||||||
|
if (!(uintptr_t)dev->path.mmio.addr) {
|
||||||
|
printk(BIOS_ERR, "NULL MMIO address at %s\n", __func__);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < num_ctrlrs; i++) {
|
||||||
|
if ((uintptr_t)dev->path.mmio.addr == ctrlr[i].bar)
|
||||||
|
return ctrlr[i].acpi_name;
|
||||||
|
}
|
||||||
|
printk(BIOS_ERR, "%s: Could not find %lu\n", __func__, (uintptr_t)dev->path.mmio.addr);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void i3c_acpi_fill_ssdt(const struct device *dev)
|
||||||
|
{
|
||||||
|
acpigen_write_scope(acpi_device_path(dev));
|
||||||
|
acpigen_write_store_int_to_namestr(acpi_device_status(dev), "STAT");
|
||||||
|
acpigen_pop_len(); /* Scope */
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void i3c_read_resources(struct device *dev)
|
static void i3c_read_resources(struct device *dev)
|
||||||
{
|
{
|
||||||
|
|
@ -10,4 +42,8 @@ static void i3c_read_resources(struct device *dev)
|
||||||
struct device_operations soc_amd_i3c_mmio_ops = {
|
struct device_operations soc_amd_i3c_mmio_ops = {
|
||||||
.read_resources = i3c_read_resources,
|
.read_resources = i3c_read_resources,
|
||||||
.set_resources = noop_set_resources,
|
.set_resources = noop_set_resources,
|
||||||
|
#if CONFIG(HAVE_ACPI_TABLES)
|
||||||
|
.acpi_name = i3c_acpi_name,
|
||||||
|
.acpi_fill_ssdt = i3c_acpi_fill_ssdt,
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -392,6 +392,187 @@ Device (I2C5)
|
||||||
AOAC_DEVICE(FCH_AOAC_DEV_I2C5, 0)
|
AOAC_DEVICE(FCH_AOAC_DEV_I2C5, 0)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Device (I3C0) {
|
||||||
|
Name (STAT, 0x0)
|
||||||
|
|
||||||
|
/* Only return I3C controller HID "AMDI0015" when device is enabled in devicetree */
|
||||||
|
Method (_HID, 0x0) {
|
||||||
|
If (STAT) {
|
||||||
|
Return ("AMDI0015")
|
||||||
|
} Else {
|
||||||
|
Return ("AMDI0016")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Name (_UID, 0x0)
|
||||||
|
Method (_CRS, 0) {
|
||||||
|
Local0 = ResourceTemplate() {
|
||||||
|
Interrupt (
|
||||||
|
ResourceConsumer,
|
||||||
|
Edge,
|
||||||
|
ActiveHigh,
|
||||||
|
Exclusive, , , IRQR)
|
||||||
|
{ 0 }
|
||||||
|
Memory32Fixed (ReadWrite, APU_I3C0_BASE, 0x1000)
|
||||||
|
}
|
||||||
|
CreateDWordField (Local0, IRQR._INT, IRQN)
|
||||||
|
If (PICM) {
|
||||||
|
IRQN = II20
|
||||||
|
} Else {
|
||||||
|
IRQN = PI20
|
||||||
|
}
|
||||||
|
If (IRQN == 0x1f) {
|
||||||
|
Return (ResourceTemplate() {
|
||||||
|
Memory32Fixed (ReadWrite, APU_I3C0_BASE, 0x1000)
|
||||||
|
})
|
||||||
|
} Else {
|
||||||
|
Return (Local0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Method (_STA, 0x0, NotSerialized)
|
||||||
|
{
|
||||||
|
Return (STAT)
|
||||||
|
}
|
||||||
|
|
||||||
|
AOAC_DEVICE(FCH_AOAC_DEV_I3C0, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
Device (I3C1) {
|
||||||
|
Name (STAT, 0x0)
|
||||||
|
|
||||||
|
/* Only return I3C controller HID "AMDI0015" when device is enabled in devicetree */
|
||||||
|
Method (_HID, 0x0) {
|
||||||
|
If (STAT) {
|
||||||
|
Return ("AMDI0015")
|
||||||
|
} Else {
|
||||||
|
Return ("AMDI0016")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Name (_UID, 0x1)
|
||||||
|
Method (_CRS, 0) {
|
||||||
|
Local0 = ResourceTemplate() {
|
||||||
|
Interrupt (
|
||||||
|
ResourceConsumer,
|
||||||
|
Edge,
|
||||||
|
ActiveHigh,
|
||||||
|
Exclusive, , , IRQR)
|
||||||
|
{ 0 }
|
||||||
|
Memory32Fixed (ReadWrite, APU_I3C1_BASE, 0x1000)
|
||||||
|
}
|
||||||
|
CreateDWordField (Local0, IRQR._INT, IRQN)
|
||||||
|
If (PICM) {
|
||||||
|
IRQN = II21
|
||||||
|
} Else {
|
||||||
|
IRQN = PI21
|
||||||
|
}
|
||||||
|
If (IRQN == 0x1f) {
|
||||||
|
Return (ResourceTemplate() {
|
||||||
|
Memory32Fixed (ReadWrite, APU_I3C1_BASE, 0x1000)
|
||||||
|
})
|
||||||
|
} Else {
|
||||||
|
Return (Local0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Method (_STA, 0x0, NotSerialized)
|
||||||
|
{
|
||||||
|
Return (STAT)
|
||||||
|
}
|
||||||
|
|
||||||
|
AOAC_DEVICE(FCH_AOAC_DEV_I3C1, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
Device (I3C2) {
|
||||||
|
Name (STAT, 0x0)
|
||||||
|
|
||||||
|
/* Only return I3C controller HID "AMDI0015" when device is enabled in devicetree */
|
||||||
|
Method (_HID, 0x0) {
|
||||||
|
If (STAT) {
|
||||||
|
Return ("AMDI0015")
|
||||||
|
} Else {
|
||||||
|
Return ("AMDI0016")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Name (_UID, 0x2)
|
||||||
|
Method (_CRS, 0) {
|
||||||
|
Local0 = ResourceTemplate() {
|
||||||
|
Interrupt (
|
||||||
|
ResourceConsumer,
|
||||||
|
Edge,
|
||||||
|
ActiveHigh,
|
||||||
|
Exclusive, , , IRQR)
|
||||||
|
{ 0 }
|
||||||
|
Memory32Fixed (ReadWrite, APU_I3C2_BASE, 0x1000)
|
||||||
|
}
|
||||||
|
CreateDWordField (Local0, IRQR._INT, IRQN)
|
||||||
|
If (PICM) {
|
||||||
|
IRQN = II22
|
||||||
|
} Else {
|
||||||
|
IRQN = PI22
|
||||||
|
}
|
||||||
|
If (IRQN == 0x1f) {
|
||||||
|
Return (ResourceTemplate() {
|
||||||
|
Memory32Fixed (ReadWrite, APU_I3C2_BASE, 0x1000)
|
||||||
|
})
|
||||||
|
} Else {
|
||||||
|
Return (Local0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Method (_STA, 0x0, NotSerialized)
|
||||||
|
{
|
||||||
|
Return (STAT)
|
||||||
|
}
|
||||||
|
|
||||||
|
AOAC_DEVICE(FCH_AOAC_DEV_I3C2, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
Device (I3C3)
|
||||||
|
{
|
||||||
|
Name (STAT, 0x0)
|
||||||
|
|
||||||
|
/* Only return I3C controller HID "AMDI0015" when device is enabled in devicetree */
|
||||||
|
Method (_HID, 0x0) {
|
||||||
|
If (STAT) {
|
||||||
|
Return ("AMDI0015")
|
||||||
|
} Else {
|
||||||
|
Return ("AMDI0016")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Name (_UID, 0x3)
|
||||||
|
Method (_CRS, 0) {
|
||||||
|
Local0 = ResourceTemplate() {
|
||||||
|
Interrupt (
|
||||||
|
ResourceConsumer,
|
||||||
|
Edge,
|
||||||
|
ActiveHigh,
|
||||||
|
Exclusive, , , IRQR)
|
||||||
|
{ 0 }
|
||||||
|
Memory32Fixed (ReadWrite, APU_I3C3_BASE, 0x1000)
|
||||||
|
}
|
||||||
|
CreateDWordField (Local0, IRQR._INT, IRQN)
|
||||||
|
If (PICM) {
|
||||||
|
IRQN = II23
|
||||||
|
} Else {
|
||||||
|
IRQN = PI23
|
||||||
|
}
|
||||||
|
If (IRQN == 0x1f) {
|
||||||
|
Return (ResourceTemplate() {
|
||||||
|
Memory32Fixed (ReadWrite, APU_I3C3_BASE, 0x1000)
|
||||||
|
})
|
||||||
|
} Else {
|
||||||
|
Return (Local0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Method (_STA, 0x0, NotSerialized)
|
||||||
|
{
|
||||||
|
Return (STAT)
|
||||||
|
}
|
||||||
|
|
||||||
|
AOAC_DEVICE(FCH_AOAC_DEV_I3C3, 0)
|
||||||
|
}
|
||||||
|
|
||||||
Device (MISC)
|
Device (MISC)
|
||||||
{
|
{
|
||||||
Name (_HID, "AMD0040")
|
Name (_HID, "AMD0040")
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
/* TODO: Update for Glinda */
|
/* TODO: Update for Glinda */
|
||||||
|
|
||||||
#include <soc/amd/common/acpi/aoac.asl>
|
#include <soc/amd/common/acpi/aoac.asl>
|
||||||
|
#include <soc/amd_pci_int_defs.h>
|
||||||
#include <soc/aoac_defs.h>
|
#include <soc/aoac_defs.h>
|
||||||
#include <soc/gpio.h>
|
#include <soc/gpio.h>
|
||||||
#include <soc/iomap.h>
|
#include <soc/iomap.h>
|
||||||
|
|
@ -405,6 +406,274 @@ Device (I2C3)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Device (I3C0) {
|
||||||
|
Name (STAT, 0x0)
|
||||||
|
|
||||||
|
/* Only return I3C controller HID "AMDI5017" when device is enabled in devicetree */
|
||||||
|
Method (_HID, 0x0) {
|
||||||
|
If (STAT) {
|
||||||
|
Return ("AMDI5017")
|
||||||
|
} Else {
|
||||||
|
Return ("AMDI0016")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Name (_CID, "MIPI0100")
|
||||||
|
Name (_UID, 0x0)
|
||||||
|
Method (_CRS, 0) {
|
||||||
|
Local0 = ResourceTemplate() {
|
||||||
|
Interrupt (
|
||||||
|
ResourceConsumer,
|
||||||
|
Edge,
|
||||||
|
ActiveHigh,
|
||||||
|
Exclusive, , , IRQR)
|
||||||
|
{ 0 }
|
||||||
|
Memory32Fixed (ReadWrite, APU_I3C0_BASE, 0x1000)
|
||||||
|
}
|
||||||
|
CreateDWordField (Local0, IRQR._INT, IRQN)
|
||||||
|
If (PICM) {
|
||||||
|
IRQN = II20
|
||||||
|
} Else {
|
||||||
|
IRQN = PI20
|
||||||
|
}
|
||||||
|
If (IRQN == PIRQ_NC) {
|
||||||
|
Return (ResourceTemplate() {
|
||||||
|
Memory32Fixed (ReadWrite, APU_I3C0_BASE, 0x1000)
|
||||||
|
})
|
||||||
|
} Else {
|
||||||
|
Return (Local0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Method(_DSD, 0, Serialized){
|
||||||
|
Return(Package() {
|
||||||
|
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
|
||||||
|
Package () {
|
||||||
|
"mipi-i3c-sw-interface-revision", 0x10000, // 1.0
|
||||||
|
},
|
||||||
|
ToUUID("dbb8e3e6-5886-4ba6-8795-1319f52a966b"), // Hierarchical Extension
|
||||||
|
Package () {
|
||||||
|
"mipi-i3c-ctrlr-0-subproperties", CTR0,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
Method(CTR0, 0, Serialized){
|
||||||
|
Return(Package() {
|
||||||
|
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
|
||||||
|
Package () {
|
||||||
|
"mipi-i3c-sw-interface-revision", 0x10000, // 1.0
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
Method (_STA, 0x0, NotSerialized)
|
||||||
|
{
|
||||||
|
Return (STAT)
|
||||||
|
}
|
||||||
|
|
||||||
|
AOAC_DEVICE(FCH_AOAC_DEV_I3C0, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
Device (I3C1) {
|
||||||
|
Name (STAT, 0x0)
|
||||||
|
|
||||||
|
/* Only return I3C controller HID "AMDI5017" when device is enabled in devicetree */
|
||||||
|
Method (_HID, 0x0) {
|
||||||
|
If (STAT) {
|
||||||
|
Return ("AMDI5017")
|
||||||
|
} Else {
|
||||||
|
Return ("AMDI0016")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Name (_CID, "MIPI0100")
|
||||||
|
Name (_UID, 0x1)
|
||||||
|
Method (_CRS, 0) {
|
||||||
|
Local0 = ResourceTemplate() {
|
||||||
|
Interrupt (
|
||||||
|
ResourceConsumer,
|
||||||
|
Edge,
|
||||||
|
ActiveHigh,
|
||||||
|
Exclusive, , , IRQR)
|
||||||
|
{ 0 }
|
||||||
|
Memory32Fixed (ReadWrite, APU_I3C1_BASE, 0x1000)
|
||||||
|
}
|
||||||
|
CreateDWordField (Local0, IRQR._INT, IRQN)
|
||||||
|
If (PICM) {
|
||||||
|
IRQN = II21
|
||||||
|
} Else {
|
||||||
|
IRQN = PI21
|
||||||
|
}
|
||||||
|
If (IRQN == PIRQ_NC) {
|
||||||
|
Return (ResourceTemplate() {
|
||||||
|
Memory32Fixed (ReadWrite, APU_I3C1_BASE, 0x1000)
|
||||||
|
})
|
||||||
|
} Else {
|
||||||
|
Return (Local0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Method(_DSD, 0, Serialized){
|
||||||
|
Return(Package() {
|
||||||
|
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
|
||||||
|
Package () {
|
||||||
|
"mipi-i3c-sw-interface-revision", 0x10000, // 1.0
|
||||||
|
},
|
||||||
|
ToUUID("dbb8e3e6-5886-4ba6-8795-1319f52a966b"), // Hierarchical Extension
|
||||||
|
Package () {
|
||||||
|
"mipi-i3c-ctrlr-0-subproperties", CTR0,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
Method(CTR0, 0, Serialized){
|
||||||
|
Return(Package() {
|
||||||
|
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
|
||||||
|
Package () {
|
||||||
|
"mipi-i3c-sw-interface-revision", 0x10000, // 1.0
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
Method (_STA, 0x0, NotSerialized)
|
||||||
|
{
|
||||||
|
Return (STAT)
|
||||||
|
}
|
||||||
|
|
||||||
|
AOAC_DEVICE(FCH_AOAC_DEV_I3C1, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
Device (I3C2) {
|
||||||
|
Name (STAT, 0x0)
|
||||||
|
|
||||||
|
/* Only return I3C controller HID "AMDI5017" when device is enabled in devicetree */
|
||||||
|
Method (_HID, 0x0) {
|
||||||
|
If (STAT) {
|
||||||
|
Return ("AMDI5017")
|
||||||
|
} Else {
|
||||||
|
Return ("AMDI0016")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Name (_CID, "MIPI0100")
|
||||||
|
Name (_UID, 0x2)
|
||||||
|
Method (_CRS, 0) {
|
||||||
|
Local0 = ResourceTemplate() {
|
||||||
|
Interrupt (
|
||||||
|
ResourceConsumer,
|
||||||
|
Edge,
|
||||||
|
ActiveHigh,
|
||||||
|
Exclusive, , , IRQR)
|
||||||
|
{ 0 }
|
||||||
|
Memory32Fixed (ReadWrite, APU_I3C2_BASE, 0x1000)
|
||||||
|
}
|
||||||
|
CreateDWordField (Local0, IRQR._INT, IRQN)
|
||||||
|
If (PICM) {
|
||||||
|
IRQN = II22
|
||||||
|
} Else {
|
||||||
|
IRQN = PI22
|
||||||
|
}
|
||||||
|
If (IRQN == PIRQ_NC) {
|
||||||
|
Return (ResourceTemplate() {
|
||||||
|
Memory32Fixed (ReadWrite, APU_I3C2_BASE, 0x1000)
|
||||||
|
})
|
||||||
|
} Else {
|
||||||
|
Return (Local0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Method(_DSD, 0, Serialized){
|
||||||
|
Return(Package() {
|
||||||
|
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
|
||||||
|
Package () {
|
||||||
|
"mipi-i3c-sw-interface-revision", 0x10000, // 1.0
|
||||||
|
},
|
||||||
|
ToUUID("dbb8e3e6-5886-4ba6-8795-1319f52a966b"), // Hierarchical Extension
|
||||||
|
Package () {
|
||||||
|
"mipi-i3c-ctrlr-0-subproperties", CTR0,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
Method(CTR0, 0, Serialized){
|
||||||
|
Return(Package() {
|
||||||
|
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
|
||||||
|
Package () {
|
||||||
|
"mipi-i3c-sw-interface-revision", 0x10000, // 1.0
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
Method (_STA, 0x0, NotSerialized)
|
||||||
|
{
|
||||||
|
Return (STAT)
|
||||||
|
}
|
||||||
|
|
||||||
|
AOAC_DEVICE(FCH_AOAC_DEV_I3C2, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
Device (I3C3)
|
||||||
|
{
|
||||||
|
Name (STAT, 0x0)
|
||||||
|
|
||||||
|
/* Only return I3C controller HID "AMDI5017" when device is enabled in devicetree */
|
||||||
|
Method (_HID, 0x0) {
|
||||||
|
If (STAT) {
|
||||||
|
Return ("AMDI5017")
|
||||||
|
} Else {
|
||||||
|
Return ("AMDI0016")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Name (_CID, "MIPI0100")
|
||||||
|
Name (_UID, 0x3)
|
||||||
|
Method (_CRS, 0) {
|
||||||
|
Local0 = ResourceTemplate() {
|
||||||
|
Interrupt (
|
||||||
|
ResourceConsumer,
|
||||||
|
Edge,
|
||||||
|
ActiveHigh,
|
||||||
|
Exclusive, , , IRQR)
|
||||||
|
{ 0 }
|
||||||
|
Memory32Fixed (ReadWrite, APU_I3C3_BASE, 0x1000)
|
||||||
|
}
|
||||||
|
CreateDWordField (Local0, IRQR._INT, IRQN)
|
||||||
|
If (PICM) {
|
||||||
|
IRQN = II23
|
||||||
|
} Else {
|
||||||
|
IRQN = PI23
|
||||||
|
}
|
||||||
|
If (IRQN == PIRQ_NC) {
|
||||||
|
Return (ResourceTemplate() {
|
||||||
|
Memory32Fixed (ReadWrite, APU_I3C3_BASE, 0x1000)
|
||||||
|
})
|
||||||
|
} Else {
|
||||||
|
Return (Local0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Method (_STA, 0x0, NotSerialized)
|
||||||
|
{
|
||||||
|
Return (STAT)
|
||||||
|
}
|
||||||
|
|
||||||
|
Method(_DSD, 0, Serialized){
|
||||||
|
Return(Package() {
|
||||||
|
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
|
||||||
|
Package () {
|
||||||
|
"mipi-i3c-sw-interface-revision", 0x10000, // 1.0
|
||||||
|
},
|
||||||
|
ToUUID("dbb8e3e6-5886-4ba6-8795-1319f52a966b"), // Hierarchical Extension
|
||||||
|
Package () {
|
||||||
|
"mipi-i3c-ctrlr-0-subproperties", CTR0,
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
Method(CTR0, 0, Serialized){
|
||||||
|
Return(Package() {
|
||||||
|
ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
|
||||||
|
Package () {
|
||||||
|
"mipi-i3c-sw-interface-revision", 0x10000, // 1.0
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
AOAC_DEVICE(FCH_AOAC_DEV_I3C3, 0)
|
||||||
|
}
|
||||||
|
|
||||||
Device (MISC)
|
Device (MISC)
|
||||||
{
|
{
|
||||||
Name (_HID, "AMD0040")
|
Name (_HID, "AMD0040")
|
||||||
|
|
|
||||||
|
|
@ -402,6 +402,187 @@ Device (I2C3)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Device (I3C0) {
|
||||||
|
Name (STAT, 0x0)
|
||||||
|
|
||||||
|
/* Only return I3C controller HID "AMDI0015" when device is enabled in devicetree */
|
||||||
|
Method (_HID, 0x0) {
|
||||||
|
If (STAT) {
|
||||||
|
Return ("AMDI0015")
|
||||||
|
} Else {
|
||||||
|
Return ("AMDI0016")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Name (_UID, 0x0)
|
||||||
|
Method (_CRS, 0) {
|
||||||
|
Local0 = ResourceTemplate() {
|
||||||
|
Interrupt (
|
||||||
|
ResourceConsumer,
|
||||||
|
Edge,
|
||||||
|
ActiveHigh,
|
||||||
|
Exclusive, , , IRQR)
|
||||||
|
{ 0 }
|
||||||
|
Memory32Fixed (ReadWrite, APU_I3C0_BASE, 0x1000)
|
||||||
|
}
|
||||||
|
CreateDWordField (Local0, IRQR._INT, IRQN)
|
||||||
|
If (PICM) {
|
||||||
|
IRQN = II20
|
||||||
|
} Else {
|
||||||
|
IRQN = PI20
|
||||||
|
}
|
||||||
|
If (IRQN == 0x1f) {
|
||||||
|
Return (ResourceTemplate() {
|
||||||
|
Memory32Fixed (ReadWrite, APU_I3C0_BASE, 0x1000)
|
||||||
|
})
|
||||||
|
} Else {
|
||||||
|
Return (Local0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Method (_STA, 0x0, NotSerialized)
|
||||||
|
{
|
||||||
|
Return (STAT)
|
||||||
|
}
|
||||||
|
|
||||||
|
AOAC_DEVICE(FCH_AOAC_DEV_I3C0, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
Device (I3C1) {
|
||||||
|
Name (STAT, 0x0)
|
||||||
|
|
||||||
|
/* Only return I3C controller HID "AMDI0015" when device is enabled in devicetree */
|
||||||
|
Method (_HID, 0x0) {
|
||||||
|
If (STAT) {
|
||||||
|
Return ("AMDI0015")
|
||||||
|
} Else {
|
||||||
|
Return ("AMDI0016")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Name (_UID, 0x1)
|
||||||
|
Method (_CRS, 0) {
|
||||||
|
Local0 = ResourceTemplate() {
|
||||||
|
Interrupt (
|
||||||
|
ResourceConsumer,
|
||||||
|
Edge,
|
||||||
|
ActiveHigh,
|
||||||
|
Exclusive, , , IRQR)
|
||||||
|
{ 0 }
|
||||||
|
Memory32Fixed (ReadWrite, APU_I3C1_BASE, 0x1000)
|
||||||
|
}
|
||||||
|
CreateDWordField (Local0, IRQR._INT, IRQN)
|
||||||
|
If (PICM) {
|
||||||
|
IRQN = II21
|
||||||
|
} Else {
|
||||||
|
IRQN = PI21
|
||||||
|
}
|
||||||
|
If (IRQN == 0x1f) {
|
||||||
|
Return (ResourceTemplate() {
|
||||||
|
Memory32Fixed (ReadWrite, APU_I3C1_BASE, 0x1000)
|
||||||
|
})
|
||||||
|
} Else {
|
||||||
|
Return (Local0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Method (_STA, 0x0, NotSerialized)
|
||||||
|
{
|
||||||
|
Return (STAT)
|
||||||
|
}
|
||||||
|
|
||||||
|
AOAC_DEVICE(FCH_AOAC_DEV_I3C1, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
Device (I3C2) {
|
||||||
|
Name (STAT, 0x0)
|
||||||
|
|
||||||
|
/* Only return I3C controller HID "AMDI0015" when device is enabled in devicetree */
|
||||||
|
Method (_HID, 0x0) {
|
||||||
|
If (STAT) {
|
||||||
|
Return ("AMDI0015")
|
||||||
|
} Else {
|
||||||
|
Return ("AMDI0016")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Name (_UID, 0x2)
|
||||||
|
Method (_CRS, 0) {
|
||||||
|
Local0 = ResourceTemplate() {
|
||||||
|
Interrupt (
|
||||||
|
ResourceConsumer,
|
||||||
|
Edge,
|
||||||
|
ActiveHigh,
|
||||||
|
Exclusive, , , IRQR)
|
||||||
|
{ 0 }
|
||||||
|
Memory32Fixed (ReadWrite, APU_I3C2_BASE, 0x1000)
|
||||||
|
}
|
||||||
|
CreateDWordField (Local0, IRQR._INT, IRQN)
|
||||||
|
If (PICM) {
|
||||||
|
IRQN = II22
|
||||||
|
} Else {
|
||||||
|
IRQN = PI22
|
||||||
|
}
|
||||||
|
If (IRQN == 0x1f) {
|
||||||
|
Return (ResourceTemplate() {
|
||||||
|
Memory32Fixed (ReadWrite, APU_I3C2_BASE, 0x1000)
|
||||||
|
})
|
||||||
|
} Else {
|
||||||
|
Return (Local0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Method (_STA, 0x0, NotSerialized)
|
||||||
|
{
|
||||||
|
Return (STAT)
|
||||||
|
}
|
||||||
|
|
||||||
|
AOAC_DEVICE(FCH_AOAC_DEV_I3C2, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
Device (I3C3)
|
||||||
|
{
|
||||||
|
Name (STAT, 0x0)
|
||||||
|
|
||||||
|
/* Only return I3C controller HID "AMDI0015" when device is enabled in devicetree */
|
||||||
|
Method (_HID, 0x0) {
|
||||||
|
If (STAT) {
|
||||||
|
Return ("AMDI0015")
|
||||||
|
} Else {
|
||||||
|
Return ("AMDI0016")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Name (_UID, 0x3)
|
||||||
|
Method (_CRS, 0) {
|
||||||
|
Local0 = ResourceTemplate() {
|
||||||
|
Interrupt (
|
||||||
|
ResourceConsumer,
|
||||||
|
Edge,
|
||||||
|
ActiveHigh,
|
||||||
|
Exclusive, , , IRQR)
|
||||||
|
{ 0 }
|
||||||
|
Memory32Fixed (ReadWrite, APU_I3C3_BASE, 0x1000)
|
||||||
|
}
|
||||||
|
CreateDWordField (Local0, IRQR._INT, IRQN)
|
||||||
|
If (PICM) {
|
||||||
|
IRQN = II23
|
||||||
|
} Else {
|
||||||
|
IRQN = PI23
|
||||||
|
}
|
||||||
|
If (IRQN == 0x1f) {
|
||||||
|
Return (ResourceTemplate() {
|
||||||
|
Memory32Fixed (ReadWrite, APU_I3C3_BASE, 0x1000)
|
||||||
|
})
|
||||||
|
} Else {
|
||||||
|
Return (Local0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Method (_STA, 0x0, NotSerialized)
|
||||||
|
{
|
||||||
|
Return (STAT)
|
||||||
|
}
|
||||||
|
|
||||||
|
AOAC_DEVICE(FCH_AOAC_DEV_I3C3, 0)
|
||||||
|
}
|
||||||
|
|
||||||
Device (MISC)
|
Device (MISC)
|
||||||
{
|
{
|
||||||
Name (_HID, "AMD0040")
|
Name (_HID, "AMD0040")
|
||||||
|
|
|
||||||
|
|
@ -402,6 +402,187 @@ Device (I2C3)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Device (I3C0) {
|
||||||
|
Name (STAT, 0x0)
|
||||||
|
|
||||||
|
/* Only return I3C controller HID "AMDI0015" when device is enabled in devicetree */
|
||||||
|
Method (_HID, 0x0) {
|
||||||
|
If (STAT) {
|
||||||
|
Return ("AMDI0015")
|
||||||
|
} Else {
|
||||||
|
Return ("AMDI0016")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Name (_UID, 0x0)
|
||||||
|
Method (_CRS, 0) {
|
||||||
|
Local0 = ResourceTemplate() {
|
||||||
|
Interrupt (
|
||||||
|
ResourceConsumer,
|
||||||
|
Edge,
|
||||||
|
ActiveHigh,
|
||||||
|
Exclusive, , , IRQR)
|
||||||
|
{ 0 }
|
||||||
|
Memory32Fixed (ReadWrite, APU_I3C0_BASE, 0x1000)
|
||||||
|
}
|
||||||
|
CreateDWordField (Local0, IRQR._INT, IRQN)
|
||||||
|
If (PICM) {
|
||||||
|
IRQN = II20
|
||||||
|
} Else {
|
||||||
|
IRQN = PI20
|
||||||
|
}
|
||||||
|
If (IRQN == 0x1f) {
|
||||||
|
Return (ResourceTemplate() {
|
||||||
|
Memory32Fixed (ReadWrite, APU_I3C0_BASE, 0x1000)
|
||||||
|
})
|
||||||
|
} Else {
|
||||||
|
Return (Local0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Method (_STA, 0x0, NotSerialized)
|
||||||
|
{
|
||||||
|
Return (STAT)
|
||||||
|
}
|
||||||
|
|
||||||
|
AOAC_DEVICE(FCH_AOAC_DEV_I3C0, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
Device (I3C1) {
|
||||||
|
Name (STAT, 0x0)
|
||||||
|
|
||||||
|
/* Only return I3C controller HID "AMDI0015" when device is enabled in devicetree */
|
||||||
|
Method (_HID, 0x0) {
|
||||||
|
If (STAT) {
|
||||||
|
Return ("AMDI0015")
|
||||||
|
} Else {
|
||||||
|
Return ("AMDI0016")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Name (_UID, 0x1)
|
||||||
|
Method (_CRS, 0) {
|
||||||
|
Local0 = ResourceTemplate() {
|
||||||
|
Interrupt (
|
||||||
|
ResourceConsumer,
|
||||||
|
Edge,
|
||||||
|
ActiveHigh,
|
||||||
|
Exclusive, , , IRQR)
|
||||||
|
{ 0 }
|
||||||
|
Memory32Fixed (ReadWrite, APU_I3C1_BASE, 0x1000)
|
||||||
|
}
|
||||||
|
CreateDWordField (Local0, IRQR._INT, IRQN)
|
||||||
|
If (PICM) {
|
||||||
|
IRQN = II21
|
||||||
|
} Else {
|
||||||
|
IRQN = PI21
|
||||||
|
}
|
||||||
|
If (IRQN == 0x1f) {
|
||||||
|
Return (ResourceTemplate() {
|
||||||
|
Memory32Fixed (ReadWrite, APU_I3C1_BASE, 0x1000)
|
||||||
|
})
|
||||||
|
} Else {
|
||||||
|
Return (Local0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Method (_STA, 0x0, NotSerialized)
|
||||||
|
{
|
||||||
|
Return (STAT)
|
||||||
|
}
|
||||||
|
|
||||||
|
AOAC_DEVICE(FCH_AOAC_DEV_I3C1, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
Device (I3C2) {
|
||||||
|
Name (STAT, 0x0)
|
||||||
|
|
||||||
|
/* Only return I3C controller HID "AMDI0015" when device is enabled in devicetree */
|
||||||
|
Method (_HID, 0x0) {
|
||||||
|
If (STAT) {
|
||||||
|
Return ("AMDI0015")
|
||||||
|
} Else {
|
||||||
|
Return ("AMDI0016")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Name (_UID, 0x2)
|
||||||
|
Method (_CRS, 0) {
|
||||||
|
Local0 = ResourceTemplate() {
|
||||||
|
Interrupt (
|
||||||
|
ResourceConsumer,
|
||||||
|
Edge,
|
||||||
|
ActiveHigh,
|
||||||
|
Exclusive, , , IRQR)
|
||||||
|
{ 0 }
|
||||||
|
Memory32Fixed (ReadWrite, APU_I3C2_BASE, 0x1000)
|
||||||
|
}
|
||||||
|
CreateDWordField (Local0, IRQR._INT, IRQN)
|
||||||
|
If (PICM) {
|
||||||
|
IRQN = II22
|
||||||
|
} Else {
|
||||||
|
IRQN = PI22
|
||||||
|
}
|
||||||
|
If (IRQN == 0x1f) {
|
||||||
|
Return (ResourceTemplate() {
|
||||||
|
Memory32Fixed (ReadWrite, APU_I3C2_BASE, 0x1000)
|
||||||
|
})
|
||||||
|
} Else {
|
||||||
|
Return (Local0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Method (_STA, 0x0, NotSerialized)
|
||||||
|
{
|
||||||
|
Return (STAT)
|
||||||
|
}
|
||||||
|
|
||||||
|
AOAC_DEVICE(FCH_AOAC_DEV_I3C2, 0)
|
||||||
|
}
|
||||||
|
|
||||||
|
Device (I3C3)
|
||||||
|
{
|
||||||
|
Name (STAT, 0x0)
|
||||||
|
|
||||||
|
/* Only return I3C controller HID "AMDI0015" when device is enabled in devicetree */
|
||||||
|
Method (_HID, 0x0) {
|
||||||
|
If (STAT) {
|
||||||
|
Return ("AMDI0015")
|
||||||
|
} Else {
|
||||||
|
Return ("AMDI0016")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Name (_UID, 0x3)
|
||||||
|
Method (_CRS, 0) {
|
||||||
|
Local0 = ResourceTemplate() {
|
||||||
|
Interrupt (
|
||||||
|
ResourceConsumer,
|
||||||
|
Edge,
|
||||||
|
ActiveHigh,
|
||||||
|
Exclusive, , , IRQR)
|
||||||
|
{ 0 }
|
||||||
|
Memory32Fixed (ReadWrite, APU_I3C3_BASE, 0x1000)
|
||||||
|
}
|
||||||
|
CreateDWordField (Local0, IRQR._INT, IRQN)
|
||||||
|
If (PICM) {
|
||||||
|
IRQN = II23
|
||||||
|
} Else {
|
||||||
|
IRQN = PI23
|
||||||
|
}
|
||||||
|
If (IRQN == 0x1f) {
|
||||||
|
Return (ResourceTemplate() {
|
||||||
|
Memory32Fixed (ReadWrite, APU_I3C3_BASE, 0x1000)
|
||||||
|
})
|
||||||
|
} Else {
|
||||||
|
Return (Local0)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Method (_STA, 0x0, NotSerialized)
|
||||||
|
{
|
||||||
|
Return (STAT)
|
||||||
|
}
|
||||||
|
|
||||||
|
AOAC_DEVICE(FCH_AOAC_DEV_I3C3, 0)
|
||||||
|
}
|
||||||
|
|
||||||
Device (MISC)
|
Device (MISC)
|
||||||
{
|
{
|
||||||
Name (_HID, "AMD0040")
|
Name (_HID, "AMD0040")
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue