From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ilya Yanok Date: Sun, 15 Jul 2012 12:55:49 +0400 Subject: [U-Boot] [PATCH 2/2] ehci-hcd.c, musb_core, usb.h: Add USB_DMA_MINALIGN define for cache alignment In-Reply-To: <201207151007.06108.marex@denx.de> References: <1341716895-31089-1-git-send-email-marex@denx.de> <1341716895-31089-2-git-send-email-marex@denx.de> <201207151007.06108.marex@denx.de> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Dear Marek, On Sun, Jul 15, 2012 at 12:07 PM, Marek Vasut wrote: > > > @@ -207,8 +210,8 @@ static int > > > > > > ehci_submit_async(struct usb_device *dev, unsigned long pipe, void > > > > > > *buffer, > > > > > > int length, struct devrequest *req) > > > > > > { > > > > > > - static struct QH qh __attribute__((aligned(32))); > > > - static struct qTD qtd[3] __attribute__((aligned (32))); > > > + ALLOC_CACHE_ALIGN_BUFFER(struct QH, qh, 1); > > > > Somehow this doesn't work being allocated on stack... I assumed that this > > was declared as static just to use __attribute__((aligned))... > > Not really ... but then, we have indeed a problem here. It was probably > declared > static to preserve the contents of these variables across the the calls of > this > function. Sigh, the USB code is really bloody :-/ > Hm.. no, I don't think it's about contents... Look, there are memset() calls straight in the beginning of the function. It looks like it's about qh address: I tried debugging it a bit and it seems to work until qh has the same address and break when the address eventually changes. > Ilya, can you try pulling these out of the function? > I can but what for? Are there any differences (except for scope) declaring statics inside or outside function? As I said declaring qh static (with DEFINE_CACHE_ALIGN_BUFFER) works but... Regards, Ilya.