int main(void)
{
- potato_uart_init();
+ console_init();
puts(HELLO_WORLD);
7c0803a6ebe1fff8
3c4000014e800020
7c0802a63842a000
-3fe2fffffbe1fff8
-f80100103bff7240
-48000051f821ffd1
-7fe3fb7860000000
-60000000480001d5
-7fe3fb787c641b78
-600000004800017d
-60000000480000ed
-480001295463063e
+f821ffe1f8010010
+6000000048000229
+386372783c62ffff
+600000004800018d
+60000000480000f9
+480001355463063e
4bffffec60000000
0100000000000000
-3c40000100000180
+3c40000100000080
3d20c0003842a000
6129200060000000
f922800079290020
612900203d20c000
7c0004ac79290020
3d40001c7d204eea
-7d295392614a2000
-394a0018e9428000
-7c0004ac3929ffff
+614a200079290600
+e94280007d295392
+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
0000000000000000
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
fbe1fff8fbc1fff0
-7c7f1b787fc32214
-f821ffd1f8010010
-409e000c7fbff040
-4bfffe0c38210030
-3bff0001887f0000
-4bffffe44bffff8d
+f80100103bc3ffff
+8ffe0001f821ffd1
+409e00102fbf0000
+3860000038210030
+2b9f000a4bfffe10
+3860000d409e000c
+7fe3fb784bffff81
+4bffffd04bffff79
0100000000000000
3920000000000280
2f8a00007d4348ae
392900014e800020
000000004bffffe8
0000000000000000
+3842a0003c400001
+000000004bfffe1c
+0000000000000000
+3842a0003c400001
+000000004bfffe68
+0000000000000000
6f57206f6c6c6548
-0000000a0d646c72
+000000000a646c72
#include <stddef.h>
-void potato_uart_init(void);
-void potato_uart_irq_en(void);
-void potato_uart_irq_dis(void);
+void console_init(void);
+void console_set_irq_en(bool rx_irq, bool tx_irq);
int getchar(void);
int putchar(int c);
int puts(const char *str);
#define POTATO_CONSOLE_STATUS_TX_FULL 0x08
#define POTATO_CONSOLE_CLOCK_DIV 0x18
#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
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)
return len;
}
#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);
+}
bool try_flash = false;
/* Init the UART */
- potato_uart_init();
+ console_init();
printf("\n\nWelcome to Microwatt !\n\n");
int main(void)
{
init_bss();
- potato_uart_init();
+ console_init();
puts(HELLO_WORLD);
{
int fail = 0;
- potato_uart_init();
+ console_init();
print_test_number(1);
if (dec_test_1() != 0) {
{
int fail = 0;
- potato_uart_init();
+ console_init();
print_test_number(1);
if (ill_test_1() != 0) {
{
int fail = 0;
- potato_uart_init();
+ console_init();
print_test_number(1);
if (test_addpcis_1() != 0) {
int main(void)
{
- potato_uart_init();
+ console_init();
init_mmu();
do_test(1, mmu_test_1);
int main(void)
{
- potato_uart_init();
+ console_init();
init_mmu();
map(0x2000, 0x2000, REF | CHG | PERM_RD | PERM_EX); /* map code page */
map(0x7000, 0x7000, REF | CHG | PERM_RD | PERM_WR); /* map stack page */
{
int fail = 0;
- potato_uart_init();
+ console_init();
print_test_number(1);
if (sc_test_1() != 0) {
void uart_isr(void) {
debug_puts(UART);
- potato_uart_irq_dis(); // disable interrupt to ack it
+ console_set_irq_en(false, false);
isrs_run |= ISR_UART;
}
icp_write8(XICS_XIRR, 0x00); // mask all 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
icp_write8(XICS_MFRR, 0x04); // cause ipi interrupt at prio 5
// cleanup
icp_write8(XICS_XIRR, 0x00); // mask all interrupts
- potato_uart_irq_dis();
+ console_set_irq_en(false, false);
ics_write_xive(0, 0xff);
isrs_run = 0;
assert(isrs_run == 0);
// trigger both
- potato_uart_irq_en(); // cause 0x500 interrupt
+ console_set_irq_en(true, true);
icp_write8(XICS_MFRR, 0x05); // cause 0x500 interrupt
delay();
// cleanup
icp_write8(XICS_XIRR, 0x00); // mask all interrupts
- potato_uart_irq_dis();
+ console_set_irq_en(false, false);
isrs_run = 0;
return 0;
int i = 0;
int (*t)(void);
- potato_uart_init();
+ console_init();
ipi_running = false;
/* run the tests */