Patrick Rudolph has uploaded this change for review.

View Change

[WIP]device/pci_rom: Add ATRM method

Add ATRM method for AMD GPUs, which is similar to _ROM.
As both functions seem to have identical arguments and return values,
redirect ATRM to _ROM.

Don't depend on VGA devices, but display devices, as some AMD dGPUs
identify themself as PCI_CLASS_DISPLAY_OTHER.

Needs test on platforms with AMD display devices.

Change-Id: Id2212f29f0de051f6cbd59f8332e86696c1166ab
Signed-off-by: Patrick Rudolph <siro@das-labor.org>
---
M src/device/pci_rom.c
1 file changed, 15 insertions(+), 3 deletions(-)

git pull ssh://review.coreboot.org:29418/coreboot refs/changes/02/31502/1
diff --git a/src/device/pci_rom.c b/src/device/pci_rom.c
index 82d9a30..86c839c 100644
--- a/src/device/pci_rom.c
+++ b/src/device/pci_rom.c
@@ -272,8 +272,8 @@
{
static size_t ngfx;

- /* Only handle VGA devices */
- if ((device->class >> 8) != PCI_CLASS_DISPLAY_VGA)
+ /* Only handle display devices */
+ if ((device->class >> 16) != PCI_BASE_CLASS_DISPLAY)
return;

/* Only handle enabled devices */
@@ -319,9 +319,21 @@

memcpy(cbrom, rom, cbrom_length);

- /* write _ROM method */
+ /* write ACPI methods */
acpigen_write_scope(scope);
+
+ /* Nvidia uses _ROM */
acpigen_write_rom(cbrom, cbrom_length);
+
+ /* AMD uses ATRM. Redirect ATRM to _ROM */
+ acpigen_write_method_serialized("ATRM", 2);
+ acpigen_write_to_integer(ARG1_OP, LOCAL0_OP);
+ acpigen_emit_byte(RETURN_OP);
+ acpigen_emit_namestring("_ROM");
+ acpigen_emit_byte(ARG0_OP);
+ acpigen_emit_byte(LOCAL0_OP);
+ acpigen_pop_len(); /* pop method */
+
acpigen_pop_len(); /* pop scope */
}
#endif

To view, visit change 31502. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: Id2212f29f0de051f6cbd59f8332e86696c1166ab
Gerrit-Change-Number: 31502
Gerrit-PatchSet: 1
Gerrit-Owner: Patrick Rudolph <siro@das-labor.org>
Gerrit-MessageType: newchange