All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4 00/28] clk: More clock rate fixes and tests
@ 2022-05-12 16:03 Maxime Ripard
  2022-05-12 16:03 ` [PATCH v4 01/28] clk: Drop the rate range on clk_put() Maxime Ripard
                   ` (27 more replies)
  0 siblings, 28 replies; 35+ messages in thread
From: Maxime Ripard @ 2022-05-12 16:03 UTC (permalink / raw)
  To: Mike Turquette, Stephen Boyd, linux-clk
  Cc: Naresh Kamboju, Alexander Stein, Jerome Brunet, Dmitry Baryshkov,
	Marek Szyprowski, Yassine Oudjana, Tony Lindgren, Neil Armstrong,
	Maxime Ripard

Hi,

Thanks to the feedback I got on the previous series, I found and fixed a
number of bugs in the clock framework and how it deals with rates,
especially when it comes to orphan clocks.

In order to make sure this doesn't pop up again as a regression, I've
extended the number of tests.

The first patch reintroduces the clk_set_rate_range call on clk_put, but
this time will only do so if there was a range set on that clock to
begin with. It should be less intrusive, and reduce the number of
potential side effects considerably.

We then have a fix for the qcom rcg2 issue that has been reported
recently, and two patches to address a regression with the RaspberryPi4.

All the other patches should be probably be flagged as fixes, but
they've never seem to have shown any real-world issues until now, and
they aren't all really trivial to backport either, so I'm not sure it's
worth it.

There's also some documentation improvements for recalc_rate and
clk_get_rate to hopefully make the documentation less ambiguous and
acknowledge that recalc_rate() returning 0 on error is fine.

Let me know what you think,
Maxime

Changes from v3:
  - constness warning fix in clk_core_forward_rate_req

Changes from v2:
  - Rebased on top of current next
  - Fixed locking issue in clk_get_rate_range

Changes from v1:
  - Rebased on top of next-20220428
  - Dropped the patch to prevent non-orphan clocks from registering if
    their recalc_rate hook returns 0
  - Added some patches to clarify the clk_get_rate and recalc_rate
    documentation
  - Dropped the patch to skip the range setup on an orphan clock that
    was introducing a regression on RaspberryPi3 when a monitor wasn't
    connected at boot
  - Added a patch to skip the rate clamping in clk_round_rate() when
    min_rate == max_rate == 0
  - Added a new set of functions to query the clk boundaries and fix a
    regression with the RaspberryPi4
  - Fixed all the drivers hand-crafting their clk_rate_request
  - Reworded the test suite descriptions
  - Reordered a few patches to ease the review
  - Reworded some commit logs to better explain the issues they address
  - Collected the Tested-by of Alexander and Marek
  - More tests

Maxime Ripard (28):
  clk: Drop the rate range on clk_put()
  clk: Skip clamping when rounding if there's no boundaries
  clk: Introduce clk_get_rate_range()
  drm/vc4: hdmi: Rework hdmi_enable_4kp60 detection
  clk: Mention that .recalc_rate can return 0 on error
  clk: Clarify clk_get_rate() expectations
  clk: tests: Add test suites description
  clk: tests: Add reference to the orphan mux bug report
  clk: tests: Add tests for uncached clock
  clk: tests: Add tests for single parent mux
  clk: tests: Add tests for mux with multiple parents
  clk: tests: Add some tests for orphan with multiple parents
  clk: Take into account uncached clocks in clk_set_rate_range()
  clk: Fix clk_get_parent() documentation
  clk: Set req_rate on reparenting
  clk: Change clk_core_init_rate_req prototype
  clk: Move clk_core_init_rate_req() from clk_core_round_rate_nolock()
    to its caller
  clk: Introduce clk_hw_init_rate_request()
  clk: Add our request boundaries in clk_core_init_rate_req
  clk: Switch from __clk_determine_rate to clk_core_round_rate_nolock
  clk: Introduce clk_core_has_parent()
  clk: Stop forwarding clk_rate_requests to the parent
  clk: Zero the clk_rate_request structure
  clk: Test the clock pointer in clk_hw_get_name()
  clk: Introduce the clk_hw_get_rate_range function
  clk: qcom: clk-rcg2: Take clock boundaries into consideration for
    gfx3d
  clk: tests: Add some tests for clk_get_rate_range()
  clk: tests: Add missing test case for ranges

 drivers/clk/at91/clk-generated.c  |    4 +-
 drivers/clk/at91/clk-master.c     |    9 +-
 drivers/clk/at91/clk-peripheral.c |    4 +-
 drivers/clk/clk-composite.c       |    6 +-
 drivers/clk/clk-divider.c         |   20 +-
 drivers/clk/clk.c                 |  304 ++++--
 drivers/clk/clk_test.c            | 1465 ++++++++++++++++++++++++++++-
 drivers/clk/qcom/clk-rcg2.c       |    9 +
 drivers/gpu/drm/vc4/vc4_hdmi.c    |    2 +-
 include/linux/clk-provider.h      |   18 +-
 include/linux/clk.h               |   64 +-
 11 files changed, 1814 insertions(+), 91 deletions(-)

-- 
2.36.1


^ permalink raw reply	[flat|nested] 35+ messages in thread
* Re: [PATCH v4 22/28] clk: Stop forwarding clk_rate_requests to the parent
@ 2022-05-13 12:04 kernel test robot
  0 siblings, 0 replies; 35+ messages in thread
From: kernel test robot @ 2022-05-13 12:04 UTC (permalink / raw)
  To: kbuild

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

CC: llvm(a)lists.linux.dev
CC: kbuild-all(a)lists.01.org
BCC: lkp(a)intel.com
In-Reply-To: <20220512160412.1317123-23-maxime@cerno.tech>
References: <20220512160412.1317123-23-maxime@cerno.tech>
TO: Maxime Ripard <maxime@cerno.tech>
TO: Mike Turquette <mturquette@baylibre.com>
TO: Stephen Boyd <sboyd@kernel.org>
TO: linux-clk(a)vger.kernel.org
CC: Naresh Kamboju <naresh.kamboju@linaro.org>
CC: Alexander Stein <alexander.stein@ew.tq-group.com>
CC: Jerome Brunet <jbrunet@baylibre.com>
CC: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
CC: Marek Szyprowski <m.szyprowski@samsung.com>
CC: Yassine Oudjana <y.oudjana@protonmail.com>
CC: Tony Lindgren <tony@atomide.com>
CC: Neil Armstrong <narmstrong@baylibre.com>
CC: Maxime Ripard <maxime@cerno.tech>

Hi Maxime,

I love your patch! Perhaps something to improve:

[auto build test WARNING on clk/clk-next]
[also build test WARNING on linus/master v5.18-rc6 next-20220512]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]

url:    https://github.com/intel-lab-lkp/linux/commits/Maxime-Ripard/clk-More-clock-rate-fixes-and-tests/20220513-001815
base:   https://git.kernel.org/pub/scm/linux/kernel/git/clk/linux.git clk-next
:::::: branch date: 20 hours ago
:::::: commit date: 20 hours ago
config: riscv-randconfig-c006-20220512 (https://download.01.org/0day-ci/archive/20220513/202205131941.J8EMbNIW-lkp(a)intel.com/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 9519dacab7b8afd537811fc2abaceb4d14f4e16a)
reproduce (this is a W=1 build):
        wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install riscv cross compiling tool for clang build
        # apt-get install binutils-riscv64-linux-gnu
        # https://github.com/intel-lab-lkp/linux/commit/2034099e179a2af8cd5752935973b61236748c0c
        git remote add linux-review https://github.com/intel-lab-lkp/linux
        git fetch --no-tags linux-review Maxime-Ripard/clk-More-clock-rate-fixes-and-tests/20220513-001815
        git checkout 2034099e179a2af8cd5752935973b61236748c0c
        # save the config file
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=riscv clang-analyzer 

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


clang-analyzer warnings: (new ones prefixed by >>)
                             ^
   drivers/clk/clk.c:1607:6: note: Assuming 'clk' is non-null
           if (!clk)
               ^~~~
   drivers/clk/clk.c:1607:2: note: Taking false branch
           if (!clk)
           ^
   drivers/clk/clk.c:1612:6: note: Assuming field 'exclusive_count' is 0
           if (clk->exclusive_count)
               ^~~~~~~~~~~~~~~~~~~~
   drivers/clk/clk.c:1612:2: note: Taking false branch
           if (clk->exclusive_count)
           ^
   drivers/clk/clk.c:1617:8: note: Calling 'clk_core_round_rate_nolock'
           ret = clk_core_round_rate_nolock(clk->core, &req);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/clk/clk.c:1517:2: note: Assuming 'debug_locks' is 0
           lockdep_assert_held(&prepare_lock);
           ^
   include/linux/lockdep.h:316:2: note: expanded from macro 'lockdep_assert_held'
           lockdep_assert(lockdep_is_held(l) != LOCK_STATE_NOT_HELD)
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/lockdep.h:310:15: note: expanded from macro 'lockdep_assert'
           do { WARN_ON(debug_locks && !(cond)); } while (0)
                        ^~~~~~~~~~~
   include/asm-generic/bug.h:166:25: note: expanded from macro 'WARN_ON'
           int __ret_warn_on = !!(condition);                              \
                                  ^~~~~~~~~
   drivers/clk/clk.c:1517:2: note: Left side of '&&' is false
           lockdep_assert_held(&prepare_lock);
           ^
   include/linux/lockdep.h:316:2: note: expanded from macro 'lockdep_assert_held'
           lockdep_assert(lockdep_is_held(l) != LOCK_STATE_NOT_HELD)
           ^
   include/linux/lockdep.h:310:27: note: expanded from macro 'lockdep_assert'
           do { WARN_ON(debug_locks && !(cond)); } while (0)
                                    ^
   drivers/clk/clk.c:1517:2: note: Loop condition is false.  Exiting loop
           lockdep_assert_held(&prepare_lock);
           ^
   include/linux/lockdep.h:316:2: note: expanded from macro 'lockdep_assert_held'
           lockdep_assert(lockdep_is_held(l) != LOCK_STATE_NOT_HELD)
           ^
   include/linux/lockdep.h:310:2: note: expanded from macro 'lockdep_assert'
           do { WARN_ON(debug_locks && !(cond)); } while (0)
           ^
   drivers/clk/clk.c:1519:7: note: 'core' is non-null
           if (!core) {
                ^~~~
   drivers/clk/clk.c:1519:2: note: Taking false branch
           if (!core) {
           ^
   drivers/clk/clk.c:1524:6: note: Assuming the condition is false
           if (clk_core_can_round(core))
               ^~~~~~~~~~~~~~~~~~~~~~~~
   drivers/clk/clk.c:1524:2: note: Taking false branch
           if (clk_core_can_round(core))
           ^
   drivers/clk/clk.c:1527:6: note: Assuming the condition is true
           if (core->flags & CLK_SET_RATE_PARENT) {
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/clk/clk.c:1527:2: note: Taking true branch
           if (core->flags & CLK_SET_RATE_PARENT) {
           ^
   drivers/clk/clk.c:1530:3: note: Calling 'clk_core_forward_rate_req'
                   clk_core_forward_rate_req(core, req, core->parent, &parent_req, req->rate);
                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/clk/clk.c:573:14: note: Assuming the condition is false
           if (WARN_ON(!clk_core_has_parent(core, parent)))
                       ^
   include/asm-generic/bug.h:166:25: note: expanded from macro 'WARN_ON'
           int __ret_warn_on = !!(condition);                              \
                                  ^~~~~~~~~
   drivers/clk/clk.c:573:2: note: Taking false branch
           if (WARN_ON(!clk_core_has_parent(core, parent)))
           ^
   drivers/clk/clk.c:576:2: note: Calling 'clk_core_init_rate_req'
           clk_core_init_rate_req(parent, req, parent_rate);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/clk/clk.c:1446:15: note: 'core' is null
           if (WARN_ON(!core || !req))
                        ^
   include/asm-generic/bug.h:166:25: note: expanded from macro 'WARN_ON'
           int __ret_warn_on = !!(condition);                              \
                                  ^~~~~~~~~
   drivers/clk/clk.c:1446:20: note: Left side of '||' is true
           if (WARN_ON(!core || !req))
                             ^
   drivers/clk/clk.c:1446:2: note: Taking true branch
           if (WARN_ON(!core || !req))
           ^
   drivers/clk/clk.c:1447:3: note: Returning without writing to 'req->min_rate'
                   return;
                   ^
   drivers/clk/clk.c:576:2: note: Returning from 'clk_core_init_rate_req'
           clk_core_init_rate_req(parent, req, parent_rate);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/clk/clk.c:578:20: note: The left operand of '<' is a garbage value
           if (req->min_rate < old_req->min_rate)
               ~~~~~~~~~~~~~ ^
>> drivers/clk/clk.c:1410:6: warning: Branch condition evaluates to a garbage value [clang-analyzer-core.uninitialized.Branch]
           if (!req->min_rate && !req->max_rate)
               ^
   drivers/clk/clk.c:1607:6: note: Assuming 'clk' is non-null
           if (!clk)
               ^~~~
   drivers/clk/clk.c:1607:2: note: Taking false branch
           if (!clk)
           ^
   drivers/clk/clk.c:1612:6: note: Assuming field 'exclusive_count' is 0
           if (clk->exclusive_count)
               ^~~~~~~~~~~~~~~~~~~~
   drivers/clk/clk.c:1612:2: note: Taking false branch
           if (clk->exclusive_count)
           ^
   drivers/clk/clk.c:1615:2: note: Calling 'clk_core_init_rate_req'
           clk_core_init_rate_req(clk->core, &req, rate);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/clk/clk.c:1446:14: note: Assuming 'core' is non-null
           if (WARN_ON(!core || !req))
                       ^
   include/asm-generic/bug.h:166:25: note: expanded from macro 'WARN_ON'
           int __ret_warn_on = !!(condition);                              \
                                  ^~~~~~~~~
   drivers/clk/clk.c:1446:14: note: Left side of '||' is false
           if (WARN_ON(!core || !req))
                       ^
   drivers/clk/clk.c:1446:2: note: Taking false branch
           if (WARN_ON(!core || !req))
           ^
   drivers/clk/clk.c:1453:6: note: Assuming 'parent' is null
           if (parent) {
               ^~~~~~
   drivers/clk/clk.c:1453:2: note: Taking false branch
           if (parent) {
           ^
   drivers/clk/clk.c:1615:2: note: Returning from 'clk_core_init_rate_req'
           clk_core_init_rate_req(clk->core, &req, rate);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/clk/clk.c:1617:8: note: Calling 'clk_core_round_rate_nolock'
           ret = clk_core_round_rate_nolock(clk->core, &req);
                 ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/clk/clk.c:1517:2: note: Assuming 'debug_locks' is 0
           lockdep_assert_held(&prepare_lock);
           ^
   include/linux/lockdep.h:316:2: note: expanded from macro 'lockdep_assert_held'
           lockdep_assert(lockdep_is_held(l) != LOCK_STATE_NOT_HELD)
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/lockdep.h:310:15: note: expanded from macro 'lockdep_assert'
           do { WARN_ON(debug_locks && !(cond)); } while (0)
                        ^~~~~~~~~~~
   include/asm-generic/bug.h:166:25: note: expanded from macro 'WARN_ON'
           int __ret_warn_on = !!(condition);                              \
                                  ^~~~~~~~~
   drivers/clk/clk.c:1517:2: note: Left side of '&&' is false
           lockdep_assert_held(&prepare_lock);
           ^
   include/linux/lockdep.h:316:2: note: expanded from macro 'lockdep_assert_held'
           lockdep_assert(lockdep_is_held(l) != LOCK_STATE_NOT_HELD)
           ^
   include/linux/lockdep.h:310:27: note: expanded from macro 'lockdep_assert'
           do { WARN_ON(debug_locks && !(cond)); } while (0)
                                    ^
   drivers/clk/clk.c:1517:2: note: Loop condition is false.  Exiting loop
           lockdep_assert_held(&prepare_lock);
           ^
   include/linux/lockdep.h:316:2: note: expanded from macro 'lockdep_assert_held'
           lockdep_assert(lockdep_is_held(l) != LOCK_STATE_NOT_HELD)
           ^
   include/linux/lockdep.h:310:2: note: expanded from macro 'lockdep_assert'
           do { WARN_ON(debug_locks && !(cond)); } while (0)
           ^
   drivers/clk/clk.c:1519:7: note: 'core' is non-null
           if (!core) {
                ^~~~
   drivers/clk/clk.c:1519:2: note: Taking false branch
           if (!core) {
           ^
   drivers/clk/clk.c:1524:6: note: Calling 'clk_core_can_round'
           if (clk_core_can_round(core))
               ^~~~~~~~~~~~~~~~~~~~~~~~
   drivers/clk/clk.c:1509:9: note: Assuming field 'determine_rate' is null
           return core->ops->determine_rate || core->ops->round_rate;
                  ^~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/clk/clk.c:1509:9: note: Left side of '||' is false
   drivers/clk/clk.c:1509:2: note: Returning without writing to 'core->parent', which participates in a condition later
           return core->ops->determine_rate || core->ops->round_rate;
           ^
   drivers/clk/clk.c:1524:6: note: Returning from 'clk_core_can_round'
           if (clk_core_can_round(core))
               ^~~~~~~~~~~~~~~~~~~~~~~~
   drivers/clk/clk.c:1524:6: note: Assuming the condition is false
           if (clk_core_can_round(core))
               ^~~~~~~~~~~~~~~~~~~~~~~~
   drivers/clk/clk.c:1524:2: note: Taking false branch
           if (clk_core_can_round(core))
           ^
   drivers/clk/clk.c:1527:6: note: Assuming the condition is true
           if (core->flags & CLK_SET_RATE_PARENT) {
               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/clk/clk.c:1527:2: note: Taking true branch

vim +1410 drivers/clk/clk.c

7ec986efed0208 Dong Aisheng       2016-06-30  1391  
0f6cc2b8e94da5 Jerome Brunet      2017-12-01  1392  static int clk_core_determine_round_nolock(struct clk_core *core,
0817b62cc037a5 Boris Brezillon    2015-07-07  1393  					   struct clk_rate_request *req)
b2476490ef1113 Mike Turquette     2012-03-15  1394  {
0817b62cc037a5 Boris Brezillon    2015-07-07  1395  	long rate;
4dff95dc9477a3 Stephen Boyd       2015-04-30  1396  
4dff95dc9477a3 Stephen Boyd       2015-04-30  1397  	lockdep_assert_held(&prepare_lock);
b2476490ef1113 Mike Turquette     2012-03-15  1398  
d6968fca789700 Stephen Boyd       2015-04-30  1399  	if (!core)
4dff95dc9477a3 Stephen Boyd       2015-04-30  1400  		return 0;
b2476490ef1113 Mike Turquette     2012-03-15  1401  
8f3363af8a3536 Maxime Ripard      2022-05-12  1402  	/*
8f3363af8a3536 Maxime Ripard      2022-05-12  1403  	 * Some clock providers hand-craft their clk_rate_requests and
8f3363af8a3536 Maxime Ripard      2022-05-12  1404  	 * might not fill min_rate and max_rate.
8f3363af8a3536 Maxime Ripard      2022-05-12  1405  	 *
8f3363af8a3536 Maxime Ripard      2022-05-12  1406  	 * If it's the case, clamping the rate is equivalent to setting
8f3363af8a3536 Maxime Ripard      2022-05-12  1407  	 * the rate to 0 which is bad. Skip the clamping but complain so
8f3363af8a3536 Maxime Ripard      2022-05-12  1408  	 * that it gets fixed, hopefully.
8f3363af8a3536 Maxime Ripard      2022-05-12  1409  	 */
8f3363af8a3536 Maxime Ripard      2022-05-12 @1410  	if (!req->min_rate && !req->max_rate)
8f3363af8a3536 Maxime Ripard      2022-05-12  1411  		pr_warn("%s: %s: clk_rate_request has initialized min or max rate.\n",
8f3363af8a3536 Maxime Ripard      2022-05-12  1412  			__func__, core->name);
8f3363af8a3536 Maxime Ripard      2022-05-12  1413  	else
948fb0969eae85 Maxime Ripard      2022-02-25  1414  		req->rate = clamp(req->rate, req->min_rate, req->max_rate);
948fb0969eae85 Maxime Ripard      2022-02-25  1415  
55e9b8b7b806ec Jerome Brunet      2017-12-01  1416  	/*
e27453adcadd7b Geert Uytterhoeven 2021-03-26  1417  	 * At this point, core protection will be disabled
55e9b8b7b806ec Jerome Brunet      2017-12-01  1418  	 * - if the provider is not protected at all
55e9b8b7b806ec Jerome Brunet      2017-12-01  1419  	 * - if the calling consumer is the only one which has exclusivity
55e9b8b7b806ec Jerome Brunet      2017-12-01  1420  	 *   over the provider
55e9b8b7b806ec Jerome Brunet      2017-12-01  1421  	 */
e55a839a7a1c56 Jerome Brunet      2017-12-01  1422  	if (clk_core_rate_is_protected(core)) {
e55a839a7a1c56 Jerome Brunet      2017-12-01  1423  		req->rate = core->rate;
e55a839a7a1c56 Jerome Brunet      2017-12-01  1424  	} else if (core->ops->determine_rate) {
0817b62cc037a5 Boris Brezillon    2015-07-07  1425  		return core->ops->determine_rate(core->hw, req);
0817b62cc037a5 Boris Brezillon    2015-07-07  1426  	} else if (core->ops->round_rate) {
0817b62cc037a5 Boris Brezillon    2015-07-07  1427  		rate = core->ops->round_rate(core->hw, req->rate,
0817b62cc037a5 Boris Brezillon    2015-07-07  1428  					     &req->best_parent_rate);
0817b62cc037a5 Boris Brezillon    2015-07-07  1429  		if (rate < 0)
0817b62cc037a5 Boris Brezillon    2015-07-07  1430  			return rate;
0817b62cc037a5 Boris Brezillon    2015-07-07  1431  
0817b62cc037a5 Boris Brezillon    2015-07-07  1432  		req->rate = rate;
0817b62cc037a5 Boris Brezillon    2015-07-07  1433  	} else {
0f6cc2b8e94da5 Jerome Brunet      2017-12-01  1434  		return -EINVAL;
0f6cc2b8e94da5 Jerome Brunet      2017-12-01  1435  	}
0f6cc2b8e94da5 Jerome Brunet      2017-12-01  1436  
0f6cc2b8e94da5 Jerome Brunet      2017-12-01  1437  	return 0;
0f6cc2b8e94da5 Jerome Brunet      2017-12-01  1438  }
0f6cc2b8e94da5 Jerome Brunet      2017-12-01  1439  

-- 
0-DAY CI Kernel Test Service
https://01.org/lkp

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

end of thread, other threads:[~2022-05-26 16:39 UTC | newest]

Thread overview: 35+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-05-12 16:03 [PATCH v4 00/28] clk: More clock rate fixes and tests Maxime Ripard
2022-05-12 16:03 ` [PATCH v4 01/28] clk: Drop the rate range on clk_put() Maxime Ripard
2022-05-12 16:03 ` [PATCH v4 02/28] clk: Skip clamping when rounding if there's no boundaries Maxime Ripard
2022-05-12 16:03 ` [PATCH v4 03/28] clk: Introduce clk_get_rate_range() Maxime Ripard
2022-05-12 16:03 ` [PATCH v4 04/28] drm/vc4: hdmi: Rework hdmi_enable_4kp60 detection Maxime Ripard
2022-05-12 16:03 ` [PATCH v4 05/28] clk: Mention that .recalc_rate can return 0 on error Maxime Ripard
2022-05-12 16:03 ` [PATCH v4 06/28] clk: Clarify clk_get_rate() expectations Maxime Ripard
2022-05-12 16:03 ` [PATCH v4 07/28] clk: tests: Add test suites description Maxime Ripard
2022-05-12 16:03 ` [PATCH v4 08/28] clk: tests: Add reference to the orphan mux bug report Maxime Ripard
2022-05-12 16:03 ` [PATCH v4 09/28] clk: tests: Add tests for uncached clock Maxime Ripard
2022-05-12 16:03 ` [PATCH v4 10/28] clk: tests: Add tests for single parent mux Maxime Ripard
2022-05-12 16:03 ` [PATCH v4 11/28] clk: tests: Add tests for mux with multiple parents Maxime Ripard
2022-05-12 16:03 ` [PATCH v4 12/28] clk: tests: Add some tests for orphan " Maxime Ripard
2022-05-12 16:03 ` [PATCH v4 13/28] clk: Take into account uncached clocks in clk_set_rate_range() Maxime Ripard
2022-05-24 18:32   ` Jim Quinlan
2022-05-25  8:30     ` Maxime Ripard
2022-05-25 17:59       ` Jim Quinlan
2022-05-26 16:39         ` Maxime Ripard
2022-05-12 16:03 ` [PATCH v4 14/28] clk: Fix clk_get_parent() documentation Maxime Ripard
2022-05-12 16:03 ` [PATCH v4 15/28] clk: Set req_rate on reparenting Maxime Ripard
2022-05-12 16:04 ` [PATCH v4 16/28] clk: Change clk_core_init_rate_req prototype Maxime Ripard
2022-05-12 16:04 ` [PATCH v4 17/28] clk: Move clk_core_init_rate_req() from clk_core_round_rate_nolock() to its caller Maxime Ripard
2022-05-12 16:04 ` [PATCH v4 18/28] clk: Introduce clk_hw_init_rate_request() Maxime Ripard
2022-05-12 16:04 ` [PATCH v4 19/28] clk: Add our request boundaries in clk_core_init_rate_req Maxime Ripard
2022-05-12 16:04 ` [PATCH v4 20/28] clk: Switch from __clk_determine_rate to clk_core_round_rate_nolock Maxime Ripard
2022-05-12 16:04 ` [PATCH v4 21/28] clk: Introduce clk_core_has_parent() Maxime Ripard
2022-05-12 16:04 ` [PATCH v4 22/28] clk: Stop forwarding clk_rate_requests to the parent Maxime Ripard
2022-05-14  2:12   ` kernel test robot
2022-05-12 16:04 ` [PATCH v4 23/28] clk: Zero the clk_rate_request structure Maxime Ripard
2022-05-12 16:04 ` [PATCH v4 24/28] clk: Test the clock pointer in clk_hw_get_name() Maxime Ripard
2022-05-12 16:04 ` [PATCH v4 25/28] clk: Introduce the clk_hw_get_rate_range function Maxime Ripard
2022-05-12 16:04 ` [PATCH v4 26/28] clk: qcom: clk-rcg2: Take clock boundaries into consideration for gfx3d Maxime Ripard
2022-05-12 16:04 ` [PATCH v4 27/28] clk: tests: Add some tests for clk_get_rate_range() Maxime Ripard
2022-05-12 16:04 ` [PATCH v4 28/28] clk: tests: Add missing test case for ranges Maxime Ripard
  -- strict thread matches above, loose matches on Subject: below --
2022-05-13 12:04 [PATCH v4 22/28] clk: Stop forwarding clk_rate_requests to the parent kernel test robot

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.