[PATCH 37/45] clk: tegra: Make sure clk_init_data is fully initialized
Geert Uytterhoeven
geert+renesas at glider.be
Fri Aug 21 01:53:47 PDT 2026
The clk_init_data structure contains several mutually-exclusive members
for different methods to specify the possible parents of a clock,
prompting drivers to initialize only the members they need. However,
not initializing all members may cause subtle issues, which are only
exposed when CONFIG_INIT_STACK_ALL_PATTERN or CONFIG_INIT_STACK_NONE is
enabled.
Make sure all members are fully initialized, to avoid such bugs, and to
prevent future breakage when converting drivers to a different method
for specifying the parents.
Signed-off-by: Geert Uytterhoeven <geert+renesas at glider.be>
---
Compile-tested only.
---
drivers/clk/tegra/clk-audio-sync.c | 2 +-
drivers/clk/tegra/clk-divider.c | 2 +-
drivers/clk/tegra/clk-periph-fixed.c | 2 +-
drivers/clk/tegra/clk-periph-gate.c | 2 +-
drivers/clk/tegra/clk-periph.c | 2 +-
drivers/clk/tegra/clk-pll-out.c | 2 +-
drivers/clk/tegra/clk-pll.c | 2 +-
drivers/clk/tegra/clk-sdmmc-mux.c | 2 +-
drivers/clk/tegra/clk-super.c | 4 ++--
drivers/clk/tegra/clk-tegra-super-cclk.c | 2 +-
drivers/clk/tegra/clk-tegra124-emc.c | 2 +-
drivers/clk/tegra/clk-tegra20-emc.c | 2 +-
drivers/clk/tegra/clk-tegra210-emc.c | 2 +-
13 files changed, 14 insertions(+), 14 deletions(-)
diff --git a/drivers/clk/tegra/clk-audio-sync.c b/drivers/clk/tegra/clk-audio-sync.c
index 0bbfcf46bedd521e..0fb4377c80bf2a04 100644
--- a/drivers/clk/tegra/clk-audio-sync.c
+++ b/drivers/clk/tegra/clk-audio-sync.c
@@ -47,7 +47,7 @@ struct clk *tegra_clk_register_sync_source(const char *name,
unsigned long max_rate)
{
struct tegra_clk_sync_source *sync;
- struct clk_init_data init;
+ struct clk_init_data init = {};
struct clk *clk;
sync = kzalloc_obj(*sync);
diff --git a/drivers/clk/tegra/clk-divider.c b/drivers/clk/tegra/clk-divider.c
index 27f43c3da1563e92..2dc7713433451754 100644
--- a/drivers/clk/tegra/clk-divider.c
+++ b/drivers/clk/tegra/clk-divider.c
@@ -145,8 +145,8 @@ struct clk *tegra_clk_register_divider(const char *name,
u8 frac_width, spinlock_t *lock)
{
struct tegra_clk_frac_div *divider;
+ struct clk_init_data init = {};
struct clk *clk;
- struct clk_init_data init;
divider = kzalloc_obj(*divider);
if (!divider) {
diff --git a/drivers/clk/tegra/clk-periph-fixed.c b/drivers/clk/tegra/clk-periph-fixed.c
index bb33e32cad4a1732..9ea9d41f47963168 100644
--- a/drivers/clk/tegra/clk-periph-fixed.c
+++ b/drivers/clk/tegra/clk-periph-fixed.c
@@ -77,7 +77,7 @@ struct clk *tegra_clk_register_periph_fixed(const char *name,
{
const struct tegra_clk_periph_regs *regs;
struct tegra_clk_periph_fixed *fixed;
- struct clk_init_data init;
+ struct clk_init_data init = {};
struct clk *clk;
regs = get_reg_bank(num);
diff --git a/drivers/clk/tegra/clk-periph-gate.c b/drivers/clk/tegra/clk-periph-gate.c
index fa39d64875154efe..d821e1b9f77e6ba3 100644
--- a/drivers/clk/tegra/clk-periph-gate.c
+++ b/drivers/clk/tegra/clk-periph-gate.c
@@ -139,7 +139,7 @@ struct clk *tegra_clk_register_periph_gate(const char *name,
{
struct tegra_clk_periph_gate *gate;
struct clk *clk;
- struct clk_init_data init;
+ struct clk_init_data init = {};
const struct tegra_clk_periph_regs *pregs;
pregs = get_reg_bank(clk_num);
diff --git a/drivers/clk/tegra/clk-periph.c b/drivers/clk/tegra/clk-periph.c
index 6ebeaa7cb65648e7..7af832d9af9b011f 100644
--- a/drivers/clk/tegra/clk-periph.c
+++ b/drivers/clk/tegra/clk-periph.c
@@ -166,7 +166,7 @@ static struct clk *_tegra_clk_register_periph(const char *name,
unsigned long flags)
{
struct clk *clk;
- struct clk_init_data init;
+ struct clk_init_data init = {};
const struct tegra_clk_periph_regs *bank;
bool div = !(periph->gate.flags & TEGRA_PERIPH_NO_DIV);
diff --git a/drivers/clk/tegra/clk-pll-out.c b/drivers/clk/tegra/clk-pll-out.c
index 2299545fc386f87b..285b0af811fb1903 100644
--- a/drivers/clk/tegra/clk-pll-out.c
+++ b/drivers/clk/tegra/clk-pll-out.c
@@ -90,8 +90,8 @@ struct clk *tegra_clk_register_pll_out(const char *name,
spinlock_t *lock)
{
struct tegra_clk_pll_out *pll_out;
+ struct clk_init_data init = {};
struct clk *clk;
- struct clk_init_data init;
pll_out = kzalloc_obj(*pll_out);
if (!pll_out)
diff --git a/drivers/clk/tegra/clk-pll.c b/drivers/clk/tegra/clk-pll.c
index adfb74f111ef1afd..fc3abe86414ddd11 100644
--- a/drivers/clk/tegra/clk-pll.c
+++ b/drivers/clk/tegra/clk-pll.c
@@ -1903,7 +1903,7 @@ static struct clk *_tegra_clk_register_pll(struct tegra_clk_pll *pll,
const char *name, const char *parent_name, unsigned long flags,
const struct clk_ops *ops)
{
- struct clk_init_data init;
+ struct clk_init_data init = {};
init.name = name;
init.ops = ops;
diff --git a/drivers/clk/tegra/clk-sdmmc-mux.c b/drivers/clk/tegra/clk-sdmmc-mux.c
index 14b5439a100a0cef..74fe06fa546abf47 100644
--- a/drivers/clk/tegra/clk-sdmmc-mux.c
+++ b/drivers/clk/tegra/clk-sdmmc-mux.c
@@ -236,7 +236,7 @@ struct clk *tegra_clk_register_sdmmc_mux_div(const char *name,
unsigned long flags, void *lock)
{
struct clk *clk;
- struct clk_init_data init;
+ struct clk_init_data init = {};
const struct tegra_clk_periph_regs *bank;
struct tegra_sdmmc_mux *sdmmc_mux;
diff --git a/drivers/clk/tegra/clk-super.c b/drivers/clk/tegra/clk-super.c
index 370445e3d5acc34e..7aa3c3774445d32c 100644
--- a/drivers/clk/tegra/clk-super.c
+++ b/drivers/clk/tegra/clk-super.c
@@ -204,8 +204,8 @@ struct clk *tegra_clk_register_super_mux(const char *name,
u8 width, u8 pllx_index, u8 div2_index, spinlock_t *lock)
{
struct tegra_clk_super_mux *super;
+ struct clk_init_data init = {};
struct clk *clk;
- struct clk_init_data init;
super = kzalloc_obj(*super);
if (!super)
@@ -240,8 +240,8 @@ struct clk *tegra_clk_register_super_clk(const char *name,
spinlock_t *lock)
{
struct tegra_clk_super_mux *super;
+ struct clk_init_data init = {};
struct clk *clk;
- struct clk_init_data init;
super = kzalloc_obj(*super);
if (!super)
diff --git a/drivers/clk/tegra/clk-tegra-super-cclk.c b/drivers/clk/tegra/clk-tegra-super-cclk.c
index e7aeb67606b11390..1047a1104ec1f5d7 100644
--- a/drivers/clk/tegra/clk-tegra-super-cclk.c
+++ b/drivers/clk/tegra/clk-tegra-super-cclk.c
@@ -135,8 +135,8 @@ struct clk *tegra_clk_register_super_cclk(const char *name,
spinlock_t *lock)
{
struct tegra_clk_super_mux *super;
+ struct clk_init_data init = {};
struct clk *clk;
- struct clk_init_data init;
u32 val;
if (WARN_ON(cclk_super))
diff --git a/drivers/clk/tegra/clk-tegra124-emc.c b/drivers/clk/tegra/clk-tegra124-emc.c
index 94ac24ea1e6adc37..0fc74808fe39b2f7 100644
--- a/drivers/clk/tegra/clk-tegra124-emc.c
+++ b/drivers/clk/tegra/clk-tegra124-emc.c
@@ -485,8 +485,8 @@ static const struct clk_ops tegra_clk_emc_ops = {
struct clk *tegra124_clk_register_emc(void __iomem *base, struct device_node *np,
spinlock_t *lock)
{
+ struct clk_init_data init = {};
struct tegra_clk_emc *tegra;
- struct clk_init_data init;
struct device_node *node;
u32 node_ram_code;
struct clk *clk;
diff --git a/drivers/clk/tegra/clk-tegra20-emc.c b/drivers/clk/tegra/clk-tegra20-emc.c
index 44465726a8a67005..5cd026e8f305a35a 100644
--- a/drivers/clk/tegra/clk-tegra20-emc.c
+++ b/drivers/clk/tegra/clk-tegra20-emc.c
@@ -245,8 +245,8 @@ bool tegra20_clk_emc_driver_available(struct clk_hw *emc_hw)
struct clk *tegra20_clk_register_emc(void __iomem *ioaddr, bool low_jitter)
{
+ struct clk_init_data init = {};
struct tegra_clk_emc *emc;
- struct clk_init_data init;
struct clk *clk;
emc = kzalloc_obj(*emc);
diff --git a/drivers/clk/tegra/clk-tegra210-emc.c b/drivers/clk/tegra/clk-tegra210-emc.c
index 9f140d94bef75560..2e559d95d40e7d50 100644
--- a/drivers/clk/tegra/clk-tegra210-emc.c
+++ b/drivers/clk/tegra/clk-tegra210-emc.c
@@ -274,8 +274,8 @@ static const struct clk_ops tegra210_clk_emc_ops = {
struct clk *tegra210_clk_register_emc(struct device_node *np,
void __iomem *regs)
{
+ struct clk_init_data init = {};
struct tegra210_clk_emc *emc;
- struct clk_init_data init;
struct clk *clk;
emc = kzalloc_obj(*emc);
--
2.43.0
More information about the Linux-mediatek
mailing list