diff options
author | Andrew Turner <andrew@FreeBSD.org> | 2018-07-31 12:53:27 +0000 |
---|---|---|
committer | Andrew Turner <andrew@FreeBSD.org> | 2018-07-31 12:53:27 +0000 |
commit | 0594061ee6fbd63d428e70cab4c82171f87f7604 (patch) | |
tree | 612de1fb938563b77727c6ef9b877792fb801e5c /sys/dev/psci | |
parent | 195e6c50d379f6d336888c17d91dca25493dbcd1 (diff) | |
download | src-0594061ee6fbd63d428e70cab4c82171f87f7604.tar.gz src-0594061ee6fbd63d428e70cab4c82171f87f7604.zip |
Notes
Diffstat (limited to 'sys/dev/psci')
-rw-r--r-- | sys/dev/psci/smccc.c | 9 | ||||
-rw-r--r-- | sys/dev/psci/smccc.h | 3 |
2 files changed, 12 insertions, 0 deletions
diff --git a/sys/dev/psci/smccc.c b/sys/dev/psci/smccc.c index 9641a49e34ff..b59bf659eec5 100644 --- a/sys/dev/psci/smccc.c +++ b/sys/dev/psci/smccc.c @@ -91,3 +91,12 @@ smccc_arch_workaround_1(void) ("SMCCC arch workaround 1 called with an invalid SMCCC interface")); return (psci_call(SMCCC_ARCH_WORKAROUND_1, 0, 0, 0)); } + +int +smccc_arch_workaround_2(bool enable) +{ + + KASSERT(smccc_version != SMCCC_VERSION_1_0, + ("SMCCC arch workaround 2 called with an invalid SMCCC interface")); + return (psci_call(SMCCC_ARCH_WORKAROUND_2, enable ? 1 : 0, 0, 0)); +} diff --git a/sys/dev/psci/smccc.h b/sys/dev/psci/smccc.h index 1047ba86055c..223f688fa80e 100644 --- a/sys/dev/psci/smccc.h +++ b/sys/dev/psci/smccc.h @@ -59,6 +59,8 @@ SMCCC_FUNC_ID(SMCCC_FAST_CALL, SMCCC_32BIT_CALL, 0, 1) #define SMCCC_ARCH_WORKAROUND_1 \ SMCCC_FUNC_ID(SMCCC_FAST_CALL, SMCCC_32BIT_CALL, 0, 0x8000) +#define SMCCC_ARCH_WORKAROUND_2 \ + SMCCC_FUNC_ID(SMCCC_FAST_CALL, SMCCC_32BIT_CALL, 0, 0x7fff) /* The return values from ARM DEN 0070A. */ #define SMCCC_RET_SUCCESS 0 @@ -67,6 +69,7 @@ int32_t smccc_arch_features(uint32_t); int smccc_arch_workaround_1(void); +int smccc_arch_workaround_2(bool); #endif /* _PSCI_SMCCC_H_ */ |