On 11/07/2016 12:22 PM, Romain Naour wrote:
Hi, Guenter,
Le 07/11/2016 à 20:54, Guenter Roeck a écrit :
Hi Marek,
On 11/07/2016 10:14 AM, Marek Vasut wrote:
On 11/07/2016 04:58 AM, Guenter Roeck wrote:
On Tue, Oct 25, 2016 at 09:57:43PM +0200, Marek Vasut wrote:
From: Chris Wulff <crwu...@gmail.com>
Add support for emulating Altera NiosII R1 architecture into qemu.
This patch is based on previous work by Chris Wulff from 2012 and
updated to latest mainline QEMU.
Signed-off-by: Marek Vasut <ma...@denx.de>
Cc: Chris Wulff <crwu...@gmail.com>
Cc: Jeff Da Silva <jdasi...@altera.com>
Cc: Ley Foon Tan <lf...@altera.com>
Cc: Sandra Loosemore <san...@codesourcery.com>
Cc: Yves Vandervennet <yvand...@altera.com>
---
V3: Thorough cleanup, deal with the review comments all over the place
V4: - Use extract32()
- Fix gen_goto_tb() , suppress tcg_gen_goto_tb()
- Clean up gen_check_supervisor() helper
- Use TCGMemOp type for flags
- Drop jump labels from wrctl/rdctl
- More TCG cleanup
V5: - Simplify load/store handling
- Handle loads into R_ZERO from protected page, add comment
V6: - Fix division opcode handling
- Add missing disas handling
- V5 review comments cleanup
---
[ ... ]
diff --git a/target-nios2/cpu.h b/target-nios2/cpu.h
new file mode 100644
index 0000000..17c9a0f
[ ... ]
+static inline void cpu_get_tb_cpu_state(CPUNios2State *env, target_ulong *pc,
+ target_ulong *cs_base, uint32_t
*flags)
+{
+ *pc = env->regs[R_PC];
+ *cs_base = 0;
+ *flags = (env->regs[CR_STATUS] & (CR_STATUS_EH | CR_STATUS_U));
+}
+
+#endif /* CPU_NIOS2_H */
+
The empty line at the end results in a whitespace message from git.
Dropped, thanks. Is there anything else or is this patchset starting to
become acceptable ?
Hard for me to say. I tried to build and run the series with the latest linux
kernel (v4.9-rc4), but it is stuck in early boot. I tried with 10m50_defconfig
and 10m50_devboard.dtb. gcc is 6.1.0 built with buildroot, though I also tried
with toolchains from CodeSourcery. Obviously I have no idea if there is a
kernel bug or a qemu bug or a problem with the command line I used.
Here is my command line:
qemu-system-nios2 -M 10m50-ghrd -kernel vmlinux -dtb 10m50_devboard.dtb \
-append "earlycon=uart8250,mmio32,0x18001600,115200n8 console=ttyS0"
I'm also using Buildroot to build the Linux initrd system and it works fine :)
I'm using the CodeSourcery toolchain and I also tried with the Buildroot
internal toolchain too, I guess it's a problem with your Qemu command line.
Here is my Buildroot config:
BR2_nios2=y
BR2_TOOLCHAIN_EXTERNAL=y
BR2_LINUX_KERNEL=y
BR2_LINUX_KERNEL_DEFCONFIG="10m50"
BR2_LINUX_KERNEL_CONFIG_FRAGMENT_FILES="board/qemu/nios2-10m50/linux-4.8.fragment"
BR2_TARGET_ROOTFS_INITRAMFS=y
The board/qemu/nios2-10m50/linux-4.8.fragment file contain the following lines
to extend the 10m50 kernel defconfig:
CONFIG_NIOS2_DTB_SOURCE_BOOL=y
CONFIG_NIOS2_DTB_SOURCE="arch/nios2/boot/dts/10m50_devboard.dts"
Yes, turns out that passing the dtb with a command line argument as I did
doesn't work,
and the kernel ends up stuck in early boot as I had observed. It only works if
the dtb
is embedded into the kernel (I did configure CONFIG_NIOS2_PASS_CMDLINE=y).
I have not determined yet if this is a bug in the kernel or a bug in qemu or
both.
One significant difference is that qemu increases the dtb size significantly
(from
4437 bytes to 28874) if I use the -dtb argument. qemu calculates the size as
(4437 + 10000) * 2. I don't know yet if the kernel doesn't like that size
or if something else is wrong.
Guenter
With that, you should be able to boot Qemu with the following command line:
qemu-system-nios2 -kernel output/images/vmlinux -nographic
[...]
Welcome to Buildroot
buildroot login: root
# cat /proc/cpuinfo
CPU: Nios II/fast
MMU: present
FPU: none
Clocking: 75.00 MHz
BogoMips: 150.00
Calibration: 75000000 loops
HW:
MUL: yes
MULX: no
DIV: yes
Icache: 32kB, line length: 32
Dcache: random: fast init done
32kB, line length: 32
TLB: 16 ways, 256 entries, 8 PID bits
But I haven't tested the upcoming v4.9 kernel yet.
I'll add this Buildroot Qemu defconfig to Buildroot as soon as the nios2 has
been merged in Qemu :)
Best regards,
Romain
This may be wrong, but the boot is stuck in an endless loop in mark_bootmem(),
which seems early and odd. I tried with both vmlinux and
arch/nios2/boot/vmImage,
with the same results.
Can you provide a working command line and kernel version, and/or directions how
to create a working image if I need to run the image, for example, from u-boot ?
Sorry if that is posted somewhere and I missed it.
I'll wait a bit before you finish discussing the whitespace errors in
1/7 with Sandra.
I can't really comment on the whitespace issues; the qemu maintainers will have
to decide if they can accept this patch as-is. I am sure they will appreciate
a heads-up, though.
Thanks,
Guenter