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 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 smtp.lore.kernel.org (Postfix) with ESMTPS id D5CFFC10F16 for ; Sat, 27 Apr 2024 11:06:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:Cc:To:Date:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=sdGV0tkW/JOOybpqMtdEWQtSSVrF5IVw//cAS9mcBMY=; b=USY1S9XAIH1osr WWLyneQTOt5K6MpDPDAcVgmL433Z52f7lBOqHgxBPrradB2V6n4K+tc2Tj02ZGmk2cQQXlAoueL/L nravTheoxQJ6oAnao/XbmTNw+uZynJPyxaHnwKUyVcZbBn3cECKRliTB6gFdPCz07US64m3txK95V 0Re6c16FbWIrTRsYD5DymR0n6eH7TyLwOz/SYfoAOH9AJ1hbuzayCj3xM92fKF/H+IsTeQVdOwDFy sF83rM72bJMaT4As04ZuO3xEvpjDBxJRJNyLo3cPLk2sxQMcRSDIVGjUCbZZ6aCznaOm1DdGAECS+ 5gFBvE3D3IZwRuB3Go0w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1s0fso-0000000FNEn-0n30; Sat, 27 Apr 2024 11:06:18 +0000 Received: from mail-ed1-x52d.google.com ([2a00:1450:4864:20::52d]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1s0fsl-0000000FNCY-0l1v for linux-arm-kernel@lists.infradead.org; Sat, 27 Apr 2024 11:06:16 +0000 Received: by mail-ed1-x52d.google.com with SMTP id 4fb4d7f45d1cf-56e477db7fbso4598673a12.3 for ; Sat, 27 Apr 2024 04:06:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.com; s=google; t=1714215972; x=1714820772; darn=lists.infradead.org; h=in-reply-to:content-disposition:mime-version:references :mail-followup-to:message-id:subject:cc:to:date:from:from:to:cc :subject:date:message-id:reply-to; bh=3nJLzCnFueUsIeTWZoXHlGujeNC5xYYi6/RyE8VW2No=; b=C1SSRPIn9/41tYtxuY2R6i0AfTo3ldnoIwNqHq6gzK8wwsb2WjQsfQQnx1EIxBRH24 yMXB1OvjYkadEBbZVXnegfkt8kD5AcUlCnH1Fg2mDnA30Skxj/XfC04NQqweTpPLkQaJ Hw8bF3kkHp5xfalUOnQc8m7u9NgZ4nUzYiXfIxf7E2jkvqbY71E9FAj0aT/ljjly+BVt Ss8gj1fed/8XBl41pwKkdcU6aMACo32PyfV/5uC30sZM76EuTxYdN0qC1OGBhHSQtuJt AzRAyr6ZqK/2L/YTAUuWBPLYlTP98/UJMcX96RcnGojXlYqXK8tCD1aWjyrvYoGRmm5b Nvug== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1714215972; x=1714820772; h=in-reply-to:content-disposition:mime-version:references :mail-followup-to:message-id:subject:cc:to:date:from :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=3nJLzCnFueUsIeTWZoXHlGujeNC5xYYi6/RyE8VW2No=; b=oaWwo2+n1nMqh5ZXjfb3i3LZFWE/WKA0Y+D2HssedMJScvCw5taPVxY7/tTaTvlxf5 cL6pWTPb8QmslVtwWsHNSZr5Z863A7F0Em225Qh9r1FHM3RIaAK3V6hgg1budZGsliFK CuTu03OWer2lh7UZlMtQ/y9xf+y1UAmjTHXkydDC/zx3+u7rZpS13dz6/FtR1cEhdjqK L8kPIqDUHyJzzp+gRZY5wMPAYdFltFnt4xETsznwQi9W8DD5v5mBi375SMotDWM2XGKB Gudy1nF+Enr9VPTucehWbLV5wQrlrhGtWK4YELE/+KY2mtD+pMs0hWeL7UDURda0o4Zn mPnQ== X-Forwarded-Encrypted: i=1; AJvYcCXDGKaCTUV9P6ThCr/x9Lz510i0xUQjW0tlbJaCmANTAqiF8tA1xckmrHguj+ZklXhZ3yxAQV5jiREswXlpNNZ7UcB8twchFQhVK6HcFV8S0GljEQA= X-Gm-Message-State: AOJu0YxYIJkhFmoVq24ZWeaabUxMqpnYE/W6Ea3U9sMlfs0shOfwjh6j McQ2s9l6tMGkM2ww8SzAncnyS6JH5AF7WJdDSgMypfZKsGTRcSUrBrYPbszrKhM= X-Google-Smtp-Source: AGHT+IFjaaTuiL/g0Z6kLt7soHJxlk8fpucimHtMMJnKP07QMzasVrQHJk9xNhbRR49iV5OHL8EFzA== X-Received: by 2002:a17:906:70b:b0:a58:7985:8eae with SMTP id y11-20020a170906070b00b00a5879858eaemr3611972ejb.76.1714215972297; Sat, 27 Apr 2024 04:06:12 -0700 (PDT) Received: from localhost (host-87-1-234-99.retail.telecomitalia.it. [87.1.234.99]) by smtp.gmail.com with ESMTPSA id k25-20020a1709062a5900b00a55a06d7744sm8531708eje.73.2024.04.27.04.06.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 27 Apr 2024 04:06:12 -0700 (PDT) From: Andrea della Porta X-Google-Original-From: Andrea della Porta Date: Sat, 27 Apr 2024 13:06:13 +0200 To: Florian Fainelli Cc: Andrea della Porta , Ulf Hansson , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Broadcom internal kernel review list , Linus Walleij , Adrian Hunter , Kamal Dasu , Al Cooper , linux-mmc@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, Jonathan Bell , Phil Elwell Subject: Re: [PATCH 4/6] pinctrl: bcm: Add pinconf/pinmux controller driver for BCM2712 Message-ID: Mail-Followup-To: Florian Fainelli , Andrea della Porta , Ulf Hansson , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Broadcom internal kernel review list , Linus Walleij , Adrian Hunter , Kamal Dasu , Al Cooper , linux-mmc@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org, Jonathan Bell , Phil Elwell References: <8fb5dde9404875777587c867e7bdb4f691ab83f2.1713036964.git.andrea.porta@suse.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240427_040615_251115_53F527B8 X-CRM114-Status: GOOD ( 37.50 ) 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 09:00 Sun 14 Apr , Florian Fainelli wrote: > > > On 4/13/2024 3:14 PM, Andrea della Porta wrote: > > Add a pincontrol driver for BCM2712. BCM2712 allows muxing GPIOs > > and setting configuration on pads. > > > > Originally-by: Jonathan Bell > > Originally-by: Phil Elwell > > Is that a new tag in a comment message? Signed-off-by maybe? > > > Signed-off-by: Andrea della Porta > > --- > > Was not pinctrl-single usable somehow that we had to go through a dedicated > pinctrl driver? > I'm taking a look on this. In V2 though, the pin controller will not be present since it's not strictly necessary tobe able to boot from sd card. > > drivers/pinctrl/bcm/Kconfig | 9 + > > drivers/pinctrl/bcm/Makefile | 1 + > > drivers/pinctrl/bcm/pinctrl-bcm2712.c | 1247 +++++++++++++++++++++++++ > > 3 files changed, 1257 insertions(+) > > create mode 100644 drivers/pinctrl/bcm/pinctrl-bcm2712.c > > > > diff --git a/drivers/pinctrl/bcm/Kconfig b/drivers/pinctrl/bcm/Kconfig > > index 35b51ce4298e..62ede44460bc 100644 > > --- a/drivers/pinctrl/bcm/Kconfig > > +++ b/drivers/pinctrl/bcm/Kconfig > > @@ -3,6 +3,15 @@ > > # Broadcom pinctrl drivers > > # > > +config PINCTRL_BCM2712 > > + bool "Broadcom BCM2712 PINCONF driver" > > + depends on OF && (ARCH_BCM2835 || ARCH_BRCMSTB || COMPILE_TEST) > > + select PINMUX > > + select PINCONF > > + select GENERIC_PINCONF > > Rename to PINCTRL_BRCMSTB sicne this is not BCM2712 specific at all. > > > + help > > + Say Y here to enable the Broadcom BCM2712 PINCONF driver. > > + > > config PINCTRL_BCM281XX > > bool "Broadcom BCM281xx pinctrl driver" > > depends on OF && (ARCH_BCM_MOBILE || COMPILE_TEST) > > diff --git a/drivers/pinctrl/bcm/Makefile b/drivers/pinctrl/bcm/Makefile > > index 82b868ec1471..d298e4785829 100644 > > --- a/drivers/pinctrl/bcm/Makefile > > +++ b/drivers/pinctrl/bcm/Makefile > > @@ -1,6 +1,7 @@ > > # SPDX-License-Identifier: GPL-2.0 > > # Broadcom pinctrl support > > +obj-$(CONFIG_PINCTRL_BCM2712) += pinctrl-bcm2712.o > > Likewise. > > > obj-$(CONFIG_PINCTRL_BCM281XX) += pinctrl-bcm281xx.o > > obj-$(CONFIG_PINCTRL_BCM2835) += pinctrl-bcm2835.o > > obj-$(CONFIG_PINCTRL_BCM4908) += pinctrl-bcm4908.o > > diff --git a/drivers/pinctrl/bcm/pinctrl-bcm2712.c b/drivers/pinctrl/bcm/pinctrl-bcm2712.c > > new file mode 100644 > > index 000000000000..f9359e9eff14 > > --- /dev/null > > +++ b/drivers/pinctrl/bcm/pinctrl-bcm2712.c > > @@ -0,0 +1,1247 @@ > > +// SPDX-License-Identifier: GPL-2.0+ > > +/* > > + * Driver for Broadcom BCM2712 GPIO units (pinctrl only) > > + * > > + * Copyright (C) 2021-3 Raspberry Pi Ltd. > > + * Copyright (C) 2012 Chris Boot, Simon Arlott, Stephen Warren > > + * > > + * Based heavily on the BCM2835 GPIO & pinctrl driver, which was inspired by: > > + * pinctrl-nomadik.c, please see original file for copyright information > > + * pinctrl-tegra.c, please see original file for copyright information > > + */ > > + > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > +#include > > + > > +#define MODULE_NAME "pinctrl-bcm2712" > > + > > +/* Register offsets */ > > + > > +#define BCM2712_PULL_NONE 0 > > +#define BCM2712_PULL_DOWN 1 > > +#define BCM2712_PULL_UP 2 > > +#define BCM2712_PULL_MASK 0x3 > > + > > +#define BCM2712_FSEL_COUNT 9 > > +#define BCM2712_FSEL_MASK 0xf > > + > > +#define FUNC(f) \ > > + [func_##f] = #f > > +#define PIN(i, f1, f2, f3, f4, f5, f6, f7, f8) \ > > + [i] = { \ > > + .funcs = { \ > > + func_##f1, \ > > + func_##f2, \ > > + func_##f3, \ > > + func_##f4, \ > > + func_##f5, \ > > + func_##f6, \ > > + func_##f7, \ > > + func_##f8, \ > > + }, \ > > + } > > + > > +#define MUX_BIT_VALID 0x8000 > > +#define REG_BIT_INVALID 0xffff > > + > > +#define BIT_TO_REG(b) (((b) >> 5) << 2) > > +#define BIT_TO_SHIFT(b) ((b) & 0x1f) > > + > > +#define MUX_BIT(mr, mb) (MUX_BIT_VALID + ((mr)*4)*8 + (mb)*4) > > +#define GPIO_REGS(n, mr, mb, pr, pb) \ > > + [n] = { MUX_BIT(mr, mb), ((pr)*4)*8 + (pb)*2 } > > + > > +#define EMMC_REGS(n, pr, pb) \ > > + [n] = { 0, ((pr)*4)*8 + (pb)*2 } > > + > > +#define AGPIO_REGS(n, mr, mb, pr, pb) \ > > + [n] = { MUX_BIT(mr, mb), ((pr)*4)*8 + (pb)*2 } > > + > > +#define SGPIO_REGS(n, mr, mb) \ > > + [n+32] = { MUX_BIT(mr, mb), REG_BIT_INVALID } > > + > > +#define GPIO_PIN(a) PINCTRL_PIN(a, "gpio" #a) > > +#define AGPIO_PIN(a) PINCTRL_PIN(a, "aon_gpio" #a) > > +#define SGPIO_PIN(a) PINCTRL_PIN(a+32, "aon_sgpio" #a) > > + > > +struct pin_regs { > > + u16 mux_bit; > > + u16 pad_bit; > > +}; > > + > > +struct bcm2712_pinctrl { > > + struct device *dev; > > + void __iomem *base; > > + struct pinctrl_dev *pctl_dev; > > + struct pinctrl_desc pctl_desc; > > + const struct pin_regs *pin_regs; > > + const struct bcm2712_pin_funcs *pin_funcs; > > + const char *const *gpio_groups; > > + struct pinctrl_gpio_range gpio_range; > > + spinlock_t lock; > > +}; > > Please s/bcm2712/brcmstb/ throughout the driver's structures and any > declaration that is not inherently 2712 specific and just make 2712 the > first instance using this driver. > > > + > > +struct bcm_plat_data { > > + const struct pinctrl_desc *pctl_desc; > > + const struct pinctrl_gpio_range *gpio_range; > > + const struct pin_regs *pin_regs; > > + const struct bcm2712_pin_funcs *pin_funcs; > > +}; > > + > > +struct bcm2712_pin_funcs { > > + u8 funcs[BCM2712_FSEL_COUNT - 1]; > > +}; > > + > > [snip] > > > +static int bcm2712_pinctrl_probe(struct platform_device *pdev) > > +{ > > + struct device *dev = &pdev->dev; > > + //struct device_node *np = dev->of_node; > > + const struct bcm_plat_data *pdata; > > + //const struct of_device_id *match; > > + struct bcm2712_pinctrl *pc; > > + const char **names; > > + int num_pins, i; > > + > > + pdata = device_get_match_data(&pdev->dev); > > + if (!pdata) > > + return -EINVAL; > > + > > + pc = devm_kzalloc(dev, sizeof(*pc), GFP_KERNEL); > > + if (!pc) > > + return -ENOMEM; > > + > > + platform_set_drvdata(pdev, pc); > > + pc->dev = dev; > > + spin_lock_init(&pc->lock); > > + > > + //pc->base = devm_of_iomap(dev, np, 0, NULL); > > Remove stray commented lines. > > > + pc->base = devm_platform_ioremap_resource(pdev, 0); > > + if (WARN_ON(IS_ERR(pc->base))) { > > + //dev_err(dev, "could not get IO memory\n"); > > + return PTR_ERR(pc->base); > > + } > > + > > + pc->pctl_desc = *pdata->pctl_desc; > > + num_pins = pc->pctl_desc.npins; > > + names = devm_kmalloc_array(dev, num_pins, sizeof(const char *), > > + GFP_KERNEL); > > + if (!names) > > + return -ENOMEM; > > + for (i = 0; i < num_pins; i++) > > + names[i] = pc->pctl_desc.pins[i].name; > > + pc->gpio_groups = names; > > + pc->pin_regs = pdata->pin_regs; > > + pc->pin_funcs = pdata->pin_funcs; > > + pc->pctl_dev = devm_pinctrl_register(dev, &pc->pctl_desc, pc); > > + if (IS_ERR(pc->pctl_dev)) > > + return PTR_ERR(pc->pctl_dev); > > + > > + pc->gpio_range = *pdata->gpio_range; > > + pinctrl_add_gpio_range(pc->pctl_dev, &pc->gpio_range); > > + > > + return 0; > > +} > > + > > +static struct platform_driver bcm2712_pinctrl_driver = { > > + .probe = bcm2712_pinctrl_probe, > > + .driver = { > > + .name = MODULE_NAME, > > + .of_match_table = bcm2712_pinctrl_match, > > + .suppress_bind_attrs = true, > > + }, > > +}; > > +builtin_platform_driver(bcm2712_pinctrl_driver); > > There is no MODULE_LICENSE(), MODULE_AUTHOR() or MODULE_DESCRIPTION(), > please provide some. > -- > Florian _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel