All of lore.kernel.org
 help / color / mirror / Atom feed
* [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.