From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id D03BBC433B4 for ; Fri, 2 Apr 2021 16:34:41 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id AA85661163 for ; Fri, 2 Apr 2021 16:34:41 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234652AbhDBQel (ORCPT ); Fri, 2 Apr 2021 12:34:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45062 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234275AbhDBQek (ORCPT ); Fri, 2 Apr 2021 12:34:40 -0400 Received: from mail-io1-xd2b.google.com (mail-io1-xd2b.google.com [IPv6:2607:f8b0:4864:20::d2b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 704EFC0613E6; Fri, 2 Apr 2021 09:34:38 -0700 (PDT) Received: by mail-io1-xd2b.google.com with SMTP id v26so5837526iox.11; Fri, 02 Apr 2021 09:34:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=Z8v8CIhwHDdz8dsy06Gqi7STRaNHQYTG480K0RPsixk=; b=b2KbPYk3xnSitGK4Ia0w5NnItEvDnmeZR/PhXitHfptzC99XrALhuNe9i369QaVOLf K0Ys7YEcMx3cXq4DHwIN3OAQDLX77abaWK6+qXsYJuGl8oKa9cQpXejI9o2AXYNgRwE3 u6OlWwZxXejNWM7FtP2uveX44xJDxoH2fdPnz7wpKAaQgxhvsDwShrTKAuE0I9e7uodF NSn8n41NGpMsZ2qZBpUJsmKqFSGsZqd0yoo+JTZgkQwvoCBYLZ5YnsENI3cVqOhACyHh fwR48rltLme7xFR2etcz38QWApistPFz80xqkGFVL26eu3Pe03jXykKP4KSN898KR6RU EP1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=Z8v8CIhwHDdz8dsy06Gqi7STRaNHQYTG480K0RPsixk=; b=iY7jHR1qoYMSm5AgqKOHh5TtbZPlNLD/IDuxMSQK4JjpHUBPzPoZAOUugeKxjENIzW MAbuGhArN9wPy/ueOEbBOGRYvfMF5GjCQiss3KkjHEPpLC/oNZ907sI3D6sDBTU8pqHM hLT4LRgXM3b077EhmQLXK9ZeImHzi4UXrhh/xbscJkF6aFL+F3vkBMqZbi7v4dmkE3b4 FLAx5vdSTmcNkezOLSgigunqFthRmJI56OnQRcuBTlZpFuLxQieFb6zzRy0M7Bs7o6Py zXGehpJWS2BbjT1V7exHj1Ac8KtuiJFdlg+CZq7rbI46ccPCIJAVpdpCnYmcsFx3Onb1 IW0Q== X-Gm-Message-State: AOAM531BkNjuaTQaNiCeMvni+Q1JkJ0CVHZRiWxTL5blzE/5jischgNt 4QjtWc4ackdyVe7Hlp+pMFGYytiPELrKVQ/Pof4= X-Google-Smtp-Source: ABdhPJzc6dF+lA6jScJy+mZTDqxwOqU1OzmImnZ+6BCgmMFhu695HZUKhFXQXRGwrEGF9+lq89pUhj4lWYwDK3jQT/E= X-Received: by 2002:a02:c017:: with SMTP id y23mr13743431jai.3.1617381277426; Fri, 02 Apr 2021 09:34:37 -0700 (PDT) MIME-Version: 1.0 References: <00d085d4068be651c58a61564926d4f3d495ab80.1617357235.git.syednwaris@gmail.com> In-Reply-To: <00d085d4068be651c58a61564926d4f3d495ab80.1617357235.git.syednwaris@gmail.com> From: Syed Nayyar Waris Date: Fri, 2 Apr 2021 22:04:25 +0530 Message-ID: Subject: Re: [PATCH v4 3/3] gpio: xilinx: Utilize generic bitmap_get_value and _set_value 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, 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 Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org On Fri, Apr 2, 2021 at 3:42 PM Syed Nayyar Waris wrote: > > This patch reimplements the xgpio_set_multiple() function in > drivers/gpio/gpio-xilinx.c to use the new generic functions: > bitmap_get_value() and bitmap_set_value(). The code is now simpler > to read and understand. Moreover, instead of looping for each bit > in xgpio_set_multiple() function, now we can check each channel at > a time and save cycles. > > Cc: Bartosz Golaszewski > Cc: Michal Simek > Signed-off-by: Syed Nayyar Waris > Acked-by: William Breathitt Gray > --- > drivers/gpio/gpio-xilinx.c | 60 +++++++++++++++++++------------------- > 1 file changed, 30 insertions(+), 30 deletions(-) > > diff --git a/drivers/gpio/gpio-xilinx.c b/drivers/gpio/gpio-xilinx.c > index b411d3156e0b..e0ad3a81f216 100644 > --- a/drivers/gpio/gpio-xilinx.c > +++ b/drivers/gpio/gpio-xilinx.c > @@ -18,6 +18,7 @@ > #include > #include > #include > +#include "gpiolib.h" > > /* Register Offset Definitions */ > #define XGPIO_DATA_OFFSET (0x0) /* Data register */ > @@ -161,37 +162,36 @@ static void xgpio_set_multiple(struct gpio_chip *gc, unsigned long *mask, > { > unsigned long flags; > struct xgpio_instance *chip = gpiochip_get_data(gc); > - int index = xgpio_index(chip, 0); > - int offset, i; > > - spin_lock_irqsave(&chip->gpio_lock, flags); > - > - /* Write to GPIO signals */ > - for (i = 0; i < gc->ngpio; i++) { > - if (*mask == 0) > - break; > - /* Once finished with an index write it out to the register */ > - if (index != xgpio_index(chip, i)) { > - xgpio_writereg(chip->regs + XGPIO_DATA_OFFSET + > - index * XGPIO_CHANNEL_OFFSET, > - chip->gpio_state[index]); > - spin_unlock_irqrestore(&chip->gpio_lock, flags); > - index = xgpio_index(chip, i); > - spin_lock_irqsave(&chip->gpio_lock, flags); > - } > - if (__test_and_clear_bit(i, mask)) { > - offset = xgpio_offset(chip, i); > - if (test_bit(i, bits)) > - chip->gpio_state[index] |= BIT(offset); > - else > - chip->gpio_state[index] &= ~BIT(offset); > - } > - } > - > - xgpio_writereg(chip->regs + XGPIO_DATA_OFFSET + > - index * XGPIO_CHANNEL_OFFSET, chip->gpio_state[index]); > - > - spin_unlock_irqrestore(&chip->gpio_lock, flags); > + u32 *state = chip->gpio_state; > + unsigned int *width = chip->gpio_width; > + DECLARE_BITMAP(old, 64); > + DECLARE_BITMAP(new, 64); > + DECLARE_BITMAP(changed, 64); > + > + spin_lock_irqsave(&chip->gpio_lock, flags); > + > + /* Copy initial value of state bits into 'old' bit-wise */ > + bitmap_set_value(old, 64, state[0], width[0], 0); > + bitmap_set_value(old, 64, state[1], width[1], width[0]); > + /* Copy value from 'old' into 'new' with mask applied */ > + bitmap_replace(new, old, bits, mask, gc->ngpio); > + > + bitmap_from_arr32(old, state, 64); > + /* Update 'state' */ > + state[0] = bitmap_get_value(new, 0, width[0]); > + state[1] = bitmap_get_value(new, width[0], width[1]); > + bitmap_from_arr32(new, state, 64); > + /* XOR operation sets only changed bits */ > + bitmap_xor(changed, old, new, 64); > + > + if (((u32 *)changed)[0]) > + xgpio_writereg(chip->regs + XGPIO_DATA_OFFSET, state[0]); > + if (((u32 *)changed)[1]) > + xgpio_writereg(chip->regs + XGPIO_DATA_OFFSET + > + XGPIO_CHANNEL_OFFSET, state[1]); > + > + spin_unlock_irqrestore(&chip->gpio_lock, flags); > } > > /** > -- > 2.29.0 > Hi All, There were indentation errors reported. I am Re-sending the patchset. I am keeping the version same as v4. Kindly consider the "RESEND" prefixed v4 patchset for future. Regards Syed Nayyar Waris From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.7 required=3.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED,DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN, FREEMAIL_FROM,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 4DEC6C433ED for ; Fri, 2 Apr 2021 16:36:58 +0000 (UTC) Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id E0D1860249 for ; Fri, 2 Apr 2021 16:36:57 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E0D1860249 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=gmail.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=desiato.20200630; h=Sender:Content-Transfer-Encoding :Content-Type:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:Cc:To:Subject:Message-ID:Date:From:In-Reply-To: References:MIME-Version:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=Mmb4AmwUSZu2CezmFFg2myjwGJQBswmkozKGKlL9AjU=; b=eDP09silWzF5iBkvk0oshrpxX DdQVuhN/2beTDRUPptuw2GNE97oV4FHRCT7LNth4Gu9fywoJbg9MzGjl6QJYUmx6ZVIkd50jF3jDM Dhe1ONrlipfkJHPFLoospTMD13UK3HCyo2/4x3e1J12bwUbFydl8EepuQ0o6z+a5KS1yMqiFH5ANv Aj0hdESLsgENbeqjxM9XTXBfXB4hmJpTXuZjGsrLCOE/svoQHY2MdJ2sPoZrOC/P0TqzExuosU0iV CTjJ54ffuDhRlybjK/ETE9w+t5jZ8grFi2+A1ZL5wQFG0qISREeeuHqQvM3/fkgldqINPvAzVVzWH vndK2WszQ==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lSMkz-00DOeH-T2; Fri, 02 Apr 2021 16:34:50 +0000 Received: from mail-io1-xd2a.google.com ([2607:f8b0:4864:20::d2a]) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lSMkp-00DOdW-D4 for linux-arm-kernel@lists.infradead.org; Fri, 02 Apr 2021 16:34:41 +0000 Received: by mail-io1-xd2a.google.com with SMTP id k25so5869170iob.6 for ; Fri, 02 Apr 2021 09:34:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=Z8v8CIhwHDdz8dsy06Gqi7STRaNHQYTG480K0RPsixk=; b=b2KbPYk3xnSitGK4Ia0w5NnItEvDnmeZR/PhXitHfptzC99XrALhuNe9i369QaVOLf K0Ys7YEcMx3cXq4DHwIN3OAQDLX77abaWK6+qXsYJuGl8oKa9cQpXejI9o2AXYNgRwE3 u6OlWwZxXejNWM7FtP2uveX44xJDxoH2fdPnz7wpKAaQgxhvsDwShrTKAuE0I9e7uodF NSn8n41NGpMsZ2qZBpUJsmKqFSGsZqd0yoo+JTZgkQwvoCBYLZ5YnsENI3cVqOhACyHh fwR48rltLme7xFR2etcz38QWApistPFz80xqkGFVL26eu3Pe03jXykKP4KSN898KR6RU EP1w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=Z8v8CIhwHDdz8dsy06Gqi7STRaNHQYTG480K0RPsixk=; b=mD6SpABi9PSi++KVBmlJ4FOUdLkHF5D+0S+24xiK60ktxIH+6M6agNCLclpmR+7YGC k8OwQcUhnntCjw4pNe5KIqTZ8w1No3mVPqQNVpVle8wbX7UI6mXi99HlLyS05e59JJUI LhZp532wWTnkeBCJi9uRvHlOipOhHIfC2tQvMlgWQFpnCSxl/maF4Umpp94gQkBATx/Z 1+Qnibl8VrxTYnIGtiHwYlHReJlZLJk8CQ+8c6GANvsKhIoBaQfHOkBoIp5cw/qicW53 EtcUM+m7gGxaPSjFZPJM8cosLsAczQ4hCIVuNnIYR4JUzmvMPSYfZoEqSUWJ02AUu/1T m4Ew== X-Gm-Message-State: AOAM531kIfVNfSUEksrXwJ3O8+ugbkZyabvjrPMd600cLSBs6BoT67Le 538E1SdGcWJrQQFRx6RvPnK4TySKvS9iDvoBwmQ= X-Google-Smtp-Source: ABdhPJzc6dF+lA6jScJy+mZTDqxwOqU1OzmImnZ+6BCgmMFhu695HZUKhFXQXRGwrEGF9+lq89pUhj4lWYwDK3jQT/E= X-Received: by 2002:a02:c017:: with SMTP id y23mr13743431jai.3.1617381277426; Fri, 02 Apr 2021 09:34:37 -0700 (PDT) MIME-Version: 1.0 References: <00d085d4068be651c58a61564926d4f3d495ab80.1617357235.git.syednwaris@gmail.com> In-Reply-To: <00d085d4068be651c58a61564926d4f3d495ab80.1617357235.git.syednwaris@gmail.com> From: Syed Nayyar Waris Date: Fri, 2 Apr 2021 22:04:25 +0530 Message-ID: Subject: Re: [PATCH v4 3/3] gpio: xilinx: Utilize generic bitmap_get_value and _set_value 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, 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 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210402_173439_551606_F5D678FE X-CRM114-Status: GOOD ( 25.08 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Fri, Apr 2, 2021 at 3:42 PM Syed Nayyar Waris wrote: > > This patch reimplements the xgpio_set_multiple() function in > drivers/gpio/gpio-xilinx.c to use the new generic functions: > bitmap_get_value() and bitmap_set_value(). The code is now simpler > to read and understand. Moreover, instead of looping for each bit > in xgpio_set_multiple() function, now we can check each channel at > a time and save cycles. > > Cc: Bartosz Golaszewski > Cc: Michal Simek > Signed-off-by: Syed Nayyar Waris > Acked-by: William Breathitt Gray > --- > drivers/gpio/gpio-xilinx.c | 60 +++++++++++++++++++------------------- > 1 file changed, 30 insertions(+), 30 deletions(-) > > diff --git a/drivers/gpio/gpio-xilinx.c b/drivers/gpio/gpio-xilinx.c > index b411d3156e0b..e0ad3a81f216 100644 > --- a/drivers/gpio/gpio-xilinx.c > +++ b/drivers/gpio/gpio-xilinx.c > @@ -18,6 +18,7 @@ > #include > #include > #include > +#include "gpiolib.h" > > /* Register Offset Definitions */ > #define XGPIO_DATA_OFFSET (0x0) /* Data register */ > @@ -161,37 +162,36 @@ static void xgpio_set_multiple(struct gpio_chip *gc, unsigned long *mask, > { > unsigned long flags; > struct xgpio_instance *chip = gpiochip_get_data(gc); > - int index = xgpio_index(chip, 0); > - int offset, i; > > - spin_lock_irqsave(&chip->gpio_lock, flags); > - > - /* Write to GPIO signals */ > - for (i = 0; i < gc->ngpio; i++) { > - if (*mask == 0) > - break; > - /* Once finished with an index write it out to the register */ > - if (index != xgpio_index(chip, i)) { > - xgpio_writereg(chip->regs + XGPIO_DATA_OFFSET + > - index * XGPIO_CHANNEL_OFFSET, > - chip->gpio_state[index]); > - spin_unlock_irqrestore(&chip->gpio_lock, flags); > - index = xgpio_index(chip, i); > - spin_lock_irqsave(&chip->gpio_lock, flags); > - } > - if (__test_and_clear_bit(i, mask)) { > - offset = xgpio_offset(chip, i); > - if (test_bit(i, bits)) > - chip->gpio_state[index] |= BIT(offset); > - else > - chip->gpio_state[index] &= ~BIT(offset); > - } > - } > - > - xgpio_writereg(chip->regs + XGPIO_DATA_OFFSET + > - index * XGPIO_CHANNEL_OFFSET, chip->gpio_state[index]); > - > - spin_unlock_irqrestore(&chip->gpio_lock, flags); > + u32 *state = chip->gpio_state; > + unsigned int *width = chip->gpio_width; > + DECLARE_BITMAP(old, 64); > + DECLARE_BITMAP(new, 64); > + DECLARE_BITMAP(changed, 64); > + > + spin_lock_irqsave(&chip->gpio_lock, flags); > + > + /* Copy initial value of state bits into 'old' bit-wise */ > + bitmap_set_value(old, 64, state[0], width[0], 0); > + bitmap_set_value(old, 64, state[1], width[1], width[0]); > + /* Copy value from 'old' into 'new' with mask applied */ > + bitmap_replace(new, old, bits, mask, gc->ngpio); > + > + bitmap_from_arr32(old, state, 64); > + /* Update 'state' */ > + state[0] = bitmap_get_value(new, 0, width[0]); > + state[1] = bitmap_get_value(new, width[0], width[1]); > + bitmap_from_arr32(new, state, 64); > + /* XOR operation sets only changed bits */ > + bitmap_xor(changed, old, new, 64); > + > + if (((u32 *)changed)[0]) > + xgpio_writereg(chip->regs + XGPIO_DATA_OFFSET, state[0]); > + if (((u32 *)changed)[1]) > + xgpio_writereg(chip->regs + XGPIO_DATA_OFFSET + > + XGPIO_CHANNEL_OFFSET, state[1]); > + > + spin_unlock_irqrestore(&chip->gpio_lock, flags); > } > > /** > -- > 2.29.0 > Hi All, There were indentation errors reported. I am Re-sending the patchset. I am keeping the version same as v4. Kindly consider the "RESEND" prefixed v4 patchset for future. Regards Syed Nayyar Waris _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel