From: William Breathitt Gray <vilhelm.gray@gmail.com>
To: linus.walleij@linaro.org, bgolaszewski@baylibre.com
Cc: akpm@linux-foundation.org, linux-gpio@vger.kernel.org,
linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org,
andriy.shevchenko@linux.intel.com, linux@rasmusvillemoes.dk,
yamada.masahiro@socionext.com,
linux-arm-kernel@lists.infradead.org, linux-pm@vger.kernel.org,
geert@linux-m68k.org, preid@electromag.com.au, lukas@wunner.de,
sean.nyekjaer@prevas.dk, morten.tiljeset@prevas.dk
Subject: Re: [PATCH v15 00/14] Introduce the for_each_set_clump8 macro
Date: Sat, 5 Oct 2019 14:46:40 -0400 [thread overview]
Message-ID: <20191005184640.GA117093@icarus> (raw)
In-Reply-To: <cover.1570299719.git.vilhelm.gray@gmail.com>
On Sat, Oct 05, 2019 at 02:36:54PM -0400, William Breathitt Gray wrote:
> Changes in v15:
> - Move find_next_clump8 to lib/find_bit.c since it requires round_down
> (I want this to be static inline like the others, but I need help)
> - Utilize for_each_set_clump8 in pisosr, max3191x, and pca953x
>
> While adding GPIO get_multiple/set_multiple callback support for various
> drivers, I noticed a pattern of looping manifesting that would be useful
> standardized as a macro.
>
> This patchset introduces the for_each_set_clump8 macro and utilizes it
> in several GPIO drivers. The for_each_set_clump macro8 facilitates a
> for-loop syntax that iterates over a memory region entire groups of set
> bits at a time.
>
> For example, suppose you would like to iterate over a 32-bit integer 8
> bits at a time, skipping over 8-bit groups with no set bit, where
> XXXXXXXX represents the current 8-bit group:
>
> Example: 10111110 00000000 11111111 00110011
> First loop: 10111110 00000000 11111111 XXXXXXXX
> Second loop: 10111110 00000000 XXXXXXXX 00110011
> Third loop: XXXXXXXX 00000000 11111111 00110011
>
> Each iteration of the loop returns the next 8-bit group that has at
> least one set bit.
>
> The for_each_set_clump8 macro has four parameters:
>
> * start: set to the bit offset of the current clump
> * clump: set to the current clump value
> * bits: bitmap to search within
> * size: bitmap size in number of bits
>
> In this version of the patchset, the for_each_set_clump macro has been
> reimplemented and simplified based on the suggestions provided by Rasmus
> Villemoes and Andy Shevchenko in the version 4 submission.
>
> In particular, the function of the for_each_set_clump macro has been
> restricted to handle only 8-bit clumps; the drivers that use the
> for_each_set_clump macro only handle 8-bit ports so a generic
> for_each_set_clump implementation is not necessary. Thus, a solution for
> large clumps (i.e. those larger than the width of a bitmap word) can be
> postponed until a driver appears that actually requires such a generic
> for_each_set_clump implementation.
>
> For what it's worth, a semi-generic for_each_set_clump (i.e. for clumps
> smaller than the width of a bitmap word) can be implemented by simply
> replacing the hardcoded '8' and '0xFF' instances with respective
> variables. I have not yet had a need for such an implementation, and
> since it falls short of a true generic for_each_set_clump function, I
> have decided to forgo such an implementation for now.
>
> In addition, the bitmap_get_value8 and bitmap_set_value8 functions are
> introduced to get and set 8-bit values respectively. Their use is based
> on the behavior suggested in the patchset version 4 review.
>
> William Breathitt Gray (14):
> bitops: Introduce the for_each_set_clump8 macro
> lib/test_bitmap.c: Add for_each_set_clump8 test cases
> gpio: 104-dio-48e: Utilize for_each_set_clump8 macro
> gpio: 104-idi-48: Utilize for_each_set_clump8 macro
> gpio: gpio-mm: Utilize for_each_set_clump8 macro
> gpio: ws16c48: Utilize for_each_set_clump8 macro
> gpio: pci-idio-16: Utilize for_each_set_clump8 macro
> gpio: pcie-idio-24: Utilize for_each_set_clump8 macro
> gpio: uniphier: Utilize for_each_set_clump8 macro
> gpio: 74x164: Utilize the for_each_set_clump8 macro
> thermal: intel: intel_soc_dts_iosf: Utilize for_each_set_clump8 macro
> gpio: pisosr: Utilize the for_each_set_clump8 macro
> gpio: max3191x: Utilize the for_each_set_clump8 macro
> gpio: pca953x: Utilize the for_each_set_clump8 macro
>
> drivers/gpio/gpio-104-dio-48e.c | 73 ++++----------
> drivers/gpio/gpio-104-idi-48.c | 36 ++-----
> drivers/gpio/gpio-74x164.c | 19 ++--
> drivers/gpio/gpio-gpio-mm.c | 73 ++++----------
> drivers/gpio/gpio-max3191x.c | 19 ++--
> drivers/gpio/gpio-pca953x.c | 17 ++--
> drivers/gpio/gpio-pci-idio-16.c | 75 +++++---------
> drivers/gpio/gpio-pcie-idio-24.c | 109 ++++++++-------------
> drivers/gpio/gpio-pisosr.c | 12 +--
> drivers/gpio/gpio-uniphier.c | 16 ++-
> drivers/gpio/gpio-ws16c48.c | 73 ++++----------
> drivers/thermal/intel/intel_soc_dts_iosf.c | 29 +++---
> drivers/thermal/intel/intel_soc_dts_iosf.h | 2 -
> include/asm-generic/bitops/find.h | 50 ++++++++++
> include/linux/bitops.h | 5 +
> lib/find_bit.c | 14 +++
> lib/test_bitmap.c | 65 ++++++++++++
> 17 files changed, 325 insertions(+), 362 deletions(-)
>
> --
> 2.23.0
This patchset only implements for_each_set_clump8 which restricts the
looping to 8 bits at a time. The drivers/gpio/gpio-thunderx.c file has a
set_multiple callback that loops 64 bits at a time. That would be one
case where a more general for_each_set_clump macro would be useful.
However, we can focus on the simpler for_each_set_clump8 macro for now
since looping by 8 bits at a time is the most common situation.
William Breathitt Gray
WARNING: multiple messages have this Message-ID (diff)
From: William Breathitt Gray <vilhelm.gray@gmail.com>
To: linus.walleij@linaro.org, bgolaszewski@baylibre.com
Cc: linux-arch@vger.kernel.org, preid@electromag.com.au,
yamada.masahiro@socionext.com, linux-pm@vger.kernel.org,
linux@rasmusvillemoes.dk, linux-kernel@vger.kernel.org,
morten.tiljeset@prevas.dk, sean.nyekjaer@prevas.dk,
linux-gpio@vger.kernel.org, lukas@wunner.de,
geert@linux-m68k.org, akpm@linux-foundation.org,
andriy.shevchenko@linux.intel.com,
linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH v15 00/14] Introduce the for_each_set_clump8 macro
Date: Sat, 5 Oct 2019 14:46:40 -0400 [thread overview]
Message-ID: <20191005184640.GA117093@icarus> (raw)
In-Reply-To: <cover.1570299719.git.vilhelm.gray@gmail.com>
On Sat, Oct 05, 2019 at 02:36:54PM -0400, William Breathitt Gray wrote:
> Changes in v15:
> - Move find_next_clump8 to lib/find_bit.c since it requires round_down
> (I want this to be static inline like the others, but I need help)
> - Utilize for_each_set_clump8 in pisosr, max3191x, and pca953x
>
> While adding GPIO get_multiple/set_multiple callback support for various
> drivers, I noticed a pattern of looping manifesting that would be useful
> standardized as a macro.
>
> This patchset introduces the for_each_set_clump8 macro and utilizes it
> in several GPIO drivers. The for_each_set_clump macro8 facilitates a
> for-loop syntax that iterates over a memory region entire groups of set
> bits at a time.
>
> For example, suppose you would like to iterate over a 32-bit integer 8
> bits at a time, skipping over 8-bit groups with no set bit, where
> XXXXXXXX represents the current 8-bit group:
>
> Example: 10111110 00000000 11111111 00110011
> First loop: 10111110 00000000 11111111 XXXXXXXX
> Second loop: 10111110 00000000 XXXXXXXX 00110011
> Third loop: XXXXXXXX 00000000 11111111 00110011
>
> Each iteration of the loop returns the next 8-bit group that has at
> least one set bit.
>
> The for_each_set_clump8 macro has four parameters:
>
> * start: set to the bit offset of the current clump
> * clump: set to the current clump value
> * bits: bitmap to search within
> * size: bitmap size in number of bits
>
> In this version of the patchset, the for_each_set_clump macro has been
> reimplemented and simplified based on the suggestions provided by Rasmus
> Villemoes and Andy Shevchenko in the version 4 submission.
>
> In particular, the function of the for_each_set_clump macro has been
> restricted to handle only 8-bit clumps; the drivers that use the
> for_each_set_clump macro only handle 8-bit ports so a generic
> for_each_set_clump implementation is not necessary. Thus, a solution for
> large clumps (i.e. those larger than the width of a bitmap word) can be
> postponed until a driver appears that actually requires such a generic
> for_each_set_clump implementation.
>
> For what it's worth, a semi-generic for_each_set_clump (i.e. for clumps
> smaller than the width of a bitmap word) can be implemented by simply
> replacing the hardcoded '8' and '0xFF' instances with respective
> variables. I have not yet had a need for such an implementation, and
> since it falls short of a true generic for_each_set_clump function, I
> have decided to forgo such an implementation for now.
>
> In addition, the bitmap_get_value8 and bitmap_set_value8 functions are
> introduced to get and set 8-bit values respectively. Their use is based
> on the behavior suggested in the patchset version 4 review.
>
> William Breathitt Gray (14):
> bitops: Introduce the for_each_set_clump8 macro
> lib/test_bitmap.c: Add for_each_set_clump8 test cases
> gpio: 104-dio-48e: Utilize for_each_set_clump8 macro
> gpio: 104-idi-48: Utilize for_each_set_clump8 macro
> gpio: gpio-mm: Utilize for_each_set_clump8 macro
> gpio: ws16c48: Utilize for_each_set_clump8 macro
> gpio: pci-idio-16: Utilize for_each_set_clump8 macro
> gpio: pcie-idio-24: Utilize for_each_set_clump8 macro
> gpio: uniphier: Utilize for_each_set_clump8 macro
> gpio: 74x164: Utilize the for_each_set_clump8 macro
> thermal: intel: intel_soc_dts_iosf: Utilize for_each_set_clump8 macro
> gpio: pisosr: Utilize the for_each_set_clump8 macro
> gpio: max3191x: Utilize the for_each_set_clump8 macro
> gpio: pca953x: Utilize the for_each_set_clump8 macro
>
> drivers/gpio/gpio-104-dio-48e.c | 73 ++++----------
> drivers/gpio/gpio-104-idi-48.c | 36 ++-----
> drivers/gpio/gpio-74x164.c | 19 ++--
> drivers/gpio/gpio-gpio-mm.c | 73 ++++----------
> drivers/gpio/gpio-max3191x.c | 19 ++--
> drivers/gpio/gpio-pca953x.c | 17 ++--
> drivers/gpio/gpio-pci-idio-16.c | 75 +++++---------
> drivers/gpio/gpio-pcie-idio-24.c | 109 ++++++++-------------
> drivers/gpio/gpio-pisosr.c | 12 +--
> drivers/gpio/gpio-uniphier.c | 16 ++-
> drivers/gpio/gpio-ws16c48.c | 73 ++++----------
> drivers/thermal/intel/intel_soc_dts_iosf.c | 29 +++---
> drivers/thermal/intel/intel_soc_dts_iosf.h | 2 -
> include/asm-generic/bitops/find.h | 50 ++++++++++
> include/linux/bitops.h | 5 +
> lib/find_bit.c | 14 +++
> lib/test_bitmap.c | 65 ++++++++++++
> 17 files changed, 325 insertions(+), 362 deletions(-)
>
> --
> 2.23.0
This patchset only implements for_each_set_clump8 which restricts the
looping to 8 bits at a time. The drivers/gpio/gpio-thunderx.c file has a
set_multiple callback that loops 64 bits at a time. That would be one
case where a more general for_each_set_clump macro would be useful.
However, we can focus on the simpler for_each_set_clump8 macro for now
since looping by 8 bits at a time is the most common situation.
William Breathitt Gray
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2019-10-05 18:46 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-10-05 18:36 [PATCH v15 00/14] Introduce the for_each_set_clump8 macro William Breathitt Gray
2019-10-05 18:36 ` William Breathitt Gray
2019-10-05 18:36 ` [PATCH v15 01/14] bitops: " William Breathitt Gray
2019-10-05 18:36 ` William Breathitt Gray
2019-10-09 9:25 ` Linus Walleij
2019-10-09 9:25 ` Linus Walleij
2019-10-05 18:36 ` [PATCH v15 02/14] lib/test_bitmap.c: Add for_each_set_clump8 test cases William Breathitt Gray
2019-10-05 18:36 ` William Breathitt Gray
2019-10-05 18:36 ` [PATCH v15 03/14] gpio: 104-dio-48e: Utilize for_each_set_clump8 macro William Breathitt Gray
2019-10-05 18:36 ` William Breathitt Gray
2019-10-05 18:36 ` [PATCH v15 04/14] gpio: 104-idi-48: " William Breathitt Gray
2019-10-05 18:36 ` William Breathitt Gray
2019-10-05 18:36 ` [PATCH v15 05/14] gpio: gpio-mm: " William Breathitt Gray
2019-10-05 18:36 ` William Breathitt Gray
2019-10-05 18:37 ` [PATCH v15 06/14] gpio: ws16c48: " William Breathitt Gray
2019-10-05 18:37 ` William Breathitt Gray
2019-10-05 18:37 ` [PATCH v15 07/14] gpio: pci-idio-16: " William Breathitt Gray
2019-10-05 18:37 ` William Breathitt Gray
2019-10-05 18:37 ` [PATCH v15 08/14] gpio: pcie-idio-24: " William Breathitt Gray
2019-10-05 18:37 ` William Breathitt Gray
2019-10-05 18:37 ` [PATCH v15 09/14] gpio: uniphier: " William Breathitt Gray
2019-10-05 18:37 ` William Breathitt Gray
2019-10-05 18:37 ` [PATCH v15 10/14] gpio: 74x164: Utilize the " William Breathitt Gray
2019-10-05 18:37 ` William Breathitt Gray
2019-10-05 18:37 ` [PATCH v15 11/14] thermal: intel: intel_soc_dts_iosf: Utilize " William Breathitt Gray
2019-10-05 18:37 ` William Breathitt Gray
2019-10-05 18:37 ` [PATCH v15 12/14] gpio: pisosr: Utilize the " William Breathitt Gray
2019-10-05 18:37 ` William Breathitt Gray
2019-10-05 18:37 ` [PATCH v15 13/14] gpio: max3191x: " William Breathitt Gray
2019-10-05 18:37 ` William Breathitt Gray
2019-10-05 23:26 ` kbuild test robot
2019-10-05 23:26 ` kbuild test robot
2019-10-05 23:26 ` kbuild test robot
2019-10-05 23:26 ` kbuild test robot
2019-10-05 23:26 ` kbuild test robot
2019-10-06 19:26 ` kbuild test robot
2019-10-06 19:26 ` kbuild test robot
2019-10-06 19:26 ` kbuild test robot
2019-10-06 19:26 ` kbuild test robot
2019-10-06 19:26 ` kbuild test robot
2019-10-05 18:37 ` [PATCH v15 14/14] gpio: pca953x: " William Breathitt Gray
2019-10-05 18:37 ` William Breathitt Gray
2019-10-05 18:46 ` William Breathitt Gray [this message]
2019-10-05 18:46 ` [PATCH v15 00/14] Introduce " William Breathitt Gray
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=20191005184640.GA117093@icarus \
--to=vilhelm.gray@gmail.com \
--cc=akpm@linux-foundation.org \
--cc=andriy.shevchenko@linux.intel.com \
--cc=bgolaszewski@baylibre.com \
--cc=geert@linux-m68k.org \
--cc=linus.walleij@linaro.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux@rasmusvillemoes.dk \
--cc=lukas@wunner.de \
--cc=morten.tiljeset@prevas.dk \
--cc=preid@electromag.com.au \
--cc=sean.nyekjaer@prevas.dk \
--cc=yamada.masahiro@socionext.com \
/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.