On 7/26/21 2:57 AM, Rob Landley wrote: > Anyway... it doesn't look like qemu-system-hexagon (softmmu) its currently in > vanilla qemu? Is there a public fork that has this somewhere?
I did a little wild flailing to get ./configure to give me a qemu-system-hexagon option (patch attached), I.E. just enough to get meson to shut up and quite possibly still missing something important. (Is this python? It looks kind of like python.) Unfortunately after liberally cribbing from the cris architecture (which seems like the simplest one) I'm left with several new C files to implement, all currently zero length in the patch: hw/hexagon/boot.c hw/hexagon/hexagon_comet.c target/hexagon/machine.c target/hexagon/mmu.c (In theory there's a "none" board on all the current qemu-system architectures, but I've never figured out what to DO with those...) All this raises two problems: 1) I dunno how the hexagon mmu works. (I can presumably read the kernel code and reverse engineer what that's looking for, but it would be really nice not to _have_ to?) 2) What's a comet board? (Memory layout? I/O devices? I guess all I need for serial console on initramfs is a contiguous block of DRAM, timer interrupt to drive the scheduler, and a serial port. I keep thinking there should be a way to tell the "none" board to add that stuff from the command line... but dunno how. "map DRAM here". "add this clock hardware at here". "add this kind of serial port at here." "call elf_load on this file and start executing at its entry point"...) 3) Reading the arch/hexagon kernel stuff ala "so what IS in a comet board"... CONFIG_HEXAGON_COMET is only ever used to guard one #define in a header file: arch/hexagon/include/asm/timer-regs.h:#define RTOS_TIMER_REGS_ADDR Which is then used to initialize structure members in arch/hexagon/kernel/time.c without any sort of guard there, and no it isn't #defined to 0 by default anywhere I can see? And of course obj-y += time.o in arch/hexagon/kernel/Makefile has no config guard there either. So if it wasn't set, the build would break. And that's currently all the symbol does? Anyway, I still hope somebody else has already done most of this in a git tree somewhere. :) Rob
diff --git a/default-configs/devices/hexagon-softmmu.mak b/default-configs/devices/hexagon-softmmu.mak new file mode 100644 index 0000000000..c07ed1132f --- /dev/null +++ b/default-configs/devices/hexagon-softmmu.mak @@ -0,0 +1,5 @@ +# Default configuration for hexagon-softmmu + +# Boards: +# +CONFIG_HEXAGON_COMET=y diff --git a/default-configs/targets/hexagon-softmmu.mak b/default-configs/targets/hexagon-softmmu.mak new file mode 100644 index 0000000000..003ed0a408 --- /dev/null +++ b/default-configs/targets/hexagon-softmmu.mak @@ -0,0 +1 @@ +TARGET_ARCH=hexagon diff --git a/hw/hexagon/Kconfig b/hw/hexagon/Kconfig new file mode 100644 index 0000000000..9ae8a5ce30 --- /dev/null +++ b/hw/hexagon/Kconfig @@ -0,0 +1,2 @@ +config HEXAGON_COMET + bool diff --git a/hw/hexagon/boot.c b/hw/hexagon/boot.c new file mode 100644 index 0000000000..e69de29bb2 diff --git a/hw/hexagon/hexagon_comet.c b/hw/hexagon/hexagon_comet.c new file mode 100644 index 0000000000..e69de29bb2 diff --git a/hw/hexagon/meson.build b/hw/hexagon/meson.build new file mode 100644 index 0000000000..83f23f5368 --- /dev/null +++ b/hw/hexagon/meson.build @@ -0,0 +1,5 @@ +hexagon_ss = ss.source_set() +hexagon_ss.add(files('boot.c')) +hexagon_ss.add(when: 'CONFIG_HEXAGON_COMET', if_true: files('hexagon_comet.c')) + +hw_arch += {'hexagon': hexagon_ss} diff --git a/target/hexagon/machine.c b/target/hexagon/machine.c new file mode 100644 index 0000000000..e69de29bb2 diff --git a/target/hexagon/mmu.c b/target/hexagon/mmu.c new file mode 100644 index 0000000000..e69de29bb2 diff --git a/hw/Kconfig b/hw/Kconfig index 805860f564..7cfd7db690 100644 --- a/hw/Kconfig +++ b/hw/Kconfig @@ -62,6 +62,7 @@ source sparc/Kconfig source sparc64/Kconfig source tricore/Kconfig source xtensa/Kconfig +source hexagon/Kconfig # Symbols used by multiple targets config TEST_DEVICES diff --git a/hw/meson.build b/hw/meson.build index ba0601e36e..f43c4bacdd 100644 --- a/hw/meson.build +++ b/hw/meson.build @@ -46,6 +46,7 @@ subdir('alpha') subdir('arm') subdir('avr') subdir('cris') +subdir('hexagon') subdir('hppa') subdir('i386') subdir('m68k') diff --git a/target/hexagon/meson.build b/target/hexagon/meson.build index 6fd9360b74..aef434421f 100644 --- a/target/hexagon/meson.build +++ b/target/hexagon/meson.build @@ -176,3 +176,7 @@ hexagon_ss.add(files( )) target_arch += {'hexagon': hexagon_ss} + +hexagon_softmmu_ss = ss.source_set() +hexagon_softmmu_ss.add(files('mmu.c', 'machine.c')) +target_softmmu_arch += {'hexagon': hexagon_softmmu_ss}