From patchwork Thu Jun 11 18:47:53 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kevin Hilman X-Patchwork-Id: 6591131 Return-Path: X-Original-To: patchwork-linux-omap@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork2.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork2.web.kernel.org (Postfix) with ESMTP id 7B513C0020 for ; Thu, 11 Jun 2015 18:48:09 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id 87E112041D for ; Thu, 11 Jun 2015 18:48:08 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 7D3C3202E5 for ; Thu, 11 Jun 2015 18:48:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1754595AbbFKSsA (ORCPT ); Thu, 11 Jun 2015 14:48:00 -0400 Received: from mail-pd0-f179.google.com ([209.85.192.179]:36109 "EHLO mail-pd0-f179.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754511AbbFKSr7 (ORCPT ); Thu, 11 Jun 2015 14:47:59 -0400 Received: by pdjm12 with SMTP id m12so8632431pdj.3 for ; Thu, 11 Jun 2015 11:47:56 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=Hub++puZjMRmt+iljRF406lvRuQ1hznoDbil3T+TH/Y=; b=k5r7Zt91QY8tDN1BI+ObpPjbmhFZqL5k8SWrn6fPT0N3nhmHUcwBfpwho64DBd+/rV ZVk1x6A52W+e+dAcmdydWO9JGJAo/cTG/ph5/wflB7ZCuQVbCu1EEUjVFip//TYLfDMs nfnRG/3Lh3rspxhiFB4P9TJcBt7skcjCee7YCW4JIBTWY2hzLPSlk/4zzAt09LjHEq0C 7EypTJgsqj4dZheX0bEsoHjoRKu0vXq/ODbrtHcZcx2TTYK6f7TBgs6EExmYOkampzuP qivYJOODiZSrybs84zCsxKdd2ZagGGpvp0ZLZyMGTKQuQkMffhu0cgwSlNaOXoAH/DoJ Vhgg== X-Gm-Message-State: ALoCoQkca7qHjs0gvQet8n7pZbIwtSbfk+7/kYJ2M7WFo2CIqzk4uXiU0rx1s6PHIHwrLkl2YIXX X-Received: by 10.68.209.130 with SMTP id mm2mr16831973pbc.88.1434048476105; Thu, 11 Jun 2015 11:47:56 -0700 (PDT) Received: from localhost (c-67-160-101-93.hsd1.wa.comcast.net. [67.160.101.93]) by mx.google.com with ESMTPSA id jz10sm1407779pbc.48.2015.06.11.11.47.54 (version=TLSv1.2 cipher=RC4-SHA bits=128/128); Thu, 11 Jun 2015 11:47:55 -0700 (PDT) From: Kevin Hilman To: Sasha Levin , stable@vger.kernel.org Cc: Tony Lindgren , linux-omap@vger.kernel.org Subject: [PATCH stable/3.18.y] ARM: OMAP3: Fix booting with thumb2 kernel Date: Thu, 11 Jun 2015 11:47:53 -0700 Message-Id: <1434048473-30680-1-git-send-email-khilman@kernel.org> X-Mailer: git-send-email 2.3.1 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 From: Tony Lindgren 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 fix the problem by adding ENDPROC in two places to sleep34xx.S. Let's also remove the now duplicate custom code for mode switching. This has been unnecessary since commit 6ebbf2ce437b ("ARM: convert all "mov.* pc, reg" to "bx reg" for ARMv6+"). And let's also remove the comments about local variables, they are now just confusing after the ENDPROC. 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 (cherry picked from commit d8a50941c91a68da202aaa96a3dacd471ea9c693) Cc: # v3.18+ Signed-off-by: Kevin Hilman --- Sasha, please add to your v3.18.y-queue. This one fixes boot failures on several ARM/OMAP platforms when CONFIG_THUMB2_KERNEL=y. arch/arm/mach-omap2/sleep34xx.S | 22 ++-------------------- 1 file changed, 2 insertions(+), 20 deletions(-) diff --git a/arch/arm/mach-omap2/sleep34xx.S b/arch/arm/mach-omap2/sleep34xx.S index d1dedc8195ed..eafd120b53f1 100644 --- 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: