diff for duplicates of <20180619170358.33232.26576@harbor.lan> diff --git a/a/1.txt b/N1/1.txt index d98ddbb..9e95f7c 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -1,25 +1,20 @@ Quoting Jerome Brunet (2018-06-19 06:40:51) > CLK_SET_RATE_GATE should prevent any operation which may result in a rate > change or glitch while the clock is prepared/enabled. -> = - +> > IOW, the following sequence is not allowed anymore with CLK_SET_RATE_GATE: > * clk_get() > * clk_prepare_enable() > * clk_get_rate() > * clk_set_rate() -> = - +> > At the moment this is enforced on the leaf clock of the operation, not > along the tree. This problematic because, if a PLL has the CLK_RATE_GATE, > it won't be enforced if the clk_set_rate() is called on its child clocks. -> = - -> Using clock rate protection, we can now enforce CLK_SET_RATE_GATE along t= -he +> +> Using clock rate protection, we can now enforce CLK_SET_RATE_GATE along the > clock tree -> = - +> > Acked-by: Linus Walleij <linus.walleij@linaro.org> > Tested-by: Quentin Schulz <quentin.schulz@free-electrons.com> > Tested-by: Maxime Ripard <maxime.ripard@free-electrons.com> @@ -33,8 +28,7 @@ Mike > --- > drivers/clk/clk.c | 16 +++++++++++++--- > 1 file changed, 13 insertions(+), 3 deletions(-) -> = - +> > diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c > index 9760b526ca31..97c09243fb21 100644 > --- a/drivers/clk/clk.c @@ -42,28 +36,22 @@ Mike > @@ -691,6 +691,9 @@ static void clk_core_unprepare(struct clk_core *core) > "Unpreparing critical %s\n", core->name)) > return; -> = - +> > + if (core->flags & CLK_SET_RATE_GATE) > + clk_core_rate_unprotect(core); > + > if (--core->prepare_count > 0) > return; -> = - +> > @@ -765,6 +768,16 @@ static int clk_core_prepare(struct clk_core *core) -> = - +> > core->prepare_count++; -> = - +> > + /* > + * CLK_SET_RATE_GATE is a special case of clock protection > + * Instead of a consumer claiming exclusive rate control, it is -> + * actually the provider which prevents any consumer from making = -any -> + * operation which could result in a rate change or rate glitch w= -hile +> + * actually the provider which prevents any consumer from making any +> + * operation which could result in a rate change or rate glitch while > + * the clock is prepared. > + */ > + if (core->flags & CLK_SET_RATE_GATE) @@ -72,19 +60,16 @@ hile > return 0; > unprepare: > clk_core_unprepare(core->parent); -> @@ -1888,9 +1901,6 @@ static int clk_core_set_rate_nolock(struct clk_core= - *core, +> @@ -1888,9 +1901,6 @@ static int clk_core_set_rate_nolock(struct clk_core *core, > if (clk_core_rate_is_protected(core)) > return -EBUSY; -> = - +> > - if ((core->flags & CLK_SET_RATE_GATE) && core->prepare_count) > - return -EBUSY; > - > /* calculate new rates and get the topmost changed clock */ -> top =3D clk_calc_new_rates(core, req_rate); +> top = clk_calc_new_rates(core, req_rate); > if (!top) -> -- = - +> -- > 2.14.3 ->=20 +> diff --git a/a/content_digest b/N1/content_digest index cd4d201..d70d939 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -19,25 +19,20 @@ "Quoting Jerome Brunet (2018-06-19 06:40:51)\n" "> CLK_SET_RATE_GATE should prevent any operation which may result in a rate\n" "> change or glitch while the clock is prepared/enabled.\n" - "> =\n" - "\n" + "> \n" "> IOW, the following sequence is not allowed anymore with CLK_SET_RATE_GATE:\n" "> * clk_get()\n" "> * clk_prepare_enable()\n" "> * clk_get_rate()\n" "> * clk_set_rate()\n" - "> =\n" - "\n" + "> \n" "> At the moment this is enforced on the leaf clock of the operation, not\n" "> along the tree. This problematic because, if a PLL has the CLK_RATE_GATE,\n" "> it won't be enforced if the clk_set_rate() is called on its child clocks.\n" - "> =\n" - "\n" - "> Using clock rate protection, we can now enforce CLK_SET_RATE_GATE along t=\n" - "he\n" + "> \n" + "> Using clock rate protection, we can now enforce CLK_SET_RATE_GATE along the\n" "> clock tree\n" - "> =\n" - "\n" + "> \n" "> Acked-by: Linus Walleij <linus.walleij@linaro.org>\n" "> Tested-by: Quentin Schulz <quentin.schulz@free-electrons.com>\n" "> Tested-by: Maxime Ripard <maxime.ripard@free-electrons.com>\n" @@ -51,8 +46,7 @@ "> ---\n" "> drivers/clk/clk.c | 16 +++++++++++++---\n" "> 1 file changed, 13 insertions(+), 3 deletions(-)\n" - "> =\n" - "\n" + "> \n" "> diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c\n" "> index 9760b526ca31..97c09243fb21 100644\n" "> --- a/drivers/clk/clk.c\n" @@ -60,28 +54,22 @@ "> @@ -691,6 +691,9 @@ static void clk_core_unprepare(struct clk_core *core)\n" "> \"Unpreparing critical %s\\n\", core->name))\n" "> return;\n" - "> =\n" - "\n" + "> \n" "> + if (core->flags & CLK_SET_RATE_GATE)\n" "> + clk_core_rate_unprotect(core);\n" "> +\n" "> if (--core->prepare_count > 0)\n" "> return;\n" - "> =\n" - "\n" + "> \n" "> @@ -765,6 +768,16 @@ static int clk_core_prepare(struct clk_core *core)\n" - "> =\n" - "\n" + "> \n" "> core->prepare_count++;\n" - "> =\n" - "\n" + "> \n" "> + /*\n" "> + * CLK_SET_RATE_GATE is a special case of clock protection\n" "> + * Instead of a consumer claiming exclusive rate control, it is\n" - "> + * actually the provider which prevents any consumer from making =\n" - "any\n" - "> + * operation which could result in a rate change or rate glitch w=\n" - "hile\n" + "> + * actually the provider which prevents any consumer from making any\n" + "> + * operation which could result in a rate change or rate glitch while\n" "> + * the clock is prepared.\n" "> + */\n" "> + if (core->flags & CLK_SET_RATE_GATE)\n" @@ -90,21 +78,18 @@ "> return 0;\n" "> unprepare:\n" "> clk_core_unprepare(core->parent);\n" - "> @@ -1888,9 +1901,6 @@ static int clk_core_set_rate_nolock(struct clk_core=\n" - " *core,\n" + "> @@ -1888,9 +1901,6 @@ static int clk_core_set_rate_nolock(struct clk_core *core,\n" "> if (clk_core_rate_is_protected(core))\n" "> return -EBUSY;\n" - "> =\n" - "\n" + "> \n" "> - if ((core->flags & CLK_SET_RATE_GATE) && core->prepare_count)\n" "> - return -EBUSY;\n" "> -\n" "> /* calculate new rates and get the topmost changed clock */\n" - "> top =3D clk_calc_new_rates(core, req_rate);\n" + "> top = clk_calc_new_rates(core, req_rate);\n" "> if (!top)\n" - "> -- =\n" - "\n" + "> -- \n" "> 2.14.3\n" - >=20 + > -47a146f03f4e7fa898843c06778135864906f7c53c0e30b24b3892bb329d4d92 +a463395f0bfccf8ca97cc64ec59d555ab42b2b07048a7f0236e8b03e7007cb2a
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.