From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mga03.intel.com (mga03.intel.com [143.182.124.21]) by mx1.pokylinux.org (Postfix) with ESMTP id B0F564C804D9 for ; Wed, 8 Jun 2011 13:21:50 -0500 (CDT) Received: from azsmga001.ch.intel.com ([10.2.17.19]) by azsmga101.ch.intel.com with ESMTP; 08 Jun 2011 11:21:50 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="4.65,339,1304319600"; d="scan'208";a="9380970" Received: from unknown (HELO [10.255.13.104]) ([10.255.13.104]) by azsmga001.ch.intel.com with ESMTP; 08 Jun 2011 11:21:49 -0700 Message-ID: <4DEFBDB9.2020405@linux.intel.com> Date: Wed, 08 Jun 2011 11:21:45 -0700 From: Darren Hart User-Agent: Mozilla/5.0 (X11; U; Linux x86_64; en-US; rv:1.9.2.17) Gecko/20110424 Lightning/1.0b2 Thunderbird/3.1.10 MIME-Version: 1.0 To: Gary Thomas References: <4DEFB4BA.7050902@mlbassoc.com> In-Reply-To: <4DEFB4BA.7050902@mlbassoc.com> Cc: Poky Project Subject: Re: BeagleBoard using GCC 4.6.0 X-BeenThere: poky@yoctoproject.org X-Mailman-Version: 2.1.13 Precedence: list List-Id: Poky build system developer discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 08 Jun 2011 18:21:50 -0000 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit On 06/08/2011 10:43 AM, Gary Thomas wrote: > Now that Poky is using GCC 4.6.0, has anyone actually checked the > operation on the BeagleBoard? I suspect that you'll find that the > EHCI USB does not work. I can't really check here as I don't trust > the EHCI on my BeagleBoard rev C3 (not xM). Gary, Thank you for digging into this. Excellent timing as I was looking at the same thing - I hadn't looked at the compiler yet as I was in the middle of some kernel work and had assumed the problem lay there. I'll see if I can try with the older kernel to get this resolved as well. Have you tried with various optimization options yet? -- Darren > > That said, I've tried this new compiler (previously reported) on > my own OMAP/3530 board which uses the same 2.6.37 kernel (just not > the linux-yocto version). When I build my kernel with GCC 4.5.2, > it works perfectly, but fails with GCC 4.6.0 (I trust the hardware). > > I've isolated it down to at least the function 'ehci_hub_control' > (but I suspect the problem is more fundamental). Comparing the code > generated by the two compilers with the same source tree, this function > is dramatically different. I can see why it's failing, I just don't > know why the compiler is doing what it's doing. > > The lines at drivers/usb/host/ehci-hub.c:841 > case GetPortStatus: > if (!wIndex || wIndex > ports) > goto error; > wIndex--; > status = 0; > temp = ehci_readl(ehci, status_reg); > > are being compiled very differently. > > With GCC 4.5.2: > 0xc0229810 : cmp r3, #0 ; 0x0 > 0xc0229814 : beq 0xc0229df8 > 0xc0229818 : cmp r3, r0 > 0xc022981c : bgt 0xc0229df8 > 0xc0229820 : sub r8, r3, #1 ; 0x1 > 0xc0229824 : ldr r5, [r7, #4] > 0xc0229828 : uxth r8, r8 > 0xc022982c : dmb sy > > With GCC 4.6.0: > 0xc0221630 : cmp r3, #0 ; 0x0 > 0xc0221634 : beq 0xc0221d7c > 0xc0221638 : cmp r3, r0 > 0xc022163c : bgt 0xc0221d7c > 0xc0221640 : sub r7, r3, #1 ; 0x1 > 0xc0221644 : add r3, r11, #16 ; 0x10 > 0xc0221648 : add r3, r8, r3, lsl #2 > 0xc022164c : uxth r7, r7 > 0xc0221650 : ldrb r5, [r3, #5] > 0xc0221654 : ldrb r2, [r3, #4] > 0xc0221658 : orr r5, r2, r5, lsl #8 > 0xc022165c : ldrb r2, [r3, #6] > 0xc0221660 : ldrb r3, [r3, #7] > 0xc0221664 : orr r5, r5, r2, lsl #16 > 0xc0221668 : orr r5, r5, r3, lsl #24 > 0xc022166c : dmb sy > > As you can see, the old compiler accesses the ehci status register > in a single access, the new compiler dances around and makes multiple > accesses, which in the end get very incorrect data (I think that this > register is like many which clear bits on reads). > > Any ideas where I can go with this? I'm really trying to keep up with > Poky/Yocto, but this move to GCC 4.6.0 has broken my ARM targets :-( > I do have PowerPC targets as well - they seem fine (from limited testing) > with the new compiler. > > Note: if you want to see the whole function disassembly, look at > http://www.mlbassoc.com/poky/ehci_hub_control-disassembly-gcc-4.5.2 > http://www.mlbassoc.com/poky/ehci_hub_control-disassembly-gcc-4.6.0 > > Thanks > -- Darren Hart Intel Open Source Technology Center Yocto Project - Linux Kernel