* [PATCH v2 1/3] clk: renesas: cpg-mssr: add support for ignore-unused clocks
2020-03-16 16:34 [PATCH v2 0/3] clk: renesas: cpg-mssr: add ignore-unused option Ulrich Hecht
@ 2020-03-16 16:34 ` Ulrich Hecht
2020-03-16 16:34 ` [PATCH v2 2/3] clk: renesas: rcar-gen3: mark RWDT clocks as ignore-unused Ulrich Hecht
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Ulrich Hecht @ 2020-03-16 16:34 UTC (permalink / raw)
To: linux-renesas-soc
Cc: wsa, geert, fabrizio.castro, ramesh.shanmugasundaram, magnus.damm,
Ulrich Hecht
This adds facilities to mark clocks as "ignore used", i.e. never to be
turned off. The primary application is the RWDT clock, which needs to
remain on throughout the boot process if enabled by the bootloader.
Signed-off-by: Ulrich Hecht <uli+renesas@fpond.eu>
---
drivers/clk/renesas/renesas-cpg-mssr.c | 5 +++++
drivers/clk/renesas/renesas-cpg-mssr.h | 9 +++++++++
2 files changed, 14 insertions(+)
diff --git a/drivers/clk/renesas/renesas-cpg-mssr.c b/drivers/clk/renesas/renesas-cpg-mssr.c
index a2663fb..046efc9 100644
--- a/drivers/clk/renesas/renesas-cpg-mssr.c
+++ b/drivers/clk/renesas/renesas-cpg-mssr.c
@@ -423,6 +423,11 @@ static void __init cpg_mssr_register_mod_clk(const struct mssr_mod_clk *mod,
init.flags |= CLK_IS_CRITICAL;
break;
}
+ for (i = 0; i < info->num_ignore_unused_mod_clks; i++)
+ if (id == info->ignore_unused_mod_clks[i]) {
+ init.flags |= CLK_IGNORE_UNUSED;
+ break;
+ }
parent_name = __clk_get_name(parent);
init.parent_names = &parent_name;
diff --git a/drivers/clk/renesas/renesas-cpg-mssr.h b/drivers/clk/renesas/renesas-cpg-mssr.h
index 3b852ba..2a4b47e 100644
--- a/drivers/clk/renesas/renesas-cpg-mssr.h
+++ b/drivers/clk/renesas/renesas-cpg-mssr.h
@@ -105,6 +105,11 @@ struct device_node;
* @crit_mod_clks: Array with Module Clock IDs of critical clocks that
* should not be disabled without a knowledgeable driver
* @num_crit_mod_clks: Number of entries in crit_mod_clks[]
+ * @ignore_unused_mod_clks: Array with Module Clock IDs of clocks that
+ * should not be disabled even if they seem to
+ * be unused
+ * @num_ignore_unused_mod_clks: Number of entries in
+ * ignore_unused_mod_clks[]
*
* @core_pm_clks: Array with IDs of Core Clocks that are suitable for Power
* Management, in addition to Module Clocks
@@ -141,6 +146,10 @@ struct cpg_mssr_info {
const unsigned int *crit_mod_clks;
unsigned int num_crit_mod_clks;
+ /* Module Clocks that should not be disabled even if unused */
+ const unsigned int *ignore_unused_mod_clks;
+ unsigned int num_ignore_unused_mod_clks;
+
/* Core Clocks suitable for PM, in addition to the Module Clocks */
const unsigned int *core_pm_clks;
unsigned int num_core_pm_clks;
--
2.7.4
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH v2 2/3] clk: renesas: rcar-gen3: mark RWDT clocks as ignore-unused
2020-03-16 16:34 [PATCH v2 0/3] clk: renesas: cpg-mssr: add ignore-unused option Ulrich Hecht
2020-03-16 16:34 ` [PATCH v2 1/3] clk: renesas: cpg-mssr: add support for ignore-unused clocks Ulrich Hecht
@ 2020-03-16 16:34 ` Ulrich Hecht
2020-03-16 16:34 ` [PATCH v2 3/3] clk: renesas: rzg2: mark RWDT clock " Ulrich Hecht
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Ulrich Hecht @ 2020-03-16 16:34 UTC (permalink / raw)
To: linux-renesas-soc
Cc: wsa, geert, fabrizio.castro, ramesh.shanmugasundaram, magnus.damm,
Ulrich Hecht
Ensures RWDT remains alert throughout the boot process if enabled.
This patch applies the change to the following SoCs: r8a7795,
r8a7796, r8a77965, r8a77970, r8a77980, r8a77990 and r8a77995.
Signed-off-by: Ulrich Hecht <uli+renesas@fpond.eu>
---
drivers/clk/renesas/r8a7795-cpg-mssr.c | 6 +++++-
drivers/clk/renesas/r8a7796-cpg-mssr.c | 6 +++++-
drivers/clk/renesas/r8a77965-cpg-mssr.c | 5 +++++
drivers/clk/renesas/r8a77970-cpg-mssr.c | 6 +++++-
drivers/clk/renesas/r8a77980-cpg-mssr.c | 6 +++++-
drivers/clk/renesas/r8a77990-cpg-mssr.c | 5 +++++
drivers/clk/renesas/r8a77995-cpg-mssr.c | 6 +++++-
7 files changed, 35 insertions(+), 5 deletions(-)
diff --git a/drivers/clk/renesas/r8a7795-cpg-mssr.c b/drivers/clk/renesas/r8a7795-cpg-mssr.c
index ff5b302..99db19e 100644
--- a/drivers/clk/renesas/r8a7795-cpg-mssr.c
+++ b/drivers/clk/renesas/r8a7795-cpg-mssr.c
@@ -289,7 +289,9 @@ static struct mssr_mod_clk r8a7795_mod_clks[] __initdata = {
static const unsigned int r8a7795_crit_mod_clks[] __initconst = {
MOD_CLK_ID(408), /* INTC-AP (GIC) */
};
-
+static const unsigned int r8a7795_ignore_unused_mod_clks[] __initconst = {
+ MOD_CLK_ID(402), /* RWDT */
+};
/*
* CPG Clock Data
@@ -484,6 +486,8 @@ const struct cpg_mssr_info r8a7795_cpg_mssr_info __initconst = {
/* Critical Module Clocks */
.crit_mod_clks = r8a7795_crit_mod_clks,
.num_crit_mod_clks = ARRAY_SIZE(r8a7795_crit_mod_clks),
+ .ignore_unused_mod_clks = r8a7795_ignore_unused_mod_clks,
+ .num_ignore_unused_mod_clks = ARRAY_SIZE(r8a7795_ignore_unused_mod_clks),
/* Callbacks */
.init = r8a7795_cpg_mssr_init,
diff --git a/drivers/clk/renesas/r8a7796-cpg-mssr.c b/drivers/clk/renesas/r8a7796-cpg-mssr.c
index e8d466d..2a81174 100644
--- a/drivers/clk/renesas/r8a7796-cpg-mssr.c
+++ b/drivers/clk/renesas/r8a7796-cpg-mssr.c
@@ -264,7 +264,9 @@ static struct mssr_mod_clk r8a7796_mod_clks[] __initdata = {
static const unsigned int r8a7796_crit_mod_clks[] __initconst = {
MOD_CLK_ID(408), /* INTC-AP (GIC) */
};
-
+static const unsigned int r8a7796_ignore_unused_mod_clks[] __initconst = {
+ MOD_CLK_ID(402), /* RWDT */
+};
/*
* CPG Clock Data
@@ -364,6 +366,8 @@ const struct cpg_mssr_info r8a7796_cpg_mssr_info __initconst = {
/* Critical Module Clocks */
.crit_mod_clks = r8a7796_crit_mod_clks,
.num_crit_mod_clks = ARRAY_SIZE(r8a7796_crit_mod_clks),
+ .ignore_unused_mod_clks = r8a7796_ignore_unused_mod_clks,
+ .num_ignore_unused_mod_clks = ARRAY_SIZE(r8a7796_ignore_unused_mod_clks),
/* Callbacks */
.init = r8a7796_cpg_mssr_init,
diff --git a/drivers/clk/renesas/r8a77965-cpg-mssr.c b/drivers/clk/renesas/r8a77965-cpg-mssr.c
index 7a05a2f..541a932 100644
--- a/drivers/clk/renesas/r8a77965-cpg-mssr.c
+++ b/drivers/clk/renesas/r8a77965-cpg-mssr.c
@@ -265,6 +265,9 @@ static const struct mssr_mod_clk r8a77965_mod_clks[] __initconst = {
static const unsigned int r8a77965_crit_mod_clks[] __initconst = {
MOD_CLK_ID(408), /* INTC-AP (GIC) */
};
+static const unsigned int r8a77965_ignore_unused_mod_clks[] __initconst = {
+ MOD_CLK_ID(402), /* RWDT */
+};
/*
* CPG Clock Data
@@ -350,6 +353,8 @@ const struct cpg_mssr_info r8a77965_cpg_mssr_info __initconst = {
/* Critical Module Clocks */
.crit_mod_clks = r8a77965_crit_mod_clks,
.num_crit_mod_clks = ARRAY_SIZE(r8a77965_crit_mod_clks),
+ .ignore_unused_mod_clks = r8a77965_ignore_unused_mod_clks,
+ .num_ignore_unused_mod_clks = ARRAY_SIZE(r8a77965_ignore_unused_mod_clks),
/* Callbacks */
.init = r8a77965_cpg_mssr_init,
diff --git a/drivers/clk/renesas/r8a77970-cpg-mssr.c b/drivers/clk/renesas/r8a77970-cpg-mssr.c
index cbed376..402aae8 100644
--- a/drivers/clk/renesas/r8a77970-cpg-mssr.c
+++ b/drivers/clk/renesas/r8a77970-cpg-mssr.c
@@ -167,7 +167,9 @@ static const struct mssr_mod_clk r8a77970_mod_clks[] __initconst = {
static const unsigned int r8a77970_crit_mod_clks[] __initconst = {
MOD_CLK_ID(408), /* INTC-AP (GIC) */
};
-
+static const unsigned int r8a77970_ignore_unused_mod_clks[] __initconst = {
+ MOD_CLK_ID(402), /* RWDT */
+};
/*
* CPG Clock Data
@@ -267,6 +269,8 @@ const struct cpg_mssr_info r8a77970_cpg_mssr_info __initconst = {
/* Critical Module Clocks */
.crit_mod_clks = r8a77970_crit_mod_clks,
.num_crit_mod_clks = ARRAY_SIZE(r8a77970_crit_mod_clks),
+ .ignore_unused_mod_clks = r8a77970_ignore_unused_mod_clks,
+ .num_ignore_unused_mod_clks = ARRAY_SIZE(r8a77970_ignore_unused_mod_clks),
/* Callbacks */
.init = r8a77970_cpg_mssr_init,
diff --git a/drivers/clk/renesas/r8a77980-cpg-mssr.c b/drivers/clk/renesas/r8a77980-cpg-mssr.c
index 7227f67..80f3582 100644
--- a/drivers/clk/renesas/r8a77980-cpg-mssr.c
+++ b/drivers/clk/renesas/r8a77980-cpg-mssr.c
@@ -182,7 +182,9 @@ static const struct mssr_mod_clk r8a77980_mod_clks[] __initconst = {
static const unsigned int r8a77980_crit_mod_clks[] __initconst = {
MOD_CLK_ID(408), /* INTC-AP (GIC) */
};
-
+static const unsigned int r8a77980_ignore_unused_mod_clks[] __initconst = {
+ MOD_CLK_ID(402), /* RWDT */
+};
/*
* CPG Clock Data
@@ -238,6 +240,8 @@ const struct cpg_mssr_info r8a77980_cpg_mssr_info __initconst = {
/* Critical Module Clocks */
.crit_mod_clks = r8a77980_crit_mod_clks,
.num_crit_mod_clks = ARRAY_SIZE(r8a77980_crit_mod_clks),
+ .ignore_unused_mod_clks = r8a77980_ignore_unused_mod_clks,
+ .num_ignore_unused_mod_clks = ARRAY_SIZE(r8a77980_ignore_unused_mod_clks),
/* Callbacks */
.init = r8a77980_cpg_mssr_init,
diff --git a/drivers/clk/renesas/r8a77990-cpg-mssr.c b/drivers/clk/renesas/r8a77990-cpg-mssr.c
index 8eda2e3..0d5902c 100644
--- a/drivers/clk/renesas/r8a77990-cpg-mssr.c
+++ b/drivers/clk/renesas/r8a77990-cpg-mssr.c
@@ -247,6 +247,9 @@ static const struct mssr_mod_clk r8a77990_mod_clks[] __initconst = {
static const unsigned int r8a77990_crit_mod_clks[] __initconst = {
MOD_CLK_ID(408), /* INTC-AP (GIC) */
};
+static const unsigned int r8a77990_ignore_unused_mod_clks[] __initconst = {
+ MOD_CLK_ID(402), /* RWDT */
+};
/*
* CPG Clock Data
@@ -296,6 +299,8 @@ const struct cpg_mssr_info r8a77990_cpg_mssr_info __initconst = {
/* Critical Module Clocks */
.crit_mod_clks = r8a77990_crit_mod_clks,
.num_crit_mod_clks = ARRAY_SIZE(r8a77990_crit_mod_clks),
+ .ignore_unused_mod_clks = r8a77990_ignore_unused_mod_clks,
+ .num_ignore_unused_mod_clks = ARRAY_SIZE(r8a77990_ignore_unused_mod_clks),
/* Callbacks */
.init = r8a77990_cpg_mssr_init,
diff --git a/drivers/clk/renesas/r8a77995-cpg-mssr.c b/drivers/clk/renesas/r8a77995-cpg-mssr.c
index 056ebf3..c5277e1 100644
--- a/drivers/clk/renesas/r8a77995-cpg-mssr.c
+++ b/drivers/clk/renesas/r8a77995-cpg-mssr.c
@@ -185,7 +185,9 @@ static const struct mssr_mod_clk r8a77995_mod_clks[] __initconst = {
static const unsigned int r8a77995_crit_mod_clks[] __initconst = {
MOD_CLK_ID(408), /* INTC-AP (GIC) */
};
-
+static const unsigned int r8a77995_ignore_unused_mod_clks[] __initconst = {
+ MOD_CLK_ID(402), /* RWDT */
+};
/*
* CPG Clock Data
@@ -235,6 +237,8 @@ const struct cpg_mssr_info r8a77995_cpg_mssr_info __initconst = {
/* Critical Module Clocks */
.crit_mod_clks = r8a77995_crit_mod_clks,
.num_crit_mod_clks = ARRAY_SIZE(r8a77995_crit_mod_clks),
+ .ignore_unused_mod_clks = r8a77995_ignore_unused_mod_clks,
+ .num_ignore_unused_mod_clks = ARRAY_SIZE(r8a77995_ignore_unused_mod_clks),
/* Callbacks */
.init = r8a77995_cpg_mssr_init,
--
2.7.4
^ permalink raw reply related [flat|nested] 6+ messages in thread* [PATCH v2 3/3] clk: renesas: rzg2: mark RWDT clock as ignore-unused
2020-03-16 16:34 [PATCH v2 0/3] clk: renesas: cpg-mssr: add ignore-unused option Ulrich Hecht
2020-03-16 16:34 ` [PATCH v2 1/3] clk: renesas: cpg-mssr: add support for ignore-unused clocks Ulrich Hecht
2020-03-16 16:34 ` [PATCH v2 2/3] clk: renesas: rcar-gen3: mark RWDT clocks as ignore-unused Ulrich Hecht
@ 2020-03-16 16:34 ` Ulrich Hecht
2020-03-18 13:47 ` [PATCH v2 0/3] clk: renesas: cpg-mssr: add ignore-unused option Wolfram Sang
2020-03-18 19:33 ` Wolfram Sang
4 siblings, 0 replies; 6+ messages in thread
From: Ulrich Hecht @ 2020-03-16 16:34 UTC (permalink / raw)
To: linux-renesas-soc
Cc: wsa, geert, fabrizio.castro, ramesh.shanmugasundaram, magnus.damm,
Ulrich Hecht
Ensures RWDT remains alert throughout the boot process if enabled.
This patch applies the change to the following SoCs: r8a774a1,
r8a774b1 and r8a774c0.
Signed-off-by: Ulrich Hecht <uli+renesas@fpond.eu>
---
drivers/clk/renesas/r8a774a1-cpg-mssr.c | 5 +++++
drivers/clk/renesas/r8a774b1-cpg-mssr.c | 5 +++++
drivers/clk/renesas/r8a774c0-cpg-mssr.c | 5 +++++
3 files changed, 15 insertions(+)
diff --git a/drivers/clk/renesas/r8a774a1-cpg-mssr.c b/drivers/clk/renesas/r8a774a1-cpg-mssr.c
index e05bfa2..8573828 100644
--- a/drivers/clk/renesas/r8a774a1-cpg-mssr.c
+++ b/drivers/clk/renesas/r8a774a1-cpg-mssr.c
@@ -239,6 +239,9 @@ static const struct mssr_mod_clk r8a774a1_mod_clks[] __initconst = {
static const unsigned int r8a774a1_crit_mod_clks[] __initconst = {
MOD_CLK_ID(408), /* INTC-AP (GIC) */
};
+static const unsigned int r8a774a1_ignore_unused_mod_clks[] __initconst = {
+ MOD_CLK_ID(402), /* RWDT */
+};
/*
* CPG Clock Data
@@ -324,6 +327,8 @@ const struct cpg_mssr_info r8a774a1_cpg_mssr_info __initconst = {
/* Critical Module Clocks */
.crit_mod_clks = r8a774a1_crit_mod_clks,
.num_crit_mod_clks = ARRAY_SIZE(r8a774a1_crit_mod_clks),
+ .ignore_unused_mod_clks = r8a774a1_ignore_unused_mod_clks,
+ .num_ignore_unused_mod_clks = ARRAY_SIZE(r8a774a1_ignore_unused_mod_clks),
/* Callbacks */
.init = r8a774a1_cpg_mssr_init,
diff --git a/drivers/clk/renesas/r8a774b1-cpg-mssr.c b/drivers/clk/renesas/r8a774b1-cpg-mssr.c
index c9af7091..20666ce 100644
--- a/drivers/clk/renesas/r8a774b1-cpg-mssr.c
+++ b/drivers/clk/renesas/r8a774b1-cpg-mssr.c
@@ -235,6 +235,9 @@ static const struct mssr_mod_clk r8a774b1_mod_clks[] __initconst = {
static const unsigned int r8a774b1_crit_mod_clks[] __initconst = {
MOD_CLK_ID(408), /* INTC-AP (GIC) */
};
+static const unsigned int r8a774b1_ignore_unused_mod_clks[] __initconst = {
+ MOD_CLK_ID(402), /* RWDT */
+};
/*
* CPG Clock Data
@@ -320,6 +323,8 @@ const struct cpg_mssr_info r8a774b1_cpg_mssr_info __initconst = {
/* Critical Module Clocks */
.crit_mod_clks = r8a774b1_crit_mod_clks,
.num_crit_mod_clks = ARRAY_SIZE(r8a774b1_crit_mod_clks),
+ .ignore_unused_mod_clks = r8a774b1_ignore_unused_mod_clks,
+ .num_ignore_unused_mod_clks = ARRAY_SIZE(r8a774b1_ignore_unused_mod_clks),
/* Callbacks */
.init = r8a774b1_cpg_mssr_init,
diff --git a/drivers/clk/renesas/r8a774c0-cpg-mssr.c b/drivers/clk/renesas/r8a774c0-cpg-mssr.c
index f91e7a4..9cc5c50 100644
--- a/drivers/clk/renesas/r8a774c0-cpg-mssr.c
+++ b/drivers/clk/renesas/r8a774c0-cpg-mssr.c
@@ -240,6 +240,9 @@ static const struct mssr_mod_clk r8a774c0_mod_clks[] __initconst = {
static const unsigned int r8a774c0_crit_mod_clks[] __initconst = {
MOD_CLK_ID(408), /* INTC-AP (GIC) */
};
+static const unsigned int r8a774c0_ignore_unused_mod_clks[] __initconst = {
+ MOD_CLK_ID(402), /* RWDT */
+};
/*
* CPG Clock Data
@@ -289,6 +292,8 @@ const struct cpg_mssr_info r8a774c0_cpg_mssr_info __initconst = {
/* Critical Module Clocks */
.crit_mod_clks = r8a774c0_crit_mod_clks,
.num_crit_mod_clks = ARRAY_SIZE(r8a774c0_crit_mod_clks),
+ .ignore_unused_mod_clks = r8a774c0_ignore_unused_mod_clks,
+ .num_ignore_unused_mod_clks = ARRAY_SIZE(r8a774c0_ignore_unused_mod_clks),
/* Callbacks */
.init = r8a774c0_cpg_mssr_init,
--
2.7.4
^ permalink raw reply related [flat|nested] 6+ messages in thread