Example DSDT for FVP Base Model

As a follow-on from yesterdays post, for development work like the rest of the arm64 community we had to spend a long time working with the models as hardware was not available. So here is a example DSDT for FVP Base Model.

DefinitionBlock (
 "dsdt.aml", // output filename
 "DSDT", // table signature
 2, // DSDT compliance revision
 "LINARO", // OEM ID
 "RTSMVEV8", // table ID
 0x00000004) // OEM revision
{
 Scope (\_SB)
 {
 Method (_OSC, 4, NotSerialized)
 {
 /* Platform-Wide OSPM Capabilities */
 If(LEqual(Arg0,ToUUID("0811B06E-4A27-44F9-8D60-3CBBC22E7B48")))
 {
 /* APEI support unconditionally */
 Return (Arg3)
 } Else {
 CreateDWordField (Arg3, Zero, CDW1)
 /* Set invalid UUID error bit */
 Or (CDW1, 0x04, CDW1)
 Return (Arg3)
 }
 }

 //
 // Two Emulated aarch64 CPUs each with 4 cores
 //
 Device(CPU0) { // Cluster 0, Cpu 0
 Name(_HID, "ACPI0007")
 Name(_UID, 0)
 }
 Device(CPU1) { // Cluster 0, Cpu 1
 Name(_HID, "ACPI0007")
 Name(_UID, 1)
 }
 Device(CPU2) { // Cluster 0, Cpu 2
 Name(_HID, "ACPI0007")
 Name(_UID, 2)
 }
 Device(CPU3) { // Cluster 0, Cpu 3
 Name(_HID, "ACPI0007")
 Name(_UID, 3)
 }
 Device(CPU4) { // Cluster 1, Cpu 0
 Name(_HID, "ACPI0007")
 Name(_UID, 4)
 }
 Device(CPU5) { // Cluster 1, Cpu 1
 Name(_HID, "ACPI0007")
 Name(_UID, 5)
 }
 Device(CPU6) { // Cluster 1, Cpu 2
 Name(_HID, "ACPI0007")
 Name(_UID, 6)
 }
 Device(CPU7) { // Cluster 1, Cpu 3
 Name(_HID, "ACPI0007")
 Name(_UID, 7)
 }

 // SMC91X
 Device (NET0) {
 Name (_HID, "LNRO0003")
 Name (_UID, 0)

 Name (_CRS, ResourceTemplate () {
 Memory32Fixed (ReadWrite, 0x1a000000, 0x00010000)
 Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive, , , ) {0x2F}
 })
 }

 // SYSREG
 Device (SREG) {
 Name (_HID, "LNRO0009")
 Name (_UID, 0)

 Method (_CRS, 0x0, Serialized) {
 Name (RBUF, ResourceTemplate() {
 Memory32Fixed (ReadWrite, 0x1c010000, 0x1000)
 })
 Return (RBUF)
 }
 }

 // VIRTIO
 Device (VIRT) {
 Name (_HID, "LNRO0005")
 Name (_UID, 0)

 Name (_CRS, ResourceTemplate() {
 Memory32Fixed (ReadWrite, 0x1c130000, 0x1000)
 Interrupt (ResourceConsumer, Level, ActiveHigh, Exclusive) {0x4A}
 })
 }

 // UART PL011
 Device(COM0) {
 Name(_HID, "ARMH0011")
 Name(_CID, "PL011")
 Name(_UID, Zero)

 Name(_CRS, ResourceTemplate() {
 Memory32Fixed(ReadWrite, 0x1c090000, 0x1000)
 Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive) { 0x25 }
 })
 }
 }
}