From mboxrd@z Thu Jan 1 00:00:00 1970 From: Marek Vasut Date: Thu, 21 Jun 2012 02:09:01 +0200 Subject: [U-Boot] [PATCH v3 2/6] ehci-hcd.c, musb_core, usb.h: Add USB_DMA_MINALIGN define for cache alignment In-Reply-To: <20120620220736.GB2254@bill-the-cat> References: <1339710323-20014-1-git-send-email-trini@ti.com> <201206202315.26984.marex@denx.de> <20120620220736.GB2254@bill-the-cat> Message-ID: <201206210209.01540.marex@denx.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Dear Tom Rini, > On Wed, Jun 20, 2012 at 11:15:26PM +0200, Marek Vasut wrote: > > Dear Tom Rini, > > > > > On Wed, Jun 20, 2012 at 09:00:45PM +0200, Marek Vasut wrote: > > > > Dear Tom Rini, > > > > > > > > > The USB spec says that 32 bytes is the minimum required alignment. > > > > > However on some platforms we have a larger minimum requirement for > > > > > cache coherency. In those cases, use that value rather than the > > > > > USB spec minimum. We add a cpp check to to define > > > > > USB_DMA_MINALIGN and make use of it in ehci-hcd.c and musb_core.h. > > > > > We cannot use MAX() here as we are not allowed to have tests > > > > > inside of align(...). > > > > > > > > > > Cc: Marek Vasut > > > > > Signed-off-by: Tom Rini > > > > > > > > > > -- > > > > > Changes in v2: > > > > > - Move test to , expand comment. > > > > > --- > > > > > > > > > > drivers/usb/host/ehci-hcd.c | 13 +++++++------ > > > > > drivers/usb/musb/musb_core.h | 2 +- > > > > > include/usb.h | 10 ++++++++++ > > > > > 3 files changed, 18 insertions(+), 7 deletions(-) > > > > > > > > > > diff --git a/drivers/usb/host/ehci-hcd.c > > > > > b/drivers/usb/host/ehci-hcd.c index 04300be..5a86117 100644 > > > > > --- a/drivers/usb/host/ehci-hcd.c > > > > > +++ b/drivers/usb/host/ehci-hcd.c > > > > > @@ -29,12 +29,13 @@ > > > > > > > > > > #include "ehci.h" > > > > > > > > > > -int rootdev; > > > > > -struct ehci_hccr *hccr; /* R/O registers, not need for volatile */ > > > > > -volatile struct ehci_hcor *hcor; > > > > > +int rootdev __attribute__((aligned(USB_DMA_MINALIGN))); > > > > > +/* R/O registers, not need for volatile */ > > > > > +struct ehci_hccr *hccr __attribute__((aligned(USB_DMA_MINALIGN))); > > > > > +volatile struct ehci_hcor *hcor > > > > > __attribute__((aligned(USB_DMA_MINALIGN))); > > > > > > > > ^ these need to be aligned too? > > > > > > Yes, these were the first and easy to spot ones in the cache flush > > > messages, I would swear. > > > > hcor and hccr are register locations though ... so it's pretty weird. > > OK, now that I look harder at the messages, doing that is only masking a > problem. At issue (from u-boot.map): > .bss 0x801586c0 0x1c0 drivers/usb/host/libusb_host.o > 0x80158860 hcor > And a message of: > ERROR: v7_dcache_inval_range - stop address is not aligned - 0x9ffbc860 > Using 'bdinfo' to see reloc offset gives us hcor, but _end_ not start > means it's something within the anonymous part of the bss and padding > hcor out just masks the real problem. I'll resubmit a v4 shortly. > Thanks! You're welcome, Add my Acked-by: Marek Vasut and push through omap since it's part of a bigger patchset. Best regards, Marek Vasut