aboutsummaryrefslogtreecommitdiff
path: root/sys/dev/psci
diff options
context:
space:
mode:
authorAndrew Turner <andrew@FreeBSD.org>2018-07-31 12:53:27 +0000
committerAndrew Turner <andrew@FreeBSD.org>2018-07-31 12:53:27 +0000
commit0594061ee6fbd63d428e70cab4c82171f87f7604 (patch)
tree612de1fb938563b77727c6ef9b877792fb801e5c /sys/dev/psci
parent195e6c50d379f6d336888c17d91dca25493dbcd1 (diff)
downloadsrc-0594061ee6fbd63d428e70cab4c82171f87f7604.tar.gz
src-0594061ee6fbd63d428e70cab4c82171f87f7604.zip
Notes
Diffstat (limited to 'sys/dev/psci')
-rw-r--r--sys/dev/psci/smccc.c9
-rw-r--r--sys/dev/psci/smccc.h3
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_ */