diff --git a/hello_world/Makefile b/hello_world/Makefile index 0cbc69f..f7f9497 100644 --- a/hello_world/Makefile +++ b/hello_world/Makefile @@ -1,7 +1,7 @@ ARCH = $(shell uname -m) ifneq ("$(ARCH)", "ppc64") ifneq ("$(ARCH)", "ppc64le") - CROSS_COMPILE = powerpc64le-linux- + CROSS_COMPILE ?= powerpc64le-linux- endif endif diff --git a/hello_world/console.c b/hello_world/console.c index 640eb48..8dca8cb 100644 --- a/hello_world/console.c +++ b/hello_world/console.c @@ -1,8 +1,8 @@ -#include -#include #include #include +#include "console.h" + /* * Core UART functions to implement for a port */ @@ -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) diff --git a/hello_world/console.h b/hello_world/console.h index 85e7b36..fc64b91 100644 --- a/hello_world/console.h +++ b/hello_world/console.h @@ -1,3 +1,5 @@ +#include + void potato_uart_init(void); int getchar(void); void putchar(unsigned char c); diff --git a/hello_world/hello_world.bin b/hello_world/hello_world.bin index 0be5283..73bc181 100755 Binary files a/hello_world/hello_world.bin and b/hello_world/hello_world.bin differ diff --git a/hello_world/hello_world.c b/hello_world/hello_world.c index f1d1367..7e853d8 100644 --- a/hello_world/hello_world.c +++ b/hello_world/hello_world.c @@ -1,5 +1,3 @@ -#include -#include #include #include diff --git a/hello_world/hello_world.elf b/hello_world/hello_world.elf index 452bf29..02a362d 100755 Binary files a/hello_world/hello_world.elf and b/hello_world/hello_world.elf differ diff --git a/hello_world/hello_world.hex b/hello_world/hello_world.hex index aa27a6b..633e218 100644 --- a/hello_world/hello_world.hex +++ b/hello_world/hello_world.hex @@ -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 diff --git a/tests/Makefile.test b/tests/Makefile.test index a043810..9676370 100644 --- a/tests/Makefile.test +++ b/tests/Makefile.test @@ -1,7 +1,7 @@ ARCH = $(shell uname -m) ifneq ("$(ARCH)", "ppc64") ifneq ("$(ARCH)", "ppc64le") - CROSS_COMPILE = powerpc64le-linux- + CROSS_COMPILE ?= powerpc64le-linux- endif endif diff --git a/tests/decrementer/decrementer.c b/tests/decrementer/decrementer.c index 36ac922..2617a94 100644 --- a/tests/decrementer/decrementer.c +++ b/tests/decrementer/decrementer.c @@ -1,5 +1,4 @@ -#include -#include +#include #include #include diff --git a/tests/illegal/illegal.c b/tests/illegal/illegal.c index 0778ffe..a1ea325 100644 --- a/tests/illegal/illegal.c +++ b/tests/illegal/illegal.c @@ -1,5 +1,4 @@ -#include -#include +#include #include #include diff --git a/tests/sc/sc.c b/tests/sc/sc.c index 67d80b9..2914291 100644 --- a/tests/sc/sc.c +++ b/tests/sc/sc.c @@ -1,5 +1,4 @@ -#include -#include +#include #include #include diff --git a/tests/test_decrementer.bin b/tests/test_decrementer.bin index 9524469..8c3be54 100755 Binary files a/tests/test_decrementer.bin and b/tests/test_decrementer.bin differ diff --git a/tests/test_illegal.bin b/tests/test_illegal.bin index dac5b01..980e2bd 100755 Binary files a/tests/test_illegal.bin and b/tests/test_illegal.bin differ diff --git a/tests/test_sc.bin b/tests/test_sc.bin index 5af07be..6e2d424 100755 Binary files a/tests/test_sc.bin and b/tests/test_sc.bin differ