> -----Original Message----- > From: Herbert Xu <herbert@xxxxxxxxxxxxxxxxxxx> > Sent: 9 February, 2023 5:15 PM > To: JiaJie Ho <jiajie.ho@xxxxxxxxxxxxxxxx> > Cc: David S . Miller <davem@xxxxxxxxxxxxx>; Rob Herring > <robh+dt@xxxxxxxxxx>; Krzysztof Kozlowski > <krzysztof.kozlowski+dt@xxxxxxxxxx>; Emil Renner Berthing > <kernel@xxxxxxxx>; Conor Dooley <conor.dooley@xxxxxxxxxxxxx>; linux- > crypto@xxxxxxxxxxxxxxx; devicetree@xxxxxxxxxxxxxxx; linux- > kernel@xxxxxxxxxxxxxxx; linux-riscv@xxxxxxxxxxxxxxxxxxx > Subject: Re: [PATCH v2 4/4] crypto: starfive - Add hash and HMAC support > > On Mon, Jan 30, 2023 at 11:42:42PM +0800, Jia Jie Ho wrote: > > > > + cryp->hash_data = (void *)__get_free_pages(GFP_KERNEL | > GFP_DMA32, > > +pages); > > Why do you copy everything before you feed it to the hardware? > If the issue is alignment then surely you should only to copy a small amount > of header (and perhaps trailer) for that? > The DMA can only support 32-bit addressing. So, I am copying everything in case kernel allocated memory region >32-bit for a user app. > > +static int starfive_hash_export(struct ahash_request *req, void *out) > > +{ > > + struct starfive_cryp_request_ctx *rctx = ahash_request_ctx(req); > > + > > + memcpy(out, rctx, sizeof(*rctx)); > > + > > + return 0; > > +} > > You are supposed to extract the entire hardware state after each operation > and store that in the request context. Since your request context doesn't > appear to contain any hash state, this can't possibly work. > > Does your hardware allow the non-finalised hash state to be exported, and > re-imported later? If not then you can only implement support for digest and > must use a fallback for everything else. The hardware doesn't support this. I'll add the fallback in the next version. Thanks for taking time reviewing this patch series. Regards, Jia Jie