Commit b6e9eb69 authored by Jia Jie Ho's avatar Jia Jie Ho Committed by Herbert Xu

crypto: starfive - Update hash dma usage

Current hash uses sw fallback for non-word aligned input scatterlists.
Add support for unaligned cases utilizing the data valid mask for dma.
Signed-off-by: default avatarJia Jie Ho <jiajie.ho@starfivetech.com>
Signed-off-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent 2ccf7a5d
...@@ -103,12 +103,6 @@ static irqreturn_t starfive_cryp_irq(int irq, void *priv) ...@@ -103,12 +103,6 @@ static irqreturn_t starfive_cryp_irq(int irq, void *priv)
tasklet_schedule(&cryp->aes_done); tasklet_schedule(&cryp->aes_done);
} }
if (status & STARFIVE_IE_FLAG_HASH_DONE) {
mask |= STARFIVE_IE_MASK_HASH_DONE;
writel(mask, cryp->base + STARFIVE_IE_MASK_OFFSET);
tasklet_schedule(&cryp->hash_done);
}
return IRQ_HANDLED; return IRQ_HANDLED;
} }
...@@ -132,7 +126,6 @@ static int starfive_cryp_probe(struct platform_device *pdev) ...@@ -132,7 +126,6 @@ static int starfive_cryp_probe(struct platform_device *pdev)
"Error remapping memory for platform device\n"); "Error remapping memory for platform device\n");
tasklet_init(&cryp->aes_done, starfive_aes_done_task, (unsigned long)cryp); tasklet_init(&cryp->aes_done, starfive_aes_done_task, (unsigned long)cryp);
tasklet_init(&cryp->hash_done, starfive_hash_done_task, (unsigned long)cryp);
cryp->phys_base = res->start; cryp->phys_base = res->start;
cryp->dma_maxburst = 32; cryp->dma_maxburst = 32;
...@@ -220,7 +213,6 @@ static int starfive_cryp_probe(struct platform_device *pdev) ...@@ -220,7 +213,6 @@ static int starfive_cryp_probe(struct platform_device *pdev)
reset_control_assert(cryp->rst); reset_control_assert(cryp->rst);
tasklet_kill(&cryp->aes_done); tasklet_kill(&cryp->aes_done);
tasklet_kill(&cryp->hash_done);
return ret; return ret;
} }
...@@ -234,7 +226,6 @@ static void starfive_cryp_remove(struct platform_device *pdev) ...@@ -234,7 +226,6 @@ static void starfive_cryp_remove(struct platform_device *pdev)
starfive_rsa_unregister_algs(); starfive_rsa_unregister_algs();
tasklet_kill(&cryp->aes_done); tasklet_kill(&cryp->aes_done);
tasklet_kill(&cryp->hash_done);
crypto_engine_stop(cryp->engine); crypto_engine_stop(cryp->engine);
crypto_engine_exit(cryp->engine); crypto_engine_exit(cryp->engine);
......
...@@ -91,6 +91,7 @@ union starfive_hash_csr { ...@@ -91,6 +91,7 @@ union starfive_hash_csr {
#define STARFIVE_HASH_KEY_DONE BIT(13) #define STARFIVE_HASH_KEY_DONE BIT(13)
u32 key_done :1; u32 key_done :1;
u32 key_flag :1; u32 key_flag :1;
#define STARFIVE_HASH_HMAC_DONE BIT(15)
u32 hmac_done :1; u32 hmac_done :1;
#define STARFIVE_HASH_BUSY BIT(16) #define STARFIVE_HASH_BUSY BIT(16)
u32 busy :1; u32 busy :1;
...@@ -189,7 +190,7 @@ struct starfive_cryp_dev { ...@@ -189,7 +190,7 @@ struct starfive_cryp_dev {
struct scatter_walk out_walk; struct scatter_walk out_walk;
struct crypto_engine *engine; struct crypto_engine *engine;
struct tasklet_struct aes_done; struct tasklet_struct aes_done;
struct tasklet_struct hash_done; struct completion dma_done;
size_t assoclen; size_t assoclen;
size_t total_in; size_t total_in;
size_t total_out; size_t total_out;
...@@ -237,6 +238,5 @@ void starfive_rsa_unregister_algs(void); ...@@ -237,6 +238,5 @@ void starfive_rsa_unregister_algs(void);
int starfive_aes_register_algs(void); int starfive_aes_register_algs(void);
void starfive_aes_unregister_algs(void); void starfive_aes_unregister_algs(void);
void starfive_hash_done_task(unsigned long param);
void starfive_aes_done_task(unsigned long param); void starfive_aes_done_task(unsigned long param);
#endif #endif
This diff is collapsed.
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