Hi Chin,

On 23.03.2016 16:00, Chin Liang See wrote:
On Mon, 2016-03-21 at 23:45 +0800, Chin Liang See wrote:
On Mon, 2016-03-21 at 22:05 +0800, Chin Liang See wrote:
On Fri, 2016-03-04 at 20:03 +0100, Marek Vasut wrote:
On 03/04/2016 05:06 PM, Dinh Nguyen wrote:
On 03/02/2016 05:24 PM, Marek Vasut wrote:

[..]

Well, that's our usual USB/QSPI cache issue that's tormenting
your soul.
CCing Chin ;-)

Does the issue by any chance magically disappear if you apply
this patch:

diff --git a/arch/arm/include/asm/system.h
b/arch/arm/include/asm/system.h
index 026e7ef..06802c6 100644
--- a/arch/arm/include/asm/system.h
+++ b/arch/arm/include/asm/system.h
@@ -274,7 +274,7 @@ static inline void set_dacr(unsigned int
val)

  /* options available for data cache on each page */
  enum dcache_option {
-       DCACHE_OFF = TTB_SECT_DOMAIN(0) | TTB_SECT_XN_MASK |
TTB_SECT,
+       DCACHE_OFF = TTB_SECT_S_MASK | TTB_SECT_DOMAIN(0) |
TTB_SECT_XN_MASK | TTB_SECT,
         DCACHE_WRITETHROUGH = DCACHE_OFF | TTB_SECT_C_MASK,
         DCACHE_WRITEBACK = DCACHE_WRITETHROUGH |
TTB_SECT_B_MASK,
         DCACHE_WRITEALLOC = DCACHE_WRITEBACK |
TTB_SECT_TEX(1),


Yes, this patch fixes USB with dcache left on.

Except that it doesn't fix anything, it just makes the system
slower
by
setting the S bit :-/ So this is not a fix :-(

Sorry for away for a while as busy with some critical issues.

Finally relooking back on this. I notice that with SanDisk Cruzer
Blade
pendrive, U-Boot 2013.01.01 can detect it while latest cannot. The
dcache disablement at latest U-Boot doesn't help.

With that, I compared a bunch of registers from clocks, sysmgr,
SCTLR,
ATCLR and USB1 too. I noticed they are similar except the
usb1.globgrp.gusbcfg.ulpiextvbusdrv. The latest U-Boot is
indicating
external supply (address 0xffb4000c return value 0x00101710) while
working 2013.01.01 indicating internal charge pump (return value
0x00001710)

Wonder you guys are seeing the same too? Will dig more about this.
FYI,
I tried to add lot of delay within dwc2.c but doesn't help at all.


While modifying the USB power control of the code, I noticed the
patch
made by Dinh is not there. Just realize the git clone through http
from
main git doesn't work. I was able to clone but getting older version.

With getting the latest code, all my pendrive now can works with
dcache
off. Its easier now as I can get consistent behaviour compared
previously. With that, dcache investigation for tomorrow then

Thanks
Chin Liang


Spent more time on the dcache + USB issue today. Narrow down to below
patch which can make all my USB pendrives work with dcache enabled. But
still need to understand further as not in depth familiar with dwc2.
Probably this might ring a bell to you guys?


diff --git a/drivers/usb/host/dwc2.c b/drivers/usb/host/dwc2.c
index b2f4bc6..b11d8d7 100644
--- a/drivers/usb/host/dwc2.c
+++ b/drivers/usb/host/dwc2.c
@@ -776,6 +776,7 @@ static int transfer_chunk(struct dwc2_hc_regs
*hc_regs, void *aligned_buffer,
                (num_packets << DWC2_HCTSIZ_PKTCNT_OFFSET) |
                (*pid << DWC2_HCTSIZ_PID_OFFSET),
                &hc_regs->hctsiz);
+       udelay(2);

         if (!in && xfer_len) {
                 memcpy(aligned_buffer, buffer, xfer_len);

I can't really comment on the USB problem, as I've only seen this
d-cache / S-bit problem with SPI NOR flash. This is because I've never
really used USB on this platform intensively. But I'm nearly 100%
sure, that all changes that add some delays (or debug printfs)
resulting in a "working solution", either in the USB case or the SPI
NOR case, are just papering over the real problem.

Thanks,
Stefan

_______________________________________________
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot

Reply via email to