Received: by 2002:a25:6193:0:0:0:0:0 with SMTP id v141csp838751ybb; Wed, 25 Mar 2020 10:33:45 -0700 (PDT) X-Google-Smtp-Source: ADFU+vudpTgzsiVfbgNHYuGBZLo+YXlnGzstgy55YV6LZ48BTkgNUqQk8NDYwl0WltxRF6wqigIc X-Received: by 2002:aca:56cd:: with SMTP id k196mr3366962oib.85.1585157625542; Wed, 25 Mar 2020 10:33:45 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1585157625; cv=none; d=google.com; s=arc-20160816; b=VV0GyPKX1yiwNgrFncsuOXuYHCfONmSvMX7oyOcmgk/s+0P/0XNUpX+YS4D9THA/Hq 8VmXcLrtg4oR/JOtRW3qJCvgQvNeddfATBUWj7n23teqhhE7oNxLLDiZStsngNekqPd6 AmvsFzY+pJySG9oZ31eZkSRyeYPNPg2Bj6IdFwrz03nXTJhiAsA+QOEylHv2d6pSezr3 fwF1YLmHIUuJ6z9y3EjSB87HZ+pdPWZQ2F9UeHnSssO60sJbq/0iEVRVd1MvhwogSDC0 hThKwgng0R6Ow0gvvjrR1DaJGb58P8dxzwLSO9PrUcplro9VbfH/PCW+JbSDLHfInRBi /46w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=y5y+UH4Y/eoiYsxEWhqEnCdJ4fYBk/u5lnT/M7qFdxU=; b=T2Wl1+1H3H1K4JpFhZ3GYMT+s/s1ylD/y5LZF0MnpPIUIA3bxtuCsTpCMpDWvKm/pW VFeHqBLn2PVjDNvDge1/d4ZhoB5X+g9Y+0w6pXOhAoSLAI+X6FziSc4cLQXxJIdiD7r5 Z7Oa94ozExy/jdxa+55BxI+8kykLXda7Ekm+dQ1kOJkLB3CfZAq6KShQK7WFAREmhMYY wXr/LsemjcSPXMtIN937DqahiudSg4Rop/eOV3cIo4DcgDg+hgsI2Lyo57Km4YD3rjoo EXvRnjnFlY98TqFfeTo41TSywqcGCPW1P4Mw7A3lneaUIWqMvDKu8quBZ/n3YR/zXRb7 0LRw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id g2si5301712otr.13.2020.03.25.10.33.31; Wed, 25 Mar 2020 10:33:45 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727873AbgCYRbz (ORCPT + 99 others); Wed, 25 Mar 2020 13:31:55 -0400 Received: from bhuna.collabora.co.uk ([46.235.227.227]:37204 "EHLO bhuna.collabora.co.uk" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727129AbgCYRby (ORCPT ); Wed, 25 Mar 2020 13:31:54 -0400 Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: eballetbo) with ESMTPSA id 699BD296A72 From: Enric Balletbo i Serra To: robh+dt@kernel.org, mark.rutland@arm.com, ck.hu@mediatek.com, p.zabel@pengutronix.de, airlied@linux.ie, mturquette@baylibre.com, sboyd@kernel.org, ulrich.hecht+renesas@gmail.com, laurent.pinchart@ideasonboard.com Cc: linux-mediatek@lists.infradead.org, Andrew-CT Chen , rdunlap@infradead.org, frank-w@public-files.de, wens@csie.org, Mauro Carvalho Chehab , Houlong Wei , Collabora Kernel ML , devicetree@vger.kernel.org, Thomas Gleixner , Richard Fontana , Matthias Brugger , Greg Kroah-Hartman , Minghsiu Tsai , matthias.bgg@kernel.org, Allison Randal , linux-kernel@vger.kernel.org, hsinyi@chromium.org, Seiya Wang , linux-clk@vger.kernel.org, mtk01761 , Kate Stewart , Matthias Brugger , sean.wang@mediatek.com, Weiyi Lu , linux-arm-kernel@lists.infradead.org, Daniel Vetter , dri-devel@lists.freedesktop.org, linux-media@vger.kernel.org Subject: [RESEND PATCH v12 5/5] soc / drm: mediatek: Fix mediatek-drm device probing Date: Wed, 25 Mar 2020 18:31:23 +0100 Message-Id: <20200325173123.3569606-6-enric.balletbo@collabora.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200325173123.3569606-1-enric.balletbo@collabora.com> References: <20200325173123.3569606-1-enric.balletbo@collabora.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In the actual implementation the same compatible string "mediatek,-mmsys" is used to bind the clock drivers (drivers/soc/mediatek) as well as to the gpu driver (drivers/gpu/drm/mediatek/mtk_drm_drv.c). This ends with the problem that the only probed driver is the clock driver and there is no display at all. In any case having the same compatible string for two drivers is not correct and should be fixed. To fix this, and maintain backward compatibility, we can consider that the mmsys driver is the top-level entry point for the multimedia subsystem, so is not a pure clock controller but a system controller, and the drm driver is instantiated by that MMSYS driver. Signed-off-by: Enric Balletbo i Serra Reviewed-by: CK Hu Acked-by: CK Hu --- Changes in v12: None Changes in v10: - Match driver data to get display routing. Changes in v9: - Do not move the display routing from the drm driver (CK) Changes in v8: - New patch introduced in this series. Changes in v7: None drivers/gpu/drm/mediatek/mtk_drm_drv.c | 31 ++++++++++++++++---------- drivers/soc/mediatek/mtk-mmsys.c | 6 +++++ 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/mediatek/mtk_drm_drv.c b/drivers/gpu/drm/mediatek/mtk_drm_drv.c index f2f07098265d..e2bb0d19ef99 100644 --- a/drivers/gpu/drm/mediatek/mtk_drm_drv.c +++ b/drivers/gpu/drm/mediatek/mtk_drm_drv.c @@ -422,9 +422,21 @@ static const struct of_device_id mtk_ddp_comp_dt_ids[] = { { } }; +static const struct of_device_id mtk_drm_of_ids[] = { + { .compatible = "mediatek,mt2701-mmsys", + .data = &mt2701_mmsys_driver_data}, + { .compatible = "mediatek,mt2712-mmsys", + .data = &mt2712_mmsys_driver_data}, + { .compatible = "mediatek,mt8173-mmsys", + .data = &mt8173_mmsys_driver_data}, + { } +}; + static int mtk_drm_probe(struct platform_device *pdev) { struct device *dev = &pdev->dev; + struct device_node *phandle = dev->parent->of_node; + const struct of_device_id *of_id; struct mtk_drm_private *private; struct device_node *node; struct component_match *match = NULL; @@ -442,8 +454,14 @@ static int mtk_drm_probe(struct platform_device *pdev) return -ENODEV; } + of_id = of_match_node(mtk_drm_of_ids, phandle); + if (!of_id) + return -ENODEV; + + private->data = of_id->data; + /* Iterate over sibling DISP function blocks */ - for_each_child_of_node(dev->of_node->parent, node) { + for_each_child_of_node(phandle->parent, node) { const struct of_device_id *of_id; enum mtk_ddp_comp_type comp_type; int comp_id; @@ -577,22 +595,11 @@ static int mtk_drm_sys_resume(struct device *dev) static SIMPLE_DEV_PM_OPS(mtk_drm_pm_ops, mtk_drm_sys_suspend, mtk_drm_sys_resume); -static const struct of_device_id mtk_drm_of_ids[] = { - { .compatible = "mediatek,mt2701-mmsys", - .data = &mt2701_mmsys_driver_data}, - { .compatible = "mediatek,mt2712-mmsys", - .data = &mt2712_mmsys_driver_data}, - { .compatible = "mediatek,mt8173-mmsys", - .data = &mt8173_mmsys_driver_data}, - { } -}; - static struct platform_driver mtk_drm_platform_driver = { .probe = mtk_drm_probe, .remove = mtk_drm_remove, .driver = { .name = "mediatek-drm", - .of_match_table = mtk_drm_of_ids, .pm = &mtk_drm_pm_ops, }, }; diff --git a/drivers/soc/mediatek/mtk-mmsys.c b/drivers/soc/mediatek/mtk-mmsys.c index 4b286b525cd3..32a92ec447c5 100644 --- a/drivers/soc/mediatek/mtk-mmsys.c +++ b/drivers/soc/mediatek/mtk-mmsys.c @@ -285,6 +285,7 @@ static int mtk_mmsys_probe(struct platform_device *pdev) const struct mtk_mmsys_driver_data *data; struct device *dev = &pdev->dev; struct platform_device *clks; + struct platform_device *drm; void __iomem *config_regs; struct resource *mem; int ret; @@ -307,6 +308,11 @@ static int mtk_mmsys_probe(struct platform_device *pdev) if (IS_ERR(clks)) return PTR_ERR(clks); + drm = platform_device_register_data(&pdev->dev, "mediatek-drm", + PLATFORM_DEVID_AUTO, NULL, 0); + if (IS_ERR(drm)) + return PTR_ERR(drm); + return 0; } -- 2.25.1