Zynq UltraScale+ MPSoC Power Management


This page describes how to build and run PMU Firmware on QEMU.

Software Tools and System Requirements

  • Xilinx Vivado 2016.3
  • Xilinx Petalinux 2016.3

Building PMU Firmware

1) Create a HW design in Vivado and export it to SDK
2) Open Xilinx SDK
3) Create a new workspace
4) Select *File->New->Application Project*
5) Select *psu_microblaze_0* from Processors List
6) Click *Next*
7) Select *ZynqMP PMU Firmware* App and click *Finish*
Now you should have a PMUFW_ELF generated.

Creating a SelfSuspend App for A53/R5

1. Open SDK and create a BSP for A53/R5 (File->New->Board Support Package)
2. From the BSP settings dialogue, select xilpm library
3. Click Finish and let the library build complete
4. Now Open the mss file and scroll down to library section
5. Select "Import Examples" link beside xilpm
6. Select xilpm_selfsuspend_example from the list and click OK to Import
7. You should have an test App elf built under the Debug section.

Running on QEMU

PMU Firmware can be executed in a QEMU MultiArch environment with two separate QEMU Instances (machines).
Following are the instructions to run PMU Firmware on QEMU.
1. Source settings.sh from the Petalinux installation
$source settings.sh
INFO: Checking free disk space
INFO: Checking installed tools
INFO: Checking installed development libraries
INFO: Checking network and other services
WARNING: No tftp server found - please refer to "PetaLinux SDK Installation Guide" for its impact and solution
2. Create a Petalinux ZynqMP QEMU Project
$ petalinux-create -t project -s Xilinx-ZynqMP-QEMU-2016.3.bsp
INFO: Create project:
INFO: Projects:
INFO: * Xilinx-ZynqMP-QEMU-2016.3
INFO: has been successfully installed to <current directory>
INFO: New project successfully created in <current directory>
3. Check for the DTBs/ROM:
ARM_DTB: pre-built/linux/images/zynqmp-qemu-arm.dtb
PMU_DTB: pre-built/linux/images/zynqmp-qemu-pmu.dtb
PMU_ROM_ELF: pre-built/linux/images/pmu_rom_sha3.elf
These DTBs/ELFs will be used in the rest of the steps.

4. Create a qemu-tmp directory; This is used by the QEMU machines
$ mkdir qemu-tmp

5. Open two terminals, One for ARM_QEMU machine and the other for PMU_QEMU Machine

6. On PMU_QEMU, execute the following command to start PMU machine:
$qemu-system-microblazeel -M microblaze-fdt -hw-dtb <path_to_pmu_dtb> -kernel <path_to_pmu_rom_elf> -nographic -machine-path qemu-tmp
----
Xilinx QEMU Aug 20 2015 11:55:43.
----
qemu-system-microblazeel: Failed to connect socket: No such file or directory
QEMU waiting for connection on: disconnected:unix:./qemu-tmp/qemu-rport-_pmu@0,server
Warning: path not on HugeTLBFS: ././qemu-tmp
Warning: path not on HugeTLBFS: ././qemu-tmp
Warning: path not on HugeTLBFS: ././qemu-tmp
Warning: path not on HugeTLBFS: ././qemu-tmp
Warning: path not on HugeTLBFS: ././qemu-tmp
Warning: path not on HugeTLBFS: ././qemu-tmp
Warning: path not on HugeTLBFS: ././qemu-tmp
Warning: path not on HugeTLBFS: ././qemu-tmp
Warning: path not on HugeTLBFS: ././qemu-tmp
Warning: path not on HugeTLBFS: ././qemu-tmp
Warning: path not on HugeTLBFS: ././qemu-tmp
QEMU 2.2.50 monitor - type 'help' for more information
(qemu) QEMU 2.2.50 monitor - type 'help' for more information
(qemu)
7.On ARM_QEMU , execute the following command to start ARM machine:
$qemu-system-aarch64 -M arm-generic-fdt -hw-dtb <path_to_ARM_DTB> -gdb tcp::6667 -nographic -machine-path qemu-tmp -tftp <path_to_PETALINUX_IMAGES>
----
Xilinx QEMU Aug 20 2015 11:55:43.
----
Warning: path not on HugeTLBFS: qemu-tmp/qemu-memory-_memory@00000000
Warning: path not on HugeTLBFS: qemu-tmp/qemu-memory-_pmu_ram@ffdc0000
Warning: path not on HugeTLBFS: qemu-tmp/qemu-memory-_ipibuf@ff990000
Warning: path not on HugeTLBFS: qemu-tmp/qemu-memory-_memory0@0xFFFC0000
Warning: path not on HugeTLBFS: qemu-tmp/qemu-memory-_memory1@0xFFFD0000
Warning: path not on HugeTLBFS: qemu-tmp/qemu-memory-_memory2@0xFFFE0000
Warning: path not on HugeTLBFS: qemu-tmp/qemu-memory-_memory3@0xFFFF0000
Warning: path not on HugeTLBFS: qemu-tmp/qemu-memory-_memory0@0x00000
Warning: path not on HugeTLBFS: qemu-tmp/qemu-memory-_memory0@0x20000
Warning: path not on HugeTLBFS: qemu-tmp/qemu-memory-_memory1@0x00000
Warning: path not on HugeTLBFS: qemu-tmp/qemu-memory-_memory1@0x20000
8. Load PMU Firmware on PMU_QEMU:
$device_add loader,file=<path_to_pmufw_elf>,cpu=0
After executing this command, you should see a PMU-FW banner message on STDOUT:
PMU Firmware rc1-00006-gdc6ab46
EM (MOD-0): Initialized.
PMU-PM: Power Management Init
9. Start xsdb and connect ZynqMP:
$gdbremote connect localhost:6667
attempting to launch tcfgdbclient
xsdb% Info: Cortex-A53 #0 (target 3) Stopped at 0x0 (Suspended)
xsdb% Info: Cortex-A53 #1 (target 4) Stopped at 0x0 (Suspended)
xsdb% Info: Cortex-A53 #2 (target 5) Stopped at 0x0 (Suspended)
xsdb% Info: Cortex-A53 #3 (target 6) Stopped at 0x0 (Suspended)
xsdb% Info: Cortex-R5 #0 (target 8) Stopped at 0x0 (Suspended)
xsdb% Info: Cortex-R5 #1 (target 9) Stopped at 0x0 (Suspended)
Follow one of 10a or 10b to run the example application on the A53 or R5 core.
10a. Load and run the test app on A53 using xsdb:
$targets -set -filter {name =~ "Cortex-A53 #0"}
$dow <path_to_standalone_selfsuspend_app_a53_elf
Downloading Program -- /home/pmu_bsp_xilpm_selfsuspend_example_1.elf
    section, .text: 0x00000000 - 0x0000447b
    section, .init: 0x00004480 - 0x000044b3
    section, .fini: 0x000044c0 - 0x000044f3
    section, .note.gnu.build-id: 0x000044f4 - 0x00004517
    section, .rodata: 0x00004518 - 0x00004b1f
    section, .rodata1: 0x00004b20 - 0x00004b3f
    section, .data: 0x00004b40 - 0x00006107
    section, .data1: 0x00006108 - 0x0000613f
    section, .eh_frame: 0x00006140 - 0x00006143
    section, .mmu_tbl0: 0x00007000 - 0x0000700f
    section, .mmu_tbl1: 0x00008000 - 0x00009fff
    section, .mmu_tbl2: 0x0000a000 - 0x0000dfff
    section, .init_array: 0x0000e000 - 0x0000e007
    section, .fini_array: 0x0000e008 - 0x0000e047
    section, .sdata: 0x0000e048 - 0x0000e07f
    section, .bss: 0x0000e080 - 0x0000e0ff
    section, .heap: 0x0000e100 - 0x000100ff
    section, .stack: 0x00010100 - 0x000130ff
100%    0MB   1.3MB/s  00:00
Setting PC to Program Start Address 0x00000000
Successfully downloaded /home/pmu_bsp_xilpm_selfsuspend_example_1.elf
$mask_write 0xfd1a0104 0x3d01 0
$con
Info: Cortex-A53 #0 (target 3) Running
Info: Cortex-A53 #1 (target 4) Running
Info: Cortex-A53 #2 (target 5) Running
Info: Cortex-A53 #3 (target 6) Running
Info: Cortex-R5 #0 (target 8) Running
Info: Cortex-R5 #1 (target 9) Running

10b.Load and run the test app on R5 using xsdb:
$targets -set -filter {name =~ "Cortex-R5 #0"}
$dow <path_to_standalone_selfsuspend_app_a53_elf>
mask_write 0xff5e023c [expr ~2] 0
con

11. You should now see the Test App output STDOUT.
APU: Main
APU: INITIAL BOOT
APU: OK, configured timer
APU: Waiting for ticks...
APU: Timer0 interrupt handler, tick_count = 1
APU: Timer0 interrupt handler, tick_count = 2
APU: Timer0 interrupt handler, tick_count = 3
APU: Saved context (tick_count = 3)
APU: XPm_SelfSuspend(2, -1, 0, 0)
Received IPI Mask:0x00000001
PMUFW: PmSelfSuspend: (NODE_APU_0, -1, 0)
PMUFW: PmProcTrActiveToSuspend: ACTIVE->SUSPENDING NODE_APU_0
APU: XPm_SetRequirement(11, 2, 0, 1)
Received IPI Mask:0x00000001
PMUFW: PmSetRequirement: (NODE_OCM_BANK_0, 2, 0, REQAUPEUS:T _XAPCmK__SNeOt)R
equirement(12, 2, 0, 1)
Received IPI Mask:0x00000001
PMUFW: PmSetRequirement: (NODE_OCM_BANK_1, 2, 0, REQUEST_ACK_NO)
APU: XPm_SetRequirement(13, 2, 0, 1)
Received IPI Mask:0x00000001
PMUFW: PmSetRequirement: (NODE_OCM_BANK_2, 2, 0, REQUEST_AAPCUK:_ NXOP)m
_SetRequirement(14, 2, 0, 1)
Received IPI Mask:0x00000001
PMUFW: PmSetRequirement: (NODE_OCM_BANK_3, 2, 0, REQUEST_ACK_NO)
APU: Going to WFI...
PMUFW: PmProcTrSuspendToSleep: SUSPENDING->SLEEP NODE_APU_0
PMUFW: PmRequirementUpdateScheduled: NODE_APU_0
PMUFW: PmSlaveChangeState: NODE_OCM_BANK_0 2->1
PMUFW: PmSlaveChangeState: NODE_OCM_BANK_1 2->1
PMUFW: PmSlaveChangeState: NODE_OCM_BANK_2 2->1
PMUFW: PmOpportunisticSuspend: Opportunistic suspend attempt for NODE_APU
PMUFW: PmPwrDnHandler: NODE_APU
PMUFW: PmOpportunisticSuspend: Opportunistic suspend attempt for NODE_FPD
PMUFW: PmHasAwakeChild: NODE_L2
PMUFW: PmWakeUpDisableAll: for NODE_APU_0
PMUFW: PmRequirementUpdateScheduled: NODE_APU_0
PMUFW: PmSlaveChangeState: NODE_OCM_BANK_0 1->2
PMUFW: PmSlaveChangeState: NODE_OCM_BANK_1 1->2
PMUFW: PmSlaveChangeState: NODE_OCM_BANK_2 1->2
PMUFW: PmProcTrSleepToActive: SLEEP->ACTIVE NODE_APU_0
PMUFW: PmPwrUpHandler: NODE_APU
APU: Main
APU: RESUMED
.
.
.
.
APU: Restored context (tick_count = 263)
APU: Timer0 interrupt handler, tick_count = 264
APU: Waiting for ticks...
APU: Timer0 interrupt handler, tick_count = 265
APU: Timer0 interrupt handler, tick_count = 266
APU: Timer0 interrupt handler, tick_count = 267
APU: Saved context (tick_count = 267)
APU: XPm_SelfSuspend(2, -1, 0, 0)
Received IPI Mask:0x00000001
PMUFW: PmSelfSuspend: (NODE_APU_0, -1, 0)
PMUFW: PmProcTrActiveToSuspend: ACTIVE->SUSPENDING NODE_APU_0
APU: XPm_SetRequirement(11, 2, 0, 1)
Received IPI Mask:0x00000001
PMUFW: PmSetRequirement: (NODE_OCM_BANK_0, 2, 0, REQUEST_ACK_NO)
APU: XPm_SetRequirement(12, 2, 0, 1)
Received IPI Mask:0x00000001
PMUFW: PmSetRequirement: (NODE_OCM_BANK_1, 2, 0, REQUEST_ACK_NO)
APU: XPm_SetRequirement(13, 2, 0, 1)
Received IPI Mask:0x00000001
PMUFW: PmSetRequirement: (NODE_OCM_BANK_2, 2, 0, REQUEST_ACK_NO)
APU: XPm_SetRequirement(14, 2, 0, 1)
Received IPI Mask:0x00000001
PMUFW: PmSetRequirement: (NODE_OCM_BANK_3, 2, 0, REQUEST_ACKA_PNUO:)

CPU hotplug:


Follow Steps 1 to 9 from above instructions for loading the PMU Firmware on PMU_QEMU.
Instructions to load and run petalinux on ARM_QEMU using xsdb:

1. Execute the following to load U-Boot, ATF (bl31.elf), Linux (Image) and device tree (system.dtb):
$targets -set -filter {name =~ "Cortex-A53 #0"}
$dow <path_to_U-BOOT_ELF>
Downloading Program -- /home/u-boot.elf
    section, .data: 0x08000000 - 0x08080b37
100%    0MB   8.7MB/s  00:00
Setting PC to Program Start Address 0x08000000
Successfully downloaded /home/u-boot.elf
dow <path_to_ATF_ELF>
Downloading Program -- /home/bl31.elf
    section, ro: 0xfffe4000 - 0xfffe9fff
    section, .data: 0xfffea000 - 0xfffea017
    section, stacks: 0xfffea040 - 0xfffeb03f
    section, .bss: 0xfffeb040 - 0xfffec237
    section, xlat_table: 0xfffed000 - 0xffff2fff
    section, coherent_ram: 0xffff3000 - 0xffff3fff
100%    0MB  13.0MB/s  00:00
Setting PC to Program Start Address 0xfffe4000
Successfully downloaded /home/bl31.elf
mask_write 0xfd1a0104 0x3d01 0 # release APU reset
con
Info: Cortex-A53 #0 (target 3) Running
Info: Cortex-A53 #1 (target 4) Running
Info: Cortex-A53 #2 (target 5) Running
Info: Cortex-A53 #3 (target 6) Running
Info: Cortex-R5 #0 (target 8) Running
Info: Cortex-R5 #1 (target 9) Running

After executing these, you should see a ATF banner message on ARM_QEMU and u-boot process. Let the timeout
expire and U-Boot will load Image and device tree via tftp and boot Linux as shown below.
NOTICE:  ATF running on QEMU/RTL4.0
NOTICE:  BL3-1: Secure code at 0xfffc0000
NOTICE:  BL3-1: Non secure code at 0x8000000
NOTICE:  BL3-1: v1.1(release):
NOTICE:  BL3-1: Built : 13:22:44, Aug 20 2015
 
U-Boot 2015.07 (Aug 20 2015 - 13:25:29 +0530) Xilinx ZynqMP, Build: jenkins-Petalinux_2015.3_build_new-Petalinux_Build_reference_Design_bsp_2015.3_64bit-39
 
I2C:   ready
DRAM:  1 GiB
Enabling Caches...
EL Level:    EL2
NAND:  4096 MiB
MMC:   zynq_sdhci: 0
Using default environment
 
In:    serial
Out:   serial
Err:   serial
SCSI:  SATA link 0 timeout.
AHCI 0001.0000 32 slots 2 ports 1.5 Gbps 0x3 impl SATA mode
flags: ncq only
scanning bus for devices...
Found 0 device(s).
Net:   Gem.ff0b0000
Hit any key to stop autoboot:  0
Using Gem.ff0b0000 device
TFTP from server 10.0.2.2; our IP address is 10.0.2.15
Filename 'Image'.
Load address: 0x80000
Loading: #################################################################
     ####################
     2.1 MiB/s
done
Bytes transferred = 24061440 (16f2600 hex)
Gem.ff0b0000:7 is connected to Gem.ff0b0000.  Reconnecting to Gem.ff0b0000
Using Gem.ff0b0000 device
TFTP from server 10.0.2.2; our IP address is 10.0.2.15
Filename 'system.dtb'.
Load address: 0x7000000
Loading: ####
     32.2 KiB/s
done
Bytes transferred = 20027 (4e3b hex)
## Flattened Device Tree blob at 07000000
   Booting using the fdt blob at 0x7000000
   reserving fdt memory region: addr=3f000000 size=1000000
   Loading Device Tree to 000000000fff8000, end 000000000ffffe3a ... OK
 
Starting kernel ...
 
[    0.000000] Booting Linux on physical CPU 0x0
[    0.000000] Linux version 4.0.0 (xbrbbot@xhdl3853) (gcc version 4.8.2 20131014 (prerelease) (crosstool-NG linaro-1.13.1-4.8-2013.10 - Linaro GCC 2013.10) ) #2 SMP Thu Aug 20 13:28:31 IST 2015
[    0.000000] CPU: AArch64 Processor [410fd032] revision 2
[    0.000000] Detected VIPT I-cache on CPU0
[    0.000000] alternatives: enabling workaround for ARM errata 826319, 827319, 824069
[    0.000000] alternatives: enabling workaround for ARM erratum 845719
[    0.000000] Early serial console at MMIO 0xff000000 (options '115200n8')
[    0.000000] bootconsole [uart0] enabled
[    0.000000] efi: Getting EFI parameters from FDT:
[    0.000000] efi: UEFI not found.
[    0.000000] psci: probing for conduit method from DT.
[    0.000000] psci: Using PSCI v0.1 Function IDs from DT
[    0.000000] PERCPU: Embedded 15 pages/cpu @ffffffc03efa4000 s24448 r8192 d28800 u61440
[    0.000000] Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 258560
[    0.000000] Kernel command line: console=ttyPS0,115200 earlycon=cdns,mmio,0xff000000,115200n8
[    0.000000] PID hash table entries: 4096 (order: 3, 32768 bytes)
[    0.000000] Dentry cache hash table entries: 131072 (order: 8, 1048576 bytes)
[    0.000000] Inode-cache hash table entries: 65536 (order: 7, 524288 bytes)
[    0.000000] software IO TLB [mem 0x39e00000-0x3de00000] (64MB) mapped at [ffffffc039e00000-ffffffc03ddfffff]
[    0.000000] Memory: 925952K/1048576K available (6516K kernel code, 521K rwdata, 2492K rodata, 13944K init, 484K bss, 122624K reserved, 0K cma-reserved)
[    0.000000] Virtual kernel memory layout:
[    0.000000]     vmalloc : 0xffffff8000000000 - 0xffffffbdffff0000   (   247 GB)
[    0.000000]     vmemmap : 0xffffffbe00000000 - 0xffffffbfc0000000   (     7 GB maximum)
[    0.000000]               0xffffffbe00000000 - 0xffffffbe00e00000   (    14 MB actual)
[    0.000000]     fixed   : 0xffffffbffabfe000 - 0xffffffbffac00000   (     8 KB)
[    0.000000]     PCI I/O : 0xffffffbffae00000 - 0xffffffbffbe00000   (    16 MB)
[    0.000000]     modules : 0xffffffbffc000000 - 0xffffffc000000000   (    64 MB)
[    0.000000]     memory  : 0xffffffc000000000 - 0xffffffc040000000   (  1024 MB)
[    0.000000]       .init : 0xffffffc00094f000 - 0xffffffc0016ed000   ( 13944 KB)
[    0.000000]       .text : 0xffffffc000080000 - 0xffffffc00094e0c4   (  9017 KB)
[    0.000000]       .data : 0xffffffc0016f0000 - 0xffffffc001772600   (   522 KB)
[    0.000000] Hierarchical RCU implementation.
[    0.000000]     RCU restricting CPUs from NR_CPUS=8 to nr_cpu_ids=4.
[    0.000000] RCU: Adjusting geometry for rcu_fanout_leaf=16, nr_cpu_ids=4
[    0.000000] NR_IRQS:64 nr_irqs:64 0
[    0.000000] Architected cp15 timer(s) running at 50.00MHz (phys).
[    0.000314] sched_clock: 56 bits at 50MHz, resolution 20ns, wraps every 2748779069440ns
[    0.620014] Calibrating delay loop (skipped), value calculated using timer frequency.. 100.00 BogoMIPS (lpj=500000)
[    0.679623] pid_max: default: 32768 minimum: 301
[    1.206299] Security Framework initialized
[    1.341221] AppArmor: AppArmor initialized
[    1.389545] Mount-cache hash table entries: 2048 (order: 2, 16384 bytes)
[    1.390495] Mountpoint-cache hash table entries: 2048 (order: 2, 16384 bytes)
[    3.789850] hw perfevents: no hardware support available
[    3.790580] EFI services will not be available.
[   10.512631] CPU1: failed to come online
Received IPI Mask:0x00000001
PMUFW: PmRequestWakeup: (NODE_APU_1, REQUEST_ACK_NO)
PMUFW: PmProcTrSleepToActive: SLEEP->ACTIVE NODE_APU_1
Received IPI Mask:0x00000001
PMUFW: PmRequestWakeup: (NODE_APU_2, REQUEST_ACK_NO)
PMUFW: PmProcTrSleepToActive: SLEEP->ACTIVE NODE_APU_2
[   16.050961] ---[ end Kernel panic - not syncing: Attempted to kill the idle task!
[   16.053398] Unable to handle kernel paging request at virtual address ffffffffffffffd0
[   16.053453] pgd = ffffffc0017ee000
[   16.053563] [ffffffffffffffd0] *pgd=0000000000000000, *pud=0000000000000000
[   16.053623] Internal error: Oops: 97820005 [#2] SMP
[   16.053658] Modules linked in:
[   16.053790] CPU: 2 PID: 0 Comm: swapper/2 Tainted: G      D         4.0.0 #2
[   16.053809] Hardware name: ZynqMP EP108 (DT)
[   16.053839] task: ffffffc039926cc0 ti: ffffffc039928000 task.ti: ffffffc039928000
[   16.111910] swapper/2[0]: undefined instruction: pc=ffffffc03992bb70
[   16.112010] Code: 00887070 ffffffc0 3992bcb0 ffffffc0 (ffffffd0)
[   16.112381] swapper/2[0]: undefined instruction: pc=ffffffc001701878
[   16.112428] Code: 00000000 00000000 00000000 00000000 (01701878)
[   17.108584] CPU2: failed to come online
Received IPI Mask:0x00000001
PMUFW: PmRequestWakeup: (NODE_APU_3, REQUEST_ACK_NO)
PMUFW: PmProcTrSleepToActive: SLEEP->ACTIVE NODE_APU_3
[   17.755877] CPU3: Booted secondary processor
[   17.756990] Detected VIPT I-cache on CPU3
[   18.738945] CPU3: failed to come online
[   18.743938] Brought up 1 CPUs
[   18.744277] SMP: Total of 1 processors activated.
[   18.798529] alternatives: patching kernel code
[   19.521503] devtmpfs: initialized
[   21.007121] DMI not present or invalid.
[   21.615927] xor: measuring software checksum speed
[   21.716482]    8regs     :  1106.800 MB/sec
[   21.818155]    8regs_prefetch:  1073.600 MB/sec
[   21.919814]    32regs    :  1020.400 MB/sec
[   22.021615]    32regs_prefetch:   902.000 MB/sec
[   22.022137] xor: using function: 8regs (1106.800 MB/sec)
[   22.216142] NET: Registered protocol family 16
[   22.471694] cpuidle: using governor ladder
[   22.472302] cpuidle: using governor menu
[   22.473089] vdso: 2 pages (1 code @ ffffffc0016f5000, 1 data @ ffffffc0016f4000)
[   22.474195] hw-breakpoint: found 6 breakpoint and 4 watchpoint registers.
[   22.477467] DMA: preallocated 256 KiB pool for atomic allocations
[   24.824334] raid6: int64x1    438 MB/s
[   24.997341] raid6: int64x2    172 MB/s
[   25.170003] raid6: int64x4    790 MB/s
[   25.343787] raid6: int64x8    346 MB/s
[   25.686015] raid6: neonx1     120 MB/s
[   25.859937] raid6: neonx2     151 MB/s
[   26.033488] raid6: neonx4     155 MB/s
[   26.206273] raid6: neonx8     105 MB/s
[   26.206688] raid6: using algorithm int64x4 (790 MB/s)
[   26.207231] raid6: using intx1 recovery algorithm
[   26.211865] SCSI subsystem initialized
[   26.269548] libata version 3.00 loaded.
[   26.391634] usbcore: registered new interface driver usbfs
[   26.393819] usbcore: registered new interface driver hub
[   26.394807] usbcore: registered new device driver usb
[   26.433911] NetLabel: Initializing
[   26.434553] NetLabel:  domain hash size = 128
[   26.434943] NetLabel:  protocols = UNLABELED CIPSOv4
[   26.437219] NetLabel:  unlabeled traffic allowed by default
[   26.446868] Switched to clocksource arch_sys_counter
[   27.054434] AppArmor: AppArmor Filesystem Enabled
[   27.159903] NET: Registered protocol family 2
[   27.385424] TCP established hash table entries: 8192 (order: 4, 65536 bytes)
[   27.386545] TCP bind hash table entries: 8192 (order: 5, 131072 bytes)
[   27.387774] TCP: Hash tables configured (established 8192 bind 8192)
[   27.447826] TCP: reno registered
[   27.448488] UDP hash table entries: 512 (order: 2, 16384 bytes)
[   27.449603] UDP-Lite hash table entries: 512 (order: 2, 16384 bytes)
[   27.626109] NET: Registered protocol family 1
[   27.820610] RPC: Registered named UNIX socket transport module.
[   27.821226] RPC: Registered udp transport module.
[   27.821665] RPC: Registered tcp transport module.
[   27.822088] RPC: Registered tcp NFSv4.1 backchannel transport module.
[   49.469860] kvm [1]: Using HYP init bounce page @39098000
[   50.072852] kvm [1]: interrupt-controller@f9040000 IRQ5
[   51.163537] kvm [1]: timer IRQ3
[   51.164079] kvm [1]: Hyp mode initialized successfully
[   52.420560] futex hash table entries: 1024 (order: 4, 65536 bytes)
[   52.462744] audit: initializing netlink subsys (disabled)
[   52.573266] audit: type=2000 audit(32.590:1): initialized
[   52.792874] HugeTLB registered 2 MB page size, pre-allocated 0 pages
[   52.882059] VFS: Disk quotas dquot_6.5.2
[   52.953724] VFS: Dquot-cache hash table entries: 512 (order 0, 4096 bytes)
[   53.327310] NFS: Registering the id_resolver key type
[   53.329116] Key type id_resolver registered
[   53.329540] Key type id_legacy registered
[   53.391085] jffs2: version 2.2. (NAND) (SUMMARY)  © 2001-2006 Red Hat, Inc.
[   53.718350] Block layer SCSI generic (bsg) driver version 0.4 loaded (major 254)
[   53.767404] io scheduler noop registered
[   53.767858] io scheduler deadline registered
[   53.768625] io scheduler cfq registered (default)
[   54.492145] xilinx-zynqmp-dma fd500000.dma: ZynqMP DMA driver Probe success
[   54.551784] xilinx-zynqmp-dma fd510000.dma: ZynqMP DMA driver Probe success
[   54.740110] xilinx-zynqmp-dma fd520000.dma: ZynqMP DMA driver Probe success
[   54.910164] xilinx-zynqmp-dma fd530000.dma: ZynqMP DMA driver Probe success
[   55.141847] xilinx-zynqmp-dma fd540000.dma: ZynqMP DMA driver Probe success
[   55.206339] xilinx-zynqmp-dma fd550000.dma: ZynqMP DMA driver Probe success
[   55.414598] xilinx-zynqmp-dma fd560000.dma: ZynqMP DMA driver Probe success
[   55.461215] xilinx-zynqmp-dma fd570000.dma: ZynqMP DMA driver Probe success
[   55.462099] xenfs: not registering filesystem on non-xen platform
[   64.227708] ff000000.serial: ttyPS0 at MMIO 0xff000000 (irq = 203, base_baud = 1562500) is a xuartps
[   64.230783] console [ttyPS0] enabled
[   64.230783] console [ttyPS0] enabled
[   64.231590] bootconsole [uart0] disabled
[   64.231590] bootconsole [uart0] disabled
[   65.453030] brd: module loaded
[   65.557028] loop: module loaded
[   66.211249] ahci-ceva fd0c0000.ahci: AHCI 0001.0000 32 slots 2 ports 1.5 Gbps 0x3 impl platform mode
[   66.212501] ahci-ceva fd0c0000.ahci: flags: ncq only
[   66.625314] scsi host0: ahci-ceva
[   66.630323] scsi host1: ahci-ceva
[   66.632362] ata1: SATA max UDMA/133 mmio [mem 0xfd0c0000-0xfd0c1fff] port 0x100 irq 196
[   66.633114] ata2: SATA max UDMA/133 mmio [mem 0xfd0c0000-0xfd0c1fff] port 0x180 irq 196
[   66.635828] mtdoops: mtd device (mtddev=name/number) must be supplied
[   67.193455] nand: device found, Manufacturer ID: 0x2c, Chip ID: 0x44
[   67.194088] nand: Micron MT29F32G08ABCDBJ4
[   67.194501] nand: 4096 MiB, SLC, erase size: 4096 KiB, page size: 16384, OOB size: 1216
[   67.650842] Bad block table not found for chip 0
[   67.663414] Bad block table not found for chip 0
[   67.664025] Scanning device for bad blocks
[  113.853494] Bad block table written to 0x0000ffc00000, version 0x01
[  114.080312] Bad block table written to 0x0000ff800000, version 0x01
[  115.219174] 5 ofpart partitions found on MTD device arasan_nfc
[  115.219488] Creating 5 MTD partitions on "arasan_nfc":
[  115.250993] 0x000000000000-0x000000400000 : "nand-fsbl-uboot"
[  117.329739] ata2: SATA link down (SStatus 0 SControl 300)
[  117.477603] ata1: SATA link down (SStatus 0 SControl 300)
[  119.949421] 0x000000400000-0x000001800000 : "nand-linux"
[  120.230621] 0x000001800000-0x000001c00000 : "nand-device-tree"
[  120.427208] 0x000001c00000-0x000003000000 : "nand-rootfs"
[  120.580845] 0x000003000000-0x000003400000 : "nand-bitstream"
[  134.944898] m25p80 spi32766.0: found sst25wf080, expected m25p80
[  134.946359] m25p80 spi32766.0: sst25wf080 (1024 Kbytes)
[  135.067396] 1 ofpart partitions found on MTD device spi32766.0
[  135.067940] Creating 1 MTD partitions on "spi32766.0":
[  135.068527] 0x000000000000-0x000000100000 : "spi0_flash0"
[  137.892311] m25p80 spi32765.0: found sst25wf080, expected m25p80
[  137.893095] m25p80 spi32765.0: sst25wf080 (1024 Kbytes)
[  137.893628] 1 ofpart partitions found on MTD device spi32765.0
[  137.894140] Creating 1 MTD partitions on "spi32765.0":
[  137.894632] 0x000000000000-0x000000100000 : "spi1_flash0"
[  139.310793] m25p80: probe of spi32764.0 failed with error -2
[  139.518156] libphy: Fixed MDIO Bus: probed
[  139.582308] CAN device driver interface
[  140.985296] libphy: MACB_mii_bus: probed
[  142.072700] macb ff0b0000.ethernet eth0: Cadence GEM rev 0x00020118 at 0xff0b0000 irq 193 (00:0a:35:00:02:01)
[  142.073672] macb ff0b0000.ethernet eth0: attached PHY driver [Marvell 88E1111] (mii_bus:phy_addr=ff0b0000.etherne:00, irq=-1)
[  142.223359] dwc3 fe200000.usb: this is not a DesignWare USB3 DRD Core
[  142.224011] dwc3 fe200000.usb: failed to initialize core
[  142.225233] dwc3 fe300000.usb: this is not a DesignWare USB3 DRD Core
[  142.225818] dwc3 fe300000.usb: failed to initialize core
[  142.295414] usbcore: registered new interface driver uas
[  142.296368] usbcore: registered new interface driver usb-storage
[  142.897864] mousedev: PS/2 mouse device common for all mice
[  142.965240] at24 0-0054: 8192 byte 24c64 EEPROM, writable, 1 bytes/write
[  142.966193] cdns-i2c ff020000.i2c: 400 kHz mmio ff020000 irq 15
[  142.968262] at24 1-0055: 8192 byte 24c64 EEPROM, writable, 1 bytes/write
[  142.969480] cdns-i2c ff030000.i2c: 400 kHz mmio ff030000 irq 16
[  142.974992] device-mapper: ioctl: 4.30.0-ioctl (2014-12-22) initialised: dm-devel@redhat.com
[  142.976019] Driver 'mmcblk' needs updating - please use bus_type methods
[  142.976877] sdhci: Secure Digital Host Controller Interface driver
[  142.977424] sdhci: Copyright(c) Pierre Ossman
[  142.977855] sdhci-pltfm: SDHCI platform and OF driver helper
[  143.243384] sdhci-arasan ff160000.sdhci: No vmmc regulator found
[  143.243761] sdhci-arasan ff160000.sdhci: No vqmmc regulator found
[  143.339339] mmc0: SDHCI controller on ff160000.sdhci [ff160000.sdhci] using ADMA
[  143.469164] sdhci-arasan ff170000.sdhci: No vmmc regulator found
[  143.469743] sdhci-arasan ff170000.sdhci: No vqmmc regulator found
[  143.519154] mmc1: SDHCI controller on ff170000.sdhci [ff170000.sdhci] using ADMA
[  143.521487] usbcore: registered new interface driver usbhid
[  143.522007] usbhid: USB HID core driver
[  143.660102] TCP: cubic registered
[  143.660504] Initializing XFRM netlink socket
[  143.729472] NET: Registered protocol family 10
[  143.955054] sit: IPv6 over IPv4 tunneling driver
[  143.960463] NET: Registered protocol family 17
[  143.961266] NET: Registered protocol family 15
[  143.961749] can: controller area network core (rev 20120528 abi 9)
[  143.962820] NET: Registered protocol family 29
[  143.963491] can: raw protocol (rev 20120528)
[  143.964025] can: broadcast manager protocol (rev 20120528 t)
[  143.964645] can: netlink gateway (rev 20130117) max_hops=1
[  144.010911] Key type dns_resolver registered
[  145.480170] Btrfs loaded
[  145.482397] AppArmor: AppArmor sha1 policy hashing enabled
[  157.206142] Freeing unused kernel memory: 13944K (ffffffc00094f000 - ffffffc0016ed000)
[  157.270586] Freeing alternatives memory: 8K (ffffffc0016ed000 - ffffffc0016ef000)
INIT: version 2.88 booting
Starting Bootlog daemon: bootlogd.
Creating /dev/flash/* device nodes
[  194.607432] random: dd urandom read with 57 bits of entropy available
starting Busybox inet Daemon: inetd... done.
update-rc.d: /etc/init.d/run-postinsts exists during rc.d purge (continuing)
 Removing any system startup links for run-postinsts ...
  /etc/rcS.d/S99run-postinsts
INIT: Entering runlevel: 5
Configuring network interfaces... [  203.942218] IPv6: ADDRCONF(NETDEV_UP): eth0: link is not ready
udhcpc (v1.22.1) started
[  205.115356] macb ff0b0000.ethernet eth0: link up (100/Full)
[  205.123087] IPv6: ADDRCONF(NETDEV_CHANGE): eth0: link becomes ready
Sending discover...
Sending discover...
Sending select for 10.0.2.15...
Lease of 10.0.2.15 obtained, lease time 86400
/etc/udhcpc.d/50default: Adding DNS 10.0.2.3
done.
Stopping Bootlog daemon: bootlogd.
Running dynamic getty on ttyPS0/115200
 
Built with PetaLinux v2015.3 (Yocto 1.8) Xilinx-ZynqMP-QEMU-2015_3 /dev/ttyPS0
Xilinx-ZynqMP-QEMU-2015_3 login: root
Password:
login[1328]: root login on 'ttyPS0'
root@Xilinx-ZynqMP-QEMU-2015_3:~#

2. Execute the following to power off a core (example: CPU 1):
$echo 0 > /sys/devices/system/cpu/cpu1/online
You should see output from PMU-FW and kernel similar to the following:
Received IPI Mask:0x00000001
PMU-PM: PmSelfSuspend(NODE_APU_1, -1, 0)
PMU-PM: ACTIVE->SUSPENDING NODE_APU_1
PMU-PM: SUSPENDING->SLEEP NODE_APU_1
[ 163.970515] kvm: disabling virtualization on CPU1
[ 163.998010] CPU1: shutdown

3. Execute the following to power on a core (example: CPU 1):
$echo 1 > /sys/devices/system/cpu/cpu1/online
You should see output from PMU-FW and kernel similar to the following:
Received IPI Mask:0x00000001
PMU-PM: PmRequestWakeup(NODE_APU_1, REQUEST_ACK_NO)
PMU-PM: SLEEP->ACTIVE NODE_APU_1
[ 320.238064] CPU1: Booted secondary processor
[ 320.242599] Detected VIPT I-cache on CPU1
[ 320.301651] kvm: enabling virtualization on CPU1

4. Execute the following to check currently powered on cores:
$cat /sys/devices/system/cpu/online

Related Links

MPSoC Software Development Flow