NOT A BUG Reviewed the code and found the problem.
asm volatile("mrc p15, 0, %[id], c0, c0, 0 @ read MIDR\n\t" ... I miscopied the code above; MIDR should have been MIPDR ( 5 ) I now get: Linux:armv7l: ~/Downloads/RaspiTest/BareBones >>> ./qemu.sh 0H312ello, kernel World! Sorry about the bogus report! -KenD ** Changed in: qemu Status: New => Invalid -- You received this bug notification because you are a member of qemu- devel-ml, which is subscribed to QEMU. https://bugs.launchpad.net/bugs/1733720 Title: raspi2 with multiple CPU's #1 Status in QEMU: Invalid Bug description: Greetings, I am running a small program for raspi2 (from http://wiki.osdev.org/ARM_RaspberryPi_Tutorial_C). This code writes "Hello World", but the output ir repeated 4 times. My thought was that this is emulating a 4 cpu core system. However, when I check the MPIDR registed for CPU number, it always returns 1. I git cloned github.com/qemu/qemu.git, made & installed on Acer ARM CB5-311 under Crouton/ubuntu. ./qemu.sh 1111 Linux:armv7l: ~/Downloads/RaspiTest/BareBones >>> uname -a Linux localhost 3.10.18 #1 SMP Mon Nov 13 16:34:10 PST 2017 armv7l armv7l armv7l GNU/Linux Linux:armv7l: ~/Downloads/RaspiTest/BareBones >>> qemu-system-arm --version QEMU emulator version 2.10.91 (v2.11.0-rc1-dirty) Copyright (c) 2003-2017 Fabrice Bellard and the QEMU Project developers ===== static inline uint32_t read_mpdir(void) { uint32_t id; asm volatile("mrc p15, 0, %[id], c0, c0, 0 @ read MIDR\n\t" : [id] "=r" (id)); return id; } ====== void kernel_main(uint32_t r0, uint32_t r1, uint32_t atags) { // Declare as unused (void) r0; (void) r1; (void) atags; uint32_t cpu_id; cpu_id = read_mpdir() & 0x03; uart_putc( "01234"[cpu_id] ); /* output is "1111" */ if (cpu_id == 0) { /* code never executes 8^( */ } ====== qemu.sh qemu-system-arm -m 256 -M raspi2 -no-reboot -serial stdio -kernel myos.elf Thanks much, -KenD To manage notifications about this bug go to: https://bugs.launchpad.net/qemu/+bug/1733720/+subscriptions