Merge pull request #157 from paulusmack/master

Start using cache-inhibited loads and stores to access the UART
pull/159/head
Anton Blanchard 5 years ago committed by GitHub
commit e8a55f900f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -1,7 +1,7 @@
ARCH = $(shell uname -m) ARCH = $(shell uname -m)
ifneq ("$(ARCH)", "ppc64") ifneq ("$(ARCH)", "ppc64")
ifneq ("$(ARCH)", "ppc64le") ifneq ("$(ARCH)", "ppc64le")
CROSS_COMPILE = powerpc64le-linux- CROSS_COMPILE ?= powerpc64le-linux-
endif endif
endif endif



@ -1,8 +1,8 @@
#include <unistd.h>
#include <string.h>
#include <stdint.h> #include <stdint.h>
#include <stdbool.h> #include <stdbool.h>


#include "console.h"

/* /*
* Core UART functions to implement for a port * 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) static uint64_t potato_uart_reg_read(int offset)
{ {
uint64_t addr;
uint64_t val; uint64_t val;


addr = potato_uart_base + offset; __asm__ volatile("ldcix %0,%1,%2" : "=r" (val) : "b" (potato_uart_base), "r" (offset));

val = *(volatile uint64_t *)addr;


return val; return val;
} }


static void potato_uart_reg_write(int offset, uint64_t val) static void potato_uart_reg_write(int offset, uint64_t val)
{ {
uint64_t addr; __asm__ volatile("stdcix %0,%1,%2" : : "r" (val), "b" (potato_uart_base), "r" (offset));

addr = potato_uart_base + offset;

*(volatile uint64_t *)addr = val;
} }


static int potato_uart_rx_empty(void) static int potato_uart_rx_empty(void)

@ -1,3 +1,5 @@
#include <stddef.h>

void potato_uart_init(void); void potato_uart_init(void);
int getchar(void); int getchar(void);
void putchar(unsigned char c); void putchar(unsigned char c);

Binary file not shown.

@ -1,5 +1,3 @@
#include <unistd.h>
#include <string.h>
#include <stdint.h> #include <stdint.h>
#include <stdbool.h> #include <stdbool.h>



Binary file not shown.

@ -40,7 +40,7 @@ a64b5a7d14004a39
60211f0064210000 60211f0064210000
618c00003d800000 618c00003d800000
658c0000798c07c6 658c0000798c07c6
7d8903a6618c113c 7d8903a6618c1014
480000004e800421 480000004e800421
0000000000000000 0000000000000000
0000000000000000 0000000000000000
@ -513,74 +513,55 @@ a64b5a7d14004a39
e8010010ebc1fff0 e8010010ebc1fff0
7c0803a6ebe1fff8 7c0803a6ebe1fff8
3c4000014e800020 3c4000014e800020
7c0802a63842a000
3fe2fffffbe1fff8
f80100103bff71a8
48000051f821ffd1
7fe3fb7860000000
6000000048000139
7fe3fb787c641b78
60000000480000e1
6000000048000065
480000955463063e
4bffffec60000000
0100000000000000
3c40000100000180
3d20c0003842a000 3d20c0003842a000
6129200060000000 6129200060000000
f922800079290020 7929002039000018
3940001a3d20c000 3940001af9228000
7929002061292018 4e8000207d4947ea
4e800020f9490000
0000000000000000 0000000000000000
3c40000100000000 3c40000100000000
600000003842a000 600000003842a000
390a0010e9428000 39000010e9228000
71290001e9280000 794707e17d4946ea
e86a00084082fff8 386000084082fff8
4e8000205463063e 5463063e7c691eea
000000004e800020
0000000000000000 0000000000000000
3c40000100000000 3842a0003c400001
600000003842a000 e942800060000000
390a0010e9428000 7d2a46ea39000010
71290008e9280000 4082fff87927efe3
f86a00004082fff8 7c6a4fea39200000
000000004e800020 000000004e800020
0000000000000000 0000000000000000
3842a0003c400001 3842a0003c400001
fbc1fff07c0802a6 fbc1fff07c0802a6
7fc32214fbe1fff8 3884fffffbe1fff8
f80100107c7f1b78 7fe322143bc3ffff
7fbff040f821ffd1 f821ffd1f8010010
38210030409e000c 419e00107fbef840
887f00004bffff10 4bffff9d8c7e0001
4bffff993bff0001 382100304bfffff0
000000004bffffe4 000000004bfffe98
0000028001000000 0000028001000000
7d4348ae39200000 7d4348ae39200000
409e000c2f8a0000 419e000c2f8a0000
4bfffff039290001
4e8000207d234b78 4e8000207d234b78
4bffffe839290001
0000000000000000 0000000000000000
3c40000100000000 0000000000000000
7c0802a63842a000
3fe2fffffbe1fff8
f80100103bff7190
4bfffec1f821ffd1
4bffffad7fe3fb78
7fe3fb787c641b78
4bfffee94bffff59
4bffff195463063e
000000004bfffff4
0000018001000000
6f57206f6c6c6548 6f57206f6c6c6548
0000000a0d646c72 0000000a0d646c72
0000000000000010
0141780400527a01
0000001000010c1b
fffffe5800000018
0000000000000040
0000002c00000010
00000038fffffe84
0000001000000000
fffffea800000040
0000000000000034
0000005400000028
00000050fffffec8
9f029e0041094500
437e4111300e4401
4106dedf41000e0a
000000100000000b
fffffeec00000080
000000000000002c
000000940000001c
00000054ffffff04
44019f0041094400
0000007e4111300e

@ -1,7 +1,7 @@
ARCH = $(shell uname -m) ARCH = $(shell uname -m)
ifneq ("$(ARCH)", "ppc64") ifneq ("$(ARCH)", "ppc64")
ifneq ("$(ARCH)", "ppc64le") ifneq ("$(ARCH)", "ppc64le")
CROSS_COMPILE = powerpc64le-linux- CROSS_COMPILE ?= powerpc64le-linux-
endif endif
endif endif



@ -1,5 +1,4 @@
#include <unistd.h> #include <stddef.h>
#include <string.h>
#include <stdint.h> #include <stdint.h>
#include <stdbool.h> #include <stdbool.h>



@ -1,5 +1,4 @@
#include <unistd.h> #include <stddef.h>
#include <string.h>
#include <stdint.h> #include <stdint.h>
#include <stdbool.h> #include <stdbool.h>



@ -1,5 +1,4 @@
#include <unistd.h> #include <stddef.h>
#include <string.h>
#include <stdint.h> #include <stdint.h>
#include <stdbool.h> #include <stdbool.h>



Binary file not shown.

Binary file not shown.

Binary file not shown.
Loading…
Cancel
Save