From: Syed Nayyar Waris <syednwaris@gmail.com> To: bgolaszewski@baylibre.com Cc: andriy.shevchenko@linux.intel.com, vilhelm.gray@gmail.com, michal.simek@xilinx.com, arnd@arndb.de, rrichter@marvell.com, linus.walleij@linaro.org, bgolaszewski@baylibre.com, yamada.masahiro@socionext.com, akpm@linux-foundation.org, rui.zhang@intel.com, daniel.lezcano@linaro.org, amit.kucheria@verdurent.com, linux-arch@vger.kernel.org, linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-pm@vger.kernel.org Subject: [PATCH v2 0/3] Introduce the for_each_set_clump macro Date: Fri, 12 Feb 2021 18:49:28 +0530 [thread overview] Message-ID: <cover.1613134924.git.syednwaris@gmail.com> (raw) Hello Bartosz, Since this patchset primarily affects GPIO drivers, would you like to pick it up through your GPIO tree? This patchset introduces a new generic version of for_each_set_clump. The previous version of for_each_set_clump8 used a fixed size 8-bit clump, but the new generic version can work with clump of any size but less than or equal to BITS_PER_LONG. The patchset utilizes the new macro in several GPIO drivers. The earlier 8-bit for_each_set_clump8 facilitated 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. But with the new for_each_set_clump the clump size can be different from 8 bits. Moreover, the clump can be split at word boundary in situations where word size is not multiple of clump size. Following are examples showing the working of new macro for clump sizes of 24 bits and 6 bits. Example 1: clump size: 24 bits, Number of clumps (or ports): 10 bitmap stores the bit information from where successive clumps are retrieved. /* bitmap memory region */ 0x00aa0000ff000000; /* Most significant bits */ 0xaaaaaa0000ff0000; 0x000000aa000000aa; 0xbbbbabcdeffedcba; /* Least significant bits */ Different iterations of for_each_set_clump:- 'offset' is the bit position and 'clump' is the 24 bit clump from the above bitmap. Iteration first: offset: 0 clump: 0xfedcba Iteration second: offset: 24 clump: 0xabcdef Iteration third: offset: 48 clump: 0xaabbbb Iteration fourth: offset: 96 clump: 0xaa Iteration fifth: offset: 144 clump: 0xff Iteration sixth: offset: 168 clump: 0xaaaaaa Iteration seventh: offset: 216 clump: 0xff Loop breaks because in the end the remaining bits (0x00aa) size was less than clump size of 24 bits. In above example it can be seen that in iteration third, the 24 bit clump that was retrieved was split between bitmap[0] and bitmap[1]. This example also shows that 24 bit zeroes if present in between, were skipped (preserving the previous for_each_set_macro8 behaviour). Example 2: clump size = 6 bits, Number of clumps (or ports) = 3. /* bitmap memory region */ 0x00aa0000ff000000; /* Most significant bits */ 0xaaaaaa0000ff0000; 0x0f00000000000000; 0x0000000000000ac0; /* Least significant bits */ Different iterations of for_each_set_clump: 'offset' is the bit position and 'clump' is the 6 bit clump from the above bitmap. Iteration first: offset: 6 clump: 0x2b Loop breaks because 6 * 3 = 18 bits traversed in bitmap. Here 6 * 3 is clump size * no. of clumps. Changes in v2: - [Patch 1/3]: Shift the macros and related functions to gpiolib inside gpio/. Reduce the visibilty of 'for_each_set_clump' to gpio. - [Patch 1/3]: Remove __builtin_unreachable and simply use return statement. - Remove tests from lib/test_bitmap.c as 'for_each_set_clump' is now localised inside gpio/ only. Syed Nayyar Waris (3): gpiolib: : Introduce the for_each_set_clump macro gpio: thunderx: Utilize for_each_set_clump macro gpio: xilinx: Utilize generic bitmap_get_value and _set_value drivers/gpio/gpio-thunderx.c | 13 ++++-- drivers/gpio/gpio-xilinx.c | 63 ++++++++++++------------- drivers/gpio/gpiolib.c | 90 ++++++++++++++++++++++++++++++++++++ drivers/gpio/gpiolib.h | 28 +++++++++++ 4 files changed, 158 insertions(+), 36 deletions(-) base-commit: e71ba9452f0b5b2e8dc8aa5445198cd9214a6a62 -- 2.29.0
WARNING: multiple messages have this Message-ID (diff)
From: Syed Nayyar Waris <syednwaris@gmail.com> To: bgolaszewski@baylibre.com Cc: linux-arch@vger.kernel.org, amit.kucheria@verdurent.com, arnd@arndb.de, yamada.masahiro@socionext.com, linux-kernel@vger.kernel.org, linus.walleij@linaro.org, daniel.lezcano@linaro.org, vilhelm.gray@gmail.com, michal.simek@xilinx.com, bgolaszewski@baylibre.com, rrichter@marvell.com, linux-gpio@vger.kernel.org, linux-pm@vger.kernel.org, akpm@linux-foundation.org, andriy.shevchenko@linux.intel.com, rui.zhang@intel.com, linux-arm-kernel@lists.infradead.org Subject: [PATCH v2 0/3] Introduce the for_each_set_clump macro Date: Fri, 12 Feb 2021 18:49:28 +0530 [thread overview] Message-ID: <cover.1613134924.git.syednwaris@gmail.com> (raw) Hello Bartosz, Since this patchset primarily affects GPIO drivers, would you like to pick it up through your GPIO tree? This patchset introduces a new generic version of for_each_set_clump. The previous version of for_each_set_clump8 used a fixed size 8-bit clump, but the new generic version can work with clump of any size but less than or equal to BITS_PER_LONG. The patchset utilizes the new macro in several GPIO drivers. The earlier 8-bit for_each_set_clump8 facilitated 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. But with the new for_each_set_clump the clump size can be different from 8 bits. Moreover, the clump can be split at word boundary in situations where word size is not multiple of clump size. Following are examples showing the working of new macro for clump sizes of 24 bits and 6 bits. Example 1: clump size: 24 bits, Number of clumps (or ports): 10 bitmap stores the bit information from where successive clumps are retrieved. /* bitmap memory region */ 0x00aa0000ff000000; /* Most significant bits */ 0xaaaaaa0000ff0000; 0x000000aa000000aa; 0xbbbbabcdeffedcba; /* Least significant bits */ Different iterations of for_each_set_clump:- 'offset' is the bit position and 'clump' is the 24 bit clump from the above bitmap. Iteration first: offset: 0 clump: 0xfedcba Iteration second: offset: 24 clump: 0xabcdef Iteration third: offset: 48 clump: 0xaabbbb Iteration fourth: offset: 96 clump: 0xaa Iteration fifth: offset: 144 clump: 0xff Iteration sixth: offset: 168 clump: 0xaaaaaa Iteration seventh: offset: 216 clump: 0xff Loop breaks because in the end the remaining bits (0x00aa) size was less than clump size of 24 bits. In above example it can be seen that in iteration third, the 24 bit clump that was retrieved was split between bitmap[0] and bitmap[1]. This example also shows that 24 bit zeroes if present in between, were skipped (preserving the previous for_each_set_macro8 behaviour). Example 2: clump size = 6 bits, Number of clumps (or ports) = 3. /* bitmap memory region */ 0x00aa0000ff000000; /* Most significant bits */ 0xaaaaaa0000ff0000; 0x0f00000000000000; 0x0000000000000ac0; /* Least significant bits */ Different iterations of for_each_set_clump: 'offset' is the bit position and 'clump' is the 6 bit clump from the above bitmap. Iteration first: offset: 6 clump: 0x2b Loop breaks because 6 * 3 = 18 bits traversed in bitmap. Here 6 * 3 is clump size * no. of clumps. Changes in v2: - [Patch 1/3]: Shift the macros and related functions to gpiolib inside gpio/. Reduce the visibilty of 'for_each_set_clump' to gpio. - [Patch 1/3]: Remove __builtin_unreachable and simply use return statement. - Remove tests from lib/test_bitmap.c as 'for_each_set_clump' is now localised inside gpio/ only. Syed Nayyar Waris (3): gpiolib: : Introduce the for_each_set_clump macro gpio: thunderx: Utilize for_each_set_clump macro gpio: xilinx: Utilize generic bitmap_get_value and _set_value drivers/gpio/gpio-thunderx.c | 13 ++++-- drivers/gpio/gpio-xilinx.c | 63 ++++++++++++------------- drivers/gpio/gpiolib.c | 90 ++++++++++++++++++++++++++++++++++++ drivers/gpio/gpiolib.h | 28 +++++++++++ 4 files changed, 158 insertions(+), 36 deletions(-) base-commit: e71ba9452f0b5b2e8dc8aa5445198cd9214a6a62 -- 2.29.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:[~2021-02-12 13:20 UTC|newest] Thread overview: 23+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-02-12 13:19 Syed Nayyar Waris [this message] 2021-02-12 13:19 ` [PATCH v2 0/3] Introduce the for_each_set_clump macro Syed Nayyar Waris 2021-02-12 13:20 ` [PATCH v2 1/3] gpiolib: " Syed Nayyar Waris 2021-02-12 13:20 ` Syed Nayyar Waris 2021-02-14 6:44 ` William Breathitt Gray 2021-02-14 6:44 ` William Breathitt Gray 2021-02-12 13:21 ` [PATCH v2 2/3] gpio: thunderx: Utilize " Syed Nayyar Waris 2021-02-12 13:21 ` Syed Nayyar Waris 2021-02-14 6:46 ` William Breathitt Gray 2021-02-14 6:46 ` William Breathitt Gray 2021-02-12 13:22 ` [PATCH v2 3/3] gpio: xilinx: Utilize generic bitmap_get_value and _set_value Syed Nayyar Waris 2021-02-12 13:22 ` Syed Nayyar Waris 2021-02-14 4:40 ` kernel test robot 2021-02-15 13:26 ` Syed Nayyar Waris 2021-02-15 13:46 ` Andy Shevchenko 2021-02-15 13:53 ` Syed Nayyar Waris 2021-02-15 15:51 ` Andy Shevchenko 2021-02-14 6:51 ` William Breathitt Gray 2021-02-14 6:51 ` William Breathitt Gray 2021-03-03 14:43 ` [PATCH v2 0/3] Introduce the for_each_set_clump macro Bartosz Golaszewski 2021-03-03 14:43 ` Bartosz Golaszewski 2021-03-06 13:39 ` Syed Nayyar Waris 2021-03-06 13:39 ` Syed Nayyar Waris
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.1613134924.git.syednwaris@gmail.com \ --to=syednwaris@gmail.com \ --cc=akpm@linux-foundation.org \ --cc=amit.kucheria@verdurent.com \ --cc=andriy.shevchenko@linux.intel.com \ --cc=arnd@arndb.de \ --cc=bgolaszewski@baylibre.com \ --cc=daniel.lezcano@linaro.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=michal.simek@xilinx.com \ --cc=rrichter@marvell.com \ --cc=rui.zhang@intel.com \ --cc=vilhelm.gray@gmail.com \ --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.