When generating the DT based upon the active package and current instance, we
cannot change either when setting the alias. Instead look up the phandle and
then set the properties directly.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
This macro is designed to bind C functions into Forth words during creation
of the device tree, but only into an existing node and without attempting
to create any missing parent nodes.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
gcc 9 emits a fatal error when building OpenBIOS for ppc because the size of the
generated image is greater than the available ROM area when building with -O0.
Reduce the size of the Forth dictionary from 512K to 384K to allow sufficient
space for generating OpenBIOS images suitable for debugging.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
If no display device has been installed in the DT e.g. passing -vga none into
the QEMU command line then fall back to using the serial console as already
occurs when launching QEMU in -nographic mode.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
If no display device has been installed in the DT e.g. passing -vga none into
the QEMU command line then fall back to using the serial console as already
occurs when launching QEMU in -nographic mode.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
OpenBIOS SPARC32 has always maintained a fallback option of an internal TCX
driver if an FCode driver cannot be located on the TCX card itself.
Since QEMU's TCX adapter has supported FCode payloads for a long time then
we only require this logic for non-QEMU builds. Otherwise we unintentionally
install the fallback driver and device node even if the framebuffer card hasn't
been installed into the machine.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Make sure that obp_arg.argv is set to an empty string if no command line is
passed from QEMU. Otherwise the kernel will panic on startup when trying to
access it.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Currently the /memory node reg property is set to a single range encompassing
the entire physical RAM of the machine. This seems to cause issues with
Solaris when booting on QEMU SS-10 and SS-20 machines whereby having just a
single entry causes the top of physical memory to be calculated incorrectly
and triggers a panic on boot.
Instead copy the behaviour of OBP which is to divide the reg property into a
set of ranges representing the physical SIMM arrangement in the machine, which
fixes the error and allows Solaris to boot under the QEMU SS-10 and SS-20
machines.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
With the corresponding QEMU patches applied, it is now possible to change the
reported firmware name to that of a real 40p machine and boot to a working
userspace with the Linux sandalfoot zImage.
Note that whilst guest OSs should be relying on residual data rather than the
OF device tree to determine the hardware, we still update the interrupt
properties to match the new code in QEMU for consistency.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Since support for QEMU's 40p machine has been added there is now the possibility
of having a PPC architecture where !is_newworld() and !is_oldworld() are both
true.
Fix up a couple of instances in this logic that were preventing the generation
of interrupt properties in the device tree for 40p machines.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Reviewed-by: Hervé Poussineau <hpoussin@reactos.org>
Note that as part of this commit we rename the legacy virtio-blk device node
from "virtio-blk" to "scsi" to match up with the QEMU fw path generator.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
This provides an alternative mechanism for supporting boot device order
information from QEMU compared with the legacy FW_CFG_BOOT_DEVICE
functionality specified via -boot.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
This provides an alternative mechanism for supporting boot device order
information from QEMU compared with the legacy FW_CFG_BOOT_DEVICE
functionality specified via -boot.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
An error in the logic related to FREE_BASE meant that instead of mapping the
RAM for the loader at load-base, a small section was being mapped at the
bottom of RAM instead.
Fix this by deferring the mapping of the load-base RAM to arch_init() when
we can access the load-base variable and map 8MB RAM with a 1:1 phys to
virt mapping.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
For reasons lost in the history of time, the SPARC64 endian accessors were
given the opposite names to their function i.e. out_le32() would use a
standard load whilst out_be32() would use a little-endian load. Switch
them around so that their implementation matches their name (and also that
of all other architectures).
Note that since the references in the inb/inw/inl and outb/outw/outl wrappers
are also swapped around then these accessors for legacy ioports (i.e. little
endian) will still behave exactly the same as before.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Commit 8584d42 "SPARC64: implement dma-* words" introduced the dma-* words
for SPARC64 but accidentally introduced an older prototype implementation
(probably introduced during a rebase) rather than using the correct defer
words.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
The default context used by init-program is allocated from the OpenBIOS
heap which uses a different virt to phys mapping to avoid having to
physically relocate the PROM on startup for PPC machines.
It seems that the OpenBSD bootloader isn't happy with this change
introduced by the context rework, most likely because there is an
assumption that the client stack is mapped 1:1 virt to phys.
Fix this by overriding the default context stack during init-program
to a location just under the MMU hash table (SDR1) which was its
previous hard-coded location in 1:1 virt to phys mapped memory, and
allow OpenBSD to boot.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
The upper IO bridge limit was being calculated relative to the lower IO
bridge limit, rather than as an absolute address.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Instead push a valid address with zero length otherwise the Forth find-method
word can reference a NULL pointer.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
The problem with using the ioport as part of the controller node
address is that the address cannot be determined until after the PCI
BARs have been programmed.
This causes a problem when trying to generate fw bootpaths because by
definition they must be passed to the firmware before PCI initialisation.
Instead of using the controller ioport address, use the controller
index for the node address to provide a consistent device node
regardless of how the PCI BARs are programmed.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
A USB keyboard is not an ADB keyboard, so make sure that we set the keyboard
alias rather than the adb-keyboard alias.
This also enables us to simplify the alias logic in the PPC arch_of_init()
function.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
The PMU hardware supercedes the CUDA hardware on more modern Macs providing
additional power management functionality which is required for more modern
Mac OSs.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
PMU Mac models expose GPIOs via a separate address range at the start
of the via-pmu device.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
This is in preparation for allowing OpenBIOS to detect the difference
between CUDA/PMU hardware and build the device tree accordingly.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
PReP payloads such as Linux expect to be able to set standard VGA modes
on startup, but VBE prevents certain modes such as text-only.
Disable VBE extensions when executing the client program to allow this
behaviour which also matches that of Open HackWare.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
The PReP boot partition has its own separate layout, so if we detect a PReP
partition then assume success without attempting the filesystem probe (which
is always going to fail).
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Before the introduction of proper init-program contexts, OpenBIOS
used a simple assembler call_elf() function to execute the guest
kernel directly.
Switch over to using proper contexts via arch_init_program() which
enables us to remove the legacy call_elf() completely.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
PReP machines have a separate iova address space mapped into the CPU address
space at 0x80000000, so add a new dma-map-in implementation that supports
this behaviour for the PReP machine.
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>