Hi Guys,
In the spirit of starting things for our LCU target here is the network device on Foundation model converted to probe from ACPI.
Things that have come out of this conversion:
1) we need an ACPI equivalent of simple-bus from FDT 2) we need to decide on how to handle irq domains and especially the domain for the GIC.
Changes Since v1 small typo in the ASL and a whitespace change in smc9x driver that should not have been committed.
Thanks
Graeme
If we set the GIC as the default domain then we can access it for IRQ mapping within the ACPI code.
This probably needs revisited when ACPI fully gains GIC support.
Signed-off-by: Graeme Gregory graeme.gregory@linaro.org --- drivers/irqchip/irq-gic.c | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c index 19ceaa6..4044a30 100644 --- a/drivers/irqchip/irq-gic.c +++ b/drivers/irqchip/irq-gic.c @@ -808,6 +808,10 @@ void __init gic_init_bases(unsigned int gic_nr, int irq_start, if (WARN_ON(!gic->domain)) return;
+#ifdef CONFIG_ACPI + irq_set_default_host(gic->domain); +#endif + #ifdef CONFIG_SMP set_smp_cross_call(gic_raise_softirq); register_cpu_notifier(&gic_cpu_notifier);
Add device ID LINA0003 for this device and add the match table.
As its a platform device it needs no other code and will be probed in by acpi_platform once device ID is added.
Signed-off-by: Graeme Gregory graeme.gregory@linaro.org --- drivers/net/ethernet/smsc/smc91x.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)
diff --git a/drivers/net/ethernet/smsc/smc91x.c b/drivers/net/ethernet/smsc/smc91x.c index dfbf978..e5b3e24 100644 --- a/drivers/net/ethernet/smsc/smc91x.c +++ b/drivers/net/ethernet/smsc/smc91x.c @@ -89,6 +89,10 @@ static const char version[] =
#include <asm/io.h>
+#ifdef CONFIG_ACPI +#include <linux/acpi.h> +#endif + #include "smc91x.h"
#ifndef SMC_NOWAIT @@ -2387,6 +2391,14 @@ static const struct of_device_id smc91x_match[] = { MODULE_DEVICE_TABLE(of, smc91x_match); #endif
+#ifdef CONFIG_ACPI +static const struct acpi_device_id smc91x_acpi_match[] = { + { "LINA0003", }, + { } +}; +MODULE_DEVICE_TABLE(acpi, smc91x_acpi_match) +#endif + static struct dev_pm_ops smc_drv_pm_ops = { .suspend = smc_drv_suspend, .resume = smc_drv_resume, @@ -2400,6 +2412,7 @@ static struct platform_driver smc_driver = { .owner = THIS_MODULE, .pm = &smc_drv_pm_ops, .of_match_table = of_match_ptr(smc91x_match), + .acpi_match_table = ACPI_PTR(smc91x_acpi_match), }, };
On 07/24/2013 04:55 AM, Graeme Gregory wrote:
Add device ID LINA0003 for this device and add the match table.
As its a platform device it needs no other code and will be probed in by acpi_platform once device ID is added.
Signed-off-by: Graeme Gregory graeme.gregory@linaro.org
drivers/net/ethernet/smsc/smc91x.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)
diff --git a/drivers/net/ethernet/smsc/smc91x.c b/drivers/net/ethernet/smsc/smc91x.c index dfbf978..e5b3e24 100644 --- a/drivers/net/ethernet/smsc/smc91x.c +++ b/drivers/net/ethernet/smsc/smc91x.c @@ -89,6 +89,10 @@ static const char version[] =
#include <asm/io.h>
+#ifdef CONFIG_ACPI +#include <linux/acpi.h> +#endif
#include "smc91x.h"
#ifndef SMC_NOWAIT
@@ -2387,6 +2391,14 @@ static const struct of_device_id smc91x_match[] = { MODULE_DEVICE_TABLE(of, smc91x_match); #endif
+#ifdef CONFIG_ACPI +static const struct acpi_device_id smc91x_acpi_match[] = {
- { "LINA0003", },
- { }
+}; +MODULE_DEVICE_TABLE(acpi, smc91x_acpi_match) +#endif
- static struct dev_pm_ops smc_drv_pm_ops = { .suspend = smc_drv_suspend, .resume = smc_drv_resume,
@@ -2400,6 +2412,7 @@ static struct platform_driver smc_driver = { .owner = THIS_MODULE, .pm = &smc_drv_pm_ops, .of_match_table = of_match_ptr(smc91x_match),
}, };.acpi_match_table = ACPI_PTR(smc91x_acpi_match),
Whew. I'm glad you used LINA0003; I've been using LINA0002 for GPIO.
On 24/07/13 21:24, Al Stone wrote:
On 07/24/2013 04:55 AM, Graeme Gregory wrote:
Add device ID LINA0003 for this device and add the match table.
As its a platform device it needs no other code and will be probed in by acpi_platform once device ID is added.
Signed-off-by: Graeme Gregory graeme.gregory@linaro.org
drivers/net/ethernet/smsc/smc91x.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)
diff --git a/drivers/net/ethernet/smsc/smc91x.c b/drivers/net/ethernet/smsc/smc91x.c index dfbf978..e5b3e24 100644 --- a/drivers/net/ethernet/smsc/smc91x.c +++ b/drivers/net/ethernet/smsc/smc91x.c @@ -89,6 +89,10 @@ static const char version[] =
#include <asm/io.h>
+#ifdef CONFIG_ACPI +#include <linux/acpi.h> +#endif
#include "smc91x.h"
#ifndef SMC_NOWAIT
@@ -2387,6 +2391,14 @@ static const struct of_device_id smc91x_match[] = { MODULE_DEVICE_TABLE(of, smc91x_match); #endif
+#ifdef CONFIG_ACPI +static const struct acpi_device_id smc91x_acpi_match[] = {
- { "LINA0003", },
- { }
+}; +MODULE_DEVICE_TABLE(acpi, smc91x_acpi_match) +#endif
- static struct dev_pm_ops smc_drv_pm_ops = { .suspend = smc_drv_suspend, .resume = smc_drv_resume,
@@ -2400,6 +2412,7 @@ static struct platform_driver smc_driver = { .owner = THIS_MODULE, .pm = &smc_drv_pm_ops, .of_match_table = of_match_ptr(smc91x_match),
};.acpi_match_table = ACPI_PTR(smc91x_acpi_match), },
Whew. I'm glad you used LINA0003; I've been using LINA0002 for GPIO.
I know, I saw the ASL even if I havent seen the code ;-)
We will need to make a registry on wiki!
G
On 07/24/2013 02:26 PM, Graeme Gregory wrote:
On 24/07/13 21:24, Al Stone wrote:
On 07/24/2013 04:55 AM, Graeme Gregory wrote:
Add device ID LINA0003 for this device and add the match table.
As its a platform device it needs no other code and will be probed in by acpi_platform once device ID is added.
Signed-off-by: Graeme Gregory graeme.gregory@linaro.org
drivers/net/ethernet/smsc/smc91x.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)
diff --git a/drivers/net/ethernet/smsc/smc91x.c b/drivers/net/ethernet/smsc/smc91x.c index dfbf978..e5b3e24 100644 --- a/drivers/net/ethernet/smsc/smc91x.c +++ b/drivers/net/ethernet/smsc/smc91x.c @@ -89,6 +89,10 @@ static const char version[] =
#include <asm/io.h>
+#ifdef CONFIG_ACPI +#include <linux/acpi.h> +#endif
#include "smc91x.h"
#ifndef SMC_NOWAIT
@@ -2387,6 +2391,14 @@ static const struct of_device_id smc91x_match[] = { MODULE_DEVICE_TABLE(of, smc91x_match); #endif
+#ifdef CONFIG_ACPI +static const struct acpi_device_id smc91x_acpi_match[] = {
- { "LINA0003", },
- { }
+}; +MODULE_DEVICE_TABLE(acpi, smc91x_acpi_match) +#endif
- static struct dev_pm_ops smc_drv_pm_ops = { .suspend = smc_drv_suspend, .resume = smc_drv_resume,
@@ -2400,6 +2412,7 @@ static struct platform_driver smc_driver = { .owner = THIS_MODULE, .pm = &smc_drv_pm_ops, .of_match_table = of_match_ptr(smc91x_match),
};.acpi_match_table = ACPI_PTR(smc91x_acpi_match), },
Whew. I'm glad you used LINA0003; I've been using LINA0002 for GPIO.
I know, I saw the ASL even if I havent seen the code ;-)
We will need to make a registry on wiki!
G
I was thinking that, too; you want to start it or shall I?
On 24/07/13 21:27, Al Stone wrote:
On 07/24/2013 02:26 PM, Graeme Gregory wrote:
On 24/07/13 21:24, Al Stone wrote:
On 07/24/2013 04:55 AM, Graeme Gregory wrote:
Add device ID LINA0003 for this device and add the match table.
As its a platform device it needs no other code and will be probed in by acpi_platform once device ID is added.
Signed-off-by: Graeme Gregory graeme.gregory@linaro.org
drivers/net/ethernet/smsc/smc91x.c | 13 +++++++++++++ 1 file changed, 13 insertions(+)
diff --git a/drivers/net/ethernet/smsc/smc91x.c b/drivers/net/ethernet/smsc/smc91x.c index dfbf978..e5b3e24 100644 --- a/drivers/net/ethernet/smsc/smc91x.c +++ b/drivers/net/ethernet/smsc/smc91x.c @@ -89,6 +89,10 @@ static const char version[] =
#include <asm/io.h>
+#ifdef CONFIG_ACPI +#include <linux/acpi.h> +#endif
#include "smc91x.h"
#ifndef SMC_NOWAIT
@@ -2387,6 +2391,14 @@ static const struct of_device_id smc91x_match[] = { MODULE_DEVICE_TABLE(of, smc91x_match); #endif
+#ifdef CONFIG_ACPI +static const struct acpi_device_id smc91x_acpi_match[] = {
- { "LINA0003", },
- { }
+}; +MODULE_DEVICE_TABLE(acpi, smc91x_acpi_match) +#endif
- static struct dev_pm_ops smc_drv_pm_ops = { .suspend = smc_drv_suspend, .resume = smc_drv_resume,
@@ -2400,6 +2412,7 @@ static struct platform_driver smc_driver = { .owner = THIS_MODULE, .pm = &smc_drv_pm_ops, .of_match_table = of_match_ptr(smc91x_match),
};.acpi_match_table = ACPI_PTR(smc91x_acpi_match), },
Whew. I'm glad you used LINA0003; I've been using LINA0002 for GPIO.
I know, I saw the ASL even if I havent seen the code ;-)
We will need to make a registry on wiki!
G
I was thinking that, too; you want to start it or shall I?
It is created.
https://wiki.linaro.org/LEG/Engineering/Kernel/ACPI/ACPILinaroRegistry
Graeme
Awesome thread, what a strong team!!!
Whitelist the smc91x ID of LINA0003
Signed-off-by: Graeme Gregory graeme.gregory@linaro.org --- drivers/acpi/acpi_platform.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/drivers/acpi/acpi_platform.c b/drivers/acpi/acpi_platform.c index fafec5d..f12870c 100644 --- a/drivers/acpi/acpi_platform.c +++ b/drivers/acpi/acpi_platform.c @@ -30,6 +30,9 @@ static const struct acpi_device_id acpi_platform_device_ids[] = {
{ "PNP0D40" },
+ /* arm64 platform devices */ + { "LINA0003" }, + { } };
Add a special version of this DTS so we can remove devices one at a time as they are transferred over to ACPI probing.
Signed-off-by: Graeme Gregory graeme.gregory@linaro.org --- arch/arm64/boot/dts/foundation-v8-acpi.dts | 234 ++++++++++++++++++++++++++++ 1 file changed, 234 insertions(+) create mode 100644 arch/arm64/boot/dts/foundation-v8-acpi.dts
diff --git a/arch/arm64/boot/dts/foundation-v8-acpi.dts b/arch/arm64/boot/dts/foundation-v8-acpi.dts new file mode 100644 index 0000000..d5bbe53 --- /dev/null +++ b/arch/arm64/boot/dts/foundation-v8-acpi.dts @@ -0,0 +1,234 @@ +/* + * ARM Ltd. + * + * ARMv8 Foundation model DTS + */ + +/dts-v1/; + +/ { + model = "Foundation-v8A"; + compatible = "arm,foundation-aarch64", "arm,vexpress"; + interrupt-parent = <&gic>; + #address-cells = <2>; + #size-cells = <2>; + + chosen { }; + + aliases { + serial0 = &v2m_serial0; + serial1 = &v2m_serial1; + serial2 = &v2m_serial2; + serial3 = &v2m_serial3; + }; + + cpus { + #address-cells = <2>; + #size-cells = <0>; + + cpu@0 { + device_type = "cpu"; + compatible = "arm,armv8"; + reg = <0x0 0x0>; + enable-method = "spin-table"; + cpu-release-addr = <0x0 0x8000fff8>; + }; + cpu@1 { + device_type = "cpu"; + compatible = "arm,armv8"; + reg = <0x0 0x1>; + enable-method = "spin-table"; + cpu-release-addr = <0x0 0x8000fff8>; + }; + cpu@2 { + device_type = "cpu"; + compatible = "arm,armv8"; + reg = <0x0 0x2>; + enable-method = "spin-table"; + cpu-release-addr = <0x0 0x8000fff8>; + }; + cpu@3 { + device_type = "cpu"; + compatible = "arm,armv8"; + reg = <0x0 0x3>; + enable-method = "spin-table"; + cpu-release-addr = <0x0 0x8000fff8>; + }; + }; + + memory@80000000 { + device_type = "memory"; + reg = <0x00000000 0x80000000 0 0x80000000>, + <0x00000008 0x80000000 0 0x80000000>; + }; + + gic: interrupt-controller@2c001000 { + compatible = "arm,cortex-a15-gic", "arm,cortex-a9-gic"; + #interrupt-cells = <3>; + #address-cells = <0>; + interrupt-controller; + reg = <0x0 0x2c001000 0 0x1000>, + <0x0 0x2c002000 0 0x1000>, + <0x0 0x2c004000 0 0x2000>, + <0x0 0x2c006000 0 0x2000>; + interrupts = <1 9 0xf04>; + }; + + timer { + compatible = "arm,armv8-timer"; + interrupts = <1 13 0xff01>, + <1 14 0xff01>, + <1 11 0xff01>, + <1 10 0xff01>; + clock-frequency = <100000000>; + }; + + pmu { + compatible = "arm,armv8-pmuv3"; + interrupts = <0 60 4>, + <0 61 4>, + <0 62 4>, + <0 63 4>; + }; + + smb { + compatible = "arm,vexpress,v2m-p1", "simple-bus"; + arm,v2m-memory-map = "rs1"; + #address-cells = <2>; /* SMB chipselect number and offset */ + #size-cells = <1>; + + ranges = <0 0 0 0x08000000 0x04000000>, + <1 0 0 0x14000000 0x04000000>, + <2 0 0 0x18000000 0x04000000>, + <3 0 0 0x1c000000 0x04000000>, + <4 0 0 0x0c000000 0x04000000>, + <5 0 0 0x10000000 0x04000000>; + + #interrupt-cells = <1>; + interrupt-map-mask = <0 0 63>; + interrupt-map = <0 0 0 &gic 0 0 4>, + <0 0 1 &gic 0 1 4>, + <0 0 2 &gic 0 2 4>, + <0 0 3 &gic 0 3 4>, + <0 0 4 &gic 0 4 4>, + <0 0 5 &gic 0 5 4>, + <0 0 6 &gic 0 6 4>, + <0 0 7 &gic 0 7 4>, + <0 0 8 &gic 0 8 4>, + <0 0 9 &gic 0 9 4>, + <0 0 10 &gic 0 10 4>, + <0 0 11 &gic 0 11 4>, + <0 0 12 &gic 0 12 4>, + <0 0 13 &gic 0 13 4>, + <0 0 14 &gic 0 14 4>, + <0 0 15 &gic 0 15 4>, + <0 0 16 &gic 0 16 4>, + <0 0 17 &gic 0 17 4>, + <0 0 18 &gic 0 18 4>, + <0 0 19 &gic 0 19 4>, + <0 0 20 &gic 0 20 4>, + <0 0 21 &gic 0 21 4>, + <0 0 22 &gic 0 22 4>, + <0 0 23 &gic 0 23 4>, + <0 0 24 &gic 0 24 4>, + <0 0 25 &gic 0 25 4>, + <0 0 26 &gic 0 26 4>, + <0 0 27 &gic 0 27 4>, + <0 0 28 &gic 0 28 4>, + <0 0 29 &gic 0 29 4>, + <0 0 30 &gic 0 30 4>, + <0 0 31 &gic 0 31 4>, + <0 0 32 &gic 0 32 4>, + <0 0 33 &gic 0 33 4>, + <0 0 34 &gic 0 34 4>, + <0 0 35 &gic 0 35 4>, + <0 0 36 &gic 0 36 4>, + <0 0 37 &gic 0 37 4>, + <0 0 38 &gic 0 38 4>, + <0 0 39 &gic 0 39 4>, + <0 0 40 &gic 0 40 4>, + <0 0 41 &gic 0 41 4>, + <0 0 42 &gic 0 42 4>; + + /* + * Removed for ACPI + * + ethernet@2,02000000 { + compatible = "smsc,lan91c111"; + reg = <2 0x02000000 0x10000>; + interrupts = <15>; + }; + */ + + v2m_clk24mhz: clk24mhz { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = <24000000>; + clock-output-names = "v2m:clk24mhz"; + }; + + v2m_refclk1mhz: refclk1mhz { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = <1000000>; + clock-output-names = "v2m:refclk1mhz"; + }; + + v2m_refclk32khz: refclk32khz { + compatible = "fixed-clock"; + #clock-cells = <0>; + clock-frequency = <32768>; + clock-output-names = "v2m:refclk32khz"; + }; + + iofpga@3,00000000 { + compatible = "arm,amba-bus", "simple-bus"; + #address-cells = <1>; + #size-cells = <1>; + ranges = <0 3 0 0x200000>; + + v2m_sysreg: sysreg@010000 { + compatible = "arm,vexpress-sysreg"; + reg = <0x010000 0x1000>; + }; + + v2m_serial0: uart@090000 { + compatible = "arm,pl011", "arm,primecell"; + reg = <0x090000 0x1000>; + interrupts = <5>; + clocks = <&v2m_clk24mhz>, <&v2m_clk24mhz>; + clock-names = "uartclk", "apb_pclk"; + }; + + v2m_serial1: uart@0a0000 { + compatible = "arm,pl011", "arm,primecell"; + reg = <0x0a0000 0x1000>; + interrupts = <6>; + clocks = <&v2m_clk24mhz>, <&v2m_clk24mhz>; + clock-names = "uartclk", "apb_pclk"; + }; + + v2m_serial2: uart@0b0000 { + compatible = "arm,pl011", "arm,primecell"; + reg = <0x0b0000 0x1000>; + interrupts = <7>; + clocks = <&v2m_clk24mhz>, <&v2m_clk24mhz>; + clock-names = "uartclk", "apb_pclk"; + }; + + v2m_serial3: uart@0c0000 { + compatible = "arm,pl011", "arm,primecell"; + reg = <0x0c0000 0x1000>; + interrupts = <8>; + clocks = <&v2m_clk24mhz>, <&v2m_clk24mhz>; + clock-names = "uartclk", "apb_pclk"; + }; + + virtio_block@0130000 { + compatible = "virtio,mmio"; + reg = <0x130000 0x1000>; + interrupts = <42>; + }; + }; + }; +};
Add the ASL for smc91x device to ASL.
This will need to be revisited when GIC and Simple Bus implementations are decided on and coded in ACPI space.
Signed-off-by: Graeme Gregory graeme.gregory@linaro.org --- arch/arm64/boot/asl/foundation-v8.acpi/dsdt.asl | 13 +++++++++++++ 1 file changed, 13 insertions(+)
diff --git a/arch/arm64/boot/asl/foundation-v8.acpi/dsdt.asl b/arch/arm64/boot/asl/foundation-v8.acpi/dsdt.asl index 2dfd07d..ccabf13 100644 --- a/arch/arm64/boot/asl/foundation-v8.acpi/dsdt.asl +++ b/arch/arm64/boot/asl/foundation-v8.acpi/dsdt.asl @@ -217,5 +217,18 @@ DefinitionBlock ( } } } + + Device (NET0) { + Name (_HID, "LINA0003") + Name (_UID, 0) + + Method (_CRS, 0x0, NotSerialized) { + Name (RBUF, ResourceTemplate () { + Memory32Fixed (ReadWrite, 0x1a000000, 0x00010000) + Interrupt (ResourceConsumer, Edge, ActiveBoth, Exclusive, , , ) {0x2F} + }) + Return (RBUF) + } + } } }
On 07/24/2013 04:55 AM, Graeme Gregory wrote:
Hi Guys,
In the spirit of starting things for our LCU target here is the network device on Foundation model converted to probe from ACPI.
Things that have come out of this conversion:
- we need an ACPI equivalent of simple-bus from FDT
- we need to decide on how to handle irq domains and especially the domain
for the GIC.
Changes Since v1 small typo in the ASL and a whitespace change in smc9x driver that should not have been committed.
Thanks
Graeme
All patches are Acked-by: Al Stone al.stone@linaro.org