Message ID | 20231130-mbly-uart-v5-2-6566703a04b5@bootlin.com |
---|---|
State | New |
Headers |
Return-Path: <linux-kernel-owner@vger.kernel.org> Delivered-To: ouuuleilei@gmail.com Received: by 2002:a59:bcd1:0:b0:403:3b70:6f57 with SMTP id r17csp411682vqy; Thu, 30 Nov 2023 06:08:15 -0800 (PST) X-Google-Smtp-Source: AGHT+IESblJbeICcm0u7fTv5W7M15YwuMKXdCt63WKOX5H+bf04L+FKBnNt713Ekin/6Quer4OwM X-Received: by 2002:a17:90b:4c05:b0:27d:3a3e:3a45 with SMTP id na5-20020a17090b4c0500b0027d3a3e3a45mr20855001pjb.44.1701353295107; Thu, 30 Nov 2023 06:08:15 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701353295; cv=none; d=google.com; s=arc-20160816; b=pSMPyZolpmaTeLHeMJgTlRElibFkwhF5UndnD3BZDlP96c3RKXKcr+nXWZs6Eo1HU+ dHwUpq+tZPoZOdkSs+9IkuUiuP1Rr/mAmNksohc0rof2VvNbfCrcf9D+VJKc0VUxrKkg 1mdetsaxfughctUj0ZYLDMLcZJfSzFurTkEdYfxH68wWg/Hnn2lECISHdFoYCe9GeHXu lsxtjVbuRjeRXkVsCBF2MpnVYJfVHsFb7bMXW3z8k1gbbiAYb1fqHlucFAggPqLr6a0t K6xN+lVhOCNhbq+umKhh8YkGh+59d6BjNvMK+k8KU12Dgkou+mKQ3Gj5tnKdzsy3Cnko qJCA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:in-reply-to:references:message-id :content-transfer-encoding:mime-version:subject:date:from :dkim-signature; bh=ZeVZYzIpi7qPE4gQGC8UDmZIaZsyDdyEiRhUi1Jk860=; fh=AHZzcI0NKFNU1WuuS/FWF2LprSMGsTAGL8gmMiTfjNU=; b=JIVL6rYwG+khd60DjI5/BXoA7wyxM5cR3Rk8fkw6xron4rNgN6si6NlzQuOUEZ3/C0 gBVZoVQKvgfXoFTfR1XpR794tmBRnQNf9KTO+Zrtanl/lIaB9/VBfecsTZKyOdIomgyX +IoRgkE58SvPM3uhyAbk50tMcWwmsQQ0bF9+huJtVryG535nm+wGrWxvVr9q5pb/popr Il1pxLKzpm+2Gas4QpHMOkgGXiO4aj3UjMsnrXqyxIUK6aMV7lxQHUkSQ7JNzlhxeJxQ kxATDlUkFmestG4GpBcYSw8U9EJlQe9pkmY3hSe2mRGKqM4IiUtx0RmhafTVMnbyhUZ/ Uc0Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=H97wfVSH; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from pete.vger.email (pete.vger.email. [23.128.96.36]) by mx.google.com with ESMTPS id pf17-20020a17090b1d9100b00286064cc2c5si3884586pjb.0.2023.11.30.06.08.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 30 Nov 2023 06:08:15 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) client-ip=23.128.96.36; Authentication-Results: mx.google.com; dkim=pass header.i=@bootlin.com header.s=gm1 header.b=H97wfVSH; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=REJECT sp=REJECT dis=NONE) header.from=bootlin.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by pete.vger.email (Postfix) with ESMTP id DA7C182A9B9A; Thu, 30 Nov 2023 06:07:53 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at pete.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345873AbjK3OHi (ORCPT <rfc822;ruipengqi7@gmail.com> + 99 others); Thu, 30 Nov 2023 09:07:38 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39592 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1345832AbjK3OHb (ORCPT <rfc822;linux-kernel@vger.kernel.org>); Thu, 30 Nov 2023 09:07:31 -0500 Received: from relay2-d.mail.gandi.net (relay2-d.mail.gandi.net [IPv6:2001:4b98:dc4:8::222]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id CA74BD54; Thu, 30 Nov 2023 06:07:35 -0800 (PST) Received: by mail.gandi.net (Postfix) with ESMTPSA id 0905540005; Thu, 30 Nov 2023 14:07:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bootlin.com; s=gm1; t=1701353254; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ZeVZYzIpi7qPE4gQGC8UDmZIaZsyDdyEiRhUi1Jk860=; b=H97wfVSH6x6Jen1208bJYnKsln5XW+KjqrP6YiMoJpYlgdPLKXN7dPNUQjeTCsq6EYNa1+ jtp4ML9I3gYh5UY8JoKl2OH5QjOBanBOx01p+w2E1cBYlRHOYOHxu95krH9ePD6eJCOQ5T llbjCbSUzze1K55yALQYYYLMAxZd73SjqkUCCg2FKj2qZCxHXCNgQN6Yv0nVS3bwjV0SlU Sg5OwYtW29GJnHiNDpLEUQgV/WdNdTphkKknpPNPQZblwgFF5YSC2ad9ESGmod/X051pyv 2HLI3IVxbTMoETJ6TtcNGXUD4VfxYeoWFIdcLTjSiN5te1uN/H3+/ie/FbTPsg== From: =?utf-8?q?Th=C3=A9o_Lebrun?= <theo.lebrun@bootlin.com> Date: Thu, 30 Nov 2023 15:07:14 +0100 Subject: [PATCH v5 2/9] tty: serial: amba: Use linux/{bits,bitfield}.h macros MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit Message-Id: <20231130-mbly-uart-v5-2-6566703a04b5@bootlin.com> References: <20231130-mbly-uart-v5-0-6566703a04b5@bootlin.com> In-Reply-To: <20231130-mbly-uart-v5-0-6566703a04b5@bootlin.com> To: Russell King <linux@armlinux.org.uk>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Jiri Slaby <jirislaby@kernel.org> Cc: linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org, Linus Walleij <linus.walleij@linaro.org>, =?utf-8?q?Gr=C3=A9gory_Clement?= <gregory.clement@bootlin.com>, Alexandre Belloni <alexandre.belloni@bootlin.com>, Thomas Petazzoni <thomas.petazzoni@bootlin.com>, Vladimir Kondratiev <vladimir.kondratiev@mobileye.com>, Tawfik Bayouk <tawfik.bayouk@mobileye.com>, =?utf-8?q?Ilpo_J=C3=A4rvinen?= <ilpo.jarvinen@linux.intel.com>, =?utf-8?q?T?= =?utf-8?q?h=C3=A9o_Lebrun?= <theo.lebrun@bootlin.com> X-Mailer: b4 0.12.3 X-GND-Sasl: theo.lebrun@bootlin.com X-Spam-Status: No, score=-0.9 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on pete.vger.email Precedence: bulk List-ID: <linux-kernel.vger.kernel.org> X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (pete.vger.email [0.0.0.0]); Thu, 30 Nov 2023 06:07:54 -0800 (PST) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1783998232771106674 X-GMAIL-MSGID: 1783998232771106674 |
Series |
Cleanup AMBA PL011 driver
|
|
Commit Message
Théo Lebrun
Nov. 30, 2023, 2:07 p.m. UTC
The driver uses bit shifts and hexadecimal expressions to declare constants. Replace that with the BIT(), GENMASK() & FIELD_PREP_CONST() macros to clarify intent. Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> Signed-off-by: Théo Lebrun <theo.lebrun@bootlin.com> --- include/linux/amba/serial.h | 248 +++++++++++++++++++++++--------------------- 1 file changed, 127 insertions(+), 121 deletions(-)
Comments
Hi Théo, kernel test robot noticed the following build errors: [auto build test ERROR on tty/tty-linus] [also build test ERROR on usb/usb-testing usb/usb-next usb/usb-linus linus/master v6.7-rc4 next-20231205] [cannot apply to tty/tty-testing tty/tty-next] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Th-o-Lebrun/tty-serial-amba-Use-linux-bits-bitfield-h-macros/20231130-230738 base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git tty-linus patch link: https://lore.kernel.org/r/20231130-mbly-uart-v5-2-6566703a04b5%40bootlin.com patch subject: [PATCH v5 2/9] tty: serial: amba: Use linux/{bits,bitfield}.h macros config: arm-ep93xx_defconfig (https://download.01.org/0day-ci/archive/20231206/202312061130.xSPDblkL-lkp@intel.com/config) compiler: arm-linux-gnueabi-gcc (GCC) 13.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231206/202312061130.xSPDblkL-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202312061130.xSPDblkL-lkp@intel.com/ All errors (new ones prefixed by >>): include/linux/stddef.h: Assembler messages: >> include/linux/stddef.h:10: Error: bad instruction `enum {' >> include/linux/stddef.h:11: Error: junk at end of line, first unrecognized character is `,' include/linux/stddef.h:13: Error: junk at end of line, first unrecognized character is `}' >> arch/arm/include/uapi/asm/swab.h:28: Error: bad instruction `static inline __attribute_const__ __u32 __arch_swab32(__u32 x)' >> arch/arm/include/uapi/asm/swab.h:29: Error: junk at end of line, first unrecognized character is `{' >> arch/arm/include/uapi/asm/swab.h:30: Error: bad instruction `__u32 t' >> arch/arm/include/uapi/asm/swab.h:33: Error: bad instruction `if (!__builtin_constant_p(x)){' >> arch/arm/include/uapi/asm/swab.h:39: Error: bad instruction `asm ("eor\t%0, %1, %1, ror #16":"=r"(t):"r"(x))' arch/arm/include/uapi/asm/swab.h:40: Error: junk at end of line, first unrecognized character is `}' >> arch/arm/include/uapi/asm/swab.h:45: Error: bad instruction `t &=~0x00FF0000' >> arch/arm/include/uapi/asm/swab.h:46: Error: bad instruction `x ^=(t>>8)' >> arch/arm/include/uapi/asm/swab.h:48: Error: bad instruction `return x' arch/arm/include/uapi/asm/swab.h:49: Error: junk at end of line, first unrecognized character is `}' >> include/uapi/linux/swab.h:48: Error: bad instruction `static inline __attribute_const__ __u16 __fswab16(__u16 val)' >> include/uapi/linux/swab.h:49: Error: junk at end of line, first unrecognized character is `{' >> include/uapi/linux/swab.h:53: Error: bad instruction `return ((__u16)((((__u16)(val)&(__u16)0x00ffU)<<8)|(((__u16)(val)&(__u16)0xff00U)>>8)))' include/uapi/linux/swab.h:55: Error: junk at end of line, first unrecognized character is `}' >> include/uapi/linux/swab.h:57: Error: bad instruction `static inline __attribute_const__ __u32 __fswab32(__u32 val)' include/uapi/linux/swab.h:58: Error: junk at end of line, first unrecognized character is `{' >> include/uapi/linux/swab.h:60: Error: bad instruction `return __arch_swab32(val)' include/uapi/linux/swab.h:64: Error: junk at end of line, first unrecognized character is `}' >> include/uapi/linux/swab.h:66: Error: bad instruction `static inline __attribute_const__ __u64 __fswab64(__u64 val)' include/uapi/linux/swab.h:67: Error: junk at end of line, first unrecognized character is `{' >> include/uapi/linux/swab.h:71: Error: bad instruction `__u32 h=val>>32' >> include/uapi/linux/swab.h:72: Error: bad instruction `__u32 l=val&((1ULL<<32)-1)' >> include/uapi/linux/swab.h:73: Error: bad instruction `return (((__u64)__fswab32(l))<<32)|((__u64)(__fswab32(h)))' include/uapi/linux/swab.h:77: Error: junk at end of line, first unrecognized character is `}' >> include/uapi/linux/swab.h:79: Error: bad instruction `static inline __attribute_const__ __u32 __fswahw32(__u32 val)' include/uapi/linux/swab.h:80: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:84: Error: bad instruction `return ((__u32)((((__u32)(val)&(__u32)0x0000ffffUL)<<16)|(((__u32)(val)&(__u32)0xffff0000UL)>>16)))' include/uapi/linux/swab.h:86: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:88: Error: bad instruction `static inline __attribute_const__ __u32 __fswahb32(__u32 val)' include/uapi/linux/swab.h:89: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:93: Error: bad instruction `return ((__u32)((((__u32)(val)&(__u32)0x00ff00ffUL)<<8)|(((__u32)(val)&(__u32)0xff00ff00UL)>>8)))' include/uapi/linux/swab.h:95: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:136: Error: bad instruction `static inline unsigned long __swab(const unsigned long y)' include/uapi/linux/swab.h:137: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:141: Error: bad instruction `return (__u32)(__builtin_constant_p(y)?((__u32)((((__u32)(y)&(__u32)0x000000ffUL)<<24)|(((__u32)(y)&(__u32)0x0000ff00UL)<<8)|(((__u32)(y)&(__u32)0x00ff0000UL)>>8)|(((__u32)(y)&(__u32)0xff000000UL)>>24))):__fswab32(y))' include/uapi/linux/swab.h:143: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:171: Error: bad instruction `static inline __u16 __swab16p(const __u16*p)' include/uapi/linux/swab.h:172: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:176: Error: bad instruction `return (__u16)(__builtin_constant_p(*p)?((__u16)((((__u16)(*p)&(__u16)0x00ffU)<<8)|(((__u16)(*p)&(__u16)0xff00U)>>8))):__fswab16(*p))' include/uapi/linux/swab.h:178: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:184: Error: bad instruction `static inline __u32 __swab32p(const __u32*p)' include/uapi/linux/swab.h:185: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:189: Error: bad instruction `return (__u32)(__builtin_constant_p(*p)?((__u32)((((__u32)(*p)&(__u32)0x000000ffUL)<<24)|(((__u32)(*p)&(__u32)0x0000ff00UL)<<8)|(((__u32)(*p)&(__u32)0x00ff0000UL)>>8)|(((__u32)(*p)&(__u32)0xff000000UL)>>24))):__fswab32(*p))' include/uapi/linux/swab.h:191: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:197: Error: bad instruction `static inline __u64 __swab64p(const __u64*p)' include/uapi/linux/swab.h:198: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:202: Error: bad instruction `return (__u64)(__builtin_constant_p(*p)?((__u64)((((__u64)(*p)&(__u64)0x00000000000000ffULL)<<56)|(((__u64)(*p)&(__u64)0x000000000000ff00ULL)<<40)|(((__u64)(*p)&(__u64)0x0000000000ff0000ULL)<<24)|(((__u64)(*p)&(__u64)0x00000000ff000000ULL)<<8)|(((__u64)(*p)&(__u64)0x000000ff00000000ULL)>>8)|(((__u64)(*p)&(__u64)0x0000ff0000000000ULL)>>24)|(((__u64)(*p)&(__u64)0x00ff000000000000ULL)>>40)|(((__u64)(*p)&(__u64)0xff00000000000000ULL)>>56))):__fswab64(*p))' include/uapi/linux/swab.h:204: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:212: Error: bad instruction `static inline __u32 __swahw32p(const __u32*p)' include/uapi/linux/swab.h:213: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:217: Error: bad instruction `return (__builtin_constant_p((__u32)(*p))?((__u32)((((__u32)(*p)&(__u32)0x0000ffffUL)<<16)|(((__u32)(*p)&(__u32)0xffff0000UL)>>16))):__fswahw32(*p))' include/uapi/linux/swab.h:219: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:227: Error: bad instruction `static inline __u32 __swahb32p(const __u32*p)' include/uapi/linux/swab.h:228: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:232: Error: bad instruction `return (__builtin_constant_p((__u32)(*p))?((__u32)((((__u32)(*p)&(__u32)0x00ff00ffUL)<<8)|(((__u32)(*p)&(__u32)0xff00ff00UL)>>8))):__fswahb32(*p))' include/uapi/linux/swab.h:234: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:240: Error: bad instruction `static inline void __swab16s(__u16*p)' include/uapi/linux/swab.h:241: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:245: Error: junk at end of line, first unrecognized character is `*' include/uapi/linux/swab.h:247: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:252: Error: bad instruction `static inline void __swab32s(__u32*p)' include/uapi/linux/swab.h:253: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:257: Error: junk at end of line, first unrecognized character is `*' include/uapi/linux/swab.h:259: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:265: Error: bad instruction `static inline void __swab64s(__u64*p)' include/uapi/linux/swab.h:266: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:270: Error: junk at end of line, first unrecognized character is `*' include/uapi/linux/swab.h:272: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:280: Error: bad instruction `static inline void __swahw32s(__u32*p)' include/uapi/linux/swab.h:281: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:285: Error: junk at end of line, first unrecognized character is `*' include/uapi/linux/swab.h:287: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:295: Error: bad instruction `static inline void __swahb32s(__u32*p)' include/uapi/linux/swab.h:296: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:300: Error: junk at end of line, first unrecognized character is `*' include/uapi/linux/swab.h:302: Error: junk at end of line, first unrecognized character is `}' include/linux/swab.h:24: Error: bad instruction `static inline void swab16_array(u16*buf,unsigned int words)' include/linux/swab.h:25: Error: junk at end of line, first unrecognized character is `{' include/linux/swab.h:26: Error: bad instruction `while (words--){' include/linux/swab.h:27: Error: bad instruction `__swab16s(buf)' include/linux/swab.h:28: Error: bad instruction `buf++' include/linux/swab.h:29: Error: junk at end of line, first unrecognized character is `}' include/linux/swab.h:30: Error: junk at end of line, first unrecognized character is `}' include/linux/swab.h:32: Error: bad instruction `static inline void swab32_array(u32*buf,unsigned int words)' include/linux/swab.h:33: Error: junk at end of line, first unrecognized character is `{' include/linux/swab.h:34: Error: bad instruction `while (words--){' include/linux/swab.h:35: Error: bad instruction `__swab32s(buf)' include/linux/swab.h:36: Error: bad instruction `buf++' include/linux/swab.h:37: Error: junk at end of line, first unrecognized character is `}' include/linux/swab.h:38: Error: junk at end of line, first unrecognized character is `}' include/linux/swab.h:40: Error: bad instruction `static inline void swab64_array(u64*buf,unsigned int words)' include/linux/swab.h:41: Error: junk at end of line, first unrecognized character is `{' include/linux/swab.h:42: Error: bad instruction `while (words--){' include/linux/swab.h:43: Error: bad instruction `__swab64s(buf)' include/linux/swab.h:44: Error: bad instruction `buf++' include/linux/swab.h:45: Error: junk at end of line, first unrecognized character is `}' include/linux/swab.h:46: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/byteorder/little_endian.h:45: Error: bad instruction `static inline __le64 __cpu_to_le64p(const __u64*p)' include/uapi/linux/byteorder/little_endian.h:46: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/byteorder/little_endian.h:47: Error: bad instruction `return (__force __le64)*p' include/uapi/linux/byteorder/little_endian.h:48: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/byteorder/little_endian.h:49: Error: bad instruction `static inline __u64 __le64_to_cpup(const __le64*p)' include/uapi/linux/byteorder/little_endian.h:50: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/byteorder/little_endian.h:51: Error: bad instruction `return (__force __u64)*p' include/uapi/linux/byteorder/little_endian.h:52: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/byteorder/little_endian.h:53: Error: bad instruction `static inline __le32 __cpu_to_le32p(const __u32*p)' include/uapi/linux/byteorder/little_endian.h:54: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/byteorder/little_endian.h:55: Error: bad instruction `return (__force __le32)*p' include/uapi/linux/byteorder/little_endian.h:56: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/byteorder/little_endian.h:57: Error: bad instruction `static inline __u32 __le32_to_cpup(const __le32*p)' include/uapi/linux/byteorder/little_endian.h:58: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/byteorder/little_endian.h:59: Error: bad instruction `return (__force __u32)*p' include/uapi/linux/byteorder/little_endian.h:60: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/byteorder/little_endian.h:61: Error: bad instruction `static inline __le16 __cpu_to_le16p(const __u16*p)' include/uapi/linux/byteorder/little_endian.h:62: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/byteorder/little_endian.h:63: Error: bad instruction `return (__force __le16)*p' include/uapi/linux/byteorder/little_endian.h:64: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/byteorder/little_endian.h:65: Error: bad instruction `static inline __u16 __le16_to_cpup(const __le16*p)' include/uapi/linux/byteorder/little_endian.h:66: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/byteorder/little_endian.h:67: Error: bad instruction `return (__force __u16)*p' include/uapi/linux/byteorder/little_endian.h:68: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/byteorder/little_endian.h:69: Error: bad instruction `static inline __be64 __cpu_to_be64p(const __u64*p)' include/uapi/linux/byteorder/little_endian.h:70: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/byteorder/little_endian.h:71: Error: bad instruction `return (__force __be64)__swab64p(p)' include/uapi/linux/byteorder/little_endian.h:72: Error: junk at end of line, first unrecognized character is `}' -- include/linux/stddef.h: Assembler messages: >> include/linux/stddef.h:10: Error: bad instruction `enum {' >> include/linux/stddef.h:11: Error: junk at end of line, first unrecognized character is `,' include/linux/stddef.h:13: Error: junk at end of line, first unrecognized character is `}' >> arch/arm/include/uapi/asm/swab.h:28: Error: bad instruction `static inline __attribute_const__ __u32 __arch_swab32(__u32 x)' >> arch/arm/include/uapi/asm/swab.h:29: Error: junk at end of line, first unrecognized character is `{' >> arch/arm/include/uapi/asm/swab.h:30: Error: bad instruction `__u32 t' >> arch/arm/include/uapi/asm/swab.h:33: Error: bad instruction `if (!__builtin_constant_p(x)){' >> arch/arm/include/uapi/asm/swab.h:39: Error: bad instruction `asm ("eor\t%0, %1, %1, ror #16":"=r"(t):"r"(x))' arch/arm/include/uapi/asm/swab.h:40: Error: junk at end of line, first unrecognized character is `}' >> arch/arm/include/uapi/asm/swab.h:45: Error: bad instruction `t &=~0x00FF0000' >> arch/arm/include/uapi/asm/swab.h:46: Error: bad instruction `x ^=(t>>8)' >> arch/arm/include/uapi/asm/swab.h:48: Error: bad instruction `return x' arch/arm/include/uapi/asm/swab.h:49: Error: junk at end of line, first unrecognized character is `}' >> include/uapi/linux/swab.h:48: Error: bad instruction `static inline __attribute_const__ __u16 __fswab16(__u16 val)' >> include/uapi/linux/swab.h:49: Error: junk at end of line, first unrecognized character is `{' >> include/uapi/linux/swab.h:53: Error: bad instruction `return ((__u16)((((__u16)(val)&(__u16)0x00ffU)<<8)|(((__u16)(val)&(__u16)0xff00U)>>8)))' include/uapi/linux/swab.h:55: Error: junk at end of line, first unrecognized character is `}' >> include/uapi/linux/swab.h:57: Error: bad instruction `static inline __attribute_const__ __u32 __fswab32(__u32 val)' include/uapi/linux/swab.h:58: Error: junk at end of line, first unrecognized character is `{' >> include/uapi/linux/swab.h:60: Error: bad instruction `return __arch_swab32(val)' include/uapi/linux/swab.h:64: Error: junk at end of line, first unrecognized character is `}' >> include/uapi/linux/swab.h:66: Error: bad instruction `static inline __attribute_const__ __u64 __fswab64(__u64 val)' include/uapi/linux/swab.h:67: Error: junk at end of line, first unrecognized character is `{' >> include/uapi/linux/swab.h:71: Error: bad instruction `__u32 h=val>>32' >> include/uapi/linux/swab.h:72: Error: bad instruction `__u32 l=val&((1ULL<<32)-1)' >> include/uapi/linux/swab.h:73: Error: bad instruction `return (((__u64)__fswab32(l))<<32)|((__u64)(__fswab32(h)))' include/uapi/linux/swab.h:77: Error: junk at end of line, first unrecognized character is `}' >> include/uapi/linux/swab.h:79: Error: bad instruction `static inline __attribute_const__ __u32 __fswahw32(__u32 val)' include/uapi/linux/swab.h:80: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:84: Error: bad instruction `return ((__u32)((((__u32)(val)&(__u32)0x0000ffffUL)<<16)|(((__u32)(val)&(__u32)0xffff0000UL)>>16)))' include/uapi/linux/swab.h:86: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:88: Error: bad instruction `static inline __attribute_const__ __u32 __fswahb32(__u32 val)' include/uapi/linux/swab.h:89: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:93: Error: bad instruction `return ((__u32)((((__u32)(val)&(__u32)0x00ff00ffUL)<<8)|(((__u32)(val)&(__u32)0xff00ff00UL)>>8)))' include/uapi/linux/swab.h:95: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:136: Error: bad instruction `static inline unsigned long __swab(const unsigned long y)' include/uapi/linux/swab.h:137: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:141: Error: bad instruction `return (__u32)(__builtin_constant_p(y)?((__u32)((((__u32)(y)&(__u32)0x000000ffUL)<<24)|(((__u32)(y)&(__u32)0x0000ff00UL)<<8)|(((__u32)(y)&(__u32)0x00ff0000UL)>>8)|(((__u32)(y)&(__u32)0xff000000UL)>>24))):__fswab32(y))' include/uapi/linux/swab.h:143: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:171: Error: bad instruction `static inline __u16 __swab16p(const __u16*p)' include/uapi/linux/swab.h:172: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:176: Error: bad instruction `return (__u16)(__builtin_constant_p(*p)?((__u16)((((__u16)(*p)&(__u16)0x00ffU)<<8)|(((__u16)(*p)&(__u16)0xff00U)>>8))):__fswab16(*p))' include/uapi/linux/swab.h:178: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:184: Error: bad instruction `static inline __u32 __swab32p(const __u32*p)' include/uapi/linux/swab.h:185: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:189: Error: bad instruction `return (__u32)(__builtin_constant_p(*p)?((__u32)((((__u32)(*p)&(__u32)0x000000ffUL)<<24)|(((__u32)(*p)&(__u32)0x0000ff00UL)<<8)|(((__u32)(*p)&(__u32)0x00ff0000UL)>>8)|(((__u32)(*p)&(__u32)0xff000000UL)>>24))):__fswab32(*p))' include/uapi/linux/swab.h:191: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:197: Error: bad instruction `static inline __u64 __swab64p(const __u64*p)' include/uapi/linux/swab.h:198: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:202: Error: bad instruction `return (__u64)(__builtin_constant_p(*p)?((__u64)((((__u64)(*p)&(__u64)0x00000000000000ffULL)<<56)|(((__u64)(*p)&(__u64)0x000000000000ff00ULL)<<40)|(((__u64)(*p)&(__u64)0x0000000000ff0000ULL)<<24)|(((__u64)(*p)&(__u64)0x00000000ff000000ULL)<<8)|(((__u64)(*p)&(__u64)0x000000ff00000000ULL)>>8)|(((__u64)(*p)&(__u64)0x0000ff0000000000ULL)>>24)|(((__u64)(*p)&(__u64)0x00ff000000000000ULL)>>40)|(((__u64)(*p)&(__u64)0xff00000000000000ULL)>>56))):__fswab64(*p))' include/uapi/linux/swab.h:204: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:212: Error: bad instruction `static inline __u32 __swahw32p(const __u32*p)' include/uapi/linux/swab.h:213: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:217: Error: bad instruction `return (__builtin_constant_p((__u32)(*p))?((__u32)((((__u32)(*p)&(__u32)0x0000ffffUL)<<16)|(((__u32)(*p)&(__u32)0xffff0000UL)>>16))):__fswahw32(*p))' include/uapi/linux/swab.h:219: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:227: Error: bad instruction `static inline __u32 __swahb32p(const __u32*p)' include/uapi/linux/swab.h:228: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:232: Error: bad instruction `return (__builtin_constant_p((__u32)(*p))?((__u32)((((__u32)(*p)&(__u32)0x00ff00ffUL)<<8)|(((__u32)(*p)&(__u32)0xff00ff00UL)>>8))):__fswahb32(*p))' include/uapi/linux/swab.h:234: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:240: Error: bad instruction `static inline void __swab16s(__u16*p)' include/uapi/linux/swab.h:241: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:245: Error: junk at end of line, first unrecognized character is `*' include/uapi/linux/swab.h:247: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:252: Error: bad instruction `static inline void __swab32s(__u32*p)' include/uapi/linux/swab.h:253: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:257: Error: junk at end of line, first unrecognized character is `*' include/uapi/linux/swab.h:259: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:265: Error: bad instruction `static inline void __swab64s(__u64*p)' include/uapi/linux/swab.h:266: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:270: Error: junk at end of line, first unrecognized character is `*' include/uapi/linux/swab.h:272: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:280: Error: bad instruction `static inline void __swahw32s(__u32*p)' include/uapi/linux/swab.h:281: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:285: Error: junk at end of line, first unrecognized character is `*' include/uapi/linux/swab.h:287: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:295: Error: bad instruction `static inline void __swahb32s(__u32*p)' include/uapi/linux/swab.h:296: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:300: Error: junk at end of line, first unrecognized character is `*' include/uapi/linux/swab.h:302: Error: junk at end of line, first unrecognized character is `}' include/linux/swab.h:24: Error: bad instruction `static inline void swab16_array(u16*buf,unsigned int words)' include/linux/swab.h:25: Error: junk at end of line, first unrecognized character is `{' include/linux/swab.h:26: Error: bad instruction `while (words--){' include/linux/swab.h:27: Error: bad instruction `__swab16s(buf)' include/linux/swab.h:28: Error: bad instruction `buf++' include/linux/swab.h:29: Error: junk at end of line, first unrecognized character is `}' include/linux/swab.h:30: Error: junk at end of line, first unrecognized character is `}' include/linux/swab.h:32: Error: bad instruction `static inline void swab32_array(u32*buf,unsigned int words)' include/linux/swab.h:33: Error: junk at end of line, first unrecognized character is `{' include/linux/swab.h:34: Error: bad instruction `while (words--){' include/linux/swab.h:35: Error: bad instruction `__swab32s(buf)' include/linux/swab.h:36: Error: bad instruction `buf++' include/linux/swab.h:37: Error: junk at end of line, first unrecognized character is `}' include/linux/swab.h:38: Error: junk at end of line, first unrecognized character is `}' include/linux/swab.h:40: Error: bad instruction `static inline void swab64_array(u64*buf,unsigned int words)' include/linux/swab.h:41: Error: junk at end of line, first unrecognized character is `{' include/linux/swab.h:42: Error: bad instruction `while (words--){' include/linux/swab.h:43: Error: bad instruction `__swab64s(buf)' include/linux/swab.h:44: Error: bad instruction `buf++' include/linux/swab.h:45: Error: junk at end of line, first unrecognized character is `}' include/linux/swab.h:46: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/byteorder/little_endian.h:45: Error: bad instruction `static inline __le64 __cpu_to_le64p(const __u64*p)' include/uapi/linux/byteorder/little_endian.h:46: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/byteorder/little_endian.h:47: Error: bad instruction `return (__force __le64)*p' include/uapi/linux/byteorder/little_endian.h:48: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/byteorder/little_endian.h:49: Error: bad instruction `static inline __u64 __le64_to_cpup(const __le64*p)' include/uapi/linux/byteorder/little_endian.h:50: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/byteorder/little_endian.h:51: Error: bad instruction `return (__force __u64)*p' include/uapi/linux/byteorder/little_endian.h:52: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/byteorder/little_endian.h:53: Error: bad instruction `static inline __le32 __cpu_to_le32p(const __u32*p)' include/uapi/linux/byteorder/little_endian.h:54: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/byteorder/little_endian.h:55: Error: bad instruction `return (__force __le32)*p' include/uapi/linux/byteorder/little_endian.h:56: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/byteorder/little_endian.h:57: Error: bad instruction `static inline __u32 __le32_to_cpup(const __le32*p)' include/uapi/linux/byteorder/little_endian.h:58: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/byteorder/little_endian.h:59: Error: bad instruction `return (__force __u32)*p' include/uapi/linux/byteorder/little_endian.h:60: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/byteorder/little_endian.h:61: Error: bad instruction `static inline __le16 __cpu_to_le16p(const __u16*p)' include/uapi/linux/byteorder/little_endian.h:62: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/byteorder/little_endian.h:63: Error: bad instruction `return (__force __le16)*p' include/uapi/linux/byteorder/little_endian.h:64: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/byteorder/little_endian.h:65: Error: bad instruction `static inline __u16 __le16_to_cpup(const __le16*p)' include/uapi/linux/byteorder/little_endian.h:66: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/byteorder/little_endian.h:67: Error: bad instruction `return (__force __u16)*p' include/uapi/linux/byteorder/little_endian.h:68: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/byteorder/little_endian.h:69: Error: bad instruction `static inline __be64 __cpu_to_be64p(const __u64*p)' include/uapi/linux/byteorder/little_endian.h:70: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/byteorder/little_endian.h:71: Error: bad instruction `return (__force __be64)__swab64p(p)' include/uapi/linux/byteorder/little_endian.h:72: Error: junk at end of line, first unrecognized character is `}' vim +158 include/linux/bitfield.h e2192de59e457a Johannes Berg 2023-01-18 119 e2192de59e457a Johannes Berg 2023-01-18 120 /** e2192de59e457a Johannes Berg 2023-01-18 121 * FIELD_PREP_CONST() - prepare a constant bitfield element e2192de59e457a Johannes Berg 2023-01-18 122 * @_mask: shifted mask defining the field's length and position e2192de59e457a Johannes Berg 2023-01-18 123 * @_val: value to put in the field e2192de59e457a Johannes Berg 2023-01-18 124 * e2192de59e457a Johannes Berg 2023-01-18 125 * FIELD_PREP_CONST() masks and shifts up the value. The result should e2192de59e457a Johannes Berg 2023-01-18 126 * be combined with other fields of the bitfield using logical OR. e2192de59e457a Johannes Berg 2023-01-18 127 * e2192de59e457a Johannes Berg 2023-01-18 128 * Unlike FIELD_PREP() this is a constant expression and can therefore e2192de59e457a Johannes Berg 2023-01-18 129 * be used in initializers. Error checking is less comfortable for this e2192de59e457a Johannes Berg 2023-01-18 130 * version, and non-constant masks cannot be used. e2192de59e457a Johannes Berg 2023-01-18 131 */ e2192de59e457a Johannes Berg 2023-01-18 132 #define FIELD_PREP_CONST(_mask, _val) \ e2192de59e457a Johannes Berg 2023-01-18 133 ( \ e2192de59e457a Johannes Berg 2023-01-18 134 /* mask must be non-zero */ \ e2192de59e457a Johannes Berg 2023-01-18 135 BUILD_BUG_ON_ZERO((_mask) == 0) + \ e2192de59e457a Johannes Berg 2023-01-18 136 /* check if value fits */ \ e2192de59e457a Johannes Berg 2023-01-18 137 BUILD_BUG_ON_ZERO(~((_mask) >> __bf_shf(_mask)) & (_val)) + \ e2192de59e457a Johannes Berg 2023-01-18 138 /* check if mask is contiguous */ \ e2192de59e457a Johannes Berg 2023-01-18 139 __BF_CHECK_POW2((_mask) + (1ULL << __bf_shf(_mask))) + \ e2192de59e457a Johannes Berg 2023-01-18 140 /* and create the value */ \ e2192de59e457a Johannes Berg 2023-01-18 141 (((typeof(_mask))(_val) << __bf_shf(_mask)) & (_mask)) \ e2192de59e457a Johannes Berg 2023-01-18 142 ) e2192de59e457a Johannes Berg 2023-01-18 143 3e9b3112ec74f1 Jakub Kicinski 2016-08-31 144 /** 3e9b3112ec74f1 Jakub Kicinski 2016-08-31 145 * FIELD_GET() - extract a bitfield element 3e9b3112ec74f1 Jakub Kicinski 2016-08-31 146 * @_mask: shifted mask defining the field's length and position 7240767450d6d8 Masahiro Yamada 2017-10-03 147 * @_reg: value of entire bitfield 3e9b3112ec74f1 Jakub Kicinski 2016-08-31 148 * 3e9b3112ec74f1 Jakub Kicinski 2016-08-31 149 * FIELD_GET() extracts the field specified by @_mask from the 3e9b3112ec74f1 Jakub Kicinski 2016-08-31 150 * bitfield passed in as @_reg by masking and shifting it down. 3e9b3112ec74f1 Jakub Kicinski 2016-08-31 151 */ 3e9b3112ec74f1 Jakub Kicinski 2016-08-31 152 #define FIELD_GET(_mask, _reg) \ 3e9b3112ec74f1 Jakub Kicinski 2016-08-31 153 ({ \ 3e9b3112ec74f1 Jakub Kicinski 2016-08-31 154 __BF_FIELD_CHECK(_mask, _reg, 0U, "FIELD_GET: "); \ 3e9b3112ec74f1 Jakub Kicinski 2016-08-31 155 (typeof(_mask))(((_reg) & (_mask)) >> __bf_shf(_mask)); \ 3e9b3112ec74f1 Jakub Kicinski 2016-08-31 156 }) 3e9b3112ec74f1 Jakub Kicinski 2016-08-31 157 e7d4a95da86e0b Johannes Berg 2018-06-20 @158 extern void __compiletime_error("value doesn't fit into mask") 00b0c9b82663ac Al Viro 2017-12-14 @159 __field_overflow(void); 00b0c9b82663ac Al Viro 2017-12-14 @160 extern void __compiletime_error("bad bitfield mask") 00b0c9b82663ac Al Viro 2017-12-14 @161 __bad_mask(void); 00b0c9b82663ac Al Viro 2017-12-14 @162 static __always_inline u64 field_multiplier(u64 field) 00b0c9b82663ac Al Viro 2017-12-14 @163 { 00b0c9b82663ac Al Viro 2017-12-14 @164 if ((field | (field - 1)) & ((field | (field - 1)) + 1)) 00b0c9b82663ac Al Viro 2017-12-14 @165 __bad_mask(); 00b0c9b82663ac Al Viro 2017-12-14 @166 return field & -field; 00b0c9b82663ac Al Viro 2017-12-14 167 } 00b0c9b82663ac Al Viro 2017-12-14 @168 static __always_inline u64 field_mask(u64 field) 00b0c9b82663ac Al Viro 2017-12-14 169 { 00b0c9b82663ac Al Viro 2017-12-14 @170 return field / field_multiplier(field); 00b0c9b82663ac Al Viro 2017-12-14 171 } e31a50162feb35 Alex Elder 2020-03-12 172 #define field_max(field) ((typeof(field))field_mask(field)) 00b0c9b82663ac Al Viro 2017-12-14 173 #define ____MAKE_OP(type,base,to,from) \ 00b0c9b82663ac Al Viro 2017-12-14 174 static __always_inline __##type type##_encode_bits(base v, base field) \ 00b0c9b82663ac Al Viro 2017-12-14 175 { \ e7d4a95da86e0b Johannes Berg 2018-06-20 176 if (__builtin_constant_p(v) && (v & ~field_mask(field))) \ 00b0c9b82663ac Al Viro 2017-12-14 177 __field_overflow(); \ 00b0c9b82663ac Al Viro 2017-12-14 178 return to((v & field_mask(field)) * field_multiplier(field)); \ 00b0c9b82663ac Al Viro 2017-12-14 179 } \ 00b0c9b82663ac Al Viro 2017-12-14 180 static __always_inline __##type type##_replace_bits(__##type old, \ 00b0c9b82663ac Al Viro 2017-12-14 181 base val, base field) \ 00b0c9b82663ac Al Viro 2017-12-14 182 { \ 00b0c9b82663ac Al Viro 2017-12-14 183 return (old & ~to(field)) | type##_encode_bits(val, field); \ 00b0c9b82663ac Al Viro 2017-12-14 184 } \ 00b0c9b82663ac Al Viro 2017-12-14 185 static __always_inline void type##p_replace_bits(__##type *p, \ 00b0c9b82663ac Al Viro 2017-12-14 186 base val, base field) \ 00b0c9b82663ac Al Viro 2017-12-14 187 { \ 00b0c9b82663ac Al Viro 2017-12-14 188 *p = (*p & ~to(field)) | type##_encode_bits(val, field); \ 00b0c9b82663ac Al Viro 2017-12-14 189 } \ 00b0c9b82663ac Al Viro 2017-12-14 190 static __always_inline base type##_get_bits(__##type v, base field) \ 00b0c9b82663ac Al Viro 2017-12-14 191 { \ 00b0c9b82663ac Al Viro 2017-12-14 192 return (from(v) & field)/field_multiplier(field); \ 00b0c9b82663ac Al Viro 2017-12-14 193 } 00b0c9b82663ac Al Viro 2017-12-14 194 #define __MAKE_OP(size) \ 00b0c9b82663ac Al Viro 2017-12-14 195 ____MAKE_OP(le##size,u##size,cpu_to_le##size,le##size##_to_cpu) \ 00b0c9b82663ac Al Viro 2017-12-14 196 ____MAKE_OP(be##size,u##size,cpu_to_be##size,be##size##_to_cpu) \ 00b0c9b82663ac Al Viro 2017-12-14 197 ____MAKE_OP(u##size,u##size,,) 37a3862e123826 Johannes Berg 2018-06-20 @198 ____MAKE_OP(u8,u8,,) 00b0c9b82663ac Al Viro 2017-12-14 @199 __MAKE_OP(16) 00b0c9b82663ac Al Viro 2017-12-14 @200 __MAKE_OP(32) 00b0c9b82663ac Al Viro 2017-12-14 @201 __MAKE_OP(64) 00b0c9b82663ac Al Viro 2017-12-14 202 #undef __MAKE_OP 00b0c9b82663ac Al Viro 2017-12-14 203 #undef ____MAKE_OP 00b0c9b82663ac Al Viro 2017-12-14 204
On Thu, Nov 30, 2023 at 03:07:14PM +0100, Théo Lebrun wrote: > The driver uses bit shifts and hexadecimal expressions to declare > constants. Replace that with the BIT(), GENMASK() & FIELD_PREP_CONST() > macros to clarify intent. > > Reviewed-by: Linus Walleij <linus.walleij@linaro.org> > Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> > Signed-off-by: Théo Lebrun <theo.lebrun@bootlin.com> > --- > include/linux/amba/serial.h | 248 +++++++++++++++++++++++--------------------- > 1 file changed, 127 insertions(+), 121 deletions(-) As 0-day had a problem with this patch, I've applied only patch 1 of this series. Can you fix it up and rebase and resend the rest again (while adding the collected reviewed-by that some patches in this series had)? thanks, greg k-h
Hello, On Thu Dec 7, 2023 at 2:37 AM CET, Greg Kroah-Hartman wrote: > On Thu, Nov 30, 2023 at 03:07:14PM +0100, Théo Lebrun wrote: > > The driver uses bit shifts and hexadecimal expressions to declare > > constants. Replace that with the BIT(), GENMASK() & FIELD_PREP_CONST() > > macros to clarify intent. > > > > Reviewed-by: Linus Walleij <linus.walleij@linaro.org> > > Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> > > Signed-off-by: Théo Lebrun <theo.lebrun@bootlin.com> > > --- > > include/linux/amba/serial.h | 248 +++++++++++++++++++++++--------------------- > > 1 file changed, 127 insertions(+), 121 deletions(-) > > As 0-day had a problem with this patch, I've applied only patch 1 of > this series. Can you fix it up and rebase and resend the rest again > (while adding the collected reviewed-by that some patches in this series > had)? So the issue is this: the header file gets included in arch/arm/include/debug/pl01x.S that gets included in arch/arm/kernel/debug.S (see #include CONFIG_DEBUG_LL_INCLUDE). I don't see any easy way out of this, so I guess it means the patch must be dropped. If someone confirms that there are indeed no solution to have BIT(), GENMASK() & FIELD_PREP_CONST() accessible from assembly, I'll send the next version. Thanks, -- Théo Lebrun, Bootlin Embedded Linux and Kernel engineering https://bootlin.com
On Thu, 7 Dec 2023, Théo Lebrun wrote: > Hello, > > On Thu Dec 7, 2023 at 2:37 AM CET, Greg Kroah-Hartman wrote: > > On Thu, Nov 30, 2023 at 03:07:14PM +0100, Théo Lebrun wrote: > > > The driver uses bit shifts and hexadecimal expressions to declare > > > constants. Replace that with the BIT(), GENMASK() & FIELD_PREP_CONST() > > > macros to clarify intent. > > > > > > Reviewed-by: Linus Walleij <linus.walleij@linaro.org> > > > Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> > > > Signed-off-by: Théo Lebrun <theo.lebrun@bootlin.com> > > > --- > > > include/linux/amba/serial.h | 248 +++++++++++++++++++++++--------------------- > > > 1 file changed, 127 insertions(+), 121 deletions(-) > > > > As 0-day had a problem with this patch, I've applied only patch 1 of > > this series. Can you fix it up and rebase and resend the rest again > > (while adding the collected reviewed-by that some patches in this series > > had)? > > So the issue is this: the header file gets included in > arch/arm/include/debug/pl01x.S that gets included in arch/arm/kernel/debug.S > (see #include CONFIG_DEBUG_LL_INCLUDE). > > I don't see any easy way out of this, so I guess it means the patch must be > dropped. If someone confirms that there are indeed no solution to have BIT(), > GENMASK() & FIELD_PREP_CONST() accessible from assembly, I'll send the next > version. Yeah, it seems to require UART01x_FR_TXFF and UART01x_FR_BUSY, plus UART01x_DR and UART01x_FR that are not touched by your patch. I suppose the rest might be convertable though..
Hello, On Thu Dec 7, 2023 at 10:56 AM CET, Ilpo Järvinen wrote: > On Thu, 7 Dec 2023, Théo Lebrun wrote: > > On Thu Dec 7, 2023 at 2:37 AM CET, Greg Kroah-Hartman wrote: > > > On Thu, Nov 30, 2023 at 03:07:14PM +0100, Théo Lebrun wrote: > > > > The driver uses bit shifts and hexadecimal expressions to declare > > > > constants. Replace that with the BIT(), GENMASK() & FIELD_PREP_CONST() > > > > macros to clarify intent. > > > > > > > > Reviewed-by: Linus Walleij <linus.walleij@linaro.org> > > > > Reviewed-by: Ilpo Järvinen <ilpo.jarvinen@linux.intel.com> > > > > Signed-off-by: Théo Lebrun <theo.lebrun@bootlin.com> > > > > --- > > > > include/linux/amba/serial.h | 248 +++++++++++++++++++++++--------------------- > > > > 1 file changed, 127 insertions(+), 121 deletions(-) > > > > > > As 0-day had a problem with this patch, I've applied only patch 1 of > > > this series. Can you fix it up and rebase and resend the rest again > > > (while adding the collected reviewed-by that some patches in this series > > > had)? > > > > So the issue is this: the header file gets included in > > arch/arm/include/debug/pl01x.S that gets included in arch/arm/kernel/debug.S > > (see #include CONFIG_DEBUG_LL_INCLUDE). > > > > I don't see any easy way out of this, so I guess it means the patch must be > > dropped. If someone confirms that there are indeed no solution to have BIT(), > > GENMASK() & FIELD_PREP_CONST() accessible from assembly, I'll send the next > > version. > > Yeah, it seems to require UART01x_FR_TXFF and UART01x_FR_BUSY, plus > UART01x_DR and UART01x_FR that are not touched by your patch. > > I suppose the rest might be convertable though.. Thanks Greg and Ilpo! v6 has been sent. Regards, -- Théo Lebrun, Bootlin Embedded Linux and Kernel engineering https://bootlin.com
Hi Théo, kernel test robot noticed the following build errors: [auto build test ERROR on tty/tty-linus] [also build test ERROR on usb/usb-testing usb/usb-next usb/usb-linus linus/master v6.7-rc4 next-20231208] [cannot apply to tty/tty-testing tty/tty-next] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Th-o-Lebrun/tty-serial-amba-Use-linux-bits-bitfield-h-macros/20231130-230738 base: https://git.kernel.org/pub/scm/linux/kernel/git/gregkh/tty.git tty-linus patch link: https://lore.kernel.org/r/20231130-mbly-uart-v5-2-6566703a04b5%40bootlin.com patch subject: [PATCH v5 2/9] tty: serial: amba: Use linux/{bits,bitfield}.h macros config: arm-randconfig-r052-20231206 (https://download.01.org/0day-ci/archive/20231209/202312092110.zA95fW8M-lkp@intel.com/config) compiler: arm-linux-gnueabi-gcc (GCC) 13.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20231209/202312092110.zA95fW8M-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202312092110.zA95fW8M-lkp@intel.com/ All errors (new ones prefixed by >>): include/linux/stddef.h: Assembler messages: include/linux/stddef.h:10: Error: bad instruction `enum {' include/linux/stddef.h:11: Error: junk at end of line, first unrecognized character is `,' include/linux/stddef.h:13: Error: junk at end of line, first unrecognized character is `}' >> arch/arm/include/asm/swab.h:23: Error: bad instruction `static inline __attribute_const__ __u32 __arch_swahb32(__u32 x)' >> arch/arm/include/asm/swab.h:24: Error: junk at end of line, first unrecognized character is `{' >> arch/arm/include/asm/swab.h:25: Error: bad instruction `__asm__ ("rev16 %0, %1":"=r"(x):"r"(x))' >> arch/arm/include/asm/swab.h:26: Error: bad instruction `return x' arch/arm/include/asm/swab.h:27: Error: junk at end of line, first unrecognized character is `}' >> arch/arm/include/asm/swab.h:31: Error: bad instruction `static inline __attribute_const__ __u32 __arch_swab32(__u32 x)' arch/arm/include/asm/swab.h:32: Error: junk at end of line, first unrecognized character is `{' >> arch/arm/include/asm/swab.h:33: Error: bad instruction `__asm__ ("rev %0, %1":"=r"(x):"r"(x))' arch/arm/include/asm/swab.h:34: Error: bad instruction `return x' arch/arm/include/asm/swab.h:35: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:48: Error: bad instruction `static inline __attribute_const__ __u16 __fswab16(__u16 val)' include/uapi/linux/swab.h:49: Error: junk at end of line, first unrecognized character is `{' >> include/uapi/linux/swab.h:51: Error: bad instruction `return ((__u16)__arch_swahb32(val))' include/uapi/linux/swab.h:55: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:57: Error: bad instruction `static inline __attribute_const__ __u32 __fswab32(__u32 val)' include/uapi/linux/swab.h:58: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:60: Error: bad instruction `return __arch_swab32(val)' include/uapi/linux/swab.h:64: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:66: Error: bad instruction `static inline __attribute_const__ __u64 __fswab64(__u64 val)' include/uapi/linux/swab.h:67: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:71: Error: bad instruction `__u32 h=val>>32' include/uapi/linux/swab.h:72: Error: bad instruction `__u32 l=val&((1ULL<<32)-1)' include/uapi/linux/swab.h:73: Error: bad instruction `return (((__u64)__fswab32(l))<<32)|((__u64)(__fswab32(h)))' include/uapi/linux/swab.h:77: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:79: Error: bad instruction `static inline __attribute_const__ __u32 __fswahw32(__u32 val)' include/uapi/linux/swab.h:80: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:84: Error: bad instruction `return ((__u32)((((__u32)(val)&(__u32)0x0000ffffUL)<<16)|(((__u32)(val)&(__u32)0xffff0000UL)>>16)))' include/uapi/linux/swab.h:86: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:88: Error: bad instruction `static inline __attribute_const__ __u32 __fswahb32(__u32 val)' include/uapi/linux/swab.h:89: Error: junk at end of line, first unrecognized character is `{' >> include/uapi/linux/swab.h:91: Error: bad instruction `return __arch_swahb32(val)' include/uapi/linux/swab.h:95: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:136: Error: bad instruction `static inline unsigned long __swab(const unsigned long y)' include/uapi/linux/swab.h:137: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:141: Error: bad instruction `return (__u32)(__builtin_constant_p(y)?((__u32)((((__u32)(y)&(__u32)0x000000ffUL)<<24)|(((__u32)(y)&(__u32)0x0000ff00UL)<<8)|(((__u32)(y)&(__u32)0x00ff0000UL)>>8)|(((__u32)(y)&(__u32)0xff000000UL)>>24))):__fswab32(y))' include/uapi/linux/swab.h:143: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:171: Error: bad instruction `static inline __u16 __swab16p(const __u16*p)' include/uapi/linux/swab.h:172: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:176: Error: bad instruction `return (__u16)(__builtin_constant_p(*p)?((__u16)((((__u16)(*p)&(__u16)0x00ffU)<<8)|(((__u16)(*p)&(__u16)0xff00U)>>8))):__fswab16(*p))' include/uapi/linux/swab.h:178: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:184: Error: bad instruction `static inline __u32 __swab32p(const __u32*p)' include/uapi/linux/swab.h:185: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:189: Error: bad instruction `return (__u32)(__builtin_constant_p(*p)?((__u32)((((__u32)(*p)&(__u32)0x000000ffUL)<<24)|(((__u32)(*p)&(__u32)0x0000ff00UL)<<8)|(((__u32)(*p)&(__u32)0x00ff0000UL)>>8)|(((__u32)(*p)&(__u32)0xff000000UL)>>24))):__fswab32(*p))' include/uapi/linux/swab.h:191: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:197: Error: bad instruction `static inline __u64 __swab64p(const __u64*p)' include/uapi/linux/swab.h:198: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:202: Error: bad instruction `return (__u64)(__builtin_constant_p(*p)?((__u64)((((__u64)(*p)&(__u64)0x00000000000000ffULL)<<56)|(((__u64)(*p)&(__u64)0x000000000000ff00ULL)<<40)|(((__u64)(*p)&(__u64)0x0000000000ff0000ULL)<<24)|(((__u64)(*p)&(__u64)0x00000000ff000000ULL)<<8)|(((__u64)(*p)&(__u64)0x000000ff00000000ULL)>>8)|(((__u64)(*p)&(__u64)0x0000ff0000000000ULL)>>24)|(((__u64)(*p)&(__u64)0x00ff000000000000ULL)>>40)|(((__u64)(*p)&(__u64)0xff00000000000000ULL)>>56))):__fswab64(*p))' include/uapi/linux/swab.h:204: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:212: Error: bad instruction `static inline __u32 __swahw32p(const __u32*p)' include/uapi/linux/swab.h:213: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:217: Error: bad instruction `return (__builtin_constant_p((__u32)(*p))?((__u32)((((__u32)(*p)&(__u32)0x0000ffffUL)<<16)|(((__u32)(*p)&(__u32)0xffff0000UL)>>16))):__fswahw32(*p))' include/uapi/linux/swab.h:219: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:227: Error: bad instruction `static inline __u32 __swahb32p(const __u32*p)' include/uapi/linux/swab.h:228: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:232: Error: bad instruction `return (__builtin_constant_p((__u32)(*p))?((__u32)((((__u32)(*p)&(__u32)0x00ff00ffUL)<<8)|(((__u32)(*p)&(__u32)0xff00ff00UL)>>8))):__fswahb32(*p))' include/uapi/linux/swab.h:234: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:240: Error: bad instruction `static inline void __swab16s(__u16*p)' include/uapi/linux/swab.h:241: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:245: Error: junk at end of line, first unrecognized character is `*' include/uapi/linux/swab.h:247: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:252: Error: bad instruction `static inline void __swab32s(__u32*p)' include/uapi/linux/swab.h:253: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:257: Error: junk at end of line, first unrecognized character is `*' include/uapi/linux/swab.h:259: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:265: Error: bad instruction `static inline void __swab64s(__u64*p)' include/uapi/linux/swab.h:266: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:270: Error: junk at end of line, first unrecognized character is `*' include/uapi/linux/swab.h:272: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:280: Error: bad instruction `static inline void __swahw32s(__u32*p)' include/uapi/linux/swab.h:281: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:285: Error: junk at end of line, first unrecognized character is `*' include/uapi/linux/swab.h:287: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/swab.h:295: Error: bad instruction `static inline void __swahb32s(__u32*p)' include/uapi/linux/swab.h:296: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/swab.h:300: Error: junk at end of line, first unrecognized character is `*' include/uapi/linux/swab.h:302: Error: junk at end of line, first unrecognized character is `}' include/linux/swab.h:24: Error: bad instruction `static inline void swab16_array(u16*buf,unsigned int words)' include/linux/swab.h:25: Error: junk at end of line, first unrecognized character is `{' include/linux/swab.h:26: Error: bad instruction `while (words--){' include/linux/swab.h:27: Error: bad instruction `__swab16s(buf)' include/linux/swab.h:28: Error: bad instruction `buf++' include/linux/swab.h:29: Error: junk at end of line, first unrecognized character is `}' include/linux/swab.h:30: Error: junk at end of line, first unrecognized character is `}' include/linux/swab.h:32: Error: bad instruction `static inline void swab32_array(u32*buf,unsigned int words)' include/linux/swab.h:33: Error: junk at end of line, first unrecognized character is `{' include/linux/swab.h:34: Error: bad instruction `while (words--){' include/linux/swab.h:35: Error: bad instruction `__swab32s(buf)' include/linux/swab.h:36: Error: bad instruction `buf++' include/linux/swab.h:37: Error: junk at end of line, first unrecognized character is `}' include/linux/swab.h:38: Error: junk at end of line, first unrecognized character is `}' include/linux/swab.h:40: Error: bad instruction `static inline void swab64_array(u64*buf,unsigned int words)' include/linux/swab.h:41: Error: junk at end of line, first unrecognized character is `{' include/linux/swab.h:42: Error: bad instruction `while (words--){' include/linux/swab.h:43: Error: bad instruction `__swab64s(buf)' include/linux/swab.h:44: Error: bad instruction `buf++' include/linux/swab.h:45: Error: junk at end of line, first unrecognized character is `}' include/linux/swab.h:46: Error: junk at end of line, first unrecognized character is `}' >> include/uapi/linux/byteorder/big_endian.h:45: Error: bad instruction `static inline __le64 __cpu_to_le64p(const __u64*p)' >> include/uapi/linux/byteorder/big_endian.h:46: Error: junk at end of line, first unrecognized character is `{' >> include/uapi/linux/byteorder/big_endian.h:47: Error: bad instruction `return (__force __le64)__swab64p(p)' include/uapi/linux/byteorder/big_endian.h:48: Error: junk at end of line, first unrecognized character is `}' >> include/uapi/linux/byteorder/big_endian.h:49: Error: bad instruction `static inline __u64 __le64_to_cpup(const __le64*p)' include/uapi/linux/byteorder/big_endian.h:50: Error: junk at end of line, first unrecognized character is `{' >> include/uapi/linux/byteorder/big_endian.h:51: Error: bad instruction `return __swab64p((__u64*)p)' include/uapi/linux/byteorder/big_endian.h:52: Error: junk at end of line, first unrecognized character is `}' >> include/uapi/linux/byteorder/big_endian.h:53: Error: bad instruction `static inline __le32 __cpu_to_le32p(const __u32*p)' include/uapi/linux/byteorder/big_endian.h:54: Error: junk at end of line, first unrecognized character is `{' >> include/uapi/linux/byteorder/big_endian.h:55: Error: bad instruction `return (__force __le32)__swab32p(p)' include/uapi/linux/byteorder/big_endian.h:56: Error: junk at end of line, first unrecognized character is `}' >> include/uapi/linux/byteorder/big_endian.h:57: Error: bad instruction `static inline __u32 __le32_to_cpup(const __le32*p)' include/uapi/linux/byteorder/big_endian.h:58: Error: junk at end of line, first unrecognized character is `{' >> include/uapi/linux/byteorder/big_endian.h:59: Error: bad instruction `return __swab32p((__u32*)p)' include/uapi/linux/byteorder/big_endian.h:60: Error: junk at end of line, first unrecognized character is `}' >> include/uapi/linux/byteorder/big_endian.h:61: Error: bad instruction `static inline __le16 __cpu_to_le16p(const __u16*p)' include/uapi/linux/byteorder/big_endian.h:62: Error: junk at end of line, first unrecognized character is `{' >> include/uapi/linux/byteorder/big_endian.h:63: Error: bad instruction `return (__force __le16)__swab16p(p)' include/uapi/linux/byteorder/big_endian.h:64: Error: junk at end of line, first unrecognized character is `}' >> include/uapi/linux/byteorder/big_endian.h:65: Error: bad instruction `static inline __u16 __le16_to_cpup(const __le16*p)' include/uapi/linux/byteorder/big_endian.h:66: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/byteorder/big_endian.h:67: Error: bad instruction `return __swab16p((__u16*)p)' include/uapi/linux/byteorder/big_endian.h:68: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/byteorder/big_endian.h:69: Error: bad instruction `static inline __be64 __cpu_to_be64p(const __u64*p)' include/uapi/linux/byteorder/big_endian.h:70: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/byteorder/big_endian.h:71: Error: bad instruction `return (__force __be64)*p' include/uapi/linux/byteorder/big_endian.h:72: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/byteorder/big_endian.h:73: Error: bad instruction `static inline __u64 __be64_to_cpup(const __be64*p)' include/uapi/linux/byteorder/big_endian.h:74: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/byteorder/big_endian.h:75: Error: bad instruction `return (__force __u64)*p' include/uapi/linux/byteorder/big_endian.h:76: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/byteorder/big_endian.h:77: Error: bad instruction `static inline __be32 __cpu_to_be32p(const __u32*p)' include/uapi/linux/byteorder/big_endian.h:78: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/byteorder/big_endian.h:79: Error: bad instruction `return (__force __be32)*p' include/uapi/linux/byteorder/big_endian.h:80: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/byteorder/big_endian.h:81: Error: bad instruction `static inline __u32 __be32_to_cpup(const __be32*p)' include/uapi/linux/byteorder/big_endian.h:82: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/byteorder/big_endian.h:83: Error: bad instruction `return (__force __u32)*p' include/uapi/linux/byteorder/big_endian.h:84: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/byteorder/big_endian.h:85: Error: bad instruction `static inline __be16 __cpu_to_be16p(const __u16*p)' include/uapi/linux/byteorder/big_endian.h:86: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/byteorder/big_endian.h:87: Error: bad instruction `return (__force __be16)*p' include/uapi/linux/byteorder/big_endian.h:88: Error: junk at end of line, first unrecognized character is `}' include/uapi/linux/byteorder/big_endian.h:89: Error: bad instruction `static inline __u16 __be16_to_cpup(const __be16*p)' include/uapi/linux/byteorder/big_endian.h:90: Error: junk at end of line, first unrecognized character is `{' include/uapi/linux/byteorder/big_endian.h:91: Error: bad instruction `return (__force __u16)*p' include/uapi/linux/byteorder/big_endian.h:92: Error: junk at end of line, first unrecognized character is `}' include/linux/byteorder/generic.h:144: Error: bad instruction `static inline void le16_add_cpu(__le16*var,u16 val)' include/linux/byteorder/generic.h:145: Error: junk at end of line, first unrecognized character is `{' include/linux/byteorder/generic.h:146: Error: junk at end of line, first unrecognized character is `*' include/linux/byteorder/generic.h:147: Error: junk at end of line, first unrecognized character is `}' include/linux/byteorder/generic.h:149: Error: bad instruction `static inline void le32_add_cpu(__le32*var,u32 val)' include/linux/byteorder/generic.h:150: Error: junk at end of line, first unrecognized character is `{' include/linux/byteorder/generic.h:151: Error: junk at end of line, first unrecognized character is `*' include/linux/byteorder/generic.h:152: Error: junk at end of line, first unrecognized character is `}' include/linux/byteorder/generic.h:154: Error: bad instruction `static inline void le64_add_cpu(__le64*var,u64 val)' include/linux/byteorder/generic.h:155: Error: junk at end of line, first unrecognized character is `{' include/linux/byteorder/generic.h:156: Error: junk at end of line, first unrecognized character is `*' include/linux/byteorder/generic.h:157: Error: junk at end of line, first unrecognized character is `}' include/linux/byteorder/generic.h:160: Error: bad instruction `static inline void le32_to_cpu_array(u32*buf,unsigned int words)' include/linux/byteorder/generic.h:161: Error: junk at end of line, first unrecognized character is `{' include/linux/byteorder/generic.h:162: Error: bad instruction `while (words--){' include/linux/byteorder/generic.h:163: Error: bad instruction `__swab32s((buf))' include/linux/byteorder/generic.h:164: Error: bad instruction `buf++' include/linux/byteorder/generic.h:165: Error: junk at end of line, first unrecognized character is `}' include/linux/byteorder/generic.h:166: Error: junk at end of line, first unrecognized character is `}' include/linux/byteorder/generic.h:168: Error: bad instruction `static inline void cpu_to_le32_array(u32*buf,unsigned int words)' include/linux/byteorder/generic.h:169: Error: junk at end of line, first unrecognized character is `{' include/linux/byteorder/generic.h:170: Error: bad instruction `while (words--){' include/linux/byteorder/generic.h:171: Error: bad instruction `__swab32s((buf))' include/linux/byteorder/generic.h:172: Error: bad instruction `buf++' include/linux/byteorder/generic.h:173: Error: junk at end of line, first unrecognized character is `}' include/linux/byteorder/generic.h:174: Error: junk at end of line, first unrecognized character is `}' include/linux/byteorder/generic.h:176: Error: bad instruction `static inline void be16_add_cpu(__be16*var,u16 val)' include/linux/byteorder/generic.h:177: Error: junk at end of line, first unrecognized character is `{' include/linux/byteorder/generic.h:178: Error: junk at end of line, first unrecognized character is `*' include/linux/byteorder/generic.h:179: Error: junk at end of line, first unrecognized character is `}' include/linux/byteorder/generic.h:181: Error: bad instruction `static inline void be32_add_cpu(__be32*var,u32 val)' include/linux/byteorder/generic.h:182: Error: junk at end of line, first unrecognized character is `{' include/linux/byteorder/generic.h:183: Error: junk at end of line, first unrecognized character is `*' include/linux/byteorder/generic.h:184: Error: junk at end of line, first unrecognized character is `}' include/linux/byteorder/generic.h:186: Error: bad instruction `static inline void be64_add_cpu(__be64*var,u64 val)' include/linux/byteorder/generic.h:187: Error: junk at end of line, first unrecognized character is `{' include/linux/byteorder/generic.h:188: Error: junk at end of line, first unrecognized character is `*' include/linux/byteorder/generic.h:189: Error: junk at end of line, first unrecognized character is `}' include/linux/byteorder/generic.h:191: Error: bad instruction `static inline void cpu_to_be32_array(__be32*dst,const u32*src,size_t len)' include/linux/byteorder/generic.h:192: Error: junk at end of line, first unrecognized character is `{' include/linux/byteorder/generic.h:193: Error: bad instruction `size_t i' include/linux/byteorder/generic.h:195: Error: bad instruction `for (i=0' include/linux/byteorder/generic.h:195: Error: bad instruction `i <len' include/linux/byteorder/generic.h:195: Error: bad instruction `i++)' include/linux/byteorder/generic.h:196: Error: bad instruction `dst[i] =((__force __be32)(__u32)(src[i]))' include/linux/byteorder/generic.h:197: Error: junk at end of line, first unrecognized character is `}' include/linux/byteorder/generic.h:199: Error: bad instruction `static inline void be32_to_cpu_array(u32*dst,const __be32*src,size_t len)' include/linux/byteorder/generic.h:200: Error: junk at end of line, first unrecognized character is `{' include/linux/byteorder/generic.h:201: Error: bad instruction `size_t i' include/linux/byteorder/generic.h:203: Error: bad instruction `for (i=0' include/linux/byteorder/generic.h:203: Error: bad instruction `i <len' include/linux/byteorder/generic.h:203: Error: bad instruction `i++)' include/linux/byteorder/generic.h:204: Error: bad instruction `dst[i] =((__force __u32)(__be32)(src[i]))' include/linux/byteorder/generic.h:205: Error: junk at end of line, first unrecognized character is `}' include/linux/bitfield.h:158: Error: bad instruction `extern void __compiletime_error("value doesn't fit into mask")' include/linux/bitfield.h:159: Error: bad instruction `__field_overflow(void)' include/linux/bitfield.h:160: Error: bad instruction `extern void __compiletime_error("bad bitfield mask")' include/linux/bitfield.h:161: Error: bad instruction `__bad_mask(void)' include/linux/bitfield.h:162: Error: bad instruction `static inline u64 field_multiplier(u64 field)' include/linux/bitfield.h:163: Error: junk at end of line, first unrecognized character is `{' include/linux/bitfield.h:164: Error: bad instruction `if ((field|(field-1))&((field|(field-1))+1))' include/linux/bitfield.h:165: Error: bad instruction `__bad_mask()' include/linux/bitfield.h:166: Error: bad instruction `return field&-field' include/linux/bitfield.h:167: Error: junk at end of line, first unrecognized character is `}' include/linux/bitfield.h:168: Error: bad instruction `static inline u64 field_mask(u64 field)' include/linux/bitfield.h:169: Error: junk at end of line, first unrecognized character is `{' include/linux/bitfield.h:170: Error: bad instruction `return field/field_multiplier(field)' include/linux/bitfield.h:171: Error: junk at end of line, first unrecognized character is `}' include/linux/bitfield.h:198: Error: bad instruction `static inline __u8 u8_encode_bits(u8 v,u8 field){ if(__builtin_constant_p(v)&&(v&~field_mask(field)))__field_overflow()' include/linux/bitfield.h:198: Error: bad instruction `return ((v&field_mask(field))*field_multiplier(field))' include/linux/bitfield.h:198: Error: junk at end of line, first unrecognized character is `}' include/linux/bitfield.h:198: Error: junk at end of line, first unrecognized character is `}' include/linux/bitfield.h:198: Error: junk at end of line, first unrecognized character is `}' vim +199 include/linux/bitfield.h e2192de59e457a Johannes Berg 2023-01-18 119 e2192de59e457a Johannes Berg 2023-01-18 120 /** e2192de59e457a Johannes Berg 2023-01-18 121 * FIELD_PREP_CONST() - prepare a constant bitfield element e2192de59e457a Johannes Berg 2023-01-18 122 * @_mask: shifted mask defining the field's length and position e2192de59e457a Johannes Berg 2023-01-18 123 * @_val: value to put in the field e2192de59e457a Johannes Berg 2023-01-18 124 * e2192de59e457a Johannes Berg 2023-01-18 125 * FIELD_PREP_CONST() masks and shifts up the value. The result should e2192de59e457a Johannes Berg 2023-01-18 126 * be combined with other fields of the bitfield using logical OR. e2192de59e457a Johannes Berg 2023-01-18 127 * e2192de59e457a Johannes Berg 2023-01-18 128 * Unlike FIELD_PREP() this is a constant expression and can therefore e2192de59e457a Johannes Berg 2023-01-18 129 * be used in initializers. Error checking is less comfortable for this e2192de59e457a Johannes Berg 2023-01-18 130 * version, and non-constant masks cannot be used. e2192de59e457a Johannes Berg 2023-01-18 131 */ e2192de59e457a Johannes Berg 2023-01-18 132 #define FIELD_PREP_CONST(_mask, _val) \ e2192de59e457a Johannes Berg 2023-01-18 133 ( \ e2192de59e457a Johannes Berg 2023-01-18 134 /* mask must be non-zero */ \ e2192de59e457a Johannes Berg 2023-01-18 135 BUILD_BUG_ON_ZERO((_mask) == 0) + \ e2192de59e457a Johannes Berg 2023-01-18 136 /* check if value fits */ \ e2192de59e457a Johannes Berg 2023-01-18 137 BUILD_BUG_ON_ZERO(~((_mask) >> __bf_shf(_mask)) & (_val)) + \ e2192de59e457a Johannes Berg 2023-01-18 138 /* check if mask is contiguous */ \ e2192de59e457a Johannes Berg 2023-01-18 139 __BF_CHECK_POW2((_mask) + (1ULL << __bf_shf(_mask))) + \ e2192de59e457a Johannes Berg 2023-01-18 140 /* and create the value */ \ e2192de59e457a Johannes Berg 2023-01-18 141 (((typeof(_mask))(_val) << __bf_shf(_mask)) & (_mask)) \ e2192de59e457a Johannes Berg 2023-01-18 142 ) e2192de59e457a Johannes Berg 2023-01-18 143 3e9b3112ec74f1 Jakub Kicinski 2016-08-31 144 /** 3e9b3112ec74f1 Jakub Kicinski 2016-08-31 145 * FIELD_GET() - extract a bitfield element 3e9b3112ec74f1 Jakub Kicinski 2016-08-31 146 * @_mask: shifted mask defining the field's length and position 7240767450d6d8 Masahiro Yamada 2017-10-03 147 * @_reg: value of entire bitfield 3e9b3112ec74f1 Jakub Kicinski 2016-08-31 148 * 3e9b3112ec74f1 Jakub Kicinski 2016-08-31 149 * FIELD_GET() extracts the field specified by @_mask from the 3e9b3112ec74f1 Jakub Kicinski 2016-08-31 150 * bitfield passed in as @_reg by masking and shifting it down. 3e9b3112ec74f1 Jakub Kicinski 2016-08-31 151 */ 3e9b3112ec74f1 Jakub Kicinski 2016-08-31 152 #define FIELD_GET(_mask, _reg) \ 3e9b3112ec74f1 Jakub Kicinski 2016-08-31 153 ({ \ 3e9b3112ec74f1 Jakub Kicinski 2016-08-31 154 __BF_FIELD_CHECK(_mask, _reg, 0U, "FIELD_GET: "); \ 3e9b3112ec74f1 Jakub Kicinski 2016-08-31 155 (typeof(_mask))(((_reg) & (_mask)) >> __bf_shf(_mask)); \ 3e9b3112ec74f1 Jakub Kicinski 2016-08-31 156 }) 3e9b3112ec74f1 Jakub Kicinski 2016-08-31 157 e7d4a95da86e0b Johannes Berg 2018-06-20 158 extern void __compiletime_error("value doesn't fit into mask") 00b0c9b82663ac Al Viro 2017-12-14 159 __field_overflow(void); 00b0c9b82663ac Al Viro 2017-12-14 160 extern void __compiletime_error("bad bitfield mask") 00b0c9b82663ac Al Viro 2017-12-14 161 __bad_mask(void); 00b0c9b82663ac Al Viro 2017-12-14 162 static __always_inline u64 field_multiplier(u64 field) 00b0c9b82663ac Al Viro 2017-12-14 163 { 00b0c9b82663ac Al Viro 2017-12-14 164 if ((field | (field - 1)) & ((field | (field - 1)) + 1)) 00b0c9b82663ac Al Viro 2017-12-14 165 __bad_mask(); 00b0c9b82663ac Al Viro 2017-12-14 166 return field & -field; 00b0c9b82663ac Al Viro 2017-12-14 167 } 00b0c9b82663ac Al Viro 2017-12-14 168 static __always_inline u64 field_mask(u64 field) 00b0c9b82663ac Al Viro 2017-12-14 169 { 00b0c9b82663ac Al Viro 2017-12-14 170 return field / field_multiplier(field); 00b0c9b82663ac Al Viro 2017-12-14 171 } e31a50162feb35 Alex Elder 2020-03-12 172 #define field_max(field) ((typeof(field))field_mask(field)) 00b0c9b82663ac Al Viro 2017-12-14 173 #define ____MAKE_OP(type,base,to,from) \ 00b0c9b82663ac Al Viro 2017-12-14 174 static __always_inline __##type type##_encode_bits(base v, base field) \ 00b0c9b82663ac Al Viro 2017-12-14 175 { \ e7d4a95da86e0b Johannes Berg 2018-06-20 176 if (__builtin_constant_p(v) && (v & ~field_mask(field))) \ 00b0c9b82663ac Al Viro 2017-12-14 177 __field_overflow(); \ 00b0c9b82663ac Al Viro 2017-12-14 178 return to((v & field_mask(field)) * field_multiplier(field)); \ 00b0c9b82663ac Al Viro 2017-12-14 179 } \ 00b0c9b82663ac Al Viro 2017-12-14 180 static __always_inline __##type type##_replace_bits(__##type old, \ 00b0c9b82663ac Al Viro 2017-12-14 181 base val, base field) \ 00b0c9b82663ac Al Viro 2017-12-14 182 { \ 00b0c9b82663ac Al Viro 2017-12-14 183 return (old & ~to(field)) | type##_encode_bits(val, field); \ 00b0c9b82663ac Al Viro 2017-12-14 184 } \ 00b0c9b82663ac Al Viro 2017-12-14 185 static __always_inline void type##p_replace_bits(__##type *p, \ 00b0c9b82663ac Al Viro 2017-12-14 186 base val, base field) \ 00b0c9b82663ac Al Viro 2017-12-14 187 { \ 00b0c9b82663ac Al Viro 2017-12-14 188 *p = (*p & ~to(field)) | type##_encode_bits(val, field); \ 00b0c9b82663ac Al Viro 2017-12-14 189 } \ 00b0c9b82663ac Al Viro 2017-12-14 190 static __always_inline base type##_get_bits(__##type v, base field) \ 00b0c9b82663ac Al Viro 2017-12-14 191 { \ 00b0c9b82663ac Al Viro 2017-12-14 192 return (from(v) & field)/field_multiplier(field); \ 00b0c9b82663ac Al Viro 2017-12-14 193 } 00b0c9b82663ac Al Viro 2017-12-14 194 #define __MAKE_OP(size) \ 00b0c9b82663ac Al Viro 2017-12-14 195 ____MAKE_OP(le##size,u##size,cpu_to_le##size,le##size##_to_cpu) \ 00b0c9b82663ac Al Viro 2017-12-14 196 ____MAKE_OP(be##size,u##size,cpu_to_be##size,be##size##_to_cpu) \ 00b0c9b82663ac Al Viro 2017-12-14 197 ____MAKE_OP(u##size,u##size,,) 37a3862e123826 Johannes Berg 2018-06-20 198 ____MAKE_OP(u8,u8,,) 00b0c9b82663ac Al Viro 2017-12-14 @199 __MAKE_OP(16) 00b0c9b82663ac Al Viro 2017-12-14 @200 __MAKE_OP(32) 00b0c9b82663ac Al Viro 2017-12-14 @201 __MAKE_OP(64) 00b0c9b82663ac Al Viro 2017-12-14 202 #undef __MAKE_OP 00b0c9b82663ac Al Viro 2017-12-14 203 #undef ____MAKE_OP 00b0c9b82663ac Al Viro 2017-12-14 204
diff --git a/include/linux/amba/serial.h b/include/linux/amba/serial.h index 27003ec52114..23ab7c4cc34f 100644 --- a/include/linux/amba/serial.h +++ b/include/linux/amba/serial.h @@ -10,6 +10,8 @@ #ifndef ASM_ARM_HARDWARE_SERIAL_AMBA_H #define ASM_ARM_HARDWARE_SERIAL_AMBA_H +#include <linux/bitfield.h> +#include <linux/bits.h> #include <linux/types.h> /* ------------------------------------------------------------------------------- @@ -70,138 +72,142 @@ #define ZX_UART011_ICR 0x4c #define ZX_UART011_DMACR 0x50 -#define UART011_DR_OE (1 << 11) -#define UART011_DR_BE (1 << 10) -#define UART011_DR_PE (1 << 9) -#define UART011_DR_FE (1 << 8) - -#define UART01x_RSR_OE 0x08 -#define UART01x_RSR_BE 0x04 -#define UART01x_RSR_PE 0x02 -#define UART01x_RSR_FE 0x01 - -#define UART011_FR_RI 0x100 -#define UART011_FR_TXFE 0x080 -#define UART011_FR_RXFF 0x040 -#define UART01x_FR_TXFF 0x020 -#define UART01x_FR_RXFE 0x010 -#define UART01x_FR_BUSY 0x008 -#define UART01x_FR_DCD 0x004 -#define UART01x_FR_DSR 0x002 -#define UART01x_FR_CTS 0x001 +#define UART011_DR_OE BIT(11) +#define UART011_DR_BE BIT(10) +#define UART011_DR_PE BIT(9) +#define UART011_DR_FE BIT(8) + +#define UART01x_RSR_OE BIT(3) +#define UART01x_RSR_BE BIT(2) +#define UART01x_RSR_PE BIT(1) +#define UART01x_RSR_FE BIT(0) + +#define UART011_FR_RI BIT(8) +#define UART011_FR_TXFE BIT(7) +#define UART011_FR_RXFF BIT(6) +#define UART01x_FR_TXFF BIT(5) +#define UART01x_FR_RXFE BIT(4) +#define UART01x_FR_BUSY BIT(3) +#define UART01x_FR_DCD BIT(2) +#define UART01x_FR_DSR BIT(1) +#define UART01x_FR_CTS BIT(0) #define UART01x_FR_TMSK (UART01x_FR_TXFF + UART01x_FR_BUSY) /* * Some bits of Flag Register on ZTE device have different position from * standard ones. */ -#define ZX_UART01x_FR_BUSY 0x100 -#define ZX_UART01x_FR_DSR 0x008 -#define ZX_UART01x_FR_CTS 0x002 -#define ZX_UART011_FR_RI 0x001 - -#define UART011_CR_CTSEN 0x8000 /* CTS hardware flow control */ -#define UART011_CR_RTSEN 0x4000 /* RTS hardware flow control */ -#define UART011_CR_OUT2 0x2000 /* OUT2 */ -#define UART011_CR_OUT1 0x1000 /* OUT1 */ -#define UART011_CR_RTS 0x0800 /* RTS */ -#define UART011_CR_DTR 0x0400 /* DTR */ -#define UART011_CR_RXE 0x0200 /* receive enable */ -#define UART011_CR_TXE 0x0100 /* transmit enable */ -#define UART011_CR_LBE 0x0080 /* loopback enable */ -#define UART010_CR_RTIE 0x0040 -#define UART010_CR_TIE 0x0020 -#define UART010_CR_RIE 0x0010 -#define UART010_CR_MSIE 0x0008 -#define ST_UART011_CR_OVSFACT 0x0008 /* Oversampling factor */ -#define UART01x_CR_IIRLP 0x0004 /* SIR low power mode */ -#define UART01x_CR_SIREN 0x0002 /* SIR enable */ -#define UART01x_CR_UARTEN 0x0001 /* UART enable */ - -#define UART011_LCRH_SPS 0x80 +#define ZX_UART01x_FR_BUSY BIT(8) +#define ZX_UART01x_FR_DSR BIT(3) +#define ZX_UART01x_FR_CTS BIT(1) +#define ZX_UART011_FR_RI BIT(0) + +#define UART011_CR_CTSEN BIT(15) /* CTS hardware flow control */ +#define UART011_CR_RTSEN BIT(14) /* RTS hardware flow control */ +#define UART011_CR_OUT2 BIT(13) /* OUT2 */ +#define UART011_CR_OUT1 BIT(12) /* OUT1 */ +#define UART011_CR_RTS BIT(11) /* RTS */ +#define UART011_CR_DTR BIT(10) /* DTR */ +#define UART011_CR_RXE BIT(9) /* receive enable */ +#define UART011_CR_TXE BIT(8) /* transmit enable */ +#define UART011_CR_LBE BIT(7) /* loopback enable */ +#define UART010_CR_RTIE BIT(6) +#define UART010_CR_TIE BIT(5) +#define UART010_CR_RIE BIT(4) +#define UART010_CR_MSIE BIT(3) +#define ST_UART011_CR_OVSFACT BIT(3) /* Oversampling factor */ +#define UART01x_CR_IIRLP BIT(2) /* SIR low power mode */ +#define UART01x_CR_SIREN BIT(1) /* SIR enable */ +#define UART01x_CR_UARTEN BIT(0) /* UART enable */ + +#define UART011_LCRH_SPS BIT(7) #define UART01x_LCRH_WLEN_8 0x60 #define UART01x_LCRH_WLEN_7 0x40 #define UART01x_LCRH_WLEN_6 0x20 #define UART01x_LCRH_WLEN_5 0x00 -#define UART01x_LCRH_FEN 0x10 -#define UART01x_LCRH_STP2 0x08 -#define UART01x_LCRH_EPS 0x04 -#define UART01x_LCRH_PEN 0x02 -#define UART01x_LCRH_BRK 0x01 - -#define ST_UART011_DMAWM_RX_1 (0 << 3) -#define ST_UART011_DMAWM_RX_2 (1 << 3) -#define ST_UART011_DMAWM_RX_4 (2 << 3) -#define ST_UART011_DMAWM_RX_8 (3 << 3) -#define ST_UART011_DMAWM_RX_16 (4 << 3) -#define ST_UART011_DMAWM_RX_32 (5 << 3) -#define ST_UART011_DMAWM_RX_48 (6 << 3) -#define ST_UART011_DMAWM_TX_1 0 -#define ST_UART011_DMAWM_TX_2 1 -#define ST_UART011_DMAWM_TX_4 2 -#define ST_UART011_DMAWM_TX_8 3 -#define ST_UART011_DMAWM_TX_16 4 -#define ST_UART011_DMAWM_TX_32 5 -#define ST_UART011_DMAWM_TX_48 6 - -#define UART010_IIR_RTIS 0x08 -#define UART010_IIR_TIS 0x04 -#define UART010_IIR_RIS 0x02 -#define UART010_IIR_MIS 0x01 - -#define UART011_IFLS_RX1_8 (0 << 3) -#define UART011_IFLS_RX2_8 (1 << 3) -#define UART011_IFLS_RX4_8 (2 << 3) -#define UART011_IFLS_RX6_8 (3 << 3) -#define UART011_IFLS_RX7_8 (4 << 3) -#define UART011_IFLS_TX1_8 (0 << 0) -#define UART011_IFLS_TX2_8 (1 << 0) -#define UART011_IFLS_TX4_8 (2 << 0) -#define UART011_IFLS_TX6_8 (3 << 0) -#define UART011_IFLS_TX7_8 (4 << 0) +#define UART01x_LCRH_FEN BIT(4) +#define UART01x_LCRH_STP2 BIT(3) +#define UART01x_LCRH_EPS BIT(2) +#define UART01x_LCRH_PEN BIT(1) +#define UART01x_LCRH_BRK BIT(0) + +#define ST_UART011_DMAWM_RX GENMASK(5, 3) +#define ST_UART011_DMAWM_RX_1 FIELD_PREP_CONST(ST_UART011_DMAWM_RX, 0) +#define ST_UART011_DMAWM_RX_2 FIELD_PREP_CONST(ST_UART011_DMAWM_RX, 1) +#define ST_UART011_DMAWM_RX_4 FIELD_PREP_CONST(ST_UART011_DMAWM_RX, 2) +#define ST_UART011_DMAWM_RX_8 FIELD_PREP_CONST(ST_UART011_DMAWM_RX, 3) +#define ST_UART011_DMAWM_RX_16 FIELD_PREP_CONST(ST_UART011_DMAWM_RX, 4) +#define ST_UART011_DMAWM_RX_32 FIELD_PREP_CONST(ST_UART011_DMAWM_RX, 5) +#define ST_UART011_DMAWM_RX_48 FIELD_PREP_CONST(ST_UART011_DMAWM_RX, 6) +#define ST_UART011_DMAWM_TX GENMASK(2, 0) +#define ST_UART011_DMAWM_TX_1 FIELD_PREP_CONST(ST_UART011_DMAWM_TX, 0) +#define ST_UART011_DMAWM_TX_2 FIELD_PREP_CONST(ST_UART011_DMAWM_TX, 1) +#define ST_UART011_DMAWM_TX_4 FIELD_PREP_CONST(ST_UART011_DMAWM_TX, 2) +#define ST_UART011_DMAWM_TX_8 FIELD_PREP_CONST(ST_UART011_DMAWM_TX, 3) +#define ST_UART011_DMAWM_TX_16 FIELD_PREP_CONST(ST_UART011_DMAWM_TX, 4) +#define ST_UART011_DMAWM_TX_32 FIELD_PREP_CONST(ST_UART011_DMAWM_TX, 5) +#define ST_UART011_DMAWM_TX_48 FIELD_PREP_CONST(ST_UART011_DMAWM_TX, 6) + +#define UART010_IIR_RTIS BIT(3) +#define UART010_IIR_TIS BIT(2) +#define UART010_IIR_RIS BIT(1) +#define UART010_IIR_MIS BIT(0) + +#define UART011_IFLS_RXIFLSEL GENMASK(5, 3) +#define UART011_IFLS_RX1_8 FIELD_PREP_CONST(UART011_IFLS_RXIFLSEL, 0) +#define UART011_IFLS_RX2_8 FIELD_PREP_CONST(UART011_IFLS_RXIFLSEL, 1) +#define UART011_IFLS_RX4_8 FIELD_PREP_CONST(UART011_IFLS_RXIFLSEL, 2) +#define UART011_IFLS_RX6_8 FIELD_PREP_CONST(UART011_IFLS_RXIFLSEL, 3) +#define UART011_IFLS_RX7_8 FIELD_PREP_CONST(UART011_IFLS_RXIFLSEL, 4) +#define UART011_IFLS_TXIFLSEL GENMASK(2, 0) +#define UART011_IFLS_TX1_8 FIELD_PREP_CONST(UART011_IFLS_TXIFLSEL, 0) +#define UART011_IFLS_TX2_8 FIELD_PREP_CONST(UART011_IFLS_TXIFLSEL, 1) +#define UART011_IFLS_TX4_8 FIELD_PREP_CONST(UART011_IFLS_TXIFLSEL, 2) +#define UART011_IFLS_TX6_8 FIELD_PREP_CONST(UART011_IFLS_TXIFLSEL, 3) +#define UART011_IFLS_TX7_8 FIELD_PREP_CONST(UART011_IFLS_TXIFLSEL, 4) /* special values for ST vendor with deeper fifo */ -#define UART011_IFLS_RX_HALF (5 << 3) -#define UART011_IFLS_TX_HALF (5 << 0) - -#define UART011_OEIM (1 << 10) /* overrun error interrupt mask */ -#define UART011_BEIM (1 << 9) /* break error interrupt mask */ -#define UART011_PEIM (1 << 8) /* parity error interrupt mask */ -#define UART011_FEIM (1 << 7) /* framing error interrupt mask */ -#define UART011_RTIM (1 << 6) /* receive timeout interrupt mask */ -#define UART011_TXIM (1 << 5) /* transmit interrupt mask */ -#define UART011_RXIM (1 << 4) /* receive interrupt mask */ -#define UART011_DSRMIM (1 << 3) /* DSR interrupt mask */ -#define UART011_DCDMIM (1 << 2) /* DCD interrupt mask */ -#define UART011_CTSMIM (1 << 1) /* CTS interrupt mask */ -#define UART011_RIMIM (1 << 0) /* RI interrupt mask */ - -#define UART011_OEIS (1 << 10) /* overrun error interrupt status */ -#define UART011_BEIS (1 << 9) /* break error interrupt status */ -#define UART011_PEIS (1 << 8) /* parity error interrupt status */ -#define UART011_FEIS (1 << 7) /* framing error interrupt status */ -#define UART011_RTIS (1 << 6) /* receive timeout interrupt status */ -#define UART011_TXIS (1 << 5) /* transmit interrupt status */ -#define UART011_RXIS (1 << 4) /* receive interrupt status */ -#define UART011_DSRMIS (1 << 3) /* DSR interrupt status */ -#define UART011_DCDMIS (1 << 2) /* DCD interrupt status */ -#define UART011_CTSMIS (1 << 1) /* CTS interrupt status */ -#define UART011_RIMIS (1 << 0) /* RI interrupt status */ - -#define UART011_OEIC (1 << 10) /* overrun error interrupt clear */ -#define UART011_BEIC (1 << 9) /* break error interrupt clear */ -#define UART011_PEIC (1 << 8) /* parity error interrupt clear */ -#define UART011_FEIC (1 << 7) /* framing error interrupt clear */ -#define UART011_RTIC (1 << 6) /* receive timeout interrupt clear */ -#define UART011_TXIC (1 << 5) /* transmit interrupt clear */ -#define UART011_RXIC (1 << 4) /* receive interrupt clear */ -#define UART011_DSRMIC (1 << 3) /* DSR interrupt clear */ -#define UART011_DCDMIC (1 << 2) /* DCD interrupt clear */ -#define UART011_CTSMIC (1 << 1) /* CTS interrupt clear */ -#define UART011_RIMIC (1 << 0) /* RI interrupt clear */ - -#define UART011_DMAONERR (1 << 2) /* disable dma on error */ -#define UART011_TXDMAE (1 << 1) /* enable transmit dma */ -#define UART011_RXDMAE (1 << 0) /* enable receive dma */ +#define UART011_IFLS_RX_HALF FIELD_PREP_CONST(UART011_IFLS_RXIFLSEL, 5) +#define UART011_IFLS_TX_HALF FIELD_PREP_CONST(UART011_IFLS_TXIFLSEL, 5) + +#define UART011_OEIM BIT(10) /* overrun error interrupt mask */ +#define UART011_BEIM BIT(9) /* break error interrupt mask */ +#define UART011_PEIM BIT(8) /* parity error interrupt mask */ +#define UART011_FEIM BIT(7) /* framing error interrupt mask */ +#define UART011_RTIM BIT(6) /* receive timeout interrupt mask */ +#define UART011_TXIM BIT(5) /* transmit interrupt mask */ +#define UART011_RXIM BIT(4) /* receive interrupt mask */ +#define UART011_DSRMIM BIT(3) /* DSR interrupt mask */ +#define UART011_DCDMIM BIT(2) /* DCD interrupt mask */ +#define UART011_CTSMIM BIT(1) /* CTS interrupt mask */ +#define UART011_RIMIM BIT(0) /* RI interrupt mask */ + +#define UART011_OEIS BIT(10) /* overrun error interrupt status */ +#define UART011_BEIS BIT(9) /* break error interrupt status */ +#define UART011_PEIS BIT(8) /* parity error interrupt status */ +#define UART011_FEIS BIT(7) /* framing error interrupt status */ +#define UART011_RTIS BIT(6) /* receive timeout interrupt status */ +#define UART011_TXIS BIT(5) /* transmit interrupt status */ +#define UART011_RXIS BIT(4) /* receive interrupt status */ +#define UART011_DSRMIS BIT(3) /* DSR interrupt status */ +#define UART011_DCDMIS BIT(2) /* DCD interrupt status */ +#define UART011_CTSMIS BIT(1) /* CTS interrupt status */ +#define UART011_RIMIS BIT(0) /* RI interrupt status */ + +#define UART011_OEIC BIT(10) /* overrun error interrupt clear */ +#define UART011_BEIC BIT(9) /* break error interrupt clear */ +#define UART011_PEIC BIT(8) /* parity error interrupt clear */ +#define UART011_FEIC BIT(7) /* framing error interrupt clear */ +#define UART011_RTIC BIT(6) /* receive timeout interrupt clear */ +#define UART011_TXIC BIT(5) /* transmit interrupt clear */ +#define UART011_RXIC BIT(4) /* receive interrupt clear */ +#define UART011_DSRMIC BIT(3) /* DSR interrupt clear */ +#define UART011_DCDMIC BIT(2) /* DCD interrupt clear */ +#define UART011_CTSMIC BIT(1) /* CTS interrupt clear */ +#define UART011_RIMIC BIT(0) /* RI interrupt clear */ + +#define UART011_DMAONERR BIT(2) /* disable dma on error */ +#define UART011_TXDMAE BIT(1) /* enable transmit dma */ +#define UART011_RXDMAE BIT(0) /* enable receive dma */ #define UART01x_RSR_ANY (UART01x_RSR_OE | UART01x_RSR_BE | UART01x_RSR_PE | UART01x_RSR_FE) #define UART01x_FR_MODEM_ANY (UART01x_FR_DCD | UART01x_FR_DSR | UART01x_FR_CTS)