crypto: atmel-sha - add verbose debug facilities to print hw register names
When VERBOSE_DEBUG is defined and SHA_FLAGS_DUMP_REG flag is set in dd->flags, this patch prints the register names and values when performing IO accesses. Signed-off-by: Cyrille Pitchen <cyrille.pitchen@atmel.com> Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
This commit is contained in:
parent
89a82ef87e
commit
0569fc46f0
@ -51,6 +51,7 @@
|
|||||||
#define SHA_FLAGS_INIT BIT(4)
|
#define SHA_FLAGS_INIT BIT(4)
|
||||||
#define SHA_FLAGS_CPU BIT(5)
|
#define SHA_FLAGS_CPU BIT(5)
|
||||||
#define SHA_FLAGS_DMA_READY BIT(6)
|
#define SHA_FLAGS_DMA_READY BIT(6)
|
||||||
|
#define SHA_FLAGS_DUMP_REG BIT(7)
|
||||||
|
|
||||||
/* bits[11:8] are reserved. */
|
/* bits[11:8] are reserved. */
|
||||||
|
|
||||||
@ -167,14 +168,118 @@ static struct atmel_sha_drv atmel_sha = {
|
|||||||
.lock = __SPIN_LOCK_UNLOCKED(atmel_sha.lock),
|
.lock = __SPIN_LOCK_UNLOCKED(atmel_sha.lock),
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef VERBOSE_DEBUG
|
||||||
|
static const char *atmel_sha_reg_name(u32 offset, char *tmp, size_t sz, bool wr)
|
||||||
|
{
|
||||||
|
switch (offset) {
|
||||||
|
case SHA_CR:
|
||||||
|
return "CR";
|
||||||
|
|
||||||
|
case SHA_MR:
|
||||||
|
return "MR";
|
||||||
|
|
||||||
|
case SHA_IER:
|
||||||
|
return "IER";
|
||||||
|
|
||||||
|
case SHA_IDR:
|
||||||
|
return "IDR";
|
||||||
|
|
||||||
|
case SHA_IMR:
|
||||||
|
return "IMR";
|
||||||
|
|
||||||
|
case SHA_ISR:
|
||||||
|
return "ISR";
|
||||||
|
|
||||||
|
case SHA_MSR:
|
||||||
|
return "MSR";
|
||||||
|
|
||||||
|
case SHA_BCR:
|
||||||
|
return "BCR";
|
||||||
|
|
||||||
|
case SHA_REG_DIN(0):
|
||||||
|
case SHA_REG_DIN(1):
|
||||||
|
case SHA_REG_DIN(2):
|
||||||
|
case SHA_REG_DIN(3):
|
||||||
|
case SHA_REG_DIN(4):
|
||||||
|
case SHA_REG_DIN(5):
|
||||||
|
case SHA_REG_DIN(6):
|
||||||
|
case SHA_REG_DIN(7):
|
||||||
|
case SHA_REG_DIN(8):
|
||||||
|
case SHA_REG_DIN(9):
|
||||||
|
case SHA_REG_DIN(10):
|
||||||
|
case SHA_REG_DIN(11):
|
||||||
|
case SHA_REG_DIN(12):
|
||||||
|
case SHA_REG_DIN(13):
|
||||||
|
case SHA_REG_DIN(14):
|
||||||
|
case SHA_REG_DIN(15):
|
||||||
|
snprintf(tmp, sz, "IDATAR[%u]", (offset - SHA_REG_DIN(0)) >> 2);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SHA_REG_DIGEST(0):
|
||||||
|
case SHA_REG_DIGEST(1):
|
||||||
|
case SHA_REG_DIGEST(2):
|
||||||
|
case SHA_REG_DIGEST(3):
|
||||||
|
case SHA_REG_DIGEST(4):
|
||||||
|
case SHA_REG_DIGEST(5):
|
||||||
|
case SHA_REG_DIGEST(6):
|
||||||
|
case SHA_REG_DIGEST(7):
|
||||||
|
case SHA_REG_DIGEST(8):
|
||||||
|
case SHA_REG_DIGEST(9):
|
||||||
|
case SHA_REG_DIGEST(10):
|
||||||
|
case SHA_REG_DIGEST(11):
|
||||||
|
case SHA_REG_DIGEST(12):
|
||||||
|
case SHA_REG_DIGEST(13):
|
||||||
|
case SHA_REG_DIGEST(14):
|
||||||
|
case SHA_REG_DIGEST(15):
|
||||||
|
if (wr)
|
||||||
|
snprintf(tmp, sz, "IDATAR[%u]",
|
||||||
|
16u + ((offset - SHA_REG_DIGEST(0)) >> 2));
|
||||||
|
else
|
||||||
|
snprintf(tmp, sz, "ODATAR[%u]",
|
||||||
|
(offset - SHA_REG_DIGEST(0)) >> 2);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SHA_HW_VERSION:
|
||||||
|
return "HWVER";
|
||||||
|
|
||||||
|
default:
|
||||||
|
snprintf(tmp, sz, "0x%02x", offset);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return tmp;
|
||||||
|
}
|
||||||
|
|
||||||
|
#endif /* VERBOSE_DEBUG */
|
||||||
|
|
||||||
static inline u32 atmel_sha_read(struct atmel_sha_dev *dd, u32 offset)
|
static inline u32 atmel_sha_read(struct atmel_sha_dev *dd, u32 offset)
|
||||||
{
|
{
|
||||||
return readl_relaxed(dd->io_base + offset);
|
u32 value = readl_relaxed(dd->io_base + offset);
|
||||||
|
|
||||||
|
#ifdef VERBOSE_DEBUG
|
||||||
|
if (dd->flags & SHA_FLAGS_DUMP_REG) {
|
||||||
|
char tmp[16];
|
||||||
|
|
||||||
|
dev_vdbg(dd->dev, "read 0x%08x from %s\n", value,
|
||||||
|
atmel_sha_reg_name(offset, tmp, sizeof(tmp), false));
|
||||||
|
}
|
||||||
|
#endif /* VERBOSE_DEBUG */
|
||||||
|
|
||||||
|
return value;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline void atmel_sha_write(struct atmel_sha_dev *dd,
|
static inline void atmel_sha_write(struct atmel_sha_dev *dd,
|
||||||
u32 offset, u32 value)
|
u32 offset, u32 value)
|
||||||
{
|
{
|
||||||
|
#ifdef VERBOSE_DEBUG
|
||||||
|
if (dd->flags & SHA_FLAGS_DUMP_REG) {
|
||||||
|
char tmp[16];
|
||||||
|
|
||||||
|
dev_vdbg(dd->dev, "write 0x%08x into %s\n", value,
|
||||||
|
atmel_sha_reg_name(offset, tmp, sizeof(tmp), true));
|
||||||
|
}
|
||||||
|
#endif /* VERBOSE_DEBUG */
|
||||||
|
|
||||||
writel_relaxed(value, dd->io_base + offset);
|
writel_relaxed(value, dd->io_base + offset);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -183,7 +288,8 @@ static inline int atmel_sha_complete(struct atmel_sha_dev *dd, int err)
|
|||||||
struct ahash_request *req = dd->req;
|
struct ahash_request *req = dd->req;
|
||||||
|
|
||||||
dd->flags &= ~(SHA_FLAGS_BUSY | SHA_FLAGS_FINAL | SHA_FLAGS_CPU |
|
dd->flags &= ~(SHA_FLAGS_BUSY | SHA_FLAGS_FINAL | SHA_FLAGS_CPU |
|
||||||
SHA_FLAGS_DMA_READY | SHA_FLAGS_OUTPUT_READY);
|
SHA_FLAGS_DMA_READY | SHA_FLAGS_OUTPUT_READY |
|
||||||
|
SHA_FLAGS_DUMP_REG);
|
||||||
|
|
||||||
clk_disable(dd->iclk);
|
clk_disable(dd->iclk);
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user