Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932104AbbKXVMl (ORCPT ); Tue, 24 Nov 2015 16:12:41 -0500 Received: from mout.kundenserver.de ([217.72.192.74]:58792 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754843AbbKXVMj (ORCPT ); Tue, 24 Nov 2015 16:12:39 -0500 From: Arnd Bergmann To: Russell King - ARM Linux Cc: Stephen Boyd , Nicolas Pitre , Peter Maydell , =?ISO-8859-1?Q?M=E5ns_Rullg=E5rd?= , "linux-arm-msm@vger.kernel.org" , Daniel Lezcano , lkml - Kernel Mailing List , Steven Rostedt , Christopher Covington , linux-arm-kernel@lists.infradead.org Subject: Re: [RFC/PATCH 0/3] ARM: Use udiv/sdiv for __aeabi_{u}idiv library functions Date: Tue, 24 Nov 2015 22:11:57 +0100 Message-ID: <3507881.xd2FjVJzjC@wuerfel> User-Agent: KMail/4.11.5 (Linux/3.16.0-10-generic; KDE/4.11.5; x86_64; ; ) In-Reply-To: <20151124203516.GH8644@n2100.arm.linux.org.uk> References: <1448068997-26631-1-git-send-email-sboyd@codeaurora.org> <20151124200730.GA25963@codeaurora.org> <20151124203516.GH8644@n2100.arm.linux.org.uk> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" X-Provags-ID: V03:K0:F3cglXMPkU+HExRlZxIiE0wMnVo3h+pBEfAYiusQ6u0o1feijtR Lvw+5FLqEmEYmK4+ciWP4RDZhyE6fC1YxB6xXdewhU1rt1HXAeZ+oiqSl70HpRIs5wUonbd 7pthejrbvsJks9k2d5XKPu73JyyGgjJ2x9gt2nEUyHlUunHq/gzBLS5PW5wd0xmt9JD/YXb 8ffc2EmxUmKWFseg44D9w== X-UI-Out-Filterresults: notjunk:1;V01:K0:iKy63D2OzzI=:W2sa1vq3DfUshJZJkO5Ka8 Je5nX2jjOFqqig9GSe9aiEmsD2LG3B2l7wA5FGHasNYQW8Z37N92xmnUhrRMxNo9Cmo4ZTINL sxbW8ypmatVXWYP0wmJkaZoR4/jMPbxTneXrOqiVFPxf2qBlsPDoDbjhh1KvOBARM6fuC4Q/f Y6vuGdhsBY19JaSEP+07hS/i9dpFg68FEDN//9ZRAMs9Jhe01ArRLgKsP7QMErerDuR4gFhTH QeW8zAedOWEZZT69kxW9z04GVKf2oDL4lgsD623fZTAzqDF2csISiK9no4TWeQqxHaUIVrhaZ bXgX7rBbb1xNYZ7VBn+RlFFj4Gvygd/XTgbpG3BxVW/n+/g318oZFizDdtiBglHkhAlCXhp6R b9OFF4+aGK+dqleuvn+4w0BC7FiVkmt9jgUZc+YSjOlrU3RFKLUuEfnzOJnkuhT+ZDBIh4WTl wjzZGoiKvtkMqwDhY2JauYZIWjSBLAmd9AL2nZ3+1Nt0rPzCQquKdNT3DucRpjVBnZudFwx7/ 95siMy/nrxCSfGKOVNarcKwLBbOeETT0qpRq9+2Tx4TSSNzAgJM8T3NLY+yhS776Sm9VEhrTF ATQPY9M9m5CT/HNBB8PXsKSCu/Szxqwncw/qlOlSVmSvRvYua+wTHi+4GO3xbE5MLMd3uJ0BQ fijXpVU0TkmMACa5dvPWOQx0j9Q0krQAokkWqCjFLSa0vQ3ekisQK9aNBkO1DQW8vnUOVYDty mY7mPmTzti4/8q2o Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2585 Lines: 58 On Tuesday 24 November 2015 20:35:16 Russell King - ARM Linux wrote: > We'd need to do something similar for v7VE as well. As we're getting > more of this, I'd suggest we move to: > > arch-v7a-y =$(call cc-option,-march=armv7-a,-march=armv5t -Wa$(comma)-march=armv7-a) > arch-v7a-$(CONFIG_CPU_32v7VE) =... whatever it was... > arch-$(CONFIG_CPU_32v7) =-D__LINUX_ARM_ARCH__=7 $(arch-v7a-y) > arch-v6-y =$(call cc-option,-march=armv6,-march=armv5t -Wa$(comma)-march=armv6) > arch-v6-$(CONFIG_CPU_32v6K) =$(call cc-option,-march=armv6k,-march=armv5t -Wa$(comma)-march=armv6k) > arch-$(CONFIG_CPU_32v6) =-D__LINUX_ARM_ARCH__=6 $(arch-v6-y) I would argue that V7VE is different from V6K here: The instructions that are added in V6K compared to V6 are not generated by gcc but are typically used in assembly like static inline unsigned long __xchg(unsigned long x, volatile void *ptr, int size) { ... #ifndef CONFIG_CPU_V6 asm volatile(...); /* v6k specific instruction */ #endif } while the logic in your example above would break normal v7 support when both V7 and V7VE are enabled. > > My understanding is that we want to support CPU_V7VE without > > CPU_V7 enabled so that it uses the idiv instructions in that > > configuration. When V7VE and V7 are both enabled, we should > > degrade to the aeabi functions, and the same is true for when > > V7VE is disabled. > > Let me have another look at this, it's been a while since I touched these > options... There is one idea that I've had in the back of my mind for a long while, and probably mentioned on the list before: We could decide to simplify the CPU architecture selection for multiplatform a lot if we turn the somewhat overengineered ARCH_MULTI_* options into a choice statement, where each of them implies the higher architecture levels. That way we can linearize ARMv6/v6k/v7/v7VE/v8/v8.1 so that you just pick which platforms you want to see by selecting the minimum level, and all higher ones will automatically be available (for v8 and v8.1 that means just MACH_VIRT, as we don't really want to run 32-bit kernels on bare metal v8-A machines). That way, we can have LPAE and -march=armv7ve support depend on CONFIG_ARCH_MULTI_V7VE, which would imply that we don't support CPU_V7 based platforms. Arnd -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/