summaryrefslogtreecommitdiff
path: root/drivers/char/hw_random/starfive-vic-rng.h
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/char/hw_random/starfive-vic-rng.h')
-rw-r--r--drivers/char/hw_random/starfive-vic-rng.h167
1 files changed, 167 insertions, 0 deletions
diff --git a/drivers/char/hw_random/starfive-vic-rng.h b/drivers/char/hw_random/starfive-vic-rng.h
new file mode 100644
index 000000000000..b3bbabde0cfb
--- /dev/null
+++ b/drivers/char/hw_random/starfive-vic-rng.h
@@ -0,0 +1,167 @@
+/*
+ ******************************************************************************
+ * @file starfive-vic-rng.h
+ * @author StarFive Technology
+ * @version V1.0
+ * @date 08/13/2020
+ * @brief
+ ******************************************************************************
+ * @copy
+ *
+ * THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
+ * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE
+ * TIME. AS A RESULT, STARFIVE SHALL NOT BE HELD LIABLE FOR ANY
+ * DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING
+ * FROM THE CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE
+ * CODING INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
+ *
+ * COPYRIGHT 2020 Shanghai StarFive Technology Co., Ltd.
+ */
+
+#define VIC_CTRL 0x00
+#define VIC_MODE 0x04
+#define VIC_SMODE 0x08
+#define VIC_STAT 0x0C
+#define VIC_IE 0x10
+#define VIC_ISTAT 0x14
+#define VIC_ALARM 0x18
+#define VIC_BUILD_ID 0x1C
+#define VIC_FEATURES 0x20
+#define VIC_RAND0 0x24
+#define VIC_NPA_DATA0 0x34
+#define VIC_SEED0 0x74
+#define VIC_IA_RDATA 0xA4
+#define VIC_IA_WDATA 0xA8
+#define VIC_IA_ADDR 0xAC
+#define VIC_IA_CMD 0xB0
+
+/* CTRL */
+#define VIC_CTRL_CMD_NOP 0
+#define VIC_CTRL_CMD_GEN_NOISE 1
+#define VIC_CTRL_CMD_GEN_NONCE 2
+#define VIC_CTRL_CMD_CREATE_STATE 3
+#define VIC_CTRL_CMD_RENEW_STATE 4
+#define VIC_CTRL_CMD_REFRESH_ADDIN 5
+#define VIC_CTRL_CMD_GEN_RANDOM 6
+#define VIC_CTRL_CMD_ADVANCE_STATE 7
+#define VIC_CTRL_CMD_KAT 8
+#define VIC_CTRL_CMD_ZEROIZE 15
+
+/* MODE */
+#define _VIC_MODE_ADDIN_PRESENT 4
+#define _VIC_MODE_PRED_RESIST 3
+#define _VIC_MODE_KAT_SEL 2
+#define _VIC_MODE_KAT_VEC 1
+#define _VIC_MODE_SEC_ALG 0
+
+#define VIC_MODE_ADDIN_PRESENT (1UL << _VIC_MODE_ADDIN_PRESENT)
+#define VIC_MODE_PRED_RESIST (1UL << _VIC_MODE_PRED_RESIST)
+#define VIC_MODE_KAT_SEL (1UL << _VIC_MODE_KAT_SEL)
+#define VIC_MODE_KAT_VEC (1UL << _VIC_MODE_KAT_VEC)
+#define VIC_MODE_SEC_ALG (1UL << _VIC_MODE_SEC_ALG)
+
+/* SMODE */
+#define _VIC_SMODE_MAX_REJECTS 2
+#define _VIC_SMODE_SECURE_EN 1
+#define _VIC_SMODE_NONCE 0
+
+#define VIC_SMODE_MAX_REJECTS(x) ((x) << _VIC_SMODE_MAX_REJECTS)
+#define VIC_SMODE_SECURE_EN(x) ((x) << _VIC_SMODE_SECURE_EN)
+#define VIC_SMODE_NONCE (1UL << _VIC_SMODE_NONCE)
+
+/* STAT */
+#define _VIC_STAT_BUSY 31
+#define _VIC_STAT_DRBG_STATE 7
+#define _VIC_STAT_SECURE 6
+#define _VIC_STAT_NONCE_MODE 5
+#define _VIC_STAT_SEC_ALG 4
+#define _VIC_STAT_LAST_CMD 0
+
+#define VIC_STAT_BUSY (1UL << _VIC_STAT_BUSY)
+#define VIC_STAT_DRBG_STATE (1UL << _VIC_STAT_DRBG_STATE)
+#define VIC_STAT_SECURE (1UL << _VIC_STAT_SECURE)
+#define VIC_STAT_NONCE_MODE (1UL << _VIC_STAT_NONCE_MODE)
+#define VIC_STAT_SEC_ALG (1UL << _VIC_STAT_SEC_ALG)
+#define VIC_STAT_LAST_CMD(x) (((x) >> _VIC_STAT_LAST_CMD) & 0xF)
+
+/* IE */
+#define _VIC_IE_GLBL 31
+#define _VIC_IE_DONE 4
+#define _VIC_IE_ALARMS 3
+#define _VIC_IE_NOISE_RDY 2
+#define _VIC_IE_KAT_COMPLETE 1
+#define _VIC_IE_ZEROIZE 0
+
+#define VIC_IE_GLBL (1UL << _VIC_IE_GLBL)
+#define VIC_IE_DONE (1UL << _VIC_IE_DONE)
+#define VIC_IE_ALARMS (1UL << _VIC_IE_ALARMS)
+#define VIC_IE_NOISE_RDY (1UL << _VIC_IE_NOISE_RDY)
+#define VIC_IE_KAT_COMPLETE (1UL << _VIC_IE_KAT_COMPLETE)
+#define VIC_IE_ZEROIZE (1UL << _VIC_IE_ZEROIZE)
+#define VIC_IE_ALL (VIC_IE_GLBL | VIC_IE_DONE | VIC_IE_ALARMS | \
+ VIC_IE_NOISE_RDY | VIC_IE_KAT_COMPLETE | VIC_IE_ZEROIZE)
+
+/* ISTAT */
+#define _VIC_ISTAT_DONE 4
+#define _VIC_ISTAT_ALARMS 3
+#define _VIC_ISTAT_NOISE_RDY 2
+#define _VIC_ISTAT_KAT_COMPLETE 1
+#define _VIC_ISTAT_ZEROIZE 0
+
+#define VIC_ISTAT_DONE (1UL << _VIC_ISTAT_DONE)
+#define VIC_ISTAT_ALARMS (1UL << _VIC_ISTAT_ALARMS)
+#define VIC_ISTAT_NOISE_RDY (1UL << _VIC_ISTAT_NOISE_RDY)
+#define VIC_ISTAT_KAT_COMPLETE (1UL << _VIC_ISTAT_KAT_COMPLETE)
+#define VIC_ISTAT_ZEROIZE (1UL << _VIC_ISTAT_ZEROIZE)
+
+/* ALARMS */
+#define VIC_ALARM_ILLEGAL_CMD_SEQ (1UL << 4)
+#define VIC_ALARM_FAILED_TEST_ID_OK 0
+#define VIC_ALARM_FAILED_TEST_ID_KAT_STAT 1
+#define VIC_ALARM_FAILED_TEST_ID_KAT 2
+#define VIC_ALARM_FAILED_TEST_ID_MONOBIT 3
+#define VIC_ALARM_FAILED_TEST_ID_RUN 4
+#define VIC_ALARM_FAILED_TEST_ID_LONGRUN 5
+#define VIC_ALARM_FAILED_TEST_ID_AUTOCORRELATION 6
+#define VIC_ALARM_FAILED_TEST_ID_POKER 7
+#define VIC_ALARM_FAILED_TEST_ID_REPETITION_COUNT 8
+#define VIC_ALARM_FAILED_TEST_ID_ADAPATIVE_PROPORTION 9
+
+/* BUILD_ID */
+#define VIC_BUILD_ID_STEPPING(x) (((x) >> 28) & 0xF)
+#define VIC_BUILD_ID_EPN(x) ((x) & 0xFFFF)
+
+/* FEATURES */
+#define VIC_FEATURES_AES_256(x) (((x) >> 9) & 1)
+#define VIC_FEATURES_EXTRA_PS_PRESENT(x) (((x) >> 8) & 1)
+#define VIC_FEATURES_DIAG_LEVEL_NS(x) (((x) >> 7) & 1)
+#define VIC_FEATURES_DIAG_LEVEL_CLP800(x) (((x) >> 4) & 7)
+#define VIC_FEATURES_DIAG_LEVEL_ST_HLT(x) (((x) >> 1) & 7)
+#define VIC_FEATURES_SECURE_RST_STATE(x) ((x) & 1)
+
+/* IA_CMD */
+#define VIC_IA_CMD_GO (1UL << 31)
+#define VIC_IA_CMD_WR (1)
+
+#define _VIC_SMODE_MAX_REJECTS_MASK 255UL
+#define _VIC_SMODE_SECURE_EN_MASK 1UL
+#define _VIC_SMODE_NONCE_MASK 1UL
+#define _VIC_MODE_SEC_ALG_MASK 1UL
+#define _VIC_MODE_ADDIN_PRESENT_MASK 1UL
+#define _VIC_MODE_PRED_RESIST_MASK 1UL
+
+#define VIC_SMODE_SET_MAX_REJECTS(y, x) (((y) & ~(_VIC_SMODE_MAX_REJECTS_MASK << _VIC_SMODE_MAX_REJECTS)) | ((x) << _VIC_SMODE_MAX_REJECTS))
+#define VIC_SMODE_SET_SECURE_EN(y, x) (((y) & ~(_VIC_SMODE_SECURE_EN_MASK << _VIC_SMODE_SECURE_EN)) | ((x) << _VIC_SMODE_SECURE_EN))
+#define VIC_SMODE_SET_NONCE(y, x) (((y) & ~(_VIC_SMODE_NONCE_MASK << _VIC_SMODE_NONCE)) | ((x) << _VIC_SMODE_NONCE))
+#define VIC_SMODE_GET_MAX_REJECTS(x) (((x) >> _VIC_SMODE_MAX_REJECTS) & _VIC_SMODE_MAX_REJECTS_MASK)
+#define VIC_SMODE_GET_SECURE_EN(x) (((x) >> _VIC_SMODE_SECURE_EN) & _VIC_SMODE_SECURE_EN_MASK)
+#define VIC_SMODE_GET_NONCE(x) (((x) >> _VIC_SMODE_NONCE) & _VIC_SMODE_NONCE_MASK)
+
+#define VIC_MODE_SET_SEC_ALG(y, x) (((y) & ~(_VIC_MODE_SEC_ALG_MASK << _VIC_MODE_SEC_ALG)) | ((x) << _VIC_MODE_SEC_ALG))
+#define VIC_MODE_SET_PRED_RESIST(y, x) (((y) & ~(_VIC_MODE_PRED_RESIST_MASK << _VIC_MODE_PRED_RESIST)) | ((x) << _VIC_MODE_PRED_RESIST))
+#define VIC_MODE_SET_ADDIN_PRESENT(y, x) (((y) & ~(_VIC_MODE_ADDIN_PRESENT_MASK << _VIC_MODE_ADDIN_PRESENT)) | ((x) << _VIC_MODE_ADDIN_PRESENT))
+#define VIC_MODE_GET_SEC_ALG(x) (((x) >> _VIC_MODE_SEC_ALG) & _VIC_MODE_SEC_ALG_MASK)
+#define VIC_MODE_GET_PRED_RESIST(x) (((x) >> _VIC_MODE_PRED_RESIST) & _VIC_MODE_PRED_RESIST_MASK)
+#define VIC_MODE_GET_ADDIN_PRESENT(x) (((x) >> _VIC_MODE_ADDIN_PRESENT) & _VIC_MODE_ADDIN_PRESENT_MASK)
+
+#define VIC_RAND_LEN 4