2010-11-10 17:27:25

by Dmitry Kasatkin

[permalink] [raw]
Subject: [PATCH 1/5] crypto: omap-aes: change in prevention of OCP bus error

Suggested to use udelay() instead of nop as on the higher
core frequencies it might not be enough time.

Signed-off-by: Dmitry Kasatkin <[email protected]>
---
drivers/crypto/omap-aes.c | 10 ++++++----
1 files changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/crypto/omap-aes.c b/drivers/crypto/omap-aes.c
index 799ca51..9d65611 100644
--- a/drivers/crypto/omap-aes.c
+++ b/drivers/crypto/omap-aes.c
@@ -26,6 +26,7 @@
#include <linux/io.h>
#include <linux/crypto.h>
#include <linux/interrupt.h>
+#include <linux/delay.h>
#include <crypto/scatterwalk.h>
#include <crypto/aes.h>

@@ -187,11 +188,12 @@ static int omap_aes_hw_init(struct omap_aes_dev *dd)
omap_aes_write_mask(dd, AES_REG_MASK, AES_REG_MASK_SOFTRESET,
AES_REG_MASK_SOFTRESET);
/*
- * prevent OCP bus error (SRESP) in case an access to the module
- * is performed while the module is coming out of soft reset
+ * prevent OCP bus error (SRESP) on OMAP3630 in case an access
+ * to the module is performed while the module is
+ * coming out of soft reset
*/
- __asm__ __volatile__("nop");
- __asm__ __volatile__("nop");
+ if (cpu_is_omap3630())
+ udelay(1);

err = omap_aes_wait(dd, AES_REG_SYSSTATUS,
AES_REG_SYSSTATUS_RESETDONE);
--
1.7.0.4


2010-11-16 17:14:13

by Tony Lindgren

[permalink] [raw]
Subject: Re: [PATCH 1/5] crypto: omap-aes: change in prevention of OCP bus error

Hi,

* Dmitry Kasatkin <[email protected]> [101110 09:18]:
> Suggested to use udelay() instead of nop as on the higher
> core frequencies it might not be enough time.
>
> Signed-off-by: Dmitry Kasatkin <[email protected]>
> ---
> drivers/crypto/omap-aes.c | 10 ++++++----
> 1 files changed, 6 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/crypto/omap-aes.c b/drivers/crypto/omap-aes.c
> index 799ca51..9d65611 100644
> --- a/drivers/crypto/omap-aes.c
> +++ b/drivers/crypto/omap-aes.c
> @@ -26,6 +26,7 @@
> #include <linux/io.h>
> #include <linux/crypto.h>
> #include <linux/interrupt.h>
> +#include <linux/delay.h>
> #include <crypto/scatterwalk.h>
> #include <crypto/aes.h>
>
> @@ -187,11 +188,12 @@ static int omap_aes_hw_init(struct omap_aes_dev *dd)
> omap_aes_write_mask(dd, AES_REG_MASK, AES_REG_MASK_SOFTRESET,
> AES_REG_MASK_SOFTRESET);
> /*
> - * prevent OCP bus error (SRESP) in case an access to the module
> - * is performed while the module is coming out of soft reset
> + * prevent OCP bus error (SRESP) on OMAP3630 in case an access
> + * to the module is performed while the module is
> + * coming out of soft reset
> */
> - __asm__ __volatile__("nop");
> - __asm__ __volatile__("nop");
> + if (cpu_is_omap3630())
> + udelay(1);
>
> err = omap_aes_wait(dd, AES_REG_SYSSTATUS,
> AES_REG_SYSSTATUS_RESETDONE);

Please don't add more cpu_is_omapxxxx tests into drivers, those
will be limited to arch/arm/*omap*/ platform init code soonish.
The drivers should be generic.

Instead, check the crypto hardware version during init. If that
does not work, pass u32 flags in the platform data and define
OMAP_AES_SOFT_RESET_ERROR bit.

Regards,

Tony