Commit be75969c authored by Herbert Xu's avatar Herbert Xu

crypto: keembay - Set DMA alignment explicitly

This driver has been implicitly relying on kmalloc alignment
to be sufficient for DMA.  This may no longer be the case with
upcoming arm64 changes.

This patch changes it to explicitly request DMA alignment from
the Crypto API.
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent b2e2e2da
...@@ -226,7 +226,7 @@ static void kmb_ocs_hcu_dma_cleanup(struct ahash_request *req, ...@@ -226,7 +226,7 @@ static void kmb_ocs_hcu_dma_cleanup(struct ahash_request *req,
*/ */
static int kmb_ocs_dma_prepare(struct ahash_request *req) static int kmb_ocs_dma_prepare(struct ahash_request *req)
{ {
struct ocs_hcu_rctx *rctx = ahash_request_ctx(req); struct ocs_hcu_rctx *rctx = ahash_request_ctx_dma(req);
struct device *dev = rctx->hcu_dev->dev; struct device *dev = rctx->hcu_dev->dev;
unsigned int remainder = 0; unsigned int remainder = 0;
unsigned int total; unsigned int total;
...@@ -356,7 +356,7 @@ static int kmb_ocs_dma_prepare(struct ahash_request *req) ...@@ -356,7 +356,7 @@ static int kmb_ocs_dma_prepare(struct ahash_request *req)
static void kmb_ocs_hcu_secure_cleanup(struct ahash_request *req) static void kmb_ocs_hcu_secure_cleanup(struct ahash_request *req)
{ {
struct ocs_hcu_rctx *rctx = ahash_request_ctx(req); struct ocs_hcu_rctx *rctx = ahash_request_ctx_dma(req);
/* Clear buffer of any data. */ /* Clear buffer of any data. */
memzero_explicit(rctx->buffer, sizeof(rctx->buffer)); memzero_explicit(rctx->buffer, sizeof(rctx->buffer));
...@@ -374,7 +374,7 @@ static int kmb_ocs_hcu_handle_queue(struct ahash_request *req) ...@@ -374,7 +374,7 @@ static int kmb_ocs_hcu_handle_queue(struct ahash_request *req)
static int prepare_ipad(struct ahash_request *req) static int prepare_ipad(struct ahash_request *req)
{ {
struct ocs_hcu_rctx *rctx = ahash_request_ctx(req); struct ocs_hcu_rctx *rctx = ahash_request_ctx_dma(req);
struct crypto_ahash *tfm = crypto_ahash_reqtfm(req); struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
struct ocs_hcu_ctx *ctx = crypto_ahash_ctx(tfm); struct ocs_hcu_ctx *ctx = crypto_ahash_ctx(tfm);
int i; int i;
...@@ -414,7 +414,7 @@ static int kmb_ocs_hcu_do_one_request(struct crypto_engine *engine, void *areq) ...@@ -414,7 +414,7 @@ static int kmb_ocs_hcu_do_one_request(struct crypto_engine *engine, void *areq)
base); base);
struct ocs_hcu_dev *hcu_dev = kmb_ocs_hcu_find_dev(req); struct ocs_hcu_dev *hcu_dev = kmb_ocs_hcu_find_dev(req);
struct crypto_ahash *tfm = crypto_ahash_reqtfm(req); struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
struct ocs_hcu_rctx *rctx = ahash_request_ctx(req); struct ocs_hcu_rctx *rctx = ahash_request_ctx_dma(req);
struct ocs_hcu_ctx *tctx = crypto_ahash_ctx(tfm); struct ocs_hcu_ctx *tctx = crypto_ahash_ctx(tfm);
int rc; int rc;
int i; int i;
...@@ -561,7 +561,7 @@ static int kmb_ocs_hcu_do_one_request(struct crypto_engine *engine, void *areq) ...@@ -561,7 +561,7 @@ static int kmb_ocs_hcu_do_one_request(struct crypto_engine *engine, void *areq)
static int kmb_ocs_hcu_init(struct ahash_request *req) static int kmb_ocs_hcu_init(struct ahash_request *req)
{ {
struct ocs_hcu_dev *hcu_dev = kmb_ocs_hcu_find_dev(req); struct ocs_hcu_dev *hcu_dev = kmb_ocs_hcu_find_dev(req);
struct ocs_hcu_rctx *rctx = ahash_request_ctx(req); struct ocs_hcu_rctx *rctx = ahash_request_ctx_dma(req);
struct crypto_ahash *tfm = crypto_ahash_reqtfm(req); struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
struct ocs_hcu_ctx *ctx = crypto_ahash_ctx(tfm); struct ocs_hcu_ctx *ctx = crypto_ahash_ctx(tfm);
...@@ -614,7 +614,7 @@ static int kmb_ocs_hcu_init(struct ahash_request *req) ...@@ -614,7 +614,7 @@ static int kmb_ocs_hcu_init(struct ahash_request *req)
static int kmb_ocs_hcu_update(struct ahash_request *req) static int kmb_ocs_hcu_update(struct ahash_request *req)
{ {
struct ocs_hcu_rctx *rctx = ahash_request_ctx(req); struct ocs_hcu_rctx *rctx = ahash_request_ctx_dma(req);
int rc; int rc;
if (!req->nbytes) if (!req->nbytes)
...@@ -650,7 +650,7 @@ static int kmb_ocs_hcu_update(struct ahash_request *req) ...@@ -650,7 +650,7 @@ static int kmb_ocs_hcu_update(struct ahash_request *req)
/* Common logic for kmb_ocs_hcu_final() and kmb_ocs_hcu_finup(). */ /* Common logic for kmb_ocs_hcu_final() and kmb_ocs_hcu_finup(). */
static int kmb_ocs_hcu_fin_common(struct ahash_request *req) static int kmb_ocs_hcu_fin_common(struct ahash_request *req)
{ {
struct ocs_hcu_rctx *rctx = ahash_request_ctx(req); struct ocs_hcu_rctx *rctx = ahash_request_ctx_dma(req);
struct crypto_ahash *tfm = crypto_ahash_reqtfm(req); struct crypto_ahash *tfm = crypto_ahash_reqtfm(req);
struct ocs_hcu_ctx *ctx = crypto_ahash_ctx(tfm); struct ocs_hcu_ctx *ctx = crypto_ahash_ctx(tfm);
int rc; int rc;
...@@ -687,7 +687,7 @@ static int kmb_ocs_hcu_fin_common(struct ahash_request *req) ...@@ -687,7 +687,7 @@ static int kmb_ocs_hcu_fin_common(struct ahash_request *req)
static int kmb_ocs_hcu_final(struct ahash_request *req) static int kmb_ocs_hcu_final(struct ahash_request *req)
{ {
struct ocs_hcu_rctx *rctx = ahash_request_ctx(req); struct ocs_hcu_rctx *rctx = ahash_request_ctx_dma(req);
rctx->sg_data_total = 0; rctx->sg_data_total = 0;
rctx->sg_data_offset = 0; rctx->sg_data_offset = 0;
...@@ -698,7 +698,7 @@ static int kmb_ocs_hcu_final(struct ahash_request *req) ...@@ -698,7 +698,7 @@ static int kmb_ocs_hcu_final(struct ahash_request *req)
static int kmb_ocs_hcu_finup(struct ahash_request *req) static int kmb_ocs_hcu_finup(struct ahash_request *req)
{ {
struct ocs_hcu_rctx *rctx = ahash_request_ctx(req); struct ocs_hcu_rctx *rctx = ahash_request_ctx_dma(req);
rctx->sg_data_total = req->nbytes; rctx->sg_data_total = req->nbytes;
rctx->sg_data_offset = 0; rctx->sg_data_offset = 0;
...@@ -726,7 +726,7 @@ static int kmb_ocs_hcu_digest(struct ahash_request *req) ...@@ -726,7 +726,7 @@ static int kmb_ocs_hcu_digest(struct ahash_request *req)
static int kmb_ocs_hcu_export(struct ahash_request *req, void *out) static int kmb_ocs_hcu_export(struct ahash_request *req, void *out)
{ {
struct ocs_hcu_rctx *rctx = ahash_request_ctx(req); struct ocs_hcu_rctx *rctx = ahash_request_ctx_dma(req);
/* Intermediate data is always stored and applied per request. */ /* Intermediate data is always stored and applied per request. */
memcpy(out, rctx, sizeof(*rctx)); memcpy(out, rctx, sizeof(*rctx));
...@@ -736,7 +736,7 @@ static int kmb_ocs_hcu_export(struct ahash_request *req, void *out) ...@@ -736,7 +736,7 @@ static int kmb_ocs_hcu_export(struct ahash_request *req, void *out)
static int kmb_ocs_hcu_import(struct ahash_request *req, const void *in) static int kmb_ocs_hcu_import(struct ahash_request *req, const void *in)
{ {
struct ocs_hcu_rctx *rctx = ahash_request_ctx(req); struct ocs_hcu_rctx *rctx = ahash_request_ctx_dma(req);
/* Intermediate data is always stored and applied per request. */ /* Intermediate data is always stored and applied per request. */
memcpy(rctx, in, sizeof(*rctx)); memcpy(rctx, in, sizeof(*rctx));
...@@ -822,8 +822,8 @@ static int kmb_ocs_hcu_setkey(struct crypto_ahash *tfm, const u8 *key, ...@@ -822,8 +822,8 @@ static int kmb_ocs_hcu_setkey(struct crypto_ahash *tfm, const u8 *key,
/* Set request size and initialize tfm context. */ /* Set request size and initialize tfm context. */
static void __cra_init(struct crypto_tfm *tfm, struct ocs_hcu_ctx *ctx) static void __cra_init(struct crypto_tfm *tfm, struct ocs_hcu_ctx *ctx)
{ {
crypto_ahash_set_reqsize(__crypto_ahash_cast(tfm), crypto_ahash_set_reqsize_dma(__crypto_ahash_cast(tfm),
sizeof(struct ocs_hcu_rctx)); sizeof(struct ocs_hcu_rctx));
/* Init context to 0. */ /* Init context to 0. */
memzero_explicit(ctx, sizeof(*ctx)); memzero_explicit(ctx, sizeof(*ctx));
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment