[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20250520-silent-prophetic-cricket-fa0fa9@kuoka>
Date: Tue, 20 May 2025 09:37:40 +0200
From: Krzysztof Kozlowski <krzk@...nel.org>
To: Tomeu Vizoso <tomeu@...euvizoso.net>
Cc: Rob Herring <robh@...nel.org>,
Krzysztof Kozlowski <krzk+dt@...nel.org>, Conor Dooley <conor+dt@...nel.org>,
Heiko Stuebner <heiko@...ech.de>, Oded Gabbay <ogabbay@...nel.org>,
Jonathan Corbet <corbet@....net>, Maarten Lankhorst <maarten.lankhorst@...ux.intel.com>,
Maxime Ripard <mripard@...nel.org>, Thomas Zimmermann <tzimmermann@...e.de>,
David Airlie <airlied@...il.com>, Simona Vetter <simona@...ll.ch>,
Sumit Semwal <sumit.semwal@...aro.org>, Christian König <christian.koenig@....com>,
Sebastian Reichel <sebastian.reichel@...labora.com>, Nicolas Frattaroli <nicolas.frattaroli@...labora.com>,
Jeff Hugo <jeff.hugo@....qualcomm.com>, devicetree@...r.kernel.org, linux-arm-kernel@...ts.infradead.org,
linux-rockchip@...ts.infradead.org, linux-kernel@...r.kernel.org, dri-devel@...ts.freedesktop.org,
linux-doc@...r.kernel.org, linux-media@...r.kernel.org, linaro-mm-sig@...ts.linaro.org
Subject: Re: [PATCH v4 05/10] accel/rocket: Add a new driver for Rockchip's
NPU
On Mon, May 19, 2025 at 03:43:37PM GMT, Tomeu Vizoso wrote:
> +#endif
> diff --git a/drivers/accel/rocket/rocket_device.c b/drivers/accel/rocket/rocket_device.c
> new file mode 100644
> index 0000000000000000000000000000000000000000..bb469ac87d36249157f4ba9d9f7106ad558309e4
> --- /dev/null
> +++ b/drivers/accel/rocket/rocket_device.c
> @@ -0,0 +1,39 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +/* Copyright 2024-2025 Tomeu Vizoso <tomeu@...euvizoso.net> */
> +
> +#include <linux/clk.h>
> +#include <linux/dev_printk.h>
> +
> +#include "rocket_device.h"
> +
> +int rocket_device_init(struct rocket_device *rdev)
> +{
> + struct device *dev = rdev->cores[0].dev;
> + int err;
> +
> + rdev->clk_npu = devm_clk_get(dev, "npu");
> + if (IS_ERR(rdev->clk_npu)) {
> + err = PTR_ERR(rdev->clk_npu);
> + dev_err(dev, "devm_clk_get failed %d for clock npu\n", err);
> + return err;
> + }
That's probe path? so use standard syntax:
return dev_err_probe(). One line instead of four.
> +
> + rdev->pclk = devm_clk_get(dev, "pclk");
> + if (IS_ERR(rdev->pclk)) {
> + err = PTR_ERR(rdev->pclk);
> + dev_err(dev, "devm_clk_get failed %d for clock pclk\n", err);
> + return err;
Same here... except that this should be blk API and entire function gets
smaller.
> + }
> +
> + /* Initialize core 0 (top) */
> + err = rocket_core_init(&rdev->cores[0]);
> + if (err)
> + return err;
> +
> + return 0;
> +}
...
> +static int rocket_device_runtime_resume(struct device *dev)
> +{
> + struct rocket_device *rdev = dev_get_drvdata(dev);
> + int core = find_core_for_dev(dev);
> + int err = 0;
> +
> + if (core < 0)
> + return -ENODEV;
> +
> + if (core == 0) {
> + err = clk_prepare_enable(rdev->clk_npu);
> + if (err) {
> + dev_err(dev, "clk_prepare_enable failed %d for clock npu\n", err);
> + return err;
> + }
> +
> + err = clk_prepare_enable(rdev->pclk);
> + if (err) {
> + dev_err(dev, "clk_prepare_enable failed %d for clock pclk\n", err);
> + goto error_clk_npu;
> + }
> + }
> +
> + err = clk_prepare_enable(rdev->cores[core].a_clk);
> + if (err) {
> + dev_err(dev, "clk_prepare_enable failed %d for a_clk in core %d\n", err, core);
> + goto error_pclk;
> + }
> +
> + err = clk_prepare_enable(rdev->cores[core].h_clk);
> + if (err) {
> + dev_err(dev, "clk_prepare_enable failed %d for h_clk in core %d\n", err, core);
> + goto error_a_clk;
> + }
All four above calls could be just one call with bulk API.
> +
> + return 0;
> +
> +error_a_clk:
> + clk_disable_unprepare(rdev->cores[core].a_clk);
> +
> +error_pclk:
> + if (core == 0)
> + clk_disable_unprepare(rdev->pclk);
> +
> +error_clk_npu:
> + if (core == 0)
> + clk_disable_unprepare(rdev->clk_npu);
And all this would be gone...
> +
> + return err;
Best regards,
Krzysztof
Powered by blists - more mailing lists