Hi Marcel,
On Tue, 2021-03-23 at 00:19 +0000, Marcel Ziswiler wrote:
Hi Liu
I gave this a try however I believe I am still missing some piece as it throws the following during compilation of the device tree:
Thanks for trying.
arch/arm64/boot/dts/freescale/imx8qxp.dtsi:333.18-439.7: ERROR (phandle_references): /dpu@56180000: Reference to non-existent node or label "dc0_irqsteer"
arch/arm64/boot/dts/freescale/imx8qxp.dtsi:333.18-439.7: ERROR (phandle_references): /dpu@56180000: Reference to non-existent node or label "dc0_dpu_lpcg"
arch/arm64/boot/dts/freescale/imx8qxp.dtsi:333.18-439.7: ERROR (phandle_references): /dpu@56180000: Reference to non-existent node or label "dc0_dpu_lpcg"
arch/arm64/boot/dts/freescale/imx8qxp.dtsi:333.18-439.7: ERROR (phandle_references): /dpu@56180000: Reference to non-existent node or label "dc0_disp_lpcg"
arch/arm64/boot/dts/freescale/imx8qxp.dtsi:333.18-439.7: ERROR (phandle_references): /dpu@56180000: Reference to non-existent node or label "dc0_disp_lpcg"
arch/arm64/boot/dts/freescale/imx8qxp.dtsi:333.18-439.7: ERROR (phandle_references): /dpu@56180000: Reference to non-existent node or label "dc0_dpr1_channel1"
arch/arm64/boot/dts/freescale/imx8qxp.dtsi:333.18-439.7: ERROR (phandle_references): /dpu@56180000: Reference to non-existent node or label "dc0_dpr1_channel2"
arch/arm64/boot/dts/freescale/imx8qxp.dtsi:333.18-439.7: ERROR (phandle_references): /dpu@56180000: Reference to non-existent node or label "dc0_dpr1_channel3"
arch/arm64/boot/dts/freescale/imx8qxp.dtsi:333.18-439.7: ERROR (phandle_references): /dpu@56180000: Reference to non-existent node or label "dc0_dpr2_channel1"
arch/arm64/boot/dts/freescale/imx8qxp.dtsi:333.18-439.7: ERROR (phandle_references): /dpu@56180000: Reference to non-existent node or label "dc0_dpr2_channel2"
arch/arm64/boot/dts/freescale/imx8qxp.dtsi:333.18-439.7: ERROR (phandle_references): /dpu@56180000: Reference to non-existent node or label "dc0_dpr2_channel3"
arch/arm64/boot/dts/freescale/imx8qxp.dtsi:501.38-591.3: ERROR (phandle_references): /syscon@56221000: Reference to non-existent node or label "mipi_lvds_0_di_mipi_lvds_regs_lpcg"
arch/arm64/boot/dts/freescale/imx8qxp.dtsi:603.29-656.7: ERROR (phandle_references): /pixel-combiner@56020000: Reference to non-existent node or label "dc0_pixel_combiner_lpcg"
For now I just put all the examples from the various Documentation/devicetree/bindings/*/imx8qxp-*.yaml files directly into arch/arm64/boot/dts/freescale/imx8qxp.dtsi. Maybe you do have the various device tree parts available somewhere as well?
It's not enough to just put all the examples from those dt schemas into imx8qxp.dtsi. That way, you'll meet the 'make dtbs' build break for sure like the above log, because of missing dependencies.
Any suggestions? Do you by any chance have a git tree available anywhere which includes all dependencies and everything which one could try?
AFAIK, we don't have any public git repo to share all my work here.
So, I attach a patch set(WIP) in this email to support the in-tree 'koe,tx26d202vm0bwa' dual-link lvds panels on i.MX8qm/qxp MEK boards. The patch set doesn't support the downstream LVDS to HDMI bridge(a single chip connects with the MEK boards with MiniSAS connectors) mentioned in the cover letter.
The patch set is appliable to the latest drm-misc-next branch.
Patch 1 ~ 16 are picked from shawn's for-next git branch.
Others contain the series of DPU KMS support, the series of i.MX8qxp LVDS PHY support and this series, plus i.MX8qm LVDS PHY, i.MX8qm/qxp MSI bus, some i.MX8qm power domains/clocks support and some DT support for the display pipes.
The last patch builds in all necessary drivers to support the LVDS displays. However, the patch set supports building them as modules, ofc.
Moreover, if you see logs on i.MX8qxp like below, that's caused by adding DC1 clocks(only valid for i.MX8qm, as i.MX8qm has dual DC subsystems, while i.MX8qxp has one) in clk-imx8qxp.c and i.MX8qm/qxp specific clocks are not split yet.
[ 3.974330] dc1_disp0_clk: failed to get clock parent -22
Regards, Liu Ying
Thanks!
Cheers
Marcel
On Wed, 2021-03-17 at 11:42 +0800, Liu Ying wrote:
Hi,
This is the v6 series to add some DRM bridge drivers support for i.MX8qm/qxp SoCs.
The bridges may chain one by one to form display pipes to support LVDS displays. The relevant display controller is DPU embedded in i.MX8qm/qxp SoCs.
The DPU KMS driver can be found at: https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.spinic...
This series supports the following display pipes:
- i.MX8qxp:
prefetch eng -> DPU -> pixel combiner -> pixel link -> pixel link to DPI(PXL2DPI) -> LVDS display bridge(LDB)
- i.MX8qm:
prefetch eng -> DPU -> pixel combiner -> pixel link -> LVDS display bridge(LDB)
This series dropped the patch 'phy: Add LVDS configuration options', as suggested by Robert Foss, because it has already been sent with the following series to add Mixel combo PHY found in i.MX8qxp: https://eur01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fwww.spinic...
So, this version depends on that series.
Patch 1/14 and 2/14 add bus formats used by pixel combiner.
Patch 7/14 adds dt-binding for Control and Status Registers module(a syscon used by PXL2DPI and LDB), which references the PXL2DPI and LDB schemas.
Patch 10/14 adds a helper for LDB bridge drivers.
Patch 3/14 ~ 6/14, 8/14, 9/14 and 11/14 ~ 13/14 add drm bridge drivers and dt-bindings support for the bridges.
Patch 14/14 updates MAINTAINERS.
I've tested this series with a koe,tx26d202vm0bwa dual link LVDS panel and a LVDS to HDMI bridge(with a downstream drm bridge driver).
Welcome comments, thanks.
v5->v6:
- Fix data organizations in documentation(patch 2/14) for MEDIA_BUS_FMT_RGB{666,888}_1X30-CPADLO. (Laurent)
- Add Laurent's R-b tags on patch 1/14 and 2/14.
- Drop 'select' schema from the CSR dt-binding documentation(patch 7/14). (Rob)
- Add Rob's R-b tag on patch 8/14.
v4->v5:
- Drop the patch 'phy: Add LVDS configuration options'. (Robert)
- Add Robert's R-b tags on patch 1/14, 2/14, 4/14 and 6/14.
- Drop the 'PC_BUF_PARA_REG' register definition from the pixel combiner bridge driver(patch 4/14). (Robert)
- Make a comment occupy a line in the pixel link bridge driver(patch 6/14). (Robert)
- Introduce a new patch(patch 7/14) to add dt-binding for Control and Status Registers module. (Rob)
- Make imx-ldb-helper be a pure object to be linked with i.MX8qxp LDB bridge driver and i.MX8qm LDB bridge driver, instead of a module. Correspondingly, rename 'imx8{qm, qxp}-ldb.c' to 'imx8{qm, qxp}-ldb-drv.c'. (Robert)
- Move 'imx_ldb_helper.h' to 'drivers/gpu/drm/bridge/imx/imx-ldb-helper.h'. (Robert)
- s/__FSL_IMX_LDB__/__IMX_LDB_HELPER__/ for 'imx-ldb-helper.h'.
v3->v4:
- Use 'fsl,sc-resource' DT property to get the SCU resource ID associated with the PXL2DPI instance instead of using alias ID. (Rob)
- Add Rob's R-b tag on patch 11/14.
v2->v3:
- Drop 'fsl,syscon' DT properties from fsl,imx8qxp-ldb.yaml and fsl,imx8qxp-pxl2dpi.yaml. (Rob)
- Mention the CSR module controls LDB and PXL2DPI in fsl,imx8qxp-ldb.yaml and fsl,imx8qxp-pxl2dpi.yaml.
- Call syscon_node_to_regmap() to get regmaps from LDB bridge helper driver and PXL2DPI bridger driver instead of syscon_regmap_lookup_by_phandle().
- Drop two macros from pixel link bridge driver which help define functions and define them directly.
- Properly disable all pixel link controls to POR value by calling imx8qxp_pixel_link_disable_all_controls() from imx8qxp_pixel_link_bridge_probe().
- Add Rob's R-b tags on patch 4/14 and 6/14.
v1->v2:
- Rebase the series upon the latest drm-misc-next branch(5.11-rc2 based).
- Use graph schema in the dt-bindings of the bridges. (Laurent)
- Require all four pixel link output ports in fsl,imx8qxp-pixel-link.yaml. (Laurent)
- Side note i.MX8qm/qxp LDB official name 'pixel mapper' in fsl,imx8qxp-ldb.yaml. (Laurent)
- Mention pixel link is accessed via SCU firmware in fsl,imx8qxp-pixel-link.yaml. (Rob)
- Use enum instead of oneOf + const for the reg property of pixel combiner channels in fsl,imx8qxp-pixel-combiner.yaml. (Rob)
- Rewrite the function to find the next bridge in pixel link bridge driver by properly using OF APIs and dropping unnecessary DT validation. (Rob)
- Drop unnecessary port availability check in i.MX8qxp pixel link to DPI bridge driver.
- Drop unnecessary DT validation from i.MX8qxp LDB bridge driver.
- Use of_graph_get_endpoint_by_regs() and of_graph_get_remote_endpoint() to get the input remote endpoint in imx8qxp_ldb_set_di_id() of i.MX8qxp LDB bridge driver.
- Avoid using companion_port OF node after putting it in imx8qxp_ldb_parse_dt_companion() of i.MX8qxp LDB bridge driver.
- Drop unnecessary check for maximum available LDB channels from i.MX8qm LDB bridge driver.
- Mention i.MX8qm/qxp LDB official name 'pixel mapper' in i.MX8qm/qxp LDB bridge drivers and Kconfig help messages.
Liu Ying (14): media: uapi: Add some RGB bus formats for i.MX8qm/qxp pixel combiner media: docs: Add some RGB bus formats for i.MX8qm/qxp pixel combiner dt-bindings: display: bridge: Add i.MX8qm/qxp pixel combiner binding drm/bridge: imx: Add i.MX8qm/qxp pixel combiner support dt-bindings: display: bridge: Add i.MX8qm/qxp display pixel link binding drm/bridge: imx: Add i.MX8qm/qxp display pixel link support dt-bindings: mfd: Add i.MX8qm/qxp Control and Status Registers module binding dt-bindings: display: bridge: Add i.MX8qxp pixel link to DPI binding drm/bridge: imx: Add i.MX8qxp pixel link to DPI support drm/bridge: imx: Add LDB driver helper support dt-bindings: display: bridge: Add i.MX8qm/qxp LVDS display bridge binding drm/bridge: imx: Add LDB support for i.MX8qxp drm/bridge: imx: Add LDB support for i.MX8qm MAINTAINERS: add maintainer for DRM bridge drivers for i.MX SoCs
.../bindings/display/bridge/fsl,imx8qxp-ldb.yaml | 173 +++++ .../display/bridge/fsl,imx8qxp-pixel-combiner.yaml | 144 +++++ .../display/bridge/fsl,imx8qxp-pixel-link.yaml | 106 +++ .../display/bridge/fsl,imx8qxp-pxl2dpi.yaml | 108 ++++ .../devicetree/bindings/mfd/fsl,imx8qxp-csr.yaml | 192 ++++++ .../userspace-api/media/v4l/subdev-formats.rst | 156 +++++ MAINTAINERS | 10 + drivers/gpu/drm/bridge/Kconfig | 2 + drivers/gpu/drm/bridge/Makefile | 1 + drivers/gpu/drm/bridge/imx/Kconfig | 42 ++ drivers/gpu/drm/bridge/imx/Makefile | 9 + drivers/gpu/drm/bridge/imx/imx-ldb-helper.c | 232 +++++++ drivers/gpu/drm/bridge/imx/imx-ldb-helper.h | 98 +++ drivers/gpu/drm/bridge/imx/imx8qm-ldb-drv.c | 586 +++++++++++++++++ drivers/gpu/drm/bridge/imx/imx8qxp-ldb-drv.c | 720 +++++++++++++++++++++ .../gpu/drm/bridge/imx/imx8qxp-pixel-combiner.c | 448 +++++++++++++ drivers/gpu/drm/bridge/imx/imx8qxp-pixel-link.c | 427 ++++++++++++ drivers/gpu/drm/bridge/imx/imx8qxp-pxl2dpi.c | 485 ++++++++++++++ include/uapi/linux/media-bus-format.h | 6 +- 19 files changed, 3944 insertions(+), 1 deletion(-) create mode 100644 Documentation/devicetree/bindings/display/bridge/fsl,imx8qxp-ldb.yaml create mode 100644 Documentation/devicetree/bindings/display/bridge/fsl,imx8qxp-pixel-combiner.yaml create mode 100644 Documentation/devicetree/bindings/display/bridge/fsl,imx8qxp-pixel-link.yaml create mode 100644 Documentation/devicetree/bindings/display/bridge/fsl,imx8qxp-pxl2dpi.yaml create mode 100644 Documentation/devicetree/bindings/mfd/fsl,imx8qxp-csr.yaml create mode 100644 drivers/gpu/drm/bridge/imx/Kconfig create mode 100644 drivers/gpu/drm/bridge/imx/Makefile create mode 100644 drivers/gpu/drm/bridge/imx/imx-ldb-helper.c create mode 100644 drivers/gpu/drm/bridge/imx/imx-ldb-helper.h create mode 100644 drivers/gpu/drm/bridge/imx/imx8qm-ldb-drv.c create mode 100644 drivers/gpu/drm/bridge/imx/imx8qxp-ldb-drv.c create mode 100644 drivers/gpu/drm/bridge/imx/imx8qxp-pixel-combiner.c create mode 100644 drivers/gpu/drm/bridge/imx/imx8qxp-pixel-link.c create mode 100644 drivers/gpu/drm/bridge/imx/imx8qxp-pxl2dpi.c