[U-Boot] [PATCH 1/4 v7] Exynos: Add hardware accelerated SHA256 and SHA1

Akshay Saraswat akshay.s at samsung.com
Thu Mar 21 08:12:54 CET 2013


Hi Kim,

>On Mon, 18 Mar 2013 02:06:15 -0400
>Akshay Saraswat <akshay.s at samsung.com> wrote:
>
>> SHA-256 and SHA-1 accelerated using ACE hardware.
>> 
>> Signed-off-by: ARUN MANKUZHI <arun.m at samsung.com>
>> Signed-off-by: Akshay Saraswat <akshay.s at samsung.com>
>> Acked-by: Simon Glass <sjg at chromium.org>
>> ---
>> +++ b/arch/arm/include/asm/arch-exynos/ace_sha.h
>
>ace_sha.h belongs in drivers/crypto/
>
>> +#define ACE_FC_SELBC_AES		(0 << 2)	/* AES */
>> +#define ACE_FC_SELBC_DES		(1 << 2)	/* DES */
>
>nit: comments seem a bit redundant

Few comments look same but they differ.

For example:
"Feed control - BTDMA control" and "Feed control - BRDMA control"

>
>> +#define ACE_FC_BRDMACARPROT_OFS		(2)
>> +#define ACE_FC_BRDMACARCACHE_OFS	(5)
>> +#define ACE_FC_BTDMACAWPROT_OFS		(2)
>> +#define ACE_FC_BTDMACAWCACHE_OFS	(5)
>> +#define ACE_FC_HRDMACARPROT_OFS		(2)
>> +#define ACE_FC_HRDMACARCACHE_OFS	(5)
>> +#define ACE_FC_SRAMOFFSET_MASK		(0xfff)
>
>no parens.
>
>> +/**
>> + * Computes hash value of input pbuf using ACE
>> + *
>> + * @param in_addr	A pointer to the input buffer
>> + * @param bufleni	Byte length of input buffer
>> + * @param out_addr	A pointer to the output buffer. When complete
>> + *			32 bytes are copied to pout[0]...pout[31]. Thus, a user
>> + *			should allocate at least 32 bytes at pOut in advance.
>> + * @param hash_type SHA1 or SHA256
>> + *
>> + * @return		0 on Success, -1 on Failure (Timeout)
>...
>> +	/* Check if status changes within given time limit */
>
>leftovers from timeout implementation?
>
>> +	while ((readl(&ace_sha_reg->hash_status) & ACE_HASH_MSGDONE_MASK) ==
>> +		ACE_HASH_MSGDONE_OFF) {
>> +		/*
>> +		 * PRNG error bit goes HIGH if a PRNG request occurs without
>> +		 * a complete seed setup. We are using this bit to check h/w
>> +		 * because proper setup is not expected in that case.
>> +		 */
>> +		if ((readl(&ace_sha_reg->hash_status)
>> +			& ACE_HASH_PRNGERROR_MASK) == ACE_HASH_PRNGERROR_ON)
>> +			break;
>> +	}
>
>so we have:
>
>whilst (not_done)
>	if (PRNGERROR_ON)
>		break;
>
>...and then success-assuming code flow continues after this.  What
>value is this check for PRNGERROR_ON, if the code isn't going to do
>anything differently?  And what does the status of the RNG have to
>do with keyless hashing?  It sounds like a check for proper
>initialization (RNG got seeded) is in order here, but only if it's
>required for the given hash operations (I doubt it, but the h/w
>might be fussy).
>
>Kim
>

PRNG ERROR means setup was not proper which should be the case
when h/w is faulty because driver does everything in order.
Earlier break was happening which was not correct so changing it to
"return -EBUSY" which means code flow should not be the same as
the one being successfull.


Regards,
Akshay Saraswat


More information about the U-Boot mailing list