Merge changes from topic "mb/drtm-work-phase-1" into integration
* changes: build(changelog): add new scope for Arm SMMU driver feat(smmu): add SMMU abort transaction function docs(build): add build option for DRTM support build(drtm): add DRTM support build option
This commit is contained in:
commit
0a9a0edf98
6
Makefile
6
Makefile
|
@ -833,6 +833,10 @@ ifeq (${CTX_INCLUDE_FPREGS},1)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
ifeq ($(DRTM_SUPPORT),1)
|
||||||
|
$(info DRTM_SUPPORT is an experimental feature)
|
||||||
|
endif
|
||||||
|
|
||||||
################################################################################
|
################################################################################
|
||||||
# Process platform overrideable behaviour
|
# Process platform overrideable behaviour
|
||||||
################################################################################
|
################################################################################
|
||||||
|
@ -1008,6 +1012,7 @@ $(eval $(call assert_booleans,\
|
||||||
HW_ASSISTED_COHERENCY \
|
HW_ASSISTED_COHERENCY \
|
||||||
INVERTED_MEMMAP \
|
INVERTED_MEMMAP \
|
||||||
MEASURED_BOOT \
|
MEASURED_BOOT \
|
||||||
|
DRTM_SUPPORT \
|
||||||
NS_TIMER_SWITCH \
|
NS_TIMER_SWITCH \
|
||||||
OVERRIDE_LIBC \
|
OVERRIDE_LIBC \
|
||||||
PL011_GENERIC_UART \
|
PL011_GENERIC_UART \
|
||||||
|
@ -1144,6 +1149,7 @@ $(eval $(call add_defines,\
|
||||||
HW_ASSISTED_COHERENCY \
|
HW_ASSISTED_COHERENCY \
|
||||||
LOG_LEVEL \
|
LOG_LEVEL \
|
||||||
MEASURED_BOOT \
|
MEASURED_BOOT \
|
||||||
|
DRTM_SUPPORT \
|
||||||
NS_TIMER_SWITCH \
|
NS_TIMER_SWITCH \
|
||||||
PL011_GENERIC_UART \
|
PL011_GENERIC_UART \
|
||||||
PLAT_${PLAT} \
|
PLAT_${PLAT} \
|
||||||
|
|
|
@ -645,6 +645,9 @@ subsections:
|
||||||
- title: GIC-600AE
|
- title: GIC-600AE
|
||||||
scope: gic600ae
|
scope: gic600ae
|
||||||
|
|
||||||
|
- title: SMMU
|
||||||
|
scope: smmu
|
||||||
|
|
||||||
- title: TZC
|
- title: TZC
|
||||||
scope: tzc
|
scope: tzc
|
||||||
|
|
||||||
|
|
|
@ -649,6 +649,15 @@ Common build options
|
||||||
|
|
||||||
This option defaults to 0.
|
This option defaults to 0.
|
||||||
|
|
||||||
|
- ``DRTM_SUPPORT``: Boolean flag to enable support for Dynamic Root of Trust
|
||||||
|
for Measurement (DRTM). This feature has trust dependency on BL31 for taking
|
||||||
|
the measurements and recording them as per `PSA DRTM specification`_. For
|
||||||
|
platforms which use BL2 to load/authenticate BL31 ``TRUSTED_BOARD_BOOT`` can
|
||||||
|
be used and for the platforms which use ``RESET_TO_BL31`` platform owners
|
||||||
|
should have mechanism to authenticate BL31.
|
||||||
|
|
||||||
|
This option defaults to 0.
|
||||||
|
|
||||||
- ``NON_TRUSTED_WORLD_KEY``: This option is used when ``GENERATE_COT=1``. It
|
- ``NON_TRUSTED_WORLD_KEY``: This option is used when ``GENERATE_COT=1``. It
|
||||||
specifies the file that contains the Non-Trusted World private key in PEM
|
specifies the file that contains the Non-Trusted World private key in PEM
|
||||||
format. If ``SAVE_KEYS=1``, this file name will be used to save the key.
|
format. If ``SAVE_KEYS=1``, this file name will be used to save the key.
|
||||||
|
@ -1116,3 +1125,4 @@ Firmware update options
|
||||||
|
|
||||||
.. _DEN0115: https://developer.arm.com/docs/den0115/latest
|
.. _DEN0115: https://developer.arm.com/docs/den0115/latest
|
||||||
.. _PSA FW update specification: https://developer.arm.com/documentation/den0118/a/
|
.. _PSA FW update specification: https://developer.arm.com/documentation/den0118/a/
|
||||||
|
.. _PSA DRTM specification: https://developer.arm.com/documentation/den0113/a
|
||||||
|
|
|
@ -14,7 +14,7 @@
|
||||||
/* SMMU poll number of retries */
|
/* SMMU poll number of retries */
|
||||||
#define SMMU_POLL_TIMEOUT_US U(1000)
|
#define SMMU_POLL_TIMEOUT_US U(1000)
|
||||||
|
|
||||||
static int __init smmuv3_poll(uintptr_t smmu_reg, uint32_t mask,
|
static int smmuv3_poll(uintptr_t smmu_reg, uint32_t mask,
|
||||||
uint32_t value)
|
uint32_t value)
|
||||||
{
|
{
|
||||||
uint32_t reg_val;
|
uint32_t reg_val;
|
||||||
|
@ -155,3 +155,28 @@ int __init smmuv3_init(uintptr_t smmu_base)
|
||||||
return smmuv3_poll(smmu_base + SMMU_S_INIT,
|
return smmuv3_poll(smmu_base + SMMU_S_INIT,
|
||||||
SMMU_S_INIT_INV_ALL, 0U);
|
SMMU_S_INIT_INV_ALL, 0U);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int smmuv3_ns_set_abort_all(uintptr_t smmu_base)
|
||||||
|
{
|
||||||
|
/* Attribute update has completed when SMMU_GBPA.Update bit is 0 */
|
||||||
|
if (smmuv3_poll(smmu_base + SMMU_GBPA, SMMU_GBPA_UPDATE, 0U) != 0U) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set GBPA's ABORT bit. Other GBPA fields are presumably ignored then,
|
||||||
|
* so simply preserve their value.
|
||||||
|
*/
|
||||||
|
mmio_setbits_32(smmu_base + SMMU_GBPA, SMMU_GBPA_UPDATE | SMMU_GBPA_ABORT);
|
||||||
|
if (smmuv3_poll(smmu_base + SMMU_GBPA, SMMU_GBPA_UPDATE, 0U) != 0U) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Disable the SMMU to engage the GBPA fields previously configured. */
|
||||||
|
mmio_clrbits_32(smmu_base + SMMU_CR0, SMMU_CR0_SMMUEN);
|
||||||
|
if (smmuv3_poll(smmu_base + SMMU_CR0ACK, SMMU_CR0_SMMUEN, 0U) != 0U) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
@ -12,6 +12,8 @@
|
||||||
#include <platform_def.h>
|
#include <platform_def.h>
|
||||||
|
|
||||||
/* SMMUv3 register offsets from device base */
|
/* SMMUv3 register offsets from device base */
|
||||||
|
#define SMMU_CR0 U(0x0020)
|
||||||
|
#define SMMU_CR0ACK U(0x0024)
|
||||||
#define SMMU_GBPA U(0x0044)
|
#define SMMU_GBPA U(0x0044)
|
||||||
#define SMMU_S_IDR1 U(0x8004)
|
#define SMMU_S_IDR1 U(0x8004)
|
||||||
#define SMMU_S_INIT U(0x803c)
|
#define SMMU_S_INIT U(0x803c)
|
||||||
|
@ -37,6 +39,9 @@
|
||||||
|
|
||||||
#endif /* ENABLE_RME */
|
#endif /* ENABLE_RME */
|
||||||
|
|
||||||
|
/* SMMU_CR0 and SMMU_CR0ACK register fields */
|
||||||
|
#define SMMU_CR0_SMMUEN (1UL << 0)
|
||||||
|
|
||||||
/* SMMU_GBPA register fields */
|
/* SMMU_GBPA register fields */
|
||||||
#define SMMU_GBPA_UPDATE (1UL << 31)
|
#define SMMU_GBPA_UPDATE (1UL << 31)
|
||||||
#define SMMU_GBPA_ABORT (1UL << 20)
|
#define SMMU_GBPA_ABORT (1UL << 20)
|
||||||
|
@ -61,4 +66,6 @@
|
||||||
int smmuv3_init(uintptr_t smmu_base);
|
int smmuv3_init(uintptr_t smmu_base);
|
||||||
int smmuv3_security_init(uintptr_t smmu_base);
|
int smmuv3_security_init(uintptr_t smmu_base);
|
||||||
|
|
||||||
|
int smmuv3_ns_set_abort_all(uintptr_t smmu_base);
|
||||||
|
|
||||||
#endif /* SMMU_V3_H */
|
#endif /* SMMU_V3_H */
|
||||||
|
|
|
@ -463,3 +463,6 @@ TWED_DELAY := 0
|
||||||
|
|
||||||
# By default, disable the mocking of RSS provided services
|
# By default, disable the mocking of RSS provided services
|
||||||
PLAT_RSS_NOT_SUPPORTED := 0
|
PLAT_RSS_NOT_SUPPORTED := 0
|
||||||
|
|
||||||
|
# Dynamic Root of Trust for Measurement support
|
||||||
|
DRTM_SUPPORT := 0
|
||||||
|
|
Loading…
Reference in New Issue