Re: [PATCH v4] drm/rockchip: Refactor the component match logic.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Heiko,

On 03/16/2017 04:20 PM, Heiko Stuebner wrote:
Hi Jeffy,

Am Donnerstag, 16. März 2017, 10:05:56 CET schrieb Jeffy Chen:
Currently we are adding all components from the dts, if one of their
drivers been disabled, we would not be able to bring up others.

Refactor component match logic, follow exynos drm.

Signed-off-by: Jeffy Chen <jeffy.chen@xxxxxxxxxxxxxx>
Reviewed-by: Andrzej Hajda <a.hajda@xxxxxxxxxxx>

[...]

diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c index b360e62..51433da 100644
--- a/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
+++ b/drivers/gpu/drm/rockchip/rockchip_drm_drv.c
@@ -356,34 +356,42 @@ static const struct dev_pm_ops rockchip_drm_pm_ops = {
rockchip_drm_sys_resume)
  };

-static int compare_of(struct device *dev, void *data)
-{
-	struct device_node *np = data;
+#define MAX_ROCKCHIP_DRM_DRVS 16
+static struct platform_driver *rockchip_drm_drvs[MAX_ROCKCHIP_DRM_DRVS];
+static int rockchip_drm_drvs_cnt;

-	return dev->of_node == np;
+#define ROCKCHIP_DRM_DRV(drv, cond) { \
+	if (IS_ENABLED(cond)) \
+		rockchip_drm_drvs[rockchip_drm_drvs_cnt++] = &drv; \
  }

[...]

+static int __init rockchip_drm_init(void)
+{
+	int ret;
+
+	rockchip_drm_drvs_cnt = 0;
+	ROCKCHIP_DRM_DRV(vop_platform_driver, CONFIG_DRM_ROCKCHIP);
+	ROCKCHIP_DRM_DRV(rockchip_dp_driver, CONFIG_ROCKCHIP_ANALOGIX_DP);
+	ROCKCHIP_DRM_DRV(cdn_dp_driver, CONFIG_ROCKCHIP_CDN_DP);
+	ROCKCHIP_DRM_DRV(dw_hdmi_rockchip_pltfm_driver,
+			 CONFIG_ROCKCHIP_DW_HDMI);
+	ROCKCHIP_DRM_DRV(dw_mipi_dsi_driver, CONFIG_ROCKCHIP_DW_MIPI_DSI);
+	ROCKCHIP_DRM_DRV(inno_hdmi_driver, CONFIG_ROCKCHIP_INNO_HDMI);
+
+	ret = platform_register_drivers(rockchip_drm_drvs,
+					rockchip_drm_drvs_cnt);
+	if (ret)
+		return ret;

With the following config snippet

CONFIG_DRM_ROCKCHIP=m
CONFIG_ROCKCHIP_ANALOGIX_DP=y
# CONFIG_ROCKCHIP_CDN_DP is not set
CONFIG_ROCKCHIP_DW_HDMI=y
CONFIG_ROCKCHIP_DW_MIPI_DSI=y
CONFIG_ROCKCHIP_INNO_HDMI=y

I get these faults on arm32 (1 warning, 1 linker error):

   CC [M]  drivers/gpu/drm/rockchip/rockchip_drm_drv.o
   CC [M]  drivers/gpu/drm/rockchip/rockchip_drm_fb.o
   CC [M]  drivers/gpu/drm/rockchip/rockchip_drm_gem.o
   CC [M]  drivers/gpu/drm/rockchip/rockchip_drm_psr.o
   CC [M]  drivers/gpu/drm/rockchip/rockchip_drm_vop.o
   CC [M]  drivers/gpu/drm/rockchip/rockchip_vop_reg.o
../drivers/gpu/drm/rockchip/rockchip_vop_reg.c:407:31: warning: ‘vop_platform_driver’ defined but not used [-Wunused-variable]
  static struct platform_driver vop_platform_driver = {
                                ^~~~~~~~~~~~~~~~~~~
   CC [M]  drivers/gpu/drm/rockchip/rockchip_drm_fbdev.o
   CC [M]  drivers/gpu/drm/rockchip/analogix_dp-rockchip.o
   CC [M]  drivers/gpu/drm/rockchip/dw_hdmi-rockchip.o
   CC [M]  drivers/gpu/drm/rockchip/dw-mipi-dsi.o
   CC [M]  drivers/gpu/drm/rockchip/inno_hdmi.o
   LD [M]  drivers/gpu/drm/rockchip/rockchipdrm.o
   Building modules, stage 2.
   MODPOST 352 modules
ERROR: "vop_platform_driver" [drivers/gpu/drm/rockchip/rockchipdrm.ko] undefined!





oops, sorry again...thanx for testing it, i should be more careful(porting it from my local 4.4 kernel).

_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/dri-devel




[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux