mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-23 05:56:14 -04:00
crypto: hisilicon/sec - get algorithm bitmap from registers
Add function 'sec_get_alg_bitmap' to get hardware algorithm bitmap before register algorithm to crypto, instead of determining whether to register an algorithm based on hardware platform's version. Signed-off-by: Wenkai Lin <linwenkai6@hisilicon.com> Signed-off-by: Weili Qian <qianweili@huawei.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
@@ -41,7 +41,6 @@
|
||||
#define SEC_ECC_NUM 16
|
||||
#define SEC_ECC_MASH 0xFF
|
||||
#define SEC_CORE_INT_DISABLE 0x0
|
||||
#define SEC_SAA_ENABLE 0x17f
|
||||
|
||||
#define SEC_RAS_CE_REG 0x301050
|
||||
#define SEC_RAS_FE_REG 0x301054
|
||||
@@ -114,6 +113,8 @@
|
||||
#define SEC_DFX_COMMON1_LEN 0x45
|
||||
#define SEC_DFX_COMMON2_LEN 0xBA
|
||||
|
||||
#define SEC_ALG_BITMAP_SHIFT 32
|
||||
|
||||
struct sec_hw_error {
|
||||
u32 int_msk;
|
||||
const char *msg;
|
||||
@@ -141,6 +142,23 @@ static const struct hisi_qm_cap_info sec_basic_info[] = {
|
||||
{SEC_RESET_MASK_CAP, 0x3134, 0, GENMASK(31, 0), 0x0, 0x177, 0x177},
|
||||
{SEC_OOO_SHUTDOWN_MASK_CAP, 0x3134, 0, GENMASK(31, 0), 0x0, 0x4, 0x177},
|
||||
{SEC_CE_MASK_CAP, 0x3138, 0, GENMASK(31, 0), 0x0, 0x88, 0xC088},
|
||||
{SEC_CLUSTER_NUM_CAP, 0x313c, 20, GENMASK(3, 0), 0x1, 0x1, 0x1},
|
||||
{SEC_CORE_TYPE_NUM_CAP, 0x313c, 16, GENMASK(3, 0), 0x1, 0x1, 0x1},
|
||||
{SEC_CORE_NUM_CAP, 0x313c, 8, GENMASK(7, 0), 0x4, 0x4, 0x4},
|
||||
{SEC_CORES_PER_CLUSTER_NUM_CAP, 0x313c, 0, GENMASK(7, 0), 0x4, 0x4, 0x4},
|
||||
{SEC_CORE_ENABLE_BITMAP, 0x3140, 32, GENMASK(31, 0), 0x17F, 0x17F, 0xF},
|
||||
{SEC_DRV_ALG_BITMAP_LOW, 0x3144, 0, GENMASK(31, 0), 0x18050CB, 0x18050CB, 0x187F0FF},
|
||||
{SEC_DRV_ALG_BITMAP_HIGH, 0x3148, 0, GENMASK(31, 0), 0x395C, 0x395C, 0x395C},
|
||||
{SEC_DEV_ALG_BITMAP_LOW, 0x314c, 0, GENMASK(31, 0), 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF},
|
||||
{SEC_DEV_ALG_BITMAP_HIGH, 0x3150, 0, GENMASK(31, 0), 0x3FFF, 0x3FFF, 0x3FFF},
|
||||
{SEC_CORE1_ALG_BITMAP_LOW, 0x3154, 0, GENMASK(31, 0), 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF},
|
||||
{SEC_CORE1_ALG_BITMAP_HIGH, 0x3158, 0, GENMASK(31, 0), 0x3FFF, 0x3FFF, 0x3FFF},
|
||||
{SEC_CORE2_ALG_BITMAP_LOW, 0x315c, 0, GENMASK(31, 0), 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF},
|
||||
{SEC_CORE2_ALG_BITMAP_HIGH, 0x3160, 0, GENMASK(31, 0), 0x3FFF, 0x3FFF, 0x3FFF},
|
||||
{SEC_CORE3_ALG_BITMAP_LOW, 0x3164, 0, GENMASK(31, 0), 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF},
|
||||
{SEC_CORE3_ALG_BITMAP_HIGH, 0x3168, 0, GENMASK(31, 0), 0x3FFF, 0x3FFF, 0x3FFF},
|
||||
{SEC_CORE4_ALG_BITMAP_LOW, 0x316c, 0, GENMASK(31, 0), 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF},
|
||||
{SEC_CORE4_ALG_BITMAP_HIGH, 0x3170, 0, GENMASK(31, 0), 0x3FFF, 0x3FFF, 0x3FFF},
|
||||
};
|
||||
|
||||
static const struct sec_hw_error sec_hw_errors[] = {
|
||||
@@ -345,6 +363,16 @@ struct hisi_qp **sec_create_qps(void)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
u64 sec_get_alg_bitmap(struct hisi_qm *qm, u32 high, u32 low)
|
||||
{
|
||||
u32 cap_val_h, cap_val_l;
|
||||
|
||||
cap_val_h = hisi_qm_get_hw_info(qm, sec_basic_info, high, qm->cap_ver);
|
||||
cap_val_l = hisi_qm_get_hw_info(qm, sec_basic_info, low, qm->cap_ver);
|
||||
|
||||
return ((u64)cap_val_h << SEC_ALG_BITMAP_SHIFT) | (u64)cap_val_l;
|
||||
}
|
||||
|
||||
static const struct kernel_param_ops sec_uacce_mode_ops = {
|
||||
.set = uacce_mode_set,
|
||||
.get = param_get_int,
|
||||
@@ -512,7 +540,8 @@ static int sec_engine_init(struct hisi_qm *qm)
|
||||
writel(SEC_SINGLE_PORT_MAX_TRANS,
|
||||
qm->io_base + AM_CFG_SINGLE_PORT_MAX_TRANS);
|
||||
|
||||
writel(SEC_SAA_ENABLE, qm->io_base + SEC_SAA_EN_REG);
|
||||
reg = hisi_qm_get_hw_info(qm, sec_basic_info, SEC_CORE_ENABLE_BITMAP, qm->cap_ver);
|
||||
writel(reg, qm->io_base + SEC_SAA_EN_REG);
|
||||
|
||||
if (qm->ver < QM_HW_V3) {
|
||||
/* HW V2 enable sm4 extra mode, as ctr/ecb */
|
||||
|
||||
Reference in New Issue
Block a user