From patchwork Sun Mar 9 13:29:32 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Marangi X-Patchwork-Id: 14008455 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 90AC4C2BA1B for ; Sun, 9 Mar 2025 13:35:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:To:From:Reply-To: Cc:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=zXGZSQaYq8bc/tr8X+R6iDGpv0XCfiL/MLUXqqcdlyQ=; b=Fm/WiOMY4gyp1FFqP1mvUVmFUk K/AoyMvC0zWlTMctV+vV0kEILxulr41moqHONopkmTwKzRmLF3FalDgMafWrUbXyB+rvk78pE1s3v DgHMuBnei3BO0xeMxgZ27vvLMfaHUWcjpqk/tqRGKgai0vghEezIEeLQgPKVLMq0XqxFKuxlU4Oz0 eE1fE0MFMWwNcBf4AuoVmMYGGJq0iTWNIX80/NB9N+3SMhIGnfSWI0FQf5MrbFYIwcJoGl12avPhV vnusedBo+w0p15zhecuruHRyVYjX1cwS7PYBgElLUD3nRqi00BnhgZrk9SZS4XlsXfJP8RfxrlTAi 3cSSD3Yw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1trGoi-00000000bTR-34qA; Sun, 09 Mar 2025 13:35:44 +0000 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1trGjr-00000000aQ7-26Ct; Sun, 09 Mar 2025 13:30:45 +0000 Received: by mail-wr1-x42f.google.com with SMTP id ffacd0b85a97d-39140bd6317so485125f8f.1; Sun, 09 Mar 2025 06:30:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741527040; x=1742131840; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=zXGZSQaYq8bc/tr8X+R6iDGpv0XCfiL/MLUXqqcdlyQ=; b=JDJ9J3MkrqcQXb9cx2uKgFeX+TFrG+bDs4aG8Du/Mvej7zAySo8nHp/i2yqW6u2Zg/ cmmnQPr5vAKutxn/gd6ts4OYKdBh2+rbT7P8UpaKT6i9LfX95tqixr/Ye9zMhEa8ELu5 fikoXx3eDxwhDPUqMTtx6qxBB1N3Kwq6u7SRW+W1dVbJr37Cq70RFqz8oqh+1wlFZluh wUK90lq+sVFW48CsTo+VSZBbA0muR4OJ6DU0Cn9TbhNOOCjgQk84kAPrBg2dOiEM7wm2 4/fnNla2VuqOOAKS6Rp/ICp93vA65MdvLRzAJ7zaQw+6umc4Xr/i1ZcF68pV8stq3IF5 PMBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741527040; x=1742131840; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=zXGZSQaYq8bc/tr8X+R6iDGpv0XCfiL/MLUXqqcdlyQ=; b=hfJnfiKMJSFg34oQKCGKGHFZ3q7fS2o6JsveYL9LqufAOpT3+JCSJ0aiY8V0vVlHC/ AzSzyQfi9hqsLV0NueMicFyjL69uHK1SI0BkRybiQ7QRfOPFG1tF9oXsHyHJigBtdDMa EJdpSSzugN4AO8N+pJ8CfLOCgQ+cys/EJt2HCeYC+xZDdlkCNWJZVU3zSIJH2rbRIRd7 2CdSgorXBxP2ZDAqN9gnhoxS8g81hXdGMfxC00aQsnFIBkOgHlqXCdKyWbUz+SQ+sirh 1iG8K9AtDkqtjN+CLR2diEC7uQIGxeVDu1KqIMWt8VnjSGUr1nL3jOEXfjWsZp6vMLyl tzHw== X-Forwarded-Encrypted: i=1; AJvYcCVogWUPhjUt2ixjqviOP9QzCFNjQPeCyT7BH1XA+eKa4XfRoEK3fQLhKSezy9RHJFXtgWkhsQWcqC+cD7nE4/di@lists.infradead.org, AJvYcCWbHagbC6b+r/LzbK98Pbnuv3dPh0hP0toFx6gx9bEf1D2lIIFQyd7975r66silqMhULTb4cUk1XisR@lists.infradead.org, AJvYcCWvknSzE2piy+UqOWieVrwJyAl7jz8O4p5rU7HSryhFc8DJV2TEJp3jaO0eVFR+W4idRcOavmTIAKnCbf3Djk0=@lists.infradead.org X-Gm-Message-State: AOJu0YwarTDiTduqO2F1Ve1MY705VZ+Ta342jGl0btjBZrpjhOHBet+T 1rCy254AYBONeq2tJhB3HmFec2hilPfWeVF4YX5YJDT+mCYa7NezLcC8xQ== X-Gm-Gg: ASbGnctSnSMd6TTo0bJctq0NAFWyZ+uU3J5Gu/JpcyWEyfp8RS7xdOmVJbLdRAQ+B53 ooVb77w4mpsPEvhSRsSSMHovLWIkUFYNStRTcl4MThZWablLzxIfBURgaJxV1ggnhVOztvuQLms KuM2Q8smUkTWlgs0PhmT2/qEcJLo0QgdVQsT2vGPQXYm/p7HLxGG9DLN+2zOrAJJoVZyH5SnP7T q76NYI2SBXGEbZE6+hvgDtFYcX68TUp/zy4OaNWuInftHR6DiZC3ht06r0wuuH7VKm2DV5znPcj Va5QH3A60J5UMZrVdds2L4vW0XiBRgesqpUs2zHkAJAtsAsPaKYIRYkKYsBg6mkVzXiEgojoZRD H1YarRRtE29ozRA== X-Google-Smtp-Source: AGHT+IExUCuOZLoF7gqcGan1qMq7cFGyQ2TzVW2KLuRBjuD+qOt/apk1yulFVHLpZzet4enxc1wYZQ== X-Received: by 2002:a05:6000:2ac:b0:391:3094:d696 with SMTP id ffacd0b85a97d-39132de2bdfmr5586276f8f.54.1741527039657; Sun, 09 Mar 2025 06:30:39 -0700 (PDT) Received: from localhost.localdomain (93-34-90-129.ip49.fastwebnet.it. [93.34.90.129]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-3912bee262esm11867536f8f.0.2025.03.09.06.30.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 09 Mar 2025 06:30:39 -0700 (PDT) From: Christian Marangi To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Lee Jones , Christian Marangi , Vinod Koul , Kishon Vijay Abraham I , Matthias Brugger , AngeloGioacchino Del Regno , Greg Kroah-Hartman , Lorenzo Bianconi , Daniel Danzberger , Arnd Bergmann , Linus Walleij , Nikita Shubin , Guo Ren , Yangyu Chen , Ben Hutchings , Felix Fietkau , linux-clk@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-phy@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-usb@vger.kernel.org, upstream@airoha.com Subject: [PATCH 01/13] clk: en7523: convert driver to regmap API Date: Sun, 9 Mar 2025 14:29:32 +0100 Message-ID: <20250309132959.19045-2-ansuelsmth@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250309132959.19045-1-ansuelsmth@gmail.com> References: <20250309132959.19045-1-ansuelsmth@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250309_063043_538640_A053CD77 X-CRM114-Status: GOOD ( 21.92 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org Convert driver to regmap API, in preparation for support of Airoha AN7583 as the SCU will be an MFD and the regmap will be provided in the parent node. Also Airoha EN7581 benefits from this in preparation of USB support that required checking and configuring SCU SSR bits. While at it also cleanup some register mask and use bitfield macro. Signed-off-by: Christian Marangi --- drivers/clk/clk-en7523.c | 137 ++++++++++++++++++++++----------------- 1 file changed, 76 insertions(+), 61 deletions(-) diff --git a/drivers/clk/clk-en7523.c b/drivers/clk/clk-en7523.c index 15bbdeb60b8e..314e7450313f 100644 --- a/drivers/clk/clk-en7523.c +++ b/drivers/clk/clk-en7523.c @@ -1,5 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only +#include #include #include #include @@ -34,6 +35,7 @@ #define REG_RESET_CONTROL_PCIE2 BIT(26) /* EN7581 */ #define REG_NP_SCU_PCIC 0x88 +#define REG_PCIE_CTRL GENMASK(7, 0) #define REG_NP_SCU_SSTR 0x9c #define REG_PCIE_XSI0_SEL_MASK GENMASK(14, 13) #define REG_PCIE_XSI1_SEL_MASK GENMASK(12, 11) @@ -63,14 +65,14 @@ struct en_clk_desc { }; struct en_clk_gate { - void __iomem *base; + struct regmap *map; struct clk_hw hw; }; struct en_rst_data { const u16 *bank_ofs; const u16 *idx_map; - void __iomem *base; + struct regmap *map; struct reset_controller_dev rcdev; }; @@ -388,44 +390,44 @@ static u32 en7523_get_div(const struct en_clk_desc *desc, u32 val) static int en7523_pci_is_enabled(struct clk_hw *hw) { struct en_clk_gate *cg = container_of(hw, struct en_clk_gate, hw); + u32 val; - return !!(readl(cg->base + REG_PCI_CONTROL) & REG_PCI_CONTROL_REFCLK_EN1); + regmap_read(cg->map, REG_PCI_CONTROL, &val); + return !!(val & REG_PCI_CONTROL_REFCLK_EN1); } static int en7523_pci_prepare(struct clk_hw *hw) { struct en_clk_gate *cg = container_of(hw, struct en_clk_gate, hw); - void __iomem *np_base = cg->base; - u32 val, mask; + struct regmap *map = cg->map; + u32 mask; /* Need to pull device low before reset */ - val = readl(np_base + REG_PCI_CONTROL); - val &= ~(REG_PCI_CONTROL_PERSTOUT1 | REG_PCI_CONTROL_PERSTOUT); - writel(val, np_base + REG_PCI_CONTROL); + regmap_clear_bits(map, REG_PCI_CONTROL, + REG_PCI_CONTROL_PERSTOUT1 | + REG_PCI_CONTROL_PERSTOUT); usleep_range(1000, 2000); /* Enable PCIe port 1 */ - val |= REG_PCI_CONTROL_REFCLK_EN1; - writel(val, np_base + REG_PCI_CONTROL); + regmap_set_bits(map, REG_PCI_CONTROL, + REG_PCI_CONTROL_REFCLK_EN1); usleep_range(1000, 2000); /* Reset to default */ - val = readl(np_base + REG_RESET_CONTROL1); mask = REG_RESET_CONTROL_PCIE1 | REG_RESET_CONTROL_PCIE2 | REG_RESET_CONTROL_PCIEHB; - writel(val & ~mask, np_base + REG_RESET_CONTROL1); + regmap_clear_bits(map, REG_RESET_CONTROL1, mask); usleep_range(1000, 2000); - writel(val | mask, np_base + REG_RESET_CONTROL1); + regmap_set_bits(map, REG_RESET_CONTROL1, mask); msleep(100); - writel(val & ~mask, np_base + REG_RESET_CONTROL1); + regmap_clear_bits(map, REG_RESET_CONTROL1, mask); usleep_range(5000, 10000); /* Release device */ mask = REG_PCI_CONTROL_PERSTOUT1 | REG_PCI_CONTROL_PERSTOUT; - val = readl(np_base + REG_PCI_CONTROL); - writel(val & ~mask, np_base + REG_PCI_CONTROL); + regmap_clear_bits(map, REG_PCI_CONTROL, mask); usleep_range(1000, 2000); - writel(val | mask, np_base + REG_PCI_CONTROL); + regmap_set_bits(map, REG_PCI_CONTROL, mask); msleep(250); return 0; @@ -434,16 +436,13 @@ static int en7523_pci_prepare(struct clk_hw *hw) static void en7523_pci_unprepare(struct clk_hw *hw) { struct en_clk_gate *cg = container_of(hw, struct en_clk_gate, hw); - void __iomem *np_base = cg->base; - u32 val; + struct regmap *map = cg->map; - val = readl(np_base + REG_PCI_CONTROL); - val &= ~REG_PCI_CONTROL_REFCLK_EN1; - writel(val, np_base + REG_PCI_CONTROL); + regmap_clear_bits(map, REG_PCI_CONTROL, REG_PCI_CONTROL_REFCLK_EN1); } static struct clk_hw *en7523_register_pcie_clk(struct device *dev, - void __iomem *np_base) + struct regmap *clk_map) { const struct en_clk_soc_data *soc_data = device_get_match_data(dev); struct clk_init_data init = { @@ -456,7 +455,7 @@ static struct clk_hw *en7523_register_pcie_clk(struct device *dev, if (!cg) return NULL; - cg->base = np_base; + cg->map = clk_map; cg->hw.init = &init; if (init.ops->unprepare) @@ -474,21 +473,20 @@ static int en7581_pci_is_enabled(struct clk_hw *hw) u32 val, mask; mask = REG_PCI_CONTROL_REFCLK_EN0 | REG_PCI_CONTROL_REFCLK_EN1; - val = readl(cg->base + REG_PCI_CONTROL); + regmap_read(cg->map, REG_PCI_CONTROL, &val); return (val & mask) == mask; } static int en7581_pci_enable(struct clk_hw *hw) { struct en_clk_gate *cg = container_of(hw, struct en_clk_gate, hw); - void __iomem *np_base = cg->base; - u32 val, mask; + struct regmap *map = cg->map; + u32 mask; mask = REG_PCI_CONTROL_REFCLK_EN0 | REG_PCI_CONTROL_REFCLK_EN1 | REG_PCI_CONTROL_PERSTOUT1 | REG_PCI_CONTROL_PERSTOUT2 | REG_PCI_CONTROL_PERSTOUT; - val = readl(np_base + REG_PCI_CONTROL); - writel(val | mask, np_base + REG_PCI_CONTROL); + regmap_set_bits(map, REG_PCI_CONTROL, mask); return 0; } @@ -496,19 +494,18 @@ static int en7581_pci_enable(struct clk_hw *hw) static void en7581_pci_disable(struct clk_hw *hw) { struct en_clk_gate *cg = container_of(hw, struct en_clk_gate, hw); - void __iomem *np_base = cg->base; - u32 val, mask; + struct regmap *map = cg->map; + u32 mask; mask = REG_PCI_CONTROL_REFCLK_EN0 | REG_PCI_CONTROL_REFCLK_EN1 | REG_PCI_CONTROL_PERSTOUT1 | REG_PCI_CONTROL_PERSTOUT2 | REG_PCI_CONTROL_PERSTOUT; - val = readl(np_base + REG_PCI_CONTROL); - writel(val & ~mask, np_base + REG_PCI_CONTROL); + regmap_clear_bits(map, REG_PCI_CONTROL, mask); usleep_range(1000, 2000); } static void en7523_register_clocks(struct device *dev, struct clk_hw_onecell_data *clk_data, - void __iomem *base, void __iomem *np_base) + struct regmap *map, struct regmap *clk_map) { struct clk_hw *hw; u32 rate; @@ -517,10 +514,12 @@ static void en7523_register_clocks(struct device *dev, struct clk_hw_onecell_dat for (i = 0; i < ARRAY_SIZE(en7523_base_clks); i++) { const struct en_clk_desc *desc = &en7523_base_clks[i]; u32 reg = desc->div_reg ? desc->div_reg : desc->base_reg; - u32 val = readl(base + desc->base_reg); + u32 val; + + regmap_read(map, desc->base_reg, &val); rate = en7523_get_base_rate(desc, val); - val = readl(base + reg); + regmap_read(map, reg, &val); rate /= en7523_get_div(desc, val); hw = clk_hw_register_fixed_rate(dev, desc->name, NULL, 0, rate); @@ -533,30 +532,47 @@ static void en7523_register_clocks(struct device *dev, struct clk_hw_onecell_dat clk_data->hws[desc->id] = hw; } - hw = en7523_register_pcie_clk(dev, np_base); + hw = en7523_register_pcie_clk(dev, clk_map); clk_data->hws[EN7523_CLK_PCIE] = hw; } +static const struct regmap_config en7523_clk_regmap_config = { + .reg_bits = 32, + .val_bits = 32, + .reg_stride = 4, +}; + static int en7523_clk_hw_init(struct platform_device *pdev, struct clk_hw_onecell_data *clk_data) { void __iomem *base, *np_base; + struct regmap *map, *clk_map; base = devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(base)) return PTR_ERR(base); + map = devm_regmap_init_mmio(&pdev->dev, base, + &en7523_clk_regmap_config); + if (IS_ERR(map)) + return PTR_ERR(map); + np_base = devm_platform_ioremap_resource(pdev, 1); if (IS_ERR(np_base)) return PTR_ERR(np_base); - en7523_register_clocks(&pdev->dev, clk_data, base, np_base); + clk_map = devm_regmap_init_mmio(&pdev->dev, np_base, + &en7523_clk_regmap_config); + if (IS_ERR(clk_map)) + return PTR_ERR(clk_map); + + en7523_register_clocks(&pdev->dev, clk_data, map, clk_map); return 0; } static void en7581_register_clocks(struct device *dev, struct clk_hw_onecell_data *clk_data, - struct regmap *map, void __iomem *base) + struct regmap *map, struct regmap *clk_map) { struct clk_hw *hw; u32 rate; @@ -593,7 +609,7 @@ static void en7581_register_clocks(struct device *dev, struct clk_hw_onecell_dat clk_data->hws[desc->id] = hw; } - hw = en7523_register_pcie_clk(dev, base); + hw = en7523_register_pcie_clk(dev, clk_map); clk_data->hws[EN7523_CLK_PCIE] = hw; } @@ -601,15 +617,10 @@ static int en7523_reset_update(struct reset_controller_dev *rcdev, unsigned long id, bool assert) { struct en_rst_data *rst_data = container_of(rcdev, struct en_rst_data, rcdev); - void __iomem *addr = rst_data->base + rst_data->bank_ofs[id / RST_NR_PER_BANK]; - u32 val; + u32 addr = rst_data->bank_ofs[id / RST_NR_PER_BANK]; - val = readl(addr); - if (assert) - val |= BIT(id % RST_NR_PER_BANK); - else - val &= ~BIT(id % RST_NR_PER_BANK); - writel(val, addr); + regmap_update_bits(rst_data->map, addr, BIT(id % RST_NR_PER_BANK), + assert ? BIT(id % RST_NR_PER_BANK) : 0); return 0; } @@ -630,9 +641,11 @@ static int en7523_reset_status(struct reset_controller_dev *rcdev, unsigned long id) { struct en_rst_data *rst_data = container_of(rcdev, struct en_rst_data, rcdev); - void __iomem *addr = rst_data->base + rst_data->bank_ofs[id / RST_NR_PER_BANK]; + u32 addr = rst_data->bank_ofs[id / RST_NR_PER_BANK]; + u32 val; - return !!(readl(addr) & BIT(id % RST_NR_PER_BANK)); + regmap_read(rst_data->map, addr, &val); + return !!(val & BIT(id % RST_NR_PER_BANK)); } static int en7523_reset_xlate(struct reset_controller_dev *rcdev, @@ -652,7 +665,7 @@ static const struct reset_control_ops en7581_reset_ops = { .status = en7523_reset_status, }; -static int en7581_reset_register(struct device *dev, void __iomem *base) +static int en7581_reset_register(struct device *dev, struct regmap *map) { struct en_rst_data *rst_data; @@ -662,7 +675,7 @@ static int en7581_reset_register(struct device *dev, void __iomem *base) rst_data->bank_ofs = en7581_rst_ofs; rst_data->idx_map = en7581_rst_map; - rst_data->base = base; + rst_data->map = map; rst_data->rcdev.nr_resets = ARRAY_SIZE(en7581_rst_map); rst_data->rcdev.of_xlate = en7523_reset_xlate; @@ -678,9 +691,8 @@ static int en7581_reset_register(struct device *dev, void __iomem *base) static int en7581_clk_hw_init(struct platform_device *pdev, struct clk_hw_onecell_data *clk_data) { - struct regmap *map; + struct regmap *map, *clk_map; void __iomem *base; - u32 val; map = syscon_regmap_lookup_by_compatible("airoha,en7581-chip-scu"); if (IS_ERR(map)) @@ -690,15 +702,18 @@ static int en7581_clk_hw_init(struct platform_device *pdev, if (IS_ERR(base)) return PTR_ERR(base); - en7581_register_clocks(&pdev->dev, clk_data, map, base); + clk_map = devm_regmap_init_mmio(&pdev->dev, base, &en7523_clk_regmap_config); + if (IS_ERR(clk_map)) + return PTR_ERR(clk_map); + + en7581_register_clocks(&pdev->dev, clk_data, map, clk_map); - val = readl(base + REG_NP_SCU_SSTR); - val &= ~(REG_PCIE_XSI0_SEL_MASK | REG_PCIE_XSI1_SEL_MASK); - writel(val, base + REG_NP_SCU_SSTR); - val = readl(base + REG_NP_SCU_PCIC); - writel(val | 3, base + REG_NP_SCU_PCIC); + regmap_clear_bits(clk_map, REG_NP_SCU_SSTR, + REG_PCIE_XSI0_SEL_MASK | REG_PCIE_XSI1_SEL_MASK); + regmap_update_bits(clk_map, REG_NP_SCU_PCIC, REG_PCIE_CTRL, + FIELD_PREP(REG_PCIE_CTRL, 3)); - return en7581_reset_register(&pdev->dev, base); + return en7581_reset_register(&pdev->dev, clk_map); } static int en7523_clk_probe(struct platform_device *pdev) From patchwork Sun Mar 9 13:29:33 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Marangi X-Patchwork-Id: 14008454 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 AA007C2BA1B for ; Sun, 9 Mar 2025 13:34:05 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:To:From:Reply-To: Cc:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=qYnsaKwLQcaTkvM+4ffTJRr6nfs/V7lVq/qqbRtol90=; b=sr1b4mChFJX9bpFeYejRCTnT0t 8RL/YsCLO8Z8mrAOTzcpbj2adXuoYGi/Q9MdKKUx7QG9WyDbQbUT9dP+J0P1Os1RPkeE2rvcl5VV9 VBIp3SJPixK/5iTAX4hfE+55kBxfUFpQY3GyevikDGV9G/sxnDRhivHFQW5X+9SulmWjBcVFx314m A/HpWU5iI1UkI83EoBPCvnGuIJj/w9zqtUTJikXzrzWrXDUV92H8ZaIGdF+eaGadvkdvZE4nGn2Cn jJCWo/q4VEJyqUR5WY26Ndx00oW263eqV4TPqbmvJOS+t37HnuamTcmGstb1ds8361xYtvor3ghkE DPyXNzFQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1trGn6-00000000b8t-37AU; Sun, 09 Mar 2025 13:34:04 +0000 Received: from mail-wr1-x42e.google.com ([2a00:1450:4864:20::42e]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1trGjr-00000000aQ9-25Yl; Sun, 09 Mar 2025 13:30:45 +0000 Received: by mail-wr1-x42e.google.com with SMTP id ffacd0b85a97d-3913b539aabso553847f8f.2; Sun, 09 Mar 2025 06:30:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741527041; x=1742131841; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=qYnsaKwLQcaTkvM+4ffTJRr6nfs/V7lVq/qqbRtol90=; b=IF5/ddYolBKSgff+nunvpMQJy4cyc2hFFCS05ZJMLXLDNxbJG/OFIhOA4IMPK5Z8Qd R5CpL4ZaZuZOW+PxytolOjXCkXImhC5XVC6mKvwj0gFvH5qzj4HArJVpFVTmB03GCsyw AQigcBmkb5LJu/RiidlSZHVvbGGlQyOSCqjYi0UYAlSJtoXyDEunXDBSfUvvtzimN3Y9 hOg5DaXbv8xc0q1+kBbDxaACT2/r7vBkwQMtrA/b3y0XbuaoMlRqmpWYuysD7FxgzQCN AFicGW2ZQ25ns28OgFCE6jGrGpBBiJwwsWO9HqxUBXRz5JAdcZRoM1EpDf17wOjtHuS9 9IBQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741527041; x=1742131841; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=qYnsaKwLQcaTkvM+4ffTJRr6nfs/V7lVq/qqbRtol90=; b=gYnAXZ2tPZi8Z9/uZ8uOrUrgQeszaA8Br/5xwCbm7pus0LWwNN4MCursplrxMQmKfE TauDaM3dMFBTkUbBlqyhbzC9gknj0s1XmQPU9lHtMtBKV3Nd652J4PxjOCa8fkfcrr5+ v3gj57BrQvcTWDohQQtzN2cS4shlcRzTKlzvMxGbbFNTHfPg2T6gPivfZvGRG9ixryGJ MIG0G/36zyyPtDiEW3l4MC+lz4CZ5Ka8Bsa5Ld0BnNAz8mhfH6Gv6i1KjqqdK7w9NPGr Ro8kKT8OaOD+A44WNlWyi0VBy1w7N7I0ghSHqzVeXMSJyCp2i2xQOQlnzGeX9bSuFmkS 0mdg== X-Forwarded-Encrypted: i=1; AJvYcCUGNtklpjUDtGOqom2zBs26ymfw4JQSSQCT9XeXKzca91zUPuwu9Hzda4wfZqHePKOv2yuTrg6ICljwwCP174fE@lists.infradead.org, AJvYcCUuq9ZihaFopgn/0YWEQ53W81tlgWRKJmbYlLN3j/q188HjtYkbNO1SFn32JFLvqr1odFFXXhlM41iP@lists.infradead.org, AJvYcCXcfz5Wc3O/qDGxBzAxSDiJ97kDM4P5a91WOREz5UlgyyuUpSwGD9Puvgzy4840EX8js5bE/knlrGrNsYwIMIQ=@lists.infradead.org X-Gm-Message-State: AOJu0YwWlfS10MUbgBhvPM0JHiIRNWoM0WofdRGun8oK+rmROmA5GPGc Xo1eNgfiPyH6Hu9Nr0D1uioXWXNBf3UPwV0tVWSwagJA1FW1clxa X-Gm-Gg: ASbGncvfkrP439VWXs4eTglFn8JP+lHbLvS10jVIVBHDWs+pO619Fz2/fW45NULO5BY GFDvmp6wDO8XlJen8wLkrxe/p7pNT4q4BIZUUvp/Hw7pFhdjjDHKOuqHsNvqZ94JSEUTb1dMKLn Auf10s6NfT9H1dCx8XZmakopUxJ8D7MQPAujYm9h3GMiPGqTOc7gRD7yt+f8RjYZj1BNYIqVgpw qh42mEbCM66w+n22vTyOQ8u1TXpXPb9iCJSkQ3AKLKtn+iF/WbLbZ4d0foO+SVd0w7ToQ6mnYIG 7O3+49DBaJJyLSE3RiS0UXxmTNE1wm0oHxzrZWLLbuVCLU/usqogW6oiXLC8at6WojrImJwD8j8 npD1fuZU69XfKAQ== X-Google-Smtp-Source: AGHT+IE2QvS+0eDHndAT3qcDfoC0/LVSHDMWAcyRXoT3PVXbEboSiYXTv6Ae8nQJLJ1UY4iDMoIU2Q== X-Received: by 2002:a05:6000:1fa9:b0:390:fc83:a070 with SMTP id ffacd0b85a97d-39132b64eadmr7308843f8f.0.1741527041191; Sun, 09 Mar 2025 06:30:41 -0700 (PDT) Received: from localhost.localdomain (93-34-90-129.ip49.fastwebnet.it. [93.34.90.129]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-3912bee262esm11867536f8f.0.2025.03.09.06.30.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 09 Mar 2025 06:30:40 -0700 (PDT) From: Christian Marangi To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Lee Jones , Christian Marangi , Vinod Koul , Kishon Vijay Abraham I , Matthias Brugger , AngeloGioacchino Del Regno , Greg Kroah-Hartman , Lorenzo Bianconi , Daniel Danzberger , Arnd Bergmann , Linus Walleij , Nikita Shubin , Guo Ren , Yangyu Chen , Ben Hutchings , Felix Fietkau , linux-clk@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-phy@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-usb@vger.kernel.org, upstream@airoha.com Subject: [PATCH 02/13] clk: en7523: generalize register clocks function Date: Sun, 9 Mar 2025 14:29:33 +0100 Message-ID: <20250309132959.19045-3-ansuelsmth@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250309132959.19045-1-ansuelsmth@gmail.com> References: <20250309132959.19045-1-ansuelsmth@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250309_063043_536327_634D6B8D X-CRM114-Status: GOOD ( 20.66 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org Generalize register clocks function for Airoha EN7523 and EN7581 clocks driver. The same logic is applied for both clock hence code can be reduced and simplified by putting the base_clocks struct in the soc_data and passing that to a generic register clocks function. There is always the pattern where the last clock is always the PCIe one. Signed-off-by: Christian Marangi --- drivers/clk/clk-en7523.c | 130 ++++++++++++++++----------------------- 1 file changed, 53 insertions(+), 77 deletions(-) diff --git a/drivers/clk/clk-en7523.c b/drivers/clk/clk-en7523.c index 314e7450313f..2a74bc8fed24 100644 --- a/drivers/clk/clk-en7523.c +++ b/drivers/clk/clk-en7523.c @@ -78,8 +78,10 @@ struct en_rst_data { struct en_clk_soc_data { u32 num_clocks; + const struct en_clk_desc *base_clks; const struct clk_ops pcie_ops; int (*hw_init)(struct platform_device *pdev, + const struct en_clk_soc_data *soc_data, struct clk_hw_onecell_data *clk_data); }; @@ -467,6 +469,50 @@ static struct clk_hw *en7523_register_pcie_clk(struct device *dev, return &cg->hw; } +static void en75xx_register_clocks(struct device *dev, + const struct en_clk_soc_data *soc_data, + struct clk_hw_onecell_data *clk_data, + struct regmap *map, struct regmap *clk_map) +{ + struct clk_hw *hw; + u32 rate; + int i; + + for (i = 0; i < soc_data->num_clocks - 1; i++) { + const struct en_clk_desc *desc = &soc_data->base_clks[i]; + u32 val, reg = desc->div_reg ? desc->div_reg : desc->base_reg; + int err; + + err = regmap_read(map, desc->base_reg, &val); + if (err) { + pr_err("Failed reading fixed clk rate %s: %d\n", + desc->name, err); + continue; + } + rate = en7523_get_base_rate(desc, val); + + err = regmap_read(map, reg, &val); + if (err) { + pr_err("Failed reading fixed clk div %s: %d\n", + desc->name, err); + continue; + } + rate /= en7523_get_div(desc, val); + + hw = clk_hw_register_fixed_rate(dev, desc->name, NULL, 0, rate); + if (IS_ERR(hw)) { + pr_err("Failed to register clk %s: %ld\n", + desc->name, PTR_ERR(hw)); + continue; + } + + clk_data->hws[desc->id] = hw; + } + + hw = en7523_register_pcie_clk(dev, clk_map); + clk_data->hws[soc_data->num_clocks] = hw; +} + static int en7581_pci_is_enabled(struct clk_hw *hw) { struct en_clk_gate *cg = container_of(hw, struct en_clk_gate, hw); @@ -504,38 +550,6 @@ static void en7581_pci_disable(struct clk_hw *hw) usleep_range(1000, 2000); } -static void en7523_register_clocks(struct device *dev, struct clk_hw_onecell_data *clk_data, - struct regmap *map, struct regmap *clk_map) -{ - struct clk_hw *hw; - u32 rate; - int i; - - for (i = 0; i < ARRAY_SIZE(en7523_base_clks); i++) { - const struct en_clk_desc *desc = &en7523_base_clks[i]; - u32 reg = desc->div_reg ? desc->div_reg : desc->base_reg; - u32 val; - - regmap_read(map, desc->base_reg, &val); - - rate = en7523_get_base_rate(desc, val); - regmap_read(map, reg, &val); - rate /= en7523_get_div(desc, val); - - hw = clk_hw_register_fixed_rate(dev, desc->name, NULL, 0, rate); - if (IS_ERR(hw)) { - pr_err("Failed to register clk %s: %ld\n", - desc->name, PTR_ERR(hw)); - continue; - } - - clk_data->hws[desc->id] = hw; - } - - hw = en7523_register_pcie_clk(dev, clk_map); - clk_data->hws[EN7523_CLK_PCIE] = hw; -} - static const struct regmap_config en7523_clk_regmap_config = { .reg_bits = 32, .val_bits = 32, @@ -543,6 +557,7 @@ static const struct regmap_config en7523_clk_regmap_config = { }; static int en7523_clk_hw_init(struct platform_device *pdev, + const struct en_clk_soc_data *soc_data, struct clk_hw_onecell_data *clk_data) { void __iomem *base, *np_base; @@ -566,53 +581,11 @@ static int en7523_clk_hw_init(struct platform_device *pdev, if (IS_ERR(clk_map)) return PTR_ERR(clk_map); - en7523_register_clocks(&pdev->dev, clk_data, map, clk_map); + en75xx_register_clocks(&pdev->dev, soc_data, clk_data, map, clk_map); return 0; } -static void en7581_register_clocks(struct device *dev, struct clk_hw_onecell_data *clk_data, - struct regmap *map, struct regmap *clk_map) -{ - struct clk_hw *hw; - u32 rate; - int i; - - for (i = 0; i < ARRAY_SIZE(en7581_base_clks); i++) { - const struct en_clk_desc *desc = &en7581_base_clks[i]; - u32 val, reg = desc->div_reg ? desc->div_reg : desc->base_reg; - int err; - - err = regmap_read(map, desc->base_reg, &val); - if (err) { - pr_err("Failed reading fixed clk rate %s: %d\n", - desc->name, err); - continue; - } - rate = en7523_get_base_rate(desc, val); - - err = regmap_read(map, reg, &val); - if (err) { - pr_err("Failed reading fixed clk div %s: %d\n", - desc->name, err); - continue; - } - rate /= en7523_get_div(desc, val); - - hw = clk_hw_register_fixed_rate(dev, desc->name, NULL, 0, rate); - if (IS_ERR(hw)) { - pr_err("Failed to register clk %s: %ld\n", - desc->name, PTR_ERR(hw)); - continue; - } - - clk_data->hws[desc->id] = hw; - } - - hw = en7523_register_pcie_clk(dev, clk_map); - clk_data->hws[EN7523_CLK_PCIE] = hw; -} - static int en7523_reset_update(struct reset_controller_dev *rcdev, unsigned long id, bool assert) { @@ -689,6 +662,7 @@ static int en7581_reset_register(struct device *dev, struct regmap *map) } static int en7581_clk_hw_init(struct platform_device *pdev, + const struct en_clk_soc_data *soc_data, struct clk_hw_onecell_data *clk_data) { struct regmap *map, *clk_map; @@ -706,7 +680,7 @@ static int en7581_clk_hw_init(struct platform_device *pdev, if (IS_ERR(clk_map)) return PTR_ERR(clk_map); - en7581_register_clocks(&pdev->dev, clk_data, map, clk_map); + en75xx_register_clocks(&pdev->dev, soc_data, clk_data, map, clk_map); regmap_clear_bits(clk_map, REG_NP_SCU_SSTR, REG_PCIE_XSI0_SEL_MASK | REG_PCIE_XSI1_SEL_MASK); @@ -732,7 +706,7 @@ static int en7523_clk_probe(struct platform_device *pdev) return -ENOMEM; clk_data->num = soc_data->num_clocks; - r = soc_data->hw_init(pdev, clk_data); + r = soc_data->hw_init(pdev, soc_data, clk_data); if (r) return r; @@ -740,6 +714,7 @@ static int en7523_clk_probe(struct platform_device *pdev) } static const struct en_clk_soc_data en7523_data = { + .base_clks = en7523_base_clks, .num_clocks = ARRAY_SIZE(en7523_base_clks) + 1, .pcie_ops = { .is_enabled = en7523_pci_is_enabled, @@ -750,6 +725,7 @@ static const struct en_clk_soc_data en7523_data = { }; static const struct en_clk_soc_data en7581_data = { + .base_clks = en7581_base_clks, /* We increment num_clocks by 1 to account for additional PCIe clock */ .num_clocks = ARRAY_SIZE(en7581_base_clks) + 1, .pcie_ops = { From patchwork Sun Mar 9 13:29:34 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Marangi X-Patchwork-Id: 14008462 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 CD14DC28B30 for ; Sun, 9 Mar 2025 13:37:24 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:To:From:Reply-To: Cc:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=LmZAJnwVdeb36PC0uWDUFCDQtkHDVfLiHfmoIbAgzmQ=; b=u+oO6SvZqHOvNo6cZOea54LZsb Ovk8NGxcafUCUJtyU+oOsJCgG3d/sYSxo3MWXrVhnOEjhOA5T9eSGuER5h0CPI9v83dS61wspfMgV 6u8s1gENLQwMFocCZB4rAuLSCfJ+WQ6I5Oy1darYYVgAt/D9Kz2nOHJxU/6H26/QMlSOsa6CpI1S/ UBTLyz1GD8susTD5Fj2ezrtD31iIFdqfSXl2mCbs82HUptDjAlgRAJdn/F55N4bUeyhqisOhmX0Ix 8/+uPZyzAzXs2M5SbFQDvEsbQ5X3aNZUBXCI25eGzjanWxkQ2dKhplwo12DqbViyS07Ri1+RbHuU/ IbWVkJ8A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1trGqJ-00000000bbB-44J4; Sun, 09 Mar 2025 13:37:23 +0000 Received: from mail-wr1-x42b.google.com ([2a00:1450:4864:20::42b]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1trGjs-00000000aQs-2fEx; Sun, 09 Mar 2025 13:30:46 +0000 Received: by mail-wr1-x42b.google.com with SMTP id ffacd0b85a97d-390e3b3d3f4so1549096f8f.2; Sun, 09 Mar 2025 06:30:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741527043; x=1742131843; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=LmZAJnwVdeb36PC0uWDUFCDQtkHDVfLiHfmoIbAgzmQ=; b=KT5tf/KHhkMTiWxStrA87VkNlolDbdQ/+1SN7/91fckUY1h+9G3YeSlxDqtaqUbi1q HE/lsh185cXjJ2MABnjwdWgmKmcIqR7qf62WmXHiqdaWPO4BwN/P3eictEPtxSnaV9kl r3ad16RYvMLQX1Dh0EZvzMpSNblbQUU9cObG9MGCebYM4RJCvHidqmo+LzlwGaxetvhk udrE2qHgruXgo23DowGOCcAUivsdyJozuLYJ3R3XwqJngAu34jNxBFxF8yL8qOFvncMU Sb9tf0NR3cqANPaYFAfd3bigMIFflabGNoD0Nfe4NwJ7yxbc6ur6avrV2m35V2dauJ49 Fuaw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741527043; x=1742131843; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=LmZAJnwVdeb36PC0uWDUFCDQtkHDVfLiHfmoIbAgzmQ=; b=YBTdmWT8pPXA8ALnPDla1GYYLOjpfrdE+BXf6rjYSBSXQmnmx8nbt5gdrpT7pdTeub tJ40fDIUzkeIfHnIh+GJ5EbS1Rh8edjwrv3nZNMBbPlIf53Rr+rDMcd1a2qBI7WbH6dV 3APzepEbvAAFaOwTTYS4c1wY/LnxywVdDcVzMfaWY5M+qN+5+KH+N0+PMCvxS3yi18Ku R/g1tKJJf4CjMJzWW9SsCl8fVwqPVIwDPcAjLtjl6065KqvhzIsd5bTkdekkFjsKx339 Lbqr0eF2GqPPUuiDuptG8cTsokCytg2xjWFXYk0gqcFw805oOhjYV+/rkwCriEy4VwPN a2zg== X-Forwarded-Encrypted: i=1; AJvYcCUsLTj49O0+NPuPRzLvDdzlKlfY7gI8DmvwgOrUDgDqj5jcexLp4kquXmwNMcCU1/2O7FoqaiSvg2Df7OIjtUY=@lists.infradead.org, AJvYcCVkxoU7S1F41MmuglrCaoRs212G6SWAzjLB5P0KRLZT9knEktPofNb1jwjlw2U18tuJle/hee6v5pm4d+dmz88Y@lists.infradead.org, AJvYcCVmuOKOFRFqJ/YWzOeWsiF0otAb5TU8Kq9nTfKPuTK1Eve5JzgnN2kaNisJ7yrAUpas0FCMFXPKpYVT@lists.infradead.org X-Gm-Message-State: AOJu0YyMwqMJ0UU4A3zj5FY5oeK02Wkie5o4p1oVQpMaHUNURiaVDT/K yzWpedR4kXj0WaCtxVot8GjKj9EBec8+eaPJrZCrEBsIfM92xAsA X-Gm-Gg: ASbGncu9pMFFWjClgCxothIsKIASMX1zISL7/L68EQWhIWUTnlTUJiQVYbAPQpcaAOH vzdxWzceJLOv66rkuZO8oiCmwsGxSUyBK8ksrzoobpw0Fhd2d844Mli0ZRVhRR4F2pU3/gcVw4g dAP0Ns93s0/gEXAUWY1MkgEEUBEKRGBglSb7MXkW7AVg+qJQbi10k2c+H/rKOQ7L/gWwqFOff7C 0VUqOx7rQmfRSHIgzeHuksGIZIhrByiqqJ52fRreH/8o1OjId+kquzcd1f7Sqbbt0dP28qOJVsq rPwRUX6S2TEJ2EkOcCV4DPREqpGT7gxNlU4DWYsS6pdwuxlCBWMHYb/4Ur17HfNydAKbON+s7fk rVR60Lk4kR9nT8g== X-Google-Smtp-Source: AGHT+IHYvjueTBKth2+iZLDZ1shgffPIvVWESl7zWZ3vriip/pFaWdphySinGg260hn/heKTJUJu2A== X-Received: by 2002:a5d:64ce:0:b0:391:3bba:7f18 with SMTP id ffacd0b85a97d-3913bba8128mr2142759f8f.12.1741527042854; Sun, 09 Mar 2025 06:30:42 -0700 (PDT) Received: from localhost.localdomain (93-34-90-129.ip49.fastwebnet.it. [93.34.90.129]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-3912bee262esm11867536f8f.0.2025.03.09.06.30.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 09 Mar 2025 06:30:42 -0700 (PDT) From: Christian Marangi To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Lee Jones , Christian Marangi , Vinod Koul , Kishon Vijay Abraham I , Matthias Brugger , AngeloGioacchino Del Regno , Greg Kroah-Hartman , Lorenzo Bianconi , Daniel Danzberger , Arnd Bergmann , Linus Walleij , Nikita Shubin , Guo Ren , Yangyu Chen , Ben Hutchings , Felix Fietkau , linux-clk@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-phy@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-usb@vger.kernel.org, upstream@airoha.com Subject: [PATCH 03/13] dt-bindings: soc: airoha: add SCU SSR Serdes port binding Date: Sun, 9 Mar 2025 14:29:34 +0100 Message-ID: <20250309132959.19045-4-ansuelsmth@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250309132959.19045-1-ansuelsmth@gmail.com> References: <20250309132959.19045-1-ansuelsmth@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250309_063044_672114_B30F023D X-CRM114-Status: GOOD ( 16.00 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org Add Airoha AN7581 SCU SSR Serdes port binding to define what mode is supported by each Serdes port. These special binding are needed to identify and provide the port mode from any user driver. These modes are mutually exclusive and driver needs to correctly validate the current mode for the Serdes port in use. Signed-off-by: Christian Marangi --- MAINTAINERS | 6 ++++++ include/dt-bindings/soc/airoha,scu-ssr.h | 24 ++++++++++++++++++++++++ 2 files changed, 30 insertions(+) create mode 100644 include/dt-bindings/soc/airoha,scu-ssr.h diff --git a/MAINTAINERS b/MAINTAINERS index 3eee238c2ea2..d3125268d63f 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -736,6 +736,12 @@ F: Documentation/devicetree/bindings/phy/airoha,en7581-pcie-phy.yaml F: drivers/phy/phy-airoha-pcie-regs.h F: drivers/phy/phy-airoha-pcie.c +AIROHA SCU SSR DRIVER +M: Christian Marangi +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: include/dt-bindings/soc/airoha,scu-ssr.h + AIROHA SPI SNFI DRIVER M: Lorenzo Bianconi M: Ray Liu diff --git a/include/dt-bindings/soc/airoha,scu-ssr.h b/include/dt-bindings/soc/airoha,scu-ssr.h new file mode 100644 index 000000000000..b14457c10d77 --- /dev/null +++ b/include/dt-bindings/soc/airoha,scu-ssr.h @@ -0,0 +1,24 @@ +/* SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) */ + +#ifndef __DT_BINDINGS_AIROHA_SCU_SSR_H +#define __DT_BINDINGS_AIROHA_SCU_SSR_H + +/* WiFi1 port can be PCIe0 2 line, PCIe0 1 line or Ethernet (USXGMII/HSGMII) */ +#define AIROHA_SCU_SSR_WIFI1_PCIE0_2LINE 0 +#define AIROHA_SCU_SSR_WIFI1_PCIE0 1 +#define AIROHA_SCU_SSR_WIFI1_ETHERNET 2 + +/* WiFi2 port can be PCIe0 2 line, PCIe1 1 line or Ethernet (USXGMII/HSGMII) */ +#define AIROHA_SCU_SSR_WIFI2_PCIE0_2LINE 0 +#define AIROHA_SCU_SSR_WIFI2_PCIE1 1 +#define AIROHA_SCU_SSR_WIFI2_ETHERNET 2 + +/* USB1 port can be USB 3.0 port or Ethernet (HSGMII) */ +#define AIROHA_SCU_SSR_USB1_USB 0 +#define AIROHA_SCU_SSR_USB1_ETHERNET 1 + +/* USB2 port can be USB 3.0 port or PCIe2 1 line */ +#define AIROHA_SCU_SSR_USB2_USB 0 +#define AIROHA_SCU_SSR_USB2_PCIE2 1 + +#endif /* __DT_BINDINGS_AIROHA_SCU_SSR_H */ From patchwork Sun Mar 9 13:29:35 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Marangi X-Patchwork-Id: 14008463 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 33085C28B2F for ; Sun, 9 Mar 2025 13:39:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:To:From:Reply-To: Cc:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=K7rAztQuL1fqEwNhgIxMbKU2YwJ5HINRdQASSAMKL28=; b=3xoNGRNroT2sfKgAN1l86xMd/F BAcISodbyxSce4/2UGNj9+D70sefenktmiowagb5ktSHolgtHOQTxhTvTlrGWxhOS5V64cS50iG6D 6VKL1IawpEVPYWIC2le7fMI1VfXT9AkzNbDcncqT5McbS6CkR+qh2kw8Ij00dMmGGgEjMr6w7bk86 tsR/tqY7JDEju/TEDLa0HaOyFgv+rf6dL30UCsYJUyzrjdSiRccaOOeYgZuNLlrpNGDH2tltcOXiu beLOpChiVLIm8Ln557x6OWlG5nUiaqtipMi0JxQ5vAi/vr33j/waYdjuOgVLttP4Y2gRdPkxwL2gB Bx7ev/VQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1trGrv-00000000bjL-1Fl6; Sun, 09 Mar 2025 13:39:03 +0000 Received: from mail-wr1-x42a.google.com ([2a00:1450:4864:20::42a]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1trGju-00000000aRP-0vxU; Sun, 09 Mar 2025 13:30:47 +0000 Received: by mail-wr1-x42a.google.com with SMTP id ffacd0b85a97d-3913d129c1aso598352f8f.0; Sun, 09 Mar 2025 06:30:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741527044; x=1742131844; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=K7rAztQuL1fqEwNhgIxMbKU2YwJ5HINRdQASSAMKL28=; b=ewXodrbadtZ2r78GlteYvHMvpByVhiF1XPzjT7bPd80ftsouMrjtBfp2+iRz3T22Cp ZZwFgQ9WhRxDQL3VimVis3xzb4oKsSTh9gszvR34b6zD/9nG1NHZrrpL2T0it50hyS0w wrneM+/LyWtByv7Y4zcIXV1FeK080A9KFpTiX8duVtpjPOEaaSzwn/SX+uOr7WJ6odQF Ji+A86nLkdhYgriPiDzpBI6l00vmkoiWZS1HsZxvH6GE4zJeP8X+ddu5rdnozCTSbUfk RYfxPdPGBvEzHAmHpWAu1hsznDreFqVLPU7Al5wjaKRYDg+FAvKhVGxN/a1CX8Yxetdo I93w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741527044; x=1742131844; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=K7rAztQuL1fqEwNhgIxMbKU2YwJ5HINRdQASSAMKL28=; b=ETljoxiaYDKKBcvtUUnxqR6owekuKSbTDI1S0WQkaFOsMvnESrX7QprR4FLmmH9LMU 3xExwlSL8TLOnxlfAqx64yZK7xj260qkrRnIZpkNF3/LN72N+WEplV5tv8uek3CHhlcs JKoKiX4aNhKool9mDipGU3wJumdpGqjAL91QozL3eMJP+dkDOFBiwUa5MFGQJ7FhAB/O RDVg58FedfMiQKPngyfN9c2kGNUdvYnI7Jmlfmeopt+39b7DRxCsbLlccLMrrz91SJqc Xx6sBI7q5DQNRtlU293DcOFaWkvwVjABLDlvBAcxkVB5OaqQJd/e5gQ//B0h5lwFE/xJ fisQ== X-Forwarded-Encrypted: i=1; AJvYcCVNAormmiOtly6QvywGeyVGTTlnf+2jTNYnmrPO3vJu1A1bvCEuVsiGtzF6UERJ0rytQDWxV7gXdHs2XzvgXzQ0@lists.infradead.org, AJvYcCWYVix7M8ZQYyYqAjqHnIbe13+qg4lGC7U3UPOb1pKAixp1RxMdQYF2xDUKnchUY5rNyBqSM5zKi0epmUhtjiI=@lists.infradead.org, AJvYcCXwvj+dbd+95vfUkRqiD8zHNhKqzZxBVUUUYuCaAZJYBMB2EqLgMUaIfx+RIpD62praBD06Gi9Gh7Y1@lists.infradead.org X-Gm-Message-State: AOJu0Yzn0JDN5M9chSoGyj933m3prQrehLx9QYH4NguyoJ8tI7HoNwWf JA6cBd2+PeKIOBI+ZoviRlSWFTxcAaLVxHEjERaFfcSaS5JjQlHr X-Gm-Gg: ASbGncvT7S5xwlRgz714ZvHUsomhpaQttIDVU+SjJt6pTWFAAUTnsOnIqxde7rmcHki esgZJ6iPNNXkbX1FwvZAW7psnv/llV9XAXwfYXoQVPX3gmlrJ/R9eoWH3AO0EW3Z37DQEHi3qoF FRmZvEO7o4+tnrk6+voxMreyhNF08yesCVmK9ObMPih26174erw+EE/63HLHYmQSpWf4UAcpxpe jB6A26/FNo1l8uspPCI0gUh0JhJJuRRNOXrjRsrhxwzQwzNhIlHXzrtOViuFZxlX43Xsa4R2TeK ZDG+wnwSb0mz+JDGuQq3h7viyKV8NNBaMxglpWaxSpVpxhC0LuZiSL1/uASQUUAkbUZzvVWsKzy 1j4if3gFe+JZFNw== X-Google-Smtp-Source: AGHT+IEuhfvObU9vao062mg4FvmF1NzkPbIvIIx2h56yBlcCJSeWP0LGYj1OCWvIasRINrETP+XnDA== X-Received: by 2002:a05:6000:1842:b0:390:f116:d220 with SMTP id ffacd0b85a97d-3913af09864mr3103348f8f.17.1741527044465; Sun, 09 Mar 2025 06:30:44 -0700 (PDT) Received: from localhost.localdomain (93-34-90-129.ip49.fastwebnet.it. [93.34.90.129]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-3912bee262esm11867536f8f.0.2025.03.09.06.30.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 09 Mar 2025 06:30:44 -0700 (PDT) From: Christian Marangi To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Lee Jones , Christian Marangi , Vinod Koul , Kishon Vijay Abraham I , Matthias Brugger , AngeloGioacchino Del Regno , Greg Kroah-Hartman , Lorenzo Bianconi , Daniel Danzberger , Arnd Bergmann , Linus Walleij , Nikita Shubin , Guo Ren , Yangyu Chen , Ben Hutchings , Felix Fietkau , linux-clk@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-phy@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-usb@vger.kernel.org, upstream@airoha.com Subject: [PATCH 04/13] dt-bindings: soc: airoha: add Documentation for Airoha AN7581 SCU SSR Date: Sun, 9 Mar 2025 14:29:35 +0100 Message-ID: <20250309132959.19045-5-ansuelsmth@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250309132959.19045-1-ansuelsmth@gmail.com> References: <20250309132959.19045-1-ansuelsmth@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250309_063046_287080_05E4BD21 X-CRM114-Status: GOOD ( 19.89 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org The Airoha AN7581 SoC have in the SCU register space particular address that control how some peripheral are configured. These are toggeled in the System Status Register and are used to toggle Serdes port for USB 3.0 mode or HSGMII, USB 3.0 mode or PCIe2 or setup port for PCIe mode or Ethrnet mode (HSGMII/USXGMII). Modes are mutually exclusive and selecting one mode cause the other feature to not work (example a mode in USB 3.0 cause PCIe port 2 to not work) This depends also on what is physically connected to the Hardware and needs to correctly reflect the System Status Register bits. Special care is needed for PCIe port 0 in 2 line mode that requires both WiFi1 and WiFi2 Serdes port set to PCIe0 2 Line mode. Signed-off-by: Christian Marangi --- .../soc/airoha/airoha,an7581-scu-ssr.yaml | 106 ++++++++++++++++++ MAINTAINERS | 1 + 2 files changed, 107 insertions(+) create mode 100644 Documentation/devicetree/bindings/soc/airoha/airoha,an7581-scu-ssr.yaml diff --git a/Documentation/devicetree/bindings/soc/airoha/airoha,an7581-scu-ssr.yaml b/Documentation/devicetree/bindings/soc/airoha/airoha,an7581-scu-ssr.yaml new file mode 100644 index 000000000000..4bbf6e3b79a4 --- /dev/null +++ b/Documentation/devicetree/bindings/soc/airoha/airoha,an7581-scu-ssr.yaml @@ -0,0 +1,106 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/soc/airoha/airoha,an7581-scu-ssr.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Airoha AN7581 SCU System Status Register + +maintainers: + - Christian Marangi + +description: > + The Airoha AN7581 SoC have in the SCU register space particular + address that control how some peripheral are configured. + + These are toggeled in the System Status Register and are used to + toggle Serdes port for USB 3.0 mode or HSGMII, USB 3.0 mode or PCIe2 + or setup port for PCIe mode or Ethrnet mode (HSGMII/USXGMII). + + Modes are mutually exclusive and selecting one mode cause the + other feature to not work (example a mode in USB 3.0 cause PCIe + port 2 to not work) This depends also on what is physically + connected to the Hardware and needs to correctly reflect the + System Status Register bits. + + Special care is needed for PCIe port 0 in 2 line mode that + requires both WiFi1 and WiFi2 Serdes port set to PCIe0 2 Line + mode. + +properties: + compatible: + const: airoha,an7581-scu-ssr + + airoha,serdes-wifi1: + description: | + Configure the Wifi1 Serdes port for: + - 0: PCIe0 2 Line + - 1: PCIe0 1 Line + - 2: Ethernet modes (HSGMII/USXGMII) + $ref: /schemas/types.yaml#/definitions/uint32 + enum: [0, 1, 2] + default: 1 + + airoha,serdes-wifi2: + description: | + Configure the Wifi2 Serdes port for: + - 0: PCIe0 2 Line + - 1: PCIe1 1 Line + - 2: Ethernet modes (HSGMII/USXGMII) + $ref: /schemas/types.yaml#/definitions/uint32 + enum: [0, 1, 2] + default: 1 + + airoha,serdes-usb1: + description: | + Configure the USB1 Serdes port for: + - 0: USB 3.0 + - 1: Ethernet modes (HSGMII) + $ref: /schemas/types.yaml#/definitions/uint32 + enum: [0, 1] + default: 0 + + airoha,serdes-usb2: + description: | + Configure the USB2 Serdes port for: + - 0: USB 3.0 + - 1: PCIe2 1 Line + $ref: /schemas/types.yaml#/definitions/uint32 + enum: [0, 1] + default: 0 + +required: + - compatible + +allOf: + - if: + properties: + airoha,serdes-wifi1: + const: 0 + then: + properties: + airoha,serdes-wifi2: + const: 0 + + - if: + properties: + airoha,serdes-wifi2: + const: 0 + then: + properties: + airoha,serdes-wifi1: + const: 0 + +additionalProperties: false + +examples: + - | + #include + + system-controller { + compatible = "airoha,an7581-scu-ssr"; + + airoha,serdes-wifi1 = ; + airoha,serdes-wifi2 = ; + airoha,serdes-usb2 = ; + }; diff --git a/MAINTAINERS b/MAINTAINERS index d3125268d63f..9944845ae9f5 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -740,6 +740,7 @@ AIROHA SCU SSR DRIVER M: Christian Marangi L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) S: Maintained +F: Documentation/devicetree/bindings/soc/airoha/airoha,an7581-scu-ssr.yaml F: include/dt-bindings/soc/airoha,scu-ssr.h AIROHA SPI SNFI DRIVER From patchwork Sun Mar 9 13:29:36 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Marangi X-Patchwork-Id: 14008464 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 4C742C2BA1B for ; Sun, 9 Mar 2025 13:40:44 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:To:From:Reply-To: Cc:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=BzS4hzE7zDkztDQBx5YAH+xKOh9ZedPuSQIim2JNdCQ=; b=BbNzIZjhBeuwWuZlnFCNA/1fgT G9DnYsLW32hWtmJVcZ7b9dcTj8/QQoXdzI74O8LaCJRNr1hTAnNqDZh6qIQjpbreW73w8pozx1zNC dXDjfr32JQ5iTsz3rfuoRSVNaO6V5DJe8ch4BiiwKlA7uTDf4lPgwJC+rbR8yOgKsDQLvacApnzGr 308xaZkELRi8pkja/P6vEt9UIMWn/ieVQJ+gCULPhEoFIxj47GdK7R6e+AFXs+bUuUjjKhabo3tgw h8DryOqu7JJ9kHpyQv95BBr2MaHv7hhiE6ZCu3RtiuW7FdS0OhTF5t/kA/9W3xJHnc/VaRCbO0Ytv N7Q1+ZXQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1trGtX-00000000bsR-1lbT; Sun, 09 Mar 2025 13:40:43 +0000 Received: from mail-wr1-x42f.google.com ([2a00:1450:4864:20::42f]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1trGjv-00000000aSg-1qlm; Sun, 09 Mar 2025 13:30:48 +0000 Received: by mail-wr1-x42f.google.com with SMTP id ffacd0b85a97d-39104c1cbbdso1597613f8f.3; Sun, 09 Mar 2025 06:30:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741527046; x=1742131846; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=BzS4hzE7zDkztDQBx5YAH+xKOh9ZedPuSQIim2JNdCQ=; b=dJrQ/kvFNgy1L+8kyCqiNPNlA41f6VZ7IsTng1yiYLRXe+1gXMBryiOeQrVz2OjSq9 Ev2Nc5rrCVKtT1go/WiJZmOgU87JsWDUh13X5mtXgj9XLeuFe419mu5qCVuFIdagJNNQ gAp2cdE1TKWLjwfJqaLG66/Nbb7WKb02gScxfklzmpAEyDKUFjyxJSlU1QplNVhX4UeK VtwLF+9c0okicchdWJjJXDIuefBIouTNEDEJkHa7cZpQ+Pe3ve88tD3B3gDl6e6b7T+h HN4b6NHeMJvPoOxd8DaBTUThfzyLzqsbGO+f9rR1htiiLPK3sC7dSxTuHnIJNHjXkrMi 8Zvg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741527046; x=1742131846; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=BzS4hzE7zDkztDQBx5YAH+xKOh9ZedPuSQIim2JNdCQ=; b=RSyHWMaJQ+xNN6alY5Xzej5O6ASxHeGemasYPyFUfQdpGIkNRQFrL1FJYCIirKItwy AkCC2lVR10BPWJsLAX3RR80SGOT7bqpwpQ2ILQXPGuoID1TQRd3HevHK5guHWoWO9m1g FKIuDfI4cbGrdGO1NSOr+uopptTAFOMCJH1QY+JIbxbbqqSlP7RW+tfonNfy/2FAXAFB rmTowAdLtpLVc4RAThXpsjZGcfDL7IxyYLOFCZOoYKcGlf7pvX+lrziPl/RoXCMegS3c SBMPry4fFYxONw4siPXLNvg1x8h41EHBrXc70FSA1vzrR5MZhoG/zCAsDVwg3qZUp8nv WRVg== X-Forwarded-Encrypted: i=1; AJvYcCUGja3iyToL74vee1YMjhUxo47Cqyjq7KOmOuiTRAQeJer5Xf4UbkmmZsb5hE6fDj4TpCw3C/bwpE2sK/QEmT4=@lists.infradead.org, AJvYcCWz09HBh9A8WeLNWR37xjAI/PS8iT6Q+yHyr0Wim10/HhY2O3cgh2e5RYBnzNfaljA7qlpOtIQIbCwV@lists.infradead.org, AJvYcCXkjU/enQLMpirb+2IE2kvNsBuJZgRKdswlHhNw6RAbRcT5iwE0mUakoy3SbIU3gIDwBMSc3r2gvR68NRcgzLvv@lists.infradead.org X-Gm-Message-State: AOJu0YwgLA1tEp8qZaKVzpp8i3RGQ3fh1x6rdEQOAjFeYxl4SNh+nKjn 2289hdDJmBp9ok92JrvkPoiXCdefM0k3wUh/oyZUz9/LTx/lLY+o X-Gm-Gg: ASbGncvEcZYbPPdB5ipNeDv9qdYwVOAV5n5NAnIebCixctDAam2Pn488D6j/T0L42pj RHOaPiEfOb0/lEJWdvYKDR3hnUDFHjfO2qz0zuDvu0kqvNrUyySjwObPq6P/p+lYYvKcREKhJl6 KyKlBx3k8tGVPk8HSN5iSXK+ywBv4nMebwoMZAjoejVxfCb+5IIUdrYRPyEfbb8CaeuObWFbB9d SnPN3CF7UJTbfoCwAaLJcLG3NU46dW5WgrzdUE6VRM38AiRQcWpXB2mNQyUm2cDAXFCeLElaI1J +pemldOhMCfeuePP9Ql8RPzTeWsh33TGnETIQ+BJ8dXGQo3hvo6b1iKhF5SfAADxJO845FrEqUq MxEpoXhS7rdly8g== X-Google-Smtp-Source: AGHT+IE6bIHxYXeJLeLHPL+p4IEp/6DdN3f/i6NZYTP+hM3wxLjboSsLeWZHA3qzqc5r29m1QI1i5A== X-Received: by 2002:a05:6000:1786:b0:391:48d4:bcf2 with SMTP id ffacd0b85a97d-39148d4bd41mr353208f8f.12.1741527046061; Sun, 09 Mar 2025 06:30:46 -0700 (PDT) Received: from localhost.localdomain (93-34-90-129.ip49.fastwebnet.it. [93.34.90.129]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-3912bee262esm11867536f8f.0.2025.03.09.06.30.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 09 Mar 2025 06:30:45 -0700 (PDT) From: Christian Marangi To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Lee Jones , Christian Marangi , Vinod Koul , Kishon Vijay Abraham I , Matthias Brugger , AngeloGioacchino Del Regno , Greg Kroah-Hartman , Lorenzo Bianconi , Daniel Danzberger , Arnd Bergmann , Linus Walleij , Nikita Shubin , Guo Ren , Yangyu Chen , Ben Hutchings , Felix Fietkau , linux-clk@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-phy@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-usb@vger.kernel.org, upstream@airoha.com Subject: [PATCH 05/13] dt-bindings: mfd: add Documentation for Airoha EN7581 SCU Date: Sun, 9 Mar 2025 14:29:36 +0100 Message-ID: <20250309132959.19045-6-ansuelsmth@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250309132959.19045-1-ansuelsmth@gmail.com> References: <20250309132959.19045-1-ansuelsmth@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250309_063047_478794_116439C6 X-CRM114-Status: GOOD ( 14.30 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org Add Documentation for Airoha EN7581 SCU. Airoha EN7581 SoC expose registers to control miscellaneous pheriperals via the SCU (System Controller Unit). Example of these pheriperals are reset-controller, clock-controller, PCIe line speed controller and bits to configure different Serdes ports for USB or Ethernet usage. Signed-off-by: Christian Marangi --- .../mfd/airoha,en7581-scu-sysctl.yaml | 68 +++++++++++++++++++ 1 file changed, 68 insertions(+) create mode 100644 Documentation/devicetree/bindings/mfd/airoha,en7581-scu-sysctl.yaml diff --git a/Documentation/devicetree/bindings/mfd/airoha,en7581-scu-sysctl.yaml b/Documentation/devicetree/bindings/mfd/airoha,en7581-scu-sysctl.yaml new file mode 100644 index 000000000000..d7dc66f912c1 --- /dev/null +++ b/Documentation/devicetree/bindings/mfd/airoha,en7581-scu-sysctl.yaml @@ -0,0 +1,68 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/mfd/airoha,en7581-scu-sysctl.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Airoha EN7581 SCU (System Controller Unit) + +maintainers: + - Christian Marangi + +description: + Airoha EN7581 SoC expose registers to control miscellaneous + pheriperals via the SCU (System Controller Unit). + + Example of these pheriperals are reset-controller, clock-controller, + PCIe line speed controller and bits to configure different Serdes ports + for USB or Ethernet usage. + +properties: + compatible: + items: + - const: airoha,en7581-scu-sysctl + - const: syscon + - const: simple-mfd + + reg: + maxItems: 1 + + clock-controller: + type: object + $ref: /schemas/clock/airoha,en7523-scu.yaml + description: + Child node definition for EN7581 Clock controller + + system-controller: + type: object + $ref: /schemas/soc/airoha/airoha,an7581-scu-ssr.yaml + description: + Child node definition for EN7581 System Status Register + +required: + - compatible + - reg + +additionalProperties: false + +examples: + - | + #include + + system-controller@1fb00000 { + compatible = "airoha,en7581-scu-sysctl", "syscon", "simple-mfd"; + reg = <0x1fb00000 0x970>; + + clock-controller { + compatible = "airoha,en7581-scu"; + + #clock-cells = <1>; + #reset-cells = <1>; + }; + + system-controller { + compatible = "airoha,an7581-scu-ssr"; + + airoha,serdes-usb2 = ; + }; + }; From patchwork Sun Mar 9 13:29:37 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Marangi X-Patchwork-Id: 14008480 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 85B57C2BA1B for ; Sun, 9 Mar 2025 13:42:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:To:From:Reply-To: Cc:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=ZbSAM91ADrJHfalqGDD88Hb16SIvmOajhEqLWyeYm6g=; b=2WPd9TR3BTLlgfh5NaIWI8eBlQ CLh/nKmgFQjPlnCnMPFDj0K5t8jq4i9qxrRgFr0fR4v7YPOoufZWuXSv+9VgT2KykoAdDke1yd+Gb z1arn6Zx22YBJ/sCbnxnm9HRKdCKVaayR2yGH3fgFksoGSjLsaGzaWBssfFeHaZKzNoxdzoa8enLJ ap38bfWbwGjqDZ+p7LriPt316C83gYdUVS2HquNPAg/rPZFYjU8mBaWS6DTdgtXRtuWKTCRef2hbT Vuwo57b5O+27V63Pje1mEZHqmZGejk6Q6pFuodsdi6GIAc1jtTOlZsZ2vpCawp6OdZ2ekdLYn+o63 FBtu3u3Q==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1trGv7-00000000c69-2ig5; Sun, 09 Mar 2025 13:42:21 +0000 Received: from mail-wr1-x42a.google.com ([2a00:1450:4864:20::42a]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1trGjw-00000000aTH-3x7b; Sun, 09 Mar 2025 13:30:50 +0000 Received: by mail-wr1-x42a.google.com with SMTP id ffacd0b85a97d-390effd3e85so2961155f8f.0; Sun, 09 Mar 2025 06:30:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741527048; x=1742131848; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=ZbSAM91ADrJHfalqGDD88Hb16SIvmOajhEqLWyeYm6g=; b=ffVHkT0CMoCXThTI9rc/STOumGKvqd9qTf6RPttZuSctn8a/USItCYMnhuUE7thGX5 m8MV7sYdKyNJ53+knMzH+lqixkhhAvrul4LpyUR+B4OVMAWp2/25IcAiOexNKtjv4v9G xW6XOYzlUxG88Ahlm7URKfqeXDx9VuMmQnCiaUWJIjgokVVFiKTSkINhblEUhKWsS+aG ErJN5eFJj4Y0ekS7D9GD3gqm8KOyGZRir46tHA7j5Ty+SJ9qDS31+JcqOIYIr+UQpWVM TnEnYHeD26RJXyZvcispes7r7HpHmMR3Hwvlw+bEKxJuPreaWVGU1VI3Sxfpv4kU8Aj7 C6/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741527048; x=1742131848; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ZbSAM91ADrJHfalqGDD88Hb16SIvmOajhEqLWyeYm6g=; b=MfdiyujcvfefMiKo0AgajPvYNr4LBbTwNN6hwaqrM3apXXKrI9V+GRL1r//5va1kOY j5QKsm2CHUH3goFXaGEKMpNU1W45Hv/CHJK1fQwnm0UQys50B7grz/Fx+LLtRPApVOa1 DXggoG9dws+wSsPNNegzIOB/b2Oautqw192On8BEGz+fHZKoND9lr2L2g/9v9/uJRZ0V WvWsGGoueB8iZKbDTJJhOnE31sKl1+k2mb3HCbzfEln/OnocwBqs1+EMcN+/Z8pOlZzD SbFmgE5QdZCa4bpQpOlxMlkYbfywmKtjkSTunBwedeSLXRpopUtWLQJOb4Fi0b37dulz jyIQ== X-Forwarded-Encrypted: i=1; AJvYcCUBekgaPP8EK/KSiQvMdT8WyLxrgIEtuA/nvXJ42+AsbfrH4R3GHmEzu+X+wbG4rX3oX2/XMt3tE4seCf9HYpI=@lists.infradead.org, AJvYcCWi7tzyE4/1lFdTM96j0ZmIWdn2hbiw864EOJZNduEfW/4T+si+xwhiEPciO9cE4Y4ELbVFeHv3dgzKPFnZ+6CM@lists.infradead.org, AJvYcCXbCNdmcZhHR3X2g1RdPhJk2OM4IW9KE+T4xWjIRSiP4sxVEJV+MlQM/oO63+Pes81NkkBJTHItc5Hu@lists.infradead.org X-Gm-Message-State: AOJu0Yy5MGZAchT1jYwSqRV0HTXRe7JYI8Vw4yF5oROGs2ngYOirkMZ/ gntjgTim3jltMBGYmhWX08UMHJV5lOYM5J4tsbHZtwVUs9xE7XUe X-Gm-Gg: ASbGncvi6+bexD1PHzFag2U5+fi1ahfmF6Ui3THYxxZHCCBsVhZr3KzKXzsJXn6nhzG 4IVU9a8YDkWXinFLqOm7iP10+j7TEGsrC6+m7lRjUqqeYtqkLXkMI8At09lFlz36C9gh9AhAxbk zeoHBDprMDW4VBLuxNkNSQqg6xKLL+c7BdZO6x44g2RSXVIS/MUXINTl/JAh7q4XyHbCLQM5eqK gKMA9/B0t9nZWE8RpvVBkU4RZdHWlMPhUx+yH/dKrcMH1KKCtV5LHfneV7leCGW/RcsZLp/PKyT OSqhpLFz5CQ4NxvjbsRtPo4C2fxlc08Ep2mbFzYHfLO6dgSALH7nznMpNMP4bzZYIbR/dxg7YBi E1OiAvluK2JOo/w== X-Google-Smtp-Source: AGHT+IFjxljLxw+g6msj/2zStIgexQhH3tclnIAh4+AmOpan6twS1irZOwFGMlz3N6mJw4r5TT41Og== X-Received: by 2002:a5d:59af:0:b0:390:f745:bbfb with SMTP id ffacd0b85a97d-39132d7d4e1mr6797683f8f.26.1741527047554; Sun, 09 Mar 2025 06:30:47 -0700 (PDT) Received: from localhost.localdomain (93-34-90-129.ip49.fastwebnet.it. [93.34.90.129]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-3912bee262esm11867536f8f.0.2025.03.09.06.30.46 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 09 Mar 2025 06:30:47 -0700 (PDT) From: Christian Marangi To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Lee Jones , Christian Marangi , Vinod Koul , Kishon Vijay Abraham I , Matthias Brugger , AngeloGioacchino Del Regno , Greg Kroah-Hartman , Lorenzo Bianconi , Daniel Danzberger , Arnd Bergmann , Linus Walleij , Nikita Shubin , Guo Ren , Yangyu Chen , Ben Hutchings , Felix Fietkau , linux-clk@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-phy@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-usb@vger.kernel.org, upstream@airoha.com Subject: [PATCH 06/13] dt-bindings: clock: airoha: make reg optional for Airoha EN7581 Date: Sun, 9 Mar 2025 14:29:37 +0100 Message-ID: <20250309132959.19045-7-ansuelsmth@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250309132959.19045-1-ansuelsmth@gmail.com> References: <20250309132959.19045-1-ansuelsmth@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250309_063048_980947_AAEB8992 X-CRM114-Status: GOOD ( 13.19 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org The Airoha EN7581 clock-controller registers are placed in the SCU (System Controller Unit). Now that additional pheriperals are supported for the SCU, a dedicated SCU node is created and the clock-controller is moved as a child of such node hence the register property is taken from the parent node. To support this, make the reg property optional and provide an additional example for this case. Driver supports both old and new implementation by checking the presence of the reg property and parsing the register accordingly. Signed-off-by: Christian Marangi --- .../bindings/clock/airoha,en7523-scu.yaml | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/Documentation/devicetree/bindings/clock/airoha,en7523-scu.yaml b/Documentation/devicetree/bindings/clock/airoha,en7523-scu.yaml index fe2c5c1baf43..84e6c3d43868 100644 --- a/Documentation/devicetree/bindings/clock/airoha,en7523-scu.yaml +++ b/Documentation/devicetree/bindings/clock/airoha,en7523-scu.yaml @@ -51,7 +51,6 @@ properties: required: - compatible - - reg - '#clock-cells' allOf: @@ -66,6 +65,9 @@ allOf: '#reset-cells': false + required: + - reg + - if: properties: compatible: @@ -99,3 +101,12 @@ examples: #reset-cells = <1>; }; }; + + # Example with clock-controller in SCU MFD + - | + clock-controller { + compatible = "airoha,en7581-scu"; + + #clock-cells = <1>; + #reset-cells = <1>; + }; From patchwork Sun Mar 9 13:29:38 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Marangi X-Patchwork-Id: 14008481 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 C8CD1C28B30 for ; Sun, 9 Mar 2025 13:44:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:To:From:Reply-To: Cc:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=vMiZGcno+hW9tt+O9F3Zmv9JkNkMks439bcycH2JGwI=; b=BDxAQ6R4qLsb/MKvz/Dsn7qkxY xkxOY4WWqF6zsihwOdqkhjBdMRsGvm8DCTSH8LpsWeQZlknaWGFnCu987RwCsHy52Qzz60hRHbqMl kscH3pP8zMMynJc9Fg6J4pHEBEmWnv+/sweaonzSh/ifmWF7mTIh0dAobidYx8zSR7Micws0r+a1s ofuMXPrGdtvcVL62V2zY21lHhRvJR+npljQJbU9Od+W5p3p9kMZThQt7fpB6DLN9lmuSsCNSjGHvU URexFzLHhCreNQ4US3I18ZKBhczviKQ12fPc7XwN/MEo2NwRAaL0pRUTWzRJcL1l22IO3lN/OFtjB fk7XSNog==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1trGwi-00000000cLR-3kWe; Sun, 09 Mar 2025 13:44:00 +0000 Received: from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1trGk0-00000000aTy-3KoW; Sun, 09 Mar 2025 13:30:53 +0000 Received: by mail-wr1-x42d.google.com with SMTP id ffacd0b85a97d-3913fdd003bso272946f8f.1; Sun, 09 Mar 2025 06:30:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741527051; x=1742131851; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=vMiZGcno+hW9tt+O9F3Zmv9JkNkMks439bcycH2JGwI=; b=LeEgiM8uK5jBW3PgSUVUA60BaEDWHluLvBVEkxFO4LZEowgSA3nBa2N09EU9qOIPiB mlc3uRJrhUN5P0K6YdLuyyChcVJ+kMzO1L65uJIQBFlKcir+mDCnOT9gFTYkWjntNFdg yAbrtiZpy0q/i3EE1VostyH0iLntbxhkQZM0zYVPpdeoEvTf/3A3uQZ637Cc8Cwtu9H0 bjzxxwjmxcdFjEMkQU+KvUpod7UiH5GVueWG6yAWzv0ckpjRENWHmJLxL406AZMt8cfA sACugV44zdv+GVjTefwTfNg5GVQxArpU/lm4DNd08aiwZM8WO6ua8iogzzKtOTc278D6 2EoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741527051; x=1742131851; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=vMiZGcno+hW9tt+O9F3Zmv9JkNkMks439bcycH2JGwI=; b=trWAZbfEPTeF8ZXIZQr6M/4TFsAk3N4VCzuEnyYEK+3MKchBwcUIGBa7LE2Pc7cySJ Xqc6vtzTJ/svRmB4VInGmVWHvPROncs2PF/3KuvBt8F42BFnnbVHbb1HHjXg2oWKvXUy NheaCaPSSKbw5+vwMv04pceWg74V27n/dRcdqTpClZJmxi9kUeZDgboPGk3QDftNDWrc ddgT62dBJkmfENpngd3e2aTAzH2EbWd92UgDUGHF1yeTZoO25G8RfgkxOo7FAJMxl8+g zRh3ZCZNihzEttnWq33joTgrCyCTJkohVdB2EeGU3uNGgWYNUWkc2EGhbY/gfW8LNQZP SIKA== X-Forwarded-Encrypted: i=1; AJvYcCUFUCZiF7Ha18y6y/Dd8hu08y8JkQAsl/Re4x3Is7zV0yu5Ix6LzTaUfR/ZadqxmP99TBObQWBBPam4DjshXsk=@lists.infradead.org, AJvYcCWQ7n8YUjDWa2ODATuUjblkiYXvVFJGZXvCMl34dCNldKsgKfhfrdtqH6RqeTynyA1fjg4wHXle/OjJ9IKs1tYN@lists.infradead.org, AJvYcCXVsFBUtNHEps/glPQSEtJ8rOVja0riOaYMZoHyvwl1Uy21ffW7HiOS/zII97xSR7xF96nkSdg2ZJ0O@lists.infradead.org X-Gm-Message-State: AOJu0YzLr80KNhRdvw4R58WaFaCWvl6X0AkucKrcmkT31ytav9cORSL2 2PONJ7DgIq2LcjIJrMGqYiiG264CQZrPIDwe01ZU2Lh66khZX58F X-Gm-Gg: ASbGncuoiBGeSyyMw9rwMewxgNO6JDDLta4RkteFtcZyREMQNXozbqwV9NY8UL6y4+5 8PEvzUNBBWFTJeMEaxU1b5nlF3WuIig63XN6ws7V0ph/ki9Q6dpW0abOX4Nbbz68gQDowUSNe+y gqxQ729xW3eZwQEV612BDXboUDe1m+zZFsFyfSAhasBGSVKteUnjmveOPjGbAvhylrFLeT7Dvgd KPUBZreOBOtD8rOPadsaOwkEdMi+ANDxYMFCzmSB9sDQqIKq2N2V/cjCgIXr/E+/P9nVOscNYMv ozTusu9jOGcHNsBXclgJ0CRRKU3CujSGLHauOKjnGjT4XBVR2DgdjG+LYU68KTOp80ooR0NU+jz Ra9B7MZsu6EbgzQ== X-Google-Smtp-Source: AGHT+IEKDnwZY7XkrfL/HLuqPzV7EZSUKsEKRaNGjzZ6iQ8qzVfwZIlEdBBipFRunBqGuf6Da3ld5w== X-Received: by 2002:a05:6000:184b:b0:391:865:5a93 with SMTP id ffacd0b85a97d-3913af328d5mr4021842f8f.22.1741527049718; Sun, 09 Mar 2025 06:30:49 -0700 (PDT) Received: from localhost.localdomain (93-34-90-129.ip49.fastwebnet.it. [93.34.90.129]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-3912bee262esm11867536f8f.0.2025.03.09.06.30.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 09 Mar 2025 06:30:49 -0700 (PDT) From: Christian Marangi To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Lee Jones , Christian Marangi , Vinod Koul , Kishon Vijay Abraham I , Matthias Brugger , AngeloGioacchino Del Regno , Greg Kroah-Hartman , Lorenzo Bianconi , Daniel Danzberger , Arnd Bergmann , Linus Walleij , Nikita Shubin , Guo Ren , Yangyu Chen , Ben Hutchings , Felix Fietkau , linux-clk@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-phy@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-usb@vger.kernel.org, upstream@airoha.com Subject: [PATCH 07/13] clk: en7523: support getting regmap from parent node for EN7581 Date: Sun, 9 Mar 2025 14:29:38 +0100 Message-ID: <20250309132959.19045-8-ansuelsmth@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250309132959.19045-1-ansuelsmth@gmail.com> References: <20250309132959.19045-1-ansuelsmth@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250309_063052_831004_D2BC2CA6 X-CRM114-Status: GOOD ( 15.02 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org Add support for getting clock regmap from parent node for Airoha EN7581. This is needed to support new implementation with SCU (System Controller Unit) as an MFD and clock-controller node as a child node of it. In such implementation the register regmap is provided as a syscon from the parent node. Signed-off-by: Christian Marangi --- drivers/clk/clk-en7523.c | 25 ++++++++++++++++--------- 1 file changed, 16 insertions(+), 9 deletions(-) diff --git a/drivers/clk/clk-en7523.c b/drivers/clk/clk-en7523.c index 2a74bc8fed24..29cb7ccea29a 100644 --- a/drivers/clk/clk-en7523.c +++ b/drivers/clk/clk-en7523.c @@ -665,6 +665,7 @@ static int en7581_clk_hw_init(struct platform_device *pdev, const struct en_clk_soc_data *soc_data, struct clk_hw_onecell_data *clk_data) { + struct device *dev = &pdev->dev; struct regmap *map, *clk_map; void __iomem *base; @@ -672,22 +673,28 @@ static int en7581_clk_hw_init(struct platform_device *pdev, if (IS_ERR(map)) return PTR_ERR(map); - base = devm_platform_ioremap_resource(pdev, 0); - if (IS_ERR(base)) - return PTR_ERR(base); - - clk_map = devm_regmap_init_mmio(&pdev->dev, base, &en7523_clk_regmap_config); - if (IS_ERR(clk_map)) - return PTR_ERR(clk_map); + if (of_property_present(dev->of_node, "reg")) { + base = devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(base)) + return PTR_ERR(base); + + clk_map = devm_regmap_init_mmio(dev, base, &en7523_clk_regmap_config); + if (IS_ERR(clk_map)) + return PTR_ERR(clk_map); + } else { + clk_map = device_node_to_regmap(dev->parent->of_node); + if (IS_ERR(clk_map)) + return PTR_ERR(clk_map); + } - en75xx_register_clocks(&pdev->dev, soc_data, clk_data, map, clk_map); + en75xx_register_clocks(dev, soc_data, clk_data, map, clk_map); regmap_clear_bits(clk_map, REG_NP_SCU_SSTR, REG_PCIE_XSI0_SEL_MASK | REG_PCIE_XSI1_SEL_MASK); regmap_update_bits(clk_map, REG_NP_SCU_PCIC, REG_PCIE_CTRL, FIELD_PREP(REG_PCIE_CTRL, 3)); - return en7581_reset_register(&pdev->dev, clk_map); + return en7581_reset_register(dev, clk_map); } static int en7523_clk_probe(struct platform_device *pdev) From patchwork Sun Mar 9 13:29:39 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Marangi X-Patchwork-Id: 14008482 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 3C990C2BA1B for ; Sun, 9 Mar 2025 13:45:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:To:From:Reply-To: Cc:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=MaDdHrFfN/cuId2Cj+ZtZ5wegXqwq61TDynErdHq3Vs=; b=TLuoPqnwSwPbbsdc4eNyZOmdeu VnGwkd2/wTPPTGbeQXnSnA2OLVBgARNpEGGbByW+dihPcjq3fNdrSCGSWgVmUYQtHupeq++TFmdxI cJP7OgbFuYx/X8l8iy/zHpLGQOqXMVPZcti0+QnLMSXyOMWctts5/XyU/XiW6uNGAA5KCmahzaZYL Z4DOk5bPiKMv421HaVps/CeML5bNXA9xHFPvm12jbqQnUtoaBVW2dQHsvO9pOhmZu5M/lP+CJC6iv 4/twQ7+ACdCe4mle/YYNHsJ3/fYhkY0iE7KubLmVNb4kJCfuJbUqc2eBf8efDVjqg5aOZ/Z5T7g6+ IiQYV1SQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1trGyL-00000000cX3-11dW; Sun, 09 Mar 2025 13:45:41 +0000 Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1trGk1-00000000aU1-0kUH; Sun, 09 Mar 2025 13:30:54 +0000 Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-43cf0d787eeso4292395e9.3; Sun, 09 Mar 2025 06:30:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741527051; x=1742131851; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=MaDdHrFfN/cuId2Cj+ZtZ5wegXqwq61TDynErdHq3Vs=; b=RdP1vDOQXqERYQ7rgGFdczKIynPGCjd+MGj8GqF8KzmCO0huPPNQKim+x6tEZsycZe kGPVDV1huqAtM72BnunjaQIVba64s2VcO1kncMvZHd3e7Yqai/YO/VNl5gGt0Qdrg8kA lrAMm1+n7BiI7ZKmCWHFAZUDht5sKBfkyZEvvSZKxdBer6WMz/gSH1Cnigfj7a7UrElV YB1ehR1xSGQBW4Zd1RevCq+cubsAtNr4yMlrbr4z68rCaWb1TLUPOhLIF1eVxK5tzuF0 4ddnGEDw8DdaZwvRotWALmQCShbQqYrsEFSGLf0Z9qeECODlwpfUHrs0zXUekoFsNaDa IG7g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741527051; x=1742131851; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MaDdHrFfN/cuId2Cj+ZtZ5wegXqwq61TDynErdHq3Vs=; b=G2W5iCefPlYgKDRMTwxF/FncKFYokVSnC2SubNuE2aZrs4LCbAjdmdmiHf34linluM XOz2UFmlq85Te5TOrRfESccOpOgJzw3j/H3td/6pSUB5IOihJ6vIROc4lxJ4KVXDTGnF OfHgLOE1gdkF0g8ZP9LHZSDCqtTV4qDYOAODxwvjW/ABVU488hee1smn+CW2J/CYXjLp HxqMx9I/bM7D8t/cYMikYrdUVh8CLGQAxXVDKQRtS5euWShi/0GIKaaIuUdz9Van+xi+ pCKYf3BHjf5sS4exbCbUbxcSFOcMA1seMfpux3hQqF304niNCoRmjD7NCvoZHxutcn2c v4MQ== X-Forwarded-Encrypted: i=1; AJvYcCUL8sFbh4uy7Fc1MQFHd8exMAMi8DEQ+7mP9XfDbZ2Atths9sxoBcF1xsH4QSGiT0zAsGmHYQssWEZnVxCF2Voa@lists.infradead.org, AJvYcCUQBxPdWQ1g06W61aBxagpjzbyjKij5k8wDMnQJDAH3nQon1cl6Brj4sLJZIoPKGXjkzs3BYNPtMb8AO0WELCA=@lists.infradead.org, AJvYcCW2Vr1Bu/Cj/+z+nxLxKMxSoWKcBrQXwsErYVd0SeuNxVi4EkmgEj2dIchzDAiW5dnpFgFoFHVzdY1k@lists.infradead.org X-Gm-Message-State: AOJu0Yx14FM2fH9nikKmZ4IjBPEzPhZrSdxGr3rDF1WbrTX5KDKQ5KRe 74Xen4eEYgqx52oObc+AIvj/RXj+m6Cy4TVX/5Pv+PIdDqFnGyh4kL0G3w== X-Gm-Gg: ASbGncs2uprskYaEcTQATci08+YtyhUgva6imKsgUAW4vkZE5sj6nOn6s+tLH9wqgl7 dmSU3EeWQFSdyQTp3c8W5wY+tQXAU4f2+7mccxuf8YAppLYCdMSRYEDYkY4ojFten9adozUhuPN BdkwogJUt7h+H7uMw9PKvfYZKg94LEUJfdHqX0TzziCVqOjozc3hCx/ckmRKjoK7Sa++LrrqOlN Obi+eHVeVIoteDQrMR1iIgOH4nhPSm0ga1HoVV0mp+ZMrxuN4z2mMAt3xOvpbRB1tSLQRF+3g3e BkmPa9BYAeunf4fFuyZ1UaI/dd5++IJq9oXv5RIV1OlitBkloqqxT/H6XdGB6If2N8aBblgZLN9 j5c2WoAsLzOW+Ug== X-Google-Smtp-Source: AGHT+IEiSIK5016GDeMsMvzWNTkzBaWLO48BvAc2SsYBWNmLkvti3ZmfcW0CvOCphh/orfbgClUAaw== X-Received: by 2002:a05:6000:1867:b0:390:f987:26a1 with SMTP id ffacd0b85a97d-39132d885bcmr5325580f8f.29.1741527051346; Sun, 09 Mar 2025 06:30:51 -0700 (PDT) Received: from localhost.localdomain (93-34-90-129.ip49.fastwebnet.it. [93.34.90.129]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-3912bee262esm11867536f8f.0.2025.03.09.06.30.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 09 Mar 2025 06:30:51 -0700 (PDT) From: Christian Marangi To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Lee Jones , Christian Marangi , Vinod Koul , Kishon Vijay Abraham I , Matthias Brugger , AngeloGioacchino Del Regno , Greg Kroah-Hartman , Lorenzo Bianconi , Daniel Danzberger , Arnd Bergmann , Linus Walleij , Nikita Shubin , Guo Ren , Yangyu Chen , Ben Hutchings , Felix Fietkau , linux-clk@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-phy@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-usb@vger.kernel.org, upstream@airoha.com Subject: [PATCH 08/13] soc: airoha: add support for configuring SCU SSR Serdes port Date: Sun, 9 Mar 2025 14:29:39 +0100 Message-ID: <20250309132959.19045-9-ansuelsmth@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250309132959.19045-1-ansuelsmth@gmail.com> References: <20250309132959.19045-1-ansuelsmth@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250309_063053_223212_E075CE0C X-CRM114-Status: GOOD ( 33.41 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org Add support for configuring SCU SSR Serdes port. Airoha AN7581 SoC can configure the different Serdes port by toggling bits in the SCU register space. Port Serdes mode are mutually exclusive, force example the USB2 Serdes port can either used for USB 3.0 or PCIe 2 port. Enabling USB 3.0 makes the PCIe 2 to not work. The current supported Serdes port are: - WiFi 1 and defaults to PCIe0 1 line mode - Wifi 2 and defaults to PCIe1 1 line mode - USB 1 and defaults to USB 3.0 mode - USB 2 and defaults to USB 3.0 mode WiFi 1, WiFi 2 and USB 1 also support a particular Ethernet mode that can toggle between USXGMII or HSGMII mode (USB 1 only to HSGMII) Such mode doesn't configure bits as specific Ethernet PCS driver will take care of configuring the Serdes mode based on what is required. This driver is to correctly setup these bits and provide an API to read the current status of the Serdes port. Single driver can't independently set the Serdes port mode as that would cause a conflict if someone declare, for example, in DT (and enable) PCIe 2 port and USB2 3.0 port. Drivers will use the airoha_scu_ssr_get_serdes_mode function and will validate the Serdes port is the expected one and fail if it's not. Each driver will have to define in DT the phandle airoha,scu-ssr pointing to the SCU SSR node. Signed-off-by: Christian Marangi --- MAINTAINERS | 1 + drivers/soc/Kconfig | 1 + drivers/soc/Makefile | 1 + drivers/soc/airoha/Kconfig | 18 ++ drivers/soc/airoha/Makefile | 3 + drivers/soc/airoha/airoha-scu-ssr.c | 195 ++++++++++++++++++++++ include/linux/soc/airoha/airoha-scu-ssr.h | 17 ++ include/linux/soc/soc/airoha-scu-ssr.h | 17 ++ 8 files changed, 253 insertions(+) create mode 100644 drivers/soc/airoha/Kconfig create mode 100644 drivers/soc/airoha/Makefile create mode 100644 drivers/soc/airoha/airoha-scu-ssr.c create mode 100644 include/linux/soc/airoha/airoha-scu-ssr.h create mode 100644 include/linux/soc/soc/airoha-scu-ssr.h diff --git a/MAINTAINERS b/MAINTAINERS index 9944845ae9f5..fe34c80b8d52 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -741,6 +741,7 @@ M: Christian Marangi L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) S: Maintained F: Documentation/devicetree/bindings/soc/airoha/airoha,an7581-scu-ssr.yaml +F: drivers/soc/airoha/airoha-scu-ssr.c F: include/dt-bindings/soc/airoha,scu-ssr.h AIROHA SPI SNFI DRIVER diff --git a/drivers/soc/Kconfig b/drivers/soc/Kconfig index 6a8daeb8c4b9..21bacefd2e06 100644 --- a/drivers/soc/Kconfig +++ b/drivers/soc/Kconfig @@ -1,6 +1,7 @@ # SPDX-License-Identifier: GPL-2.0-only menu "SOC (System On Chip) specific Drivers" +source "drivers/soc/airoha/Kconfig" source "drivers/soc/amlogic/Kconfig" source "drivers/soc/apple/Kconfig" source "drivers/soc/aspeed/Kconfig" diff --git a/drivers/soc/Makefile b/drivers/soc/Makefile index 2037a8695cb2..4338730af0aa 100644 --- a/drivers/soc/Makefile +++ b/drivers/soc/Makefile @@ -3,6 +3,7 @@ # Makefile for the Linux Kernel SOC specific device drivers. # +obj-$(CONFIG_ARCH_AIROHA) += airoha/ obj-y += apple/ obj-y += aspeed/ obj-$(CONFIG_ARCH_AT91) += atmel/ diff --git a/drivers/soc/airoha/Kconfig b/drivers/soc/airoha/Kconfig new file mode 100644 index 000000000000..56c677f8238d --- /dev/null +++ b/drivers/soc/airoha/Kconfig @@ -0,0 +1,18 @@ +# SPDX-License-Identifier: GPL-2.0-only + +config AIROHA_SCU_SSR + tristate "Airoha SCU SSR Driver" + depends on ARCH_AIROHA || COMPILE_TEST + depends on OF + help + Say 'Y' here to add support for Airoha SCU SSR driver. + + Airoha SoC pheriperal (like USB/PCIe/Ethernet port) are + selected by toggling specific bit. Serdes Port line + are mutually exclusive such as selecting PCIe port 2 + disable support for USB port 2 3.0 mode. + + This driver is used to configure such bit and expose + an API to read the current status from a user of such + Serdes lines. + diff --git a/drivers/soc/airoha/Makefile b/drivers/soc/airoha/Makefile new file mode 100644 index 000000000000..530825251ae9 --- /dev/null +++ b/drivers/soc/airoha/Makefile @@ -0,0 +1,3 @@ +# SPDX-License-Identifier: GPL-2.0 + +obj-$(CONFIG_AIROHA_SCU_SSR) += airoha-scu-ssr.o diff --git a/drivers/soc/airoha/airoha-scu-ssr.c b/drivers/soc/airoha/airoha-scu-ssr.c new file mode 100644 index 000000000000..fe65b5b91146 --- /dev/null +++ b/drivers/soc/airoha/airoha-scu-ssr.c @@ -0,0 +1,195 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Author: Christian Marangi + */ + +#include +#include +#include +#include +#include +#include +#include + +#define AIROHA_SCU_PCIC 0x88 +#define AIROHA_SCU_PCIE_2LANE_MODE BIT(14) + +#define AIROHA_SCU_SSR3 0x94 +#define AIROHA_SCU_SSUSB_HSGMII_SEL BIT(29) + +#define AIROHA_SCU_SSTR 0x9c +#define AIROHA_SCU_PCIE_XSI0_SEL GENMASK(14, 13) +#define AIROHA_SCU_PCIE_XSI0_SEL_PCIE FIELD_PREP_CONST(AIROHA_SCU_PCIE_XSI0_SEL, 0x0) +#define AIROHA_SCU_PCIE_XSI1_SEL GENMASK(12, 11) +#define AIROHA_SCU_PCIE_XSI1_SEL_PCIE FIELD_PREP_CONST(AIROHA_SCU_PCIE_XSI0_SEL, 0x0) +#define AIROHA_SCU_USB_PCIE_SEL BIT(3) + +struct airoha_scu_ssr_priv { + struct device *dev; + struct regmap *regmap; + + u32 serdes_port[AIROHA_SCU_MAX_SERDES_PORT]; +}; + +int airoha_scu_ssr_get_serdes_mode(struct device *dev, + enum airoha_scu_serdes_port port) +{ + struct airoha_scu_ssr_priv *priv; + struct platform_device *pdev; + struct device_node *np; + + np = of_parse_phandle(dev->of_node, "airoha,scu-ssr", 0); + if (!np) + return -ENODEV; + + if (!of_device_is_available(np)) { + of_node_put(np); + return -ENODEV; + } + + pdev = of_find_device_by_node(np); + of_node_put(np); + if (!pdev || !platform_get_drvdata(pdev)) { + if (pdev) + put_device(&pdev->dev); + return -EPROBE_DEFER; + } + + priv = platform_get_drvdata(pdev); + + return priv->serdes_port[port]; +} +EXPORT_SYMBOL_GPL(airoha_scu_ssr_get_serdes_mode); + +static int airoha_scu_ssr_apply_modes(struct airoha_scu_ssr_priv *priv) +{ + int ret; + + /* + * This is a very bad scenario and needs to be correctly warned + * as it cause PCIe malfunction + */ + if ((priv->serdes_port[AIROHA_SCU_SERDES_WIFI1] == AIROHA_SCU_SSR_WIFI1_PCIE0_2LINE && + priv->serdes_port[AIROHA_SCU_SERDES_WIFI2] != AIROHA_SCU_SSR_WIFI2_PCIE0_2LINE) || + (priv->serdes_port[AIROHA_SCU_SERDES_WIFI1] != AIROHA_SCU_SSR_WIFI1_PCIE0_2LINE && + priv->serdes_port[AIROHA_SCU_SERDES_WIFI2] == AIROHA_SCU_SSR_WIFI2_PCIE0_2LINE)) { + WARN(true, "Wrong Serdes configuration for PCIe0 2 Line mode. Please check DT.\n"); + return -EINVAL; + } + + /* PCS driver takes case of setting the SCU bit for HSGMII or USXGMII */ + if (priv->serdes_port[AIROHA_SCU_SERDES_WIFI1] == AIROHA_SCU_SSR_WIFI1_PCIE0_2LINE || + priv->serdes_port[AIROHA_SCU_SERDES_WIFI1] == AIROHA_SCU_SSR_WIFI1_PCIE0) { + ret = regmap_update_bits(priv->regmap, AIROHA_SCU_SSTR, + AIROHA_SCU_PCIE_XSI0_SEL, + AIROHA_SCU_PCIE_XSI0_SEL_PCIE); + if (ret) + return ret; + } + + /* PCS driver takes case of setting the SCU bit for HSGMII or USXGMII */ + if (priv->serdes_port[AIROHA_SCU_SERDES_WIFI2] == AIROHA_SCU_SSR_WIFI2_PCIE0_2LINE || + priv->serdes_port[AIROHA_SCU_SERDES_WIFI2] == AIROHA_SCU_SSR_WIFI2_PCIE1) { + ret = regmap_update_bits(priv->regmap, AIROHA_SCU_SSTR, + AIROHA_SCU_PCIE_XSI1_SEL, + AIROHA_SCU_PCIE_XSI1_SEL_PCIE); + if (ret) + return ret; + } + + /* Toggle PCIe0 2 Line mode if enabled or not */ + if (priv->serdes_port[AIROHA_SCU_SERDES_WIFI1] == AIROHA_SCU_SSR_WIFI1_PCIE0_2LINE) + ret = regmap_set_bits(priv->regmap, AIROHA_SCU_PCIC, + AIROHA_SCU_PCIE_2LANE_MODE); + else + ret = regmap_clear_bits(priv->regmap, AIROHA_SCU_PCIC, + AIROHA_SCU_PCIE_2LANE_MODE); + if (ret) + return ret; + + if (priv->serdes_port[AIROHA_SCU_SERDES_USB1] == AIROHA_SCU_SSR_USB1_ETHERNET) + ret = regmap_clear_bits(priv->regmap, AIROHA_SCU_SSR3, + AIROHA_SCU_SSUSB_HSGMII_SEL); + else + ret = regmap_set_bits(priv->regmap, AIROHA_SCU_SSR3, + AIROHA_SCU_SSUSB_HSGMII_SEL); + if (ret) + return ret; + + if (priv->serdes_port[AIROHA_SCU_SERDES_USB2] == AIROHA_SCU_SSR_USB2_PCIE2) + ret = regmap_clear_bits(priv->regmap, AIROHA_SCU_SSTR, + AIROHA_SCU_USB_PCIE_SEL); + else + ret = regmap_set_bits(priv->regmap, AIROHA_SCU_SSTR, + AIROHA_SCU_USB_PCIE_SEL); + if (ret) + return ret; + + return 0; +} + +static int airoha_scu_ssr_probe(struct platform_device *pdev) +{ + struct airoha_scu_ssr_priv *priv; + struct device *dev = &pdev->dev; + int ret; + + priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); + if (!priv) + return -ENOMEM; + + priv->dev = dev; + + /* Get regmap from MFD */ + priv->regmap = dev_get_regmap(dev->parent, NULL); + if (!priv->regmap) + return -EINVAL; + + /* If not set, default to PCIE0 1 line */ + if (of_property_read_u32(dev->of_node, "airoha,serdes-wifi1", + &priv->serdes_port[AIROHA_SCU_SERDES_WIFI1])) + priv->serdes_port[AIROHA_SCU_SERDES_WIFI1] = AIROHA_SCU_SSR_WIFI1_PCIE0; + + /* If not set, default to PCIE1 1 line */ + if (of_property_read_u32(dev->of_node, "airoha,serdes-wifi2", + &priv->serdes_port[AIROHA_SCU_SERDES_WIFI2])) + priv->serdes_port[AIROHA_SCU_SERDES_WIFI1] = AIROHA_SCU_SSR_WIFI2_PCIE1; + + /* If not set, default to USB1 USB 3.0 */ + if (of_property_read_u32(dev->of_node, "airoha,serdes-usb1", + &priv->serdes_port[AIROHA_SCU_SERDES_USB1])) + priv->serdes_port[AIROHA_SCU_SERDES_WIFI1] = AIROHA_SCU_SSR_USB1_USB; + + /* If not set, default to USB2 USB 3.0 */ + if (of_property_read_u32(dev->of_node, "airoha,serdes-usb2", + &priv->serdes_port[AIROHA_SCU_SERDES_USB2])) + priv->serdes_port[AIROHA_SCU_SERDES_WIFI1] = AIROHA_SCU_SSR_USB2_USB; + + ret = airoha_scu_ssr_apply_modes(priv); + if (ret) + return ret; + + platform_set_drvdata(pdev, priv); + + return 0; +} + +static const struct of_device_id airoha_phy_id_table[] = { + { .compatible = "airoha,an7581-scu-ssr" }, + { }, +}; +MODULE_DEVICE_TABLE(of, airoha_phy_id_table); + +static struct platform_driver airoha_scu_ssr_driver = { + .probe = airoha_scu_ssr_probe, + .driver = { + .name = "airoha-scu-ssr", + .of_match_table = airoha_phy_id_table, + }, +}; + +module_platform_driver(airoha_scu_ssr_driver); + +MODULE_AUTHOR("Christian Marangi "); +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("Airoha SCU SSR/STR driver"); diff --git a/include/linux/soc/airoha/airoha-scu-ssr.h b/include/linux/soc/airoha/airoha-scu-ssr.h new file mode 100644 index 000000000000..d5ff50dc224f --- /dev/null +++ b/include/linux/soc/airoha/airoha-scu-ssr.h @@ -0,0 +1,17 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __AIROHA_SCU_SSR__ +#define __AIROHA_SCU_SSR__ + +enum airoha_scu_serdes_port { + AIROHA_SCU_SERDES_WIFI1 = 0, + AIROHA_SCU_SERDES_WIFI2, + AIROHA_SCU_SERDES_USB1, + AIROHA_SCU_SERDES_USB2, + + AIROHA_SCU_MAX_SERDES_PORT, +}; + +int airoha_scu_ssr_get_serdes_mode(struct device *dev, + enum airoha_scu_serdes_port port); + +#endif diff --git a/include/linux/soc/soc/airoha-scu-ssr.h b/include/linux/soc/soc/airoha-scu-ssr.h new file mode 100644 index 000000000000..d5ff50dc224f --- /dev/null +++ b/include/linux/soc/soc/airoha-scu-ssr.h @@ -0,0 +1,17 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#ifndef __AIROHA_SCU_SSR__ +#define __AIROHA_SCU_SSR__ + +enum airoha_scu_serdes_port { + AIROHA_SCU_SERDES_WIFI1 = 0, + AIROHA_SCU_SERDES_WIFI2, + AIROHA_SCU_SERDES_USB1, + AIROHA_SCU_SERDES_USB2, + + AIROHA_SCU_MAX_SERDES_PORT, +}; + +int airoha_scu_ssr_get_serdes_mode(struct device *dev, + enum airoha_scu_serdes_port port); + +#endif From patchwork Sun Mar 9 13:29:40 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Marangi X-Patchwork-Id: 14008498 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 10819C2BA1B for ; Sun, 9 Mar 2025 13:47:21 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:To:From:Reply-To: Cc:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=CuJuN5e8INaAlM6qxY9WAob6GPx4Mq94a1xQWHzf+1M=; b=Yt5lzuXXLWT2frVpt6kRdyfzM7 64VydQT502nmCwQ88ZUm6oL4AZV0etghJodcjbUBHffuL/KXs6YgoWO1iZtPYWnO+2vsPVg9Ql15C 8SDbp3WMP+5nCKm0syq233FZpeEPwyHmsmmQMYw3CbOUsQNgaVBOy9r5Lop8P099drVor2zOIMaew hREQPFpDzZCJGIoz/yPD4qZu5KoFYcTegkGjucr4pa1WxTqvWlgVDaBPxz7kkF8a4+y0oGvvxIu/J GwYAWfqypm1HX6gcOhrSVu+BMs4AeiAYscjulSiK6zHGREpFN2i+rV/ENw3HDlHbmVfQ47rqq4zW+ RyfcZWMw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1trGzw-00000000cfP-0b5K; Sun, 09 Mar 2025 13:47:20 +0000 Received: from mail-wm1-x335.google.com ([2a00:1450:4864:20::335]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1trGk2-00000000aUz-47Z2; Sun, 09 Mar 2025 13:30:56 +0000 Received: by mail-wm1-x335.google.com with SMTP id 5b1f17b1804b1-43bc63876f1so28805695e9.3; Sun, 09 Mar 2025 06:30:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741527053; x=1742131853; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=CuJuN5e8INaAlM6qxY9WAob6GPx4Mq94a1xQWHzf+1M=; b=LqBXLfDKk315DqvHlh/rHlP/Whae3AGer7zi15JPz4TpcXObM8ZerT0SDCBUavDwJD GTv2HI4oF8QW1ObgQWRDiUjZcMEgOX8aMazK7NQPn6g6GRcPOe+mttGzvmjJjlE6XLAk uTegxbV1mpp9cw0uEBZW9j4cvHaJ3q7T0POnWPeceqELqpoODB1ZNVC2DIZ/8gns+tH6 C5A3OPO+AaGRl5NgRZ2Tp01NtMjyru3f1ba2o8+A8VU4c6SfDEKDmvz+ASD4JFk+41TO QwfZpCNjRmqVIRUYaeVPBtR8qisH9dEkJPlyv4y5ZExz0y9A5ZdLtBjwaeUaNYW6KPlg a6Pw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741527053; x=1742131853; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=CuJuN5e8INaAlM6qxY9WAob6GPx4Mq94a1xQWHzf+1M=; b=oxgJQztRekNfPhqBpoMpr5SDEt/qfYHmbfh+IlTNkpW/yQy3DPJnaSU77sWnpHMWgW gR9Za/cI6q4JA5A9UdhThvhYfvegM/wNJbvP90h+ZZ+vLs9gsIet5TI/uTC2TDntrm6G yHvDLCjMl2inhAz9/nX46xwlGsAcmmNOs84+9XVMsVfTB6f27TiTB23AIf6eGjoxcPrx gQUXiezpiNH1Hh/IYyJpw5Kg3zRbjrrC7VihN0hbvVMRK2gchG7mSmfOqT8xVSdlRSot ZJVQGZuqOsWEWh0rN+zCxJ8MjYqUOvpVPTZVFJn921kGE9IOEuwinScqMm7aNiZ0XL/I BXxg== X-Forwarded-Encrypted: i=1; AJvYcCV7OAlLurAi9De2m9E+K7dUt1IjM3+iKikmqo1kJDL3y46cB0XChNuvpde+h+byZq69aokI3TUpKKiEtqMIo8Zn@lists.infradead.org, AJvYcCVTYgS61eyPmtLf9GBvpk/cJb9RGPWIB/sb8aH4zyhRYmooRyOipcdSj29dgLN3xRYH8ud6ViRA5glWNO2w0UU=@lists.infradead.org, AJvYcCVjP6e4JnRb5tTljpzyrDHe++t3y5q2MnngOF8r9koCZvTYklf75ZbXlbhe7vVznmurHTCFKLhb4y2P@lists.infradead.org X-Gm-Message-State: AOJu0YyWFJ47fRgjFcIaFJ2SpY/eyvAYPxKwwknzcdiYQw7Xj5iiiqtV 1HAXVPrzqf/ZCQpidk0ZwAWai5tsNWo/iqaEM0b7/J02K346/Dj9 X-Gm-Gg: ASbGnctRJ4iSCbWJHXOIdHoNG8XzbfHjHQGqZ/u6hgZDXDvdWKDf7871ZEM/+TKi/oZ GT5SJwncEljB9JrO3X68tZq13H54KyzVqO+g0TJsR2Fq8BEGCWWZH5dkuhdPy32B/9f3eNCRIAV SKBfLix/OrKXLPQgU1ErGv99i+H7nRximMXeVYg0zYqNTxHuPklJusjmoo8yVsbxkythPCkXWTQ B2qN/SL8iMv1/uk+We8EcotZNFW7ELJiTJ29pi1ytczZYPGo8jyL6fruJUGlBljYYIU6eWJ+wTH Z+oENIldO/R4GvZfg4NPxrvfaVRukigdYEQ76lV3JGsdUI5yC0J4BKiugMHMDfVGi+88AwLwsf/ V/jwxvzqdSqxLDA== X-Google-Smtp-Source: AGHT+IFGo9ofFT7kEEvkQR0bhsGyGhheZZrnScLSJMBE5tOsiIR0FkCqZHSoqIPzYPa4wsJvnG0KVA== X-Received: by 2002:a05:600c:1553:b0:43c:eacc:9d8c with SMTP id 5b1f17b1804b1-43ceacca0f7mr22400025e9.24.1741527052936; Sun, 09 Mar 2025 06:30:52 -0700 (PDT) Received: from localhost.localdomain (93-34-90-129.ip49.fastwebnet.it. [93.34.90.129]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-3912bee262esm11867536f8f.0.2025.03.09.06.30.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 09 Mar 2025 06:30:52 -0700 (PDT) From: Christian Marangi To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Lee Jones , Christian Marangi , Vinod Koul , Kishon Vijay Abraham I , Matthias Brugger , AngeloGioacchino Del Regno , Greg Kroah-Hartman , Lorenzo Bianconi , Daniel Danzberger , Arnd Bergmann , Linus Walleij , Nikita Shubin , Guo Ren , Yangyu Chen , Ben Hutchings , Felix Fietkau , linux-clk@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-phy@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-usb@vger.kernel.org, upstream@airoha.com Subject: [PATCH 09/13] dt-bindings: phy: Add documentation for Airoha AN7581 USB PHY Date: Sun, 9 Mar 2025 14:29:40 +0100 Message-ID: <20250309132959.19045-10-ansuelsmth@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250309132959.19045-1-ansuelsmth@gmail.com> References: <20250309132959.19045-1-ansuelsmth@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250309_063055_022315_F947A70A X-CRM114-Status: GOOD ( 19.37 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org Add documentation for Airoha AN7581 USB PHY that describe the USB PHY for the USB controller. Airoha AN7581 SoC support a maximum of 2 USB port. The USB 2.0 mode is always supported. The USB 3.0 mode is optional and depends on the Serdes mode currently configured on the system for the USB port. If USB 3.0 node is defined, then airoha,scu-ssr property is required for Serdes mode validation. Signed-off-by: Christian Marangi --- .../bindings/phy/airoha,an7581-usb-phy.yaml | 106 ++++++++++++++++++ MAINTAINERS | 6 + 2 files changed, 112 insertions(+) create mode 100644 Documentation/devicetree/bindings/phy/airoha,an7581-usb-phy.yaml diff --git a/Documentation/devicetree/bindings/phy/airoha,an7581-usb-phy.yaml b/Documentation/devicetree/bindings/phy/airoha,an7581-usb-phy.yaml new file mode 100644 index 000000000000..39127cfb63a7 --- /dev/null +++ b/Documentation/devicetree/bindings/phy/airoha,an7581-usb-phy.yaml @@ -0,0 +1,106 @@ +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/phy/airoha,an7581-usb-phy.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Airoha AN7581 SoC USB PHY + +maintainers: + - Christian Marangi + +description: > + The Airoha AN7581 SoC USB PHY describes the USB PHY for the USB controller. + + Airoha AN7581 SoC support a maximum of 2 USB port. The USB 2.0 mode is + always supported. The USB 3.0 mode is optional and depends on the Serdes + mode currently configured on the system for the USB port. If USB 3.0 node + is defined, then airoha,scu-ssr property is required for Serdes mode + validation. + +properties: + compatible: + const: airoha,an7581-usb-phy + + reg: + maxItems: 1 + + airoha,port-id: + description: Describe the physical port this USB PHY refer to. A dedicated + osciallator is used for each port for the USB 2.0 Slew Rate calibration. + $ref: /schemas/types.yaml#/definitions/uint32 + enum: [0, 1] + + airoha,scu-ssr: + description: Phandle to the SCU SSR node for USB 3.0 Serdes mode validation. + $ref: /schemas/types.yaml#/definitions/phandle + + usb2-phy: + type: object + + properties: + '#phy-cells': + const: 1 + + required: + - '#phy-cells' + + additionalProperties: false + + usb3-phy: + type: object + + properties: + '#phy-cells': + const: 1 + + required: + - '#phy-cells' + + additionalProperties: false + +required: + - compatible + - reg + - airoha,port-id + - usb2-phy + +if: + required: + - usb3-phy +then: + required: + - airoha,scu-ssr + +additionalProperties: false + +examples: + - | + phy@1fac0000 { + compatible = "airoha,an7581-usb-phy"; + reg = <0x1fac0000 0x10000>; + + airoha,port-id = <0>; + airoha,scu-ssr = <&scu_ssr>; + + usb0_u2: usb2-phy { + #phy-cells = <1>; + }; + + usb0_u3: usb3-phy { + #phy-cells = <1>; + }; + }; + + - | + phy@1fae0000 { + compatible = "airoha,an7581-usb-phy"; + reg = <0x1fae0000 0x10000>; + + airoha,port-id = <1>; + + usb1_u2: usb2-phy { + #phy-cells = <1>; + }; + }; + diff --git a/MAINTAINERS b/MAINTAINERS index fe34c80b8d52..c2dd385e9165 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -753,6 +753,12 @@ S: Maintained F: Documentation/devicetree/bindings/spi/airoha,en7581-snand.yaml F: drivers/spi/spi-airoha-snfi.c +AIROHA USB PHY DRIVER +M: Christian Marangi +L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) +S: Maintained +F: Documentation/devicetree/bindings/phy/airoha,an7581-usb-phy.yam + AIRSPY MEDIA DRIVER L: linux-media@vger.kernel.org S: Orphan From patchwork Sun Mar 9 13:29:41 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Marangi X-Patchwork-Id: 14008499 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 5CD25C28B2F for ; Sun, 9 Mar 2025 13:49:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:To:From:Reply-To: Cc:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=Lsm9QoyKmW3RuyIdQZEQJ299DykBb6Yk0DvMS1wP270=; b=RfICVOeIFB9ib3w37dXmmlxjfU IW/AFXPAMVfzIDUWCNvsxmE9cxn79ivfj4tEHfOFeSdZO15en60ebJtYUCD+Jld3rucwoVLSDaI2t SI/PfnZb9Ag5Xr7GwCYqULXsVcNw79RrO5pCsa3lQc7gV51FaLJs0Kc510eVilE1jeusECEf3MGhQ W+vJ80ljdq9Xa8SWiNZksAXP7CCbAhjvfHpp+db9wqvfxfk9V/7zqnlnDlx5Yi1uVJCwyii4fpSgf Sf6E0THlk9vSRvpel3u72+xOG4rzi7Zl1uYkFulB9wBZfresCF53dXfNS8XVG0seHFwVYtoOWbA44 9angXKpw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1trH1X-00000000cmq-1l3x; Sun, 09 Mar 2025 13:48:59 +0000 Received: from mail-wm1-x331.google.com ([2a00:1450:4864:20::331]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1trGk4-00000000aW8-1TaG; Sun, 09 Mar 2025 13:30:57 +0000 Received: by mail-wm1-x331.google.com with SMTP id 5b1f17b1804b1-43ce70f9afbso10157295e9.0; Sun, 09 Mar 2025 06:30:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741527055; x=1742131855; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=Lsm9QoyKmW3RuyIdQZEQJ299DykBb6Yk0DvMS1wP270=; b=cvJEhvERSd6vOxWT00+DUDh3mu8HaEomPrsVP8m2bXHJXJDshj7gkac4QtS+xsfbgj Rl2Xn9Xa6XFxz9WhWakYJ3G94KLFjeonydBUbdtWIUQAxzH+31dWLBslzKaKBe6ZzElL huy1q1zoUW4kWw3z32hCysVKgX+V8pBIfws4Mev4WDJGGMKnQXoHjbx8KbEkX3V/20ea 3uruHzMLlwo5D2kBUzx4zC082tsv6Lbk57Rc0ZeDiz94gvr3XWoNrn15dLAjy+r9mx0y O18fUzk6pV+w76Xy2KMtKR+QZxZScK8MNDUF+rr3yMZrZ2IqJOqCuew3ow7aFUOA+FTP pnOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741527055; x=1742131855; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Lsm9QoyKmW3RuyIdQZEQJ299DykBb6Yk0DvMS1wP270=; b=HTsJq7Gaw5YFQ4yWTI7a99r+fJaLP1pOBBi4nDtGzGybPAc5FVvfJCLvz0fKFWtdRA kl0aQ6NLVpcOhbg3DA8CZF8Sp6XgS8Q6myUzOQNGK+1stDbHCEEAVZ4AqltbW4qOE6JI iURg6PIeWKuV3ACS38+Aej9gpDqPnJNayF2Ve3FUnKTkm4SLnWiC8gnKBJb85LRbi0g/ 1ZU2eVL2+/6owTUJW/jlm9BV+hjt6YFbCW8tEj/lqvvp9Km2yqI71qdSgBM0cY6K1L8U kta0WrnQvY4cQN8auWkYSxE1S+QBKcBYUDKnyV/30GVNzoUo+Xp1xlUzxS7nLeS0Gh8a HvIQ== X-Forwarded-Encrypted: i=1; AJvYcCU1FWZd0YDapcJ6CnjOkC5cnW3xg/hjJgcNC7nfVnYf0od3azv194QglwP1ISRCmgrRWXeLyY7vpWi7C0YyxnSx@lists.infradead.org, AJvYcCU7EGpgGN1Bl5O7+pR/LUn/tbeahNaUU8NtQxhPp3UIzN4ceUoDI9k5lMZsIc0xxpUIrboPKYyqjtS1@lists.infradead.org, AJvYcCU7lp8izFmFQeSTSEIpn1l/RBSBcb5f5OGMcGRhDgnyQpfUwYhfCQzPtYUrvpNxFp4cn16ncocWXPZqvIjpT4Q=@lists.infradead.org X-Gm-Message-State: AOJu0YwXgHPK4Xk/kaax6KfTPbmdzoz0Polv7gONqh/uIk9v6cK/eQkU EpD+tQBcz4pEc7ihvSyCLBULqUHkDtGi78zsqjZNbrEm0UPXsy7W X-Gm-Gg: ASbGnctcH3oznDCN6wUzXBo78qhKxYPc9nA3Cw3qK3c14U2YhW2J8sK1WnbQSCBjB3b LD/5DCeeLBk24bvrfRMQZAND/0DGQL2yulgLCWX0xzdwxHObBieGWek54SY/1DemPh9ctZe6YPG 2JqvHBi0YOTPkfkLgExa7R61aPg+TcOgJ4XgeQGr6pKdQ7aeHaOX5COiXI/XkzC7utw9EDImw3c piLrE48jdMC31cF5HT1/jddu55R9ODTW9R/JHhj6ZSkKgEuo9OwEg6v27BF4fNf6fSo+APO6AxL yiSoITULYa7ZY7us28gHUaX7NNkwDjqD2SfdBtPjrmuUhajjmtkN5J3/8avPFtLzf8g3lKouNxN 4NK8AtiBM47E0yA== X-Google-Smtp-Source: AGHT+IGQBAeB/hsNgYTHL5ZMJU5SJxeO0HL1gdICnLID/70MEOy1dVKauV/WmhVjAT1RVmZOqeIuCw== X-Received: by 2002:a05:6000:1884:b0:390:df83:1f5d with SMTP id ffacd0b85a97d-39132dbb4efmr6514798f8f.35.1741527054531; Sun, 09 Mar 2025 06:30:54 -0700 (PDT) Received: from localhost.localdomain (93-34-90-129.ip49.fastwebnet.it. [93.34.90.129]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-3912bee262esm11867536f8f.0.2025.03.09.06.30.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 09 Mar 2025 06:30:54 -0700 (PDT) From: Christian Marangi To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Lee Jones , Christian Marangi , Vinod Koul , Kishon Vijay Abraham I , Matthias Brugger , AngeloGioacchino Del Regno , Greg Kroah-Hartman , Lorenzo Bianconi , Daniel Danzberger , Arnd Bergmann , Linus Walleij , Nikita Shubin , Guo Ren , Yangyu Chen , Ben Hutchings , Felix Fietkau , linux-clk@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-phy@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-usb@vger.kernel.org, upstream@airoha.com Subject: [PATCH 10/13] phy: airoha: Add support for Airoha AN7581 USB PHY Date: Sun, 9 Mar 2025 14:29:41 +0100 Message-ID: <20250309132959.19045-11-ansuelsmth@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250309132959.19045-1-ansuelsmth@gmail.com> References: <20250309132959.19045-1-ansuelsmth@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250309_063056_406932_24CB357A X-CRM114-Status: GOOD ( 21.93 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org Add support for Airoha AN7581 USB PHY driver. AN7581 supports up to 2 USB port with USB 2.0 mode always supported and USB 3.0 mode available only if the Serdes port is correctly configured for USB 3.0. On xLate probe, the Serdes mode is validated and the driver return error if the Serdes mode doesn't reflect the expected mode. This is required as Serdes mode are controlled by the SCU SSR bits and can be either USB 3.0 mode or HSGMII or PCIe 2. In such case USB 3.0 won't work. If the USB 3.0 mode is not supported, the modes needs to be also disabled in the xHCI node or the driver will report unsable clock and fail probe. Signed-off-by: Christian Marangi --- MAINTAINERS | 1 + drivers/phy/Kconfig | 1 + drivers/phy/Makefile | 3 +- drivers/phy/airoha/Kconfig | 13 + drivers/phy/airoha/Makefile | 3 + drivers/phy/airoha/phy-airoha-usb.c | 554 ++++++++++++++++++++++++++++ 6 files changed, 574 insertions(+), 1 deletion(-) create mode 100644 drivers/phy/airoha/Kconfig create mode 100644 drivers/phy/airoha/Makefile create mode 100644 drivers/phy/airoha/phy-airoha-usb.c diff --git a/MAINTAINERS b/MAINTAINERS index c2dd385e9165..1835e488ccaa 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -758,6 +758,7 @@ M: Christian Marangi L: linux-arm-kernel@lists.infradead.org (moderated for non-subscribers) S: Maintained F: Documentation/devicetree/bindings/phy/airoha,an7581-usb-phy.yam +F: drivers/phy/airoha/phy-airoha-usb.c AIRSPY MEDIA DRIVER L: linux-media@vger.kernel.org diff --git a/drivers/phy/Kconfig b/drivers/phy/Kconfig index 8d58efe998ec..19c9c518fc3d 100644 --- a/drivers/phy/Kconfig +++ b/drivers/phy/Kconfig @@ -93,6 +93,7 @@ config PHY_NXP_PTN3222 schemes. It supports all three USB 2.0 data rates: Low Speed, Full Speed and High Speed. +source "drivers/phy/airoha/Kconfig" source "drivers/phy/allwinner/Kconfig" source "drivers/phy/amlogic/Kconfig" source "drivers/phy/broadcom/Kconfig" diff --git a/drivers/phy/Makefile b/drivers/phy/Makefile index e281442acc75..71708c6865b8 100644 --- a/drivers/phy/Makefile +++ b/drivers/phy/Makefile @@ -12,7 +12,8 @@ obj-$(CONFIG_PHY_PISTACHIO_USB) += phy-pistachio-usb.o obj-$(CONFIG_USB_LGM_PHY) += phy-lgm-usb.o obj-$(CONFIG_PHY_AIROHA_PCIE) += phy-airoha-pcie.o obj-$(CONFIG_PHY_NXP_PTN3222) += phy-nxp-ptn3222.o -obj-y += allwinner/ \ +obj-y += airoha/ \ + allwinner/ \ amlogic/ \ broadcom/ \ cadence/ \ diff --git a/drivers/phy/airoha/Kconfig b/drivers/phy/airoha/Kconfig new file mode 100644 index 000000000000..5a2bc2e5d397 --- /dev/null +++ b/drivers/phy/airoha/Kconfig @@ -0,0 +1,13 @@ +# SPDX-License-Identifier: GPL-2.0-only +# +# Phy drivers for Mediatek devices +# +config PHY_AIROHA_USB + tristate "Airoha USB PHY Driver" + depends on ARCH_AIROHA || COMPILE_TEST + depends on OF + select GENERIC_PHY + help + Say 'Y' here to add support for Airoha USB PHY driver. + This driver create the basic PHY instance and provides initialize + callback for USB port. diff --git a/drivers/phy/airoha/Makefile b/drivers/phy/airoha/Makefile new file mode 100644 index 000000000000..deddab0bbc81 --- /dev/null +++ b/drivers/phy/airoha/Makefile @@ -0,0 +1,3 @@ +# SPDX-License-Identifier: GPL-2.0 + +obj-$(CONFIG_PHY_AIROHA_USB) += phy-airoha-usb.o diff --git a/drivers/phy/airoha/phy-airoha-usb.c b/drivers/phy/airoha/phy-airoha-usb.c new file mode 100644 index 000000000000..efc89c674342 --- /dev/null +++ b/drivers/phy/airoha/phy-airoha-usb.c @@ -0,0 +1,554 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Author: Christian Marangi + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +/* U2PHY */ +#define AIROHA_USB_PHY_FMCR0 0x100 +#define AIROHA_USB_PHY_MONCLK_SEL GENMASK(27, 26) +#define AIROHA_USB_PHY_MONCLK_SEL0 FIELD_PREP_CONST(AIROHA_USB_PHY_MONCLK_SEL, 0x0) +#define AIROHA_USB_PHY_MONCLK_SEL1 FIELD_PREP_CONST(AIROHA_USB_PHY_MONCLK_SEL, 0x1) +#define AIROHA_USB_PHY_MONCLK_SEL2 FIELD_PREP_CONST(AIROHA_USB_PHY_MONCLK_SEL, 0x2) +#define AIROHA_USB_PHY_MONCLK_SEL3 FIELD_PREP_CONST(AIROHA_USB_PHY_MONCLK_SEL, 0x3) +#define AIROHA_USB_PHY_FREQDET_EN BIT(24) +#define AIROHA_USB_PHY_CYCLECNT GENMASK(23, 0) +#define AIROHA_USB_PHY_FMMONR0 0x10c +#define AIROHA_USB_PHY_USB_FM_OUT GENMASK(31, 0) +#define AIROHA_USB_PHY_FMMONR1 0x110 +#define AIROHA_USB_PHY_FRCK_EN BIT(8) + +#define AIROHA_USB_PHY_USBPHYACR4 0x310 +#define AIROHA_USB_PHY_USB20_FS_CR GENMASK(10, 8) +#define AIROHA_USB_PHY_USB20_FS_CR_MAX FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_FS_CR, 0x0) +#define AIROHA_USB_PHY_USB20_FS_CR_NORMAL FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_FS_CR, 0x2) +#define AIROHA_USB_PHY_USB20_FS_CR_SMALLER FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_FS_CR, 0x4) +#define AIROHA_USB_PHY_USB20_FS_CR_MIN FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_FS_CR, 0x6) +#define AIROHA_USB_PHY_USB20_FS_SR GENMASK(2, 0) +#define AIROHA_USB_PHY_USB20_FS_SR_MAX FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_FS_SR, 0x0) +#define AIROHA_USB_PHY_USB20_FS_SR_NORMAL FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_FS_SR, 0x2) +#define AIROHA_USB_PHY_USB20_FS_SR_SMALLER FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_FS_SR, 0x4) +#define AIROHA_USB_PHY_USB20_FS_SR_MIN FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_FS_SR, 0x6) +#define AIROHA_USB_PHY_USBPHYACR5 0x314 +#define AIROHA_USB_PHY_USB20_HSTX_SRCAL_EN BIT(15) +#define AIROHA_USB_PHY_USB20_HSTX_SRCTRL GENMASK(14, 12) +#define AIROHA_USB_PHY_USBPHYACR6 0x318 +#define AIROHA_USB_PHY_USB20_BC11_SW_EN BIT(23) +#define AIROHA_USB_PHY_USB20_DISCTH GENMASK(7, 4) +#define AIROHA_USB_PHY_USB20_DISCTH_400 FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_DISCTH, 0x0) +#define AIROHA_USB_PHY_USB20_DISCTH_420 FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_DISCTH, 0x1) +#define AIROHA_USB_PHY_USB20_DISCTH_440 FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_DISCTH, 0x2) +#define AIROHA_USB_PHY_USB20_DISCTH_460 FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_DISCTH, 0x3) +#define AIROHA_USB_PHY_USB20_DISCTH_480 FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_DISCTH, 0x4) +#define AIROHA_USB_PHY_USB20_DISCTH_500 FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_DISCTH, 0x5) +#define AIROHA_USB_PHY_USB20_DISCTH_520 FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_DISCTH, 0x6) +#define AIROHA_USB_PHY_USB20_DISCTH_540 FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_DISCTH, 0x7) +#define AIROHA_USB_PHY_USB20_DISCTH_560 FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_DISCTH, 0x8) +#define AIROHA_USB_PHY_USB20_DISCTH_580 FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_DISCTH, 0x9) +#define AIROHA_USB_PHY_USB20_DISCTH_600 FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_DISCTH, 0xa) +#define AIROHA_USB_PHY_USB20_DISCTH_620 FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_DISCTH, 0xb) +#define AIROHA_USB_PHY_USB20_DISCTH_640 FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_DISCTH, 0xc) +#define AIROHA_USB_PHY_USB20_DISCTH_660 FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_DISCTH, 0xd) +#define AIROHA_USB_PHY_USB20_DISCTH_680 FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_DISCTH, 0xe) +#define AIROHA_USB_PHY_USB20_DISCTH_700 FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_DISCTH, 0xf) +#define AIROHA_USB_PHY_USB20_SQTH GENMASK(3, 0) +#define AIROHA_USB_PHY_USB20_SQTH_85 FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_SQTH, 0x0) +#define AIROHA_USB_PHY_USB20_SQTH_90 FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_SQTH, 0x1) +#define AIROHA_USB_PHY_USB20_SQTH_95 FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_SQTH, 0x2) +#define AIROHA_USB_PHY_USB20_SQTH_100 FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_SQTH, 0x3) +#define AIROHA_USB_PHY_USB20_SQTH_105 FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_SQTH, 0x4) +#define AIROHA_USB_PHY_USB20_SQTH_110 FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_SQTH, 0x5) +#define AIROHA_USB_PHY_USB20_SQTH_115 FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_SQTH, 0x6) +#define AIROHA_USB_PHY_USB20_SQTH_120 FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_SQTH, 0x7) +#define AIROHA_USB_PHY_USB20_SQTH_125 FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_SQTH, 0x8) +#define AIROHA_USB_PHY_USB20_SQTH_130 FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_SQTH, 0x9) +#define AIROHA_USB_PHY_USB20_SQTH_135 FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_SQTH, 0xa) +#define AIROHA_USB_PHY_USB20_SQTH_140 FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_SQTH, 0xb) +#define AIROHA_USB_PHY_USB20_SQTH_145 FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_SQTH, 0xc) +#define AIROHA_USB_PHY_USB20_SQTH_150 FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_SQTH, 0xd) +#define AIROHA_USB_PHY_USB20_SQTH_155 FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_SQTH, 0xe) +#define AIROHA_USB_PHY_USB20_SQTH_160 FIELD_PREP_CONST(AIROHA_USB_PHY_USB20_SQTH, 0xf) + +#define AIROHA_USB_PHY_U2PHYDTM1 0x36c +#define AIROHA_USB_PHY_FORCE_IDDIG BIT(9) +#define AIROHA_USB_PHY_IDDIG BIT(1) + +#define AIROHA_USB_PHY_GPIO_CTLD 0x80c +#define AIROHA_USB_PHY_C60802_GPIO_CTLD GENMASK(31, 0) +#define AIROHA_USB_PHY_SSUSB_IP_SW_RST BIT(31) +#define AIROHA_USB_PHY_MCU_BUS_CK_GATE_EN BIT(30) +#define AIROHA_USB_PHY_FORCE_SSUSB_IP_SW_RST BIT(29) +#define AIROHA_USB_PHY_SSUSB_SW_RST BIT(28) + +#define AIROHA_USB_PHY_U3_PHYA_REG0 0xb00 +#define AIROHA_USB_PHY_SSUSB_BG_DIV GENMASK(29, 28) +#define AIROHA_USB_PHY_SSUSB_BG_DIV_2 FIELD_PREP_CONST(AIROHA_USB_PHY_SSUSB_BG_DIV, 0x0) +#define AIROHA_USB_PHY_SSUSB_BG_DIV_4 FIELD_PREP_CONST(AIROHA_USB_PHY_SSUSB_BG_DIV, 0x1) +#define AIROHA_USB_PHY_SSUSB_BG_DIV_8 FIELD_PREP_CONST(AIROHA_USB_PHY_SSUSB_BG_DIV, 0x2) +#define AIROHA_USB_PHY_SSUSB_BG_DIV_16 FIELD_PREP_CONST(AIROHA_USB_PHY_SSUSB_BG_DIV, 0x3) +#define AIROHA_USB_PHY_U3_PHYA_REG1 0xb04 +#define AIROHA_USB_PHY_SSUSB_XTAL_TOP_RESERVE GENMASK(25, 10) +#define AIROHA_USB_PHY_U3_PHYA_REG6 0xb18 +#define AIROHA_USB_PHY_SSUSB_CDR_RESERVE GENMASK(31, 24) +#define AIROHA_USB_PHY_U3_PHYA_REG8 0xb20 +#define AIROHA_USB_PHY_SSUSB_CDR_RST_DLY GENMASK(7, 6) +#define AIROHA_USB_PHY_SSUSB_CDR_RST_DLY_32 FIELD_PREP_CONST(AIROHA_USB_PHY_SSUSB_CDR_RST_DLY, 0x0) +#define AIROHA_USB_PHY_SSUSB_CDR_RST_DLY_64 FIELD_PREP_CONST(AIROHA_USB_PHY_SSUSB_CDR_RST_DLY, 0x1) +#define AIROHA_USB_PHY_SSUSB_CDR_RST_DLY_128 FIELD_PREP_CONST(AIROHA_USB_PHY_SSUSB_CDR_RST_DLY, 0x2) +#define AIROHA_USB_PHY_SSUSB_CDR_RST_DLY_216 FIELD_PREP_CONST(AIROHA_USB_PHY_SSUSB_CDR_RST_DLY, 0x3) + +#define AIROHA_USB_PHY_U3_PHYA_DA_REG19 0xc38 +#define AIROHA_USB_PHY_SSUSB_PLL_SSC_DELTA1_U3 GENMASK(15, 0) + +#define AIROHA_USB_PHY_U2_FM_DET_CYCLE_CNT 1024 +#define AIROHA_USB_PHY_REF_CK 20 +#define AIROHA_USB_PHY_U2_SR_COEF 28 +#define AIROHA_USB_PHY_U2_SR_COEF_DIVISOR 1000 + +#define AIROHA_USB_PHY_FREQDET_SLEEP 1000 /* 1ms */ +#define AIROHA_USB_PHY_FREQDET_TIMEOUT (AIROHA_USB_PHY_FREQDET_SLEEP * 10) + +#define AIROHA_USB_PHY_MAX_INSTANCE 2 + +struct airoha_usb_phy_instance { + struct phy *phy; + u32 type; +}; + +struct airoha_usb_phy_priv { + struct device *dev; + + struct regmap *regmap; + + unsigned int id; + + struct airoha_usb_phy_instance *phys[AIROHA_USB_PHY_MAX_INSTANCE]; +}; + +static int airoha_usb_phy_u2_slew_rate_calibration(struct airoha_usb_phy_priv *priv) +{ + u32 fm_out; + u32 srctrl; + + /* Enable HS TX SR calibration */ + regmap_set_bits(priv->regmap, AIROHA_USB_PHY_USBPHYACR5, + AIROHA_USB_PHY_USB20_HSTX_SRCAL_EN); + + usleep_range(1000, 1500); + + /* Enable Free run clock */ + regmap_set_bits(priv->regmap, AIROHA_USB_PHY_FMMONR1, + AIROHA_USB_PHY_FRCK_EN); + + /* Select Monitor Clock */ + regmap_update_bits(priv->regmap, AIROHA_USB_PHY_FMCR0, + AIROHA_USB_PHY_MONCLK_SEL, + priv->id == 0 ? AIROHA_USB_PHY_MONCLK_SEL0 : + AIROHA_USB_PHY_MONCLK_SEL1); + + /* Set cyclecnt */ + regmap_update_bits(priv->regmap, AIROHA_USB_PHY_FMCR0, + AIROHA_USB_PHY_CYCLECNT, + FIELD_PREP(AIROHA_USB_PHY_CYCLECNT, + AIROHA_USB_PHY_U2_FM_DET_CYCLE_CNT)); + + /* Enable Frequency meter */ + regmap_set_bits(priv->regmap, AIROHA_USB_PHY_FMCR0, + AIROHA_USB_PHY_FREQDET_EN); + + /* Timeout can happen and we will apply workaround at the end */ + regmap_read_poll_timeout(priv->regmap, AIROHA_USB_PHY_FMMONR0, fm_out, + fm_out, AIROHA_USB_PHY_FREQDET_SLEEP, + AIROHA_USB_PHY_FREQDET_TIMEOUT); + + /* Disable Frequency meter */ + regmap_clear_bits(priv->regmap, AIROHA_USB_PHY_FMCR0, + AIROHA_USB_PHY_FREQDET_EN); + + /* Disable Free run clock */ + regmap_clear_bits(priv->regmap, AIROHA_USB_PHY_FMMONR1, + AIROHA_USB_PHY_FRCK_EN); + + /* Disable HS TX SR calibration */ + regmap_clear_bits(priv->regmap, AIROHA_USB_PHY_USBPHYACR5, + AIROHA_USB_PHY_USB20_HSTX_SRCAL_EN); + + usleep_range(1000, 1500); + + /* Frequency was not detected, use default SR calibration value */ + if (!fm_out) { + srctrl = 0x5; + dev_err(priv->dev, "Frequency not detected, using default SR calibration.\n"); + /* (1024 / FM_OUT) * REF_CK * U2_SR_COEF (round to the nearest digits) */ + } else { + srctrl = AIROHA_USB_PHY_REF_CK * AIROHA_USB_PHY_U2_SR_COEF; + srctrl = (srctrl * AIROHA_USB_PHY_U2_FM_DET_CYCLE_CNT) / fm_out; + srctrl = DIV_ROUND_CLOSEST(srctrl, AIROHA_USB_PHY_U2_SR_COEF_DIVISOR); + dev_dbg(priv->dev, "SR calibration applied: %x\n", srctrl); + } + + regmap_update_bits(priv->regmap, AIROHA_USB_PHY_USBPHYACR5, + AIROHA_USB_PHY_USB20_HSTX_SRCTRL, + FIELD_PREP(AIROHA_USB_PHY_USB20_HSTX_SRCTRL, srctrl)); + + return 0; +} + +static int airoha_usb_phy_u2_init(struct airoha_usb_phy_priv *priv) +{ + regmap_update_bits(priv->regmap, AIROHA_USB_PHY_USBPHYACR4, + AIROHA_USB_PHY_USB20_FS_CR, + AIROHA_USB_PHY_USB20_FS_CR_MIN); + + regmap_update_bits(priv->regmap, AIROHA_USB_PHY_USBPHYACR4, + AIROHA_USB_PHY_USB20_FS_SR, + AIROHA_USB_PHY_USB20_FS_SR_NORMAL); + + /* FIXME: evaluate if needed */ + regmap_update_bits(priv->regmap, AIROHA_USB_PHY_USBPHYACR6, + AIROHA_USB_PHY_USB20_SQTH, + AIROHA_USB_PHY_USB20_SQTH_130); + + regmap_update_bits(priv->regmap, AIROHA_USB_PHY_USBPHYACR6, + AIROHA_USB_PHY_USB20_DISCTH, + AIROHA_USB_PHY_USB20_DISCTH_600); + + /* Enable the USB port and then disable after calibration */ + regmap_clear_bits(priv->regmap, AIROHA_USB_PHY_USBPHYACR6, + AIROHA_USB_PHY_USB20_BC11_SW_EN); + + airoha_usb_phy_u2_slew_rate_calibration(priv); + + regmap_set_bits(priv->regmap, AIROHA_USB_PHY_USBPHYACR6, + AIROHA_USB_PHY_USB20_BC11_SW_EN); + + usleep_range(1000, 1500); + + return 0; +} + +/* + * USB 3.0 mode can only work if USB serdes is correctly set. + * This is validated in xLate function. + */ +static int airoha_usb_phy_u3_init(struct airoha_usb_phy_priv *priv) +{ + regmap_update_bits(priv->regmap, AIROHA_USB_PHY_U3_PHYA_REG8, + AIROHA_USB_PHY_SSUSB_CDR_RST_DLY, + AIROHA_USB_PHY_SSUSB_CDR_RST_DLY_32); + + regmap_update_bits(priv->regmap, AIROHA_USB_PHY_U3_PHYA_REG6, + AIROHA_USB_PHY_SSUSB_CDR_RESERVE, + FIELD_PREP(AIROHA_USB_PHY_SSUSB_CDR_RESERVE, 0xe)); + + regmap_update_bits(priv->regmap, AIROHA_USB_PHY_U3_PHYA_REG0, + AIROHA_USB_PHY_SSUSB_BG_DIV, + AIROHA_USB_PHY_SSUSB_BG_DIV_4); + + regmap_set_bits(priv->regmap, AIROHA_USB_PHY_U3_PHYA_REG1, + FIELD_PREP(AIROHA_USB_PHY_SSUSB_XTAL_TOP_RESERVE, 0x600)); + + regmap_update_bits(priv->regmap, AIROHA_USB_PHY_U3_PHYA_DA_REG19, + AIROHA_USB_PHY_SSUSB_PLL_SSC_DELTA1_U3, + FIELD_PREP(AIROHA_USB_PHY_SSUSB_PLL_SSC_DELTA1_U3, 0x43)); + + return 0; +} + +static int airoha_usb_phy_init(struct phy *phy) +{ + struct airoha_usb_phy_instance *instance = phy_get_drvdata(phy); + struct airoha_usb_phy_priv *priv = dev_get_drvdata(phy->dev.parent); + + if (instance->type == PHY_TYPE_USB2) + return airoha_usb_phy_u2_init(priv); + + return airoha_usb_phy_u3_init(priv); +} + +static int airoha_usb_phy_exit(struct phy *phy) +{ + return 0; +} + +static int airoha_usb_phy_u2_power_on(struct airoha_usb_phy_priv *priv) +{ + regmap_clear_bits(priv->regmap, AIROHA_USB_PHY_USBPHYACR6, + AIROHA_USB_PHY_USB20_BC11_SW_EN); + + usleep_range(1000, 1500); + + return 0; +} + +static int airoha_usb_phy_u3_power_on(struct airoha_usb_phy_priv *priv) +{ + regmap_clear_bits(priv->regmap, AIROHA_USB_PHY_GPIO_CTLD, + AIROHA_USB_PHY_SSUSB_IP_SW_RST | + AIROHA_USB_PHY_MCU_BUS_CK_GATE_EN | + AIROHA_USB_PHY_FORCE_SSUSB_IP_SW_RST | + AIROHA_USB_PHY_SSUSB_SW_RST); + + usleep_range(1000, 1500); + + return 0; +} + +static int airoha_usb_phy_power_on(struct phy *phy) +{ + struct airoha_usb_phy_instance *instance = phy_get_drvdata(phy); + struct airoha_usb_phy_priv *priv = dev_get_drvdata(phy->dev.parent); + + if (instance->type == PHY_TYPE_USB2) + return airoha_usb_phy_u2_power_on(priv); + + return airoha_usb_phy_u3_power_on(priv); +} + +static int airoha_usb_phy_u2_power_off(struct airoha_usb_phy_priv *priv) +{ + regmap_set_bits(priv->regmap, AIROHA_USB_PHY_USBPHYACR6, + AIROHA_USB_PHY_USB20_BC11_SW_EN); + + usleep_range(1000, 1500); + + return 0; +} + +static int airoha_usb_phy_u3_power_off(struct airoha_usb_phy_priv *priv) +{ + regmap_set_bits(priv->regmap, AIROHA_USB_PHY_GPIO_CTLD, + AIROHA_USB_PHY_SSUSB_IP_SW_RST | + AIROHA_USB_PHY_FORCE_SSUSB_IP_SW_RST); + + usleep_range(1000, 1500); + + return 0; +} + +static int airoha_usb_phy_power_off(struct phy *phy) +{ + struct airoha_usb_phy_instance *instance = phy_get_drvdata(phy); + struct airoha_usb_phy_priv *priv = dev_get_drvdata(phy->dev.parent); + + if (instance->type == PHY_TYPE_USB2) + return airoha_usb_phy_u2_power_off(priv); + + return airoha_usb_phy_u3_power_off(priv); +} + +static int airoha_usb_phy_u2_set_mode(struct airoha_usb_phy_priv *priv, + enum phy_mode mode) +{ + u32 val = 0; + + /* + * For Device and Host mode, enable force IDDIG. + * For Device set IDDIG, for Host clear IDDIG. + * For OTG disable force and clear IDDIG bit while at it. + */ + switch (mode) { + case PHY_MODE_USB_DEVICE: + val |= AIROHA_USB_PHY_IDDIG; + fallthrough; + case PHY_MODE_USB_HOST: + val |= AIROHA_USB_PHY_FORCE_IDDIG; + break; + case PHY_MODE_USB_OTG: + break; + default: + return 0; + } + + regmap_update_bits(priv->regmap, AIROHA_USB_PHY_U2PHYDTM1, + AIROHA_USB_PHY_FORCE_IDDIG | + AIROHA_USB_PHY_IDDIG, val); + + return 0; +} + +static int airoha_usb_phy_set_mode(struct phy *phy, enum phy_mode mode, int submode) +{ + struct airoha_usb_phy_instance *instance = phy_get_drvdata(phy); + struct airoha_usb_phy_priv *priv = dev_get_drvdata(phy->dev.parent); + + if (instance->type == PHY_TYPE_USB2) + return airoha_usb_phy_u2_set_mode(priv, mode); + + return 0; +} + +static struct phy *airoha_usb_phy_xlate(struct device *dev, + const struct of_phandle_args *args) +{ + struct airoha_usb_phy_priv *priv = dev_get_drvdata(dev); + struct airoha_usb_phy_instance *instance = NULL; + struct device_node *phy_np = args->np; + int index; + + if (args->args_count != 1) { + dev_err(dev, "invalid number of cells in 'phy' property\n"); + return ERR_PTR(-EINVAL); + } + + for (index = 0; index < AIROHA_USB_PHY_MAX_INSTANCE; index++) + if (phy_np == priv->phys[index]->phy->dev.of_node) { + instance = priv->phys[index]; + break; + } + + if (!instance) { + dev_err(dev, "failed to find appropriate phy\n"); + return ERR_PTR(-EINVAL); + } + + instance->type = args->args[0]; + if (!(instance->type == PHY_TYPE_USB2 || instance->type == PHY_TYPE_USB3)) { + dev_err(dev, "unsupported device type: %d\n", instance->type); + return ERR_PTR(-EINVAL); + } + + /* Validate Serdes for USB 3.0 */ + if (instance->type == PHY_TYPE_USB3) { + enum airoha_scu_serdes_port serdes_port; + int serdes_mode, expcted_mode; + + switch (priv->id) { + case 0: + serdes_port = AIROHA_SCU_SERDES_USB1; + expcted_mode = AIROHA_SCU_SSR_USB1_USB; + break; + case 1: + serdes_port = AIROHA_SCU_SERDES_USB2; + expcted_mode = AIROHA_SCU_SSR_USB2_USB; + break; + default: /* Impossible already validated */ + return ERR_PTR(-EINVAL); + } + + serdes_mode = airoha_scu_ssr_get_serdes_mode(dev, serdes_port); + if (serdes_mode < 0) { + dev_err(dev, "failed validating serdes mode for port %d: %d\n", + priv->id, serdes_mode); + return ERR_PTR(serdes_mode); + } + + if (serdes_mode != expcted_mode) { + dev_err(dev, "wrong serdes mode for port %d\n", + priv->id); + return ERR_PTR(-EINVAL); + } + } + + return instance->phy; +} + +static const struct phy_ops airoha_phy = { + .init = airoha_usb_phy_init, + .exit = airoha_usb_phy_exit, + .power_on = airoha_usb_phy_power_on, + .power_off = airoha_usb_phy_power_off, + .set_mode = airoha_usb_phy_set_mode, + .owner = THIS_MODULE, +}; + +static const struct regmap_config airoha_usb_phy_regmap_config = { + .reg_bits = 32, + .val_bits = 32, + .reg_stride = 4, +}; + +static int airoha_usb_phy_probe(struct platform_device *pdev) +{ + struct phy_provider *phy_provider; + struct airoha_usb_phy_priv *priv; + struct device *dev = &pdev->dev; + struct device_node *child_np; + void *base; + int port; + int ret; + + priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL); + if (!priv) + return -ENOMEM; + + priv->dev = dev; + + ret = of_property_read_u32(dev->of_node, "airoha,port-id", &priv->id); + if (ret) + return dev_err_probe(dev, ret, "port ID is mandatory for USB PHY calibration.\n"); + + if (priv->id > 1) + return dev_err_probe(dev, -EINVAL, "only 2 USB port are supported on the SoC.\n"); + + base = devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(base)) + return PTR_ERR(base); + + priv->regmap = devm_regmap_init_mmio(dev, base, &airoha_usb_phy_regmap_config); + if (IS_ERR(priv->regmap)) + return PTR_ERR(priv->regmap); + + platform_set_drvdata(pdev, priv); + + port = 0; + for_each_child_of_node(dev->of_node, child_np) { + struct airoha_usb_phy_instance *instance; + + instance = devm_kzalloc(dev, sizeof(*instance), GFP_KERNEL); + if (!instance) { + ret = -ENOMEM; + goto put_child; + } + + priv->phys[port] = instance; + + instance->phy = devm_phy_create(dev, child_np, &airoha_phy); + if (IS_ERR(instance->phy)) { + dev_err_probe(dev, PTR_ERR(instance->phy), "failed to create phy\n"); + ret = PTR_ERR(instance->phy); + goto put_child; + } + + phy_set_drvdata(instance->phy, instance); + + port++; + } + + phy_provider = devm_of_phy_provider_register(&pdev->dev, airoha_usb_phy_xlate); + + return PTR_ERR_OR_ZERO(phy_provider); + +put_child: + of_node_put(child_np); + return ret; +} + +static const struct of_device_id airoha_phy_id_table[] = { + { .compatible = "airoha,an7581-usb-phy" }, + { }, +}; +MODULE_DEVICE_TABLE(of, airoha_phy_id_table); + +static struct platform_driver airoha_usb_driver = { + .probe = airoha_usb_phy_probe, + .driver = { + .name = "airoha-usb-phy", + .of_match_table = airoha_phy_id_table, + }, +}; + +module_platform_driver(airoha_usb_driver); + +MODULE_AUTHOR("Christian Marangi "); +MODULE_LICENSE("GPL"); +MODULE_DESCRIPTION("Airoha USB PHY driver"); From patchwork Sun Mar 9 13:29:42 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Marangi X-Patchwork-Id: 14008500 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 0BCCCC2BA1B for ; Sun, 9 Mar 2025 13:50:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:To:From:Reply-To: Cc:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=MZocKeaP4+m6t9O2v1jxFvpKpeZLmzryJkfebv96Xm0=; b=4OOF3FafzJHAZBS7VJj7J4CDE+ 0JMfZ53fCT8KeL9PehU1f2AHDbX0J9D741N/DpZmBhgKoLSDZr3GeJJ1POku9YZev5P62Z0I9ohXW m73I/DHqKGWvjscvnBEQyaS3RAyHTQwXGvwzjxL5MWLidNzc7sPxLOZIAE8CoBomoAIj+s/5dN9q1 bwe0JeWVkN/8HdS6rfikz/s3h9UXB5wrI1AfTtejYaSrM9w7zT3vXsK5Cdb7T15pN8STlE35Jk0H9 378iy/yUEebLONZcPHmV68N6C7j1m35znch6NWqz/2FJNQJmE8d1lHKZvWSjsYTP8GjP9tMu7/3AE pmWa1yAw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1trH39-00000000cxX-0ji6; Sun, 09 Mar 2025 13:50:39 +0000 Received: from mail-wr1-x42d.google.com ([2a00:1450:4864:20::42d]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1trGk5-00000000aWd-1hGt; Sun, 09 Mar 2025 13:30:58 +0000 Received: by mail-wr1-x42d.google.com with SMTP id ffacd0b85a97d-3912baafc58so2327327f8f.1; Sun, 09 Mar 2025 06:30:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741527056; x=1742131856; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=MZocKeaP4+m6t9O2v1jxFvpKpeZLmzryJkfebv96Xm0=; b=HK1Xc/w66j5XZyLfgtVvEeSLSZb1xRUmNXHzV1zyGm7icVltSxlHtM0PylNAmaR1OT /fvHqIb5Xa9HDnEis5Mn7/uuCqKKvzC6tejkj7gAZZsO5tEa8HpBDfcABYe2lshJ+vLK 6Rj3kVNfvpPSlZcYyuoAUaPgUgn5h9Q5gnIY3mgoJeK7+0anF4k4URLDysPCrFv8u8Uw tyoQbpylsvNIis+Y6uveJ7xs9gcnpFd7REKZ1QWMvLwgfUIvDlvAKBuDtAh4URWBRdsT mAeObAK9/nmIifClU6Yl5TVYSy8vNGUwYmfzl7uIG93rYNrhvq9Ih0c//vProfndDspq uXRQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741527056; x=1742131856; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MZocKeaP4+m6t9O2v1jxFvpKpeZLmzryJkfebv96Xm0=; b=w7ofAjGTdyoueZAzvFlXMXeRASJn64XN0/+l2LQonh4D/HZmj8pgJ/itmseg1QwOEK x7IA2dLCQX7wlkt8j4Iv3c9far4ZOfyhFQ/ff7Hh0DXv907iFVKq2cpenkeuH8jjMib9 /9cILp6g5DSE/lji+5ppXFkcTUftI7TzbbEnLFowNnwxaoaUouB1nBw7Vqvu0lNGSRgy Rdd1VeTjOmRAFXj0C9tc4KUr1ISZx0QiEJsGu0Z8TFJdgiHuFhqQmC35t5BpCn0MIjxK EGPZJ2vZqWm9YKUJy68tcb7YlSxu9nopejaGqcJRokb02vXW6VHOjTPaaEExU9f3XBHm h7ZQ== X-Forwarded-Encrypted: i=1; AJvYcCWqeSyP8qWWPQzK+ncyYV7jBP3p8qqPRCd0alm0+BVcTtTiZRMOyxe1BQLM4Xktajb3JzSRmYN3Iv9tDUjBya0J@lists.infradead.org, AJvYcCXQPOvX39/8hhXhkIpuUsL7EtTMpTDutUIse87/pkcw70s3+MEwpzt4JI+xWedR28FoosKZq2ojmkRlwE9WFKU=@lists.infradead.org, AJvYcCXb/3CGUKA9iYjCAOZxMHIjNclvfC3PrceQ+4ryozlGzJRCjFsAPU4pno1lvgOTOdVjZwcQsuyvKkMJ@lists.infradead.org X-Gm-Message-State: AOJu0YyM3G+SOX2uoVJ8CkRQ8eoK7HEsJ2+/ZFJpvG/xV1YCvOF2QJ6i CxaGFGqb04CtTJReuetvx3Or2z1ktz4LFhUvv/E5UeTHeqcGR6Oi X-Gm-Gg: ASbGncsbyi8evFeeLbCVzVfdka8D5CW1SM+TNQPGFMH0jjX5OPa81zBTA6zGvAw90Sq JeWpIajdDGBT60CpNYzzKt07QBoyKyMCgTzZzg08Trj4gFxCWEBuNHjGkaKeRoamzUg8n2PAQti OXwmIaVn7vMxbVLvljFbVAcfq79KdmhA0HsI2QO4Pt/D4WK71HYh2pZOJFWzzQ89rY1aNVPv5ii SIWjFeh87aBwJpEQToE1nFNCDJPSxon4ZA4SOiQbsNQz6NzAW1hOtzVi7aKjTgsvkdNNRqS+Exg t09SRZLdUu098eeaHjsOyP6MPLMrsrHn8mr2VxE7uuI24SD0/miwj8SZyk6RqHX6ERDUgHQ0//L YqR6eqYi3EenF7Ssc5BZiWc/A X-Google-Smtp-Source: AGHT+IGueJHW1j9BhtVPmDBGX8blLXmKHwrxWVgv1ht1LrkVtNBdxRa6fjj8ZPsr1C+nUsiR9Cs4RQ== X-Received: by 2002:a5d:5f93:0:b0:390:ee01:68fa with SMTP id ffacd0b85a97d-39132d6cfb5mr5971194f8f.24.1741527056010; Sun, 09 Mar 2025 06:30:56 -0700 (PDT) Received: from localhost.localdomain (93-34-90-129.ip49.fastwebnet.it. [93.34.90.129]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-3912bee262esm11867536f8f.0.2025.03.09.06.30.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 09 Mar 2025 06:30:55 -0700 (PDT) From: Christian Marangi To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Lee Jones , Christian Marangi , Vinod Koul , Kishon Vijay Abraham I , Matthias Brugger , AngeloGioacchino Del Regno , Greg Kroah-Hartman , Lorenzo Bianconi , Daniel Danzberger , Arnd Bergmann , Linus Walleij , Nikita Shubin , Guo Ren , Yangyu Chen , Ben Hutchings , Felix Fietkau , linux-clk@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-phy@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-usb@vger.kernel.org, upstream@airoha.com Subject: [PATCH 11/13] usb: host: add ARCH_AIROHA in XHCI MTK dependency Date: Sun, 9 Mar 2025 14:29:42 +0100 Message-ID: <20250309132959.19045-12-ansuelsmth@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250309132959.19045-1-ansuelsmth@gmail.com> References: <20250309132959.19045-1-ansuelsmth@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250309_063057_442354_2E47DD31 X-CRM114-Status: GOOD ( 14.15 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org Airoha SoC use the same register map a logic of the Mediatek xHCI driver, hence add it to the dependency list to permit compilation also on this ARCH. Signed-off-by: Christian Marangi --- drivers/usb/host/Kconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/usb/host/Kconfig b/drivers/usb/host/Kconfig index d011d6c753ed..9d8626f36ca6 100644 --- a/drivers/usb/host/Kconfig +++ b/drivers/usb/host/Kconfig @@ -71,7 +71,7 @@ config USB_XHCI_HISTB config USB_XHCI_MTK tristate "xHCI support for MediaTek SoCs" select MFD_SYSCON - depends on (MIPS && SOC_MT7621) || ARCH_MEDIATEK || COMPILE_TEST + depends on (MIPS && SOC_MT7621) || ARCH_MEDIATEK || ARCH_AIROHA || COMPILE_TEST help Say 'Y' to enable the support for the xHCI host controller found in MediaTek SoCs. From patchwork Sun Mar 9 13:29:43 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Marangi X-Patchwork-Id: 14008507 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 4B878C2BA1B for ; Sun, 9 Mar 2025 13:52:19 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:To:From:Reply-To: Cc:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=oHGf9I9jetcKSy3ZjSkoEOOlmvfoewi1ZT4SC8hFxRY=; b=I5j/mAQMpDrdUglFcs7QGeXtaI MrqaSatPM7VEoMKJWMtyKCAXPC2B0oGlC1JNrWLSV39hBul/agc2qmCio+YasSi5JR9f02zPOPf7P i6RR3K0F34SlzcAk1mbJHUJBk05TbVtDfS7N79pialD78TsdWOl35NMG2nTp5/1pDkqLvc4ovr5za 0Ffdlxqci4tmM3crBCpcGKbB87sfgp056cRaHEUaGHqFb0Y3Xz6RIf8A90D0W80bZPUfBc/jRPO5s juErFcoOX5Uj+FplQ96NZl/gJm15qcCD+o6WDKbTOr31aXntOgcBs5gY8WRQ4bTMtpju0c9CjG82E 2RnGLD/g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1trH4k-00000000d5u-21nq; Sun, 09 Mar 2025 13:52:18 +0000 Received: from mail-wr1-x42a.google.com ([2a00:1450:4864:20::42a]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1trGk6-00000000aXM-3xBz; Sun, 09 Mar 2025 13:31:00 +0000 Received: by mail-wr1-x42a.google.com with SMTP id ffacd0b85a97d-39149bccb69so9069f8f.2; Sun, 09 Mar 2025 06:30:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741527057; x=1742131857; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=oHGf9I9jetcKSy3ZjSkoEOOlmvfoewi1ZT4SC8hFxRY=; b=dIa278FCxXt6INTi0DNmegQV6IrKW5DUTBCBO6eCloLt/2ZRsA4eIu1aE4EZ9UaHqP emtVM+UwySfmZ4nnlndNeWsrVOS2M1vjA56x1oLK1sm34WbqnjuWrvzM+EigHikPUAZm DtWdZaQJVSR/mBwRb7w93i7vyekBWSn7bhNVOsHZQGfZRXI5wjgzIdCLF2uezrsvKDJk NSDY5JlhG1bXQc7B8okHcwW6ByOHq8TovSjmAQZk+MK0rgNSJgeDwtEh1jE6tBH0crjQ GMFEJarvyINr8cZ9OzCNyHmbTIezf8vwzrE2FBMQ+L0EhwmNvyjRnEPoprIHmhR3ZT3h vCjw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741527057; x=1742131857; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=oHGf9I9jetcKSy3ZjSkoEOOlmvfoewi1ZT4SC8hFxRY=; b=oDbusejMWsUAY7G01NjH4iBxoXsZ8PVa2qpI9gddaQV8cAxC16+XKrNDCMXIZgkZDB cmEl0c1WEravhL2hNaXq+tGYrjYqU1mMfVvz9iJXt5voz+WtjBEJkPJ3BFWwbOEywc3s eMkTAG89FSrWeg8tMMvOpyaJvpPPpfeW93BNR0LzdoWOQgoqjpfDxdheCDIpvMLguFrj 92GnxbFb+YZgsScJHT18P8F+VNXc7ZoNaJsqgBI3a/Jps3KJKc+pMEobWUKNcJgyp8Ep ktvJMKhz8gtKog6fA29trLcKkQGxO23Yr56XjkXCijW3WfmlQJJB3e9YmVQ6EeuArpa7 ncNA== X-Forwarded-Encrypted: i=1; AJvYcCUoO80Sf9GXTPtiup/+QSdZYhDutCdoZgkihe8YVqjvFQWQ0Bv37VTi/m6iOU0vwg0Qe7pIVANxVbtD@lists.infradead.org, AJvYcCUrCYxM7y6A1opaDIsy3Z7EBXdHW31jGVGPfGDTOcuLxS418FQGbVpQpPXXLNadmOyTtxez/zRkAF2S4fK6nTRq@lists.infradead.org, AJvYcCWk9mhqTyC6/V+mx7YuakKbRoYI9AK+t6oGk5SAVe+Qlm2kR41adPzGqaPJ9U1wK/aSLzL9rQetablbI65dcNQ=@lists.infradead.org X-Gm-Message-State: AOJu0Yxp2LT6FIq/tRtVzXlZxwtoMApBu/YlWvdnUNX8X3oXVqDgiDTA +dUXFaYdRVId6OLVC4RMxFnEmxoGWOd4lFm/C7uZIqVu/jT5Dq/G X-Gm-Gg: ASbGnctI3xT8gBfcwZ8FJEMPjN7Go5Drmq/AIQZJRTWOEozn+lwQp1UeQkVkqSNnsU+ Fd9a3fDwPwnegMboLHrmqaBhU6r2YaTmI92Y3At40BuLNzTMAh2K/yn5sSN9Ieg0bpAjjmFtpTR bC2gDkli8J3fDUgfeKh9uwEG3Kqvp7AR57AgDm85KVfci8VBWiq9n3GpEHW+gZJV8vbe+q9uFzL a120gtwQ1EC1D3x019xIAdSnbYy5eKFq3bll5PSCipE/18t+ivNvHOQmOD3ykv0Lbr/ZGw8oYpF jVJlL2BTSvATqB2VtfawHZVyaMIomimd1ghiTqF6/p7D0BulrC4tAoD5vH0tYcxjjMXWhQKYNHf pYEVwITNZRhtOEw== X-Google-Smtp-Source: AGHT+IHh2pIg42W9ZdtyAbGtU1E8eclkophsMoFuh4X5tdSn2AE1TqJ6fGru5g4aiRfyb7QzTWo1Eg== X-Received: by 2002:a05:6000:1f8f:b0:391:2ba9:4c59 with SMTP id ffacd0b85a97d-39132d986d7mr8560947f8f.43.1741527057566; Sun, 09 Mar 2025 06:30:57 -0700 (PDT) Received: from localhost.localdomain (93-34-90-129.ip49.fastwebnet.it. [93.34.90.129]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-3912bee262esm11867536f8f.0.2025.03.09.06.30.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 09 Mar 2025 06:30:57 -0700 (PDT) From: Christian Marangi To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Lee Jones , Christian Marangi , Vinod Koul , Kishon Vijay Abraham I , Matthias Brugger , AngeloGioacchino Del Regno , Greg Kroah-Hartman , Lorenzo Bianconi , Daniel Danzberger , Arnd Bergmann , Linus Walleij , Nikita Shubin , Guo Ren , Yangyu Chen , Ben Hutchings , Felix Fietkau , linux-clk@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-phy@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-usb@vger.kernel.org, upstream@airoha.com Subject: [PATCH 12/13] arm64: dts: airoha: en7581: convert SCU clock node to MFD implementation Date: Sun, 9 Mar 2025 14:29:43 +0100 Message-ID: <20250309132959.19045-13-ansuelsmth@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250309132959.19045-1-ansuelsmth@gmail.com> References: <20250309132959.19045-1-ansuelsmth@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250309_063058_997605_28BFFBE5 X-CRM114-Status: GOOD ( 12.01 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org Convert SCU clock node for Airoha EN7581 to MFD implementation in preparation for USB support. Signed-off-by: Christian Marangi --- arch/arm64/boot/dts/airoha/en7581.dtsi | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/arch/arm64/boot/dts/airoha/en7581.dtsi b/arch/arm64/boot/dts/airoha/en7581.dtsi index 26b136940917..dfc12fa99748 100644 --- a/arch/arm64/boot/dts/airoha/en7581.dtsi +++ b/arch/arm64/boot/dts/airoha/en7581.dtsi @@ -173,11 +173,16 @@ spi_nand: nand@0 { }; }; - scuclk: clock-controller@1fb00000 { - compatible = "airoha,en7581-scu"; + system-controller@1fb00000 { + compatible = "airoha,en7581-scu-sysctl", "syscon", "simple-mfd"; reg = <0x0 0x1fb00000 0x0 0x970>; - #clock-cells = <1>; - #reset-cells = <1>; + + scuclk: clock-controller { + compatible = "airoha,en7581-scu"; + + #clock-cells = <1>; + #reset-cells = <1>; + }; }; uart1: serial@1fbf0000 { From patchwork Sun Mar 9 13:29:44 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Christian Marangi X-Patchwork-Id: 14008508 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 C4458C2BA1B for ; Sun, 9 Mar 2025 13:53:58 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-ID:Date:Subject:To:From:Reply-To: Cc:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=PUXPbCfIsepDY+Mn7pTqtiR4N56X9o4JrkeUo/O+gyc=; b=ypf/XwZe1TIJA6HjG7iLh/ioRl qqnQcNLLJPPUNejSN6i9LN+P8CUs03AyZQ/hWxG67sVJAo9s6S/OfwdhfC0yLCCIMlL5x0WUlf2Vm tJKxISQZWMgR6+qUGxmqPid/GnvNfN/XsEqWo3tJJZ5ng2zjr55XCi5VU84s+CtbClgkNfdaR3LeK vUH1MRwr40RWMNG8Hpo+4YxAbv/lDQaXQtoBw+8c+UkIbD8aLqWU79ck6ykrvk2SiozzVvn51ZEBN X/0eEyEaKA+xIf7kBu/1gjgFVpHich3kS2IUo/jXsrjC4f0l2uHT1uD7T6BDzcGiEHpcrO78c025x I7Yzc2iw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1trH6L-00000000dN1-32xV; Sun, 09 Mar 2025 13:53:57 +0000 Received: from mail-wr1-x432.google.com ([2a00:1450:4864:20::432]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1trGk8-00000000aY9-3Kyc; Sun, 09 Mar 2025 13:31:01 +0000 Received: by mail-wr1-x432.google.com with SMTP id ffacd0b85a97d-39143200ddaso267664f8f.1; Sun, 09 Mar 2025 06:31:00 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1741527059; x=1742131859; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=PUXPbCfIsepDY+Mn7pTqtiR4N56X9o4JrkeUo/O+gyc=; b=WBjh0BugRF97k1PMEW5Bwyp+IrTR/gZOj/NcODG1KhdNkJz10GG6hECM4t05+XojFy 0EV/1+Z0KBXlOfLaPspPjKAOx1NqLmQHjfJyUG3BbM3udTqlc3Lhvilv84SBD73WnAyk pdmbG1NxG4lgOI+aHKZJrj018KtRgYcu50Qchs7MaQNHI6JqInk/FFiCnmNy57iVQ7Aw nbar1cJTTCL+FoTF4DSWqinwYRiaRtqo5v5U1EMFF5aCmFu6jfQEkj456ONh1qdEMBpw ggXC6d+v3DpQCMpDf+4jc95rD7HYi+IGO6+qPVYa5P1gm0smFJny/ks9qbqww3C4oMph v1fg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1741527059; x=1742131859; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=PUXPbCfIsepDY+Mn7pTqtiR4N56X9o4JrkeUo/O+gyc=; b=sRiws4EPezvfDQyFpjenUU+rG+xh5/rAxdsqQbZDGqMMx8TeoQaWKuEaTNuQRO5JrV 6CrVQn7mJA99YsdRoEg0NEifkslkPvvKOGULpTG0uRbmv9JeY7IEOAFLFLOawhbXxV85 Zz5Eypt1Y5sHuvSfMudILWAg6+bGVK9zrRDkIi6je9+ulhajosirjr0EJSADmXXO/pjX 86qc1d3J2LvNQozn7/e6pEskKphvgccg5R99ZLuFNzf/zgksPbSnmPJqDOkw18oILAjc P95+P/OWdhHrk9KiyaKu2j/X2bpVgalU0s2k9T2AZXpVU89ETechQEjteodBFAsVRkyY qs/w== X-Forwarded-Encrypted: i=1; AJvYcCVvQfCcOrtBCDOJITt6770LEfKBTQyXXvUyOuRYP4Pq8c714/E1nXGRpC02I5ZsAyjEYWfkohFz0xDIVXP33E1y@lists.infradead.org, AJvYcCWdUWHQG94SA9cmrtv1H7FO02f5sAB8fqYsNNPUpoTSa9JG6z7s25rtLe3kFIecYCenwFkHYfT0jnlL18hRlMc=@lists.infradead.org, AJvYcCWiULmjlj43zhzIEIiC0tq1lgkFrpITQeXtAZOMSjjtc2bqoGcSyZmSzEam9JSBRxEhwHVXAgqHGyxo@lists.infradead.org X-Gm-Message-State: AOJu0Yz+dyvFJxz0JHkjsvw5MYpCHXKFr3Uf2RpDs0mST+bOdCqORioW EsPM7/Pl7CAP041vGuZ/jhCFMVRsO2MaN1xRzc0yWmZRGMeTDO+M X-Gm-Gg: ASbGncv5N0wuiWNzW31ytC8Sg5ssEttPuMEnm209xC+vLlbfperjUTbhJkHyk8YdfmN +Lk2A3lzID5AanL8I+p2hIrE7iKpdHTXLD1FKygfsICiRwRLS21q44mNI2RXt3keEMkjM0HSzGL HYKjH+4E/axmulFC2frC+bZGTN3hayr6MFvEXWp/hz7q4r9IBHsifsQ5+DG93zv5BFwux8LbfpN X0RSDcL3fk0Hu0Jawvz5+FwZhv7EPolVqqzzndX3jMeXEu4XC62NAr3/Jg37KTBfCcng4eCFZck 6sWdZI5xay6li2w5ohoA1WIcXHqIWgDtFPhS+3GWqBGM3zRhIgLXlapVVN1IITATFUyM4qTNMgM XSeLOYEoypfr8Wg== X-Google-Smtp-Source: AGHT+IHb6GE+RdsoNUn0+3sL37pgWMjh5/VzLN7RX2rS7tVvUpl9i16EKbDnFhvFgXvM+UgMM2DmzQ== X-Received: by 2002:a05:6000:1846:b0:391:2192:ccd6 with SMTP id ffacd0b85a97d-39132dd6afcmr7499960f8f.39.1741527059081; Sun, 09 Mar 2025 06:30:59 -0700 (PDT) Received: from localhost.localdomain (93-34-90-129.ip49.fastwebnet.it. [93.34.90.129]) by smtp.googlemail.com with ESMTPSA id ffacd0b85a97d-3912bee262esm11867536f8f.0.2025.03.09.06.30.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 09 Mar 2025 06:30:58 -0700 (PDT) From: Christian Marangi To: Michael Turquette , Stephen Boyd , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Lee Jones , Christian Marangi , Vinod Koul , Kishon Vijay Abraham I , Matthias Brugger , AngeloGioacchino Del Regno , Greg Kroah-Hartman , Lorenzo Bianconi , Daniel Danzberger , Arnd Bergmann , Linus Walleij , Nikita Shubin , Guo Ren , Yangyu Chen , Ben Hutchings , Felix Fietkau , linux-clk@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-phy@lists.infradead.org, linux-mediatek@lists.infradead.org, linux-usb@vger.kernel.org, upstream@airoha.com Subject: [PATCH 13/13] arm64: dts: airoha: en7581: add USB and SCU SSR nodes Date: Sun, 9 Mar 2025 14:29:44 +0100 Message-ID: <20250309132959.19045-14-ansuelsmth@gmail.com> X-Mailer: git-send-email 2.48.1 In-Reply-To: <20250309132959.19045-1-ansuelsmth@gmail.com> References: <20250309132959.19045-1-ansuelsmth@gmail.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20250309_063100_831460_59F340B6 X-CRM114-Status: GOOD ( 12.43 ) X-BeenThere: linux-mediatek@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "Linux-mediatek" Errors-To: linux-mediatek-bounces+linux-mediatek=archiver.kernel.org@lists.infradead.org Add SCU SSR and USB nodes required for USB support of Airoha EN7581. SCU SSR node is required to read and configure the current Serdes mode of the USB PHYs. Signed-off-by: Christian Marangi --- arch/arm64/boot/dts/airoha/en7581.dtsi | 61 ++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) diff --git a/arch/arm64/boot/dts/airoha/en7581.dtsi b/arch/arm64/boot/dts/airoha/en7581.dtsi index dfc12fa99748..5975da11ace0 100644 --- a/arch/arm64/boot/dts/airoha/en7581.dtsi +++ b/arch/arm64/boot/dts/airoha/en7581.dtsi @@ -3,6 +3,7 @@ #include #include #include +#include #include / { @@ -183,6 +184,10 @@ scuclk: clock-controller { #clock-cells = <1>; #reset-cells = <1>; }; + + scu_ssr: system-controller { + compatible = "airoha,an7581-scu-ssr"; + }; }; uart1: serial@1fbf0000 { @@ -200,6 +205,62 @@ rng@1faa1000 { interrupts = ; }; + usb0: usb@1fab0000 { + compatible = "mediatek,mtk-xhci"; + reg = <0x0 0x1fab0000 0x0 0x3e00>, + <0x0 0x1fab3e00 0x0 0x100>; + reg-names = "mac", "ippc"; + interrupts = ; + + phys = <&usb0_u2 PHY_TYPE_USB2>, <&usb0_u3 PHY_TYPE_USB3>; + + status = "disabled"; + }; + + phy@1fac0000 { + compatible = "airoha,an7581-usb-phy"; + reg = <0x0 0x1fac0000 0x0 0x10000>; + + airoha,port-id = <0>; + airoha,scu-ssr = <&scu_ssr>; + + usb0_u2: usb2-phy { + #phy-cells = <1>; + }; + + usb0_u3: usb3-phy { + #phy-cells = <1>; + }; + }; + + usb1: usb@1fad0000 { + compatible = "mediatek,mtk-xhci"; + reg = <0x0 0x1fad0000 0x0 0x3e00>, + <0x0 0x1fad3e00 0x0 0x100>; + reg-names = "mac", "ippc"; + interrupts = ; + + phys = <&usb1_u2 PHY_TYPE_USB2>, <&usb0_u3 PHY_TYPE_USB3>; + + status = "disabled"; + }; + + phy@1fae0000 { + compatible = "airoha,an7581-usb-phy"; + reg = <0x0 0x1fae0000 0x0 0x10000>; + + airoha,port-id = <1>; + airoha,scu-ssr = <&scu_ssr>; + + usb1_u2: usb2-phy { + #phy-cells = <1>; + }; + + usb1_u3: usb3-phy { + #phy-cells = <1>; + }; + }; + system-controller@1fbf0200 { compatible = "airoha,en7581-gpio-sysctl", "syscon", "simple-mfd";