From patchwork Thu May 28 14:21:25 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Tony Lindgren X-Patchwork-Id: 6499111 Return-Path: X-Original-To: patchwork-linux-omap@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id 7CA699F1C1 for ; Thu, 28 May 2015 14:21:36 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 09F2A20551 for ; Thu, 28 May 2015 14:21:33 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id B6E342062C for ; Thu, 28 May 2015 14:21:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753647AbbE1OV2 (ORCPT ); Thu, 28 May 2015 10:21:28 -0400 Received: from muru.com ([72.249.23.125]:54326 "EHLO muru.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752212AbbE1OV2 (ORCPT ); Thu, 28 May 2015 10:21:28 -0400 Received: from atomide.com (localhost [127.0.0.1]) by muru.com (Postfix) with ESMTPS id F25E88104; Thu, 28 May 2015 14:23:00 +0000 (UTC) Date: Thu, 28 May 2015 07:21:25 -0700 From: Tony Lindgren To: Grazvydas Ignotas Cc: Kevin Hilman , Arnd Bergmann , tyler.baker@linaro.org, Stephen Boyd , "linux-omap@vger.kernel.org" , Dave Martin , "linux-arm-kernel@lists.infradead.org" Subject: Re: [RFC] Fix omap3 booting with thumb2 compiled kernel Message-ID: <20150528142125.GE30984@atomide.com> References: <20150527215545.GA30984@atomide.com> <7h7frtmzoh.fsf@deeprootsystems.com> <20150527225553.GC30984@atomide.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org X-Spam-Status: No, score=-6.9 required=5.0 tests=BAYES_00, RCVD_IN_DNSWL_HI, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=unavailable version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP * Grazvydas Ignotas [150528 04:45]: > On Thu, May 28, 2015 at 1:55 AM, Tony Lindgren wrote: > > 8 <---------------------- > > From: Tony Lindgren > > Date: Wed, 27 May 2015 15:33:57 -0700 > > Subject: [PATCH] ARM: OMAP3: Fix booting with thumb2 kernel > > > > We get a NULL pointer dereference on omap3 for thumb2 compiled kernels: > > > > Internal error: Oops: 80000005 [#1] SMP THUMB2 > > ... > > [] (_raw_spin_unlock_irqrestore) from [] > > (omap3_enter_idle_bm+0xc5/0x178) > > [] (omap3_enter_idle_bm) from [] > > (cpuidle_enter_state+0x77/0x27c) > > [] (cpuidle_enter_state) from [] > > (cpu_startup_entry+0x155/0x23c) > > [] (cpu_startup_entry) from [] > > (start_kernel+0x32f/0x338) > > [] (start_kernel) from [<8000807f>] (0x8000807f) > > > > The power management related assembly on moaps needs to interact with > > moaps -> omaps Thanks, fixed now. I also added a link for why ENDPROC is needed to the description. I'll apply the patch below into fixes today. Regards, Tony 8< ---------------------- From: Tony Lindgren Date: Wed, 27 May 2015 15:33:57 -0700 Subject: [PATCH] ARM: OMAP3: Fix booting with thumb2 kernel We get a NULL pointer dereference on omap3 for thumb2 compiled kernels: Internal error: Oops: 80000005 [#1] SMP THUMB2 ... [] (_raw_spin_unlock_irqrestore) from [] (omap3_enter_idle_bm+0xc5/0x178) [] (omap3_enter_idle_bm) from [] (cpuidle_enter_state+0x77/0x27c) [] (cpuidle_enter_state) from [] (cpu_startup_entry+0x155/0x23c) [] (cpu_startup_entry) from [] (start_kernel+0x32f/0x338) [] (start_kernel) from [<8000807f>] (0x8000807f) The power management related assembly on omaps needs to interact with ARM mode bootrom code, so we need to keep most of the related assembly in ARM mode. Turns out this error is because of missing ENDPROC for assembly code as suggested by Stephen Boyd . Let's add the missing ENDPROC in two places to sleep34xx.S, and also remove the earlier mystery code that was probably also caused by missing ENDPROC for earlier kernels. The reason why ENDPROC makes a difference is it sets .type and then the compiler knows what to do with the thumb bit as explained at: https://wiki.ubuntu.com/ARM/Thumb2PortingHowto Reported-by: Kevin Hilman Tested-by: Kevin Hilman Signed-off-by: Tony Lindgren --- To unsubscribe from this list: send the line "unsubscribe linux-omap" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html --- a/arch/arm/mach-omap2/sleep34xx.S +++ b/arch/arm/mach-omap2/sleep34xx.S @@ -203,23 +203,8 @@ save_context_wfi: */ ldr r1, kernel_flush blx r1 - /* - * The kernel doesn't interwork: v7_flush_dcache_all in particluar will - * always return in Thumb state when CONFIG_THUMB2_KERNEL is enabled. - * This sequence switches back to ARM. Note that .align may insert a - * nop: bx pc needs to be word-aligned in order to work. - */ - THUMB( .thumb ) - THUMB( .align ) - THUMB( bx pc ) - THUMB( nop ) - .arm - b omap3_do_wfi - -/* - * Local variables - */ +ENDPROC(omap34xx_cpu_suspend) omap3_do_wfi_sram_addr: .word omap3_do_wfi_sram kernel_flush: @@ -364,10 +349,7 @@ exit_nonoff_modes: * =================================== */ ldmfd sp!, {r4 - r11, pc} @ restore regs and return - -/* - * Local variables - */ +ENDPROC(omap3_do_wfi) sdrc_power: .word SDRC_POWER_V cm_idlest1_core: