Commit Graph

1537 Commits

Author SHA1 Message Date
ce7fa4d29b 40p: update interrupt routing code to match QEMU
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>
2018-10-05 08:45:02 +01:00
a1280807a3 40p: fix up generation of interrupt properties
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>
2018-08-31 11:27:53 +01:00
0a031401c1 config: enable virtio-blk driver for default PPC and SPARC64 builds
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
2018-08-31 11:22:27 +01:00
7c677d7af4 drivers: add virtio-1.0 virtio-blk driver
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>
2018-08-31 11:22:27 +01:00
0353c63382 SPARC64: add bootindex support
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>
2018-08-31 11:22:27 +01:00
b09c7a3e78 ppc: add bootindex support
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>
2018-08-31 11:22:27 +01:00
bf0620b859 ppc: make sure that we correctly map loader RAM at load-base
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>
2018-08-31 11:21:41 +01:00
3ee90adbb7 SPARC64: fix endian naming of architecture in_*() and out_*() functions
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>
2018-08-31 11:21:35 +01:00
d252d3fba6 SPARC64: fix up dma-* words
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>
2018-08-26 14:16:29 +01:00
b6c94f7306 ppc: move init-program client stack to 1:1 virt to phys mapped memory
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>
2018-08-26 14:16:20 +01:00
502435d979 pci: use absolute PCI IO addresses when programming bridge IO limits
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>
2018-08-18 10:12:26 +01:00
667b8f890b libopenbios: don't allow find_package_method() to push a NULL for empty strings
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>
2018-08-18 10:12:26 +01:00
20186fa8c1 ide: don't use ioports as part of the controller node address
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>
2018-08-18 10:12:26 +01:00
8fe6f5f96f usbhid: fix up keyboard alias for USB keyboards
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>
2018-06-09 16:46:58 +01:00
ca1a87aa5e ppc: add PMU driver
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>
2018-06-09 16:46:58 +01:00
bb6943cab7 adb: set compatible property differently if PMU is present
This matches the device tree from a real mac99 system.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
2018-06-09 16:46:58 +01:00
e2c333cfe1 ppc: add GPIO devices to the device tree when PMU hardware detected
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>
2018-06-09 16:46:58 +01:00
ef2e439866 ppc: add fw_cfg interface for passing VIA/ADB configuration from QEMU
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>
2018-06-09 16:46:58 +01:00
8d96d0bbba prep: disable VBE extensions when executing client program
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>
2018-05-26 20:09:22 +01:00
ce43b60d61 libopenbios: add PReP boot partition loader for PPC
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
2018-05-26 20:09:22 +01:00
853b59f901 pc-parts: allow successful detection of PReP boot partitions
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>
2018-05-26 20:09:22 +01:00
394238226c ppc: use proper context when pre-loading kernels
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>
2018-05-26 20:09:22 +01:00
75eff5a20d ppc: add PReP residual data block
This is borrowed from OpenHackWare in order to provide hardware data to
the client OS.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
2018-05-26 20:09:22 +01:00
e713e732c4 pci: add driver for LSI 53C810 SCSI controller
This is to enable booting PReP machines in OpenBIOS.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
2018-05-26 20:09:22 +01:00
e004edf2e6 ppc: add PReP support to dma-map-in
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>
2018-05-26 20:09:22 +01:00
15d3d3d1c1 bootcode_load: ensure LOADER_NOT_SUPPORT is returned if no bootcode is present
Otherwise we try unsucessfully to load the bootcode and fail rather than continuing
on to the next loader.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
2018-05-26 20:09:22 +01:00
9f9d193739 pci: add AMD PCNET information to PCI database
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
2018-05-26 20:09:22 +01:00
066467da2d pci: rename i82378 keyboard device from 8042 to keyboard
This ensures the keyboard appears with a more sensible name in the device
tree.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
2018-05-26 20:09:22 +01:00
a58ec2ccf4 pc_kbd: ensure that we properly reset the 8042 controller and keyboard device
More recent versions of QEMU disable scanning until the controller and
keyboard device have been explicitly reset.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
2018-05-26 20:09:22 +01:00
c816bf7a80 esp: switch over to using dma-alloc/dma-map-in
Use the proper IEEE-1275 dma words to allocate and map DMA memory.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
2018-05-26 17:32:53 +01:00
df46ed59ee esp: switch creation of esp device over to use new-device
Instead of using a C initialize function to create the esp device, switch over
to using the Forth "new-device" word so that all of the initialisation can be
done in place in ob_esp_init().

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
2018-05-26 17:32:53 +01:00
516feb0d46 sbus: add dma-* call-parent chain to all PCI devices and bridges
This enables disk drivers to call the dma-* words as required by the
specification.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
2018-05-26 17:32:53 +01:00
b9d95b34fa pci: add dma-* call-parent chain to all PCI devices and bridges
This enables disk drivers to call the dma-* words as required by the
specification, and in particular fixes the failing dma-alloc warnings
emitted by NetBSD PPC on boot.

Note that we also add these methods to any partition/file packages via a
new is-call-parent helper word to ensure that the dma-* words are
available at all levels of interposition.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
2018-05-26 17:32:53 +01:00
8ba053cb41 macio: add missing REGISTER_NODE for New World macio devices
Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
2018-05-26 17:32:53 +01:00
8584d42773 SPARC64: implement dma-* words
Implement the dma-* words in the root node using Forth, except for dma-alloc
and dma-sync which require C to use the in-built aligned memory allocator and
MMU flushing.

Note that as OpenBIOS doesn't enable the IOMMU for SPARC64 it is possible to
use the aligned memory allocator directly without any extra support code.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
2018-05-26 17:32:53 +01:00
29112bad4c PPC: implement dma-* words
Implement the dma-* words in the root node using Forth, except for dma-alloc
and dma-sync which require C to use the in-built aligned memory allocator and
I-cache and D-cache flushing.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
2018-05-26 17:32:53 +01:00
0723863980 PPC: add flush_dcache_range() to start.S
Implement flush_dcache_range() similar to flush_icache_range() in preparation
for adding dma command support.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
2018-05-26 17:32:53 +01:00
fde444d149 SPARC32: implement dma-* words
Use Forth wrappers around the existing C functions to implement all the dma-* words
in the root package.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
2018-05-26 17:32:53 +01:00
0abd3d55b2 SPARC32: implement dvma_sync() function for synchronising DMA memory
This is required for ensuring that CPU memory is coherent after DMA operations
have completed.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
2018-05-26 17:32:53 +01:00
677c6ce273 SPARC32: move pgtsrmmu.h from arch/sparc32 to include/arch/sparc32
This is to enable us to use its functions for the upcoming DMA functionality.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
2018-05-26 17:32:53 +01:00
42297c7b82 SPARC32: implement dvma_map_in() for DMA IOVA to phys translation
Rather than have dvma_alloc() store the result of the physical translation
in the specified location, use the fact that we now have contiguous physical
DMA memory to implement dvma_map_in() to perform the translation separately.

This allows us to remove the pointer to the physical address parameter to
dvma_alloc() and instead perform the translation in esp.c by calling
dvma_map_in() separately.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
2018-05-26 17:32:53 +01:00
ce04d7ae35 SPARC32: allocate contiguous physical memory for DVMA
Currently we dynamically allocate physical memory for DVMA as required, however
that makes mapping between IOVA and physical addresses almost impossible since the
resulting regions are not contiguous.

Resolve this by allocating a contiguous physical memory block that we can use to
easily map between IOVA and physical addresses.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
2018-05-26 17:32:53 +01:00
d44e9c8776 SPARC32: rename dvma_alloc()'s ba variable to iova
This makes it clearer that we are handling a virtual IO address.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
2018-05-26 17:32:53 +01:00
9b3116e000 dma: add defers for the dma-* words
Whilst there is an existing implementation of dma-alloc, it is currently unused
so we can make this change now.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
2018-05-26 17:32:53 +01:00
c9f67ba672 pci: fix OHCI driver PCI address
Commit a1c2e4f "Add USB OHCI + HID driver" hardcoded the high order bit of
the PCI address to that used on PPC machines instead of using the correct
PCI_ADDR() macro.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
Reviewed-by: BALATON Zoltan <balaton@eik.bme.hu>
2018-05-21 22:34:32 +01:00
e0c272b13b macio: set correct UniNorth device revision
Make sure that we set the device-rev property to 7 as found on a real Mac99
machine.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
2018-05-19 09:08:53 +01:00
c7ab44d6c0 ppc: don't hardcode the system bus frequency
The system bus frequency has been available from the QEMU fw_cfg interface for
some time, so let's use it rather than hard-coding the relevant values.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
2018-05-19 09:08:53 +01:00
0e6b8b3cb4 openbios: compile fixes for GCC 7.3
This fixes additional warnings found when upgrading my compiler toolset from
GCC 5.x to 7.x.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
2018-05-03 21:46:17 +01:00
54d959d97f ofmem: restrict ofmem_claim() allocations to RAM size
As OFMEM memory ranges don't provide an explicit upper limit, we must manually
check that CIF claim calls lie within a valid maxmimum range if attempting to
allocate a specific address. Since the claim method provides a 1:1 mapping between
physical and virtual addresses, the valid maximum address is therefore equivalent
to the machine RAM size.

This fixes booting yaboot 1.3.17 which implements a top-down search using claim to
find the next free memory region to locate its heap. Without this fix we blindly
accept a claim for physical addresses far above the available RAM which fails
silently when we try to use the mapping later.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
2018-02-13 22:24:21 +00:00
b5c93acd14 ciface.fs: implement SUNW,power-off service
This is a Sun-specific service which is only enabled for the SPARC64
architecture.

Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
2018-01-24 20:09:19 +00:00