From patchwork Tue Apr 12 17:32:50 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Alvin_=C5=A0ipraga?= X-Patchwork-Id: 560255 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 75A62C433EF for ; Tue, 12 Apr 2022 17:33:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1358266AbiDLRfm (ORCPT ); Tue, 12 Apr 2022 13:35:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44950 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1358172AbiDLRfh (ORCPT ); Tue, 12 Apr 2022 13:35:37 -0400 Received: from mail-ej1-x62e.google.com (mail-ej1-x62e.google.com [IPv6:2a00:1450:4864:20::62e]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2485360CC6 for ; Tue, 12 Apr 2022 10:33:17 -0700 (PDT) Received: by mail-ej1-x62e.google.com with SMTP id p15so38725237ejc.7 for ; Tue, 12 Apr 2022 10:33:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pqrs.dk; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=BOCNcCHoaIr0UXliwrJtAEwwXS/NvvZL8YTtuwi1Q8I=; b=iHELwmNmfRPmhT2mcePy8V126zUYxP288c4x/DaVpxBd+Ia45EgELwIgJJlFrCUkPv 1OCBHmkPchCgI7QYJV9s4SsJvqY0RQtXUvJL367LXF9NXdI5/b42hFMpW/iU0jxz+eNV zBx14NzL6aPnYAu9YiOxitFQVwJ3xl6wtM/jU= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=BOCNcCHoaIr0UXliwrJtAEwwXS/NvvZL8YTtuwi1Q8I=; b=JW7sPAJxgahzJX1Xfw+FTArC/eFT8epLvzzp+2OQwHNChDifaLh9Djl8F55uKq6fNf Wwz8CPMF/VnmsB0BVPhIzuXjc1rbEyBa28Ooyc4oeQhO+qknNx6H16dqVd/kSQCZiJa5 6rARhl+u5pzZUcBcmdHFk34oa3pL+6qdnhlSWFUR0C7RZEXNxDziMkx/9oJ35C9dg4bs S4FuAAcPEeI1mV7rAWvVOsioa2WjVhSbUjcD/pnkB0sv/KEkafxAvCfUlu939wO7/9Vz ya+dZ5NMomDqTQYF/zA7PQLaaZI4tcCPh1fwfG3ZJFXij8GDtj6yPcrvRxi7AkwPFrm+ 0VHg== X-Gm-Message-State: AOAM533KRgC5/vFsdwCF4mlKnCox9SMVpTg7g9FjdtpMvcNkSSElUZIV To9vflqqoTr+/KByYNZd4OhVUg== X-Google-Smtp-Source: ABdhPJwCtPsuDTZv3XuWBYconHvJf5mN0jA4xePfXqMg/VNm92xTiBzJMxj6pVzB9PE/o9gmCPJYsw== X-Received: by 2002:a17:907:2bf4:b0:6e8:93d4:46e9 with SMTP id gv52-20020a1709072bf400b006e893d446e9mr10052342ejc.69.1649784795512; Tue, 12 Apr 2022 10:33:15 -0700 (PDT) Received: from capella.. (80.71.142.18.ipv4.parknet.dk. [80.71.142.18]) by smtp.gmail.com with ESMTPSA id o3-20020aa7dd43000000b00419db53ae65sm56142edw.7.2022.04.12.10.33.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Apr 2022 10:33:15 -0700 (PDT) From: =?utf-8?q?Alvin_=C5=A0ipraga?= To: Greg Kroah-Hartman , Sasha Levin , stable@vger.kernel.org, Linus Walleij , Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Jakub Kicinski , Michael Rasmussen , Luiz Angelo Daros de Luca , =?utf-8?q?Alvin_=C5=A0iprag?= =?utf-8?q?a?= Cc: netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH stable 5.16+ 1/3] net: dsa: realtek: allow subdrivers to externally lock regmap Date: Tue, 12 Apr 2022 19:32:50 +0200 Message-Id: <20220412173253.2247196-2-alvin@pqrs.dk> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220412173253.2247196-1-alvin@pqrs.dk> References: <20220412173253.2247196-1-alvin@pqrs.dk> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Alvin Šipraga [ Upstream commit 907e772f6f6debb610ea28298ab57b31019a4edb ] Currently there is no way for Realtek DSA subdrivers to serialize consecutive regmap accesses. In preparation for a bugfix relating to indirect PHY register access - which involves a series of regmap reads and writes - add a facility for subdrivers to serialize their regmap access. Specifically, a mutex is added to the driver private data structure and the standard regmap is initialized with custom lock/unlock ops which use this mutex. Then, a "nolock" variant of the regmap is added, which is functionally equivalent to the existing regmap except that regmap locking is disabled. Functions that wish to serialize a sequence of regmap accesses may then lock the newly introduced driver-owned mutex before using the nolock regmap. Doing things this way means that subdriver code that doesn't care about serialized register access - i.e. the vast majority of code - needn't worry about synchronizing register access with an external lock: it can just continue to use the original regmap. Another advantage of this design is that, while regmaps with locking disabled do not expose a debugfs interface for obvious reasons, there still exists the original regmap which does expose this interface. This interface remains safe to use even combined with driver codepaths that use the nolock regmap, because said codepaths will use the same mutex to synchronize access. With respect to disadvantages, it can be argued that having near-duplicate regmaps is confusing. However, the naming is rather explicit, and examples will abound. Finally, while we are at it, rename realtek_smi_mdio_regmap_config to realtek_smi_regmap_config. This makes it consistent with the naming realtek_mdio_regmap_config in realtek-mdio.c. Signed-off-by: Alvin Šipraga Reviewed-by: Vladimir Oltean Signed-off-by: David S. Miller [alsi: backport to 5.16: s/priv/smi/g and remove realtek-mdio changes] Cc: stable@vger.kernel.org # v5.16+ Signed-off-by: Alvin Šipraga --- drivers/net/dsa/realtek/realtek-smi-core.c | 48 ++++++++++++++++++++-- drivers/net/dsa/realtek/realtek-smi-core.h | 2 + 2 files changed, 47 insertions(+), 3 deletions(-) diff --git a/drivers/net/dsa/realtek/realtek-smi-core.c b/drivers/net/dsa/realtek/realtek-smi-core.c index c66ebd0ee217..129ddee41928 100644 --- a/drivers/net/dsa/realtek/realtek-smi-core.c +++ b/drivers/net/dsa/realtek/realtek-smi-core.c @@ -315,7 +315,21 @@ static int realtek_smi_read(void *ctx, u32 reg, u32 *val) return realtek_smi_read_reg(smi, reg, val); } -static const struct regmap_config realtek_smi_mdio_regmap_config = { +static void realtek_smi_lock(void *ctx) +{ + struct realtek_smi *smi = ctx; + + mutex_lock(&smi->map_lock); +} + +static void realtek_smi_unlock(void *ctx) +{ + struct realtek_smi *smi = ctx; + + mutex_unlock(&smi->map_lock); +} + +static const struct regmap_config realtek_smi_regmap_config = { .reg_bits = 10, /* A4..A0 R4..R0 */ .val_bits = 16, .reg_stride = 1, @@ -325,6 +339,21 @@ static const struct regmap_config realtek_smi_mdio_regmap_config = { .reg_read = realtek_smi_read, .reg_write = realtek_smi_write, .cache_type = REGCACHE_NONE, + .lock = realtek_smi_lock, + .unlock = realtek_smi_unlock, +}; + +static const struct regmap_config realtek_smi_nolock_regmap_config = { + .reg_bits = 10, /* A4..A0 R4..R0 */ + .val_bits = 16, + .reg_stride = 1, + /* PHY regs are at 0x8000 */ + .max_register = 0xffff, + .reg_format_endian = REGMAP_ENDIAN_BIG, + .reg_read = realtek_smi_read, + .reg_write = realtek_smi_write, + .cache_type = REGCACHE_NONE, + .disable_locking = true, }; static int realtek_smi_mdio_read(struct mii_bus *bus, int addr, int regnum) @@ -388,6 +417,7 @@ static int realtek_smi_probe(struct platform_device *pdev) const struct realtek_smi_variant *var; struct device *dev = &pdev->dev; struct realtek_smi *smi; + struct regmap_config rc; struct device_node *np; int ret; @@ -398,14 +428,26 @@ static int realtek_smi_probe(struct platform_device *pdev) if (!smi) return -ENOMEM; smi->chip_data = (void *)smi + sizeof(*smi); - smi->map = devm_regmap_init(dev, NULL, smi, - &realtek_smi_mdio_regmap_config); + + mutex_init(&smi->map_lock); + + rc = realtek_smi_regmap_config; + rc.lock_arg = smi; + smi->map = devm_regmap_init(dev, NULL, smi, &rc); if (IS_ERR(smi->map)) { ret = PTR_ERR(smi->map); dev_err(dev, "regmap init failed: %d\n", ret); return ret; } + rc = realtek_smi_nolock_regmap_config; + smi->map_nolock = devm_regmap_init(dev, NULL, smi, &rc); + if (IS_ERR(smi->map_nolock)) { + ret = PTR_ERR(smi->map_nolock); + dev_err(dev, "regmap init failed: %d\n", ret); + return ret; + } + /* Link forward and backward */ smi->dev = dev; smi->clk_delay = var->clk_delay; diff --git a/drivers/net/dsa/realtek/realtek-smi-core.h b/drivers/net/dsa/realtek/realtek-smi-core.h index faed387d8db3..5fcad51e1984 100644 --- a/drivers/net/dsa/realtek/realtek-smi-core.h +++ b/drivers/net/dsa/realtek/realtek-smi-core.h @@ -49,6 +49,8 @@ struct realtek_smi { struct gpio_desc *mdc; struct gpio_desc *mdio; struct regmap *map; + struct regmap *map_nolock; + struct mutex map_lock; struct mii_bus *slave_mii_bus; unsigned int clk_delay; From patchwork Tue Apr 12 17:32:52 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?utf-8?q?Alvin_=C5=A0ipraga?= X-Patchwork-Id: 560254 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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id D63DFC433F5 for ; Tue, 12 Apr 2022 17:33:31 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S242066AbiDLRfs (ORCPT ); Tue, 12 Apr 2022 13:35:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45114 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1358237AbiDLRfm (ORCPT ); Tue, 12 Apr 2022 13:35:42 -0400 Received: from mail-ej1-x630.google.com (mail-ej1-x630.google.com [IPv6:2a00:1450:4864:20::630]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1D02961A02 for ; Tue, 12 Apr 2022 10:33:21 -0700 (PDT) Received: by mail-ej1-x630.google.com with SMTP id i27so38741965ejd.9 for ; Tue, 12 Apr 2022 10:33:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=pqrs.dk; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=DC9ar6WVuy8H//hRbG7nMUtpZuF4AvspHn0mVs8y4F4=; b=dzanuMKUFyt8XFvAW++8zP2aQ3lZU4nsxEF4W2HXgX3INmny7m55Z4SYmUhODKnOCh 9O6Vjmvf4LIgYdK4CB0wbk5yonLYwN+vpxvy7guN1JxNSUh1E5SB55oV/pukdi7+Wv6K ZlI3TfabmMQXNgGpqT2kCmUfoFgd/iDhartcY= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=DC9ar6WVuy8H//hRbG7nMUtpZuF4AvspHn0mVs8y4F4=; b=td4uMs/fGxE3WzXmkCwdxNe+hFDaNxBLhtda6gZ4L6PiYVM/XQFgMdMtEvuYKEkbvK 5c5AY/g+fMu47Vkq26JZETwZ6CSRqXGTVdF3xhakGFeBaXnzkly4AJbvRsmeBclK6XqB tRL+PGcFgRRItDz0bLyRu77PCPxrXk3+ZAs+Irc6YEBa/vXIZ4sioHhTMSdvr4vf00pi fVbQUZOZy8kpTqGAVcezjYFIEoB0O2xaAHs5kuQknTS/hCNXMnJAg2Spse1LxNN6GmxO ErbnwnUPNqgQScos7BZxc5Xp62Ha9JGh7gb13KZ/t9Eg2e6SsaaZuYZkjqW8Mdtgbwx6 spkg== X-Gm-Message-State: AOAM530plft1xkfowfw01oLi7BcKnRL78i5Xo4DXmwozxkNRo8Dv0rbr XpkE0zw1VOZxh58ebWqJDL/glQ== X-Google-Smtp-Source: ABdhPJwhHDhcrRl1hoquPk1uVIXdYrKQmJhG0BOzDhXrDr+tJG0QcTjI1W96DDU6NAzAp9Cnx2IYBg== X-Received: by 2002:a17:907:6d0b:b0:6e8:b449:df70 with SMTP id sa11-20020a1709076d0b00b006e8b449df70mr3383233ejc.533.1649784799698; Tue, 12 Apr 2022 10:33:19 -0700 (PDT) Received: from capella.. (80.71.142.18.ipv4.parknet.dk. [80.71.142.18]) by smtp.gmail.com with ESMTPSA id o3-20020aa7dd43000000b00419db53ae65sm56142edw.7.2022.04.12.10.33.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 12 Apr 2022 10:33:19 -0700 (PDT) From: =?utf-8?q?Alvin_=C5=A0ipraga?= To: Greg Kroah-Hartman , Sasha Levin , stable@vger.kernel.org, Linus Walleij , Andrew Lunn , Vivien Didelot , Florian Fainelli , Vladimir Oltean , "David S. Miller" , Jakub Kicinski , =?utf-8?q?Alvin_=C5=A0ipraga?= , Luiz Angelo Daros de Luca Cc: Michael Rasmussen , netdev@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH stable 5.16+ 3/3] net: dsa: realtek: make interface drivers depend on OF Date: Tue, 12 Apr 2022 19:32:52 +0200 Message-Id: <20220412173253.2247196-4-alvin@pqrs.dk> X-Mailer: git-send-email 2.35.1 In-Reply-To: <20220412173253.2247196-1-alvin@pqrs.dk> References: <20220412173253.2247196-1-alvin@pqrs.dk> MIME-Version: 1.0 Precedence: bulk List-ID: X-Mailing-List: stable@vger.kernel.org From: Alvin Šipraga [ Upstream commit 109d899452ba17996eccec7ae8249fb1f8900a16 ] The kernel test robot reported build warnings with a randconfig that built realtek-{smi,mdio} without CONFIG_OF set. Since both interface drivers are using OF and will not probe without, add the corresponding dependency to Kconfig. Link: https://lore.kernel.org/all/202203231233.Xx73Y40o-lkp@intel.com/ Link: https://lore.kernel.org/all/202203231439.ycl0jg50-lkp@intel.com/ Fixes: aac94001067d ("net: dsa: realtek: add new mdio interface for drivers") Fixes: 765c39a4fafe ("net: dsa: realtek: convert subdrivers into modules") Signed-off-by: Alvin Šipraga Reviewed-by: Andrew Lunn Acked-by: Luiz Angelo Daros de Luca Link: https://lore.kernel.org/r/20220323124225.91763-1-alvin@pqrs.dk Signed-off-by: Jakub Kicinski [alsi: backport to 5.16: remove mdio part] Cc: stable@vger.kernel.org # v5.16+ Signed-off-by: Alvin Šipraga --- drivers/net/dsa/realtek/Kconfig | 1 + 1 file changed, 1 insertion(+) diff --git a/drivers/net/dsa/realtek/Kconfig b/drivers/net/dsa/realtek/Kconfig index 1c62212fb0ec..1315896ed6e2 100644 --- a/drivers/net/dsa/realtek/Kconfig +++ b/drivers/net/dsa/realtek/Kconfig @@ -14,6 +14,7 @@ menuconfig NET_DSA_REALTEK config NET_DSA_REALTEK_SMI tristate "Realtek SMI connected switch driver" depends on NET_DSA_REALTEK + depends on OF default y help Select to enable support for registering switches connected