[u-boot][PATCH 2/2] spi: atmel-quadspi: Add verbose debug facilities to monitor register accesses
Jagan Teki
jagan at amarulasolutions.com
Thu Apr 2 13:48:56 CEST 2020
On Mon, Mar 23, 2020 at 6:38 PM <Tudor.Ambarus at microchip.com> wrote:
>
> On Friday, March 20, 2020 11:37:59 AM EET Tudor.Ambarus at microchip.com wrote:
> > From: Tudor Ambarus <tudor.ambarus at microchip.com>
> >
> > This feature should not be enabled in release but can be useful for
> > developers who need to monitor register accesses at some specific places.
> >
> > Helped me identify a bug in u-boot, by comparing the register accesses
> > from the u-boot driver with the ones from its linux variant.
> >
> > Signed-off-by: Tudor Ambarus <tudor.ambarus at microchip.com>
> > ---
> > drivers/spi/atmel-quadspi.c | 114 ++++++++++++++++++++++++++++++------
> > 1 file changed, 96 insertions(+), 18 deletions(-)
> >
> > diff --git a/drivers/spi/atmel-quadspi.c b/drivers/spi/atmel-quadspi.c
> > index 4099ee87993d..3de367e6a0c8 100644
> > --- a/drivers/spi/atmel-quadspi.c
> > +++ b/drivers/spi/atmel-quadspi.c
> > @@ -148,6 +148,7 @@ struct atmel_qspi {
> > void __iomem *mem;
> > resource_size_t mmap_size;
> > const struct atmel_qspi_caps *caps;
> > + struct udevice *dev;
> > ulong bus_clk_rate;
> > u32 mr;
> > };
> > @@ -169,6 +170,81 @@ static const struct atmel_qspi_mode atmel_qspi_modes[]
> > = { { 4, 4, 4, QSPI_IFR_WIDTH_QUAD_CMD },
> > };
> >
> > +#ifdef VERBOSE_DEBUG
> > +static const char *atmel_qspi_reg_name(u32 offset, char *tmp, size_t sz)
> > +{
> > + switch (offset) {
> > + case QSPI_CR:
> > + return "CR";
> > + case QSPI_MR:
> > + return "MR";
> > + case QSPI_RD:
> > + return "MR";
> > + case QSPI_TD:
> > + return "TD";
> > + case QSPI_SR:
> > + return "SR";
> > + case QSPI_IER:
> > + return "IER";
> > + case QSPI_IDR:
> > + return "IDR";
> > + case QSPI_IMR:
> > + return "IMR";
> > + case QSPI_SCR:
> > + return "SCR";
> > + case QSPI_IAR:
> > + return "IAR";
> > + case QSPI_ICR:
> > + return "ICR/WICR";
> > + case QSPI_IFR:
> > + return "IFR";
> > + case QSPI_RICR:
> > + return "RICR";
> > + case QSPI_SMR:
> > + return "SMR";
> > + case QSPI_SKR:
> > + return "SKR";
> > + case QSPI_WPMR:
> > + return "WPMR";
> > + case QSPI_WPSR:
> > + return "WPSR";
> > + case QSPI_VERSION:
> > + return "VERSION";
> > + default:
> > + snprintf(tmp, sz, "0x%02x", offset);
> > + break;
> > + }
> > +
> > + return tmp;
> > +}
> > +#endif /* VERBOSE_DEBUG */
> > +
> > +static u32 atmel_qspi_read(struct atmel_qspi *aq, u32 offset)
> > +{
> > + u32 value = readl(aq->regs + offset);
> > +
> > +#ifdef VERBOSE_DEBUG
> > + char tmp[8];
>
> The largest string that I print is "ICR/WICR" which is 8bytes, but I didn't
> count the trailing null space, so the array should better be increased to 16
> bytes, to avoid truncation.
>
> > +
> > + dev_vdbg(aq->dev, "read 0x%08x from %s\n", value,
> > + atmel_qspi_reg_name(offset, tmp, sizeof(tmp)));
> > +#endif /* VERBOSE_DEBUG */
> > +
> > + return value;
> > +}
> > +
> > +static void atmel_qspi_write(u32 value, struct atmel_qspi *aq, u32 offset)
> > +{
> > +#ifdef VERBOSE_DEBUG
> > + char tmp[8];
>
> ditto
>
> Jagan, if the rest looks good, would you do this change when applying? Let me
> know if I have to resubmit, or if there are any suggestions.
Yes and Applied to u-boot-spi/master
More information about the U-Boot
mailing list