Merge branches 'clk-doc', 'clk-renesas', 'clk-at91', 'clk-cleanup' and 'clk-debugfs...
authorStephen Boyd <sboyd@kernel.org>
Wed, 12 Jan 2022 02:30:10 +0000 (18:30 -0800)
committerStephen Boyd <sboyd@kernel.org>
Wed, 12 Jan 2022 02:30:10 +0000 (18:30 -0800)
* clk-doc:
  clk: Gemini: fix struct name in kernel-doc
  clk: zynq: pll: Fix kernel-doc warnings
  clk: imx: pllv1: fix kernel-doc notation for struct clk_pllv1

* clk-renesas: (31 commits)
  clk: renesas: r9a07g044: Add GPU clock and reset entries
  clk: renesas: r9a07g044: Add mux and divider for G clock
  clk: renesas: r9a07g044: Rename CLK_PLL3_DIV4 macro
  clk: renesas: cpg-mssr: Add support for R-Car S4-8
  clk: renesas: rcar-gen4: Introduce R-Car Gen4 CPG driver
  dt-bindings: clock: Add r8a779f0 CPG Core Clock Definitions
  dt-bindings: power: Add r8a779f0 SYSC power domain definitions
  clk: renesas: r9a07g044: Add TSU clock and reset entry
  mmc: renesas_sdhi: Simplify an expression
  mmc: renesas_sdhi: Use devm_clk_get_optional() to obtain CD clock
  dt-bindings: clock: renesas,cpg-mssr: Document r8a779f0
  clk: renesas: cpg-mssr: propagate return value of_genpd_add_provider_simple()
  clk: renesas: cpg-mssr: Check return value of pm_genpd_init()
  clk: renesas: rzg2l: propagate return value of_genpd_add_provider_simple()
  clk: renesas: rzg2l: Check return value of pm_genpd_init()
  clk: renesas: r9a07g044: Add RSPI clock and reset entries
  clk: renesas: r9a07g044: Change core clock "I" from DEF_FIXED->DEF_DIV
  clk: renesas: rzg2l: Add CPG_PL1_DDIV macro
  mmc: renesas_sdhi: Parse DT for SDnH
  mmc: renesas_sdhi: Use dev_err_probe when getting clock fails
  ...

* clk-at91:
  clk: lan966x: Extend lan966x clock driver for clock gating support
  dt-bindings: clock: lan966x: Extend includes with clock gates
  dt-bindings: clock: lan966x: Extend for clock gate support
  clk: gate: Add devm_clk_hw_register_gate()
  clk: lan966x: Add lan966x SoC clock driver
  dt-bindings: clock: lan966x: Add LAN966X Clock Controller
  dt-bindings: clock: lan966x: Add binding includes for lan966x SoC clock IDs

* clk-cleanup:
  clk: stm32mp1: remove redundant assignment to pointer data
  clk: __clk_core_init() never takes NULL
  clk: clk_core_get() can also return NULL
  clk/ti/adpll: Make const pointer error a static const array

* clk-debugfs:
  clk: Enable/Disable runtime PM for clk_summary
  clk: Emit a stern warning with writable debugfs enabled
  clk: Add write operation for clk_parent debugfs node

1  2  3  4  5 
drivers/clk/clk.c

diff --combined drivers/clk/clk.c
index f467d63bbf1eefdbc937a324eb477547d6deb5c6,f467d63bbf1eefdbc937a324eb477547d6deb5c6,f467d63bbf1eefdbc937a324eb477547d6deb5c6,d9414a7d585b0e086c445152a0d9cba501754983,a04891872e2e30bd95b43d918ca5c349dc83f5da..c3c48499413e09f50f9540473768855b80086281
@@@@@@ -424,19 -424,19 -424,19 -424,20 -424,19 +424,20 @@@@@@ static void clk_core_fill_parent_index(
     
        if (entry->hw) {
                parent = entry->hw->core;
--- -           /*
--- -            * We have a direct reference but it isn't registered yet?
--- -            * Orphan it and let clk_reparent() update the orphan status
--- -            * when the parent is registered.
--- -            */
--- -           if (!parent)
--- -                   parent = ERR_PTR(-EPROBE_DEFER);
        } else {
                parent = clk_core_get(core, index);
                if (PTR_ERR(parent) == -ENOENT && entry->name)
                        parent = clk_core_lookup(entry->name);
        }
     
+++ +   /*
+++ +    * We have a direct reference but it isn't registered yet?
+++ +    * Orphan it and let clk_reparent() update the orphan status
+++ +    * when the parent is registered.
+++ +    */
+++ +   if (!parent)
+++ +           parent = ERR_PTR(-EPROBE_DEFER);
+++ +
        /* Only cache it if it's not an error */
        if (!IS_ERR(parent))
                entry->core = parent;
@@@@@@ -2965,7 -2965,7 -2965,7 -2966,7 -2965,9 +2966,9 @@@@@@ static void clk_summary_show_subtree(st
     {
        struct clk_core *child;
     
++++    clk_pm_runtime_get(c);
        clk_summary_show_one(s, c, level);
++++    clk_pm_runtime_put(c);
     
        hlist_for_each_entry(child, &c->children, child_node)
                clk_summary_show_subtree(s, child, level + 1);
@@@@@@ -3217,6 -3217,6 -3217,6 -3218,6 -3219,42 +3220,42 @@@@@@ static int current_parent_show(struct s
     }
     DEFINE_SHOW_ATTRIBUTE(current_parent);
     
++++ #ifdef CLOCK_ALLOW_WRITE_DEBUGFS
++++ static ssize_t current_parent_write(struct file *file, const char __user *ubuf,
++++                                size_t count, loff_t *ppos)
++++ {
++++    struct seq_file *s = file->private_data;
++++    struct clk_core *core = s->private;
++++    struct clk_core *parent;
++++    u8 idx;
++++    int err;
++++ 
++++    err = kstrtou8_from_user(ubuf, count, 0, &idx);
++++    if (err < 0)
++++            return err;
++++ 
++++    parent = clk_core_get_parent_by_index(core, idx);
++++    if (!parent)
++++            return -ENOENT;
++++ 
++++    clk_prepare_lock();
++++    err = clk_core_set_parent_nolock(core, parent);
++++    clk_prepare_unlock();
++++    if (err)
++++            return err;
++++ 
++++    return count;
++++ }
++++ 
++++ static const struct file_operations current_parent_rw_fops = {
++++    .open           = current_parent_open,
++++    .write          = current_parent_write,
++++    .read           = seq_read,
++++    .llseek         = seq_lseek,
++++    .release        = single_release,
++++ };
++++ #endif
++++ 
     static int clk_duty_cycle_show(struct seq_file *s, void *data)
     {
        struct clk_core *core = s->private;
@@@@@@ -3282,8 -3282,8 -3282,8 -3283,8 -3320,12 +3321,12 @@@@@@ static void clk_debug_create_one(struc
     #ifdef CLOCK_ALLOW_WRITE_DEBUGFS
        debugfs_create_file("clk_prepare_enable", 0644, root, core,
                            &clk_prepare_enable_fops);
---- #endif
     
++++    if (core->num_parents > 1)
++++            debugfs_create_file("clk_parent", 0644, root, core,
++++                                &current_parent_rw_fops);
++++    else
++++ #endif
        if (core->num_parents > 0)
                debugfs_create_file("clk_parent", 0444, root, core,
                                    &current_parent_fops);
@@@@@@ -3343,6 -3343,6 -3343,6 -3344,6 -3385,24 +3386,24 @@@@@@ static int __init clk_debug_init(void
     {
        struct clk_core *core;
     
++++ #ifdef CLOCK_ALLOW_WRITE_DEBUGFS
++++    pr_warn("\n");
++++    pr_warn("********************************************************************\n");
++++    pr_warn("**     NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE           **\n");
++++    pr_warn("**                                                                **\n");
++++    pr_warn("**  WRITEABLE clk DebugFS SUPPORT HAS BEEN ENABLED IN THIS KERNEL **\n");
++++    pr_warn("**                                                                **\n");
++++    pr_warn("** This means that this kernel is built to expose clk operations  **\n");
++++    pr_warn("** such as parent or rate setting, enabling, disabling, etc.      **\n");
++++    pr_warn("** to userspace, which may compromise security on your system.    **\n");
++++    pr_warn("**                                                                **\n");
++++    pr_warn("** If you see this message and you are not debugging the          **\n");
++++    pr_warn("** kernel, report this immediately to your vendor!                **\n");
++++    pr_warn("**                                                                **\n");
++++    pr_warn("**     NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE           **\n");
++++    pr_warn("********************************************************************\n");
++++ #endif
++++ 
        rootdir = debugfs_create_dir("clk", NULL);
     
        debugfs_create_file("clk_summary", 0444, rootdir, &all_lists,
@@@@@@ -3413,9 -3413,9 -3413,9 -3414,6 -3473,9 +3474,6 @@@@@@ static int __clk_core_init(struct clk_c
        unsigned long rate;
        int phase;
     
--- -   if (!core)
--- -           return -EINVAL;
--- -
        clk_prepare_lock();
     
        ret = clk_pm_runtime_get(core);