[EXT] Re: [PATCH v5 02/16] crypto/fsl: Add CAAM support for bkek, random number generation
Michael Walle
michael at walle.cc
Tue Nov 16 12:23:03 CET 2021
Hi,
Am 2021-11-16 12:09, schrieb Gaurav Jain:
>> > --- a/drivers/crypto/fsl/fsl_blob.c
>> > +++ b/drivers/crypto/fsl/fsl_blob.c
>> > @@ -1,6 +1,7 @@
>> > // SPDX-License-Identifier: GPL-2.0+
>> > /*
>> > * Copyright 2014 Freescale Semiconductor, Inc.
>> > + * Copyright 2021 NXP
>> > *
>> > */
>> >
>> > @@ -152,6 +153,87 @@ int blob_encap(u8 *key_mod, u8 *src, u8 *dst,
>> u32 len)
>> > return ret;
>> > }
>> >
>> > +int derive_blob_kek(u8 *bkek_buf, u8 *key_mod, u32 key_sz)
>>
>> where is this function actually used? looks like dead code to me.
>
> I was thinking to add the command for this function later.
> But will remove this patch from this series and send this later with
> derive blob kek cmd implementation.
ok, but you've missed the question below.
>>
>> > +{
>> > + int ret, size;
>> > + u32 *desc;
>> > +
>> > + if (!IS_ALIGNED((uintptr_t)bkek_buf, ARCH_DMA_MINALIGN) ||
>> > + !IS_ALIGNED((uintptr_t)key_mod, ARCH_DMA_MINALIGN)) {
>> > + puts("Error: derive_bkek: Address arguments are not aligned!\n");
>> > + return -EINVAL;
>> > + }
>> > +
>> > + printf("\nBlob key encryption key(bkek)\n");
>> > + desc = malloc_cache_aligned(sizeof(int) * MAX_CAAM_DESCSIZE);
>> > + if (!desc) {
>> > + printf("Not enough memory for descriptor allocation\n");
>> > + return -ENOMEM;
>> > + }
>> > +
>> > + size = ALIGN(key_sz, ARCH_DMA_MINALIGN);
>> > + flush_dcache_range((unsigned long)key_mod, (unsigned
>> > + long)key_mod + size);
>> > +
>> > + /* construct blob key encryption key(bkek) derive descriptor */
>> > + inline_cnstr_jobdesc_derive_bkek(desc, bkek_buf, key_mod,
>> > + key_sz);
>> > +
>> > + size = ALIGN(sizeof(int) * MAX_CAAM_DESCSIZE,
>> ARCH_DMA_MINALIGN);
>> > + flush_dcache_range((unsigned long)desc, (unsigned long)desc + size);
>> > + size = ALIGN(BKEK_SIZE, ARCH_DMA_MINALIGN);
>> > + invalidate_dcache_range((unsigned long)bkek_buf,
>> > + (unsigned long)bkek_buf + size);
>> > +
>> > + /* run descriptor */
>> > + ret = run_descriptor_jr(desc);
>> > + if (ret < 0) {
>> > + printf("Error: %s failed 0x%x\n", __func__, ret);
>> > + } else {
>> > + invalidate_dcache_range((unsigned long)bkek_buf,
>> > + (unsigned long)bkek_buf + size);
>> > + puts("derive bkek successful.\n");
>> > + }
>> > +
>> > + free(desc);
>> > + return ret;
>> > +}
>> > +
>> > +int hwrng_generate(u8 *dst, u32 len)
>>
>> likewise.
>> But more important what is the difference to drivers/crypto/fsl/rng.c?
>> Why
>> do you need a new function here?
This one. Why can't you reuse the code which is already there?
-michael
More information about the U-Boot
mailing list