Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Arm Trusted Firmware
Commits
6d264afc
Commit
6d264afc
authored
Nov 15, 2018
by
Yann Gautier
Browse files
drivers: st: update console driver to support MULTI_CONSOLE_API
Signed-off-by:
Yann Gautier
<
yann.gautier@st.com
>
parent
8244d226
Changes
2
Hide whitespace changes
Inline
Side-by-side
drivers/st/uart/aarch32/stm32_console.S
View file @
6d264afc
...
...
@@ -4,14 +4,27 @@
*
SPDX
-
License
-
Identifier
:
BSD
-
3
-
Clause
*/
#include <asm_macros.S>
#include <assert_macros.S>
#define USE_FINISH_CONSOLE_REG_2
#include <console_macros.S>
#include <stm32_console.h>
#include <stm32_uart_regs.h>
#define USART_TIMEOUT 0x1000
.
globl
console_core_init
.
globl
console_core_putc
.
globl
console_core_getc
.
globl
console_core_flush
/
*
*
"core"
functions
are
low
-
level
implementations
that
don
't require
*
writeable
memory
and
are
thus
safe
to
call
in
BL1
crash
context
.
*/
.
globl
console_stm32_core_init
.
globl
console_stm32_core_putc
.
globl
console_stm32_core_getc
.
globl
console_stm32_core_flush
.
globl
console_stm32_putc
.
globl
console_stm32_flush
/
*
-----------------------------------------------------------------
*
int
console_core_init
(
uintptr_t
base_addr
,
...
...
@@ -29,7 +42,7 @@
*
Clobber
list
:
r1
,
r2
,
r3
*
-----------------------------------------------------------------
*/
func
console_core_init
func
console_
stm32_
core_init
/
*
Check
the
input
base
address
*/
cmp
r0
,
#
0
beq
core_init_fail
...
...
@@ -72,7 +85,54 @@ teack_loop:
core_init_fail
:
mov
r0
,
#
0
bx
lr
endfunc
console_core_init
endfunc
console_stm32_core_init
#if MULTI_CONSOLE_API
.
globl
console_stm32_register
/
*
-------------------------------------------------------
*
int
console_stm32_register
(
uintptr_t
baseaddr
,
*
uint32_t
clock
,
uint32_t
baud
,
*
struct
console_stm32
*
console
)
;
*
Function
to
initialize
and
register
a
new
STM32
*
console
.
Storage
passed
in
for
the
console
struct
*
*
must
*
be
persistent
(
i
.
e
.
not
from
the
stack
)
.
*
In
:
r0
-
UART
register
base
address
*
r1
-
UART
clock
in
Hz
*
r2
-
Baud
rate
*
r3
-
pointer
to
empty
console_stm32
struct
*
Out
:
return
1
on
success
,
0
on
error
*
Clobber
list
:
r0
,
r1
,
r2
*
-------------------------------------------------------
*/
func
console_stm32_register
push
{
r4
,
lr
}
mov
r4
,
r3
cmp
r4
,
#
0
beq
register_fail
str
r0
,
[
r4
,
#
CONSOLE_T_STM32_BASE
]
bl
console_stm32_core_init
cmp
r0
,
#
0
beq
register_fail
mov
r0
,
r4
pop
{
r4
,
lr
}
finish_console_register
stm32
putc
=
1
,
getc
=
0
,
flush
=
1
register_fail
:
pop
{
r4
,
pc
}
endfunc
console_stm32_register
#else
.
globl
console_core_init
.
globl
console_core_putc
.
globl
console_core_getc
.
globl
console_core_flush
.
equ
console_core_init
,
console_stm32_core_init
.
equ
console_core_putc
,
console_stm32_core_putc
.
equ
console_core_getc
,
console_stm32_core_getc
.
equ
console_core_flush
,
console_stm32_core_flush
#endif
/
*
---------------------------------------------------------------
*
int
console_core_putc
(
int
c
,
uintptr_t
base_addr
)
...
...
@@ -86,7 +146,7 @@ endfunc console_core_init
*
Clobber
list
:
r2
*
---------------------------------------------------------------
*/
func
console_core_putc
func
console_
stm32_
core_putc
/
*
Check
the
input
parameter
*/
cmp
r1
,
#
0
beq
putc_error
...
...
@@ -122,7 +182,26 @@ tc_loop_2:
putc_error
:
mov
r0
,
#-
1
bx
lr
endfunc
console_core_putc
endfunc
console_stm32_core_putc
/
*
------------------------------------------------------------
*
int
console_stm32_putc
(
int
c
,
struct
console_stm32
*
console
)
*
Function
to
output
a
character
over
the
console
.
It
*
returns
the
character
printed
on
success
or
-
1
on
error
.
*
In
:
r0
-
character
to
be
printed
*
r1
-
pointer
to
console_t
structure
*
Out
:
return
-
1
on
error
else
return
character
.
*
Clobber
list
:
r2
*
------------------------------------------------------------
*/
func
console_stm32_putc
#if ENABLE_ASSERTIONS
cmp
r1
,
#
0
ASM_ASSERT
(
ne
)
#endif /* ENABLE_ASSERTIONS */
ldr
r1
,
[
r1
,
#
CONSOLE_T_STM32_BASE
]
b
console_stm32_core_putc
endfunc
console_stm32_putc
/
*
-----------------------------------------------------------
*
int
console_core_getc
(
uintptr_t
base_addr
)
...
...
@@ -135,11 +214,11 @@ endfunc console_core_putc
*
Clobber
list
:
r0
,
r1
*
-----------------------------------------------------------
*/
func
console_core_getc
func
console_
stm32_
core_getc
/
*
Not
supported
*/
mov
r0
,
#-
1
bx
lr
endfunc
console_core_getc
endfunc
console_
stm32_
core_getc
/
*
---------------------------------------------------------------
*
int
console_core_flush
(
uintptr_t
base_addr
)
...
...
@@ -152,7 +231,7 @@ endfunc console_core_getc
*
Clobber
list
:
r0
,
r1
*
---------------------------------------------------------------
*/
func
console_core_flush
func
console_
stm32_
core_flush
cmp
r0
,
#
0
beq
flush_error
/
*
Check
Transmit
Data
Register
Empty
*/
...
...
@@ -165,4 +244,22 @@ txe_loop_3:
flush_error
:
mov
r0
,
#-
1
bx
lr
endfunc
console_core_flush
endfunc
console_stm32_core_flush
/
*
------------------------------------------------------
*
int
console_stm32_flush
(
struct
console_stm32
*
console
)
*
Function
to
force
a
write
of
all
buffered
*
data
that
hasn
't been output.
*
In
:
r0
-
pointer
to
console_t
structure
*
Out
:
return
-
1
on
error
else
return
0
.
*
Clobber
list
:
r0
,
r1
*
------------------------------------------------------
*/
func
console_stm32_flush
#if ENABLE_ASSERTIONS
cmp
r0
,
#
0
ASM_ASSERT
(
ne
)
#endif /* ENABLE_ASSERTIONS */
ldr
r0
,
[
r0
,
#
CONSOLE_T_STM32_BASE
]
b
console_stm32_core_flush
endfunc
console_stm32_flush
include/drivers/st/stm32_console.h
0 → 100644
View file @
6d264afc
/*
* Copyright (c) 2018, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef STM32_CONSOLE_H
#define STM32_CONSOLE_H
#include <console.h>
#define CONSOLE_T_STM32_BASE CONSOLE_T_DRVDATA
#ifndef __ASSEMBLY__
#include <stdint.h>
struct
console_stm32
{
console_t
console
;
uintptr_t
base
;
};
/*
* Initialize a new STM32 console instance and register it with the console
* framework. The |console| pointer must point to storage that will be valid
* for the lifetime of the console, such as a global or static local variable.
* Its contents will be reinitialized from scratch.
*/
int
console_stm32_register
(
uintptr_t
baseaddr
,
uint32_t
clock
,
uint32_t
baud
,
struct
console_stm32
*
console
);
#endif
/*__ASSEMBLY__*/
#endif
/* STM32_CONSOLE_H */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment