* [PATCH RFC 0/2] clk: implement a new managed helper and add first user
@ 2024-08-01 15:58 Bartosz Golaszewski
2024-08-01 15:58 ` [PATCH RFC 1/2] clk: provide devm_clk_get_optional_enabled_with_rate() Bartosz Golaszewski
2024-08-01 15:58 ` [PATCH RFC 2/2] Bluetooth: hci_qca: use devm_clk_get_optional_enabled_with_rate() Bartosz Golaszewski
0 siblings, 2 replies; 7+ messages in thread
From: Bartosz Golaszewski @ 2024-08-01 15:58 UTC (permalink / raw)
To: Michael Turquette, Stephen Boyd, Russell King, Marcel Holtmann,
Luiz Augusto von Dentz
Cc: linux-clk, linux-kernel, linux-bluetooth, Bartosz Golaszewski
I'm posting this as RFC to see if there's any interest. I noticed that
some drivers do: clk_get() -> clk_set_rate() -> clk_prepare_enable(). I
was wondering if it's worth factoring this out into dedicated helpers.
This series adds a new such helper for the "optional-enabled" use-case
and the first user. Let me know if this makes sense.
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
---
Bartosz Golaszewski (2):
clk: provide devm_clk_get_optional_enabled_with_rate()
Bluetooth: hci_qca: use devm_clk_get_optional_enabled_with_rate()
drivers/bluetooth/hci_qca.c | 24 ++----------------------
drivers/clk/clk-devres.c | 28 ++++++++++++++++++++++++++++
include/linux/clk.h | 26 ++++++++++++++++++++++++++
3 files changed, 56 insertions(+), 22 deletions(-)
---
base-commit: 048d8cb65cde9fe7534eb4440bcfddcf406bb49c
change-id: 20240801-clk-new-helper-7853f662cda1
Best regards,
--
Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH RFC 1/2] clk: provide devm_clk_get_optional_enabled_with_rate()
2024-08-01 15:58 [PATCH RFC 0/2] clk: implement a new managed helper and add first user Bartosz Golaszewski
@ 2024-08-01 15:58 ` Bartosz Golaszewski
2024-08-01 16:37 ` clk: implement a new managed helper and add first user bluez.test.bot
2024-08-03 1:04 ` [PATCH RFC 1/2] clk: provide devm_clk_get_optional_enabled_with_rate() Stephen Boyd
2024-08-01 15:58 ` [PATCH RFC 2/2] Bluetooth: hci_qca: use devm_clk_get_optional_enabled_with_rate() Bartosz Golaszewski
1 sibling, 2 replies; 7+ messages in thread
From: Bartosz Golaszewski @ 2024-08-01 15:58 UTC (permalink / raw)
To: Michael Turquette, Stephen Boyd, Russell King, Marcel Holtmann,
Luiz Augusto von Dentz
Cc: linux-clk, linux-kernel, linux-bluetooth, Bartosz Golaszewski
From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
There are clock users in the kernel that can't use
devm_clk_get_optional_enabled() as they need to set rate after getting
the clock and before enabling it. Provide a managed helper that wraps
these operations in the correct order.
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
---
drivers/clk/clk-devres.c | 28 ++++++++++++++++++++++++++++
include/linux/clk.h | 26 ++++++++++++++++++++++++++
2 files changed, 54 insertions(+)
diff --git a/drivers/clk/clk-devres.c b/drivers/clk/clk-devres.c
index 90e6078fb6e1..34e800525e21 100644
--- a/drivers/clk/clk-devres.c
+++ b/drivers/clk/clk-devres.c
@@ -99,6 +99,34 @@ struct clk *devm_clk_get_optional_enabled(struct device *dev, const char *id)
}
EXPORT_SYMBOL_GPL(devm_clk_get_optional_enabled);
+struct clk *devm_clk_get_optional_enabled_with_rate(struct device *dev,
+ const char *id,
+ unsigned long rate)
+{
+ struct clk *clk;
+ int ret;
+
+ clk = __devm_clk_get(dev, id, clk_get_optional, NULL,
+ clk_disable_unprepare);
+ if (IS_ERR(clk))
+ return ERR_CAST(clk);
+
+ ret = clk_set_rate(clk, rate);
+ if (ret)
+ goto out_put_clk;
+
+ ret = clk_prepare_enable(clk);
+ if (ret)
+ goto out_put_clk;
+
+ return clk;
+
+out_put_clk:
+ devm_clk_put(dev, clk);
+ return ERR_PTR(ret);
+}
+EXPORT_SYMBOL(devm_clk_get_optional_enabled_with_rate);
+
struct clk_bulk_devres {
struct clk_bulk_data *clks;
int num_clks;
diff --git a/include/linux/clk.h b/include/linux/clk.h
index 0fa56d672532..c8d237e9b8d4 100644
--- a/include/linux/clk.h
+++ b/include/linux/clk.h
@@ -640,6 +640,32 @@ struct clk *devm_clk_get_optional_prepared(struct device *dev, const char *id);
*/
struct clk *devm_clk_get_optional_enabled(struct device *dev, const char *id);
+/**
+ * devm_clk_get_optional_enabled_with_rate - devm_clk_get_optional() +
+ * clk_set_rate() +
+ * clk_prepare_enable()
+ * @dev: device for clock "consumer"
+ * @id: clock consumer ID
+ * @rate: new clock rate
+ *
+ * Context: May sleep.
+ *
+ * Return: a struct clk corresponding to the clock producer, or
+ * valid IS_ERR() condition containing errno. The implementation
+ * uses @dev and @id to determine the clock consumer, and thereby
+ * the clock producer. If no such clk is found, it returns NULL
+ * which serves as a dummy clk. That's the only difference compared
+ * to devm_clk_get_enabled().
+ *
+ * The returned clk (if valid) is prepared and enabled and rate was set.
+ *
+ * The clock will automatically be disabled, unprepared and freed
+ * when the device is unbound from the bus.
+ */
+struct clk *devm_clk_get_optional_enabled_with_rate(struct device *dev,
+ const char *id,
+ unsigned long rate);
+
/**
* devm_get_clk_from_child - lookup and obtain a managed reference to a
* clock producer from child node.
--
2.43.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH RFC 2/2] Bluetooth: hci_qca: use devm_clk_get_optional_enabled_with_rate()
2024-08-01 15:58 [PATCH RFC 0/2] clk: implement a new managed helper and add first user Bartosz Golaszewski
2024-08-01 15:58 ` [PATCH RFC 1/2] clk: provide devm_clk_get_optional_enabled_with_rate() Bartosz Golaszewski
@ 2024-08-01 15:58 ` Bartosz Golaszewski
2024-08-04 0:20 ` kernel test robot
1 sibling, 1 reply; 7+ messages in thread
From: Bartosz Golaszewski @ 2024-08-01 15:58 UTC (permalink / raw)
To: Michael Turquette, Stephen Boyd, Russell King, Marcel Holtmann,
Luiz Augusto von Dentz
Cc: linux-clk, linux-kernel, linux-bluetooth, Bartosz Golaszewski
From: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
Use the new devm_clk_get_optional_enabled_with_rate() clock helper to
shrink the code a bit.
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
---
drivers/bluetooth/hci_qca.c | 24 ++----------------------
1 file changed, 2 insertions(+), 22 deletions(-)
diff --git a/drivers/bluetooth/hci_qca.c b/drivers/bluetooth/hci_qca.c
index ca6466676902..0670f527909c 100644
--- a/drivers/bluetooth/hci_qca.c
+++ b/drivers/bluetooth/hci_qca.c
@@ -2297,13 +2297,6 @@ static int qca_init_regulators(struct qca_power *qca,
return 0;
}
-static void qca_clk_disable_unprepare(void *data)
-{
- struct clk *clk = data;
-
- clk_disable_unprepare(clk);
-}
-
static int qca_serdev_probe(struct serdev_device *serdev)
{
struct qca_serdev *qcadev;
@@ -2433,25 +2426,12 @@ static int qca_serdev_probe(struct serdev_device *serdev)
if (!qcadev->bt_en)
power_ctrl_enabled = false;
- qcadev->susclk = devm_clk_get_optional(&serdev->dev, NULL);
+ qcadev->susclk = devm_clk_get_optional_enabled_with_rate(
+ &serdev->dev, NULL, SUSCLK_RATE_32KHZ);
if (IS_ERR(qcadev->susclk)) {
dev_warn(&serdev->dev, "failed to acquire clk\n");
return PTR_ERR(qcadev->susclk);
}
- err = clk_set_rate(qcadev->susclk, SUSCLK_RATE_32KHZ);
- if (err)
- return err;
-
- err = clk_prepare_enable(qcadev->susclk);
- if (err)
- return err;
-
- err = devm_add_action_or_reset(&serdev->dev,
- qca_clk_disable_unprepare,
- qcadev->susclk);
- if (err)
- return err;
-
}
err = hci_uart_register_device(&qcadev->serdev_hu, &qca_proto);
--
2.43.0
^ permalink raw reply related [flat|nested] 7+ messages in thread
* RE: clk: implement a new managed helper and add first user
2024-08-01 15:58 ` [PATCH RFC 1/2] clk: provide devm_clk_get_optional_enabled_with_rate() Bartosz Golaszewski
@ 2024-08-01 16:37 ` bluez.test.bot
2024-08-03 1:04 ` [PATCH RFC 1/2] clk: provide devm_clk_get_optional_enabled_with_rate() Stephen Boyd
1 sibling, 0 replies; 7+ messages in thread
From: bluez.test.bot @ 2024-08-01 16:37 UTC (permalink / raw)
To: linux-bluetooth, brgl
[-- Attachment #1: Type: text/plain, Size: 10447 bytes --]
This is automated email and please do not reply to this email!
Dear submitter,
Thank you for submitting the patches to the linux bluetooth mailing list.
This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=875976
---Test result---
Test Summary:
CheckPatch PASS 1.15 seconds
GitLint PASS 0.38 seconds
SubjectPrefix FAIL 0.38 seconds
BuildKernel FAIL 24.17 seconds
CheckAllWarning FAIL 26.65 seconds
CheckSparse FAIL 29.94 seconds
CheckSmatch FAIL 79.97 seconds
BuildKernel32 FAIL 23.16 seconds
TestRunnerSetup PASS 524.83 seconds
TestRunner_l2cap-tester PASS 21.94 seconds
TestRunner_iso-tester PASS 35.06 seconds
TestRunner_bnep-tester PASS 4.77 seconds
TestRunner_mgmt-tester FAIL 121.27 seconds
TestRunner_rfcomm-tester PASS 7.44 seconds
TestRunner_sco-tester PASS 13.00 seconds
TestRunner_ioctl-tester PASS 7.92 seconds
TestRunner_mesh-tester PASS 5.86 seconds
TestRunner_smp-tester PASS 7.66 seconds
TestRunner_userchan-tester PASS 4.99 seconds
IncrementalBuild FAIL 32.79 seconds
Details
##############################
Test: SubjectPrefix - FAIL
Desc: Check subject contains "Bluetooth" prefix
Output:
"Bluetooth: " prefix is not specified in the subject
##############################
Test: BuildKernel - FAIL
Desc: Build Kernel for Bluetooth
Output:
drivers/bluetooth/hci_qca.c: In function ‘qca_serdev_probe’:
drivers/bluetooth/hci_qca.c:2428:20: error: implicit declaration of function ‘devm_clk_get_optional_enabled_with_rate’; did you mean ‘devm_clk_get_optional_enabled’? [-Werror=implicit-function-declaration]
2428 | qcadev->susclk = devm_clk_get_optional_enabled_with_rate(
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| devm_clk_get_optional_enabled
drivers/bluetooth/hci_qca.c:2428:18: warning: assignment to ‘struct clk *’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
2428 | qcadev->susclk = devm_clk_get_optional_enabled_with_rate(
| ^
cc1: some warnings being treated as errors
make[4]: *** [scripts/Makefile.build:244: drivers/bluetooth/hci_qca.o] Error 1
make[3]: *** [scripts/Makefile.build:485: drivers/bluetooth] Error 2
make[2]: *** [scripts/Makefile.build:485: drivers] Error 2
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [/github/workspace/src/src/Makefile:1934: .] Error 2
make: *** [Makefile:240: __sub-make] Error 2
##############################
Test: CheckAllWarning - FAIL
Desc: Run linux kernel with all warning enabled
Output:
drivers/bluetooth/hci_qca.c: In function ‘qca_serdev_probe’:
drivers/bluetooth/hci_qca.c:2428:20: error: implicit declaration of function ‘devm_clk_get_optional_enabled_with_rate’; did you mean ‘devm_clk_get_optional_enabled’? [-Werror=implicit-function-declaration]
2428 | qcadev->susclk = devm_clk_get_optional_enabled_with_rate(
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| devm_clk_get_optional_enabled
drivers/bluetooth/hci_qca.c:2428:18: warning: assignment to ‘struct clk *’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
2428 | qcadev->susclk = devm_clk_get_optional_enabled_with_rate(
| ^
cc1: some warnings being treated as errors
make[4]: *** [scripts/Makefile.build:244: drivers/bluetooth/hci_qca.o] Error 1
make[3]: *** [scripts/Makefile.build:485: drivers/bluetooth] Error 2
make[2]: *** [scripts/Makefile.build:485: drivers] Error 2
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [/github/workspace/src/src/Makefile:1934: .] Error 2
make: *** [Makefile:240: __sub-make] Error 2
##############################
Test: CheckSparse - FAIL
Desc: Run sparse tool with linux kernel
Output:
net/bluetooth/af_bluetooth.c:223:25: warning: context imbalance in 'bt_accept_enqueue' - different lock contexts for basic block
drivers/bluetooth/hci_qca.c: In function ‘qca_serdev_probe’:
drivers/bluetooth/hci_qca.c:2428:20: error: implicit declaration of function ‘devm_clk_get_optional_enabled_with_rate’; did you mean ‘devm_clk_get_optional_enabled’? [-Werror=implicit-function-declaration]
2428 | qcadev->susclk = devm_clk_get_optional_enabled_with_rate(
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| devm_clk_get_optional_enabled
drivers/bluetooth/hci_qca.c:2428:18: warning: assignment to ‘struct clk *’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
2428 | qcadev->susclk = devm_clk_get_optional_enabled_with_rate(
| ^
cc1: some warnings being treated as errors
make[4]: *** [scripts/Makefile.build:244: drivers/bluetooth/hci_qca.o] Error 1
make[3]: *** [scripts/Makefile.build:485: drivers/bluetooth] Error 2
make[2]: *** [scripts/Makefile.build:485: drivers] Error 2
make[2]: *** Waiting for unfinished jobs....
net/bluetooth/hci_event.c: note: in included file (through include/net/bluetooth/hci_core.h):
./include/net/bluetooth/hci.h:2596:47: warning: array of flexible structures
./include/net/bluetooth/hci.h:2682:43: warning: array of flexible structures
net/bluetooth/hci_codec.c: note: in included file:
./include/net/bluetooth/hci_core.h:147:35: warning: array of flexible structures
net/bluetooth/sco.c: note: in included file:
./include/net/bluetooth/hci_core.h:147:35: warning: array of flexible structures
make[1]: *** [/github/workspace/src/src/Makefile:1934: .] Error 2
make: *** [Makefile:240: __sub-make] Error 2
##############################
Test: CheckSmatch - FAIL
Desc: Run smatch tool with source
Output:
drivers/bluetooth/hci_qca.c: In function ‘qca_serdev_probe’:
drivers/bluetooth/hci_qca.c:2428:20: error: implicit declaration of function ‘devm_clk_get_optional_enabled_with_rate’; did you mean ‘devm_clk_get_optional_enabled’? [-Werror=implicit-function-declaration]
2428 | qcadev->susclk = devm_clk_get_optional_enabled_with_rate(
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| devm_clk_get_optional_enabled
drivers/bluetooth/hci_qca.c:2428:18: warning: assignment to ‘struct clk *’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
2428 | qcadev->susclk = devm_clk_get_optional_enabled_with_rate(
| ^
cc1: some warnings being treated as errors
make[4]: *** [scripts/Makefile.build:244: drivers/bluetooth/hci_qca.o] Error 1
make[3]: *** [scripts/Makefile.build:485: drivers/bluetooth] Error 2
make[2]: *** [scripts/Makefile.build:485: drivers] Error 2
make[2]: *** Waiting for unfinished jobs....
net/bluetooth/hci_event.c: note: in included file (through include/net/bluetooth/hci_core.h):
./include/net/bluetooth/hci.h:2596:47: warning: array of flexible structures
./include/net/bluetooth/hci.h:2682:43: warning: array of flexible structures
net/bluetooth/hci_codec.c: note: in included file:
./include/net/bluetooth/hci_core.h:147:35: warning: array of flexible structures
net/bluetooth/sco.c: note: in included file:
./include/net/bluetooth/hci_core.h:147:35: warning: array of flexible structures
make[1]: *** [/github/workspace/src/src/Makefile:1934: .] Error 2
make: *** [Makefile:240: __sub-make] Error 2
##############################
Test: BuildKernel32 - FAIL
Desc: Build 32bit Kernel for Bluetooth
Output:
drivers/bluetooth/hci_qca.c: In function ‘qca_serdev_probe’:
drivers/bluetooth/hci_qca.c:2428:20: error: implicit declaration of function ‘devm_clk_get_optional_enabled_with_rate’; did you mean ‘devm_clk_get_optional_enabled’? [-Werror=implicit-function-declaration]
2428 | qcadev->susclk = devm_clk_get_optional_enabled_with_rate(
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| devm_clk_get_optional_enabled
drivers/bluetooth/hci_qca.c:2428:18: warning: assignment to ‘struct clk *’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
2428 | qcadev->susclk = devm_clk_get_optional_enabled_with_rate(
| ^
cc1: some warnings being treated as errors
make[4]: *** [scripts/Makefile.build:244: drivers/bluetooth/hci_qca.o] Error 1
make[3]: *** [scripts/Makefile.build:485: drivers/bluetooth] Error 2
make[2]: *** [scripts/Makefile.build:485: drivers] Error 2
make[2]: *** Waiting for unfinished jobs....
make[1]: *** [/github/workspace/src/src/Makefile:1934: .] Error 2
make: *** [Makefile:240: __sub-make] Error 2
##############################
Test: TestRunner_mgmt-tester - FAIL
Desc: Run mgmt-tester with test-runner
Output:
Total: 492, Passed: 489 (99.4%), Failed: 1, Not Run: 2
Failed Test Cases
LL Privacy - Remove Device 4 (Disable Adv) Timed out 1.927 seconds
##############################
Test: IncrementalBuild - FAIL
Desc: Incremental build with the patches in the series
Output:
[RFC,2/2] Bluetooth: hci_qca: use devm_clk_get_optional_enabled_with_rate()
drivers/bluetooth/hci_qca.c: In function ‘qca_serdev_probe’:
drivers/bluetooth/hci_qca.c:2428:20: error: implicit declaration of function ‘devm_clk_get_optional_enabled_with_rate’; did you mean ‘devm_clk_get_optional_enabled’? [-Werror=implicit-function-declaration]
2428 | qcadev->susclk = devm_clk_get_optional_enabled_with_rate(
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
| devm_clk_get_optional_enabled
drivers/bluetooth/hci_qca.c:2428:18: warning: assignment to ‘struct clk *’ from ‘int’ makes pointer from integer without a cast [-Wint-conversion]
2428 | qcadev->susclk = devm_clk_get_optional_enabled_with_rate(
| ^
cc1: some warnings being treated as errors
make[4]: *** [scripts/Makefile.build:244: drivers/bluetooth/hci_qca.o] Error 1
make[3]: *** [scripts/Makefile.build:485: drivers/bluetooth] Error 2
make[2]: *** [scripts/Makefile.build:485: drivers] Error 2
make[1]: *** [/github/workspace/src/src/Makefile:1934: .] Error 2
make: *** [Makefile:240: __sub-make] Error 2
---
Regards,
Linux Bluetooth
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH RFC 1/2] clk: provide devm_clk_get_optional_enabled_with_rate()
2024-08-01 15:58 ` [PATCH RFC 1/2] clk: provide devm_clk_get_optional_enabled_with_rate() Bartosz Golaszewski
2024-08-01 16:37 ` clk: implement a new managed helper and add first user bluez.test.bot
@ 2024-08-03 1:04 ` Stephen Boyd
1 sibling, 0 replies; 7+ messages in thread
From: Stephen Boyd @ 2024-08-03 1:04 UTC (permalink / raw)
To: Bartosz Golaszewski, Luiz Augusto von Dentz, Marcel Holtmann,
Michael Turquette, Russell King
Cc: linux-clk, linux-kernel, linux-bluetooth, Bartosz Golaszewski
Quoting Bartosz Golaszewski (2024-08-01 08:58:49)
> diff --git a/drivers/clk/clk-devres.c b/drivers/clk/clk-devres.c
> index 90e6078fb6e1..34e800525e21 100644
> --- a/drivers/clk/clk-devres.c
> +++ b/drivers/clk/clk-devres.c
> @@ -99,6 +99,34 @@ struct clk *devm_clk_get_optional_enabled(struct device *dev, const char *id)
> }
> EXPORT_SYMBOL_GPL(devm_clk_get_optional_enabled);
>
> +struct clk *devm_clk_get_optional_enabled_with_rate(struct device *dev,
> + const char *id,
> + unsigned long rate)
> +{
> + struct clk *clk;
> + int ret;
> +
> + clk = __devm_clk_get(dev, id, clk_get_optional, NULL,
> + clk_disable_unprepare);
> + if (IS_ERR(clk))
> + return ERR_CAST(clk);
> +
> + ret = clk_set_rate(clk, rate);
> + if (ret)
> + goto out_put_clk;
> +
> + ret = clk_prepare_enable(clk);
> + if (ret)
> + goto out_put_clk;
> +
> + return clk;
> +
> +out_put_clk:
> + devm_clk_put(dev, clk);
> + return ERR_PTR(ret);
> +}
> +EXPORT_SYMBOL(devm_clk_get_optional_enabled_with_rate);
GPL
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH RFC 2/2] Bluetooth: hci_qca: use devm_clk_get_optional_enabled_with_rate()
2024-08-01 15:58 ` [PATCH RFC 2/2] Bluetooth: hci_qca: use devm_clk_get_optional_enabled_with_rate() Bartosz Golaszewski
@ 2024-08-04 0:20 ` kernel test robot
0 siblings, 0 replies; 7+ messages in thread
From: kernel test robot @ 2024-08-04 0:20 UTC (permalink / raw)
To: Bartosz Golaszewski; +Cc: llvm, oe-kbuild-all
Hi Bartosz,
[This is a private test report for your RFC patch.]
kernel test robot noticed the following build errors:
[auto build test ERROR on 048d8cb65cde9fe7534eb4440bcfddcf406bb49c]
url: https://github.com/intel-lab-lkp/linux/commits/Bartosz-Golaszewski/clk-provide-devm_clk_get_optional_enabled_with_rate/20240803-013509
base: 048d8cb65cde9fe7534eb4440bcfddcf406bb49c
patch link: https://lore.kernel.org/r/20240801-clk-new-helper-v1-2-81e9338b7b17%40linaro.org
patch subject: [PATCH RFC 2/2] Bluetooth: hci_qca: use devm_clk_get_optional_enabled_with_rate()
config: i386-randconfig-013-20240804 (https://download.01.org/0day-ci/archive/20240804/202408040825.VVKPcQKv-lkp@intel.com/config)
compiler: clang version 18.1.5 (https://github.com/llvm/llvm-project 617a15a9eac96088ae5e9134248d8236e34b91b1)
reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240804/202408040825.VVKPcQKv-lkp@intel.com/reproduce)
If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202408040825.VVKPcQKv-lkp@intel.com/
All errors (new ones prefixed by >>):
>> drivers/bluetooth/hci_qca.c:2429:20: error: call to undeclared function 'devm_clk_get_optional_enabled_with_rate'; ISO C99 and later do not support implicit function declarations [-Wimplicit-function-declaration]
2429 | qcadev->susclk = devm_clk_get_optional_enabled_with_rate(
| ^
drivers/bluetooth/hci_qca.c:2429:20: note: did you mean 'devm_clk_get_optional_enabled'?
include/linux/clk.h:1005:27: note: 'devm_clk_get_optional_enabled' declared here
1005 | static inline struct clk *devm_clk_get_optional_enabled(struct device *dev,
| ^
>> drivers/bluetooth/hci_qca.c:2429:18: error: incompatible integer to pointer conversion assigning to 'struct clk *' from 'int' [-Wint-conversion]
2429 | qcadev->susclk = devm_clk_get_optional_enabled_with_rate(
| ^ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2430 | &serdev->dev, NULL, SUSCLK_RATE_32KHZ);
| ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2 errors generated.
vim +/devm_clk_get_optional_enabled_with_rate +2429 drivers/bluetooth/hci_qca.c
2299
2300 static int qca_serdev_probe(struct serdev_device *serdev)
2301 {
2302 struct qca_serdev *qcadev;
2303 struct hci_dev *hdev;
2304 const struct qca_device_data *data;
2305 int err;
2306 bool power_ctrl_enabled = true;
2307
2308 qcadev = devm_kzalloc(&serdev->dev, sizeof(*qcadev), GFP_KERNEL);
2309 if (!qcadev)
2310 return -ENOMEM;
2311
2312 qcadev->serdev_hu.serdev = serdev;
2313 data = device_get_match_data(&serdev->dev);
2314 serdev_device_set_drvdata(serdev, qcadev);
2315 device_property_read_string(&serdev->dev, "firmware-name",
2316 &qcadev->firmware_name);
2317 device_property_read_u32(&serdev->dev, "max-speed",
2318 &qcadev->oper_speed);
2319 if (!qcadev->oper_speed)
2320 BT_DBG("UART will pick default operating speed");
2321
2322 qcadev->bdaddr_property_broken = device_property_read_bool(&serdev->dev,
2323 "qcom,local-bd-address-broken");
2324
2325 if (data)
2326 qcadev->btsoc_type = data->soc_type;
2327 else
2328 qcadev->btsoc_type = QCA_ROME;
2329
2330 switch (qcadev->btsoc_type) {
2331 case QCA_WCN3988:
2332 case QCA_WCN3990:
2333 case QCA_WCN3991:
2334 case QCA_WCN3998:
2335 case QCA_WCN6750:
2336 case QCA_WCN6855:
2337 case QCA_WCN7850:
2338 case QCA_QCA6390:
2339 qcadev->bt_power = devm_kzalloc(&serdev->dev,
2340 sizeof(struct qca_power),
2341 GFP_KERNEL);
2342 if (!qcadev->bt_power)
2343 return -ENOMEM;
2344 break;
2345 default:
2346 break;
2347 }
2348
2349 switch (qcadev->btsoc_type) {
2350 case QCA_WCN6855:
2351 case QCA_WCN7850:
2352 if (!device_property_present(&serdev->dev, "enable-gpios")) {
2353 /*
2354 * Backward compatibility with old DT sources. If the
2355 * node doesn't have the 'enable-gpios' property then
2356 * let's use the power sequencer. Otherwise, let's
2357 * drive everything outselves.
2358 */
2359 qcadev->bt_power->pwrseq = devm_pwrseq_get(&serdev->dev,
2360 "bluetooth");
2361 if (IS_ERR(qcadev->bt_power->pwrseq))
2362 return PTR_ERR(qcadev->bt_power->pwrseq);
2363
2364 break;
2365 }
2366 fallthrough;
2367 case QCA_WCN3988:
2368 case QCA_WCN3990:
2369 case QCA_WCN3991:
2370 case QCA_WCN3998:
2371 case QCA_WCN6750:
2372 qcadev->bt_power->dev = &serdev->dev;
2373 err = qca_init_regulators(qcadev->bt_power, data->vregs,
2374 data->num_vregs);
2375 if (err) {
2376 BT_ERR("Failed to init regulators:%d", err);
2377 return err;
2378 }
2379
2380 qcadev->bt_power->vregs_on = false;
2381
2382 qcadev->bt_en = devm_gpiod_get_optional(&serdev->dev, "enable",
2383 GPIOD_OUT_LOW);
2384 if (IS_ERR(qcadev->bt_en) &&
2385 (data->soc_type == QCA_WCN6750 ||
2386 data->soc_type == QCA_WCN6855)) {
2387 dev_err(&serdev->dev, "failed to acquire BT_EN gpio\n");
2388 return PTR_ERR(qcadev->bt_en);
2389 }
2390
2391 if (!qcadev->bt_en)
2392 power_ctrl_enabled = false;
2393
2394 qcadev->sw_ctrl = devm_gpiod_get_optional(&serdev->dev, "swctrl",
2395 GPIOD_IN);
2396 if (IS_ERR(qcadev->sw_ctrl) &&
2397 (data->soc_type == QCA_WCN6750 ||
2398 data->soc_type == QCA_WCN6855 ||
2399 data->soc_type == QCA_WCN7850)) {
2400 dev_err(&serdev->dev, "failed to acquire SW_CTRL gpio\n");
2401 return PTR_ERR(qcadev->sw_ctrl);
2402 }
2403
2404 qcadev->susclk = devm_clk_get_optional(&serdev->dev, NULL);
2405 if (IS_ERR(qcadev->susclk)) {
2406 dev_err(&serdev->dev, "failed to acquire clk\n");
2407 return PTR_ERR(qcadev->susclk);
2408 }
2409 break;
2410
2411 case QCA_QCA6390:
2412 qcadev->bt_power->pwrseq = devm_pwrseq_get(&serdev->dev,
2413 "bluetooth");
2414 if (IS_ERR(qcadev->bt_power->pwrseq))
2415 return PTR_ERR(qcadev->bt_power->pwrseq);
2416 break;
2417
2418 default:
2419 qcadev->bt_en = devm_gpiod_get_optional(&serdev->dev, "enable",
2420 GPIOD_OUT_LOW);
2421 if (IS_ERR(qcadev->bt_en)) {
2422 dev_err(&serdev->dev, "failed to acquire enable gpio\n");
2423 return PTR_ERR(qcadev->bt_en);
2424 }
2425
2426 if (!qcadev->bt_en)
2427 power_ctrl_enabled = false;
2428
> 2429 qcadev->susclk = devm_clk_get_optional_enabled_with_rate(
2430 &serdev->dev, NULL, SUSCLK_RATE_32KHZ);
2431 if (IS_ERR(qcadev->susclk)) {
2432 dev_warn(&serdev->dev, "failed to acquire clk\n");
2433 return PTR_ERR(qcadev->susclk);
2434 }
2435 }
2436
2437 err = hci_uart_register_device(&qcadev->serdev_hu, &qca_proto);
2438 if (err) {
2439 BT_ERR("serdev registration failed");
2440 return err;
2441 }
2442
2443 hdev = qcadev->serdev_hu.hdev;
2444
2445 if (power_ctrl_enabled) {
2446 set_bit(HCI_QUIRK_NON_PERSISTENT_SETUP, &hdev->quirks);
2447 hdev->shutdown = qca_power_off;
2448 }
2449
2450 if (data) {
2451 /* Wideband speech support must be set per driver since it can't
2452 * be queried via hci. Same with the valid le states quirk.
2453 */
2454 if (data->capabilities & QCA_CAP_WIDEBAND_SPEECH)
2455 set_bit(HCI_QUIRK_WIDEBAND_SPEECH_SUPPORTED,
2456 &hdev->quirks);
2457
2458 if (data->capabilities & QCA_CAP_VALID_LE_STATES)
2459 set_bit(HCI_QUIRK_VALID_LE_STATES, &hdev->quirks);
2460 }
2461
2462 return 0;
2463 }
2464
--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki
^ permalink raw reply [flat|nested] 7+ messages in thread
* RE: clk: implement a new managed helper and add first user
2024-08-05 8:57 [PATCH v2 1/2] clk: provide devm_clk_get_optional_enabled_with_rate() Bartosz Golaszewski
@ 2024-08-05 9:35 ` bluez.test.bot
0 siblings, 0 replies; 7+ messages in thread
From: bluez.test.bot @ 2024-08-05 9:35 UTC (permalink / raw)
To: linux-bluetooth, brgl
[-- Attachment #1: Type: text/plain, Size: 1596 bytes --]
This is automated email and please do not reply to this email!
Dear submitter,
Thank you for submitting the patches to the linux bluetooth mailing list.
This is a CI test results with your patch series:
PW Link:https://patchwork.kernel.org/project/bluetooth/list/?series=876621
---Test result---
Test Summary:
CheckPatch PASS 1.54 seconds
GitLint PASS 0.98 seconds
SubjectPrefix FAIL 0.56 seconds
BuildKernel PASS 30.19 seconds
CheckAllWarning PASS 33.30 seconds
CheckSparse PASS 38.25 seconds
CheckSmatch PASS 105.38 seconds
BuildKernel32 PASS 30.05 seconds
TestRunnerSetup PASS 538.80 seconds
TestRunner_l2cap-tester PASS 20.72 seconds
TestRunner_iso-tester PASS 33.48 seconds
TestRunner_bnep-tester PASS 4.93 seconds
TestRunner_mgmt-tester PASS 115.35 seconds
TestRunner_rfcomm-tester PASS 7.59 seconds
TestRunner_sco-tester PASS 15.24 seconds
TestRunner_ioctl-tester PASS 8.16 seconds
TestRunner_mesh-tester PASS 6.17 seconds
TestRunner_smp-tester PASS 7.05 seconds
TestRunner_userchan-tester PASS 5.11 seconds
IncrementalBuild PASS 33.70 seconds
Details
##############################
Test: SubjectPrefix - FAIL
Desc: Check subject contains "Bluetooth" prefix
Output:
"Bluetooth: " prefix is not specified in the subject
---
Regards,
Linux Bluetooth
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2024-08-05 9:35 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-08-01 15:58 [PATCH RFC 0/2] clk: implement a new managed helper and add first user Bartosz Golaszewski
2024-08-01 15:58 ` [PATCH RFC 1/2] clk: provide devm_clk_get_optional_enabled_with_rate() Bartosz Golaszewski
2024-08-01 16:37 ` clk: implement a new managed helper and add first user bluez.test.bot
2024-08-03 1:04 ` [PATCH RFC 1/2] clk: provide devm_clk_get_optional_enabled_with_rate() Stephen Boyd
2024-08-01 15:58 ` [PATCH RFC 2/2] Bluetooth: hci_qca: use devm_clk_get_optional_enabled_with_rate() Bartosz Golaszewski
2024-08-04 0:20 ` kernel test robot
-- strict thread matches above, loose matches on Subject: below --
2024-08-05 8:57 [PATCH v2 1/2] clk: provide devm_clk_get_optional_enabled_with_rate() Bartosz Golaszewski
2024-08-05 9:35 ` clk: implement a new managed helper and add first user bluez.test.bot
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.