Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
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
df5bd3bf
Commit
df5bd3bf
authored
5 years ago
by
Soby Mathew
Committed by
TrustedFirmware Code Review
5 years ago
Browse files
Options
Download
Plain Diff
Merge "console: update skeleton" into integration
parents
7cdd55af
52e91081
master
v2.5
v2.5-rc1
v2.5-rc0
v2.4
v2.4-rc2
v2.4-rc1
v2.4-rc0
v2.3
v2.3-rc2
v2.3-rc1
v2.3-rc0
v2.2
v2.2-rc2
v2.2-rc1
v2.2-rc0
arm_cca_v0.2
arm_cca_v0.1
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
drivers/console/aarch32/skeleton_console.S
+130
-62
drivers/console/aarch32/skeleton_console.S
drivers/console/aarch64/skeleton_console.S
+2
-2
drivers/console/aarch64/skeleton_console.S
include/arch/aarch32/console_macros.S
+1
-1
include/arch/aarch32/console_macros.S
with
133 additions
and
65 deletions
+133
-65
drivers/console/aarch32/skeleton_console.S
View file @
df5bd3bf
/*
*
Copyright
(
c
)
2016
-
201
7
,
ARM
Limited
and
Contributors
.
All
rights
reserved
.
*
Copyright
(
c
)
2016
-
201
9
,
ARM
Limited
and
Contributors
.
All
rights
reserved
.
*
*
SPDX
-
License
-
Identifier
:
BSD
-
3
-
Clause
*/
#include <asm_macros.S>
#include <console_macros.S>
/
*
*
This
file
contains
a
skeleton
console
implementation
that
can
*
be
used
as
basis
for
a
real
console
implementation
by
platforms
*
that
do
not
contain
PL011
hardware
.
*
This
file
contains
a
skeleton
console
driver
that
can
be
used
as
a
*
basis
for
a
real
console
driver
.
Console
drivers
in
Trusted
Firmware
*
can
be
instantiated
multiple
times
.
Each
instance
is
described
by
a
*
separate
console_t
structure
which
must
be
registered
with
the
common
*
console
framework
via
console_register
()
.
Console
drivers
should
*
define
a
console_xxx_register
()
function
that
initializes
a
new
*
console_t
structure
passed
in
from
the
caller
and
registers
it
after
*
initializing
the
console
hardware
.
Drivers
may
define
their
own
*
structures
extending
console_t
to
store
private
driver
information
.
*
Console
drivers
*
MUST
*
ensure
that
the
console
callbacks
they
*
implement
only
change
registers
allowed
in
the
clobber
lists
defined
*
in
this
file
.
(
Note
that
in
addition
to
the
explicit
clobber
lists
,
*
any
function
may
always
clobber
the
intra
-
procedure
-
call
register
*
r12
,
but
may
never
depend
on
it
retaining
its
value
across
any
*
function
call
.
)
*/
.
globl
console_
core_init
.
globl
console_
core
_putc
.
globl
console_
core
_getc
.
globl
console_
core
_flush
.
globl
console_
xxx_register
.
globl
console_
xxx
_putc
.
globl
console_
xxx
_getc
.
globl
console_
xxx
_flush
/
*
-----------------------------------------------
*
int
console_
core_init
(
uintptr_t
base_addr
,
*
unsigned
int
uart_clk
,
unsigned
int
baud_rate
)
*
Function
to
initialize
the
console
without
a
*
C
Runtime
to
print
debug
information
.
This
*
function
will
be
accessed
by
console_init
and
*
crash
reporting
.
*
In
:
r0
-
console
base
address
*
r1
-
Uart
clock
in
Hz
*
r2
-
Baud
rate
*
Out
:
r
eturn
1
on
success
else
0
on
error
*
Clobber
list
:
r
1
,
r
2
*
int
console_
xxx_register
(
console_xxx_t
*
console
,
*
...
additional
parameters
as
desired
...
)
*
Function
to
initialize
and
register
the
console
.
*
The
caller
needs
to
pass
an
empty
console_xxx_t
*
structure
in
which
*
MUST
*
be
allocated
in
*
persistent
memory
(
e
.
g
.
a
global
or
static
local
*
variable
,
*
NOT
*
on
the
stack
)
.
*
In
:
r0
-
pointer
to
empty
console_t
structure
*
r1
through
r7
:
additional
parameters
as
desired
*
Out
:
r
0
-
1
on
success
,
0
on
error
*
Clobber
list
:
r
0
-
r
7
*
-----------------------------------------------
*/
func
console_core_init
/
*
Check
the
input
base
address
*/
cmp
r0
,
#
0
beq
core_init_fail
/
*
Check
baud
rate
and
uart
clock
for
sanity
*/
cmp
r1
,
#
0
beq
core_init_fail
cmp
r2
,
#
0
beq
core_init_fail
/
*
Insert
implementation
here
*/
mov
r0
,
#
1
bx
lr
core_init_fail
:
func
console_xxx_register
/
*
*
Store
parameters
(
e
.
g
.
hardware
base
address
)
in
driver
-
specific
*
console_xxx_t
structure
field
if
they
will
need
to
be
retrieved
*
by
later
console
callback
(
e
.
g
.
putc
)
.
*
Example
:
*/
str
r1
,
[
r0
,
#
CONSOLE_T_XXX_BASE
]
str
r2
,
[
r0
,
#
CONSOLE_T_XXX_SOME_OTHER_VALUE
]
/
*
*
Initialize
console
hardware
,
using
r1
-
r7
parameters
as
needed
.
*
Keep
console_t
pointer
in
r0
for
later
.
*/
/
*
*
Macro
to
finish
up
registration
and
return
(
needs
valid
r0
+
lr
)
.
*
If
any
of
the
argument
is
unspecified
,
then
the
corresponding
*
entry
in
console_t
is
set
to
0
.
*/
finish_console_register
xxx
putc
=
1
,
getc
=
1
,
flush
=
1
/
*
Jump
here
if
hardware
init
fails
or
parameters
are
invalid
.
*/
register_fail
:
mov
r0
,
#
0
bx
lr
endfunc
console_
core_init
endfunc
console_
xxx_register
/
*
--------------------------------------------------------
*
int
console_
core
_putc
(
int
c
,
uintptr_t
base_addr
)
*
int
console_
xxx
_putc
(
int
c
,
console_xxx_t
*
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
-
console
base
address
*
Out
:
r
eturn
-
1
on
error
else
return
characte
r
.
*
Clobber
list
:
r2
*
r1
-
pointer
to
console_t
struct
*
Out
:
r
0
-
printed
character
on
success
,
<
0
on
erro
r
.
*
Clobber
list
:
r0
,
r1
,
r2
*
--------------------------------------------------------
*/
func
console_core_putc
/
*
Check
the
input
parameter
*/
cmp
r1
,
#
0
beq
putc_error
/
*
Insert
implementation
here
*/
func
console_xxx_putc
/
*
*
Retrieve
values
we
need
(
e
.
g
.
hardware
base
address
)
from
*
console_xxx_t
structure
pointed
to
by
r1
.
*
Example
:
*/
ldr
r1
,
[
r1
,
#
CONSOLE_T_XXX_BASE
]
/
*
*
Write
r0
to
hardware
.
*/
bx
lr
/
*
Jump
here
if
output
fails
for
any
reason
.
*/
putc_error
:
mov
r0
,
#-
1
bx
lr
endfunc
console_
core
_putc
endfunc
console_
xxx
_putc
/
*
---------------------------------------------
*
int
console_
core
_getc
(
uintptr_t
base_addr
)
*
int
console_
xxx
_getc
(
console_xxx_t
*
console
)
*
Function
to
get
a
character
from
the
console
.
*
It
returns
the
character
grabbed
on
success
*
or
-
1
on
error
.
*
In
:
r0
-
console
base
address
*
Even
though
console_getc
()
is
blocking
,
this
*
callback
has
to
be
non
-
blocking
and
always
*
return
immediately
to
allow
polling
multiple
*
drivers
concurrently
.
*
Returns
the
character
grabbed
on
success
,
*
ERROR_NO_PENDING_CHAR
if
no
character
was
*
available
at
this
time
,
or
any
value
*
between
-
2
and
-
127
if
there
was
an
error
.
*
In
:
r0
-
pointer
to
console_t
struct
*
Out
:
r0
-
character
on
success
,
*
ERROR_NO_PENDING_CHAR
if
no
char
,
*
<
-
1
on
error
*
Clobber
list
:
r0
,
r1
*
---------------------------------------------
*/
func
console_core_getc
cmp
r0
,
#
0
beq
getc_error
/
*
Insert
implementation
here
*/
func
console_xxx_getc
/
*
*
Retrieve
values
we
need
(
e
.
g
.
hardware
base
address
)
from
*
console_xxx_t
structure
pointed
to
by
r0
.
*
Example
:
*/
ldr
r1
,
[
r0
,
#
CONSOLE_T_XXX_BASE
]
/
*
*
Try
to
read
character
into
r0
from
hardware
.
*/
bx
lr
/
*
Jump
here
if
there
is
no
character
available
at
this
time
.
*/
getc_no_char
:
mov
r0
,
#
ERROR_NO_PENDING_CHAR
bx
lr
/
*
Jump
here
if
there
was
any
hardware
error
.
*/
getc_error
:
mov
r0
,
#-
1
mov
r0
,
#-
2
/*
may
pick
error
codes
between
-
2
and
-
127
*/
bx
lr
endfunc
console_
core
_getc
endfunc
console_
xxx
_getc
/
*
---------------------------------------------
*
int
console_
core
_flush
(
uintptr_t
base_addr
)
*
int
console_
xxx
_flush
(
console_xxx_t
*
console
)
*
Function
to
force
a
write
of
all
buffered
*
data
that
hasn
't been output.
*
In
:
r0
-
console
base
address
*
Out
:
r
eturn
-
1
on
error
else
return
0
.
*
Clobber
list
:
r0
,
r1
*
In
:
r0
-
pointer
to
console_xxx_t
struct
*
Out
:
r
0
-
0
on
success
,
<
0
on
error
*
Clobber
list
:
r0
,
r1
,
r2
,
r3
,
r4
,
r5
*
---------------------------------------------
*/
func
console_core_flush
cmp
r0
,
#
0
beq
flush_error
/
*
Insert
implementation
here
*/
func
console_xxx_flush
/
*
*
Retrieve
values
we
need
(
e
.
g
.
hardware
base
address
)
from
*
console_xxx_t
structure
pointed
to
by
r0
.
*
Example
:
*/
ldr
r1
,
[
r0
,
#
CONSOLE_T_XXX_BASE
]
/
*
*
Flush
all
remaining
output
from
hardware
FIFOs
.
Do
not
return
until
*
all
data
has
been
flushed
or
there
was
an
unrecoverable
error
.
*/
mov
r0
,
#
0
bx
lr
/
*
Jump
here
if
an
unrecoverable
error
has
been
encountered
.
*/
flush_error
:
mov
r0
,
#-
1
bx
lr
endfunc
console_
core
_flush
endfunc
console_
xxx
_flush
This diff is collapsed.
Click to expand it.
drivers/console/aarch64/skeleton_console.S
View file @
df5bd3bf
...
...
@@ -7,7 +7,7 @@
#include <console_macros.S>
/
*
*
This
file
contains
a
skeleton
console
driver
that
can
be
used
as
*
This
file
contains
a
skeleton
console
driver
that
can
be
used
as
a
*
basis
for
a
real
console
driver
.
Console
drivers
in
Trusted
Firmware
*
can
be
instantiated
multiple
times
.
Each
instance
is
described
by
a
*
separate
console_t
structure
which
must
be
registered
with
the
common
...
...
@@ -16,7 +16,7 @@
*
console_t
structure
passed
in
from
the
caller
and
registers
it
after
*
initializing
the
console
hardware
.
Drivers
may
define
their
own
*
structures
extending
console_t
to
store
private
driver
information
.
*
Console
drivers
*
MUST
*
take
ca
re
that
the
console
callbacks
they
*
Console
drivers
*
MUST
*
ensu
re
that
the
console
callbacks
they
*
implement
only
change
registers
allowed
in
the
clobber
lists
defined
*
in
this
file
.
(
Note
that
in
addition
to
the
explicit
clobber
lists
,
*
any
function
may
always
clobber
the
intra
-
procedure
-
call
registers
...
...
This diff is collapsed.
Click to expand it.
include/arch/aarch32/console_macros.S
View file @
df5bd3bf
...
...
@@ -15,7 +15,7 @@
*
default
consoles
are
enabled
for
the
"boot"
and
"crash"
states
,
this
can
be
*
changed
after
registration
with
the
console_set_scope
()
function
)
.
It
ends
*
with
a
tail
call
that
will
include
return
to
the
caller
.
*
REQUIRES
console_t
pointer
in
x
0
and
a
valid
return
address
in
x30
.
*
REQUIRES
console_t
pointer
in
r
0
and
a
valid
return
address
in
lr
.
*/
.
macro
finish_console_register
_driver
,
putc
=
0
,
getc
=
0
,
flush
=
0
/
*
...
...
This diff is collapsed.
Click to expand it.
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
Menu
Projects
Groups
Snippets
Help