| # SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) |
| %YAML 1.2 |
| --- |
| $id: http://devicetree.org/schemas/bus/fsl,imx8qxp-pixel-link-msi-bus.yaml# |
| $schema: http://devicetree.org/meta-schemas/core.yaml# |
| |
| title: Freescale i.MX8qxp Pixel Link Medium Speed Interconnect (MSI) Bus |
| |
| maintainers: |
| - Liu Ying <victor.liu@nxp.com> |
| |
| description: | |
| i.MX8qxp pixel link MSI bus is used to control settings of PHYs, I/Os |
| sitting together with the PHYs. It is not the same as the MSI bus coming |
| from i.MX8 System Controller Unit (SCU) which is used to control power, |
| clock and reset through the i.MX8 Distributed Slave System Controller (DSC). |
| |
| i.MX8qxp pixel link MSI bus is a simple memory-mapped bus. Two input clocks, |
| that is, MSI clock and AHB clock, need to be enabled so that peripherals |
| connected to the bus can be accessed. Also, the bus is part of a power |
| domain. The power domain needs to be enabled before the peripherals can |
| be accessed. |
| |
| Peripherals in i.MX8qm/qxp imaging, LVDS, MIPI DSI and HDMI TX subsystems, |
| like I2C controller, PWM controller, MIPI DSI controller and Control and |
| Status Registers (CSR) module, are accessed through the bus. |
| |
| The i.MX System Controller Firmware (SCFW) owns and uses the i.MX8qm/qxp |
| pixel link MSI bus controller and does not allow SCFW user to control it. |
| So, the controller's registers cannot be accessed by SCFW user. Hence, |
| the interrupts generated by the controller don't make any sense from SCFW |
| user's point of view. |
| |
| allOf: |
| - $ref: simple-pm-bus.yaml# |
| |
| # We need a select here so we don't match all nodes with 'simple-pm-bus'. |
| select: |
| properties: |
| compatible: |
| contains: |
| enum: |
| - fsl,imx8qxp-display-pixel-link-msi-bus |
| - fsl,imx8qm-display-pixel-link-msi-bus |
| required: |
| - compatible |
| |
| properties: |
| compatible: |
| items: |
| - enum: |
| - fsl,imx8qxp-display-pixel-link-msi-bus |
| - fsl,imx8qm-display-pixel-link-msi-bus |
| - const: simple-pm-bus |
| |
| reg: |
| maxItems: 1 |
| |
| interrupts: |
| maxItems: 1 |
| |
| clocks: |
| items: |
| - description: master gated clock from system |
| - description: AHB clock |
| |
| clock-names: |
| items: |
| - const: msi |
| - const: ahb |
| |
| patternProperties: |
| "^.*@[0-9a-f]+$": |
| description: Devices attached to the bus |
| type: object |
| properties: |
| reg: |
| maxItems: 1 |
| |
| required: |
| - reg |
| |
| required: |
| - compatible |
| - reg |
| - clocks |
| - clock-names |
| - power-domains |
| |
| unevaluatedProperties: false |
| |
| examples: |
| - | |
| #include <dt-bindings/clock/imx8-lpcg.h> |
| #include <dt-bindings/firmware/imx/rsrc.h> |
| bus@56200000 { |
| compatible = "fsl,imx8qxp-display-pixel-link-msi-bus", "simple-pm-bus"; |
| reg = <0x56200000 0x20000>; |
| #address-cells = <1>; |
| #size-cells = <1>; |
| interrupt-parent = <&dc0_irqsteer>; |
| interrupts = <320>; |
| ranges; |
| clocks = <&dc0_disp_ctrl_link_mst0_lpcg IMX_LPCG_CLK_4>, |
| <&dc0_disp_ctrl_link_mst0_lpcg IMX_LPCG_CLK_4>; |
| clock-names = "msi", "ahb"; |
| power-domains = <&pd IMX_SC_R_DC_0>; |
| |
| syscon@56221000 { |
| compatible = "fsl,imx8qxp-mipi-lvds-csr", "syscon", "simple-mfd"; |
| reg = <0x56221000 0x1000>; |
| clocks = <&mipi_lvds_0_di_mipi_lvds_regs_lpcg IMX_LPCG_CLK_4>; |
| clock-names = "ipg"; |
| |
| pxl2dpi { |
| compatible = "fsl,imx8qxp-pxl2dpi"; |
| fsl,sc-resource = <IMX_SC_R_MIPI_0>; |
| power-domains = <&pd IMX_SC_R_MIPI_0>; |
| |
| ports { |
| #address-cells = <1>; |
| #size-cells = <0>; |
| |
| port@0 { |
| #address-cells = <1>; |
| #size-cells = <0>; |
| reg = <0>; |
| |
| mipi_lvds_0_pxl2dpi_dc0_pixel_link0: endpoint@0 { |
| reg = <0>; |
| remote-endpoint = <&dc0_pixel_link0_mipi_lvds_0_pxl2dpi>; |
| }; |
| |
| mipi_lvds_0_pxl2dpi_dc0_pixel_link1: endpoint@1 { |
| reg = <1>; |
| remote-endpoint = <&dc0_pixel_link1_mipi_lvds_0_pxl2dpi>; |
| }; |
| }; |
| |
| port@1 { |
| #address-cells = <1>; |
| #size-cells = <0>; |
| reg = <1>; |
| |
| mipi_lvds_0_pxl2dpi_mipi_lvds_0_ldb_ch0: endpoint@0 { |
| reg = <0>; |
| remote-endpoint = <&mipi_lvds_0_ldb_ch0_mipi_lvds_0_pxl2dpi>; |
| }; |
| |
| mipi_lvds_0_pxl2dpi_mipi_lvds_0_ldb_ch1: endpoint@1 { |
| reg = <1>; |
| remote-endpoint = <&mipi_lvds_0_ldb_ch1_mipi_lvds_0_pxl2dpi>; |
| }; |
| }; |
| }; |
| }; |
| |
| ldb { |
| #address-cells = <1>; |
| #size-cells = <0>; |
| compatible = "fsl,imx8qxp-ldb"; |
| clocks = <&clk IMX_SC_R_LVDS_0 IMX_SC_PM_CLK_MISC2>, |
| <&clk IMX_SC_R_LVDS_0 IMX_SC_PM_CLK_BYPASS>; |
| clock-names = "pixel", "bypass"; |
| power-domains = <&pd IMX_SC_R_LVDS_0>; |
| |
| channel@0 { |
| #address-cells = <1>; |
| #size-cells = <0>; |
| reg = <0>; |
| phys = <&mipi_lvds_0_phy>; |
| phy-names = "lvds_phy"; |
| |
| port@0 { |
| reg = <0>; |
| |
| mipi_lvds_0_ldb_ch0_mipi_lvds_0_pxl2dpi: endpoint { |
| remote-endpoint = <&mipi_lvds_0_pxl2dpi_mipi_lvds_0_ldb_ch0>; |
| }; |
| }; |
| |
| port@1 { |
| reg = <1>; |
| |
| /* ... */ |
| }; |
| }; |
| |
| channel@1 { |
| #address-cells = <1>; |
| #size-cells = <0>; |
| reg = <1>; |
| phys = <&mipi_lvds_0_phy>; |
| phy-names = "lvds_phy"; |
| |
| port@0 { |
| reg = <0>; |
| |
| mipi_lvds_0_ldb_ch1_mipi_lvds_0_pxl2dpi: endpoint { |
| remote-endpoint = <&mipi_lvds_0_pxl2dpi_mipi_lvds_0_ldb_ch1>; |
| }; |
| }; |
| |
| port@1 { |
| reg = <1>; |
| |
| /* ... */ |
| }; |
| }; |
| }; |
| }; |
| |
| clock-controller@56223004 { |
| compatible = "fsl,imx8qxp-lpcg"; |
| reg = <0x56223004 0x4>; |
| #clock-cells = <1>; |
| clocks = <&mipi_lvds_0_ipg_clk>; |
| clock-indices = <IMX_LPCG_CLK_4>; |
| clock-output-names = "mipi_lvds_0_di_mipi_lvds_regs_lpcg_ipg_clk"; |
| power-domains = <&pd IMX_SC_R_MIPI_0>; |
| }; |
| |
| phy@56228300 { |
| compatible = "fsl,imx8qxp-mipi-dphy"; |
| reg = <0x56228300 0x100>; |
| clocks = <&clk IMX_SC_R_LVDS_0 IMX_SC_PM_CLK_PHY>; |
| clock-names = "phy_ref"; |
| #phy-cells = <0>; |
| fsl,syscon = <&mipi_lvds_0_csr>; |
| power-domains = <&pd IMX_SC_R_MIPI_0>; |
| }; |
| }; |