On Tue, Oct 2, 2012 at 7:58 AM, Olof Kindgren <[email protected]> wrote: > 2012/10/2 Stefan Kristiansson <[email protected]>: >> This way users can override them in their applications >> if desired. >> >> * libgloss/ChangeLog.or1k >> >> 2012-10-02 Stefan Kristiansson <[email protected]> >> >> * or1k/ml501.S: make board globals weak >> * or1k/or1ksim-uart.S: ditto >> * or1k/or1ksim.S: ditto >> * or1k/ordb1a3pe1500.S: ditto >> * or1k/ordb2a.S: ditto >> * or1k/orpsocrefdesign.S: ditto >> --- >> libgloss/ChangeLog.or1k | 9 +++++++++ >> libgloss/or1k/ml501.S | 14 +++++++------- >> libgloss/or1k/or1ksim-uart.S | 14 +++++++------- >> libgloss/or1k/or1ksim.S | 14 +++++++------- >> libgloss/or1k/ordb1a3pe1500.S | 14 +++++++------- >> libgloss/or1k/ordb2a.S | 14 +++++++------- >> libgloss/or1k/orpsocrefdesign.S | 14 +++++++------- >> 7 files changed, 51 insertions(+), 42 deletions(-) >> >> diff --git a/libgloss/ChangeLog.or1k b/libgloss/ChangeLog.or1k >> index 83137c2..b8d07d4 100644 >> --- a/libgloss/ChangeLog.or1k >> +++ b/libgloss/ChangeLog.or1k >> @@ -1,3 +1,12 @@ >> +2012-10-02 Stefan Kristiansson <[email protected]> >> + >> + * or1k/ml501.S: make board globals weak >> + * or1k/or1ksim-uart.S: ditto >> + * or1k/or1ksim.S: ditto >> + * or1k/ordb1a3pe1500.S: ditto >> + * or1k/ordb2a.S: ditto >> + * or1k/orpsocrefdesign.S: ditto >> + >> 2012-06-22 Peter Gavin <[email protected]> >> >> make each board use its own exit routine >> diff --git a/libgloss/or1k/ml501.S b/libgloss/or1k/ml501.S >> index 24b1fbe..edce0bc 100644 >> --- a/libgloss/or1k/ml501.S >> +++ b/libgloss/or1k/ml501.S >> @@ -4,9 +4,9 @@ >> * Define symbols to be used during startup - file is linked at compile time >> * >> */ >> -.global _board_mem_base >> -.global _board_mem_size >> -.global _board_clk_freq >> +.weak _board_mem_base >> +.weak _board_mem_size >> +.weak _board_clk_freq >> >> _board_mem_base: .long 0x0 >> _board_mem_size: .long 0x800000 >> @@ -14,14 +14,14 @@ _board_mem_size: .long 0x800000 >> _board_clk_freq: .long 66666666 >> >> /* Peripheral information - Set base to 0 if not present*/ >> -.global _board_uart_base >> -.global _board_uart_baud >> -.global _board_uart_IRQ >> +.weak _board_uart_base >> +.weak _board_uart_baud >> +.weak _board_uart_IRQ >> >> _board_uart_base: .long 0x90000000 >> _board_uart_baud: .long 115200 >> _board_uart_IRQ: .long 2 >> >> -.global _board_exit >> +.weak _board_exit >> _board_exit: >> OR1K_DELAYED_NOP(l.j _board_exit) >> diff --git a/libgloss/or1k/or1ksim-uart.S b/libgloss/or1k/or1ksim-uart.S >> index 9f4ae22..ecbf0f8 100644 >> --- a/libgloss/or1k/or1ksim-uart.S >> +++ b/libgloss/or1k/or1ksim-uart.S >> @@ -6,9 +6,9 @@ >> * >> */ >> >> -.global _board_mem_base >> -.global _board_mem_size >> -.global _board_clk_freq >> +.weak _board_mem_base >> +.weak _board_mem_size >> +.weak _board_clk_freq >> >> >> _board_mem_base: .long 0x0 >> @@ -17,15 +17,15 @@ _board_clk_freq: .long 100000000 >> >> >> /* Peripheral information - Set base to 0 if not present*/ >> -.global _board_uart_base >> -.global _board_uart_baud >> -.global _board_uart_IRQ >> +.weak _board_uart_base >> +.weak _board_uart_baud >> +.weak _board_uart_IRQ >> >> _board_uart_base: .long 0x90000000 >> _board_uart_baud: .long 115200 >> _board_uart_IRQ: .long 13 >> >> -.global _board_exit >> +.weak _board_exit >> _board_exit: >> l.nop NOP_EXIT_SILENT >> OR1K_DELAYED_NOP(l.j _board_exit) >> diff --git a/libgloss/or1k/or1ksim.S b/libgloss/or1k/or1ksim.S >> index 9c96d10..2c8e804 100644 >> --- a/libgloss/or1k/or1ksim.S >> +++ b/libgloss/or1k/or1ksim.S >> @@ -5,9 +5,9 @@ >> * Define symbols to be used during startup - file is linked at compile time >> * >> */ >> -.global _board_mem_base >> -.global _board_mem_size >> -.global _board_clk_freq >> +.weak _board_mem_base >> +.weak _board_mem_size >> +.weak _board_clk_freq >> >> _board_mem_base: .long 0x0 >> _board_mem_size: .long 0x800000 >> @@ -15,15 +15,15 @@ _board_mem_size: .long 0x800000 >> _board_clk_freq: .long 100000000 >> >> /* Peripheral information - Set base to 0 if not present*/ >> -.global _board_uart_base >> -.global _board_uart_baud >> -.global _board_uart_IRQ >> +.weak _board_uart_base >> +.weak _board_uart_baud >> +.weak _board_uart_IRQ >> >> _board_uart_base: .long 0x0 >> _board_uart_baud: .long 115200 >> _board_uart_IRQ: .long 13 >> >> -.global _board_exit >> +.weak _board_exit >> _board_exit: >> l.nop NOP_EXIT_SILENT >> OR1K_DELAYED_NOP(l.j _board_exit) >> diff --git a/libgloss/or1k/ordb1a3pe1500.S b/libgloss/or1k/ordb1a3pe1500.S >> index 8f01c83..f15c632 100644 >> --- a/libgloss/or1k/ordb1a3pe1500.S >> +++ b/libgloss/or1k/ordb1a3pe1500.S >> @@ -4,9 +4,9 @@ >> * Define symbols to be used during startup - file is linked at compile time >> * >> */ >> -.global _board_mem_base >> -.global _board_mem_size >> -.global _board_clk_freq >> +.weak _board_mem_base >> +.weak _board_mem_size >> +.weak _board_clk_freq >> >> _board_mem_base: .long 0x0 >> _board_mem_size: .long 0x02000000 >> @@ -14,14 +14,14 @@ _board_mem_size: .long 0x02000000 >> _board_clk_freq: .long 20000000 >> >> /* Peripheral information - Set base to 0 if not present*/ >> -.global _board_uart_base >> -.global _board_uart_baud >> -.global _board_uart_IRQ >> +.weak _board_uart_base >> +.weak _board_uart_baud >> +.weak _board_uart_IRQ >> >> _board_uart_base: .long 0x90000000 >> _board_uart_baud: .long 115200 >> _board_uart_IRQ: .long 2 >> >> -.global _board_exit >> +.weak _board_exit >> _board_exit: >> OR1K_DELAYED_NOP(l.j _board_exit) >> diff --git a/libgloss/or1k/ordb2a.S b/libgloss/or1k/ordb2a.S >> index 38d993f..454e5b4 100644 >> --- a/libgloss/or1k/ordb2a.S >> +++ b/libgloss/or1k/ordb2a.S >> @@ -4,9 +4,9 @@ >> * Define symbols to be used during startup - file is linked at compile time >> * Olof Kindgren olof at opencores.org >> */ >> -.global _board_mem_base >> -.global _board_mem_size >> -.global _board_clk_freq >> +.weak _board_mem_base >> +.weak _board_mem_size >> +.weak _board_clk_freq >> >> _board_mem_base: .long 0x0 >> _board_mem_size: .long 0x02000000 >> @@ -14,14 +14,14 @@ _board_mem_size: .long 0x02000000 >> _board_clk_freq: .long 50000000 >> >> /* Peripheral information - Set base to 0 if not present*/ >> -.global _board_uart_base >> -.global _board_uart_baud >> -.global _board_uart_IRQ >> +.weak _board_uart_base >> +.weak _board_uart_baud >> +.weak _board_uart_IRQ >> >> _board_uart_base: .long 0x90000000 >> _board_uart_baud: .long 115200 >> _board_uart_IRQ: .long 2 >> >> -.global _board_exit >> +.weak _board_exit >> _board_exit: >> OR1K_DELAYED_NOP(l.j _board_exit) >> diff --git a/libgloss/or1k/orpsocrefdesign.S >> b/libgloss/or1k/orpsocrefdesign.S >> index 2491857..c102d02 100644 >> --- a/libgloss/or1k/orpsocrefdesign.S >> +++ b/libgloss/or1k/orpsocrefdesign.S >> @@ -4,9 +4,9 @@ >> * Define symbols to be used during startup - file is linked at compile time >> * >> */ >> -.global _board_mem_base >> -.global _board_mem_size >> -.global _board_clk_freq >> +.weak _board_mem_base >> +.weak _board_mem_size >> +.weak _board_clk_freq >> >> _board_mem_base: .long 0x0 >> _board_mem_size: .long 0x800000 >> @@ -14,14 +14,14 @@ _board_mem_size: .long 0x800000 >> _board_clk_freq: .long 50000000 >> >> /* Peripheral information - Set base to 0 if not present*/ >> -.global _board_uart_base >> -.global _board_uart_baud >> -.global _board_uart_IRQ >> +.weak _board_uart_base >> +.weak _board_uart_baud >> +.weak _board_uart_IRQ >> >> _board_uart_base: .long 0 >> _board_uart_baud: .long 115200 >> _board_uart_IRQ: .long 2 >> >> -.global _board_exit >> +.weak _board_exit >> _board_exit: >> OR1K_DELAYED_NOP(l.j _board_exit) >> -- >> 1.7.9.5 >> >> _______________________________________________ >> Openrisc mailing list >> [email protected] >> http://lists.opencores.org/listinfo/openrisc > > This looks good to me. I've been thinking about the same thing.
Agreed, this does look good. I believe we've been meaning to do it for a while? > > In the long run though, I would like to see a small API around the > UART stuff, so that we can override the send and receive functions > directly instead of overriding the base address and IRQ. At present all read and write system calls just go to the UART if there's a valid address for it (non-zero I believe), otherwise it defaults to the l.nops. This code is in the libgloss system call functions, so I guess any selection between various peripherals to handle I/O could be done in there. eg: https://github.com/openrisc/or1k-src/blob/or1k/libgloss/or1k/write.c Cheers Julius _______________________________________________ OpenRISC mailing list [email protected] http://lists.openrisc.net/listinfo/openrisc
