On 7/19/2019 2:58 AM, Iuliana Prodan wrote: > From: Horia Geantă <horia.geanta@xxxxxxx> > > Update alginfo struct to keep both virtual and dma key addresses, > so that descriptors have them at hand. > One example where this is needed is in the xcbc(aes) shared descriptors, > which are updated in current patch. > Another example is the upcoming fix for DKP. > > Signed-off-by: Horia Geantă <horia.geanta@xxxxxxx> > --- > drivers/crypto/caam/caamhash.c | 26 ++++++++++++-------------- > drivers/crypto/caam/caamhash_desc.c | 5 ++--- > drivers/crypto/caam/caamhash_desc.h | 2 +- > drivers/crypto/caam/desc_constr.h | 10 ++++------ > 4 files changed, 19 insertions(+), 24 deletions(-) > > diff --git a/drivers/crypto/caam/caamhash.c b/drivers/crypto/caam/caamhash.c > index 2ec4bad..14fdfa1 100644 > --- a/drivers/crypto/caam/caamhash.c > +++ b/drivers/crypto/caam/caamhash.c [...] > @@ -508,6 +502,10 @@ static int axcbc_setkey(struct crypto_ahash *ahash, const u8 *key, > memcpy(ctx->key, key, keylen); > dma_sync_single_for_device(jrdev, ctx->key_dma, keylen, DMA_TO_DEVICE); > ctx->adata.keylen = keylen; > + /* key is loaded from memory for UPDATE and FINALIZE states */ > + ctx->adata.key_dma = ctx->key_dma; > + /* key is immediate data for INIT and INITFINAL states */ > + ctx->adata.key_virt = ctx->key; > Now that it's possible to store both virtual and dma key addresses, it would be more efficient to move these assignments .cra_init callback. I'll submit the changes in v3. Horia [...] > diff --git a/drivers/crypto/caam/desc_constr.h b/drivers/crypto/caam/desc_constr.h > index 5988a26..8154174 100644 > --- a/drivers/crypto/caam/desc_constr.h > +++ b/drivers/crypto/caam/desc_constr.h > @@ -457,8 +457,8 @@ do { \ > * functions where it is used. > * @keylen: length of the provided algorithm key, in bytes > * @keylen_pad: padded length of the provided algorithm key, in bytes > - * @key: address where algorithm key resides; virtual address if key_inline > - * is true, dma (bus) address if key_inline is false. > + * @key_dma: dma (bus) address where algorithm key resides > + * @key_virt: virtual address where algorithm key resides > * @key_inline: true - key can be inlined in the descriptor; false - key is > * referenced by the descriptor > */ > @@ -466,10 +466,8 @@ struct alginfo { > u32 algtype; > unsigned int keylen; > unsigned int keylen_pad; > - union { > - dma_addr_t key_dma; > - const void *key_virt; > - }; > + dma_addr_t key_dma; > + const void *key_virt; > bool key_inline; > }; > >