* [PATCH 0/7] clk: en7523: Update register mapping for EN7581
@ 2024-08-31 7:18 Lorenzo Bianconi
2024-08-31 7:18 ` [PATCH 1/7] dt-bindings: clock: airoha: update reg mapping for EN7581 SoC Lorenzo Bianconi
` (6 more replies)
0 siblings, 7 replies; 14+ messages in thread
From: Lorenzo Bianconi @ 2024-08-31 7:18 UTC (permalink / raw)
To: Michael Turquette, Stephen Boyd, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Felix Fietkau, Philipp Zabel
Cc: linux-clk, devicetree, upstream, angelogioacchino.delregno,
linux-arm-kernel, lorenzo.bianconi83, ansuelsmth,
Lorenzo Bianconi
Map all clock-controller memory region in a single block for EN7581 SoC.
Introduce chip_scu regmap pointer since EN7581 SoC will access chip-scu
memory area through a syscon node.
REG_PCIE*_MEM and REG_PCIE*_MEM_MASK memory regions (PBUS_CSR) are not
part of the scu block on the EN7581 SoC, so configure them via a
dedicated syscon node.
This series does not introduce any backward incompatibility since the
dts for EN7581 SoC is not public yet.
---
Lorenzo Bianconi (7):
dt-bindings: clock: airoha: update reg mapping for EN7581 SoC.
clk: en7523: set REG_PCIE*_{MEM,MEM_MASK} via syscon
clk: en7523: move clock_register in hw_init callback
clk: en7523: introduce chip_scu regmap
clk: en7523: fix estimation of fixed rate for EN7581
clk: en7523: move en7581_reset_register() in en7581_clk_hw_init()
clk: en7523: map io region in a single block
.../bindings/clock/airoha,en7523-scu.yaml | 12 +-
drivers/clk/clk-en7523.c | 311 ++++++++++++++-------
2 files changed, 220 insertions(+), 103 deletions(-)
---
base-commit: f0e992956eb617c8f16119944bfe101dea074147
change-id: 20240823-clk-en7581-syscon-100c6ea60c50
prerequisite-change-id: 20240705-for-6-11-bpf-a349efc08df8:v2
Best regards,
--
Lorenzo Bianconi <lorenzo@kernel.org>
^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH 1/7] dt-bindings: clock: airoha: update reg mapping for EN7581 SoC.
2024-08-31 7:18 [PATCH 0/7] clk: en7523: Update register mapping for EN7581 Lorenzo Bianconi
@ 2024-08-31 7:18 ` Lorenzo Bianconi
2024-09-02 8:19 ` Conor Dooley
2024-09-03 15:04 ` Rob Herring
2024-08-31 7:18 ` [PATCH 2/7] clk: en7523: set REG_PCIE*_{MEM,MEM_MASK} via syscon Lorenzo Bianconi
` (5 subsequent siblings)
6 siblings, 2 replies; 14+ messages in thread
From: Lorenzo Bianconi @ 2024-08-31 7:18 UTC (permalink / raw)
To: Michael Turquette, Stephen Boyd, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Felix Fietkau, Philipp Zabel
Cc: linux-clk, devicetree, upstream, angelogioacchino.delregno,
linux-arm-kernel, lorenzo.bianconi83, ansuelsmth,
Lorenzo Bianconi
clk-en7523 driver for EN7581 SoC is mapping all the scu memory region
while it is configuring the chip-scu one via a syscon. Update the reg
mapping definition for this device. This patch does not introduce any
backward incompatibility since the dts for EN7581 SoC is not public yet.
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
.../devicetree/bindings/clock/airoha,en7523-scu.yaml | 12 +++---------
1 file changed, 3 insertions(+), 9 deletions(-)
diff --git a/Documentation/devicetree/bindings/clock/airoha,en7523-scu.yaml b/Documentation/devicetree/bindings/clock/airoha,en7523-scu.yaml
index 84353fd09428..ca426c328535 100644
--- a/Documentation/devicetree/bindings/clock/airoha,en7523-scu.yaml
+++ b/Documentation/devicetree/bindings/clock/airoha,en7523-scu.yaml
@@ -34,8 +34,8 @@ properties:
- airoha,en7581-scu
reg:
- minItems: 2
- maxItems: 4
+ minItems: 1
+ maxItems: 2
"#clock-cells":
description:
@@ -75,9 +75,6 @@ allOf:
reg:
items:
- description: scu base address
- - description: misc scu base address
- - description: reset base address
- - description: pb scu base address
additionalProperties: false
@@ -98,10 +95,7 @@ examples:
scuclk: clock-controller@1fa20000 {
compatible = "airoha,en7581-scu";
- reg = <0x0 0x1fa20000 0x0 0x400>,
- <0x0 0x1fb00000 0x0 0x90>,
- <0x0 0x1fb00830 0x0 0x8>,
- <0x0 0x1fbe3400 0x0 0xfc>;
+ reg = <0x0 0x1fb00000 0x0 0x970>;
#clock-cells = <1>;
#reset-cells = <1>;
};
--
2.46.0
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 2/7] clk: en7523: set REG_PCIE*_{MEM,MEM_MASK} via syscon
2024-08-31 7:18 [PATCH 0/7] clk: en7523: Update register mapping for EN7581 Lorenzo Bianconi
2024-08-31 7:18 ` [PATCH 1/7] dt-bindings: clock: airoha: update reg mapping for EN7581 SoC Lorenzo Bianconi
@ 2024-08-31 7:18 ` Lorenzo Bianconi
2024-09-02 8:21 ` Conor Dooley
2024-08-31 7:18 ` [PATCH 3/7] clk: en7523: move clock_register in hw_init callback Lorenzo Bianconi
` (4 subsequent siblings)
6 siblings, 1 reply; 14+ messages in thread
From: Lorenzo Bianconi @ 2024-08-31 7:18 UTC (permalink / raw)
To: Michael Turquette, Stephen Boyd, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Felix Fietkau, Philipp Zabel
Cc: linux-clk, devicetree, upstream, angelogioacchino.delregno,
linux-arm-kernel, lorenzo.bianconi83, ansuelsmth,
Lorenzo Bianconi
REG_PCIE*_MEM and REG_PCIE*_MEM_MASK memory regions (PBUS_CSR) are not
part of the scu block on the EN7581 SoC, so configure them via a dedicated
syscon node. This patch does not introduce any backward incompatibility
since the dts for EN7581 SoC is not public yet.
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
drivers/clk/clk-en7523.c | 24 +++++++++++++-----------
1 file changed, 13 insertions(+), 11 deletions(-)
diff --git a/drivers/clk/clk-en7523.c b/drivers/clk/clk-en7523.c
index 22fbea61c3dc..2bc1bf4afbed 100644
--- a/drivers/clk/clk-en7523.c
+++ b/drivers/clk/clk-en7523.c
@@ -3,8 +3,10 @@
#include <linux/delay.h>
#include <linux/clk-provider.h>
#include <linux/io.h>
+#include <linux/mfd/syscon.h>
#include <linux/platform_device.h>
#include <linux/property.h>
+#include <linux/regmap.h>
#include <linux/reset-controller.h>
#include <dt-bindings/clock/en7523-clk.h>
#include <dt-bindings/reset/airoha,en7581-reset.h>
@@ -415,25 +417,25 @@ static void en7581_pci_disable(struct clk_hw *hw)
static int en7581_clk_hw_init(struct platform_device *pdev,
void __iomem *np_base)
{
- void __iomem *pb_base;
+ struct regmap *map;
u32 val;
- pb_base = devm_platform_ioremap_resource(pdev, 3);
- if (IS_ERR(pb_base))
- return PTR_ERR(pb_base);
-
val = readl(np_base + REG_NP_SCU_SSTR);
val &= ~(REG_PCIE_XSI0_SEL_MASK | REG_PCIE_XSI1_SEL_MASK);
writel(val, np_base + REG_NP_SCU_SSTR);
val = readl(np_base + REG_NP_SCU_PCIC);
writel(val | 3, np_base + REG_NP_SCU_PCIC);
- writel(0x20000000, pb_base + REG_PCIE0_MEM);
- writel(0xfc000000, pb_base + REG_PCIE0_MEM_MASK);
- writel(0x24000000, pb_base + REG_PCIE1_MEM);
- writel(0xfc000000, pb_base + REG_PCIE1_MEM_MASK);
- writel(0x28000000, pb_base + REG_PCIE2_MEM);
- writel(0xfc000000, pb_base + REG_PCIE2_MEM_MASK);
+ map = syscon_regmap_lookup_by_compatible("airoha,en7581-pbus-csr");
+ if (IS_ERR(map))
+ return PTR_ERR(map);
+
+ regmap_write(map, REG_PCIE0_MEM, 0x20000000);
+ regmap_write(map, REG_PCIE0_MEM_MASK, 0xfc000000);
+ regmap_write(map, REG_PCIE1_MEM, 0x24000000);
+ regmap_write(map, REG_PCIE1_MEM_MASK, 0xfc000000);
+ regmap_write(map, REG_PCIE2_MEM, 0x28000000);
+ regmap_write(map, REG_PCIE2_MEM_MASK, 0xfc000000);
return 0;
}
--
2.46.0
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 3/7] clk: en7523: move clock_register in hw_init callback
2024-08-31 7:18 [PATCH 0/7] clk: en7523: Update register mapping for EN7581 Lorenzo Bianconi
2024-08-31 7:18 ` [PATCH 1/7] dt-bindings: clock: airoha: update reg mapping for EN7581 SoC Lorenzo Bianconi
2024-08-31 7:18 ` [PATCH 2/7] clk: en7523: set REG_PCIE*_{MEM,MEM_MASK} via syscon Lorenzo Bianconi
@ 2024-08-31 7:18 ` Lorenzo Bianconi
2024-08-31 7:18 ` [PATCH 4/7] clk: en7523: introduce chip_scu regmap Lorenzo Bianconi
` (3 subsequent siblings)
6 siblings, 0 replies; 14+ messages in thread
From: Lorenzo Bianconi @ 2024-08-31 7:18 UTC (permalink / raw)
To: Michael Turquette, Stephen Boyd, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Felix Fietkau, Philipp Zabel
Cc: linux-clk, devicetree, upstream, angelogioacchino.delregno,
linux-arm-kernel, lorenzo.bianconi83, ansuelsmth,
Lorenzo Bianconi
Move en7523_register_clocks routine in hw_init callback.
Introduce en7523_clk_hw_init callback for EN7523 SoC.
This is a preliminary patch to differentiate IO mapped region between
EN7523 and EN7581 SoCs in order to access chip-scu IO region
<0x1fa20000 0x384> on EN7581 SoC as syscon device since it contains
miscellaneous registers needed by multiple devices (clock, pinctrl ..).
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
drivers/clk/clk-en7523.c | 106 +++++++++++++++++++++++++++--------------------
1 file changed, 62 insertions(+), 44 deletions(-)
diff --git a/drivers/clk/clk-en7523.c b/drivers/clk/clk-en7523.c
index 2bc1bf4afbed..78bcb0ce77a5 100644
--- a/drivers/clk/clk-en7523.c
+++ b/drivers/clk/clk-en7523.c
@@ -86,7 +86,8 @@ struct en_clk_soc_data {
const u16 *idx_map;
u16 idx_map_nr;
} reset;
- int (*hw_init)(struct platform_device *pdev, void __iomem *np_base);
+ int (*hw_init)(struct platform_device *pdev,
+ struct clk_hw_onecell_data *clk_data);
};
static const u32 gsw_base[] = { 400000000, 500000000 };
@@ -414,32 +415,6 @@ static void en7581_pci_disable(struct clk_hw *hw)
usleep_range(1000, 2000);
}
-static int en7581_clk_hw_init(struct platform_device *pdev,
- void __iomem *np_base)
-{
- struct regmap *map;
- u32 val;
-
- val = readl(np_base + REG_NP_SCU_SSTR);
- val &= ~(REG_PCIE_XSI0_SEL_MASK | REG_PCIE_XSI1_SEL_MASK);
- writel(val, np_base + REG_NP_SCU_SSTR);
- val = readl(np_base + REG_NP_SCU_PCIC);
- writel(val | 3, np_base + REG_NP_SCU_PCIC);
-
- map = syscon_regmap_lookup_by_compatible("airoha,en7581-pbus-csr");
- if (IS_ERR(map))
- return PTR_ERR(map);
-
- regmap_write(map, REG_PCIE0_MEM, 0x20000000);
- regmap_write(map, REG_PCIE0_MEM_MASK, 0xfc000000);
- regmap_write(map, REG_PCIE1_MEM, 0x24000000);
- regmap_write(map, REG_PCIE1_MEM_MASK, 0xfc000000);
- regmap_write(map, REG_PCIE2_MEM, 0x28000000);
- regmap_write(map, REG_PCIE2_MEM_MASK, 0xfc000000);
-
- return 0;
-}
-
static void en7523_register_clocks(struct device *dev, struct clk_hw_onecell_data *clk_data,
void __iomem *base, void __iomem *np_base)
{
@@ -469,6 +444,61 @@ static void en7523_register_clocks(struct device *dev, struct clk_hw_onecell_dat
clk_data->num = EN7523_NUM_CLOCKS;
}
+static int en7523_clk_hw_init(struct platform_device *pdev,
+ struct clk_hw_onecell_data *clk_data)
+{
+ void __iomem *base, *np_base;
+
+ base = devm_platform_ioremap_resource(pdev, 0);
+ if (IS_ERR(base))
+ return PTR_ERR(base);
+
+ 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);
+
+ return 0;
+}
+
+static int en7581_clk_hw_init(struct platform_device *pdev,
+ struct clk_hw_onecell_data *clk_data)
+{
+ void __iomem *base, *np_base;
+ struct regmap *map;
+ u32 val;
+
+ base = devm_platform_ioremap_resource(pdev, 0);
+ if (IS_ERR(base))
+ return PTR_ERR(base);
+
+ 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);
+
+ val = readl(np_base + REG_NP_SCU_SSTR);
+ val &= ~(REG_PCIE_XSI0_SEL_MASK | REG_PCIE_XSI1_SEL_MASK);
+ writel(val, np_base + REG_NP_SCU_SSTR);
+ val = readl(np_base + REG_NP_SCU_PCIC);
+ writel(val | 3, np_base + REG_NP_SCU_PCIC);
+
+ map = syscon_regmap_lookup_by_compatible("airoha,en7581-pbus-csr");
+ if (IS_ERR(map))
+ return PTR_ERR(map);
+
+ regmap_write(map, REG_PCIE0_MEM, 0x20000000);
+ regmap_write(map, REG_PCIE0_MEM_MASK, 0xfc000000);
+ regmap_write(map, REG_PCIE1_MEM, 0x24000000);
+ regmap_write(map, REG_PCIE1_MEM_MASK, 0xfc000000);
+ regmap_write(map, REG_PCIE2_MEM, 0x28000000);
+ regmap_write(map, REG_PCIE2_MEM_MASK, 0xfc000000);
+
+ return 0;
+}
+
static int en7523_reset_update(struct reset_controller_dev *rcdev,
unsigned long id, bool assert)
{
@@ -563,31 +593,18 @@ static int en7523_clk_probe(struct platform_device *pdev)
struct device_node *node = pdev->dev.of_node;
const struct en_clk_soc_data *soc_data;
struct clk_hw_onecell_data *clk_data;
- void __iomem *base, *np_base;
int r;
- base = devm_platform_ioremap_resource(pdev, 0);
- if (IS_ERR(base))
- return PTR_ERR(base);
-
- np_base = devm_platform_ioremap_resource(pdev, 1);
- if (IS_ERR(np_base))
- return PTR_ERR(np_base);
-
- soc_data = device_get_match_data(&pdev->dev);
- if (soc_data->hw_init) {
- r = soc_data->hw_init(pdev, np_base);
- if (r)
- return r;
- }
-
clk_data = devm_kzalloc(&pdev->dev,
struct_size(clk_data, hws, EN7523_NUM_CLOCKS),
GFP_KERNEL);
if (!clk_data)
return -ENOMEM;
- en7523_register_clocks(&pdev->dev, clk_data, base, np_base);
+ soc_data = device_get_match_data(&pdev->dev);
+ r = soc_data->hw_init(pdev, clk_data);
+ if (r)
+ return r;
r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
if (r)
@@ -610,6 +627,7 @@ static const struct en_clk_soc_data en7523_data = {
.prepare = en7523_pci_prepare,
.unprepare = en7523_pci_unprepare,
},
+ .hw_init = en7523_clk_hw_init,
};
static const struct en_clk_soc_data en7581_data = {
--
2.46.0
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 4/7] clk: en7523: introduce chip_scu regmap
2024-08-31 7:18 [PATCH 0/7] clk: en7523: Update register mapping for EN7581 Lorenzo Bianconi
` (2 preceding siblings ...)
2024-08-31 7:18 ` [PATCH 3/7] clk: en7523: move clock_register in hw_init callback Lorenzo Bianconi
@ 2024-08-31 7:18 ` Lorenzo Bianconi
2024-09-02 7:37 ` Dan Carpenter
2024-08-31 7:18 ` [PATCH 5/7] clk: en7523: fix estimation of fixed rate for EN7581 Lorenzo Bianconi
` (2 subsequent siblings)
6 siblings, 1 reply; 14+ messages in thread
From: Lorenzo Bianconi @ 2024-08-31 7:18 UTC (permalink / raw)
To: Michael Turquette, Stephen Boyd, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Felix Fietkau, Philipp Zabel
Cc: linux-clk, devicetree, upstream, angelogioacchino.delregno,
linux-arm-kernel, lorenzo.bianconi83, ansuelsmth,
Lorenzo Bianconi
Introduce chip_scu regmap pointer since EN7581 SoC will access chip-scu
memory area through a syscon node. Remove first memory region mapping
for EN7581 SoC. This patch does not introduce any backward incompatibility
since the dts for EN7581 SoC is not public yet.
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
drivers/clk/clk-en7523.c | 75 +++++++++++++++++++++++++++++++++++-------------
1 file changed, 55 insertions(+), 20 deletions(-)
diff --git a/drivers/clk/clk-en7523.c b/drivers/clk/clk-en7523.c
index 78bcb0ce77a5..d0f936ec6bb2 100644
--- a/drivers/clk/clk-en7523.c
+++ b/drivers/clk/clk-en7523.c
@@ -255,15 +255,11 @@ static const u16 en7581_rst_map[] = {
[EN7581_XPON_MAC_RST] = RST_NR_PER_BANK + 31,
};
-static unsigned int en7523_get_base_rate(void __iomem *base, unsigned int i)
+static u32 en7523_get_base_rate(const struct en_clk_desc *desc, u32 val)
{
- const struct en_clk_desc *desc = &en7523_base_clks[i];
- u32 val;
-
if (!desc->base_bits)
return desc->base_value;
- val = readl(base + desc->base_reg);
val >>= desc->base_shift;
val &= (1 << desc->base_bits) - 1;
@@ -273,16 +269,11 @@ static unsigned int en7523_get_base_rate(void __iomem *base, unsigned int i)
return desc->base_values[val];
}
-static u32 en7523_get_div(void __iomem *base, int i)
+static u32 en7523_get_div(const struct en_clk_desc *desc, u32 val)
{
- const struct en_clk_desc *desc = &en7523_base_clks[i];
- u32 reg, val;
-
if (!desc->div_bits)
return 1;
- reg = desc->div_reg ? desc->div_reg : desc->base_reg;
- val = readl(base + reg);
val >>= desc->div_shift;
val &= (1 << desc->div_bits) - 1;
@@ -424,9 +415,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);
- rate = en7523_get_base_rate(base, i);
- rate /= en7523_get_div(base, i);
+ rate = en7523_get_base_rate(desc, val);
+ val = readl(base + reg);
+ rate /= en7523_get_div(desc, val);
hw = clk_hw_register_fixed_rate(dev, desc->name, NULL, 0, rate);
if (IS_ERR(hw)) {
@@ -462,22 +456,63 @@ static int en7523_clk_hw_init(struct platform_device *pdev,
return 0;
}
+static void en7581_register_clocks(struct device *dev, struct clk_hw_onecell_data *clk_data,
+ struct regmap *map, void __iomem *base)
+{
+ 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 val, reg = desc->div_reg ? desc->div_reg : desc->base_reg;
+
+ if (regmap_read(map, desc->base_reg, &val)) {
+ pr_err("Failed reading fixed clk rate %s: %ld\n",
+ desc->name, PTR_ERR(hw));
+ continue;
+ }
+ rate = en7523_get_base_rate(desc, val);
+
+ if (regmap_read(map, reg, &val)) {
+ pr_err("Failed reading fixed clk div %s: %ld\n",
+ desc->name, PTR_ERR(hw));
+ 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, base);
+ clk_data->hws[EN7523_CLK_PCIE] = hw;
+
+ clk_data->num = EN7523_NUM_CLOCKS;
+}
+
static int en7581_clk_hw_init(struct platform_device *pdev,
struct clk_hw_onecell_data *clk_data)
{
- void __iomem *base, *np_base;
+ void __iomem *np_base;
struct regmap *map;
u32 val;
- base = devm_platform_ioremap_resource(pdev, 0);
- if (IS_ERR(base))
- return PTR_ERR(base);
+ map = syscon_regmap_lookup_by_compatible("airoha,en7581-chip-scu");
+ if (IS_ERR(map))
+ return PTR_ERR(map);
- np_base = devm_platform_ioremap_resource(pdev, 1);
+ np_base = devm_platform_ioremap_resource(pdev, 0);
if (IS_ERR(np_base))
return PTR_ERR(np_base);
- en7523_register_clocks(&pdev->dev, clk_data, base, np_base);
+ en7581_register_clocks(&pdev->dev, clk_data, map, np_base);
val = readl(np_base + REG_NP_SCU_SSTR);
val &= ~(REG_PCIE_XSI0_SEL_MASK | REG_PCIE_XSI1_SEL_MASK);
@@ -565,7 +600,7 @@ static int en7523_reset_register(struct platform_device *pdev,
if (!soc_data->reset.idx_map_nr)
return 0;
- base = devm_platform_ioremap_resource(pdev, 2);
+ base = devm_platform_ioremap_resource(pdev, 1);
if (IS_ERR(base))
return PTR_ERR(base);
--
2.46.0
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 5/7] clk: en7523: fix estimation of fixed rate for EN7581
2024-08-31 7:18 [PATCH 0/7] clk: en7523: Update register mapping for EN7581 Lorenzo Bianconi
` (3 preceding siblings ...)
2024-08-31 7:18 ` [PATCH 4/7] clk: en7523: introduce chip_scu regmap Lorenzo Bianconi
@ 2024-08-31 7:18 ` Lorenzo Bianconi
2024-08-31 7:18 ` [PATCH 6/7] clk: en7523: move en7581_reset_register() in en7581_clk_hw_init() Lorenzo Bianconi
2024-08-31 7:18 ` [PATCH 7/7] clk: en7523: map io region in a single block Lorenzo Bianconi
6 siblings, 0 replies; 14+ messages in thread
From: Lorenzo Bianconi @ 2024-08-31 7:18 UTC (permalink / raw)
To: Michael Turquette, Stephen Boyd, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Felix Fietkau, Philipp Zabel
Cc: linux-clk, devicetree, upstream, angelogioacchino.delregno,
linux-arm-kernel, lorenzo.bianconi83, ansuelsmth,
Lorenzo Bianconi
Introduce en7581_base_clks array in order to define per-SoC fixed-rate
clock parameters and fix wrong parameters for emi, npu and crypto EN7581
clocks
Fixes: 66bc47326ce2 ("clk: en7523: Add EN7581 support")
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
drivers/clk/clk-en7523.c | 105 ++++++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 103 insertions(+), 2 deletions(-)
diff --git a/drivers/clk/clk-en7523.c b/drivers/clk/clk-en7523.c
index d0f936ec6bb2..f9ebbdb70393 100644
--- a/drivers/clk/clk-en7523.c
+++ b/drivers/clk/clk-en7523.c
@@ -43,6 +43,7 @@
#define REG_NP_SCU_SSTR 0x9c
#define REG_PCIE_XSI0_SEL_MASK GENMASK(14, 13)
#define REG_PCIE_XSI1_SEL_MASK GENMASK(12, 11)
+#define REG_CRYPTO_CLKSRC2 0x20c
#define REG_RST_CTRL2 0x00
#define REG_RST_CTRL1 0x04
@@ -95,6 +96,10 @@ static const u32 emi_base[] = { 333000000, 400000000 };
static const u32 bus_base[] = { 500000000, 540000000 };
static const u32 slic_base[] = { 100000000, 3125000 };
static const u32 npu_base[] = { 333000000, 400000000, 500000000 };
+/* EN7581 */
+static const u32 emi7581_base[] = { 540000000, 480000000, 400000000, 300000000 };
+static const u32 npu7581_base[] = { 800000000, 750000000, 720000000, 600000000 };
+static const u32 crypto_base[] = { 540000000, 480000000 };
static const struct en_clk_desc en7523_base_clks[] = {
{
@@ -192,6 +197,102 @@ static const struct en_clk_desc en7523_base_clks[] = {
}
};
+static const struct en_clk_desc en7581_base_clks[] = {
+ {
+ .id = EN7523_CLK_GSW,
+ .name = "gsw",
+
+ .base_reg = REG_GSW_CLK_DIV_SEL,
+ .base_bits = 1,
+ .base_shift = 8,
+ .base_values = gsw_base,
+ .n_base_values = ARRAY_SIZE(gsw_base),
+
+ .div_bits = 3,
+ .div_shift = 0,
+ .div_step = 1,
+ .div_offset = 1,
+ }, {
+ .id = EN7523_CLK_EMI,
+ .name = "emi",
+
+ .base_reg = REG_EMI_CLK_DIV_SEL,
+ .base_bits = 2,
+ .base_shift = 8,
+ .base_values = emi7581_base,
+ .n_base_values = ARRAY_SIZE(emi7581_base),
+
+ .div_bits = 3,
+ .div_shift = 0,
+ .div_step = 1,
+ .div_offset = 1,
+ }, {
+ .id = EN7523_CLK_BUS,
+ .name = "bus",
+
+ .base_reg = REG_BUS_CLK_DIV_SEL,
+ .base_bits = 1,
+ .base_shift = 8,
+ .base_values = bus_base,
+ .n_base_values = ARRAY_SIZE(bus_base),
+
+ .div_bits = 3,
+ .div_shift = 0,
+ .div_step = 1,
+ .div_offset = 1,
+ }, {
+ .id = EN7523_CLK_SLIC,
+ .name = "slic",
+
+ .base_reg = REG_SPI_CLK_FREQ_SEL,
+ .base_bits = 1,
+ .base_shift = 0,
+ .base_values = slic_base,
+ .n_base_values = ARRAY_SIZE(slic_base),
+
+ .div_reg = REG_SPI_CLK_DIV_SEL,
+ .div_bits = 5,
+ .div_shift = 24,
+ .div_val0 = 20,
+ .div_step = 2,
+ }, {
+ .id = EN7523_CLK_SPI,
+ .name = "spi",
+
+ .base_reg = REG_SPI_CLK_DIV_SEL,
+
+ .base_value = 400000000,
+
+ .div_bits = 5,
+ .div_shift = 8,
+ .div_val0 = 40,
+ .div_step = 2,
+ }, {
+ .id = EN7523_CLK_NPU,
+ .name = "npu",
+
+ .base_reg = REG_NPU_CLK_DIV_SEL,
+ .base_bits = 2,
+ .base_shift = 8,
+ .base_values = npu7581_base,
+ .n_base_values = ARRAY_SIZE(npu7581_base),
+
+ .div_bits = 3,
+ .div_shift = 0,
+ .div_step = 1,
+ .div_offset = 1,
+ }, {
+ .id = EN7523_CLK_CRYPTO,
+ .name = "crypto",
+
+ .base_reg = REG_CRYPTO_CLKSRC2,
+ .base_bits = 1,
+ .base_shift = 0,
+ .base_values = crypto_base,
+ .n_base_values = ARRAY_SIZE(crypto_base),
+ }
+};
+
static const u16 en7581_rst_ofs[] = {
REG_RST_CTRL2,
REG_RST_CTRL1,
@@ -463,8 +564,8 @@ static void en7581_register_clocks(struct device *dev, struct clk_hw_onecell_dat
u32 rate;
int i;
- for (i = 0; i < ARRAY_SIZE(en7523_base_clks); i++) {
- const struct en_clk_desc *desc = &en7523_base_clks[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;
if (regmap_read(map, desc->base_reg, &val)) {
--
2.46.0
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 6/7] clk: en7523: move en7581_reset_register() in en7581_clk_hw_init()
2024-08-31 7:18 [PATCH 0/7] clk: en7523: Update register mapping for EN7581 Lorenzo Bianconi
` (4 preceding siblings ...)
2024-08-31 7:18 ` [PATCH 5/7] clk: en7523: fix estimation of fixed rate for EN7581 Lorenzo Bianconi
@ 2024-08-31 7:18 ` Lorenzo Bianconi
2024-08-31 7:18 ` [PATCH 7/7] clk: en7523: map io region in a single block Lorenzo Bianconi
6 siblings, 0 replies; 14+ messages in thread
From: Lorenzo Bianconi @ 2024-08-31 7:18 UTC (permalink / raw)
To: Michael Turquette, Stephen Boyd, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Felix Fietkau, Philipp Zabel
Cc: linux-clk, devicetree, upstream, angelogioacchino.delregno,
linux-arm-kernel, lorenzo.bianconi83, ansuelsmth,
Lorenzo Bianconi
Move en7581_reset_register routine in en7581_clk_hw_init() since reset
feature is supported just by EN7581 SoC.
Get rid of reset struct in en_clk_soc_data data struct.
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
drivers/clk/clk-en7523.c | 115 ++++++++++++++++++-----------------------------
1 file changed, 44 insertions(+), 71 deletions(-)
diff --git a/drivers/clk/clk-en7523.c b/drivers/clk/clk-en7523.c
index f9ebbdb70393..946c85a89102 100644
--- a/drivers/clk/clk-en7523.c
+++ b/drivers/clk/clk-en7523.c
@@ -82,11 +82,6 @@ struct en_rst_data {
struct en_clk_soc_data {
const struct clk_ops pcie_ops;
- struct {
- const u16 *bank_ofs;
- const u16 *idx_map;
- u16 idx_map_nr;
- } reset;
int (*hw_init)(struct platform_device *pdev,
struct clk_hw_onecell_data *clk_data);
};
@@ -598,43 +593,6 @@ static void en7581_register_clocks(struct device *dev, struct clk_hw_onecell_dat
clk_data->num = EN7523_NUM_CLOCKS;
}
-static int en7581_clk_hw_init(struct platform_device *pdev,
- struct clk_hw_onecell_data *clk_data)
-{
- void __iomem *np_base;
- struct regmap *map;
- u32 val;
-
- map = syscon_regmap_lookup_by_compatible("airoha,en7581-chip-scu");
- if (IS_ERR(map))
- return PTR_ERR(map);
-
- np_base = devm_platform_ioremap_resource(pdev, 0);
- if (IS_ERR(np_base))
- return PTR_ERR(np_base);
-
- en7581_register_clocks(&pdev->dev, clk_data, map, np_base);
-
- val = readl(np_base + REG_NP_SCU_SSTR);
- val &= ~(REG_PCIE_XSI0_SEL_MASK | REG_PCIE_XSI1_SEL_MASK);
- writel(val, np_base + REG_NP_SCU_SSTR);
- val = readl(np_base + REG_NP_SCU_PCIC);
- writel(val | 3, np_base + REG_NP_SCU_PCIC);
-
- map = syscon_regmap_lookup_by_compatible("airoha,en7581-pbus-csr");
- if (IS_ERR(map))
- return PTR_ERR(map);
-
- regmap_write(map, REG_PCIE0_MEM, 0x20000000);
- regmap_write(map, REG_PCIE0_MEM_MASK, 0xfc000000);
- regmap_write(map, REG_PCIE1_MEM, 0x24000000);
- regmap_write(map, REG_PCIE1_MEM_MASK, 0xfc000000);
- regmap_write(map, REG_PCIE2_MEM, 0x28000000);
- regmap_write(map, REG_PCIE2_MEM_MASK, 0xfc000000);
-
- return 0;
-}
-
static int en7523_reset_update(struct reset_controller_dev *rcdev,
unsigned long id, bool assert)
{
@@ -684,23 +642,18 @@ static int en7523_reset_xlate(struct reset_controller_dev *rcdev,
return rst_data->idx_map[reset_spec->args[0]];
}
-static const struct reset_control_ops en7523_reset_ops = {
+static const struct reset_control_ops en7581_reset_ops = {
.assert = en7523_reset_assert,
.deassert = en7523_reset_deassert,
.status = en7523_reset_status,
};
-static int en7523_reset_register(struct platform_device *pdev,
- const struct en_clk_soc_data *soc_data)
+static int en7581_reset_register(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
struct en_rst_data *rst_data;
void __iomem *base;
- /* no reset lines available */
- if (!soc_data->reset.idx_map_nr)
- return 0;
-
base = devm_platform_ioremap_resource(pdev, 1);
if (IS_ERR(base))
return PTR_ERR(base);
@@ -709,13 +662,13 @@ static int en7523_reset_register(struct platform_device *pdev,
if (!rst_data)
return -ENOMEM;
- rst_data->bank_ofs = soc_data->reset.bank_ofs;
- rst_data->idx_map = soc_data->reset.idx_map;
+ rst_data->bank_ofs = en7581_rst_ofs;
+ rst_data->idx_map = en7581_rst_map;
rst_data->base = base;
- rst_data->rcdev.nr_resets = soc_data->reset.idx_map_nr;
+ rst_data->rcdev.nr_resets = ARRAY_SIZE(en7581_rst_map);
rst_data->rcdev.of_xlate = en7523_reset_xlate;
- rst_data->rcdev.ops = &en7523_reset_ops;
+ rst_data->rcdev.ops = &en7581_reset_ops;
rst_data->rcdev.of_node = dev->of_node;
rst_data->rcdev.of_reset_n_cells = 1;
rst_data->rcdev.owner = THIS_MODULE;
@@ -724,6 +677,43 @@ static int en7523_reset_register(struct platform_device *pdev,
return devm_reset_controller_register(dev, &rst_data->rcdev);
}
+static int en7581_clk_hw_init(struct platform_device *pdev,
+ struct clk_hw_onecell_data *clk_data)
+{
+ void __iomem *np_base;
+ struct regmap *map;
+ u32 val;
+
+ map = syscon_regmap_lookup_by_compatible("airoha,en7581-chip-scu");
+ if (IS_ERR(map))
+ return PTR_ERR(map);
+
+ np_base = devm_platform_ioremap_resource(pdev, 0);
+ if (IS_ERR(np_base))
+ return PTR_ERR(np_base);
+
+ en7581_register_clocks(&pdev->dev, clk_data, map, np_base);
+
+ val = readl(np_base + REG_NP_SCU_SSTR);
+ val &= ~(REG_PCIE_XSI0_SEL_MASK | REG_PCIE_XSI1_SEL_MASK);
+ writel(val, np_base + REG_NP_SCU_SSTR);
+ val = readl(np_base + REG_NP_SCU_PCIC);
+ writel(val | 3, np_base + REG_NP_SCU_PCIC);
+
+ map = syscon_regmap_lookup_by_compatible("airoha,en7581-pbus-csr");
+ if (IS_ERR(map))
+ return PTR_ERR(map);
+
+ regmap_write(map, REG_PCIE0_MEM, 0x20000000);
+ regmap_write(map, REG_PCIE0_MEM_MASK, 0xfc000000);
+ regmap_write(map, REG_PCIE1_MEM, 0x24000000);
+ regmap_write(map, REG_PCIE1_MEM_MASK, 0xfc000000);
+ regmap_write(map, REG_PCIE2_MEM, 0x28000000);
+ regmap_write(map, REG_PCIE2_MEM_MASK, 0xfc000000);
+
+ return en7581_reset_register(pdev);
+}
+
static int en7523_clk_probe(struct platform_device *pdev)
{
struct device_node *node = pdev->dev.of_node;
@@ -742,19 +732,7 @@ static int en7523_clk_probe(struct platform_device *pdev)
if (r)
return r;
- r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
- if (r)
- return dev_err_probe(&pdev->dev, r, "Could not register clock provider: %s\n",
- pdev->name);
-
- r = en7523_reset_register(pdev, soc_data);
- if (r) {
- of_clk_del_provider(node);
- return dev_err_probe(&pdev->dev, r, "Could not register reset controller: %s\n",
- pdev->name);
- }
-
- return 0;
+ return of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
}
static const struct en_clk_soc_data en7523_data = {
@@ -772,11 +750,6 @@ static const struct en_clk_soc_data en7581_data = {
.enable = en7581_pci_enable,
.disable = en7581_pci_disable,
},
- .reset = {
- .bank_ofs = en7581_rst_ofs,
- .idx_map = en7581_rst_map,
- .idx_map_nr = ARRAY_SIZE(en7581_rst_map),
- },
.hw_init = en7581_clk_hw_init,
};
--
2.46.0
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH 7/7] clk: en7523: map io region in a single block
2024-08-31 7:18 [PATCH 0/7] clk: en7523: Update register mapping for EN7581 Lorenzo Bianconi
` (5 preceding siblings ...)
2024-08-31 7:18 ` [PATCH 6/7] clk: en7523: move en7581_reset_register() in en7581_clk_hw_init() Lorenzo Bianconi
@ 2024-08-31 7:18 ` Lorenzo Bianconi
6 siblings, 0 replies; 14+ messages in thread
From: Lorenzo Bianconi @ 2024-08-31 7:18 UTC (permalink / raw)
To: Michael Turquette, Stephen Boyd, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Felix Fietkau, Philipp Zabel
Cc: linux-clk, devicetree, upstream, angelogioacchino.delregno,
linux-arm-kernel, lorenzo.bianconi83, ansuelsmth,
Lorenzo Bianconi
Map all clock-controller memory region in a single block.
This patch does not introduce any backward incompatibility since the dts
for EN7581 SoC is not public yet.
Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
---
drivers/clk/clk-en7523.c | 32 +++++++++++++-------------------
1 file changed, 13 insertions(+), 19 deletions(-)
diff --git a/drivers/clk/clk-en7523.c b/drivers/clk/clk-en7523.c
index 946c85a89102..c62120c1d26e 100644
--- a/drivers/clk/clk-en7523.c
+++ b/drivers/clk/clk-en7523.c
@@ -45,8 +45,8 @@
#define REG_PCIE_XSI1_SEL_MASK GENMASK(12, 11)
#define REG_CRYPTO_CLKSRC2 0x20c
-#define REG_RST_CTRL2 0x00
-#define REG_RST_CTRL1 0x04
+#define REG_RST_CTRL2 0x830
+#define REG_RST_CTRL1 0x834
struct en_clk_desc {
int id;
@@ -648,15 +648,9 @@ static const struct reset_control_ops en7581_reset_ops = {
.status = en7523_reset_status,
};
-static int en7581_reset_register(struct platform_device *pdev)
+static int en7581_reset_register(struct device *dev, void __iomem *base)
{
- struct device *dev = &pdev->dev;
struct en_rst_data *rst_data;
- void __iomem *base;
-
- base = devm_platform_ioremap_resource(pdev, 1);
- if (IS_ERR(base))
- return PTR_ERR(base);
rst_data = devm_kzalloc(dev, sizeof(*rst_data), GFP_KERNEL);
if (!rst_data)
@@ -680,25 +674,25 @@ static int en7581_reset_register(struct platform_device *pdev)
static int en7581_clk_hw_init(struct platform_device *pdev,
struct clk_hw_onecell_data *clk_data)
{
- void __iomem *np_base;
struct regmap *map;
+ void __iomem *base;
u32 val;
map = syscon_regmap_lookup_by_compatible("airoha,en7581-chip-scu");
if (IS_ERR(map))
return PTR_ERR(map);
- np_base = devm_platform_ioremap_resource(pdev, 0);
- if (IS_ERR(np_base))
- return PTR_ERR(np_base);
+ base = devm_platform_ioremap_resource(pdev, 0);
+ if (IS_ERR(base))
+ return PTR_ERR(base);
- en7581_register_clocks(&pdev->dev, clk_data, map, np_base);
+ en7581_register_clocks(&pdev->dev, clk_data, map, base);
- val = readl(np_base + REG_NP_SCU_SSTR);
+ val = readl(base + REG_NP_SCU_SSTR);
val &= ~(REG_PCIE_XSI0_SEL_MASK | REG_PCIE_XSI1_SEL_MASK);
- writel(val, np_base + REG_NP_SCU_SSTR);
- val = readl(np_base + REG_NP_SCU_PCIC);
- writel(val | 3, np_base + REG_NP_SCU_PCIC);
+ writel(val, base + REG_NP_SCU_SSTR);
+ val = readl(base + REG_NP_SCU_PCIC);
+ writel(val | 3, base + REG_NP_SCU_PCIC);
map = syscon_regmap_lookup_by_compatible("airoha,en7581-pbus-csr");
if (IS_ERR(map))
@@ -711,7 +705,7 @@ static int en7581_clk_hw_init(struct platform_device *pdev,
regmap_write(map, REG_PCIE2_MEM, 0x28000000);
regmap_write(map, REG_PCIE2_MEM_MASK, 0xfc000000);
- return en7581_reset_register(pdev);
+ return en7581_reset_register(&pdev->dev, base);
}
static int en7523_clk_probe(struct platform_device *pdev)
--
2.46.0
^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH 4/7] clk: en7523: introduce chip_scu regmap
2024-08-31 7:18 ` [PATCH 4/7] clk: en7523: introduce chip_scu regmap Lorenzo Bianconi
@ 2024-09-02 7:37 ` Dan Carpenter
0 siblings, 0 replies; 14+ messages in thread
From: Dan Carpenter @ 2024-09-02 7:37 UTC (permalink / raw)
To: oe-kbuild, Lorenzo Bianconi, Michael Turquette, Stephen Boyd,
Rob Herring, Krzysztof Kozlowski, Conor Dooley, Felix Fietkau,
Philipp Zabel
Cc: lkp, oe-kbuild-all, linux-clk, devicetree, upstream,
angelogioacchino.delregno, linux-arm-kernel, lorenzo.bianconi83,
ansuelsmth, Lorenzo Bianconi
Hi Lorenzo,
kernel test robot noticed the following build warnings:
url: https://github.com/intel-lab-lkp/linux/commits/Lorenzo-Bianconi/dt-bindings-clock-airoha-update-reg-mapping-for-EN7581-SoC/20240831-152135
base: f0e992956eb617c8f16119944bfe101dea074147
patch link: https://lore.kernel.org/r/20240831-clk-en7581-syscon-v1-4-5c2683541068%40kernel.org
patch subject: [PATCH 4/7] clk: en7523: introduce chip_scu regmap
config: nios2-randconfig-r072-20240902 (https://download.01.org/0day-ci/archive/20240902/202409021114.11d1W3PJ-lkp@intel.com/config)
compiler: nios2-linux-gcc (GCC) 14.1.0
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <dan.carpenter@linaro.org>
| Closes: https://lore.kernel.org/r/202409021114.11d1W3PJ-lkp@intel.com/
New smatch warnings:
drivers/clk/clk-en7523.c:471 en7581_register_clocks() error: uninitialized symbol 'hw'.
drivers/clk/clk-en7523.c:471 en7581_register_clocks() warn: passing zero to 'PTR_ERR'
Old smatch warnings:
drivers/clk/clk-en7523.c:478 en7581_register_clocks() error: uninitialized symbol 'hw'.
drivers/clk/clk-en7523.c:478 en7581_register_clocks() warn: passing zero to 'PTR_ERR'
vim +/hw +471 drivers/clk/clk-en7523.c
f114fc7e44857f Lorenzo Bianconi 2024-08-31 459 static void en7581_register_clocks(struct device *dev, struct clk_hw_onecell_data *clk_data,
f114fc7e44857f Lorenzo Bianconi 2024-08-31 460 struct regmap *map, void __iomem *base)
f114fc7e44857f Lorenzo Bianconi 2024-08-31 461 {
f114fc7e44857f Lorenzo Bianconi 2024-08-31 462 struct clk_hw *hw;
f114fc7e44857f Lorenzo Bianconi 2024-08-31 463 u32 rate;
f114fc7e44857f Lorenzo Bianconi 2024-08-31 464 int i;
f114fc7e44857f Lorenzo Bianconi 2024-08-31 465
f114fc7e44857f Lorenzo Bianconi 2024-08-31 466 for (i = 0; i < ARRAY_SIZE(en7523_base_clks); i++) {
f114fc7e44857f Lorenzo Bianconi 2024-08-31 467 const struct en_clk_desc *desc = &en7523_base_clks[i];
f114fc7e44857f Lorenzo Bianconi 2024-08-31 468 u32 val, reg = desc->div_reg ? desc->div_reg : desc->base_reg;
f114fc7e44857f Lorenzo Bianconi 2024-08-31 469
f114fc7e44857f Lorenzo Bianconi 2024-08-31 470 if (regmap_read(map, desc->base_reg, &val)) {
f114fc7e44857f Lorenzo Bianconi 2024-08-31 @471 pr_err("Failed reading fixed clk rate %s: %ld\n",
f114fc7e44857f Lorenzo Bianconi 2024-08-31 472 desc->name, PTR_ERR(hw));
^^
Uninitialized
f114fc7e44857f Lorenzo Bianconi 2024-08-31 473 continue;
f114fc7e44857f Lorenzo Bianconi 2024-08-31 474 }
f114fc7e44857f Lorenzo Bianconi 2024-08-31 475 rate = en7523_get_base_rate(desc, val);
f114fc7e44857f Lorenzo Bianconi 2024-08-31 476
f114fc7e44857f Lorenzo Bianconi 2024-08-31 477 if (regmap_read(map, reg, &val)) {
f114fc7e44857f Lorenzo Bianconi 2024-08-31 478 pr_err("Failed reading fixed clk div %s: %ld\n",
f114fc7e44857f Lorenzo Bianconi 2024-08-31 479 desc->name, PTR_ERR(hw));
^^
Uniniitialized
f114fc7e44857f Lorenzo Bianconi 2024-08-31 480 continue;
f114fc7e44857f Lorenzo Bianconi 2024-08-31 481 }
f114fc7e44857f Lorenzo Bianconi 2024-08-31 482 rate /= en7523_get_div(desc, val);
f114fc7e44857f Lorenzo Bianconi 2024-08-31 483
f114fc7e44857f Lorenzo Bianconi 2024-08-31 484 hw = clk_hw_register_fixed_rate(dev, desc->name, NULL, 0, rate);
f114fc7e44857f Lorenzo Bianconi 2024-08-31 485 if (IS_ERR(hw)) {
f114fc7e44857f Lorenzo Bianconi 2024-08-31 486 pr_err("Failed to register clk %s: %ld\n",
f114fc7e44857f Lorenzo Bianconi 2024-08-31 487 desc->name, PTR_ERR(hw));
f114fc7e44857f Lorenzo Bianconi 2024-08-31 488 continue;
f114fc7e44857f Lorenzo Bianconi 2024-08-31 489 }
f114fc7e44857f Lorenzo Bianconi 2024-08-31 490
f114fc7e44857f Lorenzo Bianconi 2024-08-31 491 clk_data->hws[desc->id] = hw;
f114fc7e44857f Lorenzo Bianconi 2024-08-31 492 }
f114fc7e44857f Lorenzo Bianconi 2024-08-31 493
f114fc7e44857f Lorenzo Bianconi 2024-08-31 494 hw = en7523_register_pcie_clk(dev, base);
f114fc7e44857f Lorenzo Bianconi 2024-08-31 495 clk_data->hws[EN7523_CLK_PCIE] = hw;
f114fc7e44857f Lorenzo Bianconi 2024-08-31 496
f114fc7e44857f Lorenzo Bianconi 2024-08-31 497 clk_data->num = EN7523_NUM_CLOCKS;
f114fc7e44857f Lorenzo Bianconi 2024-08-31 498 }
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 1/7] dt-bindings: clock: airoha: update reg mapping for EN7581 SoC.
2024-08-31 7:18 ` [PATCH 1/7] dt-bindings: clock: airoha: update reg mapping for EN7581 SoC Lorenzo Bianconi
@ 2024-09-02 8:19 ` Conor Dooley
2024-09-02 8:39 ` Lorenzo Bianconi
2024-09-03 15:04 ` Rob Herring
1 sibling, 1 reply; 14+ messages in thread
From: Conor Dooley @ 2024-09-02 8:19 UTC (permalink / raw)
To: Lorenzo Bianconi
Cc: Michael Turquette, Stephen Boyd, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Felix Fietkau, Philipp Zabel, linux-clk, devicetree,
upstream, angelogioacchino.delregno, linux-arm-kernel,
lorenzo.bianconi83, ansuelsmth
[-- Attachment #1: Type: text/plain, Size: 2116 bytes --]
On Sat, Aug 31, 2024 at 09:18:43AM +0200, Lorenzo Bianconi wrote:
> clk-en7523 driver for EN7581 SoC is mapping all the scu memory region
> while it is configuring the chip-scu one via a syscon. Update the reg
> mapping definition for this device. This patch does not introduce any
> backward incompatibility since the dts for EN7581 SoC is not public yet.
What does "not public yet" mean? The bindings are public, so someone
could have built a dtb without whatever non-public dts you currently
have. Do you mean, has not yet made it into a released kernel?
Cheers,
Conor.
>
> Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
> ---
> .../devicetree/bindings/clock/airoha,en7523-scu.yaml | 12 +++---------
> 1 file changed, 3 insertions(+), 9 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/clock/airoha,en7523-scu.yaml b/Documentation/devicetree/bindings/clock/airoha,en7523-scu.yaml
> index 84353fd09428..ca426c328535 100644
> --- a/Documentation/devicetree/bindings/clock/airoha,en7523-scu.yaml
> +++ b/Documentation/devicetree/bindings/clock/airoha,en7523-scu.yaml
> @@ -34,8 +34,8 @@ properties:
> - airoha,en7581-scu
>
> reg:
> - minItems: 2
> - maxItems: 4
> + minItems: 1
> + maxItems: 2
>
> "#clock-cells":
> description:
> @@ -75,9 +75,6 @@ allOf:
> reg:
> items:
> - description: scu base address
> - - description: misc scu base address
> - - description: reset base address
> - - description: pb scu base address
>
> additionalProperties: false
>
> @@ -98,10 +95,7 @@ examples:
>
> scuclk: clock-controller@1fa20000 {
> compatible = "airoha,en7581-scu";
> - reg = <0x0 0x1fa20000 0x0 0x400>,
> - <0x0 0x1fb00000 0x0 0x90>,
> - <0x0 0x1fb00830 0x0 0x8>,
> - <0x0 0x1fbe3400 0x0 0xfc>;
> + reg = <0x0 0x1fb00000 0x0 0x970>;
> #clock-cells = <1>;
> #reset-cells = <1>;
> };
>
> --
> 2.46.0
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 2/7] clk: en7523: set REG_PCIE*_{MEM,MEM_MASK} via syscon
2024-08-31 7:18 ` [PATCH 2/7] clk: en7523: set REG_PCIE*_{MEM,MEM_MASK} via syscon Lorenzo Bianconi
@ 2024-09-02 8:21 ` Conor Dooley
2024-09-02 8:40 ` Lorenzo Bianconi
0 siblings, 1 reply; 14+ messages in thread
From: Conor Dooley @ 2024-09-02 8:21 UTC (permalink / raw)
To: Lorenzo Bianconi
Cc: Michael Turquette, Stephen Boyd, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Felix Fietkau, Philipp Zabel, linux-clk, devicetree,
upstream, angelogioacchino.delregno, linux-arm-kernel,
lorenzo.bianconi83, ansuelsmth
[-- Attachment #1: Type: text/plain, Size: 293 bytes --]
On Sat, Aug 31, 2024 at 09:18:44AM +0200, Lorenzo Bianconi wrote:
> + map = syscon_regmap_lookup_by_compatible("airoha,en7581-pbus-csr");
Is this compatible documented? (On a laptop in an airport with no recent
kernel tree, so I had to resort to searching on github which turned up
nothing).
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 1/7] dt-bindings: clock: airoha: update reg mapping for EN7581 SoC.
2024-09-02 8:19 ` Conor Dooley
@ 2024-09-02 8:39 ` Lorenzo Bianconi
0 siblings, 0 replies; 14+ messages in thread
From: Lorenzo Bianconi @ 2024-09-02 8:39 UTC (permalink / raw)
To: Conor Dooley
Cc: Michael Turquette, Stephen Boyd, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Felix Fietkau, Philipp Zabel, linux-clk, devicetree,
upstream, angelogioacchino.delregno, linux-arm-kernel,
lorenzo.bianconi83, ansuelsmth
[-- Attachment #1: Type: text/plain, Size: 2871 bytes --]
> On Sat, Aug 31, 2024 at 09:18:43AM +0200, Lorenzo Bianconi wrote:
> > clk-en7523 driver for EN7581 SoC is mapping all the scu memory region
> > while it is configuring the chip-scu one via a syscon. Update the reg
> > mapping definition for this device. This patch does not introduce any
> > backward incompatibility since the dts for EN7581 SoC is not public yet.
>
> What does "not public yet" mean? The bindings are public, so someone
> could have built a dtb without whatever non-public dts you currently
> have. Do you mean, has not yet made it into a released kernel?
I was not so clear on this point, sorry for that. What I mean is these devices
(clock, pinctrl, ethernet, pwm, ...) are not supported in the dts upstream (in
the kernel or other corss-compiling systems link OpenWrt). For EN7581 SoC we
have just basic support upstream at the moment [0].
Since we have this weird hw architecture, we agreed with Angelo to post the full
dts just when all drivers are merged in order to avoid possible backward
compatibility issues adding more devices support into the kernel.
Regards,
Lorenzo
[0] https://github.com/torvalds/linux/blob/master/arch/arm64/boot/dts/airoha/en7581.dtsi
>
> Cheers,
> Conor.
>
> >
> > Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
> > ---
> > .../devicetree/bindings/clock/airoha,en7523-scu.yaml | 12 +++---------
> > 1 file changed, 3 insertions(+), 9 deletions(-)
> >
> > diff --git a/Documentation/devicetree/bindings/clock/airoha,en7523-scu.yaml b/Documentation/devicetree/bindings/clock/airoha,en7523-scu.yaml
> > index 84353fd09428..ca426c328535 100644
> > --- a/Documentation/devicetree/bindings/clock/airoha,en7523-scu.yaml
> > +++ b/Documentation/devicetree/bindings/clock/airoha,en7523-scu.yaml
> > @@ -34,8 +34,8 @@ properties:
> > - airoha,en7581-scu
> >
> > reg:
> > - minItems: 2
> > - maxItems: 4
> > + minItems: 1
> > + maxItems: 2
> >
> > "#clock-cells":
> > description:
> > @@ -75,9 +75,6 @@ allOf:
> > reg:
> > items:
> > - description: scu base address
> > - - description: misc scu base address
> > - - description: reset base address
> > - - description: pb scu base address
> >
> > additionalProperties: false
> >
> > @@ -98,10 +95,7 @@ examples:
> >
> > scuclk: clock-controller@1fa20000 {
> > compatible = "airoha,en7581-scu";
> > - reg = <0x0 0x1fa20000 0x0 0x400>,
> > - <0x0 0x1fb00000 0x0 0x90>,
> > - <0x0 0x1fb00830 0x0 0x8>,
> > - <0x0 0x1fbe3400 0x0 0xfc>;
> > + reg = <0x0 0x1fb00000 0x0 0x970>;
> > #clock-cells = <1>;
> > #reset-cells = <1>;
> > };
> >
> > --
> > 2.46.0
> >
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 2/7] clk: en7523: set REG_PCIE*_{MEM,MEM_MASK} via syscon
2024-09-02 8:21 ` Conor Dooley
@ 2024-09-02 8:40 ` Lorenzo Bianconi
0 siblings, 0 replies; 14+ messages in thread
From: Lorenzo Bianconi @ 2024-09-02 8:40 UTC (permalink / raw)
To: Conor Dooley
Cc: Michael Turquette, Stephen Boyd, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Felix Fietkau, Philipp Zabel, linux-clk, devicetree,
upstream, angelogioacchino.delregno, linux-arm-kernel,
lorenzo.bianconi83, ansuelsmth
[-- Attachment #1: Type: text/plain, Size: 376 bytes --]
> On Sat, Aug 31, 2024 at 09:18:44AM +0200, Lorenzo Bianconi wrote:
> > + map = syscon_regmap_lookup_by_compatible("airoha,en7581-pbus-csr");
>
> Is this compatible documented? (On a laptop in an airport with no recent
> kernel tree, so I had to resort to searching on github which turned up
> nothing).
ack, I missed that. I will fix it in v2.
Regards,
Lorenzo
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 228 bytes --]
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH 1/7] dt-bindings: clock: airoha: update reg mapping for EN7581 SoC.
2024-08-31 7:18 ` [PATCH 1/7] dt-bindings: clock: airoha: update reg mapping for EN7581 SoC Lorenzo Bianconi
2024-09-02 8:19 ` Conor Dooley
@ 2024-09-03 15:04 ` Rob Herring
1 sibling, 0 replies; 14+ messages in thread
From: Rob Herring @ 2024-09-03 15:04 UTC (permalink / raw)
To: Lorenzo Bianconi
Cc: Michael Turquette, Stephen Boyd, Krzysztof Kozlowski,
Conor Dooley, Felix Fietkau, Philipp Zabel, linux-clk, devicetree,
upstream, angelogioacchino.delregno, linux-arm-kernel,
lorenzo.bianconi83, ansuelsmth
On Sat, Aug 31, 2024 at 09:18:43AM +0200, Lorenzo Bianconi wrote:
> clk-en7523 driver for EN7581 SoC is mapping all the scu memory region
> while it is configuring the chip-scu one via a syscon. Update the reg
> mapping definition for this device. This patch does not introduce any
> backward incompatibility since the dts for EN7581 SoC is not public yet.
>
> Signed-off-by: Lorenzo Bianconi <lorenzo@kernel.org>
> ---
> .../devicetree/bindings/clock/airoha,en7523-scu.yaml | 12 +++---------
> 1 file changed, 3 insertions(+), 9 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/clock/airoha,en7523-scu.yaml b/Documentation/devicetree/bindings/clock/airoha,en7523-scu.yaml
> index 84353fd09428..ca426c328535 100644
> --- a/Documentation/devicetree/bindings/clock/airoha,en7523-scu.yaml
> +++ b/Documentation/devicetree/bindings/clock/airoha,en7523-scu.yaml
> @@ -34,8 +34,8 @@ properties:
> - airoha,en7581-scu
>
> reg:
> - minItems: 2
> - maxItems: 4
> + minItems: 1
> + maxItems: 2
This should really have the 'items' list here instead of in the if/then
schemas.
>
> "#clock-cells":
> description:
> @@ -75,9 +75,6 @@ allOf:
> reg:
> items:
> - description: scu base address
> - - description: misc scu base address
> - - description: reset base address
> - - description: pb scu base address
And then this would be just 'maxItems: 1' and the other if 'minItems:
2'.
Rob
^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2024-09-03 15:04 UTC | newest]
Thread overview: 14+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-08-31 7:18 [PATCH 0/7] clk: en7523: Update register mapping for EN7581 Lorenzo Bianconi
2024-08-31 7:18 ` [PATCH 1/7] dt-bindings: clock: airoha: update reg mapping for EN7581 SoC Lorenzo Bianconi
2024-09-02 8:19 ` Conor Dooley
2024-09-02 8:39 ` Lorenzo Bianconi
2024-09-03 15:04 ` Rob Herring
2024-08-31 7:18 ` [PATCH 2/7] clk: en7523: set REG_PCIE*_{MEM,MEM_MASK} via syscon Lorenzo Bianconi
2024-09-02 8:21 ` Conor Dooley
2024-09-02 8:40 ` Lorenzo Bianconi
2024-08-31 7:18 ` [PATCH 3/7] clk: en7523: move clock_register in hw_init callback Lorenzo Bianconi
2024-08-31 7:18 ` [PATCH 4/7] clk: en7523: introduce chip_scu regmap Lorenzo Bianconi
2024-09-02 7:37 ` Dan Carpenter
2024-08-31 7:18 ` [PATCH 5/7] clk: en7523: fix estimation of fixed rate for EN7581 Lorenzo Bianconi
2024-08-31 7:18 ` [PATCH 6/7] clk: en7523: move en7581_reset_register() in en7581_clk_hw_init() Lorenzo Bianconi
2024-08-31 7:18 ` [PATCH 7/7] clk: en7523: map io region in a single block Lorenzo Bianconi
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).