All of lore.kernel.org
 help / color / mirror / Atom feed
From: Chin Liang See <clsee@altera.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH] nios2: add clear and set bits macros
Date: Tue, 29 Sep 2015 19:25:46 -0500	[thread overview]
Message-ID: <1443572746.2125.4.camel@clsee-VirtualBox> (raw)
In-Reply-To: <1443077232-17122-1-git-send-email-thomas@wytron.com.tw>

Hi Thomas,

On Thu, 2015-09-24 at 14:47 +0800, thomas at wytron.com.tw wrote:
> These macros can be used to clear and set multiple bits
> in a register using a single call.
> 
> Signed-off-by: Thomas Chou <thomas@wytron.com.tw>

Thanks for the patch.
Sorry for the late comments as noticed all my mail for last few days was
stuck in mail server.

> ---
>  arch/nios2/include/asm/io.h | 57 +++++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 57 insertions(+)
> 
> diff --git a/arch/nios2/include/asm/io.h b/arch/nios2/include/asm/io.h
> index b4bd20f..123e885 100644
> --- a/arch/nios2/include/asm/io.h
> +++ b/arch/nios2/include/asm/io.h
> @@ -116,4 +116,61 @@ static inline void outsl (unsigned long port, const void *src, unsigned long cou
>  	while (count--) outl (*p++, port);
>  }
>  
> +/*
> + * 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))
> +
> +#define out_le64(a,v)	out_arch(q,le64,a,v)

The 64bit support (q) is not yet available. This will break if someone
using this.


> +#define out_le32(a,v)	out_arch(l,le32,a,v)
> +#define out_le16(a,v)	out_arch(w,le16,a,v)
> +
> +#define in_le64(a)	in_arch(q,le64,a)

same as above

Thanks
Chin Liang

> +#define in_le32(a)	in_arch(l,le32,a)
> +#define in_le16(a)	in_arch(w,le16,a)
> +
> +#define out_be32(a,v)	out_arch(l,be32,a,v)
> +#define out_be16(a,v)	out_arch(w,be16,a,v)
> +
> +#define in_be32(a)	in_arch(l,be32,a)
> +#define in_be16(a)	in_arch(w,be16,a)
> +
> +#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)
> +
>  #endif /* __ASM_NIOS2_IO_H_ */

  parent reply	other threads:[~2015-09-30  0:25 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-24  6:47 [U-Boot] [PATCH] nios2: add clear and set bits macros Thomas Chou
2015-09-24  6:56 ` Marek Vasut
2015-09-30  0:25 ` Chin Liang See [this message]
2015-09-30 12:55   ` Thomas Chou
2015-09-30 13:32 ` [U-Boot] [PATCH v2] " Thomas Chou
2015-10-01  0:18   ` Chin Liang See
2015-10-03 13:09   ` Thomas Chou

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1443572746.2125.4.camel@clsee-VirtualBox \
    --to=clsee@altera.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.