Juno booting from ACPI tables.

So my work at Linaro for the last year and a half has been on bring ACPI to arm64. The first actual hardware platform that this work can be booted on is the Juno development board.

Using the ACPI tables devloped for MS Windows and published by ARM https://github.com/ARM-software/edk2/tree/juno-acpi.

And the kernel based on the series of patches published by Linaro on LKML http://git.linaro.org/leg/acpi/acpi.git/shortlog/refs/heads/acpi-topic-juno-fvp.

It is now possible to boot the Juno to userspace (using root on NFS as the USB support is not in mainline yet).

Here is dmesg of successful boot.

Initializing cgroup subsys cpu
Linux version 3.17.0-rc2+ (graeme@xora-haswell) (gcc version 4.8.3 20140401 (prerelease) (crosstool-NG linaro-1.13.1-4.8-2014.04 - Linaro GCC 4.8-2014.04) ) #168 SMP PREEMPT Fri Aug 29 17:11:37 BST 2014
CPU: AArch64 Processor [410fd030] revision 0
Detected VIPT I-cache on CPU0
Early serial console at I/O port 0x0 (options '')
bootconsole [uart0] enabled
efi: Getting EFI parameters from FDT:
EFI v2.40 by ARM Juno EFI Aug 7 2014 10:38:36
efi: ACPI=0xf9b80000 ACPI 2.0=0xf9b80014 
ACPI: Early table checksum verification disabled
ACPI: RSDP 0x00000000F9B80014 000024 (v02 ARMLTD)
ACPI: XSDT 0x00000000F9B7F0E8 00003C (v01 ARMLTD ARM-JUNO 20140727 01000013)
ACPI: FACP 0x00000000F9B42000 00010C (v05 ARMLTD ARM-JUNO 20140727 ARM 00000099)
ACPI: DSDT 0x00000000F9B3F000 000317 (v01 ARMLTD ARM-JUNO 20140727 INTL 20140424)
ACPI: GTDT 0x00000000F9B41000 000060 (v01 ARMLTD ARM-JUNO 20140727 ARM 00000099)
ACPI: APIC 0x00000000F9B40000 00020C (v01 ARMLTD ARM-JUNO 20140727 ARM 00000099)
On node 0 totalpages: 519952
 DMA zone: 7112 pages used for memmap
 DMA zone: 0 pages reserved
 DMA zone: 519952 pages, LIFO batch:31
ACPI: GICC (acpi_id[0x0002] address[000000002c02f000] MPDIR[0x100] enabled)
ACPI: GICC (acpi_id[0x0003] address[000000002c02f000] MPDIR[0x101] enabled)
ACPI: GICC (acpi_id[0x0004] address[000000002c02f000] MPDIR[0x102] enabled)
ACPI: GICC (acpi_id[0x0005] address[000000002c02f000] MPDIR[0x103] enabled)
ACPI: GICC (acpi_id[0x0000] address[000000002c02f000] MPDIR[0x0] enabled)
ACPI: GICC (acpi_id[0x0001] address[000000002c02f000] MPDIR[0x1] enabled)
ACPI: 6 CPUs enabled, 6 CPUs total
psci: probing for conduit method from ACPI.
psci: Using standard PSCI v0.2 function IDs
PERCPU: Embedded 11 pages/cpu @ffffffc07ea28000 s13760 r8192 d23104 u45056
pcpu-alloc: s13760 r8192 d23104 u45056 alloc=11*4096
pcpu-alloc: [0] 0 [0] 1 
Built 1 zonelists in Zone order, mobility grouping on. Total pages: 512840
Kernel command line: console=ttySBSA0 earlycon=pl011,0x7ff80000 root=/dev/nfs nfsroot=192.168.0.10:/srv/nfs/juno ip=dhcp
PID hash table entries: 4096 (order: 3, 32768 bytes)
Dentry cache hash table entries: 262144 (order: 9, 2097152 bytes)
Inode-cache hash table entries: 131072 (order: 8, 1048576 bytes)
Memory: 2015420K/2079808K available (4039K kernel code, 256K rwdata, 1484K rodata, 221K init, 185K bss, 64388K reserved)
Virtual kernel memory layout:
 vmalloc : 0xffffff8000000000 - 0xffffffbdffff0000 ( 247 GB)
 vmemmap : 0xffffffbe00000000 - 0xffffffbfc0000000 ( 7 GB maximum)
 0xffffffbe01c00000 - 0xffffffbe037c8000 ( 27 MB actual)
 PCI I/O : 0xffffffbffa000000 - 0xffffffbffb000000 ( 16 MB)
 fixed : 0xffffffbffbdfe000 - 0xffffffbffbdff000 ( 4 KB)
 modules : 0xffffffbffc000000 - 0xffffffc000000000 ( 64 MB)
 memory : 0xffffffc000000000 - 0xffffffc07f000000 ( 2032 MB)
 .init : 0xffffffc0005e6000 - 0xffffffc00061d5c0 ( 222 KB)
 .text : 0xffffffc000080000 - 0xffffffc0005e5dd4 ( 5528 KB)
 .data : 0xffffffc00061e000 - 0xffffffc00065e1e0 ( 257 KB)
SLUB: HWalign=64, Order=0-3, MinObjects=0, CPUs=2, Nodes=1
Preemptible hierarchical RCU implementation.
 RCU restricting CPUs from NR_CPUS=8 to nr_cpu_ids=2.
RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=2
NR_IRQS:64 nr_irqs:64 0
clocksource_of_init: no matching clocksources found
Architected cp15 timer(s) running at 50.00MHz (phys).
sched_clock: 56 bits at 50MHz, resolution 20ns, wraps every 2748779069440ns
Console: colour dummy device 80x25
Calibrating delay loop (skipped), value calculated using timer frequency.. 100.00 BogoMIPS (lpj=500000)
pid_max: default: 32768 minimum: 301
ACPI: Core revision 20140724
ACPI: All ACPI Tables successfully acquired
Mount-cache hash table entries: 4096 (order: 3, 32768 bytes)
Mountpoint-cache hash table entries: 4096 (order: 3, 32768 bytes)
No CPU information found in DT
hw perfevents: enabled with arm/armv8-pmuv3 PMU driver, 7 counters available
Remapping and enabling EFI services.
Freed 0x18cb000 bytes of EFI boot services memory
CPU1: Booted secondary processor
Detected PIPT I-cache on CPU1
Brought up 2 CPUs
SMP: Total of 2 processors activated.
devtmpfs: initialized
atomic64_test: passed
regulator-dummy: no parameters
NET: Registered protocol family 16
cpuidle: using governor ladder
cpuidle: using governor menu
vdso: 2 pages (1 code @ ffffffc000625000, 1 data @ ffffffc000624000)
hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
software IO TLB [mem 0xfe400000-0xfe800000] (4MB) mapped at [ffffffc07e400000-ffffffc07e7fffff]
Serial: AMBA PL011 UART driver
ACPI: Added _OSI(Module Device)
ACPI: Added _OSI(Processor Device)
ACPI: Added _OSI(3.0 _SCP Extensions)
ACPI: Added _OSI(Processor Aggregator Device)
ACPI: Interpreter enabled
ACPI Exception: AE_NOT_FOUND, While evaluating Sleep State [\_S1_] (20140724/hwxface-580)
ACPI Exception: AE_NOT_FOUND, While evaluating Sleep State [\_S2_] (20140724/hwxface-580)
ACPI Exception: AE_NOT_FOUND, While evaluating Sleep State [\_S3_] (20140724/hwxface-580)
ACPI Exception: AE_NOT_FOUND, While evaluating Sleep State [\_S5_] (20140724/hwxface-580)
ACPI: (supports S0)
ACPI: Using GIC for interrupt routing
SCSI subsystem initialized
Switched to clocksource arch_sys_counter
pnp: PnP ACPI init
pnp: PnP ACPI: found 0 devices
NET: Registered protocol family 2
TCP established hash table entries: 16384 (order: 5, 131072 bytes)
TCP bind hash table entries: 16384 (order: 6, 262144 bytes)
TCP: Hash tables configured (established 16384 bind 16384)
TCP: reno registered
UDP hash table entries: 1024 (order: 3, 32768 bytes)
UDP-Lite hash table entries: 1024 (order: 3, 32768 bytes)
NET: Registered protocol family 1
RPC: Registered named UNIX socket transport module.
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
RPC: Registered tcp NFSv4.1 backchannel transport module.
futex hash table entries: 512 (order: 3, 32768 bytes)
fuse init (API version 7.23)
msgmni has been set to 3985
io scheduler noop registered
io scheduler cfq registered (default)
Serial: 8250/16550 driver, 4 ports, IRQ sharing disabled
console [ttySBSA0] enabled
bootconsole [uart0] disabled
ARMH9118:00 supply vdd33a not found, using dummy regulator
ARMH9118:00 supply vddvario not found, using dummy regulator
libphy: smsc911x-mdio: probed
smsc911x ARMH9118:00 eth0: attached PHY driver [Generic PHY] (mii_bus:phy_addr=ARMH9118:00-ffff:01, irq=-1)
smsc911x ARMH9118:00 eth0: MAC Address: 00:02:f7:00:58:7b
mousedev: PS/2 mouse device common for all mice
TCP: cubic registered
NET: Registered protocol family 17
drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
smsc911x ARMH9118:00 eth0: SMSC911x/921x identified at 0xffffff8000008000, IRQ: 192
Sending DHCP requests ., OK
IP-Config: Got DHCP answer from 192.168.0.254, my address is 192.168.0.115
IP-Config: Complete:
 device=eth0, hwaddr=00:02:f7:00:58:7b, ipaddr=192.168.0.115, mask=255.255.255.0, gw=192.168.0.254
 host=192.168.0.115, domain=xora.org.uk, nis-domain=(none)
 bootserver=0.0.0.0, rootserver=192.168.0.10, rootpath=
 nameserver0=8.8.8.8, nameserver1=8.8.4.4
VFS: Mounted root (nfs filesystem) readonly on device 0:13.
Freeing unused kernel memory: 220K (ffffffc0005e6000 - ffffffc00061d000)