From: Brandon Anderson brandon.anderson@amd.com
This is a proposal for ACPI driver probing of the ARM AMBA devices currently listed under ‘iofpga’ in the RTSM dts file. The main addition is drivers/amba/acpi.c which fits the role of an AMBA bus ‘connector resource’ for ACPI using struct amba_device.
I have not yet figured out the implementation details regarding clocks (handled in the dts file with clock-names). However, I have included a proposed ASL format for clock information in the DSDT example below. With the last patch that hacks the clock info, this prototype will run on the Foundation and RTSM models.
These patches require Hanjun’s fixed-clock patches to be applied first on top of a Linaro ACPI kernel: https://git.linaro.org/gitweb?p=arm/acpi/leg-kernel.git%3Ba=summary
Please comment on both the concept and the implementation.
Brandon Anderson (3):
Remove UART and KMI entries from DTS file
Prototype of AMBA bus 'connector resource' for ACPI
Hack clock names to get prototype running
arch/arm64/boot/dts/foundation-v8-acpi.dts | 10 +-
arch/arm64/boot/dts/rtsm_ve-aemv8a-acpi.dts | 4 +
arch/arm64/boot/dts/rtsm_ve-motherboard-acpi.dtsi | 4 +
drivers/acpi/acpi_platform.c | 2 +
drivers/amba/Makefile | 2 +-
drivers/amba/acpi.c | 172 +++++++++++++++++++++
drivers/clk/clk-fixed-rate.c | 15 +-
7 files changed, 203 insertions(+), 6 deletions(-)
create mode 100644 drivers/amba/acpi.c
--
1.7.9.5
---
Device (AMBA) {
Name (_HID, "AMBA0000") /* the parallel to "arm,primecell" in DTS */
Name (_UID, 0)
/* Define 'apb_pclk' as a default clock source since it is
common with devices below */
Method(_DSM, 4, NotSerialized) {
Store (Package (3)
{
"clock-name", "apb_pclk", "\_SB_.CLK0",
}, Local0)
Return (Local0)
}
Device (KMI0) {
Name (_ADR,0x1c060000)
Method (_CRS, 0x0, Serialized) {
Name (RBUF, ResourceTemplate () {
Memory32Fixed (ReadWrite, 0x1c060000, 0x00010000)
Interrupt (ResourceConsumer, Edge, ActiveBoth,
Exclusive, , , ) {44}
})
Return (RBUF)
}
}
Device (KMI1) {
Name (_ADR,0x1c070000)
Method (_CRS, 0x0, Serialized) {
Name (RBUF, ResourceTemplate () {
Memory32Fixed (ReadWrite, 0x1c070000, 0x00010000)
Interrupt (ResourceConsumer, Edge, ActiveBoth,
Exclusive, , , ) {45}
})
Return (RBUF)
}
}
Device (SER0) {
Name (_ADR,0x1c090000) // UART0
Method (_CRS, 0x0, Serialized) {
Name (RBUF, ResourceTemplate () {
Memory32Fixed (ReadWrite, 0x1c090000, 0x00010000)
Interrupt (ResourceConsumer, Edge, ActiveBoth,
Exclusive, , , ) {37}
})
Return (RBUF)
}
}
Device (SER1) {
Name (_ADR,0x1c0a0000) // UART1
Method (_CRS, 0x0, Serialized) {
Name (RBUF, ResourceTemplate () {
Memory32Fixed (ReadWrite, 0x1c0a0000, 0x00010000)
Interrupt (ResourceConsumer, Edge, ActiveBoth,
Exclusive, , , ) {38}
})
Return (RBUF)
}
}
Device (SER2) {
Name (_ADR,0x1c0b0000) // UART2
Method (_CRS, 0x0, Serialized) {
Name (RBUF, ResourceTemplate () {
Memory32Fixed (ReadWrite, 0x1c0b0000, 0x00010000)
Interrupt (ResourceConsumer, Edge, ActiveBoth,
Exclusive, , , ) {39}
})
Return (RBUF)
}
}
Device (SER3) {
Name (_ADR,0x1c0c0000) // UART3
Method (_CRS, 0x0, Serialized) {
Name (RBUF, ResourceTemplate () {
Memory32Fixed (ReadWrite, 0x1c0c0000, 0x00010000)
Interrupt (ResourceConsumer, Edge, ActiveBoth,
Exclusive, , , ) {40}
})
Return (RBUF)
}
}
}