Hi Simon, Le lun. 6 févr. 2023 à 18:12, Simon Glass <s...@chromium.org> a écrit :
> Hi Loic, > > On Wed, 1 Jun 2022 at 12:27, Loic Poulain <loic.poul...@linaro.org> wrote: > > > > Mark sha256_process as weak to allow hardware specific implementation. > > Add parameter for supporting multiple blocks processing. > > > > Signed-off-by: Loic Poulain <loic.poul...@linaro.org> > > --- > > lib/sha256.c | 26 +++++++++++++++++++------- > > 1 file changed, 19 insertions(+), 7 deletions(-) > > > > diff --git a/lib/sha256.c b/lib/sha256.c > > index c1fe93d..50b0b51 100644 > > --- a/lib/sha256.c > > +++ b/lib/sha256.c > > @@ -14,6 +14,8 @@ > > #include <watchdog.h> > > #include <u-boot/sha256.h> > > > > +#include <linux/compiler_attributes.h> > > + > > const uint8_t sha256_der_prefix[SHA256_DER_LEN] = { > > 0x30, 0x31, 0x30, 0x0d, 0x06, 0x09, 0x60, 0x86, > > 0x48, 0x01, 0x65, 0x03, 0x04, 0x02, 0x01, 0x05, > > @@ -55,7 +57,7 @@ void sha256_starts(sha256_context * ctx) > > ctx->state[7] = 0x5BE0CD19; > > } > > > > -static void sha256_process(sha256_context *ctx, const uint8_t data[64]) > > +static void sha256_process_one(sha256_context *ctx, const uint8_t > data[64]) > > { > > uint32_t temp1, temp2; > > uint32_t W[64]; > > @@ -186,6 +188,18 @@ static void sha256_process(sha256_context *ctx, > const uint8_t data[64]) > > ctx->state[7] += H; > > } > > > > +__weak void sha256_process(sha256_context *ctx, const unsigned char > *data, > > + unsigned int blocks) > > +{ > > + if (!blocks) > > + return; > > + > > + while (blocks--) { > > + sha256_process_one(ctx, data); > > + data += 64; > > + } > > +} > > + > > void sha256_update(sha256_context *ctx, const uint8_t *input, uint32_t > length) > > { > > uint32_t left, fill; > > @@ -204,17 +218,15 @@ void sha256_update(sha256_context *ctx, const > uint8_t *input, uint32_t length) > > > > if (left && length >= fill) { > > memcpy((void *) (ctx->buffer + left), (void *) input, > fill); > > - sha256_process(ctx, ctx->buffer); > > + sha256_process(ctx, ctx->buffer, 1); > > length -= fill; > > input += fill; > > left = 0; > > } > > > > - while (length >= 64) { > > - sha256_process(ctx, input); > > - length -= 64; > > - input += 64; > > - } > > + sha256_process(ctx, input, length / 64); > > + input += length / 64 * 64; > > + length = length % 64; > > > > if (length) > > memcpy((void *) (ctx->buffer + left), (void *) input, > length); > > -- > > 2.7.4 > > > > I just came across this patch as it broke minnowmax. Ok, is it a build time or runtime break? > > This should be using driver model, not weak functions. Please can you > take a look? Yes I can look at it in the next few days. I have used weak function because it’s an architecture feature offered by armv8 instructions, It’s not strictly speaking an internal device/IP. Regards, Loic >