hello_world: Use ldcix/stdcix to access UART
authorPaul Mackerras <paulus@ozlabs.org>
Wed, 1 Apr 2020 04:48:30 +0000 (15:48 +1100)
committerPaul Mackerras <paulus@ozlabs.org>
Fri, 3 Apr 2020 01:10:31 +0000 (12:10 +1100)
This is one step towards ultimately removing the address-based
cache inhibit hack from dcache.vhdl.

Signed-off-by: Paul Mackerras <paulus@ozlabs.org>
hello_world/console.c
hello_world/hello_world.bin
hello_world/hello_world.elf
hello_world/hello_world.hex

index f8e5441f7c7e376581102d7338f9972a5c8b4cc0..8dca8cb7ed4badbe936f5ae304a62923fc0f109d 100644 (file)
@@ -25,23 +25,16 @@ static uint64_t potato_uart_base;
 
 static uint64_t potato_uart_reg_read(int offset)
 {
-       uint64_t addr;
        uint64_t val;
 
-       addr = potato_uart_base + offset;
-
-       val = *(volatile uint64_t *)addr;
+       __asm__ volatile("ldcix %0,%1,%2" : "=r" (val) : "b" (potato_uart_base), "r" (offset));
 
        return val;
 }
 
 static void potato_uart_reg_write(int offset, uint64_t val)
 {
-       uint64_t addr;
-
-       addr = potato_uart_base + offset;
-
-       *(volatile uint64_t *)addr = val;
+       __asm__ volatile("stdcix %0,%1,%2" : : "r" (val), "b" (potato_uart_base), "r" (offset));
 }
 
 static int potato_uart_rx_empty(void)
index 0be528309d864c0d26b86675b7c2fd0fa9da17e4..73bc181a46073d0bccc3f5eb37f54f36447de921 100755 (executable)
Binary files a/hello_world/hello_world.bin and b/hello_world/hello_world.bin differ
index 452bf297682baeee0f1ded02fa2d59ae8eb40442..02a362d1b126d4379cac2550c5e30050b8e5f506 100755 (executable)
Binary files a/hello_world/hello_world.elf and b/hello_world/hello_world.elf differ
index aa27a6bea2b9c14fe9eb159f32ac2407c085fd3c..633e218d369e552e9af2614f7aed3709b00e354f 100644 (file)
@@ -40,7 +40,7 @@ a64b5a7d14004a39
 60211f0064210000
 618c00003d800000
 658c0000798c07c6
-7d8903a6618c113c
+7d8903a6618c1014
 480000004e800421
 0000000000000000
 0000000000000000
@@ -513,74 +513,55 @@ a64b5a7d14004a39
 e8010010ebc1fff0
 7c0803a6ebe1fff8
 3c4000014e800020
+7c0802a63842a000
+3fe2fffffbe1fff8
+f80100103bff71a8
+48000051f821ffd1
+7fe3fb7860000000
+6000000048000139
+7fe3fb787c641b78
+60000000480000e1
+6000000048000065
+480000955463063e
+4bffffec60000000
+0100000000000000
+3c40000100000180
 3d20c0003842a000
 6129200060000000
-f922800079290020
-3940001a3d20c000
-7929002061292018
-4e800020f9490000
+7929002039000018
+3940001af9228000
+4e8000207d4947ea
 0000000000000000
 3c40000100000000
 600000003842a000
-390a0010e9428000
-71290001e9280000
-e86a00084082fff8
-4e8000205463063e
+39000010e9228000
+794707e17d4946ea
+386000084082fff8
+5463063e7c691eea
+000000004e800020
 0000000000000000
-3c40000100000000
-600000003842a000
-390a0010e9428000
-71290008e9280000
-f86a00004082fff8
+3842a0003c400001
+e942800060000000
+7d2a46ea39000010
+4082fff87927efe3
+7c6a4fea39200000
 000000004e800020
 0000000000000000
 3842a0003c400001
 fbc1fff07c0802a6
-7fc32214fbe1fff8
-f80100107c7f1b78
-7fbff040f821ffd1
-38210030409e000c
-887f00004bffff10
-4bffff993bff0001
-000000004bffffe4
+3884fffffbe1fff8
+7fe322143bc3ffff
+f821ffd1f8010010
+419e00107fbef840
+4bffff9d8c7e0001
+382100304bfffff0
+000000004bfffe98
 0000028001000000
 7d4348ae39200000
-409e000c2f8a0000
+419e000c2f8a0000
+4bfffff039290001
 4e8000207d234b78
-4bffffe839290001
 0000000000000000
-3c40000100000000
-7c0802a63842a000
-3fe2fffffbe1fff8
-f80100103bff7190
-4bfffec1f821ffd1
-4bffffad7fe3fb78
-7fe3fb787c641b78
-4bfffee94bffff59
-4bffff195463063e
-000000004bfffff4
-0000018001000000
+0000000000000000
 6f57206f6c6c6548
 0000000a0d646c72
-0000000000000010
-0141780400527a01
-0000001000010c1b
-fffffe5800000018
-0000000000000040
-0000002c00000010
-00000038fffffe84
-0000001000000000
-fffffea800000040
-0000000000000034
-0000005400000028
-00000050fffffec8
-9f029e0041094500
-437e4111300e4401
-4106dedf41000e0a
-000000100000000b
-fffffeec00000080
-000000000000002c
-000000940000001c
-00000054ffffff04
-44019f0041094400
-0000007e4111300e