mirror of
https://github.com/antonblanchard/microwatt.git
synced 2026-05-05 15:54:17 +00:00
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>
This commit is contained in:
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 */
|
||||||
|
|||||||
Reference in New Issue
Block a user