mirror of
https://github.com/xen-project/xen.git
synced 2026-10-29 10:40:03 +01:00
xen/arm32: head: Rework and document setup_fixmap()
At the moment, the fixmap table is only hooked when earlyprintk is used. This is fine today because in C land, the fixmap is not used by anyone until the the boot CPU is switching to the runtime page-tables. In the future, the boot CPU will not switch between page-tables to avoid TLB incoherency. Thus, the fixmap table will need to be always hooked beofre any use. Let's start doing it now in setup_fixmap(). Lastly, document the behavior and the main registers usage within the function. Signed-off-by: Julien Grall <julien.grall@arm.com> Reviewed-by: Stefano Stabellini <sstabellini@kernel.org>
This commit is contained in:
1 parent
e79999e587
commit
b03f75e22a
1 file changed
+16
-2
@@ -546,8 +546,21 @@ identity_mapping_removed:
|
||||
mov pc, lr
|
||||
ENDPROC(remove_identity_mapping)
|
||||
|
||||
/*
|
||||
* Map the UART in the fixmap (when earlyprintk is used) and hook the
|
||||
* fixmap table in the page tables.
|
||||
*
|
||||
* The fixmap cannot be mapped in create_page_tables because it may
|
||||
* clash with the 1:1 mapping.
|
||||
*
|
||||
* Inputs:
|
||||
* r10: Physical offset
|
||||
* r11: Early UART base physical address
|
||||
*
|
||||
* Clobbers r1 - r4
|
||||
*/
|
||||
setup_fixmap:
|
||||
#if defined(CONFIG_EARLY_PRINTK) /* Fixmap is only used by early printk */
|
||||
#if defined(CONFIG_EARLY_PRINTK)
|
||||
/* Add UART to the fixmap table */
|
||||
ldr r1, =xen_fixmap /* r1 := vaddr (xen_fixmap) */
|
||||
lsr r2, r11, #THIRD_SHIFT
|
||||
@@ -556,6 +569,7 @@ setup_fixmap:
|
||||
orr r2, r2, #PT_LOWER(DEV_L3) /* r2:r3 := 4K dev map including UART */
|
||||
mov r3, #0x0
|
||||
strd r2, r3, [r1, #(FIXMAP_CONSOLE*8)] /* Map it in the first fixmap's slot */
|
||||
#endif
|
||||
|
||||
/* Map fixmap into boot_second */
|
||||
ldr r1, =boot_second /* r1 := vaddr (boot_second) */
|
||||
@@ -570,7 +584,7 @@ setup_fixmap:
|
||||
|
||||
/* Ensure any page table updates made above have occurred. */
|
||||
dsb nshst
|
||||
#endif
|
||||
|
||||
mov pc, lr
|
||||
ENDPROC(setup_fixmap)
|
||||
|
||||
|
||||