This patch set is based on part1 "Make ACPI core running on ARM64" patch
set.
After we can get the ACPI tables from UEFI, we can use these tables
to initialise the system now.
GIC (means GIC cpu interface) structure and GIC distributor structure in
MADT table contains the information of GIC cpu interface base address
and GIC distributor base address, which can be used to initialise GIC.
Further more, parked address in GIC structure can be used as cpu release
address for spin table SMP initialisation.
This patch set use these information to init SMP and GIC.
Please refer to chapter 5.2.12.14/15 of ACPI 5.0 spec for GIC and GIC
distributor structure information.
Amit Daniel Kachhap (1):
irqdomain: Add a new API irq_create_acpi_mapping()
Hanjun Guo (8):
ARM64 / ACPI: Implement core functions for parsing MADT table
ARM64 / ACPI: Prefill cpu possible/present maps and map logical cpu
id to APIC id
ARM64 / ACPI: Introduce map_gic_id() to get apic id from MADT or _MAT
method
ARM64 / ACPI: Use Parked Address in GIC structure for spin table SMP
initialisation
ACPI: Define ACPI_IRQ_MODEL_GIC needed for arm
Irqchip / gic: Set as default domain so we can access from ACPI
ACPI / ARM64: Update acpi_register_gsi to register with the core IRQ
subsystem
ACPI / GIC: Initialize GIC using the information in MADT
arch/arm64/include/asm/acpi.h | 16 +-
arch/arm64/kernel/irq.c | 5 +
arch/arm64/kernel/setup.c | 2 +
arch/arm64/kernel/smp.c | 2 +
arch/arm64/kernel/smp_spin_table.c | 16 +-
drivers/acpi/bus.c | 3 +
drivers/acpi/plat/arm-core.c | 397 +++++++++++++++++++++++++++++++++++-
drivers/acpi/processor_core.c | 26 +++
drivers/acpi/tables.c | 21 ++
drivers/irqchip/irq-gic.c | 7 +
include/linux/acpi.h | 9 +
kernel/irq/irqdomain.c | 27 +++
12 files changed, 521 insertions(+), 10 deletions(-)
--
1.7.9.5
Automated DT boot report for various ARM defconfigs.
Tree/Branch: queue
Git describe: v3.10.27-1-gcc30b1d
Failed boot tests (console logs at the end)
===========================================
am335x-bone: FAIL: omap2plus_defconfig
armada-xp-openblocks-ax3-4: FAIL: multi_v7_defconfig
armada-370-mirabox: FAIL: multi_v7_defconfig
sun4i-a10-cubieboard: FAIL: multi_v7_defconfig
sama5d35ek: FAIL: sama5_defconfig
Full Report
===========
omap2plus_defconfig
-------------------
omap3-beagle-xm PASS: 0 min 55.5 sec
am335x-bone FAIL: 0 min 31.4 sec
omap3-tobi,3530overo PASS: 0 min 33.7 sec
omap4-panda PASS: 1 min 3.8 sec
omap4-panda-es PASS: 1 min 7.2 sec
omap3-tobi,3730storm PASS: 0 min 35.9 sec
omap3-beagle PASS: 0 min 51.5 sec
tegra_defconfig
---------------
tegra30-beaver PASS: 0 min 17.8 sec
imx_v6_v7_defconfig
-------------------
imx6dl-wandboard,wand-dual PASS: 0 min 16.6 sec
imx6dl-wandboard,wand-solo PASS: 0 min 16.5 sec
mvebu_defconfig
---------------
armada-xp-openblocks-ax3-4 PASS: 0 min 21.3 sec
armada-370-mirabox PASS: 0 min 19.6 sec
exynos_defconfig
----------------
exynos5250-arndale PASS: 0 min 29.4 sec
multi_v7_defconfig
------------------
armada-xp-openblocks-ax3-4 FAIL: 0 min 20.0 sec
armada-370-mirabox FAIL: 0 min 17.9 sec
sun4i-a10-cubieboard FAIL: 1 min 8.5 sec
sama5_defconfig
---------------
sama5d35ek FAIL: 0 min 31.4 sec
Console logs for failures
=========================
omap2plus_defconfig
-------------------
am335x-bone: FAIL: last 24 lines of boot log:
---------------------------------------------
cu: /home/khilman/dev/am335xbone: Line in use
cu: /home/khilman/dev/am335xbone: Line in use
cu: /home/khilman/dev/am335xbone: Line in use
cu: /home/khilman/dev/am335xbone: Line in use
cu: /home/khilman/dev/am335xbone: Line in use
cu: /home/khilman/dev/am335xbone: Line in use
cu: /home/khilman/dev/am335xbone: Line in use
cu: /home/khilman/dev/am335xbone: Line in use
cu: /home/khilman/dev/am335xbone: Line in use
cu: /home/khilman/dev/am335xbone: Line in use
cu: /home/khilman/dev/am335xbone: Line in use
cu: /home/khilman/dev/am335xbone: Line in use
cu: /home/khilman/dev/am335xbone: Line in use
cu: /home/khilman/dev/am335xbone: Line in use
cu: /home/khilman/dev/am335xbone: Line in use
cu: /home/khilman/dev/am335xbone: Line in use
cu: /home/khilman/dev/am335xbone: Line in use
cu: /home/khilman/dev/am335xbone: Line in use
Unknown command '~`f~~~~ff~`f~~~~ff~`f~~~~ff~xp~~xp~' - try 'help'
U-Boot# ~$off
# PYBOOT: Exception: ERROR: Could not break into autoboot.
# PYBOOT: Time: 31.36 seconds.
# PYBOOT: Result: FAIL
multi_v7_defconfig
------------------
armada-xp-openblocks-ax3-4: FAIL: last 24 lines of boot log:
------------------------------------------------------------
[<c0013bec>] (unwind_backtrace+0x0/0xf4) from [<c00114b0>] (show_stack+0x10/0x14)
[<c00114b0>] (show_stack+0x10/0x14) from [<c0275d20>] (panic+0xa0/0x1e8)
[<c0275d20>] (panic+0xa0/0x1e8) from [<c0329110>] (mount_block_root+0x294/0x298)
[<c0329110>] (mount_block_root+0x294/0x298) from [<c03292c4>] (prepare_namespace+0x14c/0x184)
[<c03292c4>] (prepare_namespace+0x14c/0x184) from [<c0328d60>] (kernel_init_freeable+0x1c8/0x1d8)
[<c0328d60>] (kernel_init_freeable+0x1c8/0x1d8) from [<c0271a90>] (kernel_init+0x8/0x158)
[<c0271a90>] (kernel_init+0x8/0x158) from [<c000df18>] (ret_from_fork+0x14/0x3c)
CPU0: stopping
CPU: 0 PID: 0 Comm: swapper/0 Not tainted 3.10.27-00001-gcc30b1d #1
[<c0013bec>] (unwind_backtrace+0x0/0xf4) from [<c00114b0>] (show_stack+0x10/0x14)
[<c00114b0>] (show_stack+0x10/0x14) from [<c001236c>] (handle_IPI+0x108/0x130)
[<c001236c>] (handle_IPI+0x108/0x130) from [<c000851c>] (armada_370_xp_handle_irq+0x90/0xa8)
[<c000851c>] (armada_370_xp_handle_irq+0x90/0xa8) from [<c000dac0>] (__irq_svc+0x40/0x50)
Exception stack(0xc0359f70 to 0xc0359fb8)
9f60: c1d5b6d8 00000000 000000be 000000be
9f80: c03604a8 c0358000 c036045c c0383b6c c027dec0 c0358000 c0383b6c c0358000
9fa0: 0000001f c0359fb8 c000f070 c004f970 60000113 ffffffff
[<c000dac0>] (__irq_svc+0x40/0x50) from [<c004f970>] (cpu_startup_entry+0xfc/0x140)
[<c004f970>] (cpu_startup_entry+0xfc/0x140) from [<c0328a3c>] (start_kernel+0x2c4/0x2d0)
[<c0328a3c>] (start_kernel+0x2c4/0x2d0) from [<00008074>] (0x8074)
~$off
# PYBOOT: Exception: kernel: ERROR: failed to boot: Kernel panic
# PYBOOT: Time: 19.96 seconds.
# PYBOOT: Result: FAIL
armada-370-mirabox: FAIL: last 24 lines of boot log:
----------------------------------------------------
mousedev: PS/2 mouse device common for all mice
sdhci: Secure Digital Host Controller Interface driver
sdhci: Copyright(c) Pierre Ossman
sdhci-pltfm: SDHCI platform and OF driver helper
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
VFP support v0.3: implementor 56 architecture 2 part 20 variant 9 rev 6
Registering SWP/SWPB emulation handler
/home/build/work/batch/drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
List of all partitions:
No filesystem could mount root, tried:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0)
CPU: 0 PID: 1 Comm: swapper/0 Not tainted 3.10.27-00001-gcc30b1d #1
[<c0013bec>] (unwind_backtrace+0x0/0xf4) from [<c00114b0>] (show_stack+0x10/0x14)
[<c00114b0>] (show_stack+0x10/0x14) from [<c0275d20>] (panic+0xa0/0x1e8)
[<c0275d20>] (panic+0xa0/0x1e8) from [<c0329110>] (mount_block_root+0x294/0x298)
[<c0329110>] (mount_block_root+0x294/0x298) from [<c03292c4>] (prepare_namespace+0x14c/0x184)
[<c03292c4>] (prepare_namespace+0x14c/0x184) from [<c0328d60>] (kernel_init_freeable+0x1c8/0x1d8)
[<c0328d60>] (kernel_init_freeable+0x1c8/0x1d8) from [<c0271a90>] (kernel_init+0x8/0x158)
[<c0271a90>] (kernel_init+0x8/0x158) from [<c000df18>] (ret_from_fork+0x14/0x3c)
~$off
# PYBOOT: Exception: kernel: ERROR: failed to boot: Kernel panic
# PYBOOT: Time: 17.89 seconds.
# PYBOOT: Result: FAIL
sun4i-a10-cubieboard: FAIL: last 24 lines of boot log:
------------------------------------------------------
ipmi_si: Trying default-specified bt state machine at i/o address 0xe4, slave address 0x0, irq 0
ipmi_si: Could not set up I/O space
Trying to free nonexistent resource <00000000000000e4-00000000000000e4>
Trying to free nonexistent resource <00000000000000e5-00000000000000e5>
Trying to free nonexistent resource <00000000000000e6-00000000000000e6>
ipmi_si: Unable to find any System Interface(s)
Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
1c28000.serial: ttyS0 at MMIO 0x1c28000 (irq = 17) is a U6_16550A
console [ttyS0] enabled
usbcore: registered new interface driver usb-storage
mousedev: PS/2 mouse device common for all mice
sdhci: Secure Digital Host Controller Interface driver
sdhci: Copyright(c) Pierre Ossman
sdhci-pltfm: SDHCI platform and OF driver helper
usbcore: registered new interface driver usbhid
usbhid: USB HID core driver
VFP support v0.3: implementor 41 architecture 3 part 30 variant c rev 3
Registering SWP/SWPB emulation handler
/home/build/work/batch/drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
Waiting for root device /dev/mmcblk0p2...
~$off
# PYBOOT: Exception: kernel: ERROR: failed to boot: <class 'pexpect.TIMEOUT'>
# PYBOOT: Time: 68.48 seconds.
# PYBOOT: Result: FAIL
sama5_defconfig
---------------
sama5d35ek: FAIL: last 24 lines of boot log:
--------------------------------------------
cu: /home/khilman/dev/sama5: Line in use
cu: /home/khilman/dev/sama5: Line in use
cu: /home/khilman/dev/sama5: Line in use
cu: /home/khilman/dev/sama5: Line in use
cu: /home/khilman/dev/sama5: Line in use
cu: /home/khilman/dev/sama5: Line in use
cu: /home/khilman/dev/sama5: Line in use
cu: /home/khilman/dev/sama5: Line in use
cu: /home/khilman/dev/sama5: Line in use
cu: /home/khilman/dev/sama5: Line in use
cu: /home/khilman/dev/sama5: Line in use
cu: /home/khilman/dev/sama5: Line in use
cu: /home/khilman/dev/sama5: Line in use
cu: /home/khilman/dev/sama5: Line in use
cu: /home/khilman/dev/sama5: Line in use
cu: /home/khilman/dev/sama5: Line in use
cu: /home/khilman/dev/sama5: Line in use
cu: /home/khilman/dev/sama5: Line in use
cu: /home/khilman/dev/sama5: Line in use
cu: /home/khilman/dev/sama5: Line in use
~$off
# PYBOOT: Exception: ERROR: Could not break into autoboot.
# PYBOOT: Time: 31.45 seconds.
# PYBOOT: Result: FAIL
Each asm-generic/audit_xx.h defines a set of system calls for respective
audit permssion class (read, write, change attribute or exec).
This patch changes two entries:
1) fchown in audit_change_attr.h
Make fchown included by its own because in asm-generic/unistd.h, for example,
fchown always exists while chown is optional. This change is necessary at
least for arm64.
2) truncate64 in audit_write.h
Add missing truncate64/ftruncate64 as well as truncate/ftruncate
Signed-off-by: AKASHI Takahiro <takahiro.akashi(a)linaro.org>
---
include/asm-generic/audit_change_attr.h | 4 +++-
include/asm-generic/audit_write.h | 6 ++++++
2 files changed, 9 insertions(+), 1 deletion(-)
diff --git a/include/asm-generic/audit_change_attr.h b/include/asm-generic/audit_change_attr.h
index 89b73e5..a186553 100644
--- a/include/asm-generic/audit_change_attr.h
+++ b/include/asm-generic/audit_change_attr.h
@@ -4,9 +4,11 @@ __NR_chmod,
__NR_fchmod,
#ifdef __NR_chown
__NR_chown,
-__NR_fchown,
__NR_lchown,
#endif
+#ifdef __NR_fchown
+__NR_fchown,
+#endif
__NR_setxattr,
__NR_lsetxattr,
__NR_fsetxattr,
diff --git a/include/asm-generic/audit_write.h b/include/asm-generic/audit_write.h
index e7020c5..274575d 100644
--- a/include/asm-generic/audit_write.h
+++ b/include/asm-generic/audit_write.h
@@ -10,6 +10,12 @@ __NR_truncate,
#ifdef __NR_truncate64
__NR_truncate64,
#endif
+#ifdef __NR_ftruncate
+__NR_ftruncate,
+#endif
+#ifdef __NR_ftruncate64
+__NR_ftruncate64,
+#endif
#ifdef __NR_bind
__NR_bind, /* bind can affect fs object only in one way... */
#endif
--
1.7.9.5
From: Al Stone <al.stone(a)linaro.org>
ACPI hardware reduced mode exists to allow newer platforms to use a
simpler form of ACPI that does not require supporting legacy versions
of the specification and their associated hardware. This mode was
introduced in the ACPI 5.0 specification.
To enable the hardware reduced mode of ACPI, we need to set the flag
ACPI_REDUCED_HARDWARE to TRUE in the ACPICA source. In order to do
that, we introduce a kernel configuration item to enable or disable
ACPI_REDUCED_HARDWARE. We can then change the kernel configuration
instead of having to modify the kernel source.
Introducing this configuration item is based on suggestions from Lv
Zheng saying that this does not belong in ACPICA, but rather to the
Linux kernel itself. Hence, we introduce this configuration item so
that we can make ACPI_REDUCED_HARDWARE configurable. For the details
of the discussion, please refer to:
http://www.spinics.net/lists/linux-acpi/msg46369.html
Changes for v3:
-- Minimize the changelog.
Changes for v2:
-- Changed test for EXPERT to avoid reported Kconfig warning
Signed-off-by: Hanjun Guo <hanjun.guo(a)linaro.org>
Signed-off-by: Al Stone <al.stone(a)linaro.org>
---
drivers/acpi/Kconfig | 13 +++++++++++++
include/acpi/platform/aclinux.h | 6 ++++++
2 files changed, 19 insertions(+)
diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig
index 4770de5..9fd6a7a 100644
--- a/drivers/acpi/Kconfig
+++ b/drivers/acpi/Kconfig
@@ -343,6 +343,19 @@ config ACPI_BGRT
data from the firmware boot splash. It will appear under
/sys/firmware/acpi/bgrt/ .
+config ACPI_REDUCED_HARDWARE_ONLY
+ bool "Hardware-reduced ACPI support only" if EXPERT
+ def_bool n
+ depends on ACPI
+ help
+ This config item changes the way the ACPI code is built. When this
+ option is selected, the kernel will use a specialized version of
+ ACPICA that ONLY supports the ACPI "reduced hardware" mode. The
+ resulting kernel will be smaller but it will also be restricted to
+ running in ACPI reduced hardware mode ONLY.
+
+ If you are unsure what to do, do not enable this option.
+
source "drivers/acpi/apei/Kconfig"
config ACPI_EXTLOG
diff --git a/include/acpi/platform/aclinux.h b/include/acpi/platform/aclinux.h
index 28f4f4d..7d71f08 100644
--- a/include/acpi/platform/aclinux.h
+++ b/include/acpi/platform/aclinux.h
@@ -52,6 +52,12 @@
#ifdef __KERNEL__
+/* Compile for reduced hardware mode only with this kernel config */
+
+#ifdef CONFIG_ACPI_REDUCED_HARDWARE_ONLY
+#define ACPI_REDUCED_HARDWARE 1
+#endif
+
#include <linux/string.h>
#include <linux/kernel.h>
#include <linux/ctype.h>
--
1.8.4.2
From: Al Stone <al.stone(a)linaro.org>
Hardware reduced mode, despite the name, exists primarily to allow
newer platforms to use a much simpler form of ACPI that does not
require supporting the legacy of previous versions of the specification.
This mode was first introduced in the ACPI 5.0 specification, but because
it is so much simpler and reduces the size of the object code needed to
support ACPI, it is likely to be used more often in the near future.
To enable the hardware reduced mode of ACPI on some platforms (such as
ARM), we need to modify the kernel code and set ACPI_REDUCED_HARDWARE
to TRUE in the ACPICA source. For ARM/ARM64, hardware reduced ACPI
should be the only mode used; legacy mode would require modifications
to SoCs in order to provide several x86-specific hardware features (e.g.,
an NMI and SMI support).
We set ACPI_REDUCED_HARDWARE to TRUE in the ACPICA source by introducing
a kernel config item to enable/disable ACPI_REDUCED_HARDWARE. We can then
change the kernel config instead of having to modify the kernel source
directly to enable the reduced hardware mode of ACPI.
Lv Zheng suggested that this configuration item does not belong in ACPICA,
the upstream source for much of the ACPI internals, but rather to the
Linux kernel itself. Hence, we introduce this flag so that we can make
ACPI_REDUCED_HARDWARE configurable. For the details of the discussion,
please refer to: http://www.spinics.net/lists/linux-acpi/msg46369.html
Even though support for X86 in hardware reduced mode is possible, it
is NOT enabled. Extensive effort has gone into the Linux kernel so that
there is a single kernel image than can run on all x86 hardware; the kernel
changes run-time behavior to adapt to the hardware being used. This is not
currently possible with the existing ACPICA infrastructure but only presents
a problem on achitectures supporting both hardware-reduced and legacy modes
of ACPI -- i.e., on x86 only.
The problem with the current ACPICA code base is that if one builds legacy
ACPI (a proper superset of hardware-reduced), the kernel can run in hardware-
reduced with the proper ACPI tables, but there is still ACPICA code that could
be executed even though it is not allowed by the specification. If one builds
a hardware-reduced only ACPI, the kernel cannot run with ACPI tables that are
for legacy mode. To ensure compliance with ACPI, one must therefore build
two separate kernels. Once this problem has been properly fixed, we can then
enable x86 hardware-reduced mode and use a single kernel.
This patch used to be part of a set to implement stricter conformance with
hardware reduced ACPI. The code changes from that set are being re-thought
in order to handle some non-compliant hardware, but this patch did not depend
on those changes. In the meantime, this patch is needed in order to enable
ACPI core functionality for ARMv8 servers and hence is being submitted
separately in order to aid that effort.
Signed-off-by: Hanjun Guo <hanjun.guo(a)linaro.org>
Signed-off-by: Al Stone <al.stone(a)linaro.org>
---
drivers/acpi/Kconfig | 13 +++++++++++++
include/acpi/platform/aclinux.h | 6 ++++++
2 files changed, 19 insertions(+)
diff --git a/drivers/acpi/Kconfig b/drivers/acpi/Kconfig
index 4770de5..961ea9e 100644
--- a/drivers/acpi/Kconfig
+++ b/drivers/acpi/Kconfig
@@ -343,6 +343,19 @@ config ACPI_BGRT
data from the firmware boot splash. It will appear under
/sys/firmware/acpi/bgrt/ .
+config ACPI_REDUCED_HARDWARE_ONLY
+ bool "Hardware-reduced ACPI support only"
+ def_bool n
+ depends on ACPI && EXPERT
+ help
+ This config item changes the way the ACPI code is built. When this
+ option is selected, the kernel will use a specialized version of
+ ACPICA that ONLY supports the ACPI "reduced hardware" mode. The
+ resulting kernel will be smaller but it will also be restricted to
+ running in ACPI reduced hardware mode ONLY.
+
+ If you are unsure what to do, do not enable this option.
+
source "drivers/acpi/apei/Kconfig"
config ACPI_EXTLOG
diff --git a/include/acpi/platform/aclinux.h b/include/acpi/platform/aclinux.h
index 28f4f4d..7d71f08 100644
--- a/include/acpi/platform/aclinux.h
+++ b/include/acpi/platform/aclinux.h
@@ -52,6 +52,12 @@
#ifdef __KERNEL__
+/* Compile for reduced hardware mode only with this kernel config */
+
+#ifdef CONFIG_ACPI_REDUCED_HARDWARE_ONLY
+#define ACPI_REDUCED_HARDWARE 1
+#endif
+
#include <linux/string.h>
#include <linux/kernel.h>
#include <linux/ctype.h>
--
1.8.4.2