From patchwork Wed Feb 22 01:19:28 2012 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Nobuhiro Iwamatsu X-Patchwork-Id: 142387 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from theia.denx.de (theia.denx.de [85.214.87.163]) by ozlabs.org (Postfix) with ESMTP id C5FBEB6EEE for ; Wed, 22 Feb 2012 12:15:05 +1100 (EST) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 16F652807B; Wed, 22 Feb 2012 02:15:04 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id 2rBEuabUKwXp; Wed, 22 Feb 2012 02:15:03 +0100 (CET) Received: from theia.denx.de (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 103B22807C; Wed, 22 Feb 2012 02:15:00 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by theia.denx.de (Postfix) with ESMTP id 8F0922807C for ; Wed, 22 Feb 2012 02:14:58 +0100 (CET) X-Virus-Scanned: Debian amavisd-new at theia.denx.de Received: from theia.denx.de ([127.0.0.1]) by localhost (theia.denx.de [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id p2KTquTV3Ldk for ; Wed, 22 Feb 2012 02:14:57 +0100 (CET) X-policyd-weight: NOT_IN_SBL_XBL_SPAMHAUS=-1.5 NOT_IN_SPAMCOP=-1.5 NOT_IN_BL_NJABL=-1.5 (only DNSBL check requested) Received: from mail-pz0-f44.google.com (mail-pz0-f44.google.com [209.85.210.44]) by theia.denx.de (Postfix) with ESMTPS id 211CC2807B for ; Wed, 22 Feb 2012 02:14:55 +0100 (CET) Received: by dakl33 with SMTP id l33so6801505dak.3 for ; Tue, 21 Feb 2012 17:14:53 -0800 (PST) Received-SPF: pass (google.com: domain of iwamatsu@nigauri.org designates 10.68.219.70 as permitted sender) client-ip=10.68.219.70; Authentication-Results: mr.google.com; spf=pass (google.com: domain of iwamatsu@nigauri.org designates 10.68.219.70 as permitted sender) smtp.mail=iwamatsu@nigauri.org Received: from mr.google.com ([10.68.219.70]) by 10.68.219.70 with SMTP id pm6mr23708377pbc.120.1329873293906 (num_hops = 1); Tue, 21 Feb 2012 17:14:53 -0800 (PST) MIME-Version: 1.0 Received: by 10.68.219.70 with SMTP id pm6mr19288538pbc.120.1329873293820; Tue, 21 Feb 2012 17:14:53 -0800 (PST) Received: from xps-iwamatsu.renesas.com (49.14.32.202.bf.2iij.net. [202.32.14.49]) by mx.google.com with ESMTPS id u9sm17444695pbj.39.2012.02.21.17.14.51 (version=TLSv1/SSLv3 cipher=OTHER); Tue, 21 Feb 2012 17:14:52 -0800 (PST) From: Nobuhiro Iwamatsu To: u-boot@lists.denx.de Date: Wed, 22 Feb 2012 10:19:28 +0900 Message-Id: <1329873568-27598-1-git-send-email-nobuhiro.iwamatsu.yj@renesas.com> X-Mailer: git-send-email 1.7.7.3 X-Gm-Message-State: ALoCoQmnmPkw48F8zyo1BPkspzT8hI2AjtRgAFmh6eOksJNPe3/KPaWfkzLTK719lFQNlwb9Hk6x Cc: Nobuhiro Iwamatsu , hs@denx.de Subject: [U-Boot] [PATCH] sh: Add bit control functions X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.11 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: u-boot-bounces@lists.denx.de Errors-To: u-boot-bounces@lists.denx.de This provide bit control functions as clrbits_*, setbits_* and clrsetbits_*. V2: Fix comment style and error of whitespace. Signed-off-by: Nobuhiro Iwamatsu Acked-by: Heiko Schocher --- arch/sh/include/asm/io.h | 43 ++++++++++++++++++++++++++++++++++++++++--- 1 files changed, 40 insertions(+), 3 deletions(-) diff --git a/arch/sh/include/asm/io.h b/arch/sh/include/asm/io.h index ca598a6..0a00db3 100644 --- a/arch/sh/include/asm/io.h +++ b/arch/sh/include/asm/io.h @@ -147,13 +147,13 @@ extern void __iounmap(void *addr); */ #ifdef iomem_valid_addr #define __arch_ioremap(off, sz, nocache) \ - ({ \ +({ \ unsigned long _off = (off), _size = (sz); \ void *_ret = (void *)0; \ if (iomem_valid_addr(_off, _size)) \ _ret = __ioremap(iomem_to_phys(_off), _size, 0); \ _ret; \ - }) +}) #define __arch_iounmap __iounmap #endif @@ -238,6 +238,43 @@ static inline void sync(void) } /* + * Clear and set bits in one shot. These macros can be used to clear and + * set multiple bits in a register using a single call. These macros can + * also be used to set a multiple-bit bit pattern using a mask, by + * specifying the mask in the 'clear' parameter and the new bit pattern + * in the 'set' parameter. + */ + +#define clrbits(type, addr, clear) \ + out_##type((addr), in_##type(addr) & ~(clear)) + +#define setbits(type, addr, set) \ + out_##type((addr), in_##type(addr) | (set)) + +#define clrsetbits(type, addr, clear, set) \ + out_##type((addr), (in_##type(addr) & ~(clear)) | (set)) + +#define clrbits_be32(addr, clear) clrbits(be32, addr, clear) +#define setbits_be32(addr, set) setbits(be32, addr, set) +#define clrsetbits_be32(addr, clear, set) clrsetbits(be32, addr, clear, set) + +#define clrbits_le32(addr, clear) clrbits(le32, addr, clear) +#define setbits_le32(addr, set) setbits(le32, addr, set) +#define clrsetbits_le32(addr, clear, set) clrsetbits(le32, addr, clear, set) + +#define clrbits_be16(addr, clear) clrbits(be16, addr, clear) +#define setbits_be16(addr, set) setbits(be16, addr, set) +#define clrsetbits_be16(addr, clear, set) clrsetbits(be16, addr, clear, set) + +#define clrbits_le16(addr, clear) clrbits(le16, addr, clear) +#define setbits_le16(addr, set) setbits(le16, addr, set) +#define clrsetbits_le16(addr, clear, set) clrsetbits(le16, addr, clear, set) + +#define clrbits_8(addr, clear) clrbits(8, addr, clear) +#define setbits_8(addr, set) setbits(8, addr, set) +#define clrsetbits_8(addr, clear, set) clrsetbits(8, addr, clear, set) + +/* * Given a physical address and a length, return a virtual address * that can be used to access the memory range with the caching * properties specified by "flags". @@ -261,7 +298,7 @@ static inline void unmap_physmem(void *vaddr, unsigned long flags) } -static inline phys_addr_t virt_to_phys(void * vaddr) +static inline phys_addr_t virt_to_phys(void *vaddr) { return (phys_addr_t)(vaddr); }