All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] clk: at91: support configuring PCKx parent via DT
@ 2020-03-15 18:38 Michał Mirosław
  2020-03-15 18:38 ` [PATCH 2/3] clk: at91: allow setting " Michał Mirosław
                   ` (2 more replies)
  0 siblings, 3 replies; 8+ messages in thread
From: Michał Mirosław @ 2020-03-15 18:38 UTC (permalink / raw)
  To: Alexandre Belloni, Ludovic Desroches, Michael Turquette,
	Nicolas Ferre, Stephen Boyd
  Cc: linux-clk, linux-kernel

This series extends AT91 with clock references to PCKx and PLLA/AUDIOPLL.

First patch simplifies clock table allocation. Next two update the table
with missing clock pointers and IDs.

Michał Mirosław (3):
  clk: at91: optimize pmc data allocation
  clk: at91: allow setting PCKx parent via DT
  clk: at91: sama5d2: allow setting all PMC clock parents via DT

 drivers/clk/at91/at91sam9260.c   |  7 +++--
 drivers/clk/at91/at91sam9rl.c    |  6 +++--
 drivers/clk/at91/at91sam9x5.c    |  6 +++--
 drivers/clk/at91/pmc.c           | 44 ++++++++++++--------------------
 drivers/clk/at91/pmc.h           |  8 ++++--
 drivers/clk/at91/sama5d2.c       | 12 ++++++---
 drivers/clk/at91/sama5d4.c       |  6 +++--
 include/dt-bindings/clock/at91.h |  3 +++
 8 files changed, 52 insertions(+), 40 deletions(-)

-- 
2.20.1


^ permalink raw reply	[flat|nested] 8+ messages in thread

* [PATCH 1/3] clk: at91: optimize pmc data allocation
  2020-03-15 18:38 [PATCH 0/3] clk: at91: support configuring PCKx parent via DT Michał Mirosław
  2020-03-15 18:38 ` [PATCH 2/3] clk: at91: allow setting " Michał Mirosław
@ 2020-03-15 18:38 ` Michał Mirosław
  2020-03-16 22:05     ` kbuild test robot
  2020-03-15 18:38 ` [PATCH 3/3] clk: at91: sama5d2: allow setting all PMC clock parents via DT Michał Mirosław
  2 siblings, 1 reply; 8+ messages in thread
From: Michał Mirosław @ 2020-03-15 18:38 UTC (permalink / raw)
  To: Michael Turquette, Stephen Boyd, Nicolas Ferre,
	Alexandre Belloni, Ludovic Desroches
  Cc: linux-clk, linux-kernel

Alloc whole data structure in one block. This makes the code shorter,
more efficient and easier to extend in following patch.

Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
---
 drivers/clk/at91/at91sam9260.c |  2 +-
 drivers/clk/at91/at91sam9rl.c  |  2 +-
 drivers/clk/at91/at91sam9x5.c  |  2 +-
 drivers/clk/at91/pmc.c         | 34 ++++++++--------------------------
 drivers/clk/at91/pmc.h         |  3 ++-
 drivers/clk/at91/sama5d2.c     |  2 +-
 drivers/clk/at91/sama5d4.c     |  2 +-
 7 files changed, 15 insertions(+), 32 deletions(-)

diff --git a/drivers/clk/at91/at91sam9260.c b/drivers/clk/at91/at91sam9260.c
index a9d4234758d7..946f03a09858 100644
--- a/drivers/clk/at91/at91sam9260.c
+++ b/drivers/clk/at91/at91sam9260.c
@@ -462,7 +462,7 @@ static void __init at91sam926x_pmc_setup(struct device_node *np,
 	return;
 
 err_free:
-	pmc_data_free(at91sam9260_pmc);
+	kfree(at91sam9260_pmc);
 }
 
 static void __init at91sam9260_pmc_setup(struct device_node *np)
diff --git a/drivers/clk/at91/at91sam9rl.c b/drivers/clk/at91/at91sam9rl.c
index 77fe83a73bf4..cc739d214ae3 100644
--- a/drivers/clk/at91/at91sam9rl.c
+++ b/drivers/clk/at91/at91sam9rl.c
@@ -166,6 +166,6 @@ static void __init at91sam9rl_pmc_setup(struct device_node *np)
 	return;
 
 err_free:
-	pmc_data_free(at91sam9rl_pmc);
+	kfree(at91sam9rl_pmc);
 }
 CLK_OF_DECLARE_DRIVER(at91sam9rl_pmc, "atmel,at91sam9rl-pmc", at91sam9rl_pmc_setup);
diff --git a/drivers/clk/at91/at91sam9x5.c b/drivers/clk/at91/at91sam9x5.c
index 086cf0b4955c..aac99d699568 100644
--- a/drivers/clk/at91/at91sam9x5.c
+++ b/drivers/clk/at91/at91sam9x5.c
@@ -278,7 +278,7 @@ static void __init at91sam9x5_pmc_setup(struct device_node *np,
 	return;
 
 err_free:
-	pmc_data_free(at91sam9x5_pmc);
+	kfree(at91sam9x5_pmc);
 }
 
 static void __init at91sam9g15_pmc_setup(struct device_node *np)
diff --git a/drivers/clk/at91/pmc.c b/drivers/clk/at91/pmc.c
index b71515acdec1..fe788512fcc0 100644
--- a/drivers/clk/at91/pmc.c
+++ b/drivers/clk/at91/pmc.c
@@ -76,48 +76,30 @@ struct clk_hw *of_clk_hw_pmc_get(struct of_phandle_args *clkspec, void *data)
 	return ERR_PTR(-EINVAL);
 }
 
-void pmc_data_free(struct pmc_data *pmc_data)
-{
-	kfree(pmc_data->chws);
-	kfree(pmc_data->shws);
-	kfree(pmc_data->phws);
-	kfree(pmc_data->ghws);
-}
-
 struct pmc_data *pmc_data_allocate(unsigned int ncore, unsigned int nsystem,
 				   unsigned int nperiph, unsigned int ngck)
 {
-	struct pmc_data *pmc_data = kzalloc(sizeof(*pmc_data), GFP_KERNEL);
+	unsigned int num_clks = ncore + nsystem + nperiph + ngck;
+	struct pmc_data *pmc_data;
 
+	pmc_data = kzalloc(sizeof(*pmc_data) + num_clks * sizeof(struct clk_hw *),
+			   GFP_KERNEL);
 	if (!pmc_data)
 		return NULL;
 
 	pmc_data->ncore = ncore;
-	pmc_data->chws = kcalloc(ncore, sizeof(struct clk_hw *), GFP_KERNEL);
-	if (!pmc_data->chws)
-		goto err;
+	pmc_data->chws = pmc_data->hwtable;
 
 	pmc_data->nsystem = nsystem;
-	pmc_data->shws = kcalloc(nsystem, sizeof(struct clk_hw *), GFP_KERNEL);
-	if (!pmc_data->shws)
-		goto err;
+	pmc_data->shws = pmc_data->chws + ncore;
 
 	pmc_data->nperiph = nperiph;
-	pmc_data->phws = kcalloc(nperiph, sizeof(struct clk_hw *), GFP_KERNEL);
-	if (!pmc_data->phws)
-		goto err;
+	pmc_data->phws = pmc_data->shws + nsystem;
 
 	pmc_data->ngck = ngck;
-	pmc_data->ghws = kcalloc(ngck, sizeof(struct clk_hw *), GFP_KERNEL);
-	if (!pmc_data->ghws)
-		goto err;
+	pmc_data->ghws = pmc_data->phws + nperiph;
 
 	return pmc_data;
-
-err:
-	pmc_data_free(pmc_data);
-
-	return NULL;
 }
 
 #ifdef CONFIG_PM
diff --git a/drivers/clk/at91/pmc.h b/drivers/clk/at91/pmc.h
index 9b8db9cdcda5..49cc3d67b98e 100644
--- a/drivers/clk/at91/pmc.h
+++ b/drivers/clk/at91/pmc.h
@@ -24,6 +24,8 @@ struct pmc_data {
 	struct clk_hw **phws;
 	unsigned int ngck;
 	struct clk_hw **ghws;
+
+	struct clk_hw *hwtable[0];
 };
 
 struct clk_range {
@@ -95,7 +97,6 @@ struct clk_pcr_layout {
 #define nck(a) (a[ARRAY_SIZE(a) - 1].id + 1)
 struct pmc_data *pmc_data_allocate(unsigned int ncore, unsigned int nsystem,
 				   unsigned int nperiph, unsigned int ngck);
-void pmc_data_free(struct pmc_data *pmc_data);
 
 int of_at91_get_clk_range(struct device_node *np, const char *propname,
 			  struct clk_range *range);
diff --git a/drivers/clk/at91/sama5d2.c b/drivers/clk/at91/sama5d2.c
index ff7e3f727082..b2560670e5af 100644
--- a/drivers/clk/at91/sama5d2.c
+++ b/drivers/clk/at91/sama5d2.c
@@ -350,6 +350,6 @@ static void __init sama5d2_pmc_setup(struct device_node *np)
 	return;
 
 err_free:
-	pmc_data_free(sama5d2_pmc);
+	kfree(sama5d2_pmc);
 }
 CLK_OF_DECLARE_DRIVER(sama5d2_pmc, "atmel,sama5d2-pmc", sama5d2_pmc_setup);
diff --git a/drivers/clk/at91/sama5d4.c b/drivers/clk/at91/sama5d4.c
index a6dee4a3b6e4..4ca9a4619500 100644
--- a/drivers/clk/at91/sama5d4.c
+++ b/drivers/clk/at91/sama5d4.c
@@ -267,6 +267,6 @@ static void __init sama5d4_pmc_setup(struct device_node *np)
 	return;
 
 err_free:
-	pmc_data_free(sama5d4_pmc);
+	kfree(sama5d4_pmc);
 }
 CLK_OF_DECLARE_DRIVER(sama5d4_pmc, "atmel,sama5d4-pmc", sama5d4_pmc_setup);
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 2/3] clk: at91: allow setting PCKx parent via DT
  2020-03-15 18:38 [PATCH 0/3] clk: at91: support configuring PCKx parent via DT Michał Mirosław
@ 2020-03-15 18:38 ` Michał Mirosław
  2020-03-16 23:04     ` kbuild test robot
  2020-03-15 18:38 ` [PATCH 1/3] clk: at91: optimize pmc data allocation Michał Mirosław
  2020-03-15 18:38 ` [PATCH 3/3] clk: at91: sama5d2: allow setting all PMC clock parents via DT Michał Mirosław
  2 siblings, 1 reply; 8+ messages in thread
From: Michał Mirosław @ 2020-03-15 18:38 UTC (permalink / raw)
  To: Alexandre Belloni, Ludovic Desroches, Michael Turquette,
	Nicolas Ferre, Stephen Boyd
  Cc: linux-clk, linux-kernel

This exposes PROGx clocks for use in assigned-clocks DeviceTree property
for selecting PCKx parent clock.

Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
---
 drivers/clk/at91/at91sam9260.c   |  5 ++++-
 drivers/clk/at91/at91sam9rl.c    |  4 +++-
 drivers/clk/at91/at91sam9x5.c    |  4 +++-
 drivers/clk/at91/pmc.c           | 12 ++++++++++--
 drivers/clk/at91/pmc.h           |  5 ++++-
 drivers/clk/at91/sama5d2.c       |  4 +++-
 drivers/clk/at91/sama5d4.c       |  4 +++-
 include/dt-bindings/clock/at91.h |  1 +
 8 files changed, 31 insertions(+), 8 deletions(-)

diff --git a/drivers/clk/at91/at91sam9260.c b/drivers/clk/at91/at91sam9260.c
index 946f03a09858..7e5ff252fffc 100644
--- a/drivers/clk/at91/at91sam9260.c
+++ b/drivers/clk/at91/at91sam9260.c
@@ -354,7 +354,8 @@ static void __init at91sam926x_pmc_setup(struct device_node *np,
 
 	at91sam9260_pmc = pmc_data_allocate(PMC_MAIN + 1,
 					    ndck(data->sck, data->num_sck),
-					    ndck(data->pck, data->num_pck), 0);
+					    ndck(data->pck, data->num_pck),
+					    0, data->num_progck);
 	if (!at91sam9260_pmc)
 		return;
 
@@ -434,6 +435,8 @@ static void __init at91sam926x_pmc_setup(struct device_node *np,
 						    &at91rm9200_programmable_layout);
 		if (IS_ERR(hw))
 			goto err_free;
+
+		at91sam9260_pmc->pchws[i] = hw;
 	}
 
 	for (i = 0; i < data->num_sck; i++) {
diff --git a/drivers/clk/at91/at91sam9rl.c b/drivers/clk/at91/at91sam9rl.c
index cc739d214ae3..bcf07f6a0e0e 100644
--- a/drivers/clk/at91/at91sam9rl.c
+++ b/drivers/clk/at91/at91sam9rl.c
@@ -89,7 +89,7 @@ static void __init at91sam9rl_pmc_setup(struct device_node *np)
 
 	at91sam9rl_pmc = pmc_data_allocate(PMC_MAIN + 1,
 					   nck(at91sam9rl_systemck),
-					   nck(at91sam9rl_periphck), 0);
+					   nck(at91sam9rl_periphck), 0, 2);
 	if (!at91sam9rl_pmc)
 		return;
 
@@ -138,6 +138,8 @@ static void __init at91sam9rl_pmc_setup(struct device_node *np)
 						    &at91rm9200_programmable_layout);
 		if (IS_ERR(hw))
 			goto err_free;
+
+		at91sam9rl_pmc->pchws[i] = hw;
 	}
 
 	for (i = 0; i < ARRAY_SIZE(at91sam9rl_systemck); i++) {
diff --git a/drivers/clk/at91/at91sam9x5.c b/drivers/clk/at91/at91sam9x5.c
index aac99d699568..f13756b407e2 100644
--- a/drivers/clk/at91/at91sam9x5.c
+++ b/drivers/clk/at91/at91sam9x5.c
@@ -151,7 +151,7 @@ static void __init at91sam9x5_pmc_setup(struct device_node *np,
 		return;
 
 	at91sam9x5_pmc = pmc_data_allocate(PMC_MAIN + 1,
-					   nck(at91sam9x5_systemck), 31, 0);
+					   nck(at91sam9x5_systemck), 31, 0, 2);
 	if (!at91sam9x5_pmc)
 		return;
 
@@ -227,6 +227,8 @@ static void __init at91sam9x5_pmc_setup(struct device_node *np,
 						    &at91sam9x5_programmable_layout);
 		if (IS_ERR(hw))
 			goto err_free;
+
+		at91sam9x5_pmc->pchws[i] = hw;
 	}
 
 	for (i = 0; i < ARRAY_SIZE(at91sam9x5_systemck); i++) {
diff --git a/drivers/clk/at91/pmc.c b/drivers/clk/at91/pmc.c
index fe788512fcc0..874385c981f7 100644
--- a/drivers/clk/at91/pmc.c
+++ b/drivers/clk/at91/pmc.c
@@ -67,6 +67,10 @@ struct clk_hw *of_clk_hw_pmc_get(struct of_phandle_args *clkspec, void *data)
 		if (idx < pmc_data->ngck)
 			return pmc_data->ghws[idx];
 		break;
+	case PMC_TYPE_PROGRAMMABLE:
+		if (idx < pmc_data->npck)
+			return pmc_data->pchws[idx];
+		break;
 	default:
 		break;
 	}
@@ -77,9 +81,10 @@ struct clk_hw *of_clk_hw_pmc_get(struct of_phandle_args *clkspec, void *data)
 }
 
 struct pmc_data *pmc_data_allocate(unsigned int ncore, unsigned int nsystem,
-				   unsigned int nperiph, unsigned int ngck)
+				   unsigned int nperiph, unsigned int ngck,
+				   unsigned int npck)
 {
-	unsigned int num_clks = ncore + nsystem + nperiph + ngck;
+	unsigned int num_clks = ncore + nsystem + nperiph + ngck + npck;
 	struct pmc_data *pmc_data;
 
 	pmc_data = kzalloc(sizeof(*pmc_data) + num_clks * sizeof(struct clk_hw *),
@@ -99,6 +104,9 @@ struct pmc_data *pmc_data_allocate(unsigned int ncore, unsigned int nsystem,
 	pmc_data->ngck = ngck;
 	pmc_data->ghws = pmc_data->phws + nperiph;
 
+	pmc_data->npck = npck;
+	pmc_data->pchws = pmc_data->ghws + ngck;
+
 	return pmc_data;
 }
 
diff --git a/drivers/clk/at91/pmc.h b/drivers/clk/at91/pmc.h
index 49cc3d67b98e..bf44ee5d1b79 100644
--- a/drivers/clk/at91/pmc.h
+++ b/drivers/clk/at91/pmc.h
@@ -24,6 +24,8 @@ struct pmc_data {
 	struct clk_hw **phws;
 	unsigned int ngck;
 	struct clk_hw **ghws;
+	unsigned int npck;
+	struct clk_hw **pchws;
 
 	struct clk_hw *hwtable[0];
 };
@@ -96,7 +98,8 @@ struct clk_pcr_layout {
 #define ndck(a, s) (a[s - 1].id + 1)
 #define nck(a) (a[ARRAY_SIZE(a) - 1].id + 1)
 struct pmc_data *pmc_data_allocate(unsigned int ncore, unsigned int nsystem,
-				   unsigned int nperiph, unsigned int ngck);
+				   unsigned int nperiph, unsigned int ngck,
+				   unsigned int npck);
 
 int of_at91_get_clk_range(struct device_node *np, const char *propname,
 			  struct clk_range *range);
diff --git a/drivers/clk/at91/sama5d2.c b/drivers/clk/at91/sama5d2.c
index b2560670e5af..ae5e83cadb3d 100644
--- a/drivers/clk/at91/sama5d2.c
+++ b/drivers/clk/at91/sama5d2.c
@@ -169,7 +169,7 @@ static void __init sama5d2_pmc_setup(struct device_node *np)
 	sama5d2_pmc = pmc_data_allocate(PMC_I2S1_MUX + 1,
 					nck(sama5d2_systemck),
 					nck(sama5d2_periph32ck),
-					nck(sama5d2_gck));
+					nck(sama5d2_gck), 3);
 	if (!sama5d2_pmc)
 		return;
 
@@ -267,6 +267,8 @@ static void __init sama5d2_pmc_setup(struct device_node *np)
 						    &sama5d2_programmable_layout);
 		if (IS_ERR(hw))
 			goto err_free;
+
+		sama5d2_pmc->pchws[i] = hw;
 	}
 
 	for (i = 0; i < ARRAY_SIZE(sama5d2_systemck); i++) {
diff --git a/drivers/clk/at91/sama5d4.c b/drivers/clk/at91/sama5d4.c
index 4ca9a4619500..80692902b4e4 100644
--- a/drivers/clk/at91/sama5d4.c
+++ b/drivers/clk/at91/sama5d4.c
@@ -142,7 +142,7 @@ static void __init sama5d4_pmc_setup(struct device_node *np)
 
 	sama5d4_pmc = pmc_data_allocate(PMC_MCK2 + 1,
 					nck(sama5d4_systemck),
-					nck(sama5d4_periph32ck), 0);
+					nck(sama5d4_periph32ck), 0, 3);
 	if (!sama5d4_pmc)
 		return;
 
@@ -224,6 +224,8 @@ static void __init sama5d4_pmc_setup(struct device_node *np)
 						    &at91sam9x5_programmable_layout);
 		if (IS_ERR(hw))
 			goto err_free;
+
+		sama5d4_pmc->pchws[i] = hw;
 	}
 
 	for (i = 0; i < ARRAY_SIZE(sama5d4_systemck); i++) {
diff --git a/include/dt-bindings/clock/at91.h b/include/dt-bindings/clock/at91.h
index 38b5554153c8..c3f4aa6a2d29 100644
--- a/include/dt-bindings/clock/at91.h
+++ b/include/dt-bindings/clock/at91.h
@@ -12,6 +12,7 @@
 #define PMC_TYPE_SYSTEM		1
 #define PMC_TYPE_PERIPHERAL	2
 #define PMC_TYPE_GCK		3
+#define PMC_TYPE_PROGRAMMABLE	4
 
 #define PMC_SLOW		0
 #define PMC_MCK			1
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* [PATCH 3/3] clk: at91: sama5d2: allow setting all PMC clock parents via DT
  2020-03-15 18:38 [PATCH 0/3] clk: at91: support configuring PCKx parent via DT Michał Mirosław
  2020-03-15 18:38 ` [PATCH 2/3] clk: at91: allow setting " Michał Mirosław
  2020-03-15 18:38 ` [PATCH 1/3] clk: at91: optimize pmc data allocation Michał Mirosław
@ 2020-03-15 18:38 ` Michał Mirosław
  2 siblings, 0 replies; 8+ messages in thread
From: Michał Mirosław @ 2020-03-15 18:38 UTC (permalink / raw)
  To: Alexandre Belloni, Ludovic Desroches, Michael Turquette,
	Nicolas Ferre, Stephen Boyd
  Cc: linux-clk, linux-kernel

We need to have clocks accessible via phandle to select them
as peripheral clock parent using assigned-clock-parents in DT.
PLLACK and AUDIOPLLCK were missing for sama5d2. Add them.

Signed-off-by: Michał Mirosław <mirq-linux@rere.qmqm.pl>
---
 drivers/clk/at91/sama5d2.c       | 6 +++++-
 include/dt-bindings/clock/at91.h | 2 ++
 2 files changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/clk/at91/sama5d2.c b/drivers/clk/at91/sama5d2.c
index ae5e83cadb3d..b3fa2291ccd8 100644
--- a/drivers/clk/at91/sama5d2.c
+++ b/drivers/clk/at91/sama5d2.c
@@ -166,7 +166,7 @@ static void __init sama5d2_pmc_setup(struct device_node *np)
 	if (IS_ERR(regmap))
 		return;
 
-	sama5d2_pmc = pmc_data_allocate(PMC_I2S1_MUX + 1,
+	sama5d2_pmc = pmc_data_allocate(PMC_AUDIOPLLCK + 1,
 					nck(sama5d2_systemck),
 					nck(sama5d2_periph32ck),
 					nck(sama5d2_gck), 3);
@@ -202,6 +202,8 @@ static void __init sama5d2_pmc_setup(struct device_node *np)
 	if (IS_ERR(hw))
 		goto err_free;
 
+	sama5d2_pmc->chws[PMC_PLLACK] = hw;
+
 	hw = at91_clk_register_audio_pll_frac(regmap, "audiopll_fracck",
 					      "mainck");
 	if (IS_ERR(hw))
@@ -217,6 +219,8 @@ static void __init sama5d2_pmc_setup(struct device_node *np)
 	if (IS_ERR(hw))
 		goto err_free;
 
+	sama5d2_pmc->chws[PMC_AUDIOPLLCK] = hw;
+
 	regmap_sfr = syscon_regmap_lookup_by_compatible("atmel,sama5d2-sfr");
 	if (IS_ERR(regmap_sfr))
 		regmap_sfr = NULL;
diff --git a/include/dt-bindings/clock/at91.h b/include/dt-bindings/clock/at91.h
index c3f4aa6a2d29..e57362e98129 100644
--- a/include/dt-bindings/clock/at91.h
+++ b/include/dt-bindings/clock/at91.h
@@ -21,6 +21,8 @@
 #define PMC_MCK2		4
 #define PMC_I2S0_MUX		5
 #define PMC_I2S1_MUX		6
+#define PMC_PLLACK		7
+#define PMC_AUDIOPLLCK		8
 
 #ifndef AT91_PMC_MOSCS
 #define AT91_PMC_MOSCS		0		/* MOSCS Flag */
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/3] clk: at91: optimize pmc data allocation
  2020-03-15 18:38 ` [PATCH 1/3] clk: at91: optimize pmc data allocation Michał Mirosław
@ 2020-03-16 22:05     ` kbuild test robot
  0 siblings, 0 replies; 8+ messages in thread
From: kbuild test robot @ 2020-03-16 22:05 UTC (permalink / raw)
  To: Michał Mirosław
  Cc: kbuild-all, Michael Turquette, Stephen Boyd, Nicolas Ferre,
	Alexandre Belloni, Ludovic Desroches, linux-clk, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 11657 bytes --]

Hi "Michał,

I love your patch! Yet something to improve:

[auto build test ERROR on clk/clk-next]
[also build test ERROR on robh/for-next abelloni/rtc-next v5.6-rc6 next-20200312]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url:    https://github.com/0day-ci/linux/commits/Micha-Miros-aw/clk-at91-support-configuring-PCKx-parent-via-DT/20200317-041729
base:   https://git.kernel.org/pub/scm/linux/kernel/git/clk/linux.git clk-next
config: arm-at91_dt_defconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (GCC) 9.2.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        GCC_VERSION=9.2.0 make.cross ARCH=arm 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   drivers/clk/at91/at91sam9g45.c: In function 'at91sam9g45_pmc_setup':
>> drivers/clk/at91/at91sam9g45.c:213:2: error: implicit declaration of function 'pmc_data_free' [-Werror=implicit-function-declaration]
     213 |  pmc_data_free(at91sam9g45_pmc);
         |  ^~~~~~~~~~~~~
   cc1: some warnings being treated as errors
--
   drivers/clk/at91/at91sam9n12.c: In function 'at91sam9n12_pmc_setup':
>> drivers/clk/at91/at91sam9n12.c:231:2: error: implicit declaration of function 'pmc_data_free' [-Werror=implicit-function-declaration]
     231 |  pmc_data_free(at91sam9n12_pmc);
         |  ^~~~~~~~~~~~~
   cc1: some warnings being treated as errors
--
   drivers/clk/at91/sam9x60.c: In function 'sam9x60_pmc_setup':
>> drivers/clk/at91/sam9x60.c:302:2: error: implicit declaration of function 'pmc_data_free' [-Werror=implicit-function-declaration]
     302 |  pmc_data_free(sam9x60_pmc);
         |  ^~~~~~~~~~~~~
   cc1: some warnings being treated as errors

vim +/pmc_data_free +213 drivers/clk/at91/at91sam9g45.c

12dc8d3be9d86c Alexandre Belloni 2020-01-17   92  
12dc8d3be9d86c Alexandre Belloni 2020-01-17   93  static void __init at91sam9g45_pmc_setup(struct device_node *np)
12dc8d3be9d86c Alexandre Belloni 2020-01-17   94  {
12dc8d3be9d86c Alexandre Belloni 2020-01-17   95  	const char *slck_name, *mainxtal_name;
12dc8d3be9d86c Alexandre Belloni 2020-01-17   96  	struct pmc_data *at91sam9g45_pmc;
12dc8d3be9d86c Alexandre Belloni 2020-01-17   97  	const char *parent_names[6];
12dc8d3be9d86c Alexandre Belloni 2020-01-17   98  	struct regmap *regmap;
12dc8d3be9d86c Alexandre Belloni 2020-01-17   99  	struct clk_hw *hw;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  100  	int i;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  101  	bool bypass;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  102  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  103  	i = of_property_match_string(np, "clock-names", "slow_clk");
12dc8d3be9d86c Alexandre Belloni 2020-01-17  104  	if (i < 0)
12dc8d3be9d86c Alexandre Belloni 2020-01-17  105  		return;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  106  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  107  	slck_name = of_clk_get_parent_name(np, i);
12dc8d3be9d86c Alexandre Belloni 2020-01-17  108  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  109  	i = of_property_match_string(np, "clock-names", "main_xtal");
12dc8d3be9d86c Alexandre Belloni 2020-01-17  110  	if (i < 0)
12dc8d3be9d86c Alexandre Belloni 2020-01-17  111  		return;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  112  	mainxtal_name = of_clk_get_parent_name(np, i);
12dc8d3be9d86c Alexandre Belloni 2020-01-17  113  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  114  	regmap = syscon_node_to_regmap(np);
12dc8d3be9d86c Alexandre Belloni 2020-01-17  115  	if (IS_ERR(regmap))
12dc8d3be9d86c Alexandre Belloni 2020-01-17  116  		return;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  117  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  118  	at91sam9g45_pmc = pmc_data_allocate(PMC_MAIN + 1,
12dc8d3be9d86c Alexandre Belloni 2020-01-17  119  					    nck(at91sam9g45_systemck),
12dc8d3be9d86c Alexandre Belloni 2020-01-17  120  					    nck(at91sam9g45_periphck), 0);
12dc8d3be9d86c Alexandre Belloni 2020-01-17  121  	if (!at91sam9g45_pmc)
12dc8d3be9d86c Alexandre Belloni 2020-01-17  122  		return;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  123  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  124  	bypass = of_property_read_bool(np, "atmel,osc-bypass");
12dc8d3be9d86c Alexandre Belloni 2020-01-17  125  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  126  	hw = at91_clk_register_main_osc(regmap, "main_osc", mainxtal_name,
12dc8d3be9d86c Alexandre Belloni 2020-01-17  127  					bypass);
12dc8d3be9d86c Alexandre Belloni 2020-01-17  128  	if (IS_ERR(hw))
12dc8d3be9d86c Alexandre Belloni 2020-01-17  129  		goto err_free;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  130  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  131  	hw = at91_clk_register_rm9200_main(regmap, "mainck", "main_osc");
12dc8d3be9d86c Alexandre Belloni 2020-01-17  132  	if (IS_ERR(hw))
12dc8d3be9d86c Alexandre Belloni 2020-01-17  133  		goto err_free;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  134  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  135  	at91sam9g45_pmc->chws[PMC_MAIN] = hw;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  136  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  137  	hw = at91_clk_register_pll(regmap, "pllack", "mainck", 0,
12dc8d3be9d86c Alexandre Belloni 2020-01-17  138  				   &at91rm9200_pll_layout, &plla_characteristics);
12dc8d3be9d86c Alexandre Belloni 2020-01-17  139  	if (IS_ERR(hw))
12dc8d3be9d86c Alexandre Belloni 2020-01-17  140  		goto err_free;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  141  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  142  	hw = at91_clk_register_plldiv(regmap, "plladivck", "pllack");
12dc8d3be9d86c Alexandre Belloni 2020-01-17  143  	if (IS_ERR(hw))
12dc8d3be9d86c Alexandre Belloni 2020-01-17  144  		goto err_free;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  145  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  146  	hw = at91_clk_register_utmi(regmap, NULL, "utmick", "mainck");
12dc8d3be9d86c Alexandre Belloni 2020-01-17  147  	if (IS_ERR(hw))
12dc8d3be9d86c Alexandre Belloni 2020-01-17  148  		goto err_free;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  149  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  150  	at91sam9g45_pmc->chws[PMC_UTMI] = hw;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  151  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  152  	parent_names[0] = slck_name;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  153  	parent_names[1] = "mainck";
12dc8d3be9d86c Alexandre Belloni 2020-01-17  154  	parent_names[2] = "plladivck";
12dc8d3be9d86c Alexandre Belloni 2020-01-17  155  	parent_names[3] = "utmick";
12dc8d3be9d86c Alexandre Belloni 2020-01-17  156  	hw = at91_clk_register_master(regmap, "masterck", 4, parent_names,
12dc8d3be9d86c Alexandre Belloni 2020-01-17  157  				      &at91rm9200_master_layout,
12dc8d3be9d86c Alexandre Belloni 2020-01-17  158  				      &mck_characteristics);
12dc8d3be9d86c Alexandre Belloni 2020-01-17  159  	if (IS_ERR(hw))
12dc8d3be9d86c Alexandre Belloni 2020-01-17  160  		goto err_free;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  161  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  162  	at91sam9g45_pmc->chws[PMC_MCK] = hw;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  163  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  164  	parent_names[0] = "plladivck";
12dc8d3be9d86c Alexandre Belloni 2020-01-17  165  	parent_names[1] = "utmick";
12dc8d3be9d86c Alexandre Belloni 2020-01-17  166  	hw = at91sam9x5_clk_register_usb(regmap, "usbck", parent_names, 2);
12dc8d3be9d86c Alexandre Belloni 2020-01-17  167  	if (IS_ERR(hw))
12dc8d3be9d86c Alexandre Belloni 2020-01-17  168  		goto err_free;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  169  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  170  	parent_names[0] = slck_name;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  171  	parent_names[1] = "mainck";
12dc8d3be9d86c Alexandre Belloni 2020-01-17  172  	parent_names[2] = "plladivck";
12dc8d3be9d86c Alexandre Belloni 2020-01-17  173  	parent_names[3] = "utmick";
12dc8d3be9d86c Alexandre Belloni 2020-01-17  174  	parent_names[4] = "masterck";
12dc8d3be9d86c Alexandre Belloni 2020-01-17  175  	for (i = 0; i < 2; i++) {
12dc8d3be9d86c Alexandre Belloni 2020-01-17  176  		char name[6];
12dc8d3be9d86c Alexandre Belloni 2020-01-17  177  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  178  		snprintf(name, sizeof(name), "prog%d", i);
12dc8d3be9d86c Alexandre Belloni 2020-01-17  179  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  180  		hw = at91_clk_register_programmable(regmap, name,
12dc8d3be9d86c Alexandre Belloni 2020-01-17  181  						    parent_names, 5, i,
12dc8d3be9d86c Alexandre Belloni 2020-01-17  182  						    &at91sam9g45_programmable_layout);
12dc8d3be9d86c Alexandre Belloni 2020-01-17  183  		if (IS_ERR(hw))
12dc8d3be9d86c Alexandre Belloni 2020-01-17  184  			goto err_free;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  185  	}
12dc8d3be9d86c Alexandre Belloni 2020-01-17  186  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  187  	for (i = 0; i < ARRAY_SIZE(at91sam9g45_systemck); i++) {
12dc8d3be9d86c Alexandre Belloni 2020-01-17  188  		hw = at91_clk_register_system(regmap, at91sam9g45_systemck[i].n,
12dc8d3be9d86c Alexandre Belloni 2020-01-17  189  					      at91sam9g45_systemck[i].p,
12dc8d3be9d86c Alexandre Belloni 2020-01-17  190  					      at91sam9g45_systemck[i].id);
12dc8d3be9d86c Alexandre Belloni 2020-01-17  191  		if (IS_ERR(hw))
12dc8d3be9d86c Alexandre Belloni 2020-01-17  192  			goto err_free;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  193  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  194  		at91sam9g45_pmc->shws[at91sam9g45_systemck[i].id] = hw;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  195  	}
12dc8d3be9d86c Alexandre Belloni 2020-01-17  196  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  197  	for (i = 0; i < ARRAY_SIZE(at91sam9g45_periphck); i++) {
12dc8d3be9d86c Alexandre Belloni 2020-01-17  198  		hw = at91_clk_register_peripheral(regmap,
12dc8d3be9d86c Alexandre Belloni 2020-01-17  199  						  at91sam9g45_periphck[i].n,
12dc8d3be9d86c Alexandre Belloni 2020-01-17  200  						  "masterck",
12dc8d3be9d86c Alexandre Belloni 2020-01-17  201  						  at91sam9g45_periphck[i].id);
12dc8d3be9d86c Alexandre Belloni 2020-01-17  202  		if (IS_ERR(hw))
12dc8d3be9d86c Alexandre Belloni 2020-01-17  203  			goto err_free;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  204  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  205  		at91sam9g45_pmc->phws[at91sam9g45_periphck[i].id] = hw;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  206  	}
12dc8d3be9d86c Alexandre Belloni 2020-01-17  207  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  208  	of_clk_add_hw_provider(np, of_clk_hw_pmc_get, at91sam9g45_pmc);
12dc8d3be9d86c Alexandre Belloni 2020-01-17  209  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  210  	return;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  211  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  212  err_free:
12dc8d3be9d86c Alexandre Belloni 2020-01-17 @213  	pmc_data_free(at91sam9g45_pmc);

:::::: The code at line 213 was first introduced by commit
:::::: 12dc8d3be9d86cccc35dcf32828d3a8e9d48e0d1 clk: at91: add at91sam9g45 pmc driver

:::::: TO: Alexandre Belloni <alexandre.belloni@bootlin.com>
:::::: CC: Stephen Boyd <sboyd@kernel.org>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 26719 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 1/3] clk: at91: optimize pmc data allocation
@ 2020-03-16 22:05     ` kbuild test robot
  0 siblings, 0 replies; 8+ messages in thread
From: kbuild test robot @ 2020-03-16 22:05 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 11836 bytes --]

Hi "Michał,

I love your patch! Yet something to improve:

[auto build test ERROR on clk/clk-next]
[also build test ERROR on robh/for-next abelloni/rtc-next v5.6-rc6 next-20200312]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url:    https://github.com/0day-ci/linux/commits/Micha-Miros-aw/clk-at91-support-configuring-PCKx-parent-via-DT/20200317-041729
base:   https://git.kernel.org/pub/scm/linux/kernel/git/clk/linux.git clk-next
config: arm-at91_dt_defconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (GCC) 9.2.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        GCC_VERSION=9.2.0 make.cross ARCH=arm 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   drivers/clk/at91/at91sam9g45.c: In function 'at91sam9g45_pmc_setup':
>> drivers/clk/at91/at91sam9g45.c:213:2: error: implicit declaration of function 'pmc_data_free' [-Werror=implicit-function-declaration]
     213 |  pmc_data_free(at91sam9g45_pmc);
         |  ^~~~~~~~~~~~~
   cc1: some warnings being treated as errors
--
   drivers/clk/at91/at91sam9n12.c: In function 'at91sam9n12_pmc_setup':
>> drivers/clk/at91/at91sam9n12.c:231:2: error: implicit declaration of function 'pmc_data_free' [-Werror=implicit-function-declaration]
     231 |  pmc_data_free(at91sam9n12_pmc);
         |  ^~~~~~~~~~~~~
   cc1: some warnings being treated as errors
--
   drivers/clk/at91/sam9x60.c: In function 'sam9x60_pmc_setup':
>> drivers/clk/at91/sam9x60.c:302:2: error: implicit declaration of function 'pmc_data_free' [-Werror=implicit-function-declaration]
     302 |  pmc_data_free(sam9x60_pmc);
         |  ^~~~~~~~~~~~~
   cc1: some warnings being treated as errors

vim +/pmc_data_free +213 drivers/clk/at91/at91sam9g45.c

12dc8d3be9d86c Alexandre Belloni 2020-01-17   92  
12dc8d3be9d86c Alexandre Belloni 2020-01-17   93  static void __init at91sam9g45_pmc_setup(struct device_node *np)
12dc8d3be9d86c Alexandre Belloni 2020-01-17   94  {
12dc8d3be9d86c Alexandre Belloni 2020-01-17   95  	const char *slck_name, *mainxtal_name;
12dc8d3be9d86c Alexandre Belloni 2020-01-17   96  	struct pmc_data *at91sam9g45_pmc;
12dc8d3be9d86c Alexandre Belloni 2020-01-17   97  	const char *parent_names[6];
12dc8d3be9d86c Alexandre Belloni 2020-01-17   98  	struct regmap *regmap;
12dc8d3be9d86c Alexandre Belloni 2020-01-17   99  	struct clk_hw *hw;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  100  	int i;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  101  	bool bypass;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  102  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  103  	i = of_property_match_string(np, "clock-names", "slow_clk");
12dc8d3be9d86c Alexandre Belloni 2020-01-17  104  	if (i < 0)
12dc8d3be9d86c Alexandre Belloni 2020-01-17  105  		return;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  106  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  107  	slck_name = of_clk_get_parent_name(np, i);
12dc8d3be9d86c Alexandre Belloni 2020-01-17  108  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  109  	i = of_property_match_string(np, "clock-names", "main_xtal");
12dc8d3be9d86c Alexandre Belloni 2020-01-17  110  	if (i < 0)
12dc8d3be9d86c Alexandre Belloni 2020-01-17  111  		return;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  112  	mainxtal_name = of_clk_get_parent_name(np, i);
12dc8d3be9d86c Alexandre Belloni 2020-01-17  113  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  114  	regmap = syscon_node_to_regmap(np);
12dc8d3be9d86c Alexandre Belloni 2020-01-17  115  	if (IS_ERR(regmap))
12dc8d3be9d86c Alexandre Belloni 2020-01-17  116  		return;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  117  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  118  	at91sam9g45_pmc = pmc_data_allocate(PMC_MAIN + 1,
12dc8d3be9d86c Alexandre Belloni 2020-01-17  119  					    nck(at91sam9g45_systemck),
12dc8d3be9d86c Alexandre Belloni 2020-01-17  120  					    nck(at91sam9g45_periphck), 0);
12dc8d3be9d86c Alexandre Belloni 2020-01-17  121  	if (!at91sam9g45_pmc)
12dc8d3be9d86c Alexandre Belloni 2020-01-17  122  		return;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  123  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  124  	bypass = of_property_read_bool(np, "atmel,osc-bypass");
12dc8d3be9d86c Alexandre Belloni 2020-01-17  125  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  126  	hw = at91_clk_register_main_osc(regmap, "main_osc", mainxtal_name,
12dc8d3be9d86c Alexandre Belloni 2020-01-17  127  					bypass);
12dc8d3be9d86c Alexandre Belloni 2020-01-17  128  	if (IS_ERR(hw))
12dc8d3be9d86c Alexandre Belloni 2020-01-17  129  		goto err_free;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  130  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  131  	hw = at91_clk_register_rm9200_main(regmap, "mainck", "main_osc");
12dc8d3be9d86c Alexandre Belloni 2020-01-17  132  	if (IS_ERR(hw))
12dc8d3be9d86c Alexandre Belloni 2020-01-17  133  		goto err_free;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  134  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  135  	at91sam9g45_pmc->chws[PMC_MAIN] = hw;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  136  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  137  	hw = at91_clk_register_pll(regmap, "pllack", "mainck", 0,
12dc8d3be9d86c Alexandre Belloni 2020-01-17  138  				   &at91rm9200_pll_layout, &plla_characteristics);
12dc8d3be9d86c Alexandre Belloni 2020-01-17  139  	if (IS_ERR(hw))
12dc8d3be9d86c Alexandre Belloni 2020-01-17  140  		goto err_free;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  141  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  142  	hw = at91_clk_register_plldiv(regmap, "plladivck", "pllack");
12dc8d3be9d86c Alexandre Belloni 2020-01-17  143  	if (IS_ERR(hw))
12dc8d3be9d86c Alexandre Belloni 2020-01-17  144  		goto err_free;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  145  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  146  	hw = at91_clk_register_utmi(regmap, NULL, "utmick", "mainck");
12dc8d3be9d86c Alexandre Belloni 2020-01-17  147  	if (IS_ERR(hw))
12dc8d3be9d86c Alexandre Belloni 2020-01-17  148  		goto err_free;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  149  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  150  	at91sam9g45_pmc->chws[PMC_UTMI] = hw;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  151  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  152  	parent_names[0] = slck_name;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  153  	parent_names[1] = "mainck";
12dc8d3be9d86c Alexandre Belloni 2020-01-17  154  	parent_names[2] = "plladivck";
12dc8d3be9d86c Alexandre Belloni 2020-01-17  155  	parent_names[3] = "utmick";
12dc8d3be9d86c Alexandre Belloni 2020-01-17  156  	hw = at91_clk_register_master(regmap, "masterck", 4, parent_names,
12dc8d3be9d86c Alexandre Belloni 2020-01-17  157  				      &at91rm9200_master_layout,
12dc8d3be9d86c Alexandre Belloni 2020-01-17  158  				      &mck_characteristics);
12dc8d3be9d86c Alexandre Belloni 2020-01-17  159  	if (IS_ERR(hw))
12dc8d3be9d86c Alexandre Belloni 2020-01-17  160  		goto err_free;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  161  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  162  	at91sam9g45_pmc->chws[PMC_MCK] = hw;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  163  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  164  	parent_names[0] = "plladivck";
12dc8d3be9d86c Alexandre Belloni 2020-01-17  165  	parent_names[1] = "utmick";
12dc8d3be9d86c Alexandre Belloni 2020-01-17  166  	hw = at91sam9x5_clk_register_usb(regmap, "usbck", parent_names, 2);
12dc8d3be9d86c Alexandre Belloni 2020-01-17  167  	if (IS_ERR(hw))
12dc8d3be9d86c Alexandre Belloni 2020-01-17  168  		goto err_free;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  169  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  170  	parent_names[0] = slck_name;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  171  	parent_names[1] = "mainck";
12dc8d3be9d86c Alexandre Belloni 2020-01-17  172  	parent_names[2] = "plladivck";
12dc8d3be9d86c Alexandre Belloni 2020-01-17  173  	parent_names[3] = "utmick";
12dc8d3be9d86c Alexandre Belloni 2020-01-17  174  	parent_names[4] = "masterck";
12dc8d3be9d86c Alexandre Belloni 2020-01-17  175  	for (i = 0; i < 2; i++) {
12dc8d3be9d86c Alexandre Belloni 2020-01-17  176  		char name[6];
12dc8d3be9d86c Alexandre Belloni 2020-01-17  177  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  178  		snprintf(name, sizeof(name), "prog%d", i);
12dc8d3be9d86c Alexandre Belloni 2020-01-17  179  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  180  		hw = at91_clk_register_programmable(regmap, name,
12dc8d3be9d86c Alexandre Belloni 2020-01-17  181  						    parent_names, 5, i,
12dc8d3be9d86c Alexandre Belloni 2020-01-17  182  						    &at91sam9g45_programmable_layout);
12dc8d3be9d86c Alexandre Belloni 2020-01-17  183  		if (IS_ERR(hw))
12dc8d3be9d86c Alexandre Belloni 2020-01-17  184  			goto err_free;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  185  	}
12dc8d3be9d86c Alexandre Belloni 2020-01-17  186  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  187  	for (i = 0; i < ARRAY_SIZE(at91sam9g45_systemck); i++) {
12dc8d3be9d86c Alexandre Belloni 2020-01-17  188  		hw = at91_clk_register_system(regmap, at91sam9g45_systemck[i].n,
12dc8d3be9d86c Alexandre Belloni 2020-01-17  189  					      at91sam9g45_systemck[i].p,
12dc8d3be9d86c Alexandre Belloni 2020-01-17  190  					      at91sam9g45_systemck[i].id);
12dc8d3be9d86c Alexandre Belloni 2020-01-17  191  		if (IS_ERR(hw))
12dc8d3be9d86c Alexandre Belloni 2020-01-17  192  			goto err_free;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  193  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  194  		at91sam9g45_pmc->shws[at91sam9g45_systemck[i].id] = hw;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  195  	}
12dc8d3be9d86c Alexandre Belloni 2020-01-17  196  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  197  	for (i = 0; i < ARRAY_SIZE(at91sam9g45_periphck); i++) {
12dc8d3be9d86c Alexandre Belloni 2020-01-17  198  		hw = at91_clk_register_peripheral(regmap,
12dc8d3be9d86c Alexandre Belloni 2020-01-17  199  						  at91sam9g45_periphck[i].n,
12dc8d3be9d86c Alexandre Belloni 2020-01-17  200  						  "masterck",
12dc8d3be9d86c Alexandre Belloni 2020-01-17  201  						  at91sam9g45_periphck[i].id);
12dc8d3be9d86c Alexandre Belloni 2020-01-17  202  		if (IS_ERR(hw))
12dc8d3be9d86c Alexandre Belloni 2020-01-17  203  			goto err_free;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  204  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  205  		at91sam9g45_pmc->phws[at91sam9g45_periphck[i].id] = hw;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  206  	}
12dc8d3be9d86c Alexandre Belloni 2020-01-17  207  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  208  	of_clk_add_hw_provider(np, of_clk_hw_pmc_get, at91sam9g45_pmc);
12dc8d3be9d86c Alexandre Belloni 2020-01-17  209  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  210  	return;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  211  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  212  err_free:
12dc8d3be9d86c Alexandre Belloni 2020-01-17 @213  	pmc_data_free(at91sam9g45_pmc);

:::::: The code at line 213 was first introduced by commit
:::::: 12dc8d3be9d86cccc35dcf32828d3a8e9d48e0d1 clk: at91: add at91sam9g45 pmc driver

:::::: TO: Alexandre Belloni <alexandre.belloni@bootlin.com>
:::::: CC: Stephen Boyd <sboyd@kernel.org>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 26719 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/3] clk: at91: allow setting PCKx parent via DT
  2020-03-15 18:38 ` [PATCH 2/3] clk: at91: allow setting " Michał Mirosław
@ 2020-03-16 23:04     ` kbuild test robot
  0 siblings, 0 replies; 8+ messages in thread
From: kbuild test robot @ 2020-03-16 23:04 UTC (permalink / raw)
  To: Michał Mirosław
  Cc: kbuild-all, Alexandre Belloni, Ludovic Desroches,
	Michael Turquette, Nicolas Ferre, Stephen Boyd, linux-clk,
	linux-kernel

[-- Attachment #1: Type: text/plain, Size: 5831 bytes --]

Hi "Michał,

I love your patch! Yet something to improve:

[auto build test ERROR on clk/clk-next]
[also build test ERROR on robh/for-next abelloni/rtc-next v5.6-rc6 next-20200312]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url:    https://github.com/0day-ci/linux/commits/Micha-Miros-aw/clk-at91-support-configuring-PCKx-parent-via-DT/20200317-041729
base:   https://git.kernel.org/pub/scm/linux/kernel/git/clk/linux.git clk-next
config: arm-at91_dt_defconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (GCC) 9.2.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        GCC_VERSION=9.2.0 make.cross ARCH=arm 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   drivers/clk/at91/at91sam9g45.c: In function 'at91sam9g45_pmc_setup':
>> drivers/clk/at91/at91sam9g45.c:118:20: error: too few arguments to function 'pmc_data_allocate'
     118 |  at91sam9g45_pmc = pmc_data_allocate(PMC_MAIN + 1,
         |                    ^~~~~~~~~~~~~~~~~
   In file included from drivers/clk/at91/at91sam9g45.c:8:
   drivers/clk/at91/pmc.h:100:18: note: declared here
     100 | struct pmc_data *pmc_data_allocate(unsigned int ncore, unsigned int nsystem,
         |                  ^~~~~~~~~~~~~~~~~
   drivers/clk/at91/at91sam9g45.c:213:2: error: implicit declaration of function 'pmc_data_free' [-Werror=implicit-function-declaration]
     213 |  pmc_data_free(at91sam9g45_pmc);
         |  ^~~~~~~~~~~~~
   cc1: some warnings being treated as errors
--
   drivers/clk/at91/at91sam9n12.c: In function 'at91sam9n12_pmc_setup':
>> drivers/clk/at91/at91sam9n12.c:131:20: error: too few arguments to function 'pmc_data_allocate'
     131 |  at91sam9n12_pmc = pmc_data_allocate(PMC_MAIN + 1,
         |                    ^~~~~~~~~~~~~~~~~
   In file included from drivers/clk/at91/at91sam9n12.c:8:
   drivers/clk/at91/pmc.h:100:18: note: declared here
     100 | struct pmc_data *pmc_data_allocate(unsigned int ncore, unsigned int nsystem,
         |                  ^~~~~~~~~~~~~~~~~
   drivers/clk/at91/at91sam9n12.c:231:2: error: implicit declaration of function 'pmc_data_free' [-Werror=implicit-function-declaration]
     231 |  pmc_data_free(at91sam9n12_pmc);
         |  ^~~~~~~~~~~~~
   cc1: some warnings being treated as errors
--
   drivers/clk/at91/sam9x60.c: In function 'sam9x60_pmc_setup':
>> drivers/clk/at91/sam9x60.c:185:16: error: too few arguments to function 'pmc_data_allocate'
     185 |  sam9x60_pmc = pmc_data_allocate(PMC_MAIN + 1,
         |                ^~~~~~~~~~~~~~~~~
   In file included from drivers/clk/at91/sam9x60.c:8:
   drivers/clk/at91/pmc.h:100:18: note: declared here
     100 | struct pmc_data *pmc_data_allocate(unsigned int ncore, unsigned int nsystem,
         |                  ^~~~~~~~~~~~~~~~~
   drivers/clk/at91/sam9x60.c:302:2: error: implicit declaration of function 'pmc_data_free' [-Werror=implicit-function-declaration]
     302 |  pmc_data_free(sam9x60_pmc);
         |  ^~~~~~~~~~~~~
   cc1: some warnings being treated as errors

vim +/pmc_data_allocate +118 drivers/clk/at91/at91sam9g45.c

12dc8d3be9d86c Alexandre Belloni 2020-01-17   92  
12dc8d3be9d86c Alexandre Belloni 2020-01-17   93  static void __init at91sam9g45_pmc_setup(struct device_node *np)
12dc8d3be9d86c Alexandre Belloni 2020-01-17   94  {
12dc8d3be9d86c Alexandre Belloni 2020-01-17   95  	const char *slck_name, *mainxtal_name;
12dc8d3be9d86c Alexandre Belloni 2020-01-17   96  	struct pmc_data *at91sam9g45_pmc;
12dc8d3be9d86c Alexandre Belloni 2020-01-17   97  	const char *parent_names[6];
12dc8d3be9d86c Alexandre Belloni 2020-01-17   98  	struct regmap *regmap;
12dc8d3be9d86c Alexandre Belloni 2020-01-17   99  	struct clk_hw *hw;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  100  	int i;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  101  	bool bypass;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  102  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  103  	i = of_property_match_string(np, "clock-names", "slow_clk");
12dc8d3be9d86c Alexandre Belloni 2020-01-17  104  	if (i < 0)
12dc8d3be9d86c Alexandre Belloni 2020-01-17  105  		return;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  106  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  107  	slck_name = of_clk_get_parent_name(np, i);
12dc8d3be9d86c Alexandre Belloni 2020-01-17  108  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  109  	i = of_property_match_string(np, "clock-names", "main_xtal");
12dc8d3be9d86c Alexandre Belloni 2020-01-17  110  	if (i < 0)
12dc8d3be9d86c Alexandre Belloni 2020-01-17  111  		return;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  112  	mainxtal_name = of_clk_get_parent_name(np, i);
12dc8d3be9d86c Alexandre Belloni 2020-01-17  113  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  114  	regmap = syscon_node_to_regmap(np);
12dc8d3be9d86c Alexandre Belloni 2020-01-17  115  	if (IS_ERR(regmap))
12dc8d3be9d86c Alexandre Belloni 2020-01-17  116  		return;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  117  
12dc8d3be9d86c Alexandre Belloni 2020-01-17 @118  	at91sam9g45_pmc = pmc_data_allocate(PMC_MAIN + 1,

:::::: The code at line 118 was first introduced by commit
:::::: 12dc8d3be9d86cccc35dcf32828d3a8e9d48e0d1 clk: at91: add at91sam9g45 pmc driver

:::::: TO: Alexandre Belloni <alexandre.belloni@bootlin.com>
:::::: CC: Stephen Boyd <sboyd@kernel.org>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 26719 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [PATCH 2/3] clk: at91: allow setting PCKx parent via DT
@ 2020-03-16 23:04     ` kbuild test robot
  0 siblings, 0 replies; 8+ messages in thread
From: kbuild test robot @ 2020-03-16 23:04 UTC (permalink / raw)
  To: kbuild-all

[-- Attachment #1: Type: text/plain, Size: 5933 bytes --]

Hi "Michał,

I love your patch! Yet something to improve:

[auto build test ERROR on clk/clk-next]
[also build test ERROR on robh/for-next abelloni/rtc-next v5.6-rc6 next-20200312]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url:    https://github.com/0day-ci/linux/commits/Micha-Miros-aw/clk-at91-support-configuring-PCKx-parent-via-DT/20200317-041729
base:   https://git.kernel.org/pub/scm/linux/kernel/git/clk/linux.git clk-next
config: arm-at91_dt_defconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (GCC) 9.2.0
reproduce:
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # save the attached .config to linux build tree
        GCC_VERSION=9.2.0 make.cross ARCH=arm 

If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp@intel.com>

All errors (new ones prefixed by >>):

   drivers/clk/at91/at91sam9g45.c: In function 'at91sam9g45_pmc_setup':
>> drivers/clk/at91/at91sam9g45.c:118:20: error: too few arguments to function 'pmc_data_allocate'
     118 |  at91sam9g45_pmc = pmc_data_allocate(PMC_MAIN + 1,
         |                    ^~~~~~~~~~~~~~~~~
   In file included from drivers/clk/at91/at91sam9g45.c:8:
   drivers/clk/at91/pmc.h:100:18: note: declared here
     100 | struct pmc_data *pmc_data_allocate(unsigned int ncore, unsigned int nsystem,
         |                  ^~~~~~~~~~~~~~~~~
   drivers/clk/at91/at91sam9g45.c:213:2: error: implicit declaration of function 'pmc_data_free' [-Werror=implicit-function-declaration]
     213 |  pmc_data_free(at91sam9g45_pmc);
         |  ^~~~~~~~~~~~~
   cc1: some warnings being treated as errors
--
   drivers/clk/at91/at91sam9n12.c: In function 'at91sam9n12_pmc_setup':
>> drivers/clk/at91/at91sam9n12.c:131:20: error: too few arguments to function 'pmc_data_allocate'
     131 |  at91sam9n12_pmc = pmc_data_allocate(PMC_MAIN + 1,
         |                    ^~~~~~~~~~~~~~~~~
   In file included from drivers/clk/at91/at91sam9n12.c:8:
   drivers/clk/at91/pmc.h:100:18: note: declared here
     100 | struct pmc_data *pmc_data_allocate(unsigned int ncore, unsigned int nsystem,
         |                  ^~~~~~~~~~~~~~~~~
   drivers/clk/at91/at91sam9n12.c:231:2: error: implicit declaration of function 'pmc_data_free' [-Werror=implicit-function-declaration]
     231 |  pmc_data_free(at91sam9n12_pmc);
         |  ^~~~~~~~~~~~~
   cc1: some warnings being treated as errors
--
   drivers/clk/at91/sam9x60.c: In function 'sam9x60_pmc_setup':
>> drivers/clk/at91/sam9x60.c:185:16: error: too few arguments to function 'pmc_data_allocate'
     185 |  sam9x60_pmc = pmc_data_allocate(PMC_MAIN + 1,
         |                ^~~~~~~~~~~~~~~~~
   In file included from drivers/clk/at91/sam9x60.c:8:
   drivers/clk/at91/pmc.h:100:18: note: declared here
     100 | struct pmc_data *pmc_data_allocate(unsigned int ncore, unsigned int nsystem,
         |                  ^~~~~~~~~~~~~~~~~
   drivers/clk/at91/sam9x60.c:302:2: error: implicit declaration of function 'pmc_data_free' [-Werror=implicit-function-declaration]
     302 |  pmc_data_free(sam9x60_pmc);
         |  ^~~~~~~~~~~~~
   cc1: some warnings being treated as errors

vim +/pmc_data_allocate +118 drivers/clk/at91/at91sam9g45.c

12dc8d3be9d86c Alexandre Belloni 2020-01-17   92  
12dc8d3be9d86c Alexandre Belloni 2020-01-17   93  static void __init at91sam9g45_pmc_setup(struct device_node *np)
12dc8d3be9d86c Alexandre Belloni 2020-01-17   94  {
12dc8d3be9d86c Alexandre Belloni 2020-01-17   95  	const char *slck_name, *mainxtal_name;
12dc8d3be9d86c Alexandre Belloni 2020-01-17   96  	struct pmc_data *at91sam9g45_pmc;
12dc8d3be9d86c Alexandre Belloni 2020-01-17   97  	const char *parent_names[6];
12dc8d3be9d86c Alexandre Belloni 2020-01-17   98  	struct regmap *regmap;
12dc8d3be9d86c Alexandre Belloni 2020-01-17   99  	struct clk_hw *hw;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  100  	int i;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  101  	bool bypass;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  102  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  103  	i = of_property_match_string(np, "clock-names", "slow_clk");
12dc8d3be9d86c Alexandre Belloni 2020-01-17  104  	if (i < 0)
12dc8d3be9d86c Alexandre Belloni 2020-01-17  105  		return;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  106  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  107  	slck_name = of_clk_get_parent_name(np, i);
12dc8d3be9d86c Alexandre Belloni 2020-01-17  108  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  109  	i = of_property_match_string(np, "clock-names", "main_xtal");
12dc8d3be9d86c Alexandre Belloni 2020-01-17  110  	if (i < 0)
12dc8d3be9d86c Alexandre Belloni 2020-01-17  111  		return;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  112  	mainxtal_name = of_clk_get_parent_name(np, i);
12dc8d3be9d86c Alexandre Belloni 2020-01-17  113  
12dc8d3be9d86c Alexandre Belloni 2020-01-17  114  	regmap = syscon_node_to_regmap(np);
12dc8d3be9d86c Alexandre Belloni 2020-01-17  115  	if (IS_ERR(regmap))
12dc8d3be9d86c Alexandre Belloni 2020-01-17  116  		return;
12dc8d3be9d86c Alexandre Belloni 2020-01-17  117  
12dc8d3be9d86c Alexandre Belloni 2020-01-17 @118  	at91sam9g45_pmc = pmc_data_allocate(PMC_MAIN + 1,

:::::: The code@line 118 was first introduced by commit
:::::: 12dc8d3be9d86cccc35dcf32828d3a8e9d48e0d1 clk: at91: add at91sam9g45 pmc driver

:::::: TO: Alexandre Belloni <alexandre.belloni@bootlin.com>
:::::: CC: Stephen Boyd <sboyd@kernel.org>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org

[-- Attachment #2: config.gz --]
[-- Type: application/gzip, Size: 26719 bytes --]

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2020-03-16 23:04 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-15 18:38 [PATCH 0/3] clk: at91: support configuring PCKx parent via DT Michał Mirosław
2020-03-15 18:38 ` [PATCH 2/3] clk: at91: allow setting " Michał Mirosław
2020-03-16 23:04   ` kbuild test robot
2020-03-16 23:04     ` kbuild test robot
2020-03-15 18:38 ` [PATCH 1/3] clk: at91: optimize pmc data allocation Michał Mirosław
2020-03-16 22:05   ` kbuild test robot
2020-03-16 22:05     ` kbuild test robot
2020-03-15 18:38 ` [PATCH 3/3] clk: at91: sama5d2: allow setting all PMC clock parents via DT Michał Mirosław

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.