From patchwork Mon Sep 24 22:17:46 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Bjorn Andersson X-Patchwork-Id: 974141 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=linux-gpio-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: ozlabs.org; dkim=pass (1024-bit key; unprotected) header.d=linaro.org header.i=@linaro.org header.b="Otz16K3W"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 42Jz791wt1z9sB5 for ; Tue, 25 Sep 2018 08:16:05 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727113AbeIYEUU (ORCPT ); Tue, 25 Sep 2018 00:20:20 -0400 Received: from mail-pf1-f193.google.com ([209.85.210.193]:41387 "EHLO mail-pf1-f193.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728655AbeIYETs (ORCPT ); Tue, 25 Sep 2018 00:19:48 -0400 Received: by mail-pf1-f193.google.com with SMTP id m77-v6so1038219pfi.8 for ; Mon, 24 Sep 2018 15:15:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=SO/3cf37R4ebJVtFjkJ+OYsW0d2PxXmlpjfBXEFAL6E=; b=Otz16K3WmK0f2me16BU3f6oTm3+JyJMrXYNTA7CZyOsM7Gpr2GaHHgrtKL/d/OlMHS c+S6eea51novvS7rZdkRVncWDtGxCmoVdKeaVeb4rGqWV14C88YKsWoqM2QgSzfKKSbn EJMHwiUY2jYnpqeUAqtvKZHIJJcVhlF86wjkg= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=SO/3cf37R4ebJVtFjkJ+OYsW0d2PxXmlpjfBXEFAL6E=; b=Nu+kZ5ebUfW1V4Iw3zR/cMft0be0U9mXPP9du72lnG/gHfh5ECsYzWVlGqrmDZ6vCl Bd6Fi3Z03DMMe6uhlpeG/zc9FgdKc8kJSnLAHhnwljOQd3mH3dDkBMQQvUiC2ZBczGSx 102mxx8+xRtRaZrM1as3CyrZIdfpZttEeNoekDk1yxJ/bFBCTYm//hufDZ49IkKEjN+v HqWidXcrfdYWtyrdlJvLouDX6pMBfbKHWgYJh0FGzN0OcVXYPrQoW4f+6YY+OljOn8Hh 3KK0jJ+X/zWITyJs94zqEZqHqznAU53VMomNSOXEiNZESjnAfK2Mq9ZL4Cv6Uu5QFIDk S3Ng== X-Gm-Message-State: ABuFfoi/U9oBtSEA+RJtmNkjC7ctMYpYU2CsAiDhDLvZXot0ji4cWNIy iKxIi5TixWO8j3+QtMKYawtTew== X-Google-Smtp-Source: ACcGV6270+JH0z3e+TVS33cnlMnVRasnX95SdkK44axYuu13S44oqw0L4fM8iYW5MYoF3NNorXpGiQ== X-Received: by 2002:a17:902:76c8:: with SMTP id j8-v6mr478226plt.161.1537827325958; Mon, 24 Sep 2018 15:15:25 -0700 (PDT) Received: from localhost.localdomain (104-188-17-28.lightspeed.sndgca.sbcglobal.net. [104.188.17.28]) by smtp.gmail.com with ESMTPSA id w23-v6sm386260pgi.18.2018.09.24.15.15.24 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 24 Sep 2018 15:15:25 -0700 (PDT) From: Bjorn Andersson To: Bjorn Andersson , Linus Walleij Cc: Rob Herring , Mark Rutland , linux-arm-msm@vger.kernel.org, linux-gpio@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2 2/4] pinctrl: qcom: Support dispersed tiles Date: Mon, 24 Sep 2018 15:17:46 -0700 Message-Id: <20180924221748.21584-3-bjorn.andersson@linaro.org> X-Mailer: git-send-email 2.18.0 In-Reply-To: <20180924221748.21584-1-bjorn.andersson@linaro.org> References: <20180924221748.21584-1-bjorn.andersson@linaro.org> Sender: linux-gpio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org On some new platforms the tiles have been placed too far apart to be covered in a single ioremap. Turn "regs" into an array of base addresses and make the pingroup carry the information about which tile the pin resides in. For existing platforms we map the first entry regs and the existing pingroups will all use tile 0, meaning that there's no functional change. Signed-off-by: Bjorn Andersson --- Changes since v1: - None drivers/pinctrl/qcom/pinctrl-msm.c | 30 +++++++++++++++++++++--------- drivers/pinctrl/qcom/pinctrl-msm.h | 4 ++++ 2 files changed, 25 insertions(+), 9 deletions(-) diff --git a/drivers/pinctrl/qcom/pinctrl-msm.c b/drivers/pinctrl/qcom/pinctrl-msm.c index ac724a357bd6..6f02bbdb0865 100644 --- a/drivers/pinctrl/qcom/pinctrl-msm.c +++ b/drivers/pinctrl/qcom/pinctrl-msm.c @@ -37,6 +37,7 @@ #include "../pinctrl-utils.h" #define MAX_NR_GPIO 300 +#define MAX_NR_TILES 4 #define PS_HOLD_OFFSET 0x820 /** @@ -52,7 +53,7 @@ * @dual_edge_irqs: Bitmap of irqs that need sw emulated dual edge * detection. * @soc; Reference to soc_data of platform specific data. - * @regs: Base address for the TLMM register map. + * @regs: Base addresses for the TLMM tiles. */ struct msm_pinctrl { struct device *dev; @@ -70,19 +71,19 @@ struct msm_pinctrl { DECLARE_BITMAP(enabled_irqs, MAX_NR_GPIO); const struct msm_pinctrl_soc_data *soc; - void __iomem *regs; + void __iomem *regs[MAX_NR_TILES]; }; #define MSM_ACCESSOR(name) \ static u32 msm_readl_##name(struct msm_pinctrl *pctrl, \ const struct msm_pingroup *g) \ { \ - return readl(pctrl->regs + g->name##_reg); \ + return readl(pctrl->regs[g->tile] + g->name##_reg); \ } \ static void msm_writel_##name(u32 val, struct msm_pinctrl *pctrl, \ const struct msm_pingroup *g) \ { \ - writel(val, pctrl->regs + g->name##_reg); \ + writel(val, pctrl->regs[g->tile] + g->name##_reg); \ } MSM_ACCESSOR(ctl) @@ -1022,7 +1023,7 @@ static int msm_ps_hold_restart(struct notifier_block *nb, unsigned long action, { struct msm_pinctrl *pctrl = container_of(nb, struct msm_pinctrl, restart_nb); - writel(0, pctrl->regs + PS_HOLD_OFFSET); + writel(0, pctrl->regs[0] + PS_HOLD_OFFSET); mdelay(1000); return NOTIFY_DONE; } @@ -1058,6 +1059,7 @@ int msm_pinctrl_probe(struct platform_device *pdev, struct msm_pinctrl *pctrl; struct resource *res; int ret; + int i; pctrl = devm_kzalloc(&pdev->dev, sizeof(*pctrl), GFP_KERNEL); if (!pctrl) @@ -1069,10 +1071,20 @@ int msm_pinctrl_probe(struct platform_device *pdev, raw_spin_lock_init(&pctrl->lock); - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - pctrl->regs = devm_ioremap_resource(&pdev->dev, res); - if (IS_ERR(pctrl->regs)) - return PTR_ERR(pctrl->regs); + if (soc_data->tiles) { + for (i = 0; i < soc_data->ntiles; i++) { + res = platform_get_resource_byname(pdev, IORESOURCE_MEM, + soc_data->tiles[i]); + pctrl->regs[i] = devm_ioremap_resource(&pdev->dev, res); + if (IS_ERR(pctrl->regs[i])) + return PTR_ERR(pctrl->regs[i]); + } + } else { + res = platform_get_resource(pdev, IORESOURCE_MEM, 0); + pctrl->regs[0] = devm_ioremap_resource(&pdev->dev, res); + if (IS_ERR(pctrl->regs[0])) + return PTR_ERR(pctrl->regs[0]); + } msm_pinctrl_setup_pm_reset(pctrl); diff --git a/drivers/pinctrl/qcom/pinctrl-msm.h b/drivers/pinctrl/qcom/pinctrl-msm.h index 9b9feea540ff..0ad4bc55e2e1 100644 --- a/drivers/pinctrl/qcom/pinctrl-msm.h +++ b/drivers/pinctrl/qcom/pinctrl-msm.h @@ -76,6 +76,8 @@ struct msm_pingroup { u32 intr_status_reg; u32 intr_target_reg; + unsigned int tile:2; + unsigned mux_bit:5; unsigned pull_bit:5; @@ -117,6 +119,8 @@ struct msm_pinctrl_soc_data { unsigned ngroups; unsigned ngpios; bool pull_no_keeper; + const char **tiles; + unsigned int ntiles; }; int msm_pinctrl_probe(struct platform_device *pdev,