aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRuchika Gupta <ruchika.gupta@freescale.com>2014-06-23 05:38:28 -0400
committerHerbert Xu <herbert@gondor.apana.org.au>2014-06-25 09:38:39 -0400
commiteb1139cd437afadc63f58159c111e3f166bddb51 (patch)
tree4999c51729b5cd22f4485695b2d89fb873c784b2
parente60b244281cfe03ddd7c5c15c4e6b6d6316bb530 (diff)
crypto: caam - Correct definition of registers in memory map
Some registers like SECVID, CHAVID, CHA Revision Number, CTPR were defined as 64 bit resgisters. The IP provides a DWT bit(Double word Transpose) to transpose the two words when a double word register is accessed. However setting this bit would also affect the operation of job descriptors as well as other registers which are truly double word in nature. So, for the IP to work correctly on big-endian as well as little-endian SoC's, change is required to access all 32 bit registers as 32 bit quantities. Signed-off-by: Ruchika Gupta <ruchika.gupta@freescale.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
-rw-r--r--drivers/crypto/caam/ctrl.c14
-rw-r--r--drivers/crypto/caam/regs.h71
2 files changed, 46 insertions, 39 deletions
diff --git a/drivers/crypto/caam/ctrl.c b/drivers/crypto/caam/ctrl.c
index 34ffc35e3a09..066a4d4b62bf 100644
--- a/drivers/crypto/caam/ctrl.c
+++ b/drivers/crypto/caam/ctrl.c
@@ -378,7 +378,7 @@ static int caam_probe(struct platform_device *pdev)
378#ifdef CONFIG_DEBUG_FS 378#ifdef CONFIG_DEBUG_FS
379 struct caam_perfmon *perfmon; 379 struct caam_perfmon *perfmon;
380#endif 380#endif
381 u64 cha_vid; 381 u32 cha_vid_ls;
382 382
383 ctrlpriv = devm_kzalloc(&pdev->dev, sizeof(struct caam_drv_private), 383 ctrlpriv = devm_kzalloc(&pdev->dev, sizeof(struct caam_drv_private),
384 GFP_KERNEL); 384 GFP_KERNEL);
@@ -456,8 +456,9 @@ static int caam_probe(struct platform_device *pdev)
456 } 456 }
457 457
458 /* Check to see if QI present. If so, enable */ 458 /* Check to see if QI present. If so, enable */
459 ctrlpriv->qi_present = !!(rd_reg64(&topregs->ctrl.perfmon.comp_parms) & 459 ctrlpriv->qi_present =
460 CTPR_QI_MASK); 460 !!(rd_reg32(&topregs->ctrl.perfmon.comp_parms_ms) &
461 CTPR_MS_QI_MASK);
461 if (ctrlpriv->qi_present) { 462 if (ctrlpriv->qi_present) {
462 ctrlpriv->qi = (struct caam_queue_if __force *)&topregs->qi; 463 ctrlpriv->qi = (struct caam_queue_if __force *)&topregs->qi;
463 /* This is all that's required to physically enable QI */ 464 /* This is all that's required to physically enable QI */
@@ -471,13 +472,13 @@ static int caam_probe(struct platform_device *pdev)
471 return -ENOMEM; 472 return -ENOMEM;
472 } 473 }
473 474
474 cha_vid = rd_reg64(&topregs->ctrl.perfmon.cha_id); 475 cha_vid_ls = rd_reg32(&topregs->ctrl.perfmon.cha_id_ls);
475 476
476 /* 477 /*
477 * If SEC has RNG version >= 4 and RNG state handle has not been 478 * If SEC has RNG version >= 4 and RNG state handle has not been
478 * already instantiated, do RNG instantiation 479 * already instantiated, do RNG instantiation
479 */ 480 */
480 if ((cha_vid & CHA_ID_RNG_MASK) >> CHA_ID_RNG_SHIFT >= 4) { 481 if ((cha_vid_ls & CHA_ID_LS_RNG_MASK) >> CHA_ID_LS_RNG_SHIFT >= 4) {
481 ctrlpriv->rng4_sh_init = 482 ctrlpriv->rng4_sh_init =
482 rd_reg32(&topregs->ctrl.r4tst[0].rdsta); 483 rd_reg32(&topregs->ctrl.r4tst[0].rdsta);
483 /* 484 /*
@@ -531,7 +532,8 @@ static int caam_probe(struct platform_device *pdev)
531 532
532 /* NOTE: RTIC detection ought to go here, around Si time */ 533 /* NOTE: RTIC detection ought to go here, around Si time */
533 534
534 caam_id = rd_reg64(&topregs->ctrl.perfmon.caam_id); 535 caam_id = (u64)rd_reg32(&topregs->ctrl.perfmon.caam_id_ms) << 32 |
536 (u64)rd_reg32(&topregs->ctrl.perfmon.caam_id_ls);
535 537
536 /* Report "alive" for developer to see */ 538 /* Report "alive" for developer to see */
537 dev_info(dev, "device ID = 0x%016llx (Era %d)\n", caam_id, 539 dev_info(dev, "device ID = 0x%016llx (Era %d)\n", caam_id,
diff --git a/drivers/crypto/caam/regs.h b/drivers/crypto/caam/regs.h
index cbde8b95a6f8..7bb898d2e699 100644
--- a/drivers/crypto/caam/regs.h
+++ b/drivers/crypto/caam/regs.h
@@ -114,45 +114,45 @@ struct jr_outentry {
114 */ 114 */
115 115
116/* Number of DECOs */ 116/* Number of DECOs */
117#define CHA_NUM_DECONUM_SHIFT 56 117#define CHA_NUM_MS_DECONUM_SHIFT 24
118#define CHA_NUM_DECONUM_MASK (0xfull << CHA_NUM_DECONUM_SHIFT) 118#define CHA_NUM_MS_DECONUM_MASK (0xfull << CHA_NUM_MS_DECONUM_SHIFT)
119 119
120/* CHA Version IDs */ 120/* CHA Version IDs */
121#define CHA_ID_AES_SHIFT 0 121#define CHA_ID_LS_AES_SHIFT 0
122#define CHA_ID_AES_MASK (0xfull << CHA_ID_AES_SHIFT) 122#define CHA_ID_LS_AES_MASK (0xfull << CHA_ID_LS_AES_SHIFT)
123 123
124#define CHA_ID_DES_SHIFT 4 124#define CHA_ID_LS_DES_SHIFT 4
125#define CHA_ID_DES_MASK (0xfull << CHA_ID_DES_SHIFT) 125#define CHA_ID_LS_DES_MASK (0xfull << CHA_ID_LS_DES_SHIFT)
126 126
127#define CHA_ID_ARC4_SHIFT 8 127#define CHA_ID_LS_ARC4_SHIFT 8
128#define CHA_ID_ARC4_MASK (0xfull << CHA_ID_ARC4_SHIFT) 128#define CHA_ID_LS_ARC4_MASK (0xfull << CHA_ID_LS_ARC4_SHIFT)
129 129
130#define CHA_ID_MD_SHIFT 12 130#define CHA_ID_LS_MD_SHIFT 12
131#define CHA_ID_MD_MASK (0xfull << CHA_ID_MD_SHIFT) 131#define CHA_ID_LS_MD_MASK (0xfull << CHA_ID_LS_MD_SHIFT)
132 132
133#define CHA_ID_RNG_SHIFT 16 133#define CHA_ID_LS_RNG_SHIFT 16
134#define CHA_ID_RNG_MASK (0xfull << CHA_ID_RNG_SHIFT) 134#define CHA_ID_LS_RNG_MASK (0xfull << CHA_ID_LS_RNG_SHIFT)
135 135
136#define CHA_ID_SNW8_SHIFT 20 136#define CHA_ID_LS_SNW8_SHIFT 20
137#define CHA_ID_SNW8_MASK (0xfull << CHA_ID_SNW8_SHIFT) 137#define CHA_ID_LS_SNW8_MASK (0xfull << CHA_ID_LS_SNW8_SHIFT)
138 138
139#define CHA_ID_KAS_SHIFT 24 139#define CHA_ID_LS_KAS_SHIFT 24
140#define CHA_ID_KAS_MASK (0xfull << CHA_ID_KAS_SHIFT) 140#define CHA_ID_LS_KAS_MASK (0xfull << CHA_ID_LS_KAS_SHIFT)
141 141
142#define CHA_ID_PK_SHIFT 28 142#define CHA_ID_LS_PK_SHIFT 28
143#define CHA_ID_PK_MASK (0xfull << CHA_ID_PK_SHIFT) 143#define CHA_ID_LS_PK_MASK (0xfull << CHA_ID_LS_PK_SHIFT)
144 144
145#define CHA_ID_CRC_SHIFT 32 145#define CHA_ID_MS_CRC_SHIFT 0
146#define CHA_ID_CRC_MASK (0xfull << CHA_ID_CRC_SHIFT) 146#define CHA_ID_MS_CRC_MASK (0xfull << CHA_ID_MS_CRC_SHIFT)
147 147
148#define CHA_ID_SNW9_SHIFT 36 148#define CHA_ID_MS_SNW9_SHIFT 4
149#define CHA_ID_SNW9_MASK (0xfull << CHA_ID_SNW9_SHIFT) 149#define CHA_ID_MS_SNW9_MASK (0xfull << CHA_ID_MS_SNW9_SHIFT)
150 150
151#define CHA_ID_DECO_SHIFT 56 151#define CHA_ID_MS_DECO_SHIFT 24
152#define CHA_ID_DECO_MASK (0xfull << CHA_ID_DECO_SHIFT) 152#define CHA_ID_MS_DECO_MASK (0xfull << CHA_ID_MS_DECO_SHIFT)
153 153
154#define CHA_ID_JR_SHIFT 60 154#define CHA_ID_MS_JR_SHIFT 28
155#define CHA_ID_JR_MASK (0xfull << CHA_ID_JR_SHIFT) 155#define CHA_ID_MS_JR_MASK (0xfull << CHA_ID_MS_JR_SHIFT)
156 156
157struct sec_vid { 157struct sec_vid {
158 u16 ip_id; 158 u16 ip_id;
@@ -172,10 +172,12 @@ struct caam_perfmon {
172 u64 rsvd[13]; 172 u64 rsvd[13];
173 173
174 /* CAAM Hardware Instantiation Parameters fa0-fbf */ 174 /* CAAM Hardware Instantiation Parameters fa0-fbf */
175 u64 cha_rev; /* CRNR - CHA Revision Number */ 175 u32 cha_rev_ms; /* CRNR - CHA Rev No. Most significant half*/
176#define CTPR_QI_SHIFT 57 176 u32 cha_rev_ls; /* CRNR - CHA Rev No. Least significant half*/
177#define CTPR_QI_MASK (0x1ull << CTPR_QI_SHIFT) 177#define CTPR_MS_QI_SHIFT 25
178 u64 comp_parms; /* CTPR - Compile Parameters Register */ 178#define CTPR_MS_QI_MASK (0x1ull << CTPR_MS_QI_SHIFT)
179 u32 comp_parms_ms; /* CTPR - Compile Parameters Register */
180 u32 comp_parms_ls; /* CTPR - Compile Parameters Register */
179 u64 rsvd1[2]; 181 u64 rsvd1[2];
180 182
181 /* CAAM Global Status fc0-fdf */ 183 /* CAAM Global Status fc0-fdf */
@@ -189,9 +191,12 @@ struct caam_perfmon {
189 /* Component Instantiation Parameters fe0-fff */ 191 /* Component Instantiation Parameters fe0-fff */
190 u32 rtic_id; /* RVID - RTIC Version ID */ 192 u32 rtic_id; /* RVID - RTIC Version ID */
191 u32 ccb_id; /* CCBVID - CCB Version ID */ 193 u32 ccb_id; /* CCBVID - CCB Version ID */
192 u64 cha_id; /* CHAVID - CHA Version ID */ 194 u32 cha_id_ms; /* CHAVID - CHA Version ID Most Significant*/
193 u64 cha_num; /* CHANUM - CHA Number */ 195 u32 cha_id_ls; /* CHAVID - CHA Version ID Least Significant*/
194 u64 caam_id; /* CAAMVID - CAAM Version ID */ 196 u32 cha_num_ms; /* CHANUM - CHA Number Most Significant */
197 u32 cha_num_ls; /* CHANUM - CHA Number Least Significant*/
198 u32 caam_id_ms; /* CAAMVID - CAAM Version ID MS */
199 u32 caam_id_ls; /* CAAMVID - CAAM Version ID LS */
195}; 200};
196 201
197/* LIODN programming for DMA configuration */ 202/* LIODN programming for DMA configuration */