Patchwork [U-Boot,2/4] nds32: Add bitwise operation macros for drivers

login
register
mail settings
Submitter ken kuo
Date June 8, 2013, 3:14 a.m.
Message ID <1370661252-12156-2-git-send-email-ken.kuoky@gmail.com>
Download mbox | patch
Permalink /patch/249919/
State Superseded
Delegated to: Macpaul Lin
Headers show

Comments

ken kuo - June 8, 2013, 3:14 a.m.
Add clrbits_* setbits_* clrsetbits_* for peripheral drivers

Signed-off-by: Kuan-Yu Kuo <ken.kuoky@gmail.com>
Cc: Macpaul Lin <macpaul@gmail.com>
---
 arch/nds32/include/asm/io.h |   38 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)
Macpaul Lin - July 24, 2013, 4:50 a.m.
Hi Kuan-Yu,

2013/6/8 Kuan-Yu Kuo <ken.kuoky@gmail.com>:
> Add clrbits_* setbits_* clrsetbits_* for peripheral drivers
>
> Signed-off-by: Kuan-Yu Kuo <ken.kuoky@gmail.com>
> Cc: Macpaul Lin <macpaul@gmail.com>
> ---
>  arch/nds32/include/asm/io.h |   38 ++++++++++++++++++++++++++++++++++++++
>  1 file changed, 38 insertions(+)
>

Applied to u-boot-nds32/master
Thanks for your help!
Macpaul Lin - July 24, 2013, 4:58 a.m.
Hi Kuan-Yu,

2013/7/24 Macpaul Lin <macpaul@gmail.com>:
> Hi Kuan-Yu,
>
> 2013/6/8 Kuan-Yu Kuo <ken.kuoky@gmail.com>:
>> Add clrbits_* setbits_* clrsetbits_* for peripheral drivers
>>
>> Signed-off-by: Kuan-Yu Kuo <ken.kuoky@gmail.com>
>> Cc: Macpaul Lin <macpaul@gmail.com>
>> ---
>>  arch/nds32/include/asm/io.h |   38 ++++++++++++++++++++++++++++++++++++++
>>  1 file changed, 38 insertions(+)
>>
>
> Applied to u-boot-nds32/master
> Thanks for your help!
>

Sorry for correcting this reply!
This patch you've sent was identical to commit
"bea2868f5e5f994db3f6cf23a6111cfd6ac79fc3"
Gabor Juhos, "nds32: introduce macros for bit manipulation"

Since Gabor sent this patch earlier, so I take his patch.
Thanks for both of your work!

Patch

diff --git a/arch/nds32/include/asm/io.h b/arch/nds32/include/asm/io.h
index 39c3dc8..5168c8d 100644
--- a/arch/nds32/include/asm/io.h
+++ b/arch/nds32/include/asm/io.h
@@ -6,6 +6,7 @@ 
  * Copyright (C) 2011 Andes Technology Corporation
  * Shawn Lin, Andes Technology Corporation <nobuhiro@andestech.com>
  * Macpaul Lin, Andes Technology Corporation <macpaul@andestech.com>
+ * Ken Kuo, Andes Technology Corporation <ken_kuo@andestech.com>
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
@@ -165,6 +166,14 @@  static inline unsigned int readl(unsigned int *addr)
 #define __raw_base_readw(base, off)	__arch_base_getw(base, off)
 #define __raw_base_readl(base, off)	__arch_base_getl(base, off)
 
+/*
+ * 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 out_arch(type, endian, a, v)	__raw_write##type(cpu_to_##endian(v), a)
 #define in_arch(type, endian, a)	endian##_to_cpu(__raw_read##type(a))
 
@@ -183,6 +192,35 @@  static inline unsigned int readl(unsigned int *addr)
 #define out_8(a, v)			__raw_writeb(v, a)
 #define in_8(a)				__raw_readb(a)
 
+#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)
+
 /*
  * Now, pick up the machine-defined IO definitions
  * #include <asm/arch/io.h>