aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/apm821xx/patches-4.14/020-0019-crypto-crypto4xx-overhaul-crypto4xx_build_pd.patch
diff options
context:
space:
mode:
authorChristian Lamparter <chunkeey@gmail.com>2020-03-07 16:58:32 +0100
committerChristian Lamparter <chunkeey@gmail.com>2020-03-14 15:17:32 +0100
commitb052b62efc3d49f61eb12d48b16851a48cfb928c (patch)
tree1a23d3e3707c5e52f42471cbe0bc173eed02ec2f /target/linux/apm821xx/patches-4.14/020-0019-crypto-crypto4xx-overhaul-crypto4xx_build_pd.patch
parent0a06fcf608ddf1f5db389decf266283392344784 (diff)
downloadupstream-b052b62efc3d49f61eb12d48b16851a48cfb928c.tar.gz
upstream-b052b62efc3d49f61eb12d48b16851a48cfb928c.tar.bz2
upstream-b052b62efc3d49f61eb12d48b16851a48cfb928c.zip
apm821xx: 4.14: remove kernel config and patches
This patch removes the 4.14 kernel support from the apm821xx target. The 4.19 kernel has been available and stable for a while and the 5.4 kernel support has been tested successfully on real hardware as well. Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
Diffstat (limited to 'target/linux/apm821xx/patches-4.14/020-0019-crypto-crypto4xx-overhaul-crypto4xx_build_pd.patch')
-rw-r--r--target/linux/apm821xx/patches-4.14/020-0019-crypto-crypto4xx-overhaul-crypto4xx_build_pd.patch535
1 files changed, 0 insertions, 535 deletions
diff --git a/target/linux/apm821xx/patches-4.14/020-0019-crypto-crypto4xx-overhaul-crypto4xx_build_pd.patch b/target/linux/apm821xx/patches-4.14/020-0019-crypto-crypto4xx-overhaul-crypto4xx_build_pd.patch
deleted file mode 100644
index 7efb0e699f..0000000000
--- a/target/linux/apm821xx/patches-4.14/020-0019-crypto-crypto4xx-overhaul-crypto4xx_build_pd.patch
+++ /dev/null
@@ -1,535 +0,0 @@
-From cd4dcd6da7a2610e0562a6e130bb68cc544a8fb1 Mon Sep 17 00:00:00 2001
-From: Christian Lamparter <chunkeey@gmail.com>
-Date: Wed, 4 Oct 2017 01:00:11 +0200
-Subject: [PATCH 19/25] crypto: crypto4xx - overhaul crypto4xx_build_pd()
-
-This patch overhauls and fixes code related to crypto4xx_build_pd()
-
- * crypto4xx_build_pd() did not handle chained source scatterlist.
- This is fixed by replacing the buggy indexed-access of &src[idx]
- with sg_next() in the gather array setup loop.
-
- * The redundant is_hash, direction, save_iv and pd_ctl members
- in the crypto4xx_ctx struct have been removed.
- - is_hash can be derived from the crypto_async_request parameter.
- - direction is already part of the security association's
- bf.dir bitfield.
- - save_iv is unused.
- - pd_ctl always had the host_ready bit enabled anyway.
- (the hash_final case is rather pointless, since the ahash
- code has been deactivated).
-
- * make crypto4xx_build_pd()'s caller responsible for converting
- the IV to the LE32 format.
-
- * change crypto4xx_ahash_update() and crypto4xx_ahash_digest() to
- initialize a temporary destination scatterlist. This allows the
- removal of an ugly cast of req->result (which is a pointer to an
- u8-array) to a scatterlist pointer.
-
- * change crypto4xx_build_pd() return type to int. After all
- it returns -EINPROGRESS/-EBUSY.
-
- * fix crypto4xx_build_pd() thread-unsafe sa handling.
-
-Signed-off-by: Christian Lamparter <chunkeey@gmail.com>
-Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
----
- drivers/crypto/amcc/crypto4xx_alg.c | 87 +++++++++++-------------
- drivers/crypto/amcc/crypto4xx_core.c | 128 ++++++++++++++++-------------------
- drivers/crypto/amcc/crypto4xx_core.h | 12 ++--
- 3 files changed, 103 insertions(+), 124 deletions(-)
-
---- a/drivers/crypto/amcc/crypto4xx_alg.c
-+++ b/drivers/crypto/amcc/crypto4xx_alg.c
-@@ -75,27 +75,29 @@ static void set_dynamic_sa_command_1(str
- int crypto4xx_encrypt(struct ablkcipher_request *req)
- {
- struct crypto4xx_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
-+ unsigned int ivlen = crypto_ablkcipher_ivsize(
-+ crypto_ablkcipher_reqtfm(req));
-+ __le32 iv[ivlen];
-
-- ctx->direction = DIR_OUTBOUND;
-- ctx->is_hash = 0;
-- ctx->pd_ctl = 0x1;
-+ if (ivlen)
-+ crypto4xx_memcpy_to_le32(iv, req->info, ivlen);
-
- return crypto4xx_build_pd(&req->base, ctx, req->src, req->dst,
-- req->nbytes, req->info,
-- crypto_ablkcipher_ivsize(crypto_ablkcipher_reqtfm(req)));
-+ req->nbytes, iv, ivlen, ctx->sa_out, ctx->sa_len);
- }
-
- int crypto4xx_decrypt(struct ablkcipher_request *req)
- {
- struct crypto4xx_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
-+ unsigned int ivlen = crypto_ablkcipher_ivsize(
-+ crypto_ablkcipher_reqtfm(req));
-+ __le32 iv[ivlen];
-
-- ctx->direction = DIR_INBOUND;
-- ctx->is_hash = 0;
-- ctx->pd_ctl = 1;
-+ if (ivlen)
-+ crypto4xx_memcpy_to_le32(iv, req->info, ivlen);
-
- return crypto4xx_build_pd(&req->base, ctx, req->src, req->dst,
-- req->nbytes, req->info,
-- crypto_ablkcipher_ivsize(crypto_ablkcipher_reqtfm(req)));
-+ req->nbytes, iv, ivlen, ctx->sa_in, ctx->sa_len);
- }
-
- /**
-@@ -154,11 +156,6 @@ static int crypto4xx_setkey_aes(struct c
- key, keylen);
- sa->sa_contents.w = SA_AES_CONTENTS | (keylen << 2);
- sa->sa_command_1.bf.key_len = keylen >> 3;
-- ctx->is_hash = 0;
-- ctx->direction = DIR_INBOUND;
-- memcpy(sa + get_dynamic_sa_offset_state_ptr_field(sa),
-- (void *)&ctx->state_record_dma_addr, 4);
-- ctx->offset_to_sr_ptr = get_dynamic_sa_offset_state_ptr_field(sa);
-
- memcpy(ctx->sa_out, ctx->sa_in, ctx->sa_len * 4);
- sa = ctx->sa_out;
-@@ -207,7 +204,7 @@ int crypto4xx_setkey_rfc3686(struct cryp
- if (rc)
- return rc;
-
-- memcpy(ctx->state_record,
-+ crypto4xx_memcpy_to_le32(ctx->state_record->save_iv,
- key + keylen - CTR_RFC3686_NONCE_SIZE, CTR_RFC3686_NONCE_SIZE);
-
- return 0;
-@@ -216,27 +213,29 @@ int crypto4xx_setkey_rfc3686(struct cryp
- int crypto4xx_rfc3686_encrypt(struct ablkcipher_request *req)
- {
- struct crypto4xx_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
-- __be32 iv[AES_IV_SIZE / 4] = { *(u32 *)ctx->state_record,
-- *(u32 *) req->info, *(u32 *) (req->info + 4), cpu_to_be32(1) };
--
-- ctx->direction = DIR_OUTBOUND;
-- ctx->pd_ctl = 1;
-+ __le32 iv[AES_IV_SIZE / 4] = {
-+ ctx->state_record->save_iv[0],
-+ cpu_to_le32p((u32 *) req->info),
-+ cpu_to_le32p((u32 *) (req->info + 4)),
-+ cpu_to_le32(1) };
-
- return crypto4xx_build_pd(&req->base, ctx, req->src, req->dst,
-- req->nbytes, iv, AES_IV_SIZE);
-+ req->nbytes, iv, AES_IV_SIZE,
-+ ctx->sa_out, ctx->sa_len);
- }
-
- int crypto4xx_rfc3686_decrypt(struct ablkcipher_request *req)
- {
- struct crypto4xx_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
-- __be32 iv[AES_IV_SIZE / 4] = { *(u32 *)ctx->state_record,
-- *(u32 *) req->info, *(u32 *) (req->info + 4), cpu_to_be32(1) };
--
-- ctx->direction = DIR_INBOUND;
-- ctx->pd_ctl = 1;
-+ __le32 iv[AES_IV_SIZE / 4] = {
-+ ctx->state_record->save_iv[0],
-+ cpu_to_le32p((u32 *) req->info),
-+ cpu_to_le32p((u32 *) (req->info + 4)),
-+ cpu_to_le32(1) };
-
- return crypto4xx_build_pd(&req->base, ctx, req->src, req->dst,
-- req->nbytes, iv, AES_IV_SIZE);
-+ req->nbytes, iv, AES_IV_SIZE,
-+ ctx->sa_out, ctx->sa_len);
- }
-
- /**
-@@ -254,7 +253,6 @@ static int crypto4xx_hash_alg_init(struc
- int rc;
-
- ctx->dev = my_alg->dev;
-- ctx->is_hash = 1;
-
- /* Create SA */
- if (ctx->sa_in_dma_addr || ctx->sa_out_dma_addr)
-@@ -285,13 +283,9 @@ static int crypto4xx_hash_alg_init(struc
- SA_SEQ_MASK_OFF, SA_MC_ENABLE,
- SA_NOT_COPY_PAD, SA_NOT_COPY_PAYLOAD,
- SA_NOT_COPY_HDR);
-- ctx->direction = DIR_INBOUND;
- /* Need to zero hash digest in SA */
- memset(sa->inner_digest, 0, sizeof(sa->inner_digest));
- memset(sa->outer_digest, 0, sizeof(sa->outer_digest));
-- sa->state_ptr = ctx->state_record_dma_addr;
-- ctx->offset_to_sr_ptr =
-- get_dynamic_sa_offset_state_ptr_field(&sa->ctrl);
-
- return 0;
- }
-@@ -307,23 +301,22 @@ int crypto4xx_hash_init(struct ahash_req
- __crypto_ahash_cast(req->base.tfm));
- sa->sa_command_0.bf.digest_len = ds >> 2;
- sa->sa_command_0.bf.load_hash_state = SA_LOAD_HASH_FROM_SA;
-- ctx->is_hash = 1;
-- ctx->direction = DIR_INBOUND;
-
- return 0;
- }
-
- int crypto4xx_hash_update(struct ahash_request *req)
- {
-+ struct crypto_ahash *ahash = crypto_ahash_reqtfm(req);
- struct crypto4xx_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
-+ struct scatterlist dst;
-+ unsigned int ds = crypto_ahash_digestsize(ahash);
-+
-+ sg_init_one(&dst, req->result, ds);
-
-- ctx->is_hash = 1;
-- ctx->pd_ctl = 0x11;
-- ctx->direction = DIR_INBOUND;
--
-- return crypto4xx_build_pd(&req->base, ctx, req->src,
-- (struct scatterlist *) req->result,
-- req->nbytes, NULL, 0);
-+ return crypto4xx_build_pd(&req->base, ctx, req->src, &dst,
-+ req->nbytes, NULL, 0, ctx->sa_in,
-+ ctx->sa_len);
- }
-
- int crypto4xx_hash_final(struct ahash_request *req)
-@@ -333,14 +326,16 @@ int crypto4xx_hash_final(struct ahash_re
-
- int crypto4xx_hash_digest(struct ahash_request *req)
- {
-+ struct crypto_ahash *ahash = crypto_ahash_reqtfm(req);
- struct crypto4xx_ctx *ctx = crypto_tfm_ctx(req->base.tfm);
-+ struct scatterlist dst;
-+ unsigned int ds = crypto_ahash_digestsize(ahash);
-
-- ctx->pd_ctl = 0x11;
-- ctx->direction = DIR_INBOUND;
-+ sg_init_one(&dst, req->result, ds);
-
-- return crypto4xx_build_pd(&req->base, ctx, req->src,
-- (struct scatterlist *) req->result,
-- req->nbytes, NULL, 0);
-+ return crypto4xx_build_pd(&req->base, ctx, req->src, &dst,
-+ req->nbytes, NULL, 0, ctx->sa_in,
-+ ctx->sa_len);
- }
-
- /**
---- a/drivers/crypto/amcc/crypto4xx_core.c
-+++ b/drivers/crypto/amcc/crypto4xx_core.c
-@@ -194,7 +194,6 @@ void crypto4xx_free_state_record(struct
- static u32 crypto4xx_build_pdr(struct crypto4xx_device *dev)
- {
- int i;
-- struct pd_uinfo *pd_uinfo;
- dev->pdr = dma_alloc_coherent(dev->core_dev->device,
- sizeof(struct ce_pd) * PPC4XX_NUM_PD,
- &dev->pdr_pa, GFP_ATOMIC);
-@@ -224,11 +223,14 @@ static u32 crypto4xx_build_pdr(struct cr
- if (!dev->shadow_sr_pool)
- return -ENOMEM;
- for (i = 0; i < PPC4XX_NUM_PD; i++) {
-- pd_uinfo = &dev->pdr_uinfo[i];
-+ struct ce_pd *pd = &dev->pdr[i];
-+ struct pd_uinfo *pd_uinfo = &dev->pdr_uinfo[i];
-+
-+ pd->sa = dev->shadow_sa_pool_pa +
-+ sizeof(union shadow_sa_buf) * i;
-
- /* alloc 256 bytes which is enough for any kind of dynamic sa */
- pd_uinfo->sa_va = &dev->shadow_sa_pool[i].sa;
-- pd_uinfo->sa_pa = dev->shadow_sa_pool_pa + 256 * i;
-
- /* alloc state record */
- pd_uinfo->sr_va = &dev->shadow_sr_pool[i];
-@@ -291,14 +293,6 @@ static u32 crypto4xx_put_pd_to_pdr(struc
- return 0;
- }
-
--static struct ce_pd *crypto4xx_get_pdp(struct crypto4xx_device *dev,
-- dma_addr_t *pd_dma, u32 idx)
--{
-- *pd_dma = dev->pdr_pa + sizeof(struct ce_pd) * idx;
--
-- return &dev->pdr[idx];
--}
--
- /**
- * alloc memory for the gather ring
- * no need to alloc buf for the ring
-@@ -516,18 +510,16 @@ static void crypto4xx_copy_pkt_to_dst(st
- }
- }
-
--static u32 crypto4xx_copy_digest_to_dst(struct pd_uinfo *pd_uinfo,
-+static void crypto4xx_copy_digest_to_dst(void *dst,
-+ struct pd_uinfo *pd_uinfo,
- struct crypto4xx_ctx *ctx)
- {
- struct dynamic_sa_ctl *sa = (struct dynamic_sa_ctl *) ctx->sa_in;
-
- if (sa->sa_command_0.bf.hash_alg == SA_HASH_ALG_SHA1) {
-- memcpy((void *) pd_uinfo->dest_va,
-- pd_uinfo->sr_va->save_digest,
-+ memcpy(dst, pd_uinfo->sr_va->save_digest,
- SA_HASH_ALG_SHA1_DIGEST_SIZE);
- }
--
-- return 0;
- }
-
- static void crypto4xx_ret_sg_desc(struct crypto4xx_device *dev,
-@@ -596,7 +588,7 @@ static u32 crypto4xx_ahash_done(struct c
- ahash_req = ahash_request_cast(pd_uinfo->async_req);
- ctx = crypto_tfm_ctx(ahash_req->base.tfm);
-
-- crypto4xx_copy_digest_to_dst(pd_uinfo,
-+ crypto4xx_copy_digest_to_dst(ahash_req->result, pd_uinfo,
- crypto_tfm_ctx(ahash_req->base.tfm));
- crypto4xx_ret_sg_desc(dev, pd_uinfo);
-
-@@ -656,17 +648,17 @@ static u32 get_next_sd(u32 current)
- return 0;
- }
-
--u32 crypto4xx_build_pd(struct crypto_async_request *req,
-+int crypto4xx_build_pd(struct crypto_async_request *req,
- struct crypto4xx_ctx *ctx,
- struct scatterlist *src,
- struct scatterlist *dst,
-- unsigned int datalen,
-- void *iv, u32 iv_len)
-+ const unsigned int datalen,
-+ const __le32 *iv, const u32 iv_len,
-+ const struct dynamic_sa_ctl *req_sa,
-+ const unsigned int sa_len)
- {
- struct crypto4xx_device *dev = ctx->dev;
-- dma_addr_t addr, pd_dma, sd_dma, gd_dma;
- struct dynamic_sa_ctl *sa;
-- struct scatterlist *sg;
- struct ce_gd *gd;
- struct ce_pd *pd;
- u32 num_gd, num_sd;
-@@ -674,8 +666,9 @@ u32 crypto4xx_build_pd(struct crypto_asy
- u32 fst_sd = 0xffffffff;
- u32 pd_entry;
- unsigned long flags;
-- struct pd_uinfo *pd_uinfo = NULL;
-- unsigned int nbytes = datalen, idx;
-+ struct pd_uinfo *pd_uinfo;
-+ unsigned int nbytes = datalen;
-+ size_t offset_to_sr_ptr;
- u32 gd_idx = 0;
- bool is_busy;
-
-@@ -689,7 +682,7 @@ u32 crypto4xx_build_pd(struct crypto_asy
- num_gd = 0;
-
- /* figure how many sd is needed */
-- if (sg_is_last(dst) || ctx->is_hash) {
-+ if (sg_is_last(dst)) {
- num_sd = 0;
- } else {
- if (datalen > PPC4XX_SD_BUFFER_SIZE) {
-@@ -760,37 +753,27 @@ u32 crypto4xx_build_pd(struct crypto_asy
- }
- spin_unlock_irqrestore(&dev->core_dev->lock, flags);
-
-+ pd = &dev->pdr[pd_entry];
-+ pd->sa_len = sa_len;
-+
- pd_uinfo = &dev->pdr_uinfo[pd_entry];
-- pd = crypto4xx_get_pdp(dev, &pd_dma, pd_entry);
- pd_uinfo->async_req = req;
- pd_uinfo->num_gd = num_gd;
- pd_uinfo->num_sd = num_sd;
-
-- if (iv_len || ctx->is_hash) {
-- pd->sa = pd_uinfo->sa_pa;
-- sa = pd_uinfo->sa_va;
-- if (ctx->direction == DIR_INBOUND)
-- memcpy(sa, ctx->sa_in, ctx->sa_len * 4);
-- else
-- memcpy(sa, ctx->sa_out, ctx->sa_len * 4);
-+ if (iv_len)
-+ memcpy(pd_uinfo->sr_va->save_iv, iv, iv_len);
-
-- memcpy((void *) sa + ctx->offset_to_sr_ptr,
-- &pd_uinfo->sr_pa, 4);
-+ sa = pd_uinfo->sa_va;
-+ memcpy(sa, req_sa, sa_len * 4);
-+
-+ offset_to_sr_ptr = get_dynamic_sa_offset_state_ptr_field(sa);
-+ *(u32 *)((unsigned long)sa + offset_to_sr_ptr) = pd_uinfo->sr_pa;
-
-- if (iv_len)
-- crypto4xx_memcpy_to_le32(pd_uinfo->sr_va->save_iv,
-- iv, iv_len);
-- } else {
-- if (ctx->direction == DIR_INBOUND) {
-- pd->sa = ctx->sa_in_dma_addr;
-- sa = ctx->sa_in;
-- } else {
-- pd->sa = ctx->sa_out_dma_addr;
-- sa = ctx->sa_out;
-- }
-- }
-- pd->sa_len = ctx->sa_len;
- if (num_gd) {
-+ dma_addr_t gd_dma;
-+ struct scatterlist *sg;
-+
- /* get first gd we are going to use */
- gd_idx = fst_gd;
- pd_uinfo->first_gd = fst_gd;
-@@ -799,27 +782,30 @@ u32 crypto4xx_build_pd(struct crypto_asy
- pd->src = gd_dma;
- /* enable gather */
- sa->sa_command_0.bf.gather = 1;
-- idx = 0;
-- src = &src[0];
- /* walk the sg, and setup gather array */
-+
-+ sg = src;
- while (nbytes) {
-- sg = &src[idx];
-- addr = dma_map_page(dev->core_dev->device, sg_page(sg),
-- sg->offset, sg->length, DMA_TO_DEVICE);
-- gd->ptr = addr;
-- gd->ctl_len.len = sg->length;
-+ size_t len;
-+
-+ len = min(sg->length, nbytes);
-+ gd->ptr = dma_map_page(dev->core_dev->device,
-+ sg_page(sg), sg->offset, len, DMA_TO_DEVICE);
-+ gd->ctl_len.len = len;
- gd->ctl_len.done = 0;
- gd->ctl_len.ready = 1;
-- if (sg->length >= nbytes)
-+ if (len >= nbytes)
- break;
-+
- nbytes -= sg->length;
- gd_idx = get_next_gd(gd_idx);
- gd = crypto4xx_get_gdp(dev, &gd_dma, gd_idx);
-- idx++;
-+ sg = sg_next(sg);
- }
- } else {
- pd->src = (u32)dma_map_page(dev->core_dev->device, sg_page(src),
-- src->offset, src->length, DMA_TO_DEVICE);
-+ src->offset, min(nbytes, src->length),
-+ DMA_TO_DEVICE);
- /*
- * Disable gather in sa command
- */
-@@ -830,25 +816,24 @@ u32 crypto4xx_build_pd(struct crypto_asy
- pd_uinfo->first_gd = 0xffffffff;
- pd_uinfo->num_gd = 0;
- }
-- if (ctx->is_hash || sg_is_last(dst)) {
-+ if (sg_is_last(dst)) {
- /*
- * we know application give us dst a whole piece of memory
- * no need to use scatter ring.
-- * In case of is_hash, the icv is always at end of src data.
- */
- pd_uinfo->using_sd = 0;
- pd_uinfo->first_sd = 0xffffffff;
- pd_uinfo->num_sd = 0;
- pd_uinfo->dest_va = dst;
- sa->sa_command_0.bf.scatter = 0;
-- if (ctx->is_hash)
-- pd->dest = virt_to_phys((void *)dst);
-- else
-- pd->dest = (u32)dma_map_page(dev->core_dev->device,
-- sg_page(dst), dst->offset,
-- dst->length, DMA_TO_DEVICE);
-+ pd->dest = (u32)dma_map_page(dev->core_dev->device,
-+ sg_page(dst), dst->offset,
-+ min(datalen, dst->length),
-+ DMA_TO_DEVICE);
- } else {
-+ dma_addr_t sd_dma;
- struct ce_sd *sd = NULL;
-+
- u32 sd_idx = fst_sd;
- nbytes = datalen;
- sa->sa_command_0.bf.scatter = 1;
-@@ -862,7 +847,6 @@ u32 crypto4xx_build_pd(struct crypto_asy
- sd->ctl.done = 0;
- sd->ctl.rdy = 1;
- /* sd->ptr should be setup by sd_init routine*/
-- idx = 0;
- if (nbytes >= PPC4XX_SD_BUFFER_SIZE)
- nbytes -= PPC4XX_SD_BUFFER_SIZE;
- else
-@@ -873,19 +857,23 @@ u32 crypto4xx_build_pd(struct crypto_asy
- /* setup scatter descriptor */
- sd->ctl.done = 0;
- sd->ctl.rdy = 1;
-- if (nbytes >= PPC4XX_SD_BUFFER_SIZE)
-+ if (nbytes >= PPC4XX_SD_BUFFER_SIZE) {
- nbytes -= PPC4XX_SD_BUFFER_SIZE;
-- else
-+ } else {
- /*
- * SD entry can hold PPC4XX_SD_BUFFER_SIZE,
- * which is more than nbytes, so done.
- */
- nbytes = 0;
-+ }
- }
- }
-
- sa->sa_command_1.bf.hash_crypto_offset = 0;
-- pd->pd_ctl.w = ctx->pd_ctl;
-+ pd->pd_ctl.w = 0;
-+ pd->pd_ctl.bf.hash_final =
-+ (crypto_tfm_alg_type(req->tfm) == CRYPTO_ALG_TYPE_AHASH);
-+ pd->pd_ctl.bf.host_ready = 1;
- pd->pd_ctl_len.w = 0x00400000 | datalen;
- pd_uinfo->state = PD_ENTRY_INUSE | (is_busy ? PD_ENTRY_BUSY : 0);
-
---- a/drivers/crypto/amcc/crypto4xx_core.h
-+++ b/drivers/crypto/amcc/crypto4xx_core.h
-@@ -71,7 +71,6 @@ struct pd_uinfo {
- u32 num_sd; /* number of scatter discriptors
- used by this packet */
- struct dynamic_sa_ctl *sa_va; /* shadow sa */
-- u32 sa_pa;
- struct sa_state_record *sr_va; /* state record for shadow sa */
- u32 sr_pa;
- struct scatterlist *dest_va;
-@@ -129,11 +128,6 @@ struct crypto4xx_ctx {
- struct sa_state_record *state_record;
- dma_addr_t state_record_dma_addr;
- u32 sa_len;
-- u32 offset_to_sr_ptr; /* offset to state ptr, in dynamic sa */
-- u32 direction;
-- u32 save_iv;
-- u32 pd_ctl;
-- u32 is_hash;
- };
-
- struct crypto4xx_alg_common {
-@@ -170,8 +164,10 @@ int crypto4xx_build_pd(struct crypto_asy
- struct crypto4xx_ctx *ctx,
- struct scatterlist *src,
- struct scatterlist *dst,
-- unsigned int datalen,
-- void *iv, u32 iv_len);
-+ const unsigned int datalen,
-+ const __le32 *iv, const u32 iv_len,
-+ const struct dynamic_sa_ctl *sa,
-+ const unsigned int sa_len);
- int crypto4xx_setkey_aes_cbc(struct crypto_ablkcipher *cipher,
- const u8 *key, unsigned int keylen);
- int crypto4xx_setkey_aes_cfb(struct crypto_ablkcipher *cipher,