From mboxrd@z Thu Jan 1 00:00:00 1970 From: Laurent Pinchart Subject: Re: [PATCH 2/3] drm/rockchip: add ability to handle external dphys in mipi-dsi Date: Wed, 6 Nov 2019 15:05:57 +0200 Message-ID: <20191106130557.GF4878@pendragon.ideasonboard.com> References: <20191106112650.8365-1-heiko.stuebner@theobroma-systems.com> <20191106112650.8365-2-heiko.stuebner@theobroma-systems.com> Mime-Version: 1.0 Content-Type: text/plain; charset=utf-8 Return-path: Content-Disposition: inline In-Reply-To: <20191106112650.8365-2-heiko.stuebner@theobroma-systems.com> Sender: linux-kernel-owner@vger.kernel.org To: Heiko Stuebner Cc: dri-devel@lists.freedesktop.org, a.hajda@samsung.com, hjc@rock-chips.com, robh+dt@kernel.org, mark.rutland@arm.com, narmstrong@baylibre.com, jonas@kwiboo.se, jernej.skrabec@siol.net, philippe.cornu@st.com, yannick.fertre@st.com, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, heiko@sntech.de, christoph.muellner@theobroma-systems.com List-Id: linux-rockchip.vger.kernel.org Hi Heiko, Thank you for the patch. On Wed, Nov 06, 2019 at 12:26:49PM +0100, Heiko Stuebner wrote: > While the common case is that the dsi controller uses an internal dphy, > accessed through the phy registers inside the dsi controller, there is > also the possibility to use a separate dphy from a different vendor. > > One such case is the Rockchip px30 that uses a Innosilicon Mipi dphy, > so add the support for handling such a constellation, including the pll > also getting generated inside that external phy. > > Signed-off-by: Heiko Stuebner > --- > .../display/rockchip/dw_mipi_dsi_rockchip.txt | 7 ++- > .../gpu/drm/rockchip/dw-mipi-dsi-rockchip.c | 54 ++++++++++++++++++- > 2 files changed, 57 insertions(+), 4 deletions(-) > > diff --git a/Documentation/devicetree/bindings/display/rockchip/dw_mipi_dsi_rockchip.txt b/Documentation/devicetree/bindings/display/rockchip/dw_mipi_dsi_rockchip.txt > index ce4c1fc9116c..8b25156a9dcf 100644 > --- a/Documentation/devicetree/bindings/display/rockchip/dw_mipi_dsi_rockchip.txt > +++ b/Documentation/devicetree/bindings/display/rockchip/dw_mipi_dsi_rockchip.txt > @@ -8,8 +8,9 @@ Required properties: > "rockchip,rk3399-mipi-dsi", "snps,dw-mipi-dsi". > - reg: Represent the physical address range of the controller. > - interrupts: Represent the controller's interrupt to the CPU(s). > -- clocks, clock-names: Phandles to the controller's pll reference > - clock(ref) and APB clock(pclk). For RK3399, a phy config clock > +- clocks, clock-names: Phandles to the controller's and APB clock(pclk) > + and either a pll reference clock(ref) (internal dphy) or pll clock(pll) > + (when connected to an external phy). For RK3399, a phy config clock Why does external PHY clock need to be specified here ? Shouldn't it be handled by the PHY instead ? > (phy_cfg) and a grf clock(grf) are required. As described in [1]. > - rockchip,grf: this soc should set GRF regs to mux vopl/vopb. > - ports: contain a port node with endpoint definitions as defined in [2]. > @@ -18,6 +19,8 @@ Required properties: > - video port 1 for either a panel or subsequent encoder > > Optional properties: > +- phys: from general PHY binding: the phandle for the PHY device. > +- phy-names: Should be "dphy" if phys references an external phy. > - power-domains: a phandle to mipi dsi power domain node. > - resets: list of phandle + reset specifier pairs, as described in [3]. > - reset-names: string reset name, must be "apb". > diff --git a/drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c b/drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c > index bc073ec5c183..99ec625e0448 100644 > --- a/drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c > +++ b/drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c > @@ -12,6 +12,7 @@ > #include > #include > #include > +#include > #include > #include > > @@ -223,6 +224,9 @@ struct dw_mipi_dsi_rockchip { > bool is_slave; > struct dw_mipi_dsi_rockchip *slave; > > + /* optional external dphy */ > + struct phy *phy; > + > unsigned int lane_mbps; /* per lane */ > u16 input_div; > u16 feedback_div; > @@ -359,6 +363,9 @@ static int dw_mipi_dsi_phy_init(void *priv_data) > struct dw_mipi_dsi_rockchip *dsi = priv_data; > int ret, i, vco; > > + if (dsi->phy) > + return 0; > + > /* > * Get vco from frequency(lane_mbps) > * vco frequency table > @@ -467,6 +474,27 @@ static int dw_mipi_dsi_phy_init(void *priv_data) > return ret; > } > > +static void dw_mipi_dsi_phy_power_on(void *priv_data) > +{ > + struct dw_mipi_dsi_rockchip *dsi = priv_data; > + int ret; > + > + ret = phy_set_mode(dsi->phy, PHY_MODE_MIPI_DPHY); > + if (ret) { > + DRM_DEV_ERROR(dsi->dev, "failed to set phy mode: %d\n", ret); > + return; > + } > + > + phy_power_on(dsi->phy); > +} > + > +static void dw_mipi_dsi_phy_power_off(void *priv_data) > +{ > + struct dw_mipi_dsi_rockchip *dsi = priv_data; > + > + phy_power_off(dsi->phy); > +} > + > static int > dw_mipi_dsi_get_lane_mbps(void *priv_data, const struct drm_display_mode *mode, > unsigned long mode_flags, u32 lanes, u32 format, > @@ -504,9 +532,21 @@ dw_mipi_dsi_get_lane_mbps(void *priv_data, const struct drm_display_mode *mode, > "DPHY clock frequency is out of range\n"); > } > > - fin = clk_get_rate(dsi->pllref_clk); > fout = target_mbps * USEC_PER_SEC; > > + /* an external phy does have a controllable pll clk */ > + if (dsi->phy) { > + fout = clk_round_rate(dsi->pllref_clk, fout); > + clk_set_rate(dsi->pllref_clk, fout); > + > + dsi->lane_mbps = target_mbps; > + *lane_mbps = dsi->lane_mbps; > + > + return 0; > + } > + > + fin = clk_get_rate(dsi->pllref_clk); > + > /* constraint: 5Mhz <= Fref / N <= 40MHz */ > min_prediv = DIV_ROUND_UP(fin, 40 * USEC_PER_SEC); > max_prediv = fin / (5 * USEC_PER_SEC); > @@ -561,6 +601,8 @@ dw_mipi_dsi_get_lane_mbps(void *priv_data, const struct drm_display_mode *mode, > > static const struct dw_mipi_dsi_phy_ops dw_mipi_dsi_rockchip_phy_ops = { > .init = dw_mipi_dsi_phy_init, > + .power_on = dw_mipi_dsi_phy_power_on, > + .power_off = dw_mipi_dsi_phy_power_off, > .get_lane_mbps = dw_mipi_dsi_get_lane_mbps, > }; > > @@ -920,7 +962,15 @@ static int dw_mipi_dsi_rockchip_probe(struct platform_device *pdev) > return -EINVAL; > } > > - dsi->pllref_clk = devm_clk_get(dev, "ref"); > + /* try to get a possible external dphy */ > + dsi->phy = devm_phy_optional_get(dev, "dphy"); > + if (IS_ERR(dsi->phy)) { > + ret = PTR_ERR(dsi->phy); > + DRM_DEV_ERROR(dev, "failed to get mipi dphy: %d\n", ret); > + return ret; > + } > + > + dsi->pllref_clk = devm_clk_get(dev, dsi->phy ? "pll" : "ref"); > if (IS_ERR(dsi->pllref_clk)) { > ret = PTR_ERR(dsi->pllref_clk); > DRM_DEV_ERROR(dev, -- Regards, Laurent Pinchart From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.2 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 47D3AC5DF62 for ; Wed, 6 Nov 2019 13:06:18 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 0D97321882 for ; Wed, 6 Nov 2019 13:06:18 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="gMmIaxzX"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=ideasonboard.com header.i=@ideasonboard.com header.b="aNPiEWK3" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0D97321882 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:Cc:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:References: Message-ID:Subject:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=6lTqieaorL1ArPpAWg/djXN8ai6cQhI/Dr82fCMJ+uw=; b=gMmIaxzXS2Ugqo edlz00ypqfF7Ge93/V+B2oiDzOk+zGsTp2fKYBXIOmR5CE+sjtimiNKVmPvPDnvhUZsVWxH0LMNCQ +ZGEYPNW6f7dAKaqPY7P9F458QapQR+I+CwHJyoanrchNFbvzAWpyCbklHONLxtSbkt02oCtscPhS W2Yvcn5s4hyzxN6HghS+Mof0wbeikUqtE6Rmue3Kh1wiK91124eBitskqkebfPAMHLzHe+s/llVa3 SydILBWsrbEHIpb3J4dWFHp6sHMOCbIM7gLBr9/KNiUEY3EKL7UjYZ7ame/wq1CGrJuNVXzo0t5FT Y8ypNCzWmedURXqn5raA==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1iSL0r-00046T-C6; Wed, 06 Nov 2019 13:06:17 +0000 Received: from perceval.ideasonboard.com ([2001:4b98:dc2:55:216:3eff:fef7:d647]) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1iSL0n-00045W-Vg; Wed, 06 Nov 2019 13:06:15 +0000 Received: from pendragon.ideasonboard.com (81-175-216-236.bb.dnainternet.fi [81.175.216.236]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 3F66D52C; Wed, 6 Nov 2019 14:06:06 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1573045566; bh=rwBoN4G+nIkI+5mwwd3pzYuox8k2CBX+v3Hd1yQBQGw=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=aNPiEWK3sndyfV2uKQzJt9vYTAKeVjELD9xjz1RZxQvRYlrfizq8BhE5JMF7786tS yiP/KIA0+YSBYXx1Hg+0yQgUK9i/MD9DcTyQGguIJInQ00TU9Df+thxLlpRs9wTZom 9fPWxbx8TEzZc2kktPxlbJbZqNHSFhNTwyXaCCq8= Date: Wed, 6 Nov 2019 15:05:57 +0200 From: Laurent Pinchart To: Heiko Stuebner Subject: Re: [PATCH 2/3] drm/rockchip: add ability to handle external dphys in mipi-dsi Message-ID: <20191106130557.GF4878@pendragon.ideasonboard.com> References: <20191106112650.8365-1-heiko.stuebner@theobroma-systems.com> <20191106112650.8365-2-heiko.stuebner@theobroma-systems.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20191106112650.8365-2-heiko.stuebner@theobroma-systems.com> User-Agent: Mutt/1.10.1 (2018-07-13) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191106_050614_310643_92224243 X-CRM114-Status: GOOD ( 24.74 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: mark.rutland@arm.com, devicetree@vger.kernel.org, jernej.skrabec@siol.net, heiko@sntech.de, narmstrong@baylibre.com, linux-kernel@vger.kernel.org, jonas@kwiboo.se, hjc@rock-chips.com, dri-devel@lists.freedesktop.org, philippe.cornu@st.com, yannick.fertre@st.com, a.hajda@samsung.com, robh+dt@kernel.org, linux-rockchip@lists.infradead.org, linux-arm-kernel@lists.infradead.org, christoph.muellner@theobroma-systems.com Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org Hi Heiko, Thank you for the patch. On Wed, Nov 06, 2019 at 12:26:49PM +0100, Heiko Stuebner wrote: > While the common case is that the dsi controller uses an internal dphy, > accessed through the phy registers inside the dsi controller, there is > also the possibility to use a separate dphy from a different vendor. > > One such case is the Rockchip px30 that uses a Innosilicon Mipi dphy, > so add the support for handling such a constellation, including the pll > also getting generated inside that external phy. > > Signed-off-by: Heiko Stuebner > --- > .../display/rockchip/dw_mipi_dsi_rockchip.txt | 7 ++- > .../gpu/drm/rockchip/dw-mipi-dsi-rockchip.c | 54 ++++++++++++++++++- > 2 files changed, 57 insertions(+), 4 deletions(-) > > diff --git a/Documentation/devicetree/bindings/display/rockchip/dw_mipi_dsi_rockchip.txt b/Documentation/devicetree/bindings/display/rockchip/dw_mipi_dsi_rockchip.txt > index ce4c1fc9116c..8b25156a9dcf 100644 > --- a/Documentation/devicetree/bindings/display/rockchip/dw_mipi_dsi_rockchip.txt > +++ b/Documentation/devicetree/bindings/display/rockchip/dw_mipi_dsi_rockchip.txt > @@ -8,8 +8,9 @@ Required properties: > "rockchip,rk3399-mipi-dsi", "snps,dw-mipi-dsi". > - reg: Represent the physical address range of the controller. > - interrupts: Represent the controller's interrupt to the CPU(s). > -- clocks, clock-names: Phandles to the controller's pll reference > - clock(ref) and APB clock(pclk). For RK3399, a phy config clock > +- clocks, clock-names: Phandles to the controller's and APB clock(pclk) > + and either a pll reference clock(ref) (internal dphy) or pll clock(pll) > + (when connected to an external phy). For RK3399, a phy config clock Why does external PHY clock need to be specified here ? Shouldn't it be handled by the PHY instead ? > (phy_cfg) and a grf clock(grf) are required. As described in [1]. > - rockchip,grf: this soc should set GRF regs to mux vopl/vopb. > - ports: contain a port node with endpoint definitions as defined in [2]. > @@ -18,6 +19,8 @@ Required properties: > - video port 1 for either a panel or subsequent encoder > > Optional properties: > +- phys: from general PHY binding: the phandle for the PHY device. > +- phy-names: Should be "dphy" if phys references an external phy. > - power-domains: a phandle to mipi dsi power domain node. > - resets: list of phandle + reset specifier pairs, as described in [3]. > - reset-names: string reset name, must be "apb". > diff --git a/drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c b/drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c > index bc073ec5c183..99ec625e0448 100644 > --- a/drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c > +++ b/drivers/gpu/drm/rockchip/dw-mipi-dsi-rockchip.c > @@ -12,6 +12,7 @@ > #include > #include > #include > +#include > #include > #include > > @@ -223,6 +224,9 @@ struct dw_mipi_dsi_rockchip { > bool is_slave; > struct dw_mipi_dsi_rockchip *slave; > > + /* optional external dphy */ > + struct phy *phy; > + > unsigned int lane_mbps; /* per lane */ > u16 input_div; > u16 feedback_div; > @@ -359,6 +363,9 @@ static int dw_mipi_dsi_phy_init(void *priv_data) > struct dw_mipi_dsi_rockchip *dsi = priv_data; > int ret, i, vco; > > + if (dsi->phy) > + return 0; > + > /* > * Get vco from frequency(lane_mbps) > * vco frequency table > @@ -467,6 +474,27 @@ static int dw_mipi_dsi_phy_init(void *priv_data) > return ret; > } > > +static void dw_mipi_dsi_phy_power_on(void *priv_data) > +{ > + struct dw_mipi_dsi_rockchip *dsi = priv_data; > + int ret; > + > + ret = phy_set_mode(dsi->phy, PHY_MODE_MIPI_DPHY); > + if (ret) { > + DRM_DEV_ERROR(dsi->dev, "failed to set phy mode: %d\n", ret); > + return; > + } > + > + phy_power_on(dsi->phy); > +} > + > +static void dw_mipi_dsi_phy_power_off(void *priv_data) > +{ > + struct dw_mipi_dsi_rockchip *dsi = priv_data; > + > + phy_power_off(dsi->phy); > +} > + > static int > dw_mipi_dsi_get_lane_mbps(void *priv_data, const struct drm_display_mode *mode, > unsigned long mode_flags, u32 lanes, u32 format, > @@ -504,9 +532,21 @@ dw_mipi_dsi_get_lane_mbps(void *priv_data, const struct drm_display_mode *mode, > "DPHY clock frequency is out of range\n"); > } > > - fin = clk_get_rate(dsi->pllref_clk); > fout = target_mbps * USEC_PER_SEC; > > + /* an external phy does have a controllable pll clk */ > + if (dsi->phy) { > + fout = clk_round_rate(dsi->pllref_clk, fout); > + clk_set_rate(dsi->pllref_clk, fout); > + > + dsi->lane_mbps = target_mbps; > + *lane_mbps = dsi->lane_mbps; > + > + return 0; > + } > + > + fin = clk_get_rate(dsi->pllref_clk); > + > /* constraint: 5Mhz <= Fref / N <= 40MHz */ > min_prediv = DIV_ROUND_UP(fin, 40 * USEC_PER_SEC); > max_prediv = fin / (5 * USEC_PER_SEC); > @@ -561,6 +601,8 @@ dw_mipi_dsi_get_lane_mbps(void *priv_data, const struct drm_display_mode *mode, > > static const struct dw_mipi_dsi_phy_ops dw_mipi_dsi_rockchip_phy_ops = { > .init = dw_mipi_dsi_phy_init, > + .power_on = dw_mipi_dsi_phy_power_on, > + .power_off = dw_mipi_dsi_phy_power_off, > .get_lane_mbps = dw_mipi_dsi_get_lane_mbps, > }; > > @@ -920,7 +962,15 @@ static int dw_mipi_dsi_rockchip_probe(struct platform_device *pdev) > return -EINVAL; > } > > - dsi->pllref_clk = devm_clk_get(dev, "ref"); > + /* try to get a possible external dphy */ > + dsi->phy = devm_phy_optional_get(dev, "dphy"); > + if (IS_ERR(dsi->phy)) { > + ret = PTR_ERR(dsi->phy); > + DRM_DEV_ERROR(dev, "failed to get mipi dphy: %d\n", ret); > + return ret; > + } > + > + dsi->pllref_clk = devm_clk_get(dev, dsi->phy ? "pll" : "ref"); > if (IS_ERR(dsi->pllref_clk)) { > ret = PTR_ERR(dsi->pllref_clk); > DRM_DEV_ERROR(dev, -- Regards, Laurent Pinchart _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.2 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 5D37DC5DF62 for ; Wed, 6 Nov 2019 13:06:10 +0000 (UTC) Received: from gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 31E892187F for ; Wed, 6 Nov 2019 13:06:10 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 31E892187F Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=ideasonboard.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=dri-devel-bounces@lists.freedesktop.org Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id AE5C86ED25; Wed, 6 Nov 2019 13:06:09 +0000 (UTC) Received: from perceval.ideasonboard.com (perceval.ideasonboard.com [IPv6:2001:4b98:dc2:55:216:3eff:fef7:d647]) by gabe.freedesktop.org (Postfix) with ESMTPS id 32B636ED25 for ; Wed, 6 Nov 2019 13:06:08 +0000 (UTC) Received: from pendragon.ideasonboard.com (81-175-216-236.bb.dnainternet.fi [81.175.216.236]) by perceval.ideasonboard.com (Postfix) with ESMTPSA id 3F66D52C; Wed, 6 Nov 2019 14:06:06 +0100 (CET) Date: Wed, 6 Nov 2019 15:05:57 +0200 From: Laurent Pinchart To: Heiko Stuebner Subject: Re: [PATCH 2/3] drm/rockchip: add ability to handle external dphys in mipi-dsi Message-ID: <20191106130557.GF4878@pendragon.ideasonboard.com> References: <20191106112650.8365-1-heiko.stuebner@theobroma-systems.com> <20191106112650.8365-2-heiko.stuebner@theobroma-systems.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20191106112650.8365-2-heiko.stuebner@theobroma-systems.com> User-Agent: Mutt/1.10.1 (2018-07-13) X-Mailman-Original-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=ideasonboard.com; s=mail; t=1573045566; bh=rwBoN4G+nIkI+5mwwd3pzYuox8k2CBX+v3Hd1yQBQGw=; h=Date:From:To:Cc:Subject:References:In-Reply-To:From; b=aNPiEWK3sndyfV2uKQzJt9vYTAKeVjELD9xjz1RZxQvRYlrfizq8BhE5JMF7786tS yiP/KIA0+YSBYXx1Hg+0yQgUK9i/MD9DcTyQGguIJInQ00TU9Df+thxLlpRs9wTZom 9fPWxbx8TEzZc2kktPxlbJbZqNHSFhNTwyXaCCq8= X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: mark.rutland@arm.com, devicetree@vger.kernel.org, jernej.skrabec@siol.net, narmstrong@baylibre.com, linux-kernel@vger.kernel.org, jonas@kwiboo.se, dri-devel@lists.freedesktop.org, philippe.cornu@st.com, yannick.fertre@st.com, robh+dt@kernel.org, linux-rockchip@lists.infradead.org, linux-arm-kernel@lists.infradead.org, christoph.muellner@theobroma-systems.com Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Message-ID: <20191106130557.BXmkM6kq2vX7B4I4kiyVdCDa-50joGiDrhWihLxMrrI@z> SGkgSGVpa28sCgpUaGFuayB5b3UgZm9yIHRoZSBwYXRjaC4KCk9uIFdlZCwgTm92IDA2LCAyMDE5 IGF0IDEyOjI2OjQ5UE0gKzAxMDAsIEhlaWtvIFN0dWVibmVyIHdyb3RlOgo+IFdoaWxlIHRoZSBj b21tb24gY2FzZSBpcyB0aGF0IHRoZSBkc2kgY29udHJvbGxlciB1c2VzIGFuIGludGVybmFsIGRw aHksCj4gYWNjZXNzZWQgdGhyb3VnaCB0aGUgcGh5IHJlZ2lzdGVycyBpbnNpZGUgdGhlIGRzaSBj b250cm9sbGVyLCB0aGVyZSBpcwo+IGFsc28gdGhlIHBvc3NpYmlsaXR5IHRvIHVzZSBhIHNlcGFy YXRlIGRwaHkgZnJvbSBhIGRpZmZlcmVudCB2ZW5kb3IuCj4gCj4gT25lIHN1Y2ggY2FzZSBpcyB0 aGUgUm9ja2NoaXAgcHgzMCB0aGF0IHVzZXMgYSBJbm5vc2lsaWNvbiBNaXBpIGRwaHksCj4gc28g YWRkIHRoZSBzdXBwb3J0IGZvciBoYW5kbGluZyBzdWNoIGEgY29uc3RlbGxhdGlvbiwgaW5jbHVk aW5nIHRoZSBwbGwKPiBhbHNvIGdldHRpbmcgZ2VuZXJhdGVkIGluc2lkZSB0aGF0IGV4dGVybmFs IHBoeS4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBIZWlrbyBTdHVlYm5lciA8aGVpa28uc3R1ZWJuZXJA dGhlb2Jyb21hLXN5c3RlbXMuY29tPgo+IC0tLQo+ICAuLi4vZGlzcGxheS9yb2NrY2hpcC9kd19t aXBpX2RzaV9yb2NrY2hpcC50eHQgfCAgNyArKy0KPiAgLi4uL2dwdS9kcm0vcm9ja2NoaXAvZHct bWlwaS1kc2ktcm9ja2NoaXAuYyAgIHwgNTQgKysrKysrKysrKysrKysrKysrLQo+ICAyIGZpbGVz IGNoYW5nZWQsIDU3IGluc2VydGlvbnMoKyksIDQgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdp dCBhL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3JvY2tjaGlwL2R3 X21pcGlfZHNpX3JvY2tjaGlwLnR4dCBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5n cy9kaXNwbGF5L3JvY2tjaGlwL2R3X21pcGlfZHNpX3JvY2tjaGlwLnR4dAo+IGluZGV4IGNlNGMx ZmM5MTE2Yy4uOGIyNTE1NmE5ZGNmIDEwMDY0NAo+IC0tLSBhL0RvY3VtZW50YXRpb24vZGV2aWNl dHJlZS9iaW5kaW5ncy9kaXNwbGF5L3JvY2tjaGlwL2R3X21pcGlfZHNpX3JvY2tjaGlwLnR4dAo+ ICsrKyBiL0RvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9kaXNwbGF5L3JvY2tjaGlw L2R3X21pcGlfZHNpX3JvY2tjaGlwLnR4dAo+IEBAIC04LDggKzgsOSBAQCBSZXF1aXJlZCBwcm9w ZXJ0aWVzOgo+ICAJICAgICAgInJvY2tjaGlwLHJrMzM5OS1taXBpLWRzaSIsICJzbnBzLGR3LW1p cGktZHNpIi4KPiAgLSByZWc6IFJlcHJlc2VudCB0aGUgcGh5c2ljYWwgYWRkcmVzcyByYW5nZSBv ZiB0aGUgY29udHJvbGxlci4KPiAgLSBpbnRlcnJ1cHRzOiBSZXByZXNlbnQgdGhlIGNvbnRyb2xs ZXIncyBpbnRlcnJ1cHQgdG8gdGhlIENQVShzKS4KPiAtLSBjbG9ja3MsIGNsb2NrLW5hbWVzOiBQ aGFuZGxlcyB0byB0aGUgY29udHJvbGxlcidzIHBsbCByZWZlcmVuY2UKPiAtICBjbG9jayhyZWYp IGFuZCBBUEIgY2xvY2socGNsaykuIEZvciBSSzMzOTksIGEgcGh5IGNvbmZpZyBjbG9jawo+ICst IGNsb2NrcywgY2xvY2stbmFtZXM6IFBoYW5kbGVzIHRvIHRoZSBjb250cm9sbGVyJ3MgYW5kIEFQ QiBjbG9jayhwY2xrKQo+ICsgIGFuZCBlaXRoZXIgYSBwbGwgcmVmZXJlbmNlIGNsb2NrKHJlZikg KGludGVybmFsIGRwaHkpIG9yIHBsbCBjbG9jayhwbGwpCj4gKyAgKHdoZW4gY29ubmVjdGVkIHRv IGFuIGV4dGVybmFsIHBoeSkuIEZvciBSSzMzOTksIGEgcGh5IGNvbmZpZyBjbG9jawoKV2h5IGRv ZXMgZXh0ZXJuYWwgUEhZIGNsb2NrIG5lZWQgdG8gYmUgc3BlY2lmaWVkIGhlcmUgPyBTaG91bGRu J3QgaXQgYmUKaGFuZGxlZCBieSB0aGUgUEhZIGluc3RlYWQgPwoKPiAgICAocGh5X2NmZykgYW5k IGEgZ3JmIGNsb2NrKGdyZikgYXJlIHJlcXVpcmVkLiBBcyBkZXNjcmliZWQgaW4gWzFdLgo+ICAt IHJvY2tjaGlwLGdyZjogdGhpcyBzb2Mgc2hvdWxkIHNldCBHUkYgcmVncyB0byBtdXggdm9wbC92 b3BiLgo+ICAtIHBvcnRzOiBjb250YWluIGEgcG9ydCBub2RlIHdpdGggZW5kcG9pbnQgZGVmaW5p dGlvbnMgYXMgZGVmaW5lZCBpbiBbMl0uCj4gQEAgLTE4LDYgKzE5LDggQEAgUmVxdWlyZWQgcHJv cGVydGllczoKPiAgLSB2aWRlbyBwb3J0IDEgZm9yIGVpdGhlciBhIHBhbmVsIG9yIHN1YnNlcXVl bnQgZW5jb2Rlcgo+ICAKPiAgT3B0aW9uYWwgcHJvcGVydGllczoKPiArLSBwaHlzOiBmcm9tIGdl bmVyYWwgUEhZIGJpbmRpbmc6IHRoZSBwaGFuZGxlIGZvciB0aGUgUEhZIGRldmljZS4KPiArLSBw aHktbmFtZXM6IFNob3VsZCBiZSAiZHBoeSIgaWYgcGh5cyByZWZlcmVuY2VzIGFuIGV4dGVybmFs IHBoeS4KPiAgLSBwb3dlci1kb21haW5zOiBhIHBoYW5kbGUgdG8gbWlwaSBkc2kgcG93ZXIgZG9t YWluIG5vZGUuCj4gIC0gcmVzZXRzOiBsaXN0IG9mIHBoYW5kbGUgKyByZXNldCBzcGVjaWZpZXIg cGFpcnMsIGFzIGRlc2NyaWJlZCBpbiBbM10uCj4gIC0gcmVzZXQtbmFtZXM6IHN0cmluZyByZXNl dCBuYW1lLCBtdXN0IGJlICJhcGIiLgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcm9j a2NoaXAvZHctbWlwaS1kc2ktcm9ja2NoaXAuYyBiL2RyaXZlcnMvZ3B1L2RybS9yb2NrY2hpcC9k dy1taXBpLWRzaS1yb2NrY2hpcC5jCj4gaW5kZXggYmMwNzNlYzVjMTgzLi45OWVjNjI1ZTA0NDgg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JvY2tjaGlwL2R3LW1pcGktZHNpLXJvY2tj aGlwLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vcm9ja2NoaXAvZHctbWlwaS1kc2ktcm9ja2No aXAuYwo+IEBAIC0xMiw2ICsxMiw3IEBACj4gICNpbmNsdWRlIDxsaW51eC9tZmQvc3lzY29uLmg+ Cj4gICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KPiAgI2luY2x1ZGUgPGxpbnV4L29mX2Rldmlj ZS5oPgo+ICsjaW5jbHVkZSA8bGludXgvcGh5L3BoeS5oPgo+ICAjaW5jbHVkZSA8bGludXgvcG1f cnVudGltZS5oPgo+ICAjaW5jbHVkZSA8bGludXgvcmVnbWFwLmg+Cj4gIAo+IEBAIC0yMjMsNiAr MjI0LDkgQEAgc3RydWN0IGR3X21pcGlfZHNpX3JvY2tjaGlwIHsKPiAgCWJvb2wgaXNfc2xhdmU7 Cj4gIAlzdHJ1Y3QgZHdfbWlwaV9kc2lfcm9ja2NoaXAgKnNsYXZlOwo+ICAKPiArCS8qIG9wdGlv bmFsIGV4dGVybmFsIGRwaHkgKi8KPiArCXN0cnVjdCBwaHkgKnBoeTsKPiArCj4gIAl1bnNpZ25l ZCBpbnQgbGFuZV9tYnBzOyAvKiBwZXIgbGFuZSAqLwo+ICAJdTE2IGlucHV0X2RpdjsKPiAgCXUx NiBmZWVkYmFja19kaXY7Cj4gQEAgLTM1OSw2ICszNjMsOSBAQCBzdGF0aWMgaW50IGR3X21pcGlf ZHNpX3BoeV9pbml0KHZvaWQgKnByaXZfZGF0YSkKPiAgCXN0cnVjdCBkd19taXBpX2RzaV9yb2Nr Y2hpcCAqZHNpID0gcHJpdl9kYXRhOwo+ICAJaW50IHJldCwgaSwgdmNvOwo+ICAKPiArCWlmIChk c2ktPnBoeSkKPiArCQlyZXR1cm4gMDsKPiArCj4gIAkvKgo+ICAJICogR2V0IHZjbyBmcm9tIGZy ZXF1ZW5jeShsYW5lX21icHMpCj4gIAkgKiB2Y28JZnJlcXVlbmN5IHRhYmxlCj4gQEAgLTQ2Nyw2 ICs0NzQsMjcgQEAgc3RhdGljIGludCBkd19taXBpX2RzaV9waHlfaW5pdCh2b2lkICpwcml2X2Rh dGEpCj4gIAlyZXR1cm4gcmV0Owo+ICB9Cj4gIAo+ICtzdGF0aWMgdm9pZCBkd19taXBpX2RzaV9w aHlfcG93ZXJfb24odm9pZCAqcHJpdl9kYXRhKQo+ICt7Cj4gKwlzdHJ1Y3QgZHdfbWlwaV9kc2lf cm9ja2NoaXAgKmRzaSA9IHByaXZfZGF0YTsKPiArCWludCByZXQ7Cj4gKwo+ICsJcmV0ID0gcGh5 X3NldF9tb2RlKGRzaS0+cGh5LCBQSFlfTU9ERV9NSVBJX0RQSFkpOwo+ICsJaWYgKHJldCkgewo+ ICsJCURSTV9ERVZfRVJST1IoZHNpLT5kZXYsICJmYWlsZWQgdG8gc2V0IHBoeSBtb2RlOiAlZFxu IiwgcmV0KTsKPiArCQlyZXR1cm47Cj4gKwl9Cj4gKwo+ICsJcGh5X3Bvd2VyX29uKGRzaS0+cGh5 KTsKPiArfQo+ICsKPiArc3RhdGljIHZvaWQgZHdfbWlwaV9kc2lfcGh5X3Bvd2VyX29mZih2b2lk ICpwcml2X2RhdGEpCj4gK3sKPiArCXN0cnVjdCBkd19taXBpX2RzaV9yb2NrY2hpcCAqZHNpID0g cHJpdl9kYXRhOwo+ICsKPiArCXBoeV9wb3dlcl9vZmYoZHNpLT5waHkpOwo+ICt9Cj4gKwo+ICBz dGF0aWMgaW50Cj4gIGR3X21pcGlfZHNpX2dldF9sYW5lX21icHModm9pZCAqcHJpdl9kYXRhLCBj b25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9kZSwKPiAgCQkJICB1bnNpZ25lZCBsb25n IG1vZGVfZmxhZ3MsIHUzMiBsYW5lcywgdTMyIGZvcm1hdCwKPiBAQCAtNTA0LDkgKzUzMiwyMSBA QCBkd19taXBpX2RzaV9nZXRfbGFuZV9tYnBzKHZvaWQgKnByaXZfZGF0YSwgY29uc3Qgc3RydWN0 IGRybV9kaXNwbGF5X21vZGUgKm1vZGUsCj4gIAkJCQkgICAgICAiRFBIWSBjbG9jayBmcmVxdWVu Y3kgaXMgb3V0IG9mIHJhbmdlXG4iKTsKPiAgCX0KPiAgCj4gLQlmaW4gPSBjbGtfZ2V0X3JhdGUo ZHNpLT5wbGxyZWZfY2xrKTsKPiAgCWZvdXQgPSB0YXJnZXRfbWJwcyAqIFVTRUNfUEVSX1NFQzsK PiAgCj4gKwkvKiBhbiBleHRlcm5hbCBwaHkgZG9lcyBoYXZlIGEgY29udHJvbGxhYmxlIHBsbCBj bGsgKi8KPiArCWlmIChkc2ktPnBoeSkgewo+ICsJCWZvdXQgPSBjbGtfcm91bmRfcmF0ZShkc2kt PnBsbHJlZl9jbGssIGZvdXQpOwo+ICsJCWNsa19zZXRfcmF0ZShkc2ktPnBsbHJlZl9jbGssIGZv dXQpOwo+ICsKPiArCQlkc2ktPmxhbmVfbWJwcyA9IHRhcmdldF9tYnBzOwo+ICsJCSpsYW5lX21i cHMgPSBkc2ktPmxhbmVfbWJwczsKPiArCj4gKwkJcmV0dXJuIDA7Cj4gKwl9Cj4gKwo+ICsJZmlu ID0gY2xrX2dldF9yYXRlKGRzaS0+cGxscmVmX2Nsayk7Cj4gKwo+ICAJLyogY29uc3RyYWludDog NU1oeiA8PSBGcmVmIC8gTiA8PSA0ME1IeiAqLwo+ICAJbWluX3ByZWRpdiA9IERJVl9ST1VORF9V UChmaW4sIDQwICogVVNFQ19QRVJfU0VDKTsKPiAgCW1heF9wcmVkaXYgPSBmaW4gLyAoNSAqIFVT RUNfUEVSX1NFQyk7Cj4gQEAgLTU2MSw2ICs2MDEsOCBAQCBkd19taXBpX2RzaV9nZXRfbGFuZV9t YnBzKHZvaWQgKnByaXZfZGF0YSwgY29uc3Qgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUs Cj4gIAo+ICBzdGF0aWMgY29uc3Qgc3RydWN0IGR3X21pcGlfZHNpX3BoeV9vcHMgZHdfbWlwaV9k c2lfcm9ja2NoaXBfcGh5X29wcyA9IHsKPiAgCS5pbml0ID0gZHdfbWlwaV9kc2lfcGh5X2luaXQs Cj4gKwkucG93ZXJfb24gPSBkd19taXBpX2RzaV9waHlfcG93ZXJfb24sCj4gKwkucG93ZXJfb2Zm ID0gZHdfbWlwaV9kc2lfcGh5X3Bvd2VyX29mZiwKPiAgCS5nZXRfbGFuZV9tYnBzID0gZHdfbWlw aV9kc2lfZ2V0X2xhbmVfbWJwcywKPiAgfTsKPiAgCj4gQEAgLTkyMCw3ICs5NjIsMTUgQEAgc3Rh dGljIGludCBkd19taXBpX2RzaV9yb2NrY2hpcF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2KQo+ICAJCXJldHVybiAtRUlOVkFMOwo+ICAJfQo+ICAKPiAtCWRzaS0+cGxscmVmX2Ns ayA9IGRldm1fY2xrX2dldChkZXYsICJyZWYiKTsKPiArCS8qIHRyeSB0byBnZXQgYSBwb3NzaWJs ZSBleHRlcm5hbCBkcGh5ICovCj4gKwlkc2ktPnBoeSA9IGRldm1fcGh5X29wdGlvbmFsX2dldChk ZXYsICJkcGh5Iik7Cj4gKwlpZiAoSVNfRVJSKGRzaS0+cGh5KSkgewo+ICsJCXJldCA9IFBUUl9F UlIoZHNpLT5waHkpOwo+ICsJCURSTV9ERVZfRVJST1IoZGV2LCAiZmFpbGVkIHRvIGdldCBtaXBp IGRwaHk6ICVkXG4iLCByZXQpOwo+ICsJCXJldHVybiByZXQ7Cj4gKwl9Cj4gKwo+ICsJZHNpLT5w bGxyZWZfY2xrID0gZGV2bV9jbGtfZ2V0KGRldiwgZHNpLT5waHkgPyAicGxsIiA6ICJyZWYiKTsK PiAgCWlmIChJU19FUlIoZHNpLT5wbGxyZWZfY2xrKSkgewo+ICAJCXJldCA9IFBUUl9FUlIoZHNp LT5wbGxyZWZfY2xrKTsKPiAgCQlEUk1fREVWX0VSUk9SKGRldiwKCi0tIApSZWdhcmRzLAoKTGF1 cmVudCBQaW5jaGFydApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2 ZWw=