mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-16 09:34:18 +00:00
Add console_flush() to console API
This function ensures that console output is flushed, for example before shutting down or use by another component In line with other console APIs, console_flush() wraps console_core_flush(). Also implement console_core_flush() for PL011. Change-Id: I3db365065e4de04a454a5c2ce21be335a23a01e4 Signed-off-by: Antonio Nino Diaz <antonio.ninodiaz@arm.com>
This commit is contained in:
parent
e422f991df
commit
73e052846a
7 changed files with 133 additions and 7 deletions
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2016-2017, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
|
@ -40,6 +40,7 @@
|
|||
.globl console_core_init
|
||||
.globl console_core_putc
|
||||
.globl console_core_getc
|
||||
.globl console_core_flush
|
||||
|
||||
|
||||
/* -----------------------------------------------
|
||||
|
@ -158,3 +159,29 @@ getc_error:
|
|||
mov r0, #-1
|
||||
bx lr
|
||||
endfunc console_core_getc
|
||||
|
||||
/* ---------------------------------------------
|
||||
* int console_core_flush(uintptr_t base_addr)
|
||||
* Function to force a write of all buffered
|
||||
* data that hasn't been output.
|
||||
* In : r0 - console base address
|
||||
* Out : return -1 on error else return 0.
|
||||
* Clobber list : r0, r1
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
func console_core_flush
|
||||
cmp r0, #0
|
||||
beq flush_error
|
||||
|
||||
1:
|
||||
/* Loop while the transmit FIFO is busy */
|
||||
ldr r1, [r0, #UARTFR]
|
||||
tst r1, #PL011_UARTFR_BUSY
|
||||
bne 1b
|
||||
|
||||
mov r0, #0
|
||||
bx lr
|
||||
flush_error:
|
||||
mov r0, #-1
|
||||
bx lr
|
||||
endfunc console_core_flush
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2013-2016, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2013-2017, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
|
@ -41,6 +41,7 @@
|
|||
.globl console_core_init
|
||||
.globl console_core_putc
|
||||
.globl console_core_getc
|
||||
.globl console_core_flush
|
||||
|
||||
|
||||
/* -----------------------------------------------
|
||||
|
@ -151,3 +152,27 @@ getc_error:
|
|||
mov w0, #-1
|
||||
ret
|
||||
endfunc console_core_getc
|
||||
|
||||
/* ---------------------------------------------
|
||||
* int console_core_flush(uintptr_t base_addr)
|
||||
* Function to force a write of all buffered
|
||||
* data that hasn't been output.
|
||||
* In : x0 - console base address
|
||||
* Out : return -1 on error else return 0.
|
||||
* Clobber list : x0, x1
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
func console_core_flush
|
||||
cbz x0, flush_error
|
||||
|
||||
1:
|
||||
/* Loop until the transmit FIFO is empty */
|
||||
ldr w1, [x0, #UARTFR]
|
||||
tbnz w1, #PL011_UARTFR_BUSY_BIT, 1b
|
||||
|
||||
mov w0, #0
|
||||
ret
|
||||
flush_error:
|
||||
mov w0, #-1
|
||||
ret
|
||||
endfunc console_core_flush
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2016-2017, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
|
@ -33,6 +33,7 @@
|
|||
.globl console_uninit
|
||||
.globl console_putc
|
||||
.globl console_getc
|
||||
.globl console_flush
|
||||
|
||||
/*
|
||||
* The console base is in the data section and not in .bss
|
||||
|
@ -112,3 +113,18 @@ func console_getc
|
|||
ldr r0, [r1]
|
||||
b console_core_getc
|
||||
endfunc console_getc
|
||||
|
||||
/* ---------------------------------------------
|
||||
* int console_flush(void)
|
||||
* Function to force a write of all buffered
|
||||
* data that hasn't been output. It returns 0
|
||||
* upon successful completion, otherwise it
|
||||
* returns -1.
|
||||
* Clobber list : r0, r1
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
func console_flush
|
||||
ldr r1, =console_base
|
||||
ldr r0, [r1]
|
||||
b console_core_flush
|
||||
endfunc console_flush
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2016, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2016-2017, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
|
@ -38,6 +38,7 @@
|
|||
.globl console_core_init
|
||||
.globl console_core_putc
|
||||
.globl console_core_getc
|
||||
.globl console_core_flush
|
||||
|
||||
/* -----------------------------------------------
|
||||
* int console_core_init(uintptr_t base_addr,
|
||||
|
@ -109,3 +110,23 @@ getc_error:
|
|||
mov r0, #-1
|
||||
bx lr
|
||||
endfunc console_core_getc
|
||||
|
||||
/* ---------------------------------------------
|
||||
* int console_core_flush(uintptr_t base_addr)
|
||||
* Function to force a write of all buffered
|
||||
* data that hasn't been output.
|
||||
* In : r0 - console base address
|
||||
* Out : return -1 on error else return 0.
|
||||
* Clobber list : r0, r1
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
func console_core_flush
|
||||
cmp r0, #0
|
||||
beq flush_error
|
||||
/* Insert implementation here */
|
||||
mov r0, #0
|
||||
bx lr
|
||||
flush_error:
|
||||
mov r0, #-1
|
||||
bx lr
|
||||
endfunc console_core_flush
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2015-2016, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
|
@ -33,6 +33,7 @@
|
|||
.globl console_uninit
|
||||
.globl console_putc
|
||||
.globl console_getc
|
||||
.globl console_flush
|
||||
|
||||
/*
|
||||
* The console base is in the data section and not in .bss
|
||||
|
@ -111,3 +112,18 @@ func console_getc
|
|||
ldr x0, [x1, :lo12:console_base]
|
||||
b console_core_getc
|
||||
endfunc console_getc
|
||||
|
||||
/* ---------------------------------------------
|
||||
* int console_flush(void)
|
||||
* Function to force a write of all buffered
|
||||
* data that hasn't been output. It returns 0
|
||||
* upon successful completion, otherwise it
|
||||
* returns -1.
|
||||
* Clobber list : x0, x1
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
func console_flush
|
||||
adrp x1, console_base
|
||||
ldr x0, [x1, :lo12:console_base]
|
||||
b console_core_flush
|
||||
endfunc console_flush
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2015-2016, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2015-2017, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
|
@ -38,6 +38,7 @@
|
|||
.globl console_core_init
|
||||
.globl console_core_putc
|
||||
.globl console_core_getc
|
||||
.globl console_core_flush
|
||||
|
||||
/* -----------------------------------------------
|
||||
* int console_core_init(uintptr_t base_addr,
|
||||
|
@ -104,3 +105,22 @@ getc_error:
|
|||
mov w0, #-1
|
||||
ret
|
||||
endfunc console_core_getc
|
||||
|
||||
/* ---------------------------------------------
|
||||
* int console_core_flush(uintptr_t base_addr)
|
||||
* Function to force a write of all buffered
|
||||
* data that hasn't been output.
|
||||
* In : x0 - console base address
|
||||
* Out : return -1 on error else return 0.
|
||||
* Clobber list : x0, x1
|
||||
* ---------------------------------------------
|
||||
*/
|
||||
func console_core_flush
|
||||
cbz x0, flush_error
|
||||
/* Insert implementation here */
|
||||
mov w0, #0
|
||||
ret
|
||||
flush_error:
|
||||
mov w0, #-1
|
||||
ret
|
||||
endfunc console_core_flush
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2013-2014, ARM Limited and Contributors. All rights reserved.
|
||||
* Copyright (c) 2013-2017, ARM Limited and Contributors. All rights reserved.
|
||||
*
|
||||
* Redistribution and use in source and binary forms, with or without
|
||||
* modification, are permitted provided that the following conditions are met:
|
||||
|
@ -38,6 +38,7 @@ int console_init(uintptr_t base_addr,
|
|||
void console_uninit(void);
|
||||
int console_putc(int c);
|
||||
int console_getc(void);
|
||||
int console_flush(void);
|
||||
|
||||
#endif /* __CONSOLE_H__ */
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue