On Sat, May 25, 2019 at 07:58:36PM +0200, Karel Gardas wrote:
> Could you be also so kind and share information about how do you build
> OpenBSD for PPC64 and how do you boot whatever you get from the build. I'm
> especially curious if you build bsd.rd and somehow boot that and how exactly
> do you invoke Qemu and also what Qemu version exactly do you use for that.
>
> Thanks,
> Karel
Hi Karel,
Last weeks answer wasn't to my own satisfaction, so I'll try again. Last
year I spent considerable time and effort to make the bsd kernel compile for
aim64 arch. aim64 arch is like macppc arch, and powerpc64 is like powerpc,
only that some variables are different and the asm has been changed. ie.
ppc_mtmsr() asm macro has been changed to ppc_mtmsrd() (doubleword to
indicate that 64-bit flag can be set on the MSR register, it's the highest
bit also called PSL_SF found in /sys/arch/powerpc64/include/psl.h, this I
also had changed). Everything was changed around ie. a long in powerpc would
be a uint32_t in powerpc64 unless the variable size can go higher to 64 bit, in
that case it would be uint64_t).
So I get to build a 64-bit kernel whoowee, it's like a little lightbulb that
goes poof when I apply current to it. Basically the kernel starts in locore0.S,
and it branches off into the ofwreal.S asm file, here it stopped last year at
entry into a C routine. I had given up there. Closer examination with qemu
though this year showed that it can go further into C routines, I'm not sure
if it was the fact that I compiled with gcc (I tried it out, basically and it
worked). I was experimenting a bit with the temporary 64-bit bridge which is
a bit one can set to have 32-bit functionality on opcodes like mfsrin. This
for a moment got me so far as pmap.c but crashed/panic'ed on data that was
supposed to be gotten from openfirmware. The fact that the stdout console
was not initialized showing me the panic string was another indicator that
these were awry.
Last year I also hacked on the bootloader ofwboot to boot 64-bit ELF images.
This works for the most part and it starts in 32-bit mode and hands off the
execution to the kernel in 32-bit mode, which then does the following opcodes
to set 64-bit mode:
mfmsr %r0
lis %r21, 1
insrdi %r0, %r21, 1, 0 /* set PSL_SF */
mtmsrd %r0
isync
nop
This I learned from reading the FreeBSD asm and it's not changed much except
perhaps the register #'s. Ultimately this is called first, and I don't think
I'll see an alignment issue either as 64-bit opcodes are 4 bytes just like
32-bit opcodes.
OK if I didn't already say it I'm focusing on bsd kernel not bsd.rd, when the
day comes when bsd kernel boots but panics on no root filesystem is when I
am going to work on bsd.rd. That day is still a long ways off I think as I
gotta have locore0.S, open firmware routines, and locore.S right. locore.S
still nees a lot of work and I'm not even there yet because I'm approaching
the bootstrapping as it executes, and once I'M past the openfirmware I know
it will panic or do funky things once the cpu and memory bootstrapping is done.
Does this better explain where I am at? There is still a lot to do, and
I'm not really that proud of what I have accomplished thus far, but I started
not knowing any asm, not knowing much in general about kernel work, sure I
poked in ther kernel before but mostly in the networking areas, this is totally
new territory. And it's hard. I still can't turn away/walk away, somehow I
keep thinking I can make the lightbulb glow. I'm approaching this different
though than last year. Last year I wanted to get something done by christmas.
This year there is no due date. I'm curious to see how far I can take it.
Best Regards,
-peter