Skip to content

Commit 5fc5e06

Browse files
author
Ruchika Gupta
committed
drivers: caam: Add register map changes for Era 10
Era 10 changes the register map. The updates that affect the drivers: -new version registers are added Signed-off-by: Ruchika Gupta <ruchika.gupta@nxp.com> Reviewed-by: Sahil Malhotra <sahil.malhotra@nxp.com> Reviewed-by: Clement Faure <clement.faure@nxp.com> Acked-by: Etienne Carriere <etienne.carriere@linaro.org>
1 parent ed3fa83 commit 5fc5e06

File tree

3 files changed

+85
-27
lines changed

3 files changed

+85
-27
lines changed

core/drivers/crypto/caam/hal/common/hal_ctrl.c

+49-23
Original file line numberDiff line numberDiff line change
@@ -10,30 +10,59 @@
1010
#include <registers/ctrl_regs.h>
1111
#include <registers/version_regs.h>
1212

13+
uint8_t caam_hal_ctrl_era(vaddr_t baseaddr)
14+
{
15+
/* Read the number of instance */
16+
uint32_t val = io_caam_read32(baseaddr + CCBVID);
17+
18+
return GET_CCBVID_CAAM_ERA(val);
19+
}
20+
1321
uint8_t caam_hal_ctrl_jrnum(vaddr_t baseaddr)
1422
{
1523
uint32_t val = 0;
24+
uint8_t jrnum = 0;
1625

17-
val = io_caam_read32(baseaddr + CHANUM_MS);
26+
if (caam_hal_ctrl_era(baseaddr) < 10) {
27+
val = io_caam_read32(baseaddr + CHANUM_MS);
28+
jrnum = GET_CHANUM_MS_JRNUM(val);
29+
} else {
30+
val = io_caam_read32(baseaddr + JR_VERSION);
31+
jrnum = GET_JR_VERSION_JRNUM(val);
32+
}
1833

19-
return GET_CHANUM_MS_JRNUM(val);
34+
return jrnum;
2035
}
2136

2237
uint8_t caam_hal_ctrl_hash_limit(vaddr_t baseaddr)
2338
{
2439
uint32_t val = 0;
2540

26-
/* Read the number of instance */
27-
val = io_caam_read32(baseaddr + CHANUM_LS);
41+
if (caam_hal_ctrl_era(baseaddr) < 10) {
42+
/* Read the number of instance */
43+
val = io_caam_read32(baseaddr + CHANUM_LS);
44+
45+
if (GET_CHANUM_LS_MDNUM(val)) {
46+
/* Hashing is supported */
47+
val = io_caam_read32(baseaddr + CHAVID_LS);
48+
val &= BM_CHAVID_LS_MDVID;
49+
if (val == CHAVID_LS_MDVID_LP256)
50+
return TEE_MAIN_ALGO_SHA256;
51+
52+
return TEE_MAIN_ALGO_SHA512;
53+
}
54+
} else {
55+
/* Read the number of instance */
56+
val = io_caam_read32(baseaddr + MDHA_VERSION);
2857

29-
if (GET_CHANUM_LS_MDNUM(val)) {
30-
/* Hashing is supported */
31-
val = io_caam_read32(baseaddr + CHAVID_LS);
32-
val &= BM_CHAVID_LS_MDVID;
33-
if (val == CHAVID_LS_MDVID_LP256)
34-
return TEE_MAIN_ALGO_SHA256;
58+
if (GET_MDHA_VERSION_MDNUM(val)) {
59+
/* Hashing is supported */
60+
val &= BM_MDHA_VERSION_MDVID;
61+
if (val == MDHA_VERSION_MDVID_LP256)
62+
return TEE_MAIN_ALGO_SHA256;
3563

36-
return TEE_MAIN_ALGO_SHA512;
64+
return TEE_MAIN_ALGO_SHA512;
65+
}
3766
}
3867

3968
return UINT8_MAX;
@@ -42,18 +71,15 @@ uint8_t caam_hal_ctrl_hash_limit(vaddr_t baseaddr)
4271
uint8_t caam_hal_ctrl_pknum(vaddr_t baseaddr)
4372
{
4473
uint32_t val = 0;
74+
uint8_t pknum = 0;
4575

46-
val = io_caam_read32(baseaddr + CHANUM_LS);
47-
48-
return GET_CHANUM_LS_PKNUM(val);
49-
}
50-
51-
uint8_t caam_hal_ctrl_era(vaddr_t baseaddr)
52-
{
53-
uint32_t val = 0;
54-
55-
/* Read the number of instance */
56-
val = io_caam_read32(baseaddr + CCBVID);
76+
if (caam_hal_ctrl_era(baseaddr) < 10) {
77+
val = io_caam_read32(baseaddr + CHANUM_LS);
78+
pknum = GET_CHANUM_LS_PKNUM(val);
79+
} else {
80+
val = io_caam_read32(baseaddr + PKHA_VERSION);
81+
pknum = GET_PKHA_VERSION_PKNUM(val);
82+
}
5783

58-
return GET_CCBVID_CAAM_ERA(val);
84+
return pknum;
5985
}

core/drivers/crypto/caam/hal/common/hal_rng.c

+13-4
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
* Brief CAAM Random Number Generator Hardware Abstration Layer.
66
* Implementation of primitives to access HW.
77
*/
8+
#include <caam_hal_ctrl.h>
89
#include <caam_hal_rng.h>
910
#include <caam_io.h>
1011
#include <caam_status.h>
@@ -13,15 +14,23 @@
1314

1415
bool caam_hal_rng_instantiated(vaddr_t baseaddr)
1516
{
16-
uint32_t chavid_ls = 0;
17+
uint32_t vid = 0;
1718
uint32_t nb_sh = 0;
1819
uint32_t status = 0;
1920

20-
chavid_ls = io_caam_read32(baseaddr + CHAVID_LS);
2121

2222
/* RNG version < 4 and RNG state handle is already instantiated */
23-
if (GET_CHAVID_LS_RNGVID(chavid_ls) < 4)
24-
return true;
23+
if (caam_hal_ctrl_era(baseaddr) < 10) {
24+
vid = io_caam_read32(baseaddr + CHAVID_LS);
25+
26+
if (GET_CHAVID_LS_RNGVID(vid) < 4)
27+
return true;
28+
} else {
29+
vid = io_caam_read32(baseaddr + RNG_VERSION);
30+
31+
if (GET_RNG_VERSION_VID(vid) < 4)
32+
return true;
33+
}
2534

2635
/* Get the Number of State Handles */
2736
nb_sh = caam_hal_rng_get_nb_sh(baseaddr);

core/drivers/crypto/caam/hal/common/registers/version_regs.h

+23
Original file line numberDiff line numberDiff line change
@@ -43,5 +43,28 @@
4343
#define BM_CHANUM_LS_MDNUM SHIFT_U32(0xF, 12)
4444
#define GET_CHANUM_LS_MDNUM(val) (((val) & BM_CHANUM_LS_MDNUM) >> 12)
4545

46+
/* PKHA Version for Era > 10 */
47+
#define PKHA_VERSION 0x0E8C
48+
#define BM_PKHA_VERSION_PKNUM 0xFF
49+
#define GET_PKHA_VERSION_PKNUM(val) (((val) & BM_PKHA_VERSION_PKNUM))
50+
51+
/* MDHA Version for Era > 10 */
52+
#define MDHA_VERSION 0xE94
53+
#define BM_MDHA_VERSION_MDNUM 0xFF
54+
#define GET_MDHA_VERSION_MDNUM(val) (((val) & BM_MDHA_VERSION_MDNUM))
55+
#define BM_MDHA_VERSION_MDVID SHIFT_U32(0xFF, 24)
56+
57+
#define MDHA_VERSION_MDVID_LP256 SHIFT_U32(0, 24)
58+
59+
/* RNG Version for Era > 10 */
60+
#define RNG_VERSION 0x0EF8
61+
#define BM_RNG_VERSION_VID SHIFT_U32(0xFF, 24)
62+
#define GET_RNG_VERSION_VID(val) (((val) & BM_RNG_VERSION_VID))
63+
64+
/* JR Version for Era > 10 */
65+
#define JR_VERSION 0x0EF8
66+
#define BM_JR_VERSION_JRNUM 0xFF
67+
#define GET_JR_VERSION_JRNUM(val) (((val) & BM_JR_VERSION_JRNUM))
68+
4669
#endif /* __VERSION_REGS_H__ */
4770

0 commit comments

Comments
 (0)