diff options
author | Tom Rini <trini@konsulko.com> | 2018-02-12 12:08:32 -0500 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2018-02-12 12:08:32 -0500 |
commit | f3177d02f33472352b022adbaf5c47cceebc930d (patch) | |
tree | 950c05fbb1414a3b975420b01131706ca51d23e3 /drivers | |
parent | 278b90ce786f73faf29aa522d5d101e1da006378 (diff) | |
parent | ee3556bcafbb05e59aabdc31368984e76acaabc4 (diff) |
Merge git://git.denx.de/u-boot-fsl-qoriq
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/crypto/fsl/jobdesc.c | 35 | ||||
-rw-r--r-- | drivers/crypto/fsl/jobdesc.h | 2 | ||||
-rw-r--r-- | drivers/crypto/fsl/jr.c | 57 | ||||
-rw-r--r-- | drivers/crypto/fsl/jr.h | 2 | ||||
-rw-r--r-- | drivers/ddr/fsl/arm_ddr_gen3.c | 2 | ||||
-rw-r--r-- | drivers/ddr/fsl/ctrl_regs.c | 2 | ||||
-rw-r--r-- | drivers/ddr/fsl/ddr1_dimm_params.c | 2 | ||||
-rw-r--r-- | drivers/ddr/fsl/ddr2_dimm_params.c | 2 | ||||
-rw-r--r-- | drivers/ddr/fsl/ddr3_dimm_params.c | 2 | ||||
-rw-r--r-- | drivers/ddr/fsl/ddr4_dimm_params.c | 2 | ||||
-rw-r--r-- | drivers/ddr/fsl/fsl_ddr_gen4.c | 2 | ||||
-rw-r--r-- | drivers/ddr/fsl/fsl_mmdc.c | 2 | ||||
-rw-r--r-- | drivers/ddr/fsl/interactive.c | 2 | ||||
-rw-r--r-- | drivers/ddr/fsl/lc_common_dimm_params.c | 2 | ||||
-rw-r--r-- | drivers/ddr/fsl/main.c | 2 | ||||
-rw-r--r-- | drivers/ddr/fsl/mpc85xx_ddr_gen1.c | 2 | ||||
-rw-r--r-- | drivers/ddr/fsl/mpc85xx_ddr_gen2.c | 2 | ||||
-rw-r--r-- | drivers/ddr/fsl/mpc85xx_ddr_gen3.c | 2 | ||||
-rw-r--r-- | drivers/ddr/fsl/mpc86xx_ddr.c | 2 | ||||
-rw-r--r-- | drivers/ddr/fsl/options.c | 2 | ||||
-rw-r--r-- | drivers/ddr/fsl/util.c | 2 |
21 files changed, 74 insertions, 56 deletions
diff --git a/drivers/crypto/fsl/jobdesc.c b/drivers/crypto/fsl/jobdesc.c index 375ff9d0e3..aadf851101 100644 --- a/drivers/crypto/fsl/jobdesc.c +++ b/drivers/crypto/fsl/jobdesc.c @@ -257,7 +257,7 @@ void inline_cnstr_jobdesc_blob_decap(uint32_t *desc, uint8_t *key_idnfr, * Descriptor to instantiate RNG State Handle 0 in normal mode and * load the JDKEK, TDKEK and TDSK registers */ -void inline_cnstr_jobdesc_rng_instantiation(uint32_t *desc) +void inline_cnstr_jobdesc_rng_instantiation(uint32_t *desc, int handle) { u32 *jump_cmd; @@ -265,21 +265,24 @@ void inline_cnstr_jobdesc_rng_instantiation(uint32_t *desc) /* INIT RNG in non-test mode */ append_operation(desc, OP_TYPE_CLASS1_ALG | OP_ALG_ALGSEL_RNG | - OP_ALG_AS_INIT); - - /* wait for done */ - jump_cmd = append_jump(desc, JUMP_CLASS_CLASS1); - set_jump_tgt_here(desc, jump_cmd); - - /* - * load 1 to clear written reg: - * resets the done interrrupt and returns the RNG to idle. - */ - append_load_imm_u32(desc, 1, LDST_SRCDST_WORD_CLRW); - - /* generate secure keys (non-test) */ - append_operation(desc, OP_TYPE_CLASS1_ALG | OP_ALG_ALGSEL_RNG | - OP_ALG_RNG4_SK); + (handle << OP_ALG_AAI_SHIFT) | OP_ALG_AS_INIT); + + /* For SH0, Secure Keys must be generated as well */ + if (handle == 0) { + /* wait for done */ + jump_cmd = append_jump(desc, JUMP_CLASS_CLASS1); + set_jump_tgt_here(desc, jump_cmd); + + /* + * load 1 to clear written reg: + * resets the done interrupt and returns the RNG to idle. + */ + append_load_imm_u32(desc, 1, LDST_SRCDST_WORD_CLRW); + + /* generate secure keys (non-test) */ + append_operation(desc, OP_TYPE_CLASS1_ALG | OP_ALG_ALGSEL_RNG | + OP_ALG_RNG4_SK); + } } /* Change key size to bytes form bits in calling function*/ diff --git a/drivers/crypto/fsl/jobdesc.h b/drivers/crypto/fsl/jobdesc.h index 112404c74d..75c9424c4a 100644 --- a/drivers/crypto/fsl/jobdesc.h +++ b/drivers/crypto/fsl/jobdesc.h @@ -40,7 +40,7 @@ void inline_cnstr_jobdesc_blob_decap(uint32_t *desc, uint8_t *key_idnfr, uint8_t *enc_blob, uint8_t *plain_txt, uint32_t out_sz); -void inline_cnstr_jobdesc_rng_instantiation(uint32_t *desc); +void inline_cnstr_jobdesc_rng_instantiation(uint32_t *desc, int handle); void inline_cnstr_jobdesc_pkha_rsaexp(uint32_t *desc, struct pk_in_params *pkin, uint8_t *out, diff --git a/drivers/crypto/fsl/jr.c b/drivers/crypto/fsl/jr.c index a05779826f..34bd070426 100644 --- a/drivers/crypto/fsl/jr.c +++ b/drivers/crypto/fsl/jr.c @@ -444,35 +444,49 @@ int sec_reset(void) #ifndef CONFIG_SPL_BUILD static int instantiate_rng(uint8_t sec_idx) { - struct result op; u32 *desc; u32 rdsta_val; - int ret = 0; + int ret = 0, sh_idx, size; ccsr_sec_t __iomem *sec = (ccsr_sec_t __iomem *)SEC_ADDR(sec_idx); struct rng4tst __iomem *rng = (struct rng4tst __iomem *)&sec->rng; - memset(&op, 0, sizeof(struct result)); - desc = memalign(ARCH_DMA_MINALIGN, sizeof(uint32_t) * 6); if (!desc) { printf("cannot allocate RNG init descriptor memory\n"); return -1; } - inline_cnstr_jobdesc_rng_instantiation(desc); - int size = roundup(sizeof(uint32_t) * 6, ARCH_DMA_MINALIGN); - flush_dcache_range((unsigned long)desc, - (unsigned long)desc + size); + for (sh_idx = 0; sh_idx < RNG4_MAX_HANDLES; sh_idx++) { + /* + * If the corresponding bit is set, this state handle + * was initialized by somebody else, so it's left alone. + */ + rdsta_val = sec_in32(&rng->rdsta) & RNG_STATE_HANDLE_MASK; + if (rdsta_val & (1 << sh_idx)) + continue; + + inline_cnstr_jobdesc_rng_instantiation(desc, sh_idx); + size = roundup(sizeof(uint32_t) * 6, ARCH_DMA_MINALIGN); + flush_dcache_range((unsigned long)desc, + (unsigned long)desc + size); - ret = run_descriptor_jr_idx(desc, sec_idx); + ret = run_descriptor_jr_idx(desc, sec_idx); - if (ret) - printf("RNG: Instantiation failed with error %x\n", ret); + if (ret) + printf("RNG: Instantiation failed with error 0x%x\n", + ret); - rdsta_val = sec_in32(&rng->rdsta); - if (op.status || !(rdsta_val & RNG_STATE0_HANDLE_INSTANTIATED)) - return -1; + rdsta_val = sec_in32(&rng->rdsta) & RNG_STATE_HANDLE_MASK; + if (!(rdsta_val & (1 << sh_idx))) { + free(desc); + return -1; + } + + memset(desc, 0, sizeof(uint32_t) * 6); + } + + free(desc); return ret; } @@ -524,14 +538,11 @@ static int rng_init(uint8_t sec_idx) ccsr_sec_t __iomem *sec = (ccsr_sec_t __iomem *)SEC_ADDR(sec_idx); struct rng4tst __iomem *rng = (struct rng4tst __iomem *)&sec->rng; - - u32 rdsta = sec_in32(&rng->rdsta); - - /* Check if RNG state 0 handler is already instantiated */ - if (rdsta & RNG_STATE0_HANDLE_INSTANTIATED) - return 0; + u32 inst_handles; do { + inst_handles = sec_in32(&rng->rdsta) & RNG_STATE_HANDLE_MASK; + /* * If either of the SH's were instantiated by somebody else * then it is assumed that the entropy @@ -540,8 +551,10 @@ static int rng_init(uint8_t sec_idx) * Also, if a handle was instantiated, do not change * the TRNG parameters. */ - kick_trng(ent_delay, sec_idx); - ent_delay += 400; + if (!inst_handles) { + kick_trng(ent_delay, sec_idx); + ent_delay += 400; + } /* * if instantiate_rng(...) fails, the loop will rerun * and the kick_trng(...) function will modfiy the diff --git a/drivers/crypto/fsl/jr.h b/drivers/crypto/fsl/jr.h index 8aab4c988d..ef515e74f8 100644 --- a/drivers/crypto/fsl/jr.h +++ b/drivers/crypto/fsl/jr.h @@ -41,6 +41,8 @@ #define JQ_DEQ_TO_ERR -2 #define JQ_ENQ_ERR -3 +#define RNG4_MAX_HANDLES 2 + struct op_ring { phys_addr_t desc; uint32_t status; diff --git a/drivers/ddr/fsl/arm_ddr_gen3.c b/drivers/ddr/fsl/arm_ddr_gen3.c index aaf4dfb1e7..4fa0d5d4e4 100644 --- a/drivers/ddr/fsl/arm_ddr_gen3.c +++ b/drivers/ddr/fsl/arm_ddr_gen3.c @@ -1,7 +1,7 @@ /* * Copyright 2013 Freescale Semiconductor, Inc. * - * SPDX-License-Identifier: GPL-2.0+ + * SPDX-License-Identifier: GPL-2.0+ BSD-3-Clause * * Derived from mpc85xx_ddr_gen3.c, removed all workarounds */ diff --git a/drivers/ddr/fsl/ctrl_regs.c b/drivers/ddr/fsl/ctrl_regs.c index 8b8727116d..73083090e4 100644 --- a/drivers/ddr/fsl/ctrl_regs.c +++ b/drivers/ddr/fsl/ctrl_regs.c @@ -2,7 +2,7 @@ * Copyright 2008-2016 Freescale Semiconductor, Inc. * Copyright 2017-2018 NXP Semiconductor * - * SPDX-License-Identifier: GPL-2.0+ + * SPDX-License-Identifier: GPL-2.0+ BSD-3-Clause */ /* diff --git a/drivers/ddr/fsl/ddr1_dimm_params.c b/drivers/ddr/fsl/ddr1_dimm_params.c index c02725e611..8a8c17cae9 100644 --- a/drivers/ddr/fsl/ddr1_dimm_params.c +++ b/drivers/ddr/fsl/ddr1_dimm_params.c @@ -1,7 +1,7 @@ /* * Copyright 2008 Freescale Semiconductor, Inc. * - * SPDX-License-Identifier: GPL-2.0 + * SPDX-License-Identifier: GPL-2.0 BSD-3-Clause */ #include <common.h> diff --git a/drivers/ddr/fsl/ddr2_dimm_params.c b/drivers/ddr/fsl/ddr2_dimm_params.c index 062c849075..3ff35aa5c9 100644 --- a/drivers/ddr/fsl/ddr2_dimm_params.c +++ b/drivers/ddr/fsl/ddr2_dimm_params.c @@ -1,7 +1,7 @@ /* * Copyright 2008 Freescale Semiconductor, Inc. * - * SPDX-License-Identifier: GPL-2.0 + * SPDX-License-Identifier: GPL-2.0 BSD-3-Clause */ #include <common.h> diff --git a/drivers/ddr/fsl/ddr3_dimm_params.c b/drivers/ddr/fsl/ddr3_dimm_params.c index 8a0587a646..d8f170e605 100644 --- a/drivers/ddr/fsl/ddr3_dimm_params.c +++ b/drivers/ddr/fsl/ddr3_dimm_params.c @@ -6,7 +6,7 @@ * from ddr3 spd, please refer to the spec * JEDEC standard No.21-C 4_01_02_11R18.pdf * - * SPDX-License-Identifier: GPL-2.0 + * SPDX-License-Identifier: GPL-2.0 BSD-3-Clause */ #include <common.h> diff --git a/drivers/ddr/fsl/ddr4_dimm_params.c b/drivers/ddr/fsl/ddr4_dimm_params.c index 4867fbc932..343b0ff866 100644 --- a/drivers/ddr/fsl/ddr4_dimm_params.c +++ b/drivers/ddr/fsl/ddr4_dimm_params.c @@ -2,7 +2,7 @@ * Copyright 2014-2016 Freescale Semiconductor, Inc. * Copyright 2017-2018 NXP Semiconductor * - * SPDX-License-Identifier: GPL-2.0+ + * SPDX-License-Identifier: GPL-2.0+ BSD-3-Clause * * calculate the organization and timing parameter * from ddr3 spd, please refer to the spec diff --git a/drivers/ddr/fsl/fsl_ddr_gen4.c b/drivers/ddr/fsl/fsl_ddr_gen4.c index c225c8e723..1829aa4fa4 100644 --- a/drivers/ddr/fsl/fsl_ddr_gen4.c +++ b/drivers/ddr/fsl/fsl_ddr_gen4.c @@ -1,7 +1,7 @@ /* * Copyright 2014-2015 Freescale Semiconductor, Inc. * - * SPDX-License-Identifier: GPL-2.0+ + * SPDX-License-Identifier: GPL-2.0+ BSD-3-Clause */ #include <common.h> diff --git a/drivers/ddr/fsl/fsl_mmdc.c b/drivers/ddr/fsl/fsl_mmdc.c index 52eec0f9e9..1312c081c5 100644 --- a/drivers/ddr/fsl/fsl_mmdc.c +++ b/drivers/ddr/fsl/fsl_mmdc.c @@ -1,7 +1,7 @@ /* * Copyright 2016 Freescale Semiconductor, Inc. * - * SPDX-License-Identifier: GPL-2.0+ + * SPDX-License-Identifier: GPL-2.0+ BSD-3-Clause */ /* diff --git a/drivers/ddr/fsl/interactive.c b/drivers/ddr/fsl/interactive.c index 1fa35c3c42..f5c21e4468 100644 --- a/drivers/ddr/fsl/interactive.c +++ b/drivers/ddr/fsl/interactive.c @@ -2,7 +2,7 @@ * Copyright 2010-2016 Freescale Semiconductor, Inc. * Copyright 2017-2018 NXP Semiconductor * - * SPDX-License-Identifier: GPL-2.0+ + * SPDX-License-Identifier: GPL-2.0+ BSD-3-Clause */ /* diff --git a/drivers/ddr/fsl/lc_common_dimm_params.c b/drivers/ddr/fsl/lc_common_dimm_params.c index 6599901893..3d28abda54 100644 --- a/drivers/ddr/fsl/lc_common_dimm_params.c +++ b/drivers/ddr/fsl/lc_common_dimm_params.c @@ -2,7 +2,7 @@ * Copyright 2008-2016 Freescale Semiconductor, Inc. * Copyright 2017-2018 NXP Semiconductor * - * SPDX-License-Identifier: GPL-2.0 + * SPDX-License-Identifier: GPL-2.0 BSD-3-Clause */ #include <common.h> diff --git a/drivers/ddr/fsl/main.c b/drivers/ddr/fsl/main.c index d0a7b3f107..85897b16b6 100644 --- a/drivers/ddr/fsl/main.c +++ b/drivers/ddr/fsl/main.c @@ -1,7 +1,7 @@ /* * Copyright 2008-2014 Freescale Semiconductor, Inc. * - * SPDX-License-Identifier: GPL-2.0 + * SPDX-License-Identifier: GPL-2.0 BSD-3-Clause */ /* diff --git a/drivers/ddr/fsl/mpc85xx_ddr_gen1.c b/drivers/ddr/fsl/mpc85xx_ddr_gen1.c index c005f5294c..f74bf32c64 100644 --- a/drivers/ddr/fsl/mpc85xx_ddr_gen1.c +++ b/drivers/ddr/fsl/mpc85xx_ddr_gen1.c @@ -1,7 +1,7 @@ /* * Copyright 2008 Freescale Semiconductor, Inc. * - * SPDX-License-Identifier: GPL-2.0 + * SPDX-License-Identifier: GPL-2.0 BSD-3-Clause */ #include <common.h> diff --git a/drivers/ddr/fsl/mpc85xx_ddr_gen2.c b/drivers/ddr/fsl/mpc85xx_ddr_gen2.c index 898b0cd33c..6da4400566 100644 --- a/drivers/ddr/fsl/mpc85xx_ddr_gen2.c +++ b/drivers/ddr/fsl/mpc85xx_ddr_gen2.c @@ -1,7 +1,7 @@ /* * Copyright 2008-2011 Freescale Semiconductor, Inc. * - * SPDX-License-Identifier: GPL-2.0 + * SPDX-License-Identifier: GPL-2.0 BSD-3-Clause */ #include <common.h> diff --git a/drivers/ddr/fsl/mpc85xx_ddr_gen3.c b/drivers/ddr/fsl/mpc85xx_ddr_gen3.c index afbed598c8..e58f76ae65 100644 --- a/drivers/ddr/fsl/mpc85xx_ddr_gen3.c +++ b/drivers/ddr/fsl/mpc85xx_ddr_gen3.c @@ -1,7 +1,7 @@ /* * Copyright 2008-2012 Freescale Semiconductor, Inc. * - * SPDX-License-Identifier: GPL-2.0 + * SPDX-License-Identifier: GPL-2.0 BSD-3-Clause */ #include <common.h> diff --git a/drivers/ddr/fsl/mpc86xx_ddr.c b/drivers/ddr/fsl/mpc86xx_ddr.c index a65eb3144f..bda5b83df5 100644 --- a/drivers/ddr/fsl/mpc86xx_ddr.c +++ b/drivers/ddr/fsl/mpc86xx_ddr.c @@ -1,7 +1,7 @@ /* * Copyright 2008 Freescale Semiconductor, Inc. * - * SPDX-License-Identifier: GPL-2.0 + * SPDX-License-Identifier: GPL-2.0 BSD-3-Clause */ #include <common.h> diff --git a/drivers/ddr/fsl/options.c b/drivers/ddr/fsl/options.c index 85ec48c28e..1abea1dfed 100644 --- a/drivers/ddr/fsl/options.c +++ b/drivers/ddr/fsl/options.c @@ -2,7 +2,7 @@ * Copyright 2008, 2010-2016 Freescale Semiconductor, Inc. * Copyright 2017-2018 NXP Semiconductor * - * SPDX-License-Identifier: GPL-2.0+ + * SPDX-License-Identifier: GPL-2.0+ BSD-3-Clause */ #include <common.h> diff --git a/drivers/ddr/fsl/util.c b/drivers/ddr/fsl/util.c index d6e6e78de3..11731cb9b9 100644 --- a/drivers/ddr/fsl/util.c +++ b/drivers/ddr/fsl/util.c @@ -1,7 +1,7 @@ /* * Copyright 2008-2014 Freescale Semiconductor, Inc. * - * SPDX-License-Identifier: GPL-2.0 + * SPDX-License-Identifier: GPL-2.0 BSD-3-Clause */ #include <common.h> |