[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-Id: <20250528-clk-wip-v2-v2-0-0d2c2f220442@redhat.com>
Date: Wed, 28 May 2025 19:16:46 -0400
From: Brian Masney <bmasney@...hat.com>
To: Stephen Boyd <sboyd@...nel.org>, Maxime Ripard <mripard@...nel.org>
Cc: linux-clk@...r.kernel.org, linux-kernel@...r.kernel.org,
Arnd Bergmann <arnd@...db.de>, Thomas Gleixner <tglx@...utronix.de>,
Michael Turquette <mturquette@...libre.com>,
Alberto Ruiz <aruiz@...hat.com>, Brian Masney <bmasney@...hat.com>
Subject: [PATCH v2 00/10] clk: add kunit tests and correct rate change bug
in the clk core
Here's a series that adds various kunit tests to the clk framework,
documents the members of struct clk_core, and adds a fix that does a
better job of preserving the original clock rate when a sibling clock
changes it's rate, and the shared parent's rate.
These tests are centered around inconsistencies and limitations in the
clock framework that may lead to some clocks unknowingly changing rates
during a rate change of their siblings.
The intent of the clock framework is to keep the siblings clock rate
stable during such an operation:
clk_set_rate(clk, MY_NEW_RATE);
However, it assumes that the sibling can generate that rate in the first
place. In many situations, it can't, and it leads to numerous bugs and
solutions over the years.
https://lore.kernel.org/lkml/20230825-pll-mipi_keep_rate-v1-0-35bc43570730@oltmanns.dev/
https://lore.kernel.org/linux-kernel/20230807-pll-mipi_set_rate_parent-v6-0-f173239a4b59@oltmanns.dev/
https://lore.kernel.org/all/20241114065759.3341908-1-victor.liu@nxp.com/
https://lore.kernel.org/linux-clk/20241121-ge-ian-debug-imx8-clk-tree-v1-0-0f1b722588fe@bootlin.com/
We intend to fix these issues, but first we need to agree and document
what these shortcomings are. These patches are meant to do that, even
though some will be skipped as they are currently broken.
Special thanks to Maxime Ripard for the guidance and feedback on this
project so far.
Changes in v2:
- Combine my two v1 patch series referenced below into one.
- Patch 1: Newly introduced: clk: add kernel docs for struct clk_core
- Patch 2: Simplfy further and there is no need to call clk_recalc() for
parts of the tree that didn't request a rate change.
- Patch 5:
- Enable all of the tests since this particular limitation is
addressed in the clk core with patch 2.
- Update the div_div_3 test to ensure the dividers on the clock
are automatically updated as expected.
- Patch 7: Correct test description of
clk_rate_change_sibling_test_suite.
- Links to v1:
clk: preserve original rate when a sibling clk changes it's rate
https://lore.kernel.org/lkml/20250520192846.9614-1-bmasney@redhat.com/
v1: clk: test: add tests for inconsistencies and limitations in the framework
https://lore.kernel.org/lkml/20250407131258.70638-1-bmasney@redhat.com/
Signed-off-by: Brian Masney <bmasney@...hat.com>
---
Brian Masney (10):
clk: add kernel docs for struct clk_core
clk: preserve original rate when a sibling clk changes it's rate
clk: test: introduce a few specific rate constants for mock testing
clk: test: introduce clk_dummy_div for a mock divider
clk: test: introduce test suite for sibling rate changes on a divider
clk: test: introduce clk_dummy_gate for a mock gate
clk: test: introduce test suite for sibling rate changes on a gate
clk: test: introduce helper to create a mock mux
clk: test: introduce test variation for sibling rate changes on a mux
clk: test: introduce test variation for sibling rate changes on a gate/mux
drivers/clk/clk.c | 57 ++++-
drivers/clk/clk_test.c | 605 ++++++++++++++++++++++++++++++++++++++++++-------
2 files changed, 573 insertions(+), 89 deletions(-)
---
base-commit: 0ff41df1cb268fc69e703a08a57ee14ae967d0ca
change-id: 20250528-clk-wip-v2-813333ab1059
Best regards,
--
Brian Masney <bmasney@...hat.com>
Powered by blists - more mailing lists