Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp2076624ybv; Fri, 21 Feb 2020 08:28:23 -0800 (PST) X-Google-Smtp-Source: APXvYqzkhInYJPJOYjO+t+0fGdeMVbre1HhGguOHqND9iRGuxXdZ0l9yXAhEbFivQhfkRxi84TSh X-Received: by 2002:aca:3805:: with SMTP id f5mr2663875oia.6.1582302503224; Fri, 21 Feb 2020 08:28:23 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1582302503; cv=none; d=google.com; s=arc-20160816; b=JTGkgzaUYr6IT3T30T+mYX4N5G6io0IWCjNs6/+GSNbUCzT1vVIEwoGhquy2J7EYJK W+0rr74Y+Ae4LNKtNmMrffqCKuXlLLoPaZdVGea4v7yVgUMy7ktTdm238DRPXq6PAsMl Kki8YHOC6X20qJSoVeDbF2pSvl7590OtdGDfyN6E9Q+td3VvQmUm/dQhpD/bBG4L4Z19 MOCekwE9qKssv+euOpHVcYouqPb66rhwwA31+Jw7Rpna0ZPf1kD18HCMG3G/JLVCc91p S5ZG/kOFMf/YUdjY9Ou8+qYv2aPartJ2UdfNg2jVv0bh0RAXPgxNoNW4CfSXpGhytImI ndDQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:dkim-signature; bh=BEsiGHVETpwlrx9fi+Y8ffreY+Moy7t7I8prpX48pGY=; b=mmf6CPsQhihtCIDlWXwMRwb8a/GK7eCIRLnDspFeWOXgutSxeBGk4zTbuubI1GxNU1 4LBXIg+zBzaG/TttnUuntSdSChIt7ENNMlWWghnV7UbmRhpopZ5OMnXgak34e618GDPN y9dRU4Gf8LJlYyqTzHXtoJfzwrNZoxC4GJT9yNnmqIg6VIaWDhu/PJv74j6zQvlxu99y w230pKSI4WMW73qviSk8yxcIqpQihvZdJtYJG0fww6UyaNOK1thsZhq+3rX1IaAAC+si C42TM49OBFnxPqk1u/jsBkQpaVsBRnc/pjAsCx/tzp/vylPYCqLQXZCHJKAJWjcsqQh1 0mYA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="YIRlx/Px"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t127si1010875oih.45.2020.02.21.08.28.10; Fri, 21 Feb 2020 08:28:23 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@linaro.org header.s=google header.b="YIRlx/Px"; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linaro.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726713AbgBUQ02 (ORCPT + 99 others); Fri, 21 Feb 2020 11:26:28 -0500 Received: from mail-lf1-f65.google.com ([209.85.167.65]:43532 "EHLO mail-lf1-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1725947AbgBUQ02 (ORCPT ); Fri, 21 Feb 2020 11:26:28 -0500 Received: by mail-lf1-f65.google.com with SMTP id s23so1909503lfs.10 for ; Fri, 21 Feb 2020 08:26:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=BEsiGHVETpwlrx9fi+Y8ffreY+Moy7t7I8prpX48pGY=; b=YIRlx/PxwWRwZFbiqPDrD+GllLKbeMlj8TOyziXCoAV3t50KR3BWMLjDQXXOyoFU3+ iqSUbPNiyzwosbGAH1t+PND/hoWXjBdwDOHdU4OVa1BI4jReidjUDXGHGufMEGLSY5wP RJLszk+Ilh/YhS7sain9VCh3m8hd0E+9onBdJ1WBFdyaJm+Qr5fL7fUd8dgf7XDcyjRL hy/ie/CJ2yluPpWXn5dJM7OAyXGQWM7tR1V2uDqv5mDf40Sy+ZSY6/q1lF0WoHOirBMt s+k5oTDfIqt7rjAt+ENZgg1fkMVgXIOyaUEhjS/lu3gCtDvjruf/RUquoa3XDrTH5vcO w9Hw== 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=BEsiGHVETpwlrx9fi+Y8ffreY+Moy7t7I8prpX48pGY=; b=KKZcdmsTE7MlLEpfP1+PVIZ4Jnmlg6SjYb7Vw/OhJR+6ass+mQHSxPDFnsMRbwoOfs fJJQnIFwZXfFBYFFjnmjoI4WyP7uiHp7ZoSLBPFl7otr18WUcr7alqhs9D2V6HLVX+UR t9s/MrmTE/Nrw/hy5W7zbYq4KYjGAN0W5GAnY0y38vpyTEXzuY2Df5yXtQdIUf3XRl6q IkgIf0cMZVXXRaTEvo4dWcMlIITmFid5qoVZaDZx1721tey3h6wD15CeOrmiXNrr1RD9 RlXP/T2uQoriFCDy76pPBj/I6UfQYLk5Ape2PK40ihToHoat+14b7ijo7X5b6guzmaZj duvw== X-Gm-Message-State: APjAAAWrkgqY58pSiDaBlmkMVmTkn5mKUyCN1Kkdzew78PVxygCqb1Cb j4FtB0ff+hY+IpO+gmqJgKRmjIlguF/MYPWg1Uf2lw== X-Received: by 2002:ac2:44a5:: with SMTP id c5mr8394490lfm.4.1582302385173; Fri, 21 Feb 2020 08:26:25 -0800 (PST) MIME-Version: 1.0 References: In-Reply-To: From: Linus Walleij Date: Fri, 21 Feb 2020 17:26:13 +0100 Message-ID: Subject: Re: [PATCH v1 1/1] gpio: add driver for Mellanox BlueField 2 GPIO controller To: Asmaa Mnebhi Cc: Bartosz Golaszewski , "linux-kernel@vger.kernel.org" Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Asmaa, thanks for your patch! On Fri, Feb 21, 2020 at 4:40 PM Asmaa Mnebhi wrote: > This patch adds support for the GPIO controller used by > Mellanox BlueField 2 SOCs. > > Signed-off-by: Asmaa Mnebhi (...) > +config GPIO_MLXBF2 > + tristate "Mellanox BlueField 2 SoC GPIO" > + depends on (MELLANOX_PLATFORM && ARM64 && ACPI) || (64BIT && COMPILE_TEST) > + select GPIO_GENERIC This selects GPIO_GENERIC but does not make use of it? > +/* > + * gpio[x] block registers and their offset > + */ > +#define YU_GPIO_DATAOUT 0x00 > +#define YU_GPIO_DATAIN 0x04 > +#define YU_GPIO_MODE1 0x08 > +#define YU_GPIO_MODE0 0x0c > +#define YU_GPIO_DATASET 0x14 > +#define YU_GPIO_DATACLEAR 0x18 > +#define YU_GPIO_MODE1_CLEAR 0x50 > +#define YU_GPIO_MODE0_SET 0x54 > +#define YU_GPIO_MODE0_CLEAR 0x58 This however looks a lot like it could use GPIO_GENERIC. > + /* Must hold this lock to modify shared data. */ > + spinlock_t lock; Incidentally GPIO_GENERIC accessors also contains a lock so you don't need to implement that either. > + /* All 3 YU GPIO block address */ > + res = platform_get_resource(pdev, IORESOURCE_MEM, GPIO_BLOCKS); > + if (!res) > + return -ENODEV; If there are 3 GPIO blocks, simply spawn 3 struct gpio_chip's so you can use the generic accessors? > + /* YU ARM GPIO Lock address */ > + res = platform_get_resource(pdev, IORESOURCE_MEM, ARM_GPIO_LOCK); > + if (!res) > + return -ENOMEM; If the direction setting needs some special lock/unlock to happen, why not just override the .set/get_direction() callbacks? I would recommend: - Split in one gpio_chip per instance - Look at drivers/gpio/gpio-ftgpio010.c on how to populate callbacks for each with bgpio_init() - In struct mlxbf2_gpio_state create some custom direction callbacks to store what comes back in direction_input/output and indirect the calls from direction_input/output to these with locking folded in. Yours, Linus Walleij