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
4108abb4
Commit
4108abb4
authored
May 15, 2020
by
Mark Dykes
Committed by
TrustedFirmware Code Review
May 15, 2020
Browse files
Merge "plat/arm/fvp: Support performing SDEI platform setup in runtime" into integration
parents
f95dfc27
cbf9e84a
Changes
14
Hide whitespace changes
Inline
Side-by-side
Makefile
View file @
4108abb4
...
...
@@ -651,6 +651,12 @@ ifeq ($(DYN_DISABLE_AUTH), 1)
endif
endif
# SDEI_IN_FCONF is only supported when SDEI_SUPPORT is enabled.
ifeq ($(SDEI_SUPPORT)-$(SDEI_IN_FCONF),0-1)
$(error "
SDEI_IN_FCONF
is
an
experimental
feature
and
is
only
supported
when
\
SDEI_SUPPORT
is
enabled
")
endif
# If pointer authentication is used in the firmware, make sure that all the
# registers associated to it are also saved and restored.
# Not doing it would leak the value of the keys used by EL3 to EL1 and S-EL1.
...
...
@@ -882,6 +888,7 @@ $(eval $(call assert_boolean,TRUSTED_BOARD_BOOT))
$(eval $(call assert_boolean,USE_COHERENT_MEM))
$(eval $(call assert_boolean,USE_DEBUGFS))
$(eval $(call assert_boolean,ARM_IO_IN_DTB))
$(eval $(call assert_boolean,SDEI_IN_FCONF))
$(eval $(call assert_boolean,USE_ROMLIB))
$(eval $(call assert_boolean,USE_TBBR_DEFS))
$(eval $(call assert_boolean,WARMBOOT_ENABLE_DCACHE_EARLY))
...
...
@@ -961,6 +968,7 @@ $(eval $(call add_define,TRUSTED_BOARD_BOOT))
$(eval
$(call
add_define,USE_COHERENT_MEM))
$(eval
$(call
add_define,USE_DEBUGFS))
$(eval
$(call
add_define,ARM_IO_IN_DTB))
$(eval
$(call
add_define,SDEI_IN_FCONF))
$(eval
$(call
add_define,USE_ROMLIB))
$(eval
$(call
add_define,USE_TBBR_DEFS))
$(eval
$(call
add_define,WARMBOOT_ENABLE_DCACHE_EARLY))
...
...
docs/getting_started/build-options.rst
View file @
4108abb4
...
...
@@ -645,6 +645,11 @@ Common build options
configuration
device
tree
,
instead
of
static
structure
in
the
code
base
.
This
is
currently
an
experimental
feature
.
-
``
SDEI_IN_FCONF
``:
This
flag
determines
whether
to
configure
SDEI
setup
in
runtime
using
firmware
configuration
framework
.
The
platform
specific
SDEI
shared
and
private
events
configuration
is
retrieved
from
device
tree
rather
than
static
C
structures
at
compile
time
.
This
is
currently
an
experimental
feature
and
is
only
supported
if
SDEI_SUPPORT
build
flag
is
enabled
.
-
``
USE_ROMLIB
``:
This
flag
determines
whether
library
at
ROM
will
be
used
.
This
feature
creates
a
library
of
functions
to
be
placed
in
ROM
and
thus
...
...
fdts/fvp-base-gicv3-psci-common.dtsi
View file @
4108abb4
...
...
@@ -4,6 +4,8 @@
*
SPDX
-
License
-
Identifier
:
BSD
-
3
-
Clause
*/
#
include
<
services
/
sdei_flags
.
h
>
/
memreserve
/
0x80000000
0x00010000
;
/
{
...
...
@@ -36,6 +38,30 @@
max
-
pwr
-
lvl
=
<
2
>;
};
#
if
SDEI_IN_FCONF
firmware
{
sdei
{
compatible
=
"arm,sdei-1.0"
;
method
=
"smc"
;
private_event_count
=
<
3
>;
shared_event_count
=
<
3
>;
/*
*
Each
event
descriptor
has
typically
3
fields
:
*
1.
Event
number
*
2.
Interrupt
number
the
event
is
bound
to
or
*
if
event
is
dynamic
,
specified
as
SDEI_DYN_IRQ
*
3.
Bit
map
of
event
flags
*/
private_events
=
<
1000
SDEI_DYN_IRQ
SDEI_MAPF_DYNAMIC
>,
<
1001
SDEI_DYN_IRQ
SDEI_MAPF_DYNAMIC
>,
<
1002
SDEI_DYN_IRQ
SDEI_MAPF_DYNAMIC
>;
shared_events
=
<
2000
SDEI_DYN_IRQ
SDEI_MAPF_DYNAMIC
>,
<
2001
SDEI_DYN_IRQ
SDEI_MAPF_DYNAMIC
>,
<
2002
SDEI_DYN_IRQ
SDEI_MAPF_DYNAMIC
>;
};
};
#
endif
/*
SDEI_IN_FCONF
*/
cpus
{
#
address
-
cells
=
<
2
>;
#
size
-
cells
=
<
0
>;
...
...
include/plat/arm/common/arm_def.h
View file @
4108abb4
...
...
@@ -565,6 +565,13 @@
/* SGI used for SDEI signalling */
#define ARM_SDEI_SGI ARM_IRQ_SEC_SGI_0
#if SDEI_IN_FCONF
/* ARM SDEI dynamic private event max count */
#define ARM_SDEI_DP_EVENT_MAX_CNT 3
/* ARM SDEI dynamic shared event max count */
#define ARM_SDEI_DS_EVENT_MAX_CNT 3
#else
/* ARM SDEI dynamic private event numbers */
#define ARM_SDEI_DP_EVENT_0 1000
#define ARM_SDEI_DP_EVENT_1 1001
...
...
@@ -585,5 +592,6 @@
SDEI_SHARED_EVENT(ARM_SDEI_DS_EVENT_0, SDEI_DYN_IRQ, SDEI_MAPF_DYNAMIC), \
SDEI_SHARED_EVENT(ARM_SDEI_DS_EVENT_1, SDEI_DYN_IRQ, SDEI_MAPF_DYNAMIC), \
SDEI_SHARED_EVENT(ARM_SDEI_DS_EVENT_2, SDEI_DYN_IRQ, SDEI_MAPF_DYNAMIC)
#endif
/* SDEI_IN_FCONF */
#endif
/* ARM_DEF_H */
include/plat/arm/common/fconf_sdei_getter.h
0 → 100644
View file @
4108abb4
/*
* Copyright (c) 2019-2020, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef FCONF_SDEI_GETTER_H
#define FCONF_SDEI_GETTER_H
#include <lib/fconf/fconf.h>
#include <platform_def.h>
#define sdei__dyn_config_getter(id) sdei_dyn_config.id
struct
sdei_dyn_config_t
{
uint32_t
private_ev_cnt
;
int32_t
private_ev_nums
[
PLAT_SDEI_DP_EVENT_MAX_CNT
];
unsigned
int
private_ev_intrs
[
PLAT_SDEI_DP_EVENT_MAX_CNT
];
unsigned
int
private_ev_flags
[
PLAT_SDEI_DP_EVENT_MAX_CNT
];
uint32_t
shared_ev_cnt
;
int32_t
shared_ev_nums
[
PLAT_SDEI_DS_EVENT_MAX_CNT
];
unsigned
int
shared_ev_intrs
[
PLAT_SDEI_DS_EVENT_MAX_CNT
];
unsigned
int
shared_ev_flags
[
PLAT_SDEI_DS_EVENT_MAX_CNT
];
};
int
fconf_populate_sdei_dyn_config
(
uintptr_t
config
);
extern
struct
sdei_dyn_config_t
sdei_dyn_config
;
#endif
/* FCONF_SDEI_GETTER_H */
include/plat/common/platform.h
View file @
4108abb4
...
...
@@ -132,6 +132,7 @@ struct meminfo *bl1_plat_sec_mem_layout(void);
/* SDEI platform functions */
#if SDEI_SUPPORT
void
plat_sdei_setup
(
void
);
int
plat_sdei_validate_entry_point
(
uintptr_t
ep
,
unsigned
int
client_mode
);
void
plat_sdei_handle_masked_trigger
(
uint64_t
mpidr
,
unsigned
int
intr
);
#endif
...
...
include/services/sdei.h
View file @
4108abb4
/*
* Copyright (c) 2017-20
18
, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2017-20
20
, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
...
...
@@ -9,6 +9,7 @@
#include <lib/spinlock.h>
#include <lib/utils_def.h>
#include <services/sdei_flags.h>
/* Range 0xC4000020 - 0xC400003F reserved for SDE 64bit smc calls */
#define SDEI_VERSION 0xC4000020U
...
...
@@ -41,50 +42,6 @@
#define SDEI_EV_HANDLED 0U
#define SDEI_EV_FAILED 1U
/* Internal: SDEI flag bit positions */
#define SDEI_MAPF_DYNAMIC_SHIFT_ 1U
#define SDEI_MAPF_BOUND_SHIFT_ 2U
#define SDEI_MAPF_SIGNALABLE_SHIFT_ 3U
#define SDEI_MAPF_PRIVATE_SHIFT_ 4U
#define SDEI_MAPF_CRITICAL_SHIFT_ 5U
#define SDEI_MAPF_EXPLICIT_SHIFT_ 6U
/* SDEI event 0 */
#define SDEI_EVENT_0 0
/* Placeholder interrupt for dynamic mapping */
#define SDEI_DYN_IRQ 0U
/* SDEI flags */
/*
* These flags determine whether or not an event can be associated with an
* interrupt. Static events are permanently associated with an interrupt, and
* can't be changed at runtime. Association of dynamic events with interrupts
* can be changed at run time using the SDEI_INTERRUPT_BIND and
* SDEI_INTERRUPT_RELEASE calls.
*
* SDEI_MAPF_DYNAMIC only indicates run time configurability, where as
* SDEI_MAPF_BOUND indicates interrupt association. For example:
*
* - Calling SDEI_INTERRUPT_BIND on a dynamic event will have both
* SDEI_MAPF_DYNAMIC and SDEI_MAPF_BOUND set.
*
* - Statically-bound events will always have SDEI_MAPF_BOUND set, and neither
* SDEI_INTERRUPT_BIND nor SDEI_INTERRUPT_RELEASE can be called on them.
*
* See also the is_map_bound() macro.
*/
#define SDEI_MAPF_DYNAMIC BIT(SDEI_MAPF_DYNAMIC_SHIFT_)
#define SDEI_MAPF_BOUND BIT(SDEI_MAPF_BOUND_SHIFT_)
#define SDEI_MAPF_EXPLICIT BIT(SDEI_MAPF_EXPLICIT_SHIFT_)
#define SDEI_MAPF_SIGNALABLE BIT(SDEI_MAPF_SIGNALABLE_SHIFT_)
#define SDEI_MAPF_PRIVATE BIT(SDEI_MAPF_PRIVATE_SHIFT_)
#define SDEI_MAPF_NORMAL 0
#define SDEI_MAPF_CRITICAL BIT(SDEI_MAPF_CRITICAL_SHIFT_)
/* Indices of private and shared mappings */
#define SDEI_MAP_IDX_PRIV_ 0U
#define SDEI_MAP_IDX_SHRD_ 1U
...
...
include/services/sdei_flags.h
0 → 100644
View file @
4108abb4
/*
* Copyright (c) 2020, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#ifndef SDEI_FLAGS_H
#define SDEI_FLAGS_H
#include <lib/utils_def.h>
/* Internal: SDEI flag bit positions */
#define SDEI_MAPF_DYNAMIC_SHIFT_ 1U
#define SDEI_MAPF_BOUND_SHIFT_ 2U
#define SDEI_MAPF_SIGNALABLE_SHIFT_ 3U
#define SDEI_MAPF_PRIVATE_SHIFT_ 4U
#define SDEI_MAPF_CRITICAL_SHIFT_ 5U
#define SDEI_MAPF_EXPLICIT_SHIFT_ 6U
/* SDEI event 0 */
#define SDEI_EVENT_0 0
/* Placeholder interrupt for dynamic mapping */
#define SDEI_DYN_IRQ 0U
/* SDEI flags */
/*
* These flags determine whether or not an event can be associated with an
* interrupt. Static events are permanently associated with an interrupt, and
* can't be changed at runtime. Association of dynamic events with interrupts
* can be changed at run time using the SDEI_INTERRUPT_BIND and
* SDEI_INTERRUPT_RELEASE calls.
*
* SDEI_MAPF_DYNAMIC only indicates run time configurability, where as
* SDEI_MAPF_BOUND indicates interrupt association. For example:
*
* - Calling SDEI_INTERRUPT_BIND on a dynamic event will have both
* SDEI_MAPF_DYNAMIC and SDEI_MAPF_BOUND set.
*
* - Statically-bound events will always have SDEI_MAPF_BOUND set, and neither
* SDEI_INTERRUPT_BIND nor SDEI_INTERRUPT_RELEASE can be called on them.
*
* See also the is_map_bound() macro.
*/
#define SDEI_MAPF_DYNAMIC BIT(SDEI_MAPF_DYNAMIC_SHIFT_)
#define SDEI_MAPF_BOUND BIT(SDEI_MAPF_BOUND_SHIFT_)
#define SDEI_MAPF_EXPLICIT BIT(SDEI_MAPF_EXPLICIT_SHIFT_)
#define SDEI_MAPF_SIGNALABLE BIT(SDEI_MAPF_SIGNALABLE_SHIFT_)
#define SDEI_MAPF_PRIVATE BIT(SDEI_MAPF_PRIVATE_SHIFT_)
#define SDEI_MAPF_NORMAL 0
#define SDEI_MAPF_CRITICAL BIT(SDEI_MAPF_CRITICAL_SHIFT_)
#endif
/* SDEI_FLAGS_H */
make_helpers/defaults.mk
View file @
4108abb4
...
...
@@ -223,7 +223,10 @@ USE_COHERENT_MEM := 1
USE_DEBUGFS
:=
0
# Build option to fconf based io
ARM_IO_IN_DTB
:=
0
ARM_IO_IN_DTB
:=
0
# Build option to support SDEI through fconf
SDEI_IN_FCONF
:=
0
# Build option to choose whether Trusted Firmware uses library at ROM
USE_ROMLIB
:=
0
...
...
plat/arm/board/fvp/include/platform_def.h
View file @
4108abb4
...
...
@@ -264,8 +264,13 @@
#define PLAT_ARM_G0_IRQ_PROPS(grp) ARM_G0_IRQ_PROPS(grp)
#if SDEI_IN_FCONF
#define PLAT_SDEI_DP_EVENT_MAX_CNT ARM_SDEI_DP_EVENT_MAX_CNT
#define PLAT_SDEI_DS_EVENT_MAX_CNT ARM_SDEI_DS_EVENT_MAX_CNT
#else
#define PLAT_ARM_PRIVATE_SDEI_EVENTS ARM_SDEI_PRIVATE_EVENTS
#define PLAT_ARM_SHARED_SDEI_EVENTS ARM_SDEI_SHARED_EVENTS
#endif
#define PLAT_ARM_SP_IMAGE_STACK_BASE (PLAT_SP_IMAGE_NS_BUF_BASE + \
PLAT_SP_IMAGE_NS_BUF_SIZE)
...
...
plat/arm/common/aarch64/arm_sdei.c
View file @
4108abb4
/*
* Copyright (c) 2017, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2017
-2020
, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
/* SDEI configuration for ARM platforms */
#include <platform_def.h>
#include <bl31/ehf.h>
#include <common/debug.h>
#include <services/sdei.h>
#if SDEI_IN_FCONF
#include <plat/arm/common/fconf_sdei_getter.h>
#endif
#include <plat/common/platform.h>
#include <platform_def.h>
#if SDEI_IN_FCONF
/* Private event mappings */
static
sdei_ev_map_t
arm_sdei_private
[
PLAT_SDEI_DP_EVENT_MAX_CNT
+
1
]
=
{
0
};
/* Shared event mappings */
static
sdei_ev_map_t
arm_sdei_shared
[
PLAT_SDEI_DS_EVENT_MAX_CNT
]
=
{
0
};
void
plat_sdei_setup
(
void
)
{
uint32_t
i
;
arm_sdei_private
[
0
]
=
(
sdei_ev_map_t
)
SDEI_DEFINE_EVENT_0
(
ARM_SDEI_SGI
);
for
(
i
=
0
;
i
<
FCONF_GET_PROPERTY
(
sdei
,
dyn_config
,
private_ev_cnt
);
i
++
)
{
arm_sdei_private
[
i
+
1
]
=
(
sdei_ev_map_t
)
SDEI_PRIVATE_EVENT
(
FCONF_GET_PROPERTY
(
sdei
,
dyn_config
,
private_ev_nums
[
i
]),
FCONF_GET_PROPERTY
(
sdei
,
dyn_config
,
private_ev_intrs
[
i
]),
FCONF_GET_PROPERTY
(
sdei
,
dyn_config
,
private_ev_flags
[
i
]));
}
for
(
i
=
0
;
i
<
FCONF_GET_PROPERTY
(
sdei
,
dyn_config
,
shared_ev_cnt
);
i
++
)
{
arm_sdei_shared
[
i
]
=
(
sdei_ev_map_t
)
SDEI_SHARED_EVENT
(
\
FCONF_GET_PROPERTY
(
sdei
,
dyn_config
,
shared_ev_nums
[
i
]),
FCONF_GET_PROPERTY
(
sdei
,
dyn_config
,
shared_ev_intrs
[
i
]),
FCONF_GET_PROPERTY
(
sdei
,
dyn_config
,
shared_ev_flags
[
i
]));
}
INFO
(
"FCONF: SDEI platform setup
\n
"
);
}
#else
/* Private event mappings */
static
sdei_ev_map_t
arm_sdei_private
[]
=
{
PLAT_ARM_PRIVATE_SDEI_EVENTS
...
...
@@ -21,5 +56,11 @@ static sdei_ev_map_t arm_sdei_shared[] = {
PLAT_ARM_SHARED_SDEI_EVENTS
};
void
plat_sdei_setup
(
void
)
{
INFO
(
"SDEI platform setup
\n
"
);
}
#endif
/* SDEI_IN_FCONF */
/* Export ARM SDEI events */
REGISTER_SDEI_MAP
(
arm_sdei_private
,
arm_sdei_shared
);
plat/arm/common/arm_common.mk
View file @
4108abb4
...
...
@@ -263,6 +263,9 @@ endif
ifeq
(${SDEI_SUPPORT},1)
BL31_SOURCES
+=
plat/arm/common/aarch64/arm_sdei.c
ifeq
(${SDEI_IN_FCONF},1)
BL31_SOURCES
+=
plat/arm/common/fconf/fconf_sdei_getter.c
endif
endif
# RAS sources
...
...
plat/arm/common/fconf/fconf_sdei_getter.c
0 → 100644
View file @
4108abb4
/*
* Copyright (c) 2019-2020, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
#include <assert.h>
#include <common/debug.h>
#include <common/fdt_wrappers.h>
#include <libfdt.h>
#include <plat/arm/common/fconf_sdei_getter.h>
#define PRIVATE_EVENT_NUM(i) private_events[3 * (i)]
#define PRIVATE_EVENT_INTR(i) private_events[3 * (i) + 1]
#define PRIVATE_EVENT_FLAGS(i) private_events[3 * (i) + 2]
#define SHARED_EVENT_NUM(i) shared_events[3 * (i)]
#define SHARED_EVENT_INTR(i) shared_events[3 * (i) + 1]
#define SHARED_EVENT_FLAGS(i) shared_events[3 * (i) + 2]
struct
sdei_dyn_config_t
sdei_dyn_config
;
int
fconf_populate_sdei_dyn_config
(
uintptr_t
config
)
{
uint32_t
i
;
int
node
,
err
;
uint32_t
private_events
[
PLAT_SDEI_DP_EVENT_MAX_CNT
*
3
];
uint32_t
shared_events
[
PLAT_SDEI_DS_EVENT_MAX_CNT
*
3
];
const
void
*
dtb
=
(
void
*
)
config
;
/* Check that the node offset points to compatible property */
node
=
fdt_node_offset_by_compatible
(
dtb
,
-
1
,
"arm,sdei-1.0"
);
if
(
node
<
0
)
{
ERROR
(
"FCONF: Can't find 'arm,sdei-1.0' compatible node in dtb
\n
"
);
return
node
;
}
/* Read number of private mappings */
err
=
fdt_read_uint32
(
dtb
,
node
,
"private_event_count"
,
&
sdei_dyn_config
.
private_ev_cnt
);
if
(
err
<
0
)
{
ERROR
(
"FCONF: Read cell failed for 'private_event_count': %u
\n
"
,
sdei_dyn_config
.
private_ev_cnt
);
return
err
;
}
/* Check if the value is in range */
if
(
sdei_dyn_config
.
private_ev_cnt
>
PLAT_SDEI_DP_EVENT_MAX_CNT
)
{
ERROR
(
"FCONF: Invalid value for 'private_event_count': %u
\n
"
,
sdei_dyn_config
.
private_ev_cnt
);
return
-
1
;
}
/* Read private mappings */
err
=
fdt_read_uint32_array
(
dtb
,
node
,
"private_events"
,
sdei_dyn_config
.
private_ev_cnt
*
3
,
private_events
);
if
(
err
<
0
)
{
ERROR
(
"FCONF: Read cell failed for 'private_events': %d
\n
"
,
err
);
return
err
;
}
/* Move data to fconf struct */
for
(
i
=
0
;
i
<
sdei_dyn_config
.
private_ev_cnt
;
i
++
)
{
sdei_dyn_config
.
private_ev_nums
[
i
]
=
PRIVATE_EVENT_NUM
(
i
);
sdei_dyn_config
.
private_ev_intrs
[
i
]
=
PRIVATE_EVENT_INTR
(
i
);
sdei_dyn_config
.
private_ev_flags
[
i
]
=
PRIVATE_EVENT_FLAGS
(
i
);
}
/* Read number of shared mappings */
err
=
fdt_read_uint32
(
dtb
,
node
,
"shared_event_count"
,
&
sdei_dyn_config
.
shared_ev_cnt
);
if
(
err
<
0
)
{
ERROR
(
"FCONF: Read cell failed for 'shared_event_count'
\n
"
);
return
err
;
}
/* Check if the value is in range */
if
(
sdei_dyn_config
.
shared_ev_cnt
>
PLAT_SDEI_DS_EVENT_MAX_CNT
)
{
ERROR
(
"FCONF: Invalid value for 'shared_event_count': %u
\n
"
,
sdei_dyn_config
.
shared_ev_cnt
);
return
-
1
;
}
/* Read shared mappings */
err
=
fdt_read_uint32_array
(
dtb
,
node
,
"shared_events"
,
sdei_dyn_config
.
shared_ev_cnt
*
3
,
shared_events
);
if
(
err
<
0
)
{
ERROR
(
"FCONF: Read cell failed for 'shared_events': %d
\n
"
,
err
);
return
err
;
}
/* Move data to fconf struct */
for
(
i
=
0
;
i
<
sdei_dyn_config
.
shared_ev_cnt
;
i
++
)
{
sdei_dyn_config
.
shared_ev_nums
[
i
]
=
SHARED_EVENT_NUM
(
i
);
sdei_dyn_config
.
shared_ev_intrs
[
i
]
=
SHARED_EVENT_INTR
(
i
);
sdei_dyn_config
.
shared_ev_flags
[
i
]
=
SHARED_EVENT_FLAGS
(
i
);
}
return
0
;
}
FCONF_REGISTER_POPULATOR
(
HW_CONFIG
,
sdei
,
fconf_populate_sdei_dyn_config
);
services/std_svc/sdei/sdei_main.c
View file @
4108abb4
/*
* Copyright (c) 2017-20
18
, ARM Limited and Contributors. All rights reserved.
* Copyright (c) 2017-20
20
, ARM Limited and Contributors. All rights reserved.
*
* SPDX-License-Identifier: BSD-3-Clause
*/
...
...
@@ -226,6 +226,7 @@ static void sdei_class_init(sdei_class_t class)
/* SDEI dispatcher initialisation */
void
sdei_init
(
void
)
{
plat_sdei_setup
();
sdei_class_init
(
SDEI_CRITICAL
);
sdei_class_init
(
SDEI_NORMAL
);
...
...
@@ -328,8 +329,11 @@ finish:
}
/* Register handler and argument for an SDEI event */
static
int64_t
sdei_event_register
(
int
ev_num
,
uint64_t
ep
,
uint64_t
arg
,
uint64_t
flags
,
uint64_t
mpidr
)
static
int64_t
sdei_event_register
(
int
ev_num
,
uint64_t
ep
,
uint64_t
arg
,
uint64_t
flags
,
uint64_t
mpidr
)
{
int
ret
;
unsigned
int
routing
;
...
...
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