Home | History | Annotate | Download | only in arm32
History log of /src/sys/arch/arm/include/arm32/machdep.h
RevisionDateAuthorComments
 1.36  02-Apr-2022  skrll Update to support EFI runtime outside the kernel virtual address space
by creating an EFI RT pmap that can be activated / deactivated when
required.

Adds support for EFI RT to ARM_MMU_EXTENDED (ASID) 32-bit Arm machines.

On Arm64 the usage of pmapboot_enter is reduced and the mappings are
created much later in the boot process -- now in cpu_startup_hook.
Backward compatiblity for KVA mapped RT from old bootaa64.efi is
maintained.

Adding support to other platforms should be easier as a result.
 1.35  28-Aug-2020  skrll Some KASAN fixes and tweaks

- don't access BSS variables when __md_early
- centralise the INIT_ARM_STACK_{SHIFT,SIZE} defines and create a new
INIT_ARM_TOTAL_STACK
- Only create L1PT entries in kasan_md_shadow_map_page if
arm32_kernel_vm_init hasn't created the L2PTs (and their L1PT entries)
- Add some comments to explain what's going on
 1.34  04-Jul-2020  skrll Protect with #ifdef _KERNEL
 1.33  05-Mar-2020  riastradh Revert "Include opt_diagnostic.h for DIAGNOSTIC."

This did not do what I thought it did. opt_diagnostic.h is only for
the unused _DIAGNOSTIC, which seems like an abortive attempt to
incrementally convert DIAGNOSTIC to an opt_*.h option rather than a
command-line option.
 1.32  05-Mar-2020  riastradh Include opt_diagnostic.h for DIAGNOSTIC.

...at least, in header files, which may not have already included
libkern.h.
 1.31  15-Feb-2020  skrll Various updates and improvements to cpu start up on arm/aarch64

- start sharing more code around the AP startup messaging.
- call arm_cpu_topology_set early so that ci_core_id is available for
drivers, e.g. bcm2835_intr.c
- both arm and aarch64 now have
- a static cpu_info_store array
- the same arm_cpu_{hatched,mbox}
 1.30  18-Dec-2019  riastradh branches: 1.30.2;
New function cpu_startup_hook on arm.

Called at end of cpu_startup. Can be defined in, e.g., evbarm to do
additional stuff after cpu_startup. Defined as a weak alias to a
function that does nothing, so optional.

ok jmcneill
 1.29  16-Jul-2019  skrll branches: 1.29.2;
Consistently use vaddr_t as initarm and friends return type.

Makes no difference to binaries except for aarch64 where it's required
 1.28  03-Jan-2019  skrll Start CPUs more like aarch64 by using a cpu_mpidr array (if populated)
to map MPIDRs to an index for each CPU.

Towards big.LITTLE support.
 1.27  18-Oct-2018  skrll Provide generic start code that assumes the MMU is off and caches are
disabled as per the linux booting protocol for ARMv6 and ARMv7 boards.
u-boot image type should be changed to 'linux' for correct behaviour.

The new start code builds a minimal "bootstrap" L1PT with cached access
disabled and uses the same table for all processors. AP startup is
performed in less steps and more code is written in C.

The bootstrap tables and stack are placed into an (orphaned) section
"_init_memory" which is given to uvm when it is no longer used.

Various kernels have been converted to use this code and tested. Some
boards were provided by TNF. Thanks!

The GENERIC kernel now boots on boards using the TEGRA, SUNXI and EXYNOS
kernels. The GENERIC kernel will also work on RPI2 using u-boot.

Thanks to martin@ and aymeric@ for testing on parallella and nanosoc
respectively
 1.26  05-Aug-2018  skrll Refactor code to split aarch{32,64} kernel page tables and VM setup. This
will help re-build the kernel page tables on aarch64 with correct section
mappings.
 1.25  05-Aug-2018  skrll Expose kern_vtopdiff
 1.24  03-Aug-2018  skrll Provide and use kern_vtopdiff in KERN_{VTOPHYS,PHYSTOV}. A step towards
generic arm.
 1.23  01-Aug-2018  skrll s/_ARM32_BOOT_MACHDEP_H_/_ARM32_MACHDEP_H_/ in multiple inclusion
protection.
 1.22  15-Jul-2018  maxv Retire ipkdb entirely. The option was removed from the config files
yesterday.

ok kamil christos
 1.21  20-Feb-2017  skrll branches: 1.21.12; 1.21.14;
Whitespace in comment
 1.20  20-Feb-2017  skrll Trailing whitespace
 1.19  11-Nov-2015  jmcneill branches: 1.19.2; 1.19.4;
add support for optional RB_POWERDOWN handler
 1.18  28-Mar-2014  matt branches: 1.18.6;
Change arm_cpu_mbox to volatile
 1.17  20-Oct-2012  matt branches: 1.17.2;
Increase l2pts to accomodate large memory disks.
 1.16  01-Sep-2012  martin branches: 1.16.2;
Backout previous, Matt fixed it differently
 1.15  01-Sep-2012  martin Move struct pv_addr next to struct bootmem_info into machdep.h and have
pmap.h include that.
Seems to be the least intrusive build fix; Matt: feel free to revamp.
 1.14  31-Aug-2012  matt Make cpu_reset, most of initarm and the kvm init code common.
Add MP hooks for cpu_need_resced
Add idlestck which is allocated in arm32_kvminit
 1.13  29-Aug-2012  matt Don't use locations in .data to store exception temporaries, use decidicated
space in cpu_info instead. This also moves undefined_handler_address into
cpu_info as well.
Use the new armreg* inlines for getting TPIDRPRW register.
Add MULTIPROCESSOR version of CPU_INFO_FOREACH
 1.12  29-Aug-2012  matt Since the PMC cycle counter is started in cpufunc no reason to do so here.
Use curcpu()->ci_data.cpu_cc_freq and new armreg* inlines.
 1.11  16-Aug-2012  matt Move the standard definitions of the {UND,IRQ,FIQ,ABT}_STACK_SIZE to
<arm32/machdep.h>
Move the extern for cpu_reset_address to the same file.
Add cpu_reset_address_paddr.
Kill cpu_reset_v4_MMU_disable.
if cpu_reset_address is NULL, then the MMU will be disabled.
 1.10  29-Jul-2012  matt Fix more -fno-common fallout.
Move more variables to common locations.
 1.9  14-Mar-2009  dsl branches: 1.9.12; 1.9.20;
Remove all the __P() from sys (excluding sys/dist)
Diff checked with grep and MK1 eyeball.
i386 and amd64 GENERIC and sys still build.
 1.8  04-Mar-2007  christos branches: 1.8.46; 1.8.54; 1.8.60; 1.8.64;
Kill caddr_t; there will be some MI fallout, but it will be fixed shortly.
 1.7  21-Feb-2002  thorpej branches: 1.7.34; 1.7.72;
map_chunk() -> pmap_map_chunk(), and move it to pmap.c
 1.6  20-Feb-2002  thorpej map_pagetable() -> pmap_link_l2pt(), and move it to pmap.c
 1.5  20-Feb-2002  thorpej Collapse map_entry{,ro,nc}() into a single pmap_map_entry() that
takes a prot and a "cacheable" indicator.
 1.4  20-Feb-2002  thorpej Rename map_section() to pmap_map_section(), move it to pmap.c, and give it
an extra argument (prot - specifies protection of the mapping).
 1.3  20-Jan-2002  thorpej Some prototype cleanup.
 1.2  07-Jan-2002  chris branches: 1.2.2; 1.2.4;
Finish up the changes to get LOOSE_PROTOTYPES working for cats.
Note that this leaves a few inconsistencies (no more than we already had though) eg initarm is now prototyped in arm32/machdep.h, however only cats currently makes use of that header.
 1.1  05-Jan-2002  chris Make some of the arm32 files build with LOOSE_PROTOTYPES not set in the makefile. Turned up a few mismatched functions. Note that this isn't all of the arm32 files. Aim will be to get arm32 kernels built with LOOSE_PROTOTYPES not set.
 1.2.4.3  17-Apr-2002  nathanw Catch up to -current.
 1.2.4.2  11-Jan-2002  nathanw More catchup.
 1.2.4.1  07-Jan-2002  nathanw file machdep.h was added on branch nathanw_sa on 2002-01-11 23:38:04 +0000
 1.2.2.4  16-Mar-2002  jdolecek Catch up with -current.
 1.2.2.3  11-Feb-2002  jdolecek Sync w/ -current.
 1.2.2.2  10-Jan-2002  thorpej Sync kqueue branch with -current.
 1.2.2.1  07-Jan-2002  thorpej file machdep.h was added on branch kqueue on 2002-01-10 19:37:55 +0000
 1.7.72.1  12-Mar-2007  rmind Sync with HEAD.
 1.7.34.1  03-Sep-2007  yamt sync with head.
 1.8.64.1  15-Feb-2014  matt Merge armv7 support from HEAD, specifically support for the BCM5301X
and BCM56340 evbarm kernels.
 1.8.60.1  13-May-2009  jym Sync with HEAD.

Commit is split, to avoid a "too many arguments" protocol error.
 1.8.54.1  28-Apr-2009  skrll Sync with HEAD.
 1.8.46.1  04-May-2009  yamt sync with head.
 1.9.20.1  28-Nov-2012  matt Merge improved arm support (especially Cortex) from HEAD
including OMAP and BCM53xx support.
 1.9.12.2  22-May-2014  yamt sync with head.

for a reference, the tree before this commit was tagged
as yamt-pagecache-tag8.

this commit was splitted into small chunks to avoid
a limitation of cvs. ("Protocol error: too many arguments")
 1.9.12.1  30-Oct-2012  yamt sync with head
 1.16.2.3  03-Dec-2017  jdolecek update from HEAD
 1.16.2.2  20-Aug-2014  tls Rebase to HEAD as of a few days ago.
 1.16.2.1  20-Nov-2012  tls Resync to 2012-11-19 00:00:00 UTC
 1.17.2.1  18-May-2014  rmind sync with head
 1.18.6.2  28-Aug-2017  skrll Sync with HEAD
 1.18.6.1  27-Dec-2015  skrll Sync with HEAD (as of 26th Dec)
 1.19.4.1  21-Apr-2017  bouyer Sync with HEAD
 1.19.2.1  20-Mar-2017  pgoyette Sync with HEAD
 1.21.14.3  13-Apr-2020  martin Mostly merge changes from HEAD upto 20200411
 1.21.14.2  08-Apr-2020  martin Merge changes from current as of 20200406
 1.21.14.1  10-Jun-2019  christos Sync with HEAD
 1.21.12.4  18-Jan-2019  pgoyette Synch with HEAD
 1.21.12.3  20-Oct-2018  pgoyette Sync with head
 1.21.12.2  06-Sep-2018  pgoyette Sync with HEAD

Resolve a couple of conflicts (result of the uimin/uimax changes)
 1.21.12.1  28-Jul-2018  pgoyette Sync with HEAD
 1.29.2.1  12-Feb-2020  martin Pull up following revision(s) (requested by riastradh in ticket #705):

sys/arch/aarch64/aarch64/aarch64_machdep.c: revision 1.35
sys/stand/efiboot/efifdt.c: revision 1.20
sys/stand/efiboot/efifdt.h: revision 1.7
sys/arch/aarch64/include/machdep.h: revision 1.9
sys/stand/efiboot/efiboot.h: revision 1.11
sys/arch/arm/arm32/arm32_machdep.c: revision 1.129
sys/arch/arm/include/arm32/machdep.h: revision 1.30
sys/stand/efiboot/exec.c: revision 1.12
sys/arch/evbarm/fdt/fdt_machdep.c: revision 1.65
sys/stand/efiboot/version: revision 1.14
sys/stand/efiboot/boot.c: revision 1.19

New function cpu_startup_hook on arm.

Called at end of cpu_startup. Can be defined in, e.g., evbarm to do
additional stuff after cpu_startup. Defined as a weak alias to a
function that does nothing, so optional.
ok jmcneill

Implement rndseed support in efiboot and fdt arm.

The EFI environment variable `rndseed' specifies the path to the
random seed. It is loaded only for fdt platforms at the moment.
Since the rndseed (an rndsave_t object as defined in <sys/rndio.h>)
is 536 bytes long (for hysterical raisins), and to avoid having to
erase parts of the fdt tree, we load it into a physical page whose
address is passed in the fdt tree, rather than passing the content of
the file as an fdt node directly; the kernel then reserves the page
from uvm, and maps it into kva to call rnd_seed.

For now, the only kernel that does use efiboot with fdt is evbarm,
which knows to handle the rndseed. Any new kernels that use efiboot
with fdt must do the same; otherwise uvm may hand out the page with
the secret key on it for a normal page allocation in the kernel --
which should be OK if there are no kernel memory disclosure bugs, but
would lead to worse consequences than simply loading the seed late in
userland with /etc/rc.d/random_seed otherwise.

ok jmcneill
 1.30.2.1  29-Feb-2020  ad Sync with head.

RSS XML Feed