Commit 801cf93c authored by Antonio Nino Diaz's avatar Antonio Nino Diaz
Browse files

Add and use plat_crash_console_flush() API



This API makes sure that all the characters sent to the crash console
are output before returning from it.

Porting guide updated.

Change-Id: I1785f970a40f6aacfbe592b6a911b1f249bb2735
Signed-off-by: default avatarAntonio Nino Diaz <antonio.ninodiaz@arm.com>
parent ad4c2ec6
/* /*
* Copyright (c) 2014-2016, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2014-2017, ARM Limited and Contributors. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
...@@ -349,6 +349,8 @@ func do_crash_reporting ...@@ -349,6 +349,8 @@ func do_crash_reporting
/* Print some platform registers */ /* Print some platform registers */
plat_crash_print_regs plat_crash_print_regs
bl plat_crash_console_flush
/* Done reporting */ /* Done reporting */
no_ret plat_panic_handler no_ret plat_panic_handler
endfunc do_crash_reporting endfunc do_crash_reporting
......
/* /*
* 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 * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
...@@ -70,6 +70,9 @@ func do_panic ...@@ -70,6 +70,9 @@ func do_panic
/* Print new line */ /* Print new line */
ldr r4, =panic_end ldr r4, =panic_end
bl asm_print_str bl asm_print_str
bl plat_crash_console_flush
1: 1:
mov lr, r6 mov lr, r6
b plat_panic_handler b plat_panic_handler
...@@ -140,6 +143,9 @@ dec_print_loop: ...@@ -140,6 +143,9 @@ dec_print_loop:
udiv r5, r5, r6 /* Reduce divisor */ udiv r5, r5, r6 /* Reduce divisor */
cmp r5, #0 cmp r5, #0
bne dec_print_loop bne dec_print_loop
bl plat_crash_console_flush
1: 1:
no_ret plat_panic_handler no_ret plat_panic_handler
endfunc asm_assert endfunc asm_assert
......
/* /*
* Copyright (c) 2014-2016, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2014-2017, ARM Limited and Contributors. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
...@@ -96,6 +96,7 @@ func asm_assert ...@@ -96,6 +96,7 @@ func asm_assert
b.ne _assert_loop b.ne _assert_loop
mov x4, x6 mov x4, x6
asm_print_line_dec asm_print_line_dec
bl plat_crash_console_flush
_assert_loop: _assert_loop:
b _assert_loop b _assert_loop
endfunc asm_assert endfunc asm_assert
...@@ -187,6 +188,8 @@ el3_panic: ...@@ -187,6 +188,8 @@ el3_panic:
sub x4, x4, #4 sub x4, x4, #4
bl asm_print_hex bl asm_print_hex
bl plat_crash_console_flush
_panic_handler: _panic_handler:
/* Pass to plat_panic_handler the address from where el3_panic was /* Pass to plat_panic_handler the address from where el3_panic was
* called, not the address of the call from el3_panic. */ * called, not the address of the call from el3_panic. */
......
...@@ -2228,6 +2228,17 @@ designated crash console. It must only use general purpose registers x1 and ...@@ -2228,6 +2228,17 @@ designated crash console. It must only use general purpose registers x1 and
x2 to do its work. The parameter and the return value are in general purpose x2 to do its work. The parameter and the return value are in general purpose
register x0. register x0.
### Function : plat_crash_console_flush
Argument : void
Return : int
This API is used by the crash reporting mechanism to force write of all buffered
data on the designated crash console. It should only use general purpose
registers x0 and x1 to do its work. The return value is 0 on successful
completion; otherwise the return value is -1.
4. Build flags 4. Build flags
--------------- ---------------
......
...@@ -90,6 +90,7 @@ uintptr_t plat_get_my_stack(void); ...@@ -90,6 +90,7 @@ uintptr_t plat_get_my_stack(void);
void plat_report_exception(unsigned int exception_type); void plat_report_exception(unsigned int exception_type);
int plat_crash_console_init(void); int plat_crash_console_init(void);
int plat_crash_console_putc(int c); int plat_crash_console_putc(int c);
int plat_crash_console_flush(void);
void plat_error_handler(int err) __dead2; void plat_error_handler(int err) __dead2;
void plat_panic_handler(void) __dead2; void plat_panic_handler(void) __dead2;
......
/* /*
* 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 * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
...@@ -31,9 +31,10 @@ ...@@ -31,9 +31,10 @@
#include <platform_def.h> #include <platform_def.h>
.weak plat_arm_calc_core_pos .weak plat_arm_calc_core_pos
.weak plat_crash_console_init
.weak plat_crash_console_putc
.weak plat_my_core_pos .weak plat_my_core_pos
.globl plat_crash_console_init
.globl plat_crash_console_putc
.globl plat_crash_console_flush
/* ----------------------------------------------------- /* -----------------------------------------------------
* unsigned int plat_my_core_pos(void) * unsigned int plat_my_core_pos(void)
...@@ -85,3 +86,16 @@ func plat_crash_console_putc ...@@ -85,3 +86,16 @@ func plat_crash_console_putc
ldr r1, =PLAT_ARM_CRASH_UART_BASE ldr r1, =PLAT_ARM_CRASH_UART_BASE
b console_core_putc b console_core_putc
endfunc plat_crash_console_putc endfunc plat_crash_console_putc
/* ---------------------------------------------
* int plat_crash_console_flush()
* Function to force a write of all buffered
* data that hasn't been output.
* Out : return -1 on error else return 0.
* Clobber list : r0 - r1
* ---------------------------------------------
*/
func plat_crash_console_flush
ldr r1, =PLAT_ARM_CRASH_UART_BASE
b console_core_flush
endfunc plat_crash_console_flush
/* /*
* 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 * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
...@@ -34,6 +34,7 @@ ...@@ -34,6 +34,7 @@
.weak plat_my_core_pos .weak plat_my_core_pos
.globl plat_crash_console_init .globl plat_crash_console_init
.globl plat_crash_console_putc .globl plat_crash_console_putc
.globl plat_crash_console_flush
.globl platform_mem_init .globl platform_mem_init
...@@ -88,6 +89,19 @@ func plat_crash_console_putc ...@@ -88,6 +89,19 @@ func plat_crash_console_putc
b console_core_putc b console_core_putc
endfunc plat_crash_console_putc endfunc plat_crash_console_putc
/* ---------------------------------------------
* int plat_crash_console_flush()
* Function to force a write of all buffered
* data that hasn't been output.
* Out : return -1 on error else return 0.
* Clobber list : r0 - r1
* ---------------------------------------------
*/
func plat_crash_console_flush
mov_imm x1, PLAT_ARM_CRASH_UART_BASE
b console_core_flush
endfunc plat_crash_console_flush
/* --------------------------------------------------------------------- /* ---------------------------------------------------------------------
* We don't need to carry out any memory initialization on ARM * We don't need to carry out any memory initialization on ARM
* platforms. The Secure RAM is accessible straight away. * platforms. The Secure RAM is accessible straight away.
......
/* /*
* 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 * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
...@@ -31,11 +31,43 @@ ...@@ -31,11 +31,43 @@
#include <arch.h> #include <arch.h>
#include <asm_macros.S> #include <asm_macros.S>
.weak plat_crash_console_init
.weak plat_crash_console_putc
.weak plat_crash_console_flush
.weak plat_reset_handler .weak plat_reset_handler
.weak plat_disable_acp .weak plat_disable_acp
.weak platform_mem_init .weak platform_mem_init
.weak plat_panic_handler .weak plat_panic_handler
/* -----------------------------------------------------
* Placeholder function which should be redefined by
* each platform.
* -----------------------------------------------------
*/
func plat_crash_console_init
mov r0, #0
bx lr
endfunc plat_crash_console_init
/* -----------------------------------------------------
* Placeholder function which should be redefined by
* each platform.
* -----------------------------------------------------
*/
func plat_crash_console_putc
bx lr
endfunc plat_crash_console_putc
/* -----------------------------------------------------
* Placeholder function which should be redefined by
* each platform.
* -----------------------------------------------------
*/
func plat_crash_console_flush
mov r0, #0
bx lr
endfunc plat_crash_console_flush
/* ----------------------------------------------------- /* -----------------------------------------------------
* Placeholder function which should be redefined by * Placeholder function which should be redefined by
* each platform. * each platform.
......
/* /*
* 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 * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
...@@ -35,6 +35,7 @@ ...@@ -35,6 +35,7 @@
.weak plat_report_exception .weak plat_report_exception
.weak plat_crash_console_init .weak plat_crash_console_init
.weak plat_crash_console_putc .weak plat_crash_console_putc
.weak plat_crash_console_flush
.weak plat_reset_handler .weak plat_reset_handler
.weak plat_disable_acp .weak plat_disable_acp
.weak bl1_plat_prepare_exit .weak bl1_plat_prepare_exit
...@@ -96,6 +97,15 @@ func plat_crash_console_putc ...@@ -96,6 +97,15 @@ func plat_crash_console_putc
ret ret
endfunc plat_crash_console_putc endfunc plat_crash_console_putc
/* -----------------------------------------------------
* Placeholder function which should be redefined by
* each platform.
* -----------------------------------------------------
*/
func plat_crash_console_flush
ret
endfunc plat_crash_console_flush
/* ----------------------------------------------------- /* -----------------------------------------------------
* Placeholder function which should be redefined by * Placeholder function which should be redefined by
* each platform. This function should preserve x19 - x29. * each platform. This function should preserve x19 - x29.
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment