Add hardware key manager driver in the HLOS kernel to facilitate storage encryption using HWKM. Change-Id: I3531ab083443e2ef41ee5990386b9052ea69841d Signed-off-by: Gaurav Kashyap <gaurkash@codeaurora.org>
262 lines
11 KiB
C
262 lines
11 KiB
C
/* SPDX-License-Identifier: GPL-2.0-only */
|
|
/*
|
|
* Copyright (c) 2020, The Linux Foundation. All rights reserved.
|
|
*/
|
|
|
|
#ifndef _QTI_HARDWARE_KEY_MANAGER_REGS_H_
|
|
#define _QTI_HARDWARE_KEY_MANAGER_REGS_H_
|
|
|
|
#define HWKM_VERSION_STEP_REV_MASK 0xFFFF
|
|
#define HWKM_VERSION_STEP_REV 0 /* bit 15-0 */
|
|
#define HWKM_VERSION_MAJOR_REV_MASK 0xFF000000
|
|
#define HWKM_VERSION_MAJOR_REV 24 /* bit 31-24 */
|
|
#define HWKM_VERSION_MINOR_REV_MASK 0xFF0000
|
|
#define HWKM_VERSION_MINOR_REV 16 /* bit 23-16 */
|
|
|
|
/* QTI HWKM master registers from SWI */
|
|
/* QTI HWKM master shared registers */
|
|
#define QTI_HWKM_MASTER_RG_IPCAT_VERSION 0x0000
|
|
#define QTI_HWKM_MASTER_RG_KEY_POLICY_VERSION 0x0004
|
|
#define QTI_HWKM_MASTER_RG_SHARED_STATUS 0x0008
|
|
#define QTI_HWKM_MASTER_RG_KEYTABLE_SIZE 0x000C
|
|
|
|
/* QTI HWKM master register bank 2 */
|
|
#define QTI_HWKM_MASTER_RG_BANK2_BANKN_CTL 0x4000
|
|
#define QTI_HWKM_MASTER_RG_BANK2_BANKN_STATUS 0x4004
|
|
#define QTI_HWKM_MASTER_RG_BANK2_BANKN_IRQ_STATUS 0x4008
|
|
#define QTI_HWKM_MASTER_RG_BANK2_BANKN_IRQ_MASK 0x400C
|
|
#define QTI_HWKM_MASTER_RG_BANK2_BANKN_ESR 0x4010
|
|
#define QTI_HWKM_MASTER_RG_BANK2_BANKN_ESR_IRQ_MASK 0x4014
|
|
#define QTI_HWKM_MASTER_RG_BANK2_BANKN_ESYNR 0x4018
|
|
#define QTI_HWKM_MASTER_RG_BANK2_CMD_0 0x401C
|
|
#define QTI_HWKM_MASTER_RG_BANK2_CMD_1 0x4020
|
|
#define QTI_HWKM_MASTER_RG_BANK2_CMD_2 0x4024
|
|
#define QTI_HWKM_MASTER_RG_BANK2_CMD_3 0x4028
|
|
#define QTI_HWKM_MASTER_RG_BANK2_CMD_4 0x402C
|
|
#define QTI_HWKM_MASTER_RG_BANK2_CMD_5 0x4030
|
|
#define QTI_HWKM_MASTER_RG_BANK2_CMD_6 0x4034
|
|
#define QTI_HWKM_MASTER_RG_BANK2_CMD_7 0x4038
|
|
#define QTI_HWKM_MASTER_RG_BANK2_CMD_8 0x403C
|
|
#define QTI_HWKM_MASTER_RG_BANK2_CMD_9 0x4040
|
|
#define QTI_HWKM_MASTER_RG_BANK2_CMD_10 0x4044
|
|
#define QTI_HWKM_MASTER_RG_BANK2_CMD_11 0x4048
|
|
#define QTI_HWKM_MASTER_RG_BANK2_CMD_12 0x404C
|
|
#define QTI_HWKM_MASTER_RG_BANK2_CMD_13 0x4050
|
|
#define QTI_HWKM_MASTER_RG_BANK2_CMD_14 0x4054
|
|
#define QTI_HWKM_MASTER_RG_BANK2_CMD_15 0x4058
|
|
#define QTI_HWKM_MASTER_RG_BANK2_RSP_0 0x405C
|
|
#define QTI_HWKM_MASTER_RG_BANK2_RSP_1 0x4060
|
|
#define QTI_HWKM_MASTER_RG_BANK2_RSP_2 0x4064
|
|
#define QTI_HWKM_MASTER_RG_BANK2_RSP_3 0x4068
|
|
#define QTI_HWKM_MASTER_RG_BANK2_RSP_4 0x406C
|
|
#define QTI_HWKM_MASTER_RG_BANK2_RSP_5 0x4070
|
|
#define QTI_HWKM_MASTER_RG_BANK2_RSP_6 0x4074
|
|
#define QTI_HWKM_MASTER_RG_BANK2_RSP_7 0x4078
|
|
#define QTI_HWKM_MASTER_RG_BANK2_RSP_8 0x407C
|
|
#define QTI_HWKM_MASTER_RG_BANK2_RSP_9 0x4080
|
|
#define QTI_HWKM_MASTER_RG_BANK2_RSP_10 0x4084
|
|
#define QTI_HWKM_MASTER_RG_BANK2_RSP_11 0x4088
|
|
#define QTI_HWKM_MASTER_RG_BANK2_RSP_12 0x408C
|
|
#define QTI_HWKM_MASTER_RG_BANK2_RSP_13 0x4090
|
|
#define QTI_HWKM_MASTER_RG_BANK2_RSP_14 0x4094
|
|
#define QTI_HWKM_MASTER_RG_BANK2_RSP_15 0x4098
|
|
#define QTI_HWKM_MASTER_RG_BANK2_BANKN_IRQ_ROUTING 0x409C
|
|
#define QTI_HWKM_MASTER_RG_BANK2_BANKN_BBAC_0 0x40A0
|
|
#define QTI_HWKM_MASTER_RG_BANK2_BANKN_BBAC_1 0x40A4
|
|
#define QTI_HWKM_MASTER_RG_BANK2_BANKN_BBAC_2 0x40A8
|
|
#define QTI_HWKM_MASTER_RG_BANK2_BANKN_BBAC_3 0x40AC
|
|
#define QTI_HWKM_MASTER_RG_BANK2_BANKN_BBAC_4 0x40B0
|
|
|
|
/* QTI HWKM master register bank 3 */
|
|
#define QTI_HWKM_MASTER_RG_BANK3_BANKN_CTL 0x5000
|
|
#define QTI_HWKM_MASTER_RG_BANK3_BANKN_STATUS 0x5004
|
|
#define QTI_HWKM_MASTER_RG_BANK3_BANKN_IRQ_STATUS 0x5008
|
|
#define QTI_HWKM_MASTER_RG_BANK3_BANKN_IRQ_MASK 0x500C
|
|
#define QTI_HWKM_MASTER_RG_BANK3_BANKN_ESR 0x5010
|
|
#define QTI_HWKM_MASTER_RG_BANK3_BANKN_ESR_IRQ_MASK 0x5014
|
|
#define QTI_HWKM_MASTER_RG_BANK3_BANKN_ESYNR 0x5018
|
|
#define QTI_HWKM_MASTER_RG_BANK3_CMD_0 0x501C
|
|
#define QTI_HWKM_MASTER_RG_BANK3_CMD_1 0x5020
|
|
#define QTI_HWKM_MASTER_RG_BANK3_CMD_2 0x5024
|
|
#define QTI_HWKM_MASTER_RG_BANK3_CMD_3 0x5028
|
|
#define QTI_HWKM_MASTER_RG_BANK3_CMD_4 0x502C
|
|
#define QTI_HWKM_MASTER_RG_BANK3_CMD_5 0x5030
|
|
#define QTI_HWKM_MASTER_RG_BANK3_CMD_6 0x5034
|
|
#define QTI_HWKM_MASTER_RG_BANK3_CMD_7 0x5038
|
|
#define QTI_HWKM_MASTER_RG_BANK3_CMD_8 0x503C
|
|
#define QTI_HWKM_MASTER_RG_BANK3_CMD_9 0x5040
|
|
#define QTI_HWKM_MASTER_RG_BANK3_CMD_10 0x5044
|
|
#define QTI_HWKM_MASTER_RG_BANK3_CMD_11 0x5048
|
|
#define QTI_HWKM_MASTER_RG_BANK3_CMD_12 0x504C
|
|
#define QTI_HWKM_MASTER_RG_BANK3_CMD_13 0x5050
|
|
#define QTI_HWKM_MASTER_RG_BANK3_CMD_14 0x5054
|
|
#define QTI_HWKM_MASTER_RG_BANK3_CMD_15 0x5058
|
|
#define QTI_HWKM_MASTER_RG_BANK3_RSP_0 0x505C
|
|
#define QTI_HWKM_MASTER_RG_BANK3_RSP_1 0x5060
|
|
#define QTI_HWKM_MASTER_RG_BANK3_RSP_2 0x5064
|
|
#define QTI_HWKM_MASTER_RG_BANK3_RSP_3 0x5068
|
|
#define QTI_HWKM_MASTER_RG_BANK3_RSP_4 0x506C
|
|
#define QTI_HWKM_MASTER_RG_BANK3_RSP_5 0x5070
|
|
#define QTI_HWKM_MASTER_RG_BANK3_RSP_6 0x5074
|
|
#define QTI_HWKM_MASTER_RG_BANK3_RSP_7 0x5078
|
|
#define QTI_HWKM_MASTER_RG_BANK3_RSP_8 0x507C
|
|
#define QTI_HWKM_MASTER_RG_BANK3_RSP_9 0x5080
|
|
#define QTI_HWKM_MASTER_RG_BANK3_RSP_10 0x5084
|
|
#define QTI_HWKM_MASTER_RG_BANK3_RSP_11 0x5088
|
|
#define QTI_HWKM_MASTER_RG_BANK3_RSP_12 0x508C
|
|
#define QTI_HWKM_MASTER_RG_BANK3_RSP_13 0x5090
|
|
#define QTI_HWKM_MASTER_RG_BANK3_RSP_14 0x5094
|
|
#define QTI_HWKM_MASTER_RG_BANK3_RSP_15 0x5098
|
|
#define QTI_HWKM_MASTER_RG_BANK3_BANKN_IRQ_ROUTING 0x509C
|
|
#define QTI_HWKM_MASTER_RG_BANK3_BANKN_BBAC_0 0x50A0
|
|
#define QTI_HWKM_MASTER_RG_BANK3_BANKN_BBAC_1 0x50A4
|
|
#define QTI_HWKM_MASTER_RG_BANK3_BANKN_BBAC_2 0x50A8
|
|
#define QTI_HWKM_MASTER_RG_BANK3_BANKN_BBAC_3 0x50AC
|
|
#define QTI_HWKM_MASTER_RG_BANK3_BANKN_BBAC_4 0x50B0
|
|
|
|
/* QTI HWKM access control registers for Bank 2 */
|
|
#define QTI_HWKM_MASTER_RG_BANK2_AC_BANKN_BBAC_0 0x8000
|
|
#define QTI_HWKM_MASTER_RG_BANK2_AC_BANKN_BBAC_1 0x8004
|
|
#define QTI_HWKM_MASTER_RG_BANK2_AC_BANKN_BBAC_2 0x8008
|
|
#define QTI_HWKM_MASTER_RG_BANK2_AC_BANKN_BBAC_3 0x800C
|
|
#define QTI_HWKM_MASTER_RG_BANK2_AC_BANKN_BBAC_4 0x8010
|
|
|
|
/* QTI HWKM access control registers for Bank 3 */
|
|
#define QTI_HWKM_MASTER_RG_BANK3_AC_BANKN_BBAC_0 0x9000
|
|
#define QTI_HWKM_MASTER_RG_BANK3_AC_BANKN_BBAC_1 0x9004
|
|
#define QTI_HWKM_MASTER_RG_BANK3_AC_BANKN_BBAC_2 0x9008
|
|
#define QTI_HWKM_MASTER_RG_BANK3_AC_BANKN_BBAC_3 0x900C
|
|
#define QTI_HWKM_MASTER_RG_BANK3_AC_BANKN_BBAC_4 0x9010
|
|
|
|
/* QTI HWKM ICE slave config and status registers */
|
|
#define QTI_HWKM_ICE_RG_TZ_KM_CTL 0x1000
|
|
#define QTI_HWKM_ICE_RG_TZ_KM_STATUS 0x1004
|
|
#define QTI_HWKM_ICE_RG_TZ_KM_STATUS_IRQ_MASK 0x1008
|
|
#define QTI_HWKM_ICE_RG_TZ_KM_BOOT_STAGE_OTP 0x100C
|
|
#define QTI_HWKM_ICE_RG_TZ_KM_DEBUG_CTL 0x1010
|
|
#define QTI_HWKM_ICE_RG_TZ_KM_DEBUG_WRITE 0x1014
|
|
#define QTI_HWKM_ICE_RG_TZ_KM_DEBUG_READ 0x1018
|
|
#define QTI_HWKM_ICE_RG_TZ_TPKEY_RECEIVE_CTL 0x101C
|
|
#define QTI_HWKM_ICE_RG_TZ_TPKEY_RECEIVE_STATUS 0x1020
|
|
#define QTI_HWKM_ICE_RG_TZ_KM_COMMON_IRQ_ROUTING 0x1024
|
|
|
|
/* QTI HWKM ICE slave registers from SWI */
|
|
/* QTI HWKM ICE slave shared registers */
|
|
#define QTI_HWKM_ICE_RG_IPCAT_VERSION 0x0000
|
|
#define QTI_HWKM_ICE_RG_KEY_POLICY_VERSION 0x0004
|
|
#define QTI_HWKM_ICE_RG_SHARED_STATUS 0x0008
|
|
#define QTI_HWKM_ICE_RG_KEYTABLE_SIZE 0x000C
|
|
|
|
/* QTI HWKM ICE slave register bank 0 */
|
|
#define QTI_HWKM_ICE_RG_BANK0_BANKN_CTL 0x2000
|
|
#define QTI_HWKM_ICE_RG_BANK0_BANKN_STATUS 0x2004
|
|
#define QTI_HWKM_ICE_RG_BANK0_BANKN_IRQ_STATUS 0x2008
|
|
#define QTI_HWKM_ICE_RG_BANK0_BANKN_IRQ_MASK 0x200C
|
|
#define QTI_HWKM_ICE_RG_BANK0_BANKN_ESR 0x2010
|
|
#define QTI_HWKM_ICE_RG_BANK0_BANKN_ESR_IRQ_MASK 0x2014
|
|
#define QTI_HWKM_ICE_RG_BANK0_BANKN_ESYNR 0x2018
|
|
#define QTI_HWKM_ICE_RG_BANK0_CMD_0 0x201C
|
|
#define QTI_HWKM_ICE_RG_BANK0_CMD_1 0x2020
|
|
#define QTI_HWKM_ICE_RG_BANK0_CMD_2 0x2024
|
|
#define QTI_HWKM_ICE_RG_BANK0_CMD_3 0x2028
|
|
#define QTI_HWKM_ICE_RG_BANK0_CMD_4 0x202C
|
|
#define QTI_HWKM_ICE_RG_BANK0_CMD_5 0x2030
|
|
#define QTI_HWKM_ICE_RG_BANK0_CMD_6 0x2034
|
|
#define QTI_HWKM_ICE_RG_BANK0_CMD_7 0x2038
|
|
#define QTI_HWKM_ICE_RG_BANK0_CMD_8 0x203C
|
|
#define QTI_HWKM_ICE_RG_BANK0_CMD_9 0x2040
|
|
#define QTI_HWKM_ICE_RG_BANK0_CMD_10 0x2044
|
|
#define QTI_HWKM_ICE_RG_BANK0_CMD_11 0x2048
|
|
#define QTI_HWKM_ICE_RG_BANK0_CMD_12 0x204C
|
|
#define QTI_HWKM_ICE_RG_BANK0_CMD_13 0x2050
|
|
#define QTI_HWKM_ICE_RG_BANK0_CMD_14 0x2054
|
|
#define QTI_HWKM_ICE_RG_BANK0_CMD_15 0x2058
|
|
#define QTI_HWKM_ICE_RG_BANK0_RSP_0 0x205C
|
|
#define QTI_HWKM_ICE_RG_BANK0_RSP_1 0x2060
|
|
#define QTI_HWKM_ICE_RG_BANK0_RSP_2 0x2064
|
|
#define QTI_HWKM_ICE_RG_BANK0_RSP_3 0x2068
|
|
#define QTI_HWKM_ICE_RG_BANK0_RSP_4 0x206C
|
|
#define QTI_HWKM_ICE_RG_BANK0_RSP_5 0x2070
|
|
#define QTI_HWKM_ICE_RG_BANK0_RSP_6 0x2074
|
|
#define QTI_HWKM_ICE_RG_BANK0_RSP_7 0x2078
|
|
#define QTI_HWKM_ICE_RG_BANK0_RSP_8 0x207C
|
|
#define QTI_HWKM_ICE_RG_BANK0_RSP_9 0x2080
|
|
#define QTI_HWKM_ICE_RG_BANK0_RSP_10 0x2084
|
|
#define QTI_HWKM_ICE_RG_BANK0_RSP_11 0x2088
|
|
#define QTI_HWKM_ICE_RG_BANK0_RSP_12 0x208C
|
|
#define QTI_HWKM_ICE_RG_BANK0_RSP_13 0x2090
|
|
#define QTI_HWKM_ICE_RG_BANK0_RSP_14 0x2094
|
|
#define QTI_HWKM_ICE_RG_BANK0_RSP_15 0x2098
|
|
#define QTI_HWKM_ICE_RG_BANK0_BANKN_IRQ_ROUTING 0x209C
|
|
#define QTI_HWKM_ICE_RG_BANK0_BANKN_BBAC_0 0x20A0
|
|
#define QTI_HWKM_ICE_RG_BANK0_BANKN_BBAC_1 0x20A4
|
|
#define QTI_HWKM_ICE_RG_BANK0_BANKN_BBAC_2 0x20A8
|
|
#define QTI_HWKM_ICE_RG_BANK0_BANKN_BBAC_3 0x20AC
|
|
#define QTI_HWKM_ICE_RG_BANK0_BANKN_BBAC_4 0x20B0
|
|
|
|
/* QTI HWKM access control registers for Bank 2 */
|
|
#define QTI_HWKM_ICE_RG_BANK0_AC_BANKN_BBAC_0 0x5000
|
|
#define QTI_HWKM_ICE_RG_BANK0_AC_BANKN_BBAC_1 0x5004
|
|
#define QTI_HWKM_ICE_RG_BANK0_AC_BANKN_BBAC_2 0x5008
|
|
#define QTI_HWKM_ICE_RG_BANK0_AC_BANKN_BBAC_3 0x500C
|
|
#define QTI_HWKM_ICE_RG_BANK0_AC_BANKN_BBAC_4 0x5010
|
|
|
|
|
|
/* QTI HWKM ICE slave config reg vals */
|
|
|
|
/* HWKM_ICEMEM_SLAVE_ICE_KM_RG_TZ_KM_CTL */
|
|
#define CRC_CHECK_EN 0
|
|
#define KEYTABLE_HW_WR_ACCESS_EN 1
|
|
#define KEYTABLE_HW_RD_ACCESS_EN 2
|
|
#define BOOT_INIT0_DISABLE 3
|
|
#define BOOT_INIT1_DISABLE 4
|
|
#define ICE_LEGACY_MODE_EN_OTP 5
|
|
|
|
/* HWKM_ICEMEM_SLAVE_ICE_KM_RG_TZ_KM_STATUS */
|
|
#define KT_CLEAR_DONE 0
|
|
#define BOOT_CMD_LIST0_DONE 1
|
|
#define BOOT_CMD_LIST1_DONE 2
|
|
#define KEYTABLE_KEY_POLICY 3
|
|
#define KEYTABLE_INTEGRITY_ERROR 4
|
|
#define KEYTABLE_KEY_SLOT_ERROR 5
|
|
#define KEYTABLE_KEY_SLOT_NOT_EVEN_ERROR 6
|
|
#define KEYTABLE_KEY_SLOT_OUT_OF_RANGE 7
|
|
#define KEYTABLE_KEY_SIZE_ERROR 8
|
|
#define KEYTABLE_OPERATION_ERROR 9
|
|
#define LAST_ACTIVITY_BANK 10
|
|
#define CRYPTO_LIB_BIST_ERROR 13
|
|
#define CRYPTO_LIB_BIST_DONE 14
|
|
#define BIST_ERROR 15
|
|
#define BIST_DONE 16
|
|
#define LAST_ACTIVITY_BANK_MASK 0x1c00
|
|
|
|
/* HWKM_ICEMEM_SLAVE_ICE_KM_RG_TZ_TPKEY_RECEIVE_CTL */
|
|
#define TPKEY_EN 8
|
|
|
|
/* QTI HWKM Bank status & control reg vals */
|
|
|
|
/* HWKM_MASTER_CFG_KM_BANKN_CTL */
|
|
#define CMD_ENABLE_BIT 0
|
|
#define CMD_FIFO_CLEAR_BIT 1
|
|
|
|
/* HWKM_MASTER_CFG_KM_BANKN_STATUS */
|
|
#define CURRENT_CMD_REMAINING_LENGTH 0
|
|
#define MOST_RECENT_OPCODE 5
|
|
#define RSP_FIFO_AVAILABLE_DATA 9
|
|
#define CMD_FIFO_AVAILABLE_SPACE 14
|
|
#define ICE_LEGACY_MODE_BIT 19
|
|
#define CMD_FIFO_AVAILABLE_SPACE_MASK 0x7c000
|
|
#define RSP_FIFO_AVAILABLE_DATA_MASK 0x3e00
|
|
#define MOST_RECENT_OPCODE_MASK 0x1e0
|
|
#define CURRENT_CMD_REMAINING_LENGTH_MASK 0x1f
|
|
|
|
/* HWKM_MASTER_CFG_KM_BANKN_IRQ_STATUS */
|
|
#define ARB_GRAN_WINNER 0
|
|
#define CMD_DONE_BIT 1
|
|
#define RSP_FIFO_NOT_EMPTY 2
|
|
#define RSP_FIFO_FULL 3
|
|
#define RSP_FIFO_UNDERFLOW 4
|
|
#define CMD_FIFO_UNDERFLOW 5
|
|
|
|
#endif /* __QTI_HARDWARE_KEY_MANAGER_REGS_H_ */
|