console: Cleanup console API

Use a more generic console_init() instead of potato_uart_init(),
and do the same for interrupt control. There should be no
change in behaviour.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
jtag-port
Benjamin Herrenschmidt 5 years ago
parent 7575b1e0c2
commit e3941109af

Binary file not shown.

@ -7,7 +7,7 @@


int main(void) int main(void)
{ {
potato_uart_init(); console_init();


puts(HELLO_WORLD); puts(HELLO_WORLD);



Binary file not shown.

@ -514,67 +514,68 @@ e8010010ebc1fff0
7c0803a6ebe1fff8 7c0803a6ebe1fff8
3c4000014e800020 3c4000014e800020
7c0802a63842a000 7c0802a63842a000
3fe2fffffbe1fff8 f821ffe1f8010010
f80100103bff7240 6000000048000229
48000051f821ffd1 386372783c62ffff
7fe3fb7860000000 600000004800018d
60000000480001d5 60000000480000f9
7fe3fb787c641b78 480001355463063e
600000004800017d
60000000480000ed
480001295463063e
4bffffec60000000 4bffffec60000000
0100000000000000 0100000000000000
3c40000100000180 3c40000100000080
3d20c0003842a000 3d20c0003842a000
6129200060000000 6129200060000000
f922800079290020 f922800079290020
612900203d20c000 612900203d20c000
7c0004ac79290020 7c0004ac79290020
3d40001c7d204eea 3d40001c7d204eea
7d295392614a2000 614a200079290600
394a0018e9428000 e94280007d295392
7c0004ac3929ffff 3929ffff394a0018
7d2057ea7c0004ac
000000004e800020
0000000000000000
3842a0003c400001
419e00082fa40000
6000000060630002
39290020e9228000
7c604fea7c0004ac
000000004e800020
0000000000000000
3842a0003c400001
e922800060000000
3929002039400000
7d404fea7c0004ac
000000004e800020
0000000000000000
3842a0003c400001
e922800060000000
7c0004ac39290010
712900017d204eea
e86280004082ffe8
7c0004ac38630008
5463063e7c601eea
000000004e800020
0000000000000000
3842a0003c400001
e922800060000000
7c0004ac39290010
712900087d204eea
5469063e4082ffe8
7c0004ace9428000
4e8000207d2057ea 4e8000207d2057ea
0000000000000000 0000000000000000
3c40000100000000 3c40000100000000
600000003842a000
394000ffe9228000
7c0004ac39290020
4e8000207d404fea
0000000000000000
3c40000100000000
600000003842a000
39400000e9228000
7c0004ac39290020
4e8000207d404fea
0000000000000000
3c40000100000000
600000003842a000
39290010e9228000
7d204eea7c0004ac
4082ffe871290001
38630008e8628000
7c601eea7c0004ac
4e8000205463063e
0000000000000000
3c40000100000000
600000003842a000
39290010e9228000
7d204eea7c0004ac
4082ffe871290008
7c0004ace9228000
4e8000207c604fea
0000000000000000
3c40000100000000
7c0802a63842a000 7c0802a63842a000
fbe1fff8fbc1fff0 fbe1fff8fbc1fff0
7c7f1b787fc32214 f80100103bc3ffff
f821ffd1f8010010 8ffe0001f821ffd1
409e000c7fbff040 409e00102fbf0000
4bfffe0c38210030 3860000038210030
3bff0001887f0000 2b9f000a4bfffe10
4bffffe44bffff8d 3860000d409e000c
7fe3fb784bffff81
4bffffd04bffff79
0100000000000000 0100000000000000
3920000000000280 3920000000000280
2f8a00007d4348ae 2f8a00007d4348ae
@ -582,5 +583,11 @@ f821ffd1f8010010
392900014e800020 392900014e800020
000000004bffffe8 000000004bffffe8
0000000000000000 0000000000000000
3842a0003c400001
000000004bfffe1c
0000000000000000
3842a0003c400001
000000004bfffe68
0000000000000000
6f57206f6c6c6548 6f57206f6c6c6548
0000000a0d646c72 000000000a646c72

@ -1,8 +1,7 @@
#include <stddef.h> #include <stddef.h>


void potato_uart_init(void); void console_init(void);
void potato_uart_irq_en(void); void console_set_irq_en(bool rx_irq, bool tx_irq);
void potato_uart_irq_dis(void);
int getchar(void); int getchar(void);
int putchar(int c); int putchar(int c);
int puts(const char *str); int puts(const char *str);

@ -69,6 +69,8 @@
#define POTATO_CONSOLE_STATUS_TX_FULL 0x08 #define POTATO_CONSOLE_STATUS_TX_FULL 0x08
#define POTATO_CONSOLE_CLOCK_DIV 0x18 #define POTATO_CONSOLE_CLOCK_DIV 0x18
#define POTATO_CONSOLE_IRQ_EN 0x20 #define POTATO_CONSOLE_IRQ_EN 0x20
#define POTATO_CONSOLE_IRQ_RX 0x01
#define POTATO_CONSOLE_IRQ_TX 0x02


/* /*
* Register definitionss for our standard (16550 style) UART * Register definitionss for our standard (16550 style) UART

@ -80,9 +80,15 @@ void potato_uart_init(void)
potato_uart_reg_write(POTATO_CONSOLE_CLOCK_DIV, potato_uart_divisor(proc_freq, UART_FREQ)); potato_uart_reg_write(POTATO_CONSOLE_CLOCK_DIV, potato_uart_divisor(proc_freq, UART_FREQ));
} }


void potato_uart_irq_en(void) void potato_uart_set_irq_en(bool rx_irq, bool tx_irq)
{ {
potato_uart_reg_write(POTATO_CONSOLE_IRQ_EN, 0xff); uint64_t en = 0;

if (rx_irq)
en |= POTATO_CONSOLE_IRQ_RX;
if (tx_irq)
en |= POTATO_CONSOLE_IRQ_TX;
potato_uart_reg_write(POTATO_CONSOLE_IRQ_EN, en);
} }


void potato_uart_irq_dis(void) void potato_uart_irq_dis(void)
@ -131,3 +137,13 @@ size_t strlen(const char *s)
return len; return len;
} }
#endif #endif

void console_init(void)
{
potato_uart_init();
}

void console_set_irq_en(bool rx_irq, bool tx_irq)
{
potato_uart_set_irq_en(rx_irq, tx_irq);
}

@ -241,7 +241,7 @@ uint64_t main(void)
bool try_flash = false; bool try_flash = false;


/* Init the UART */ /* Init the UART */
potato_uart_init(); console_init();


printf("\n\nWelcome to Microwatt !\n\n"); printf("\n\nWelcome to Microwatt !\n\n");



@ -25,7 +25,7 @@ void init_bss()
int main(void) int main(void)
{ {
init_bss(); init_bss();
potato_uart_init(); console_init();


puts(HELLO_WORLD); puts(HELLO_WORLD);



@ -25,7 +25,7 @@ int main(void)
{ {
int fail = 0; int fail = 0;


potato_uart_init(); console_init();


print_test_number(1); print_test_number(1);
if (dec_test_1() != 0) { if (dec_test_1() != 0) {

@ -23,7 +23,7 @@ int main(void)
{ {
int fail = 0; int fail = 0;


potato_uart_init(); console_init();


print_test_number(1); print_test_number(1);
if (ill_test_1() != 0) { if (ill_test_1() != 0) {

@ -24,7 +24,7 @@ int main(void)
{ {
int fail = 0; int fail = 0;


potato_uart_init(); console_init();


print_test_number(1); print_test_number(1);
if (test_addpcis_1() != 0) { if (test_addpcis_1() != 0) {

@ -661,7 +661,7 @@ void do_test(int num, int (*test)(void))


int main(void) int main(void)
{ {
potato_uart_init(); console_init();
init_mmu(); init_mmu();


do_test(1, mmu_test_1); do_test(1, mmu_test_1);

@ -228,7 +228,7 @@ void do_test(int num, int (*fn)(unsigned long))


int main(void) int main(void)
{ {
potato_uart_init(); console_init();
init_mmu(); init_mmu();
map(0x2000, 0x2000, REF | CHG | PERM_RD | PERM_EX); /* map code page */ map(0x2000, 0x2000, REF | CHG | PERM_RD | PERM_EX); /* map code page */
map(0x7000, 0x7000, REF | CHG | PERM_RD | PERM_WR); /* map stack page */ map(0x7000, 0x7000, REF | CHG | PERM_RD | PERM_WR); /* map stack page */

@ -23,7 +23,7 @@ int main(void)
{ {
int fail = 0; int fail = 0;


potato_uart_init(); console_init();


print_test_number(1); print_test_number(1);
if (sc_test_1() != 0) { if (sc_test_1() != 0) {

@ -83,7 +83,7 @@ void ipi_isr(void) {
void uart_isr(void) { void uart_isr(void) {
debug_puts(UART); debug_puts(UART);


potato_uart_irq_dis(); // disable interrupt to ack it console_set_irq_en(false, false);


isrs_run |= ISR_UART; isrs_run |= ISR_UART;
} }
@ -202,7 +202,7 @@ int xics_test_1(void)
icp_write8(XICS_XIRR, 0x00); // mask all interrupts icp_write8(XICS_XIRR, 0x00); // mask all interrupts


// trigger two interrupts // trigger two interrupts
potato_uart_irq_en(); // cause serial interrupt console_set_irq_en(true,true);// cause serial interrupt
ics_write_xive(0x6, 0); // set source to prio 6 ics_write_xive(0x6, 0); // set source to prio 6
icp_write8(XICS_MFRR, 0x04); // cause ipi interrupt at prio 5 icp_write8(XICS_MFRR, 0x04); // cause ipi interrupt at prio 5


@ -222,7 +222,7 @@ int xics_test_1(void)


// cleanup // cleanup
icp_write8(XICS_XIRR, 0x00); // mask all interrupts icp_write8(XICS_XIRR, 0x00); // mask all interrupts
potato_uart_irq_dis(); console_set_irq_en(false, false);
ics_write_xive(0, 0xff); ics_write_xive(0, 0xff);
isrs_run = 0; isrs_run = 0;


@ -242,7 +242,7 @@ int xics_test_2(void)
assert(isrs_run == 0); assert(isrs_run == 0);


// trigger both // trigger both
potato_uart_irq_en(); // cause 0x500 interrupt console_set_irq_en(true, true);
icp_write8(XICS_MFRR, 0x05); // cause 0x500 interrupt icp_write8(XICS_MFRR, 0x05); // cause 0x500 interrupt


delay(); delay();
@ -250,7 +250,7 @@ int xics_test_2(void)


// cleanup // cleanup
icp_write8(XICS_XIRR, 0x00); // mask all interrupts icp_write8(XICS_XIRR, 0x00); // mask all interrupts
potato_uart_irq_dis(); console_set_irq_en(false, false);
isrs_run = 0; isrs_run = 0;


return 0; return 0;
@ -307,7 +307,7 @@ int main(void)
int i = 0; int i = 0;
int (*t)(void); int (*t)(void);


potato_uart_init(); console_init();
ipi_running = false; ipi_running = false;


/* run the tests */ /* run the tests */

Loading…
Cancel
Save