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

Reply via email to