From patchwork Mon Dec 19 21:41:52 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Pali_Roh=C3=A1r?= X-Patchwork-Id: 1717594 X-Patchwork-Delegate: trini@ti.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=) Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.a=rsa-sha256 header.s=k20201202 header.b=J9KkPK8k; dkim-atps=neutral Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-384)) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4NbY8N4fh7z23dC for ; Tue, 20 Dec 2022 08:42:26 +1100 (AEDT) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 5CB3184F6B; Mon, 19 Dec 2022 22:42:21 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=kernel.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=kernel.org header.i=@kernel.org header.b="J9KkPK8k"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 4538D84F6B; Mon, 19 Dec 2022 22:42:20 +0100 (CET) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.2 Received: from dfw.source.kernel.org (dfw.source.kernel.org [IPv6:2604:1380:4641:c500::1]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 16C01850AA for ; Mon, 19 Dec 2022 22:42:17 +0100 (CET) Authentication-Results: phobos.denx.de; dmarc=pass (p=none dis=none) header.from=kernel.org Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=pali@kernel.org Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dfw.source.kernel.org (Postfix) with ESMTPS id 3BFE661152; Mon, 19 Dec 2022 21:42:15 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 4DECDC433EF; Mon, 19 Dec 2022 21:42:14 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1671486134; bh=hdLCgyFRe6ubCU1Z4zkiTEWgoyoDsk3pFMmjWjtOR8o=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=J9KkPK8k3pqnMxZVOICygzeiTL8WBr2WNk85tdzQuqcvxCSii0u+G5Ma3V4n+pq6o OsHM9e/QSeVY5rRZCmyKnumy30SzqpwFWhVBYw2bdENfDlq3JlG2lEcQwsvAemk5R9 7IRlvC2BycMyi9kwqwHIyI90SsVD4RQGUL4HQsDl/hQiY72C4Kj4/5dwGGxyXtdYnx p/SEb/KgzdlHGZZgfNa7CrV4TglxATSxHoINgw8YscNdrCPvBYLgIn3hLN3QTnSyUn sn5uP7vhywe1e+kiVzdkTZHQlTTN36g1fFvgVCeDimst2E/TQ7ud6VTquc7gLSR6ui jwbW2c1mHxYPg== Received: by pali.im (Postfix) id 4A722858; Mon, 19 Dec 2022 22:42:11 +0100 (CET) From: =?utf-8?q?Pali_Roh=C3=A1r?= To: Tom Rini Cc: u-boot@lists.denx.de Subject: [PATCH v2] powerpc/mpc85xx: Pass correct cpu compiler flags Date: Mon, 19 Dec 2022 22:41:52 +0100 Message-Id: <20221219214152.20455-1-pali@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20221211141204.8153-1-pali@kernel.org> References: <20221211141204.8153-1-pali@kernel.org> MIME-Version: 1.0 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean When gcc's default cpu (selected by --with-cpu= during gcc's configure phase) does not match target U-Boot board cpu then U-Boot binary does not have to be compiled correctly. Lot of distributions sets gcc's default cpu to generic powerpc variant which works fine. U-Boot already pass -Wa,-me500 flag to gcc which instructs GNU AS to accept e500 specific instructions when processing assembler source files (.S). This affects also assembly files generated by gcc from C source files. And because gcc for generic powerpc cpu puts '.machine ppc' at the beginning of the generated assembly file, it basically overwrites -me500 flag by which was GNU AS invoked (from U-boot build system). It started to be an issue since binutils 2.38 which does not keep enabled extra functional units selected by previous cpu. Hence issuing directive '.machine ppc' (generated by gcc for generic powerpc) after '.machine e500' (specifying at command line) disables usage of e500 specific instructions. And compiling arch/powerpc/cpu/mpc85xx/tlb.c code throws following assembler errors: {standard input}: Assembler messages: {standard input}:127: Error: unrecognized opcode: `tlbre' {standard input}:418: Error: unrecognized opcode: `tlbre' {standard input}:821: Error: unrecognized opcode: `msync' {standard input}:821: Error: unrecognized opcode: `tlbwe' {standard input}:884: Error: unrecognized opcode: `tlbsx' This issue was already hit by Debian people and is reported in bug tracker: https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1003490 Calling gcc with -mcpu=8540 flag fixes this issue because -mcpu=8540 tells gcc to compile code for e500 core/cpu (overwriting gcc's default cpu) and does not put '.machine ppc' directive into assembly anymore. Also if gcc is invoked with -mcpu=8540 then it pass -me500 flag to GNU AS. So it is unnecessary to manually specify -Wa,-me500 flag because it is implicitly added. Fix this issue properly by specifying correct -mcpu compiler flag for all supported powerpc cores in U-Boot mpc85xx platform, which are: e500v1, e500v2, e500mc, e5500 and e6500. For specifying e500v1 and e500v2 cores, gcc has unintuitive -mcpu=8540 and -mcpu=8548 flag names, for other cores -mcpu matches core name. The only difference between gcc's -mcpu=8540 and -mcpu=8548 flags is support for double precision floating point SPE instructions. As U-Boot does not use floating point, it is fine to use -mcpu=8540 for both e500v1 and e500v2 cores. Moreover gcc 9 completely removed e500 floating point support, so since gcc 9 -mcpu=8548 is just alias to -mcpu=8540. Note that U-Boot's CONFIG_E500 option is set also for other cpus, not only for e500v1 and e500v2. So do not check for CONFIG_E500 and rather set e500 as last fallback value when no other mpc85xx cpu matches. Signed-off-by: Pali Rohár --- Changes in v2: * Fix commit message and fact that -mcpu=8548 flag works also with last gcc --- arch/powerpc/cpu/mpc85xx/config.mk | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/arch/powerpc/cpu/mpc85xx/config.mk b/arch/powerpc/cpu/mpc85xx/config.mk index 7a1d81cf2d76..b6b5d2053aea 100644 --- a/arch/powerpc/cpu/mpc85xx/config.mk +++ b/arch/powerpc/cpu/mpc85xx/config.mk @@ -3,7 +3,7 @@ # (C) Copyright 2002,2003 Motorola Inc. # Xianghua Xiao, X.Xiao@motorola.com -PLATFORM_CPPFLAGS += -Wa,-me500 -msoft-float -mno-string +PLATFORM_CPPFLAGS += -msoft-float -mno-string PLATFORM_RELFLAGS += -msingle-pic-base -fno-jump-tables # -mspe=yes is needed to have -mno-spe accepted by a buggy GCC; @@ -11,3 +11,13 @@ PLATFORM_RELFLAGS += -msingle-pic-base -fno-jump-tables # http://gcc.gnu.org/ml/gcc-patches/2008-04/msg00311.html PLATFORM_CPPFLAGS += $(call cc-option,-mspe=yes) \ $(call cc-option,-mno-spe) + +ifdef CONFIG_E6500 +PLATFORM_CPPFLAGS += -mcpu=e6500 +else ifdef CONFIG_E5500 +PLATFORM_CPPFLAGS += -mcpu=e5500 +else ifdef CONFIG_E500MC +PLATFORM_CPPFLAGS += -mcpu=e500mc +else +PLATFORM_CPPFLAGS += -mcpu=8540 +endif