History log of /haiku/src/system/boot/platform/u-boot/arch/ppc/arch_cpu.cpp
Revision Date Author Comments
# 425ac1b6 20-Jun-2023 Alexander von Gluck IV <kallisti5@unixzen.com>

refactor: Swap %Ld for %lld in all format usages

* %Ld is an undocumented alias for %lld in glibc.
* muslc doesn't implement it for this reason.
* While we will likely never drop %Ld support,
lets clean house and set a better example.

Change-Id: Id46dad3104abae483e80cc5c05d1464d3ecd8030
Reviewed-on: https://review.haiku-os.org/c/haiku/+/6636
Reviewed-by: Adrien Destugues <pulkomandy@pulkomandy.tk>
Reviewed-by: Alex von Gluck IV <kallisti5@unixzen.com>
Tested-by: Commit checker robot <no-reply+buildbot@haiku-os.org>


# 48064fbc 25-Feb-2020 Alexander von Gluck IV <kallisti5@unixzen.com>

system/boot: Unify spin design, add missing symbols to asm/ld

Change-Id: I1dd98a2243d498ec1c827f7a60385237d12a0d39
Reviewed-on: https://review.haiku-os.org/c/haiku/+/2283
Reviewed-by: Alex von Gluck IV <kallisti5@unixzen.com>
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>


# 7b4d924f 04-Dec-2019 Andrej Antunovikj <tunas@cryptolab.net>

cpu: Extract shared x86 code from efi & bios_ia32

This issue was initially detected by PVS Studio (issue number V547) and fixed
as part of Google Code-in 2019.

The initial problem was the calculate_cpu_conversion_factor function
which had been copied in the BIOS and EFI versions of the boot code.
Further investigation led to more duplicated or very similar functions
being identified.

Introduce an arch_cpu.h for the x86 boot platform to group these things
in a single place, and adjust the BIOS and EFI code to call into that.
Note that the BIOS and EFI code is still a little platform specific,
ideally there should be a boot_arch_cpu_init() function for each
architecture as already done for openfirmware and u-boot.

Also remove some irrelevant comments from copypasted files for other
architectures, as that was filling my git grep with useless noise.

Change-Id: I16d815f0bf015cec0b4e03cc14f3cc447c7164c5
Reviewed-on: https://review.haiku-os.org/c/haiku/+/1985
Reviewed-by: Adrien Destugues <pulkomandy@gmail.com>


# 9e66f031 18-Dec-2015 François Revol <revol@free.fr>

U-Boot: PPC: Try to enable unaligned transfers

This however doesn't help with the 64bit float operations that
gcc emits when assigning the physical framebuffer address in kernel_args,
which is a packed struct...


# e57c83d9 18-Dec-2015 François Revol <revol@free.fr>

U-Boot: PPC: make the shift calculation more obvious

It's the 11th bit, counting from the MSB, on the top 16 bits.


# 94b802f5 20-Apr-2013 François Revol <revol@free.fr>

U-Boot: PPC: Tell the kernel we come in peace from U-Boot


# af63ede7 08-Mar-2013 François Revol <revol@free.fr>

U-Boot: PPC: Implement Book-E MMU support in bootloader

Unlike Classic PPC, Book-E CPUs do not have hardware page-table walk,
rather only a limited set of software-managed TLBs. Also, translation
is never disabled even when page-faulting.

The Linux Book-E port pins part of the RAM in one or more TLBs, and
allocates kernel memory from it for the kernel itself and exception
vectors, as well as page tables.
cf. http://kernel.org/doc/ols/2003/ols2003-pages-340-350.pdf

We take a similar approach, but instead of using a tree-like page
directory we reserve a large part of this mapped range for an
hashed page table similar to the Classic one, to later allow
factoring code out. The kernel and boot modules will also be
allocated there, and the rest should be used as SLAB areas.

Note doing so will not allow implementing proper permissions for
the areas allocated there since they are all handled by a single TLB.

Also note Book-E does not standardize the MMU implementation itself.
For now only AMCC440 type MMU is supported. This will need to be
cleaned up later on.


# 85e1bac2 17-Feb-2013 François Revol <revol@free.fr>

U-Boot: Fix warning


# 0255210b 17-Feb-2013 François Revol <revol@free.fr>

U-Boot: PPC: properly enumerate CPUs

* Code comes almost verbatim from OF platform.
* Only bus frequency needs to be read from the /plb node instead.


# acc4e245 17-Feb-2013 François Revol <revol@free.fr>

U-Boot: Typo


# f4b31e85 17-Feb-2013 François Revol <revol@free.fr>

U-Boot: PPC: Spice up CPU detection, trying both PVR and FDT

* Read the PVR register to determine the CPU type.
* Also check the FDT /cpu/cpu@0 node for model string
(we use the FDT calls directly since the OF wrapper isn't initialized yet).
* Use this to enable the FPU APU hack for 440 (instead of #ifdef).


# cce9d8cf 01-Jun-2012 François Revol <revol@free.fr>

U-Boot PPC: Enable ppc440 FPU correctly

* On ppc440, the FPU is implemented as an Auxiliary Processing Unit,
we must therefore enable sending commands to it,
in addition to setting the MSR bit.


# 037f252f 24-May-2012 François Revol <revol@free.fr>

U-Boot: split cpu.cpp into arch-specific and common parts

* the common part should try to use the U-Boot API when found.
* the arch part can make use of cpu features (like timer register)
* the ppc code enables the FPU in the MSR, since it's used by vsnprintf(),
which at least saves one FP register in its prologue.


# 94b802f5880405d4b08c44220ab45efcb6bf6721 20-Apr-2013 François Revol <revol@free.fr>

U-Boot: PPC: Tell the kernel we come in peace from U-Boot


# af63ede7a1fd24b4713800cdc7aabb7ae3e09a55 08-Mar-2013 François Revol <revol@free.fr>

U-Boot: PPC: Implement Book-E MMU support in bootloader

Unlike Classic PPC, Book-E CPUs do not have hardware page-table walk,
rather only a limited set of software-managed TLBs. Also, translation
is never disabled even when page-faulting.

The Linux Book-E port pins part of the RAM in one or more TLBs, and
allocates kernel memory from it for the kernel itself and exception
vectors, as well as page tables.
cf. http://kernel.org/doc/ols/2003/ols2003-pages-340-350.pdf

We take a similar approach, but instead of using a tree-like page
directory we reserve a large part of this mapped range for an
hashed page table similar to the Classic one, to later allow
factoring code out. The kernel and boot modules will also be
allocated there, and the rest should be used as SLAB areas.

Note doing so will not allow implementing proper permissions for
the areas allocated there since they are all handled by a single TLB.

Also note Book-E does not standardize the MMU implementation itself.
For now only AMCC440 type MMU is supported. This will need to be
cleaned up later on.


# 85e1bac215444aa98118c71efa7ee953ece662fa 17-Feb-2013 François Revol <revol@free.fr>

U-Boot: Fix warning


# 0255210b042a1beeb3dbc72ae118c325031328b1 17-Feb-2013 François Revol <revol@free.fr>

U-Boot: PPC: properly enumerate CPUs

* Code comes almost verbatim from OF platform.
* Only bus frequency needs to be read from the /plb node instead.


# acc4e245de592de1897b78b16f1f4dffbda07249 17-Feb-2013 François Revol <revol@free.fr>

U-Boot: Typo


# f4b31e85b54a0665a5db0cffafb8a18a965fe38c 17-Feb-2013 François Revol <revol@free.fr>

U-Boot: PPC: Spice up CPU detection, trying both PVR and FDT

* Read the PVR register to determine the CPU type.
* Also check the FDT /cpu/cpu@0 node for model string
(we use the FDT calls directly since the OF wrapper isn't initialized yet).
* Use this to enable the FPU APU hack for 440 (instead of #ifdef).


# cce9d8cf89c7ce155c9e794579a89478661d180a 01-Jun-2012 François Revol <revol@free.fr>

U-Boot PPC: Enable ppc440 FPU correctly

* On ppc440, the FPU is implemented as an Auxiliary Processing Unit,
we must therefore enable sending commands to it,
in addition to setting the MSR bit.


# 037f252fd0dd3e85ebf9eaceee58b1a5ce73ca0d 24-May-2012 François Revol <revol@free.fr>

U-Boot: split cpu.cpp into arch-specific and common parts

* the common part should try to use the U-Boot API when found.
* the arch part can make use of cpu features (like timer register)
* the ppc code enables the FPU in the MSR, since it's used by vsnprintf(),
which at least saves one FP register in its prologue.