On 5/20/2025 4:26 AM, Tomeu Vizoso wrote:
diff --git a/drivers/accel/rocket/rocket_device.h b/drivers/accel/rocket/rocket_device.h new file mode 100644 index 0000000000000000000000000000000000000000..55f4da252cfbd1f102c56e5009472deff59aaaec --- /dev/null +++ b/drivers/accel/rocket/rocket_device.h @@ -0,0 +1,27 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* Copyright 2024-2025 Tomeu Vizoso <tomeu@xxxxxxxxxxxxxxx> */ + +#ifndef __ROCKET_DEVICE_H__ +#define __ROCKET_DEVICE_H__ + +#include <drm/drm_device.h> +#include <linux/clk.h> + +#include "rocket_core.h" + +struct rocket_device { + struct drm_device ddev; + + struct clk_bulk_data clks[2]; + + struct rocket_core *cores; + unsigned int num_cores; +}; + +int rocket_device_init(struct rocket_device *rdev); +void rocket_device_fini(struct rocket_device *rdev); + +#define to_rocket_device(drm_dev) \ + ((struct rocket_device *)container_of(drm_dev, struct rocket_device, ddev))
Include container_of.h?
+static int rocket_drm_bind(struct device *dev) +{ + struct device_node *core_node; + struct rocket_device *rdev; + struct drm_device *ddev; + unsigned int num_cores = 1; + int err; + + rdev = devm_drm_dev_alloc(dev, &rocket_drm_driver, struct rocket_device, ddev); + if (IS_ERR(rdev)) + return PTR_ERR(rdev); + + ddev = &rdev->ddev; + dev_set_drvdata(dev, rdev); + + for_each_compatible_node(core_node, NULL, "rockchip,rk3588-rknn-core") + if (of_device_is_available(core_node)) + num_cores++; + + rdev->cores = devm_kmalloc_array(dev, num_cores, sizeof(*rdev->cores), + GFP_KERNEL | __GFP_ZERO);
devm_kcalloc will handle the ZERO flag for you.