From: William Breathitt Gray <vilhelm.gray@gmail.com> To: linus.walleij@linaro.org Cc: akpm@linux-foundation.org, linux-gpio@vger.kernel.org, linux-arch@vger.kernel.org, linux-kernel@vger.kernel.org, andriy.shevchenko@linux.intel.com, linux@rasmusvillemoes.dk, yamada.masahiro@socionext.com, bgolaszewski@baylibre.com, linux-arm-kernel@lists.infradead.org, William Breathitt Gray <vilhelm.gray@gmail.com> Subject: [PATCH v10 00/10] Introduce the for_each_set_clump8 macro Date: Thu, 14 Mar 2019 21:29:32 +0900 [thread overview] Message-ID: <cover.1552566113.git.vilhelm.gray@gmail.com> (raw) Changes in v10: - Fix off-by-one error in bitmap initialization in the test_for_each_set_clump8 function - Fix typos in clump_exp array definition in test_bitmap.c ("0x28" should have been "0x38") - Utilize for_each_set_clump8 macro in intel_soc_dts_iosf.c 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 (10): 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 thermal: intel: intel_soc_dts_iosf: Utilize for_each_set_clump8 macro drivers/gpio/gpio-104-dio-48e.c | 73 ++++---------- drivers/gpio/gpio-104-idi-48.c | 37 ++----- drivers/gpio/gpio-gpio-mm.c | 73 ++++---------- drivers/gpio/gpio-pci-idio-16.c | 75 ++++++-------- drivers/gpio/gpio-pcie-idio-24.c | 111 ++++++++------------- drivers/gpio/gpio-uniphier.c | 16 ++- drivers/gpio/gpio-ws16c48.c | 72 ++++--------- drivers/thermal/intel/intel_soc_dts_iosf.c | 29 +++--- drivers/thermal/intel/intel_soc_dts_iosf.h | 2 - include/asm-generic/bitops/find.h | 14 +++ include/linux/bitops.h | 5 + lib/find_bit.c | 81 +++++++++++++++ lib/test_bitmap.c | 65 ++++++++++++ 13 files changed, 330 insertions(+), 323 deletions(-) -- 2.21.0
WARNING: multiple messages have this Message-ID (diff)
From: William Breathitt Gray <vilhelm.gray@gmail.com> To: linus.walleij@linaro.org Cc: linux-arch@vger.kernel.org, yamada.masahiro@socionext.com, linux@rasmusvillemoes.dk, linux-kernel@vger.kernel.org, William Breathitt Gray <vilhelm.gray@gmail.com>, linux-gpio@vger.kernel.org, bgolaszewski@baylibre.com, akpm@linux-foundation.org, andriy.shevchenko@linux.intel.com, linux-arm-kernel@lists.infradead.org Subject: [PATCH v10 00/10] Introduce the for_each_set_clump8 macro Date: Thu, 14 Mar 2019 21:29:32 +0900 [thread overview] Message-ID: <cover.1552566113.git.vilhelm.gray@gmail.com> (raw) Changes in v10: - Fix off-by-one error in bitmap initialization in the test_for_each_set_clump8 function - Fix typos in clump_exp array definition in test_bitmap.c ("0x28" should have been "0x38") - Utilize for_each_set_clump8 macro in intel_soc_dts_iosf.c 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 (10): 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 thermal: intel: intel_soc_dts_iosf: Utilize for_each_set_clump8 macro drivers/gpio/gpio-104-dio-48e.c | 73 ++++---------- drivers/gpio/gpio-104-idi-48.c | 37 ++----- drivers/gpio/gpio-gpio-mm.c | 73 ++++---------- drivers/gpio/gpio-pci-idio-16.c | 75 ++++++-------- drivers/gpio/gpio-pcie-idio-24.c | 111 ++++++++------------- drivers/gpio/gpio-uniphier.c | 16 ++- drivers/gpio/gpio-ws16c48.c | 72 ++++--------- drivers/thermal/intel/intel_soc_dts_iosf.c | 29 +++--- drivers/thermal/intel/intel_soc_dts_iosf.h | 2 - include/asm-generic/bitops/find.h | 14 +++ include/linux/bitops.h | 5 + lib/find_bit.c | 81 +++++++++++++++ lib/test_bitmap.c | 65 ++++++++++++ 13 files changed, 330 insertions(+), 323 deletions(-) -- 2.21.0 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next reply other threads:[~2019-03-14 12:29 UTC|newest] Thread overview: 46+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-03-14 12:29 William Breathitt Gray [this message] 2019-03-14 12:29 ` [PATCH v10 00/10] Introduce the for_each_set_clump8 macro William Breathitt Gray 2019-03-14 12:30 ` [PATCH v10 01/10] bitops: " William Breathitt Gray 2019-03-14 12:30 ` William Breathitt Gray 2019-03-22 18:22 ` Andy Shevchenko 2019-03-22 18:22 ` Andy Shevchenko 2019-03-14 12:30 ` [PATCH v10 02/10] lib/test_bitmap.c: Add for_each_set_clump8 test cases William Breathitt Gray 2019-03-14 12:30 ` William Breathitt Gray 2019-03-14 12:30 ` [PATCH v10 03/10] gpio: 104-dio-48e: Utilize for_each_set_clump8 macro William Breathitt Gray 2019-03-14 12:30 ` William Breathitt Gray 2019-03-14 12:30 ` [PATCH v10 04/10] gpio: 104-idi-48: " William Breathitt Gray 2019-03-14 12:30 ` William Breathitt Gray 2019-03-14 12:31 ` [PATCH v10 05/10] gpio: gpio-mm: " William Breathitt Gray 2019-03-14 12:31 ` William Breathitt Gray 2019-03-14 12:31 ` [PATCH v10 06/10] gpio: ws16c48: " William Breathitt Gray 2019-03-14 12:31 ` William Breathitt Gray 2019-03-14 12:31 ` [PATCH v10 07/10] gpio: pci-idio-16: " William Breathitt Gray 2019-03-14 12:31 ` William Breathitt Gray 2019-03-14 12:32 ` [PATCH v10 08/10] gpio: pcie-idio-24: " William Breathitt Gray 2019-03-14 12:32 ` William Breathitt Gray 2019-03-14 12:32 ` [PATCH v10 09/10] gpio: uniphier: " William Breathitt Gray 2019-03-14 12:32 ` William Breathitt Gray 2019-03-14 12:53 ` William Breathitt Gray 2019-03-14 12:53 ` William Breathitt Gray 2019-03-14 12:32 ` [PATCH v10 10/10] thermal: intel: intel_soc_dts_iosf: " William Breathitt Gray 2019-03-14 12:32 ` William Breathitt Gray 2019-03-14 14:26 ` Andy Shevchenko 2019-03-14 14:26 ` Andy Shevchenko 2019-03-14 14:39 ` William Breathitt Gray 2019-03-14 14:39 ` William Breathitt Gray 2019-03-22 19:02 ` Andy Shevchenko 2019-03-22 19:02 ` Andy Shevchenko 2019-03-24 3:38 ` William Breathitt Gray 2019-03-24 3:38 ` William Breathitt Gray 2019-03-24 13:52 ` Andy Shevchenko 2019-03-24 13:52 ` Andy Shevchenko 2019-03-24 13:52 ` Andy Shevchenko 2019-03-22 19:12 ` [PATCH v10 00/10] Introduce the " Andy Shevchenko 2019-03-22 19:12 ` Andy Shevchenko 2019-03-24 4:08 ` William Breathitt Gray 2019-03-24 4:08 ` William Breathitt Gray 2019-03-24 4:08 ` William Breathitt Gray 2019-03-24 8:53 ` Geert Uytterhoeven 2019-03-24 8:53 ` Geert Uytterhoeven 2019-03-24 12:08 ` Andy Shevchenko 2019-03-24 12:08 ` Andy Shevchenko
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=cover.1552566113.git.vilhelm.gray@gmail.com \ --to=vilhelm.gray@gmail.com \ --cc=akpm@linux-foundation.org \ --cc=andriy.shevchenko@linux.intel.com \ --cc=bgolaszewski@baylibre.com \ --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@rasmusvillemoes.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: linkBe 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.