From: Wolfgang Grandegger <wg@grandegger.com>
To: u-boot@lists.denx.de
Subject: [U-Boot-Users] [PATCH] PPC: add accessor macros to clear and set bits in one shot
Date: Wed, 04 Jun 2008 12:43:38 +0200 [thread overview]
Message-ID: <484671DA.7070704@grandegger.com> (raw)
In-Reply-To: <m2hcc9bj1u.fsf@ohwell.denx.de>
Hi Detlev,
Detlev Zundel wrote:
> Hi Wolfgang,
>
>> PPC: add accessor macros to clear and set bits in one shot
>
> Although I think this is a good idea, I do not particularly like some
> details.
>
>> This patch adds macros from linux/include/asm-powerpc/io.h to clear and
>> set bits in one shot using the in_be32, out_be32, etc. accessor functions.
>> They are very handy to manipulate bits it I/O registers.
>>
>> This patch is required for my forthcoming FSL NAND UPM driver re-write and
>> the support for the TQM8548 module.
>>
>> Signed-off-by: Wolfgang Grandegger <wg@grandegger.com>
>> ---
>> include/asm-ppc/io.h | 28 ++++++++++++++++++++++++++++
>> 1 file changed, 28 insertions(+)
>>
>> Index: u-boot/include/asm-ppc/io.h
>> ===================================================================
>> --- u-boot.orig/include/asm-ppc/io.h
>> +++ u-boot/include/asm-ppc/io.h
>> @@ -238,6 +238,34 @@ extern inline void out_be32(volatile uns
>> __asm__ __volatile__("sync; stw%U0%X0 %1,%0" : "=m" (*addr) : "r" (val));
>> }
>>
>> +/* access ports */
>> +#define setbits32(_addr, _v) out_be32((_addr), in_be32(_addr) | (_v))
>> +#define clrbits32(_addr, _v) out_be32((_addr), in_be32(_addr) & ~(_v))
>> +
>> +#define setbits16(_addr, _v) out_be16((_addr), in_be16(_addr) | (_v))
>> +#define clrbits16(_addr, _v) out_be16((_addr), in_be16(_addr) & ~(_v))
>
> Below are versions for _{be,le} which makes total sense to me, but the
> variants here miss the endianness, _implicitely_ doing big-endian
> transfers. That is neither consistent, nor usable, i.e. how do I set a
> bit in a le-register?
>
>> +
>> +#define setbits8(_addr, _v) out_8((_addr), in_8(_addr) | (_v))
>> +#define clrbits8(_addr, _v) out_8((_addr), in_8(_addr) & ~(_v))
>> +
>> +/* Clear and set bits in one shot. These macros can be used to clear and
>> + * set multiple bits in a register using a single read-modify-write. 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 clrsetbits(type, addr, clear, set) \
>> + out_##type((addr), (in_##type(addr) & ~(clear)) | (set))
>> +
>> +#define clrsetbits_be32(addr, clear, set) clrsetbits(be32, addr, clear, set)
>> +#define clrsetbits_le32(addr, clear, set) clrsetbits(le32, addr, clear, set)
>> +
>> +#define clrsetbits_be16(addr, clear, set) clrsetbits(be16, addr, clear, set)
>> +#define clrsetbits_le16(addr, clear, set) clrsetbits(le32, addr, clear, set)
>
> Error --------------------------------------------------^^^^
Ah, oh, I blindly copied that code from Linux include/asm-powerpc/io.h.
A revised patch addressing the above issues will follow.
Wolfgang.
prev parent reply other threads:[~2008-06-04 10:43 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-06-02 10:08 [U-Boot-Users] [PATCH] PPC: add accessor macros to clear and set bits in one shot Wolfgang Grandegger
2008-06-04 10:17 ` Detlev Zundel
2008-06-04 10:43 ` Wolfgang Grandegger [this message]
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=484671DA.7070704@grandegger.com \
--to=wg@grandegger.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.