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=-8.2 required=3.0 tests=DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED,DKIM_VALID,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_PASS,URIBL_BLOCKED,USER_AGENT_MUTT 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 8DF72C43381 for ; Thu, 14 Mar 2019 12:52:36 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (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 5F0862085A for ; Thu, 14 Mar 2019 12:52:36 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Qc2zEAsz"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="Si0j31Od" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5F0862085A 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+infradead-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=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=MGpsasFY8YUbkBSX9HUAOWejGQTarbtjOO66KluDBSY=; b=Qc2zEAszAT8AsP N8cQrl9rd9y2GeEBbbPkHrxSzbKFR954GlEb4H49AZpZSFGvulAYcuHD5pkw6vvmXTnGC1Ah9+rQ6 OIp/qdC0NuULHGezvn+GXtCkjfO0OrGqXh3GtqyTGZK1r1Qaw7KyAKFtkGlW2C7lWdU9qRikNkRIC 1nm3occB7NX5BihR8zMWTQY38yemiWW9L4d503kxMU69R8rGlpZvS50h6Xafg7yvFnFO5fwVY/wk8 6M1YZUONN3gbduONA4eh/pOdD2HYAERUHWIaFXK0gy2dwYDvdUPliyjAQmSPNcalPakTstC2I7eSU ZAzxoLgAAUspZ4tb2D5w==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1h4PqW-0004wu-I3; Thu, 14 Mar 2019 12:52:28 +0000 Received: from mail-pf1-x441.google.com ([2607:f8b0:4864:20::441]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1h4PqS-0004wU-A9 for linux-arm-kernel@lists.infradead.org; Thu, 14 Mar 2019 12:52:25 +0000 Received: by mail-pf1-x441.google.com with SMTP id 8so353798pfr.4 for ; Thu, 14 Mar 2019 05:52:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=date:from:to:cc:subject:message-id:references:mime-version :content-disposition:in-reply-to:user-agent; bh=gHnxiEWi8bAx6whmXpEGa6h2OxzdSKhrCI9EyjEHDVQ=; b=Si0j31OdnVGkGZG1omMwaclv+pt74KatVoxcrkwptRbyiPkkjalPWgS1tu2InB3WIS 9kL82SQHGxMJZuOfMJxAjnfTuxhG1vCYNAX5JAawXFFOQ7IA3uWeH/cgYac82wcvDyUG 8vWnlneNv8dqDaXN+w+1s1AGe44LN1IrAInKrjQEirn9s9/1qU9SVaUNe7I3aphsNT0q D9aydInnkTTY/Xkojj5fabsaow3MWma8bAzS9+cq9Tpbrj2jb/x4wjKZ2KnaIWTmwxgZ On7Eoa57wQX6MTVefa5U/OJZCvZ7g+MWjoHGMMsqoROB7Yq4I0/62jGsvR1ty2l59ctq B9CA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:date:from:to:cc:subject:message-id:references :mime-version:content-disposition:in-reply-to:user-agent; bh=gHnxiEWi8bAx6whmXpEGa6h2OxzdSKhrCI9EyjEHDVQ=; b=FG97N45GNCFGrj0ZRbBZ2Q5S17/lV8LVxWAYdKb1xVfajW+o5pB5QbXWh8sToKY07i SgJV0UM7RZA4Hyji+evWAjiJC/ebTheZat7K/Q5EQEWXuVpfvixpMejpUOUr+3JhNJuN PHKlEviVOvZ55RL1BW60Ie9Bsdo0uaj1uGp0NDyXljvmqSNiyp31aXAWYFLMfUKcmKiz utLdCzDbEUppie0I3aPzF01rj0eGfUmLT3IkFojP2RnUJPJ543cVv/C+Y0E9g8MsOccK suOQxQfaQNztiE9IQFG75x9kCb9Y+u/zJF2OcX2r/6ej2mpOVdeH11XVpjObul++ZsIu Mhdg== X-Gm-Message-State: APjAAAWPYPr2yHUUZRZO+6rjjaJ/G1V1mCQtzYilrWK9xDgzFIEU2X3w yysHwJwc6yLrTHeCYHjVGhw= X-Google-Smtp-Source: APXvYqzPdoKhJWHaoErLZ0GwHdF3SRV/GcKv0NwGOK6Lm8dmo6DaXudbKD2gRcRKhsJxQADvGmA3Rg== X-Received: by 2002:a62:b801:: with SMTP id p1mr49183833pfe.25.1552567943592; Thu, 14 Mar 2019 05:52:23 -0700 (PDT) Received: from icarus ([2001:268:c0a4:3974:c70:4af9:86e2:2]) by smtp.gmail.com with ESMTPSA id f3sm21565821pfn.100.2019.03.14.05.52.19 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Thu, 14 Mar 2019 05:52:22 -0700 (PDT) Date: Thu, 14 Mar 2019 21:53:08 +0900 From: William Breathitt Gray To: yamada.masahiro@socionext.com Subject: Re: [PATCH v10 09/10] gpio: uniphier: Utilize for_each_set_clump8 macro Message-ID: <20190314125308.GA7400@icarus> References: <9487b6bd8f9c2242448729f5f8fc9534f724b221.1552566114.git.vilhelm.gray@gmail.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <9487b6bd8f9c2242448729f5f8fc9534f724b221.1552566114.git.vilhelm.gray@gmail.com> User-Agent: Mutt/1.11.3 (2019-02-01) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190314_055224_375976_F7C1726D X-CRM114-Status: GOOD ( 15.45 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-arch@vger.kernel.org, bgolaszewski@baylibre.com, linus.walleij@linaro.org, linux@rasmusvillemoes.dk, linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, akpm@linux-foundation.org, andriy.shevchenko@linux.intel.com, linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Thu, Mar 14, 2019 at 09:32:37PM +0900, William Breathitt Gray wrote: > Replace verbose implementation in set_multiple callback with > for_each_set_clump8 macro to simplify code and improve clarity. An > improvement in this case is that banks that are not masked will now be > skipped. > > Cc: Masahiro Yamada > Signed-off-by: William Breathitt Gray > --- > drivers/gpio/gpio-uniphier.c | 16 ++++++---------- > 1 file changed, 6 insertions(+), 10 deletions(-) > > diff --git a/drivers/gpio/gpio-uniphier.c b/drivers/gpio/gpio-uniphier.c > index 0f662b297a95..df640cb29b9c 100644 > --- a/drivers/gpio/gpio-uniphier.c > +++ b/drivers/gpio/gpio-uniphier.c > @@ -15,9 +15,6 @@ > #include > #include > > -#define UNIPHIER_GPIO_BANK_MASK \ > - GENMASK((UNIPHIER_GPIO_LINES_PER_BANK) - 1, 0) > - > #define UNIPHIER_GPIO_IRQ_MAX_NUM 24 > > #define UNIPHIER_GPIO_PORT_DATA 0x0 /* data */ > @@ -147,15 +144,14 @@ static void uniphier_gpio_set(struct gpio_chip *chip, > static void uniphier_gpio_set_multiple(struct gpio_chip *chip, > unsigned long *mask, unsigned long *bits) > { > - unsigned int bank, shift, bank_mask, bank_bits; > - int i; > + unsigned int i; > + unsigned long bank_mask; > + unsigned int bank; > + unsigned int bank_bits; > > - for (i = 0; i < chip->ngpio; i += UNIPHIER_GPIO_LINES_PER_BANK) { > + for_each_set_clump8(i, bank_mask, mask, chip->ngpio) { > bank = i / UNIPHIER_GPIO_LINES_PER_BANK; > - shift = i % BITS_PER_LONG; > - bank_mask = (mask[BIT_WORD(i)] >> shift) & > - UNIPHIER_GPIO_BANK_MASK; > - bank_bits = bits[BIT_WORD(i)] >> shift; > + bank_bits = bitmap_get_value8(bits, chip->ngpio, i); > > uniphier_gpio_bank_write(chip, bank, UNIPHIER_GPIO_PORT_DATA, > bank_mask, bank_bits); > -- > 2.21.0 Masahiro, I noticed this loops per GPIO bank and uniphier_gpio_bank_write is called each time to update the respective bank. The uniphier_gpio_reg_update function however is calling writel to update the registers; yet only 8 bits (UNIPHIER_GPIO_LINES_PER_BANK) are updated at a time via the uniphier_gpio_bank_write call in the uniphier_gpio_set_multiple function. Can more than one bank be updated at a time via writel (e.g. 4 banks at 8 bits per bank via a single 32-bit writel call)? If so, instead of using the for_each_set_clump8 macro, it may be more efficient to loop through 4 banks at a time. William Breathitt Gray _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel