From mboxrd@z Thu Jan 1 00:00:00 1970 From: Matt Porter Date: Fri, 31 Jan 2014 12:47:47 -0500 Subject: [U-Boot] [PATCH 2/6] arch: bcm281xx: Initial commit of bcm281xx architecture code In-Reply-To: <20140129223230.GX3277@bill-the-cat> References: <1390848810-7227-1-git-send-email-drambo@broadcom.com> <1390848810-7227-3-git-send-email-drambo@broadcom.com> <20140129223230.GX3277@bill-the-cat> Message-ID: <20140131174747.GI31176@beef> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de On Wed, Jan 29, 2014 at 05:32:30PM -0500, Tom Rini wrote: > On Mon, Jan 27, 2014 at 10:53:26AM -0800, Darwin Rambo wrote: > > > Add bcm281xx architecture support code including a clock framework and > > chip reset. Define register block base addresses for the bcm281xx > > architecture and create an empty gpio header file required when > > CONFIG_CMD_GPIO is set. > [snip] > > +/* Bitfield operations */ > > + > > +/* Produces a mask of set bits covering a range of a 32-bit value */ > > +static inline u32 bitfield_mask(u32 shift, u32 width) > > +{ > > + return ((1 << width) - 1) << shift; > > +} > > + > > +/* Extract the value of a bitfield found within a given register value */ > > +static inline u32 bitfield_extract(u32 reg_val, u32 shift, u32 width) > > +{ > > + return (reg_val & bitfield_mask(shift, width)) >> shift; > > +} > > + > > +/* Replace the value of a bitfield found within a given register value */ > > +static inline u32 bitfield_replace(u32 reg_val, u32 shift, u32 width, u32 val) > > +{ > > + u32 mask = bitfield_mask(shift, width); > > + > > + return (reg_val & ~mask) | (val << shift); > > +} > > This all feels horribly generic, isn't there some linux header we've > already got that I can't think off of the top of my head that gives us > these kind of functions? To add to what Darwin mentioned about bitops.h being insufficient... The equivalent kernel implementations are wrapped up in the regmap/regmap-mmio helpers. That implementation is *very* heavyweight, and IMHO simply not appropriate for U-Boot (and often not useful in the kernel as well). A homegrown generic set of inline ops would seem to be ideal for U-Boot. -Matt