[U-Boot] [PATCH 1/4] Exynos: Add hardware accelerated SHA 256
Kim Phillips
kim.phillips at freescale.com
Thu Feb 28 02:25:27 CET 2013
On Wed, 27 Feb 2013 10:24:39 -0500
Akshay Saraswat <akshay.s at samsung.com> wrote:
> SHA-256 and SHA-1 accelerated using ACE hardware.
>
> TEST=sha256 0x40008000 0x2B 0x40009000
> Used mm and md to write a standard string to memory location
> 0x40008000 and ran the above command to verify the output.
can we get rid of this TEST= infrastructure format? It's not used
on upstream u-boot.
> Signed-off-by: ARUN MANKUZHI <arun.m at samsung.com>
> Signed-off-by: Akshay Saraswat <akshay.s at samsung.com>
> ---
> arch/arm/cpu/armv7/exynos/Makefile | 4 +
> arch/arm/cpu/armv7/exynos/ace_sha.c | 118 +++++++++++
> arch/arm/include/asm/arch-exynos/ace_sfr.h | 310 +++++++++++++++++++++++++++++
> arch/arm/include/asm/arch-exynos/ace_sha.h | 41 ++++
> arch/arm/include/asm/arch-exynos/cpu.h | 4 +
> 5 files changed, 477 insertions(+)
> create mode 100644 arch/arm/cpu/armv7/exynos/ace_sha.c
> create mode 100644 arch/arm/include/asm/arch-exynos/ace_sfr.h
> create mode 100644 arch/arm/include/asm/arch-exynos/ace_sha.h
I doubt there's anything binding this to arch-exynos, and I bet the
h/w is going to be available - if not already - on some other parts,
so it probably belongs in a new drivers/crypto directory.
> +/* Maximum input data size is 8 MB. Timeout observed for data size above 8MB */
> +#define TIMEOUT_MS 100
So if there's a drop in processor frequency, the driver times out
too early? Not good.
> +#define SHA1_DIGEST_LEN 20
> +#define SHA256_DIGEST_LEN 32
don't duplicate definitions that already exist in include/sha*.h.
> + if (buf_len == 0) {
> + /* ACE H/W cannot compute hash value for empty string */
> + if (hash_type == ACE_SHA_TYPE_SHA1)
> + memcpy(pout, sha1_digest_emptymsg, SHA1_DIGEST_LEN);
> + else
> + memcpy(pout, sha256_digest_emptymsg, SHA256_DIGEST_LEN);
> + return 0;
> + }
there's no protection from buf_len going over the h/w 8MB limit
mentioned above - why not fall back to the s/w implementation in
both those cases? Or, if the h/w can be programmed to perform
multiple hash updates in 8MB data chunks, add support to do that.
> + /* Read hash result */
> + pdigest = (unsigned int *)pout;
> + len = (hash_type == ACE_SHA_TYPE_SHA1) ? 5 : 8;
magic numbers - use SHAx_SUM_LEN / 4.
Kim
More information about the U-Boot
mailing list