summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRussell King <rmk+kernel@armlinux.org.uk>2016-12-03 00:46:30 +0000
committerRussell King <rmk+kernel@armlinux.org.uk>2021-02-15 15:48:49 +0000
commit8e85d215174332102da344ff18b13f77f0f83c96 (patch)
tree53e2b3eb2c179f5dcc0f48f62d548f90a136300d
parentff71764ba9470100c6c4e34a0f202299528901ea (diff)
arm64: hacks and debugging from initial mcbin bringup
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
-rw-r--r--arch/arm64/kernel/head.S127
1 files changed, 127 insertions, 0 deletions
diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S
index a0dc987724ed..c78a3d9887ae 100644
--- a/arch/arm64/kernel/head.S
+++ b/arch/arm64/kernel/head.S
@@ -42,6 +42,26 @@
#error PAGE_OFFSET must be at least 2MB aligned
#endif
+ .macro putc_base_pa, base:req
+ mov \base, #0xf0000000
+ add \base, \base, #0x00512000
+ .endm
+ .macro putc_base_va, base:req
+ mov \base, #0xffffff8000000000
+ orr \base, \base, #0x30000000
+ add \base, \base, #0x00512000
+ .endm
+ .macro wait, base:req, val:req
+1: ldrb \val, [\base, #5 * 4]
+ tbz \val, #6, 1b
+ .endm
+ .macro putc, base:req, val:req, ch
+ .ifnb \ch
+ mov \val, \ch
+ .endif
+ strb \val, [\base, #0]
+ .endm
+
/*
* Kernel startup entry point.
* ---------------------------
@@ -88,6 +108,105 @@
* x24 __primary_switch() .. relocate_kernel() current RELR displacement
*/
SYM_CODE_START(primary_entry)
+#if 0
+ putc_base_pa x21
+ putc x21, w23, #'x'
+ wait x21, w23
+ putc x21, w23, #'0'
+ wait x21, w23
+ putc x21, w23, #':'
+ mov x19, x0
+ mov x20, #16
+1: wait x21, w23
+ lsr x23, x19, #60
+ and w23, w23, #15
+ cmp w23, #10
+ bcc 2f
+ add w23, w23, #7
+2: add w23, w23, #'0'
+ putc x21, w23
+ lsl x19, x19, #4
+ subs x20, x20, #1
+ bcs 1b
+ wait x21, w23
+ putc x21, w23, #'\r'
+ wait x21, w23
+ putc x21, w23, #'\n'
+ wait x21, w23
+
+ putc x21, w23, #'x'
+ wait x21, w23
+ putc x21, w23, #'1'
+ wait x21, w23
+ putc x21, w23, #':'
+ mov x19, x1
+ mov x20, #16
+1: wait x21, w23
+ lsr x23, x19, #60
+ and w23, w23, #15
+ cmp w23, #10
+ bcc 2f
+ add w23, w23, #7
+2: add w23, w23, #'0'
+ putc x21, w23
+ lsl x19, x19, #4
+ subs x20, x20, #1
+ bcs 1b
+ wait x21, w23
+ putc x21, w23, #'\r'
+ wait x21, w23
+ putc x21, w23, #'\n'
+ wait x21, w23
+
+ putc x21, w23, #'x'
+ wait x21, w23
+ putc x21, w23, #'2'
+ wait x21, w23
+ putc x21, w23, #':'
+ mov x19, x2
+ mov x20, #16
+1: wait x21, w23
+ lsr x23, x19, #60
+ and w23, w23, #15
+ cmp w23, #10
+ bcc 2f
+ add w23, w23, #7
+2: add w23, w23, #'0'
+ putc x21, w23
+ lsl x19, x19, #4
+ subs x20, x20, #1
+ bcs 1b
+ wait x21, w23
+ putc x21, w23, #'\r'
+ wait x21, w23
+ putc x21, w23, #'\n'
+ wait x21, w23
+
+ putc x21, w23, #'x'
+ wait x21, w23
+ putc x21, w23, #'3'
+ wait x21, w23
+ putc x21, w23, #':'
+ mov x19, x3
+ mov x20, #16
+1: wait x21, w23
+ lsr x23, x19, #60
+ and w23, w23, #15
+ cmp w23, #10
+ bcc 2f
+ add w23, w23, #7
+2: add w23, w23, #'0'
+ putc x21, w23
+ lsl x19, x19, #4
+ subs x20, x20, #1
+ bcs 1b
+ wait x21, w23
+ putc x21, w23, #'\r'
+ wait x21, w23
+ putc x21, w23, #'\n'
+ wait x21, w23
+#endif
+
bl preserve_boot_args
bl init_kernel_el // w0=cpu_boot_mode
adrp x23, __PHYS_OFFSET
@@ -373,6 +492,14 @@ SYM_FUNC_START_LOCAL(__create_page_tables)
map_memory x0, x1, x5, x6, x7, x3, x4, x10, x11, x12, x13, x14
+#if 0
+ mov x7, (PMD_ATTRINDX(MT_DEVICE_nGnRnE) | SWAPPER_PMD_FLAGS)
+ mov x3, #0xf0000000
+ mov x4, #0x30000000
+ mov x6, #0x31000000
+ create_block_map x0, x7, x3, x4, x6
+#endif
+
/*
* Since the page tables have been populated with non-cacheable
* accesses (MMU disabled), invalidate those tables again to