drm/msm: Misc patches
Subsystems (5)
cover drm/msm: Misc patches
These are mainly small fixes in drm/msm. The last patch adds a way to parse DSI lanes information via DT.
Archit Taneja (5):
drm/msm/mdp: Use atomic helper to set crtc property drm/msm: Free fb helper resources in msm_unload drm/msm/dsi: Remove incorrect warning on host attach drm/msm/dsi: Update the "vdd" voltage range drm/msm/dsi: Parse DSI lanes via DT
Sricharan R (1):
drm/msm/mdp: Detach iommu in mdp4_destroy
.../devicetree/bindings/display/msm/dsi.txt | 26 +++- drivers/gpu/drm/msm/dsi/dsi_cfg.c | 2 +- drivers/gpu/drm/msm/dsi/dsi_host.c | 148 ++++++++++++++++++--- drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c | 9 +- drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c | 17 ++- drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.h | 1 + drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c | 9 +- drivers/gpu/drm/msm/msm_drv.c | 5 + drivers/gpu/drm/msm/msm_drv.h | 1 + 9 files changed, 172 insertions(+), 46 deletions(-)
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, hosted by The Linux Foundation
PATCH 1/6 drm/msm/mdp: Use atomic helper to set crtc property
Assign drm_atomic_helper_crtc_set_property helper to MDP4 and MDP5 crtcs' set_property ops. This replaces the custom funcs that returned an error even for standard crtc properties.
--- drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c | 9 +-------- drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c | 9 +-------- 2 files changed, 2 insertions(+), 16 deletions(-)
drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c +1 -8
@@ -361,13 +361,6 @@ static void mdp4_crtc_atomic_flush(struct drm_crtc *crtc,request_pending (crtc,PENDING_FLIP ); } -static int mdp4_crtc_set_property (struct drm_crtc *crtc, -struct drm_property *property,uint64_t val) -{ -// XXX -return -EINVAL ; -} -#define CURSOR_WIDTH 64#define CURSOR_HEIGHT 64
@@ -499,7 +492,7 @@ static const struct drm_crtc_funcs mdp4_crtc_funcs = { .set_config = drm_atomic_helper_set_config, .destroy = mdp4_crtc_destroy, .page_flip = drm_atomic_helper_page_flip, - .set_property = mdp4_crtc_set_property, + .set_property = drm_atomic_helper_crtc_set_property, .cursor_set = mdp4_crtc_cursor_set, .cursor_move = mdp4_crtc_cursor_move, .reset = drm_atomic_helper_crtc_reset,
drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c +1 -8
@@ -468,13 +468,6 @@ static void mdp5_crtc_atomic_flush(struct drm_crtc *crtc,request_pending (crtc,PENDING_FLIP ); } -static int mdp5_crtc_set_property (struct drm_crtc *crtc, -struct drm_property *property,uint64_t val) -{ -// XXX -return -EINVAL ; -} -static void get_roi (struct drm_crtc *crtc,uint32_t *roi_w,uint32_t *roi_h) {struct mdp5_crtc *mdp5_crtc =to_mdp5_crtc (crtc);
@@ -625,7 +618,7 @@ static const struct drm_crtc_funcs mdp5_crtc_funcs = { .set_config = drm_atomic_helper_set_config, .destroy = mdp5_crtc_destroy, .page_flip = drm_atomic_helper_page_flip, - .set_property = mdp5_crtc_set_property, + .set_property = drm_atomic_helper_crtc_set_property, .reset = drm_atomic_helper_crtc_reset, .atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state, .atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,
Signature · 7 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, hosted by The Linux Foundation _______________________________________________ dri-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH 1/6] drm/msm/mdp: Use atomic helper to set crtc property
Quoted 15 lines · Archit Taneja
Assign
drm_atomic_helper_crtc_set_propertyhelper to MDP4 and MDP5 crtcs'set_propertyops. This replaces the custom funcs that returned an error even for standard crtc properties.Signed-off-by Archit Taneja <[email protected]>--- drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c | 9 +-------- drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c | 9 +-------- 2 files changed, 2 insertions(+), 16 deletions(-)drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c +0
-0
drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c static void mdp4_crtc_atomic_flush(struct drm_crtc *crtc, · line 368
Quoted 8 lines
drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c +0
-5@@ -361,13 +361,6 @@ static void mdp4_crtc_atomic_flush(struct drm_crtc *crtc,request_pending (crtc,PENDING_FLIP ); } -static int mdp4_crtc_set_property (struct drm_crtc *crtc, -struct drm_property *property,uint64_t val) -{ -// XXX -return -EINVAL ;
Oops. Otoh you can't set atomic props by default through legacy funcs (or at least they're not listed), so not to harmful.
Quoted 49 lines
drivers/gpu/drm/msm/mdp/mdp4/mdp4_crtc.c +1
-3-} -#define CURSOR_WIDTH 64#define CURSOR_HEIGHT 64@@ -499,7 +492,7 @@ static const struct drm_crtc_funcs mdp4_crtc_funcs = { .set_config = drm_atomic_helper_set_config, .destroy = mdp4_crtc_destroy, .page_flip = drm_atomic_helper_page_flip, - .set_property = mdp4_crtc_set_property, + .set_property = drm_atomic_helper_crtc_set_property, .cursor_set = mdp4_crtc_cursor_set, .cursor_move = mdp4_crtc_cursor_move, .reset = drm_atomic_helper_crtc_reset,drivers/gpu/drm/msm/mdp/mdp5/mdp5_crtc.c +1
-8@@ -468,13 +468,6 @@ static void mdp5_crtc_atomic_flush(struct drm_crtc *crtc,request_pending (crtc,PENDING_FLIP ); } -static int mdp5_crtc_set_property (struct drm_crtc *crtc, -struct drm_property *property,uint64_t val) -{ -// XXX -return -EINVAL ; -} -static void get_roi (struct drm_crtc *crtc,uint32_t *roi_w,uint32_t *roi_h) {struct mdp5_crtc *mdp5_crtc =to_mdp5_crtc (crtc);@@ -625,7 +618,7 @@ static const struct drm_crtc_funcs mdp5_crtc_funcs = { .set_config = drm_atomic_helper_set_config, .destroy = mdp5_crtc_destroy, .page_flip = drm_atomic_helper_page_flip, - .set_property = mdp5_crtc_set_property, + .set_property = drm_atomic_helper_crtc_set_property, .reset = drm_atomic_helper_crtc_reset, .atomic_duplicate_state = drm_atomic_helper_crtc_duplicate_state, .atomic_destroy_state = drm_atomic_helper_crtc_destroy_state,Signature · 7 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, hosted by The Linux Foundation _______________________________________________ dri-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dri-devel
Signature · 7 lines
Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ dri-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dri-devel
PATCH 2/6 drm/msm/mdp: Detach iommu in mdp4_destroy
In reply to Archit TanejaFrom: Sricharan R <[email protected]>
attach_dev gets called in mdp4_kms_init, but there is no corresponding detach_dev called in the error path or in the kms driver unload path.
Detach and destroy mmu in mdp4_destroy.
--- drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c | 17 +++++++++++++---- drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.h | 1 + 2 files changed, 14 insertions(+), 4 deletions(-)
drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.c +13 -4
@@ -189,9 +189,20 @@ static void mdp4_preclose(struct msm_kms *kms, struct drm_file *file)mdp4_crtc_cancel_pending_flip (priv->crtcs[i], file); } +static const char *const iommu_ports[] = { +"mdp_port0_cb0" ,"mdp_port1_cb0" , +}; +static void mdp4_destroy (struct msm_kms *kms) {struct mdp4_kms *mdp4_kms =to_mdp4_kms (to_mdp_kms (kms)); +struct msm_mmu *mmu = mdp4_kms->mmu; + +if (mmu) { + mmu->funcs->detach (mmu, iommu_ports,ARRAY_SIZE (iommu_ports)); + mmu->funcs->destroy (mmu); + } +if (mdp4_kms->blank_cursor_iova)msm_gem_put_iova (mdp4_kms->blank_cursor_bo, mdp4_kms->id);if (mdp4_kms->blank_cursor_bo)
@@ -457,10 +468,6 @@ fail:return ret; } -static const char *iommu_ports[] = { -"mdp_port0_cb0" ,"mdp_port1_cb0" , -}; -struct msm_kms *mdp4_kms_init (struct drm_device *dev) {struct platform_device *pdev = dev->platformdev;
@@ -565,6 +572,8 @@ struct msm_kms *mdp4_kms_init(struct drm_device *dev) ARRAY_SIZE(iommu_ports));if (ret) goto fail; + + mdp4_kms->mmu = mmu; }else {dev_info (dev->dev,"no iommu, fallback to phys " "contig buffers for scanout\n" );
drivers/gpu/drm/msm/mdp/mdp4/mdp4_kms.h +1 -0
@@ -45,6 +45,7 @@ struct mdp4_kms {struct clk *pclk;struct clk *lut_clk;struct clk *axi_clk; +struct msm_mmu *mmu;struct mdp_irq error_handler;
Signature · 7 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, hosted by The Linux Foundation _______________________________________________ dri-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dri-devel
PATCH 3/6 drm/msm: Free fb helper resources in msm_unload
In reply to Archit TanejaWe have a msm_fbev_free function to uninit fb_helper stuff, but we aren't using it. Call it in msm_unload.
--- drivers/gpu/drm/msm/msm_drv.c | 5 +++++ drivers/gpu/drm/msm/msm_drv.h | 1 + 2 files changed, 6 insertions(+)
drivers/gpu/drm/msm/msm_drv.c +5 -0
@@ -196,6 +196,11 @@ static int msm_unload(struct drm_device *dev) }drm_kms_helper_poll_fini (dev); + +#ifdef CONFIG_DRM_FBDEV_EMULATION +if (fbdev && priv->fbdev) +msm_fbdev_free (dev); +#endif drm_mode_config_cleanup (dev);drm_vblank_cleanup (dev);
drivers/gpu/drm/msm/msm_drv.h +1 -0
@@ -240,6 +240,7 @@ struct drm_framebuffer *msm_framebuffer_create(struct drm_device *dev, struct drm_file *file, const struct drm_mode_fb_cmd2 *mode_cmd);struct drm_fb_helper *msm_fbdev_init (struct drm_device *dev); +void msm_fbdev_free (struct drm_device *dev);struct hdmi ; int hdmi_modeset_init(struct hdmi *hdmi, struct drm_device *dev,
Signature · 7 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, hosted by The Linux Foundation _______________________________________________ dri-devel mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/dri-devel
PATCH 4/6 drm/msm/dsi: Remove incorrect warning on host attach
In reply to Archit TanejaWith the implementation of of_graph parsing, it isn't any longer necessary for msm_host->device node to be same as dsi->dev.of_node. This only holds true when the connected device is also a child of the dsi_host.
In the case of external bridge chips belonging to a different control bus, these are guaranteed to be different.
--- drivers/gpu/drm/msm/dsi/dsi_host.c | 2 -- 1 file changed, 2 deletions(-)
drivers/gpu/drm/msm/dsi/dsi_host.c +0 -2
@@ -1484,8 +1484,6 @@ static int dsi_host_attach(struct mipi_dsi_host *host, msm_host->format = dsi->format; msm_host->mode_flags = dsi->mode_flags; -WARN_ON (dsi->dev.of_node != msm_host->device_node); -/* Some gpios defined in panel DT need to be controlled by host */ ret =dsi_host_init_panel_gpios (msm_host, &dsi->dev);if (ret)
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, hosted by The Linux Foundation
PATCH 5/6 drm/msm/dsi: Update the "vdd" voltage range
In reply to Archit TanejaThe min and max voltage levels for the VDD input to DSI were initially set to 2.85V (as suggested by the spec).
We have a platform (db410c) where the same regulator supply is also needed by another consumer at a higher voltage. Bump up the max voltage level to 3.3V. No regressions are seen with this.
--- drivers/gpu/drm/msm/dsi/dsi_cfg.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
drivers/gpu/drm/msm/dsi/dsi_cfg.c +1 -1
@@ -60,7 +60,7 @@ static const struct msm_dsi_config msm8916_dsi_cfg = { .num = 4, .regs = { {"gdsc", -1, -1, -1, -1}, - {"vdd", 2850000, 2850000, 100000, 100}, + {"vdd", 2850000, 3300000, 100000, 100}, {"vdda", 1200000, 1200000, 100000, 100}, {"vddio", 1800000, 1800000, 100000, 100}, },
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, hosted by The Linux Foundation
A message that is not in the archive (sent off-list or not yet received): 1455541259-8967-1-git-send-email-architt-sgV2jX0FEOL9JmXXK+q4OQ@public.gmane.org
PATCH 6/6 drm/msm/dsi: Parse DSI lanes via DT
The DSI driver is currently unaware of how the DSI clock and data pins are mapped to the logical lanes provided by the DSI controller.
Use the generic 'lanes' DT binding provided for DSI lanes (used for DSI in bindings/display/ti/ti,omap4-dss.txt) to get the desired mapping.
The MSM DSI controller is restricted in terms of what all mappings it can support. The lane polarity is fixed for all the lanes, the clock lanes are fixed, and the data lanes can be swapped among each other only for a few combinations. Apply these restrictions when we parse the DT data.
--- .../devicetree/bindings/display/msm/dsi.txt | 26 +++- drivers/gpu/drm/msm/dsi/dsi_host.c | 146 ++++++++++++++++++--- 2 files changed, 149 insertions(+), 23 deletions(-)
Documentation/devicetree/bindings/display/msm/dsi.txt +23 -3
@@ -44,9 +44,28 @@ Optional properties: - pinctrl-names: the pin control state names; should contain "default" - pinctrl-0: the default pinctrl state (active) - pinctrl-n: the "sleep" pinctrl state -- port: DSI controller output port. This contains one endpoint subnode, with its - remote-endpoint set to the phandle of the connected panel's endpoint. - See Documentation/devicetree/bindings/graph.txt for device graph info. +- port: DSI controller output port, containing one endpoint subnode. + + DSI Endpoint properties: + - remote-endpoint: set to phandle of the connected panel's endpoint. + See Documentation/devicetree/bindings/graph.txt for device graph info. + - lanes: list of pin numbers for the DSI lanes: CLKp, CLKn, DATA0p, DATA0n, + DATA1p, DATA1n, ... + This provides a physical to logical mapping of the DSI lanes. The CLKp and + CLKn pins have to be mapped to pins 0 and 1. For data lanes, there are only + a limited number of physical to logical mappings possible: + + "0123": Logic 0->Phys 0; Logic 1->Phys 1; Logic 2->Phys 2; Logic 3->Phys 3; + "3012": Logic 3->Phys 0; Logic 0->Phys 1; Logic 1->Phys 2; Logic 2->Phys 3; + "2301": Logic 2->Phys 0; Logic 3->Phys 1; Logic 0->Phys 2; Logic 1->Phys 3; + "1230": Logic 1->Phys 0; Logic 2->Phys 1; Logic 3->Phys 2; Logic 0->Phys 3; + "0321": Logic 0->Phys 0; Logic 3->Phys 1; Logic 2->Phys 2; Logic 1->Phys 3; + "1032": Logic 1->Phys 0; Logic 0->Phys 1; Logic 3->Phys 2; Logic 2->Phys 3; + "2103": Logic 2->Phys 0; Logic 1->Phys 1; Logic 0->Phys 2; Logic 3->Phys 3; + "3210": Logic 3->Phys 0; Logic 2->Phys 1; Logic 1->Phys 2; Logic 0->Phys 3; + + Here, a "3012" mapping will be represented by: + lanes = <0 1 8 9 2 3 4 5 6 7>; DSI PHY: Required properties:
@@ -131,6 +150,7 @@ Example: port { dsi0_out: endpoint { remote-endpoint = <&panel_in>; + lanes = <0 1 2 3 4 5 6 7 8 9>; }; }; };
drivers/gpu/drm/msm/dsi/dsi_host.c +126 -20
191 lines not on this page · raw message
Signature · 7 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, hosted by The Linux Foundation -- To unsubscribe from this list: send the line "unsubscribe devicetree" in the body of a message to [email protected] More majordomo info at http://vger.kernel.org/majordomo-info.html
Rob Herring
maintainerRe: [PATCH 6/6] drm/msm/dsi: Parse DSI lanes via DT
Quoted 32 lines · Archit Taneja
The DSI driver is currently unaware of how the DSI clock and data pins are mapped to the logical lanes provided by the DSI controller.
Use the generic 'lanes' DT binding provided for DSI lanes (used for DSI in
bindings/display/ti/ti,omap4-dss.txt) to get the desired mapping.The MSM DSI controller is restricted in terms of what all mappings it can support. The lane polarity is fixed for all the lanes, the clock lanes are fixed, and the data lanes can be swapped among each other only for a few combinations. Apply these restrictions when we parse the DT data.
Signed-off-by Archit Taneja <[email protected]>--- .../devicetree/bindings/display/msm/dsi.txt | 26 +++- drivers/gpu/drm/msm/dsi/dsi_host.c | 146 ++++++++++++++++++--- 2 files changed, 149 insertions(+), 23 deletions(-)Documentation/devicetree/bindings/display/msm/dsi.txt +0
-2@@ -44,9 +44,28 @@ Optional properties: - pinctrl-names: the pin control state names; should contain "default" - pinctrl-0: the default pinctrl state (active) - pinctrl-n: the "sleep" pinctrl state -- port: DSI controller output port. This contains one endpoint subnode, with its - remote-endpoint set to the phandle of the connected panel's endpoint.
Documentation/devicetree/bindings/display/msm/dsi.txt Optional properties: · line 55
Quoted 10 lines
Documentation/devicetree/bindings/display/msm/dsi.txt +9
-1- See Documentation/devicetree/bindings/graph.txt for device graph info. +- port: DSI controller output port, containing one endpoint subnode. + + DSI Endpoint properties: + - remote-endpoint: set to phandle of the connected panel's endpoint. + See Documentation/devicetree/bindings/graph.txt for device graph info. + - lanes: list of pin numbers for the DSI lanes: CLKp, CLKn, DATA0p, DATA0n, + DATA1p, DATA1n, ... + This provides a physical to logical mapping of the DSI lanes. The CLKp and + CLKn pins have to be mapped to pins 0 and 1. For data lanes, there are only
Then why describe the clk pins?
Documentation/devicetree/bindings/display/msm/dsi.txt Optional properties: · line 68
Quoted 13 lines
Documentation/devicetree/bindings/display/msm/dsi.txt +13
-0+ a limited number of physical to logical mappings possible: + + "0123": Logic 0->Phys 0; Logic 1->Phys 1; Logic 2->Phys 2; Logic 3->Phys 3; + "3012": Logic 3->Phys 0; Logic 0->Phys 1; Logic 1->Phys 2; Logic 2->Phys 3; + "2301": Logic 2->Phys 0; Logic 3->Phys 1; Logic 0->Phys 2; Logic 1->Phys 3; + "1230": Logic 1->Phys 0; Logic 2->Phys 1; Logic 3->Phys 2; Logic 0->Phys 3; + "0321": Logic 0->Phys 0; Logic 3->Phys 1; Logic 2->Phys 2; Logic 1->Phys 3; + "1032": Logic 1->Phys 0; Logic 0->Phys 1; Logic 3->Phys 2; Logic 2->Phys 3; + "2103": Logic 2->Phys 0; Logic 1->Phys 1; Logic 0->Phys 2; Logic 3->Phys 3; + "3210": Logic 3->Phys 0; Logic 2->Phys 1; Logic 1->Phys 2; Logic 0->Phys 3; + + Here, a "3012" mapping will be represented by: + lanes = <0 1 8 9 2 3 4 5 6 7>;
I'm lost here. What does 8 mean for example. The index represents?
Rob
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH 6/6] drm/msm/dsi: Parse DSI lanes via DT
Quoted 37 lines · Rob Herring
Quoted 36 lines · Archit Taneja
The DSI driver is currently unaware of how the DSI clock and data pins are mapped to the logical lanes provided by the DSI controller.
Use the generic 'lanes' DT binding provided for DSI lanes (used for DSI in
bindings/display/ti/ti,omap4-dss.txt) to get the desired mapping.The MSM DSI controller is restricted in terms of what all mappings it can support. The lane polarity is fixed for all the lanes, the clock lanes are fixed, and the data lanes can be swapped among each other only for a few combinations. Apply these restrictions when we parse the DT data.
Signed-off-by Archit Taneja <[email protected]>--- .../devicetree/bindings/display/msm/dsi.txt | 26 +++- drivers/gpu/drm/msm/dsi/dsi_host.c | 146 ++++++++++++++++++--- 2 files changed, 149 insertions(+), 23 deletions(-)Documentation/devicetree/bindings/display/msm/dsi.txt +3
-3@@ -44,9 +44,28 @@ Optional properties: - pinctrl-names: the pin control state names; should contain "default" - pinctrl-0: the default pinctrl state (active) - pinctrl-n: the "sleep" pinctrl state -- port: DSI controller output port. This contains one endpoint subnode, with its - remote-endpoint set to the phandle of the connected panel's endpoint. - See Documentation/devicetree/bindings/graph.txt for device graph info. +- port: DSI controller output port, containing one endpoint subnode. + + DSI Endpoint properties:
Quoted 8 lines
Documentation/devicetree/bindings/display/msm/dsi.txt Optional properties: · line 55
Quoted 6 lines
Documentation/devicetree/bindings/display/msm/dsi.txt +6
-0+ - remote-endpoint: set to phandle of the connected panel's endpoint. + See Documentation/devicetree/bindings/graph.txt for device graph info. + - lanes: list of pin numbers for the DSI lanes: CLKp, CLKn, DATA0p, DATA0n, + DATA1p, DATA1n, ... + This provides a physical to logical mapping of the DSI lanes. The CLKp and + CLKn pins have to be mapped to pins 0 and 1. For data lanes, there are onlyThen why describe the clk pins?
I was trying to use a DT binding that is already used for DSI hosts in TI SoCs.
SoCs give different flexibility over how we map the physical lines with the actual data/clock lanes in the DSI controller. From what I know, this flexibility varies. For example, TI SoCs lets us move clock lanes too, and swap polarities.
If we want all DSI host controllers to use a common binding to describe lanes, we'd need to go with the most flexible one, and the driver restricts it to the subsets that we support.
Quoted 16 lines
Quoted 4 lines
Documentation/devicetree/bindings/display/msm/dsi.txt +3
-0+ a limited number of physical to logical mappings possible: + + "0123": Logic 0->Phys 0; Logic 1->Phys 1; Logic 2->Phys 2; Logic 3->Phys 3;Documentation/devicetree/bindings/display/msm/dsi.txt Optional properties: · line 68
Quoted 10 lines
Documentation/devicetree/bindings/display/msm/dsi.txt +10
-0+ "3012": Logic 3->Phys 0; Logic 0->Phys 1; Logic 1->Phys 2; Logic 2->Phys 3; + "2301": Logic 2->Phys 0; Logic 3->Phys 1; Logic 0->Phys 2; Logic 1->Phys 3; + "1230": Logic 1->Phys 0; Logic 2->Phys 1; Logic 3->Phys 2; Logic 0->Phys 3; + "0321": Logic 0->Phys 0; Logic 3->Phys 1; Logic 2->Phys 2; Logic 1->Phys 3; + "1032": Logic 1->Phys 0; Logic 0->Phys 1; Logic 3->Phys 2; Logic 2->Phys 3; + "2103": Logic 2->Phys 0; Logic 1->Phys 1; Logic 0->Phys 2; Logic 3->Phys 3; + "3210": Logic 3->Phys 0; Logic 2->Phys 1; Logic 1->Phys 2; Logic 0->Phys 3; + + Here, a "3012" mapping will be represented by: + lanes = <0 1 8 9 2 3 4 5 6 7>;I'm lost here. What does 8 mean for example. The index represents?
The numbers here describe the logical lanes. I.e, the way in which the DSI controller pushes out data to the PHY. The ordering is as follows:
0 - CLKp
1 - CLKn
2 - DATA0p
3 - DATA0n
4 - DATA1p
5 - DATA1n
6 - DATA2p
7 - DATA2n
8 - DATA3p
9 - DATA3n
The indices corresponding to these values represent the actual physical pins. The index 0 will always represent the pin CLKp, index 8 will always represent the physical pin DATA3p. This is something we would want to keep fixed across all SoCs.
The configuration in the example would provide the following mapping:
L: CLKp CLKn DATA3p DATA3n ATA0p DATA0n DATA1p DATA1n DATA2p DATA2n
P: CLKp CLKn DATA0p DATA0n DATA1p DATA1n DATA2p DATA2n DATA3p DATA3n
L represents the logical lanes, and P represents the physical lanes. L is what we provide in the DT property, and P are what the indices represent. Here, the 3rd logical lane is mapped on to the 0th physical data lane. The 0th logical lane to the 1st physical data lane and so on.
Archit
Signature · 1 line
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, hosted by The Linux Foundation
Rob Herring
maintainerRe: [PATCH 6/6] drm/msm/dsi: Parse DSI lanes via DT
Quoted 123 lines · Archit Taneja
Quoted 47 lines · Rob Herring
Quoted 45 lines · Archit Taneja
The DSI driver is currently unaware of how the DSI clock and data pins are mapped to the logical lanes provided by the DSI controller.
Use the generic 'lanes' DT binding provided for DSI lanes (used for DSI in
bindings/display/ti/ti,omap4-dss.txt) to get the desired mapping.The MSM DSI controller is restricted in terms of what all mappings it can support. The lane polarity is fixed for all the lanes, the clock lanes are fixed, and the data lanes can be swapped among each other only for a few combinations. Apply these restrictions when we parse the DT data.
Signed-off-by Archit Taneja <[email protected]>--- .../devicetree/bindings/display/msm/dsi.txt | 26 +++- drivers/gpu/drm/msm/dsi/dsi_host.c | 146 ++++++++++++++++++--- 2 files changed, 149 insertions(+), 23 deletions(-)Documentation/devicetree/bindings/display/msm/dsi.txt +0
-1@@ -44,9 +44,28 @@ Optional properties: - pinctrl-names: the pin control state names; should contain "default" - pinctrl-0: the default pinctrl state (active) - pinctrl-n: the "sleep" pinctrl state -- port: DSI controller output port. This contains one endpoint subnode,with its
Documentation/devicetree/bindings/display/msm/dsi.txt +5
-2- remote-endpoint set to the phandle of the connected panel's endpoint. - See Documentation/devicetree/bindings/graph.txt for device graph info. +- port: DSI controller output port, containing one endpoint subnode. + + DSI Endpoint properties: + - remote-endpoint: set to phandle of the connected panel's endpoint. + See Documentation/devicetree/bindings/graph.txt for device graphinfo.
+ - lanes: list of pin numbers for the DSI lanes: CLKp, CLKn, DATA0p, DATA0n,Quoted 8 lines
Quoted 5 lines
Documentation/devicetree/bindings/display/msm/dsi.txt +2
-0+ DATA1p, DATA1n, ... + This provides a physical to logical mapping of the DSI lanes. TheCLKp and
+ CLKn pins have to be mapped to pins 0 and 1. For data lanes, there
are onlyThen why describe the clk pins?
I was trying to use a DT binding that is already used for DSI hosts in TI SoCs.
SoCs give different flexibility over how we map the physical lines with the actual data/clock lanes in the DSI controller. From what I know, this flexibility varies. For example, TI SoCs lets us move clock lanes too, and swap polarities.
If we want all DSI host controllers to use a common binding to describe lanes, we'd need to go with the most flexible one, and the driver restricts it to the subsets that we support.
Quoted 17 lines
Quoted 17 lines
Documentation/devicetree/bindings/display/msm/dsi.txt +3
-0+ a limited number of physical to logical mappings possible: + + "0123": Logic 0->Phys 0; Logic 1->Phys 1; Logic 2->Phys 2; Logic3->Phys 3;
+ "3012": Logic 3->Phys 0; Logic 0->Phys 1; Logic 1->Phys 2; Logic
2->Phys 3;
+ "2301": Logic 2->Phys 0; Logic 3->Phys 1; Logic 0->Phys 2; Logic
1->Phys 3;
+ "1230": Logic 1->Phys 0; Logic 2->Phys 1; Logic 3->Phys 2; Logic
0->Phys 3;
+ "0321": Logic 0->Phys 0; Logic 3->Phys 1; Logic 2->Phys 2; Logic
1->Phys 3;
+ "1032": Logic 1->Phys 0; Logic 0->Phys 1; Logic 3->Phys 2; Logic
2->Phys 3;
+ "2103": Logic 2->Phys 0; Logic 1->Phys 1; Logic 0->Phys 2; Logic
3->Phys 3;Quoted 8 lines
Documentation/devicetree/bindings/display/msm/dsi.txt Optional properties: · line 68
Quoted 5 lines
+ "3210": Logic 3->Phys 0; Logic 2->Phys 1; Logic 1->Phys 2; Logic
0->Phys 3;Documentation/devicetree/bindings/display/msm/dsi.txt +3
-0+ + Here, a "3012" mapping will be represented by: + lanes = <0 1 8 9 2 3 4 5 6 7>;I'm lost here. What does 8 mean for example. The index represents?
The numbers here describe the logical lanes. I.e, the way in which the DSI controller pushes out data to the PHY. The ordering is as follows:
0 - CLKp
1 - CLKn
2 - DATA0p
3 - DATA0n
4 - DATA1p
5 - DATA1n
6 - DATA2p
7 - DATA2n
8 - DATA3p
9 - DATA3nThe indices corresponding to these values represent the actual physical pins. The index 0 will always represent the pin CLKp, index 8 will always represent the physical pin DATA3p. This is something we would want to keep fixed across all SoCs.
The configuration in the example would provide the following mapping:
L: CLKp CLKn DATA3p DATA3n ATA0p DATA0n DATA1p DATA1n DATA2p DATA2n
Quoted 7 lines
P: CLKp CLKn DATA0p DATA0n DATA1p DATA1n DATA2p DATA2n DATA3p DATA3n
L represents the logical lanes, and P represents the physical lanes. L is what we provide in the DT property, and P are what the indices represent. Here, the 3rd logical lane is mapped on to the 0th physical data lane. The 0th logical lane to the 1st physical data lane and so on.
Okay, so the confusing part is the description is all about lanes (0-3) but the binding (index and value) is all about pin/signal numbers. Either simplify the binding to be lanes or describe the binding in terms of pins.
Rob
Re: [PATCH 6/6] drm/msm/dsi: Parse DSI lanes via DT
Quoted 3 lines · Rob Herring
Quoted 3 lines
If we want all DSI host controllers to use a common binding to describe lanes, we'd need to go with the most flexible one, and the driver restricts it to the subsets that we support.
True, but I wonder if that's necessary. The lane property for the SoC should be read by the SoC specific driver, right? So the DT property can be anything. I'm not sure if there's ever a reason for a generic code to observe the DSI lane setup.
That said, if we do have a common binding, it's perhaps easier for people to understand the setups for different SoCs.
Quoted 26 lines
Quoted 26 lines
Quoted 24 lines
Quoted 18 lines
Documentation/devicetree/bindings/display/msm/dsi.txt +3
-0+ a limited number of physical to logical mappings possible: + + "0123": Logic 0->Phys 0; Logic 1->Phys 1; Logic 2->Phys 2; Logic3->Phys 3;
+ "3012": Logic 3->Phys 0; Logic 0->Phys 1; Logic 1->Phys 2; Logic
2->Phys 3;
+ "2301": Logic 2->Phys 0; Logic 3->Phys 1; Logic 0->Phys 2; Logic
1->Phys 3;
+ "1230": Logic 1->Phys 0; Logic 2->Phys 1; Logic 3->Phys 2; Logic
0->Phys 3;
+ "0321": Logic 0->Phys 0; Logic 3->Phys 1; Logic 2->Phys 2; Logic
1->Phys 3;
+ "1032": Logic 1->Phys 0; Logic 0->Phys 1; Logic 3->Phys 2; Logic
2->Phys 3;
+ "2103": Logic 2->Phys 0; Logic 1->Phys 1; Logic 0->Phys 2; Logic
3->Phys 3;
+ "3210": Logic 3->Phys 0; Logic 2->Phys 1; Logic 1->Phys 2; Logic
0->Phys 3;Documentation/devicetree/bindings/display/msm/dsi.txt Optional properties: · line 68
Quoted 3 lines
Documentation/devicetree/bindings/display/msm/dsi.txt +3
-0+ + Here, a "3012" mapping will be represented by: + lanes = <0 1 8 9 2 3 4 5 6 7>;I'm lost here. What does 8 mean for example. The index represents?
Quoted 2 lines
Quoted 2 lines
The numbers here describe the logical lanes. I.e, the way in which the DSI controller pushes out data to the PHY. The ordering is as follows:
If I read you right, I think that's vice versa. At least the OMAP version. The OMAP doc says:
"- lanes: list of pin numbers for the DSI lanes: CLK+, CLK-, DATA0+, DATA0-, DATA1+, DATA1-, ..."
This means that the first value in the array is the pin number for CLK+. In other words, CLK+ wire going to the panel/encoder is connected to pin number X.
What the pin number means is SoC specific. CLK+ could be connected to, say, SoC pin number 123, and then you'd enter 123 as the first value. On OMAP we use DSI block specific pin numbers, so they start at 0.
Quoted 4 lines
Okay, so the confusing part is the description is all about lanes (0-3) but the binding (index and value) is all about pin/signal numbers. Either simplify the binding to be lanes or describe the binding in terms of pins.
Perhaps "lane-pins" or something would be more descriptive. If we want to make the description common, I could change the OMAP implementation to accept the new property name too.
But, I'm not sure if a common description helps much. Any thoughts?
Tomi
_______________________________________________
dri-devel mailing list
[email protected]
https://lists.freedesktop.org/mailman/listinfo/dri-devel
Re: [PATCH 6/6] drm/msm/dsi: Parse DSI lanes via DT
Quoted 11 lines · Tomi Valkeinen
Quoted 3 lines · Rob Herring
Quoted 3 lines
If we want all DSI host controllers to use a common binding to describe lanes, we'd need to go with the most flexible one, and the driver restricts it to the subsets that we support.
True, but I wonder if that's necessary. The lane property for the SoC should be read by the SoC specific driver, right? So the DT property can be anything. I'm not sure if there's ever a reason for a generic code to observe the DSI lane setup.
Yeah, it is very SoC specific.
The only place where it might matter is if a panel/bridge ever needs to know what pins implement what lanes on the platform. A common binding there might help us keep the panel driver generic. Although, this need itself is a bit hypothetical.
Quoted 39 lines
That said, if we do have a common binding, it's perhaps easier for people to understand the setups for different SoCs.
Quoted 26 lines
Quoted 26 lines
Quoted 24 lines
Quoted 18 lines
Documentation/devicetree/bindings/display/msm/dsi.txt +3
-0+ a limited number of physical to logical mappings possible: + + "0123": Logic 0->Phys 0; Logic 1->Phys 1; Logic 2->Phys 2; Logic3->Phys 3;
+ "3012": Logic 3->Phys 0; Logic 0->Phys 1; Logic 1->Phys 2; Logic
2->Phys 3;
+ "2301": Logic 2->Phys 0; Logic 3->Phys 1; Logic 0->Phys 2; Logic
1->Phys 3;
+ "1230": Logic 1->Phys 0; Logic 2->Phys 1; Logic 3->Phys 2; Logic
0->Phys 3;
+ "0321": Logic 0->Phys 0; Logic 3->Phys 1; Logic 2->Phys 2; Logic
1->Phys 3;
+ "1032": Logic 1->Phys 0; Logic 0->Phys 1; Logic 3->Phys 2; Logic
2->Phys 3;
+ "2103": Logic 2->Phys 0; Logic 1->Phys 1; Logic 0->Phys 2; Logic
3->Phys 3;
+ "3210": Logic 3->Phys 0; Logic 2->Phys 1; Logic 1->Phys 2; Logic
0->Phys 3;Documentation/devicetree/bindings/display/msm/dsi.txt Optional properties: · line 68
Quoted 3 lines
Documentation/devicetree/bindings/display/msm/dsi.txt +3
-0+ + Here, a "3012" mapping will be represented by: + lanes = <0 1 8 9 2 3 4 5 6 7>;I'm lost here. What does 8 mean for example. The index represents?
Quoted 2 lines
Quoted 2 lines
The numbers here describe the logical lanes. I.e, the way in which the DSI controller pushes out data to the PHY. The ordering is as follows:
If I read you right, I think that's vice versa. At least the OMAP version. The OMAP doc says:
"- lanes: list of pin numbers for the DSI lanes: CLK+, CLK-, DATA0+, DATA0-, DATA1+, DATA1-, ..."
Quoted 7 lines
This means that the first value in the array is the pin number for CLK+. In other words, CLK+ wire going to the panel/encoder is connected to pin number X.
What the pin number means is SoC specific. CLK+ could be connected to, say, SoC pin number 123, and then you'd enter 123 as the first value. On OMAP we use DSI block specific pin numbers, so they start at 0.
You're right. I have it the other way round. Yours describes the hardware better. I'll change to yours if we decide to have a common binding.
Quoted 11 lines
Quoted 5 lines
Okay, so the confusing part is the description is all about lanes (0-3) but the binding (index and value) is all about pin/signal numbers. Either simplify the binding to be lanes or describe the binding in terms of pins.
Perhaps "lane-pins" or something would be more descriptive. If we want to make the description common, I could change the OMAP implementation to accept the new property name too.
But, I'm not sure if a common description helps much. Any thoughts?
If having a common binding doesn't bring any benefit, then a common description doesn't help much. I could then move to a simpler binding too.
Archit
Signature · 1 line
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, hosted by The Linux Foundation
Re: [PATCH 6/6] drm/msm/dsi: Parse DSI lanes via DT
Quoted 15 lines · Archit Taneja
Quoted 11 lines · Tomi Valkeinen
Quoted 3 lines · Rob Herring
Quoted 3 lines
If we want all DSI host controllers to use a common binding to describe lanes, we'd need to go with the most flexible one, and the driver restricts it to the subsets that we support.
True, but I wonder if that's necessary. The lane property for the SoC should be read by the SoC specific driver, right? So the DT property can be anything. I'm not sure if there's ever a reason for a generic code to observe the DSI lane setup.
Quoted 6 lines
Yeah, it is very SoC specific.
The only place where it might matter is if a panel/bridge ever needs to know what pins implement what lanes on the platform. A common binding there might help us keep the panel driver generic. Although, this need itself is a bit hypothetical.
My opinion here is that if the panel/bridge needs to know something about the DSI lanes/pins, we should have that data in the panel's/bridge's endpoint data.
So if both SoC and the DSI peripheral need complex DSI pin/lane setup, you might have very similar data on both sides. There's possibly some duplication there, but I think it keeps things much simpler.
For example, if the SoC needs OMAP style DSI pin data, and the DSI peripheral needs to know the amount of DSI lanes used (but nothing else), you might think it's nice if the DSI peripheral would peek at the SoC side data, finding out about the DSI lanes.
But I think in that case you should just add a "num-lanes" property to the DSI peripheral. The DT data for a device should be private to the driver handling the device, except for some special cases like following the graph.
Tomi
Rob Herring
maintainerRe: [PATCH 6/6] drm/msm/dsi: Parse DSI lanes via DT
Quoted 13 lines · Tomi Valkeinen
Quoted 10 lines · Archit Taneja
Quoted 7 lines · Tomi Valkeinen
Quoted 3 lines · Rob Herring
Quoted 3 lines
If we want all DSI host controllers to use a common binding to describe lanes, we'd need to go with the most flexible one, and the driver restricts it to the subsets that we support.
Quoted 6 lines
Quoted 6 lines
Quoted 4 lines
True, but I wonder if that's necessary. The lane property for the SoC should be read by the SoC specific driver, right? So the DT property can be anything. I'm not sure if there's ever a reason for a generic code to observe the DSI lane setup.
Yeah, it is very SoC specific.
Agreed.
Quoted 18 lines
Quoted 4 lines
The only place where it might matter is if a panel/bridge ever needs to know what pins implement what lanes on the platform. A common binding there might help us keep the panel driver generic. Although, this need itself is a bit hypothetical.
My opinion here is that if the panel/bridge needs to know something about the DSI lanes/pins, we should have that data in the panel's/bridge's endpoint data.
So if both SoC and the DSI peripheral need complex DSI pin/lane setup, you might have very similar data on both sides. There's possibly some duplication there, but I think it keeps things much simpler.
For example, if the SoC needs OMAP style DSI pin data, and the DSI peripheral needs to know the amount of DSI lanes used (but nothing else), you might think it's nice if the DSI peripheral would peek at the SoC side data, finding out about the DSI lanes.
Quoted 4 lines
But I think in that case you should just add a "num-lanes" property to the DSI peripheral. The DT data for a device should be private to the driver handling the device, except for some special cases like following the graph.
num-lanes might not be enough. You could need to have a mask instead. Not sure if there is really any h/w like that though.
Also, I think it is fine for a parent to look at standard properties in a child.
Rob
Re: [PATCH 6/6] drm/msm/dsi: Parse DSI lanes via DT
Quoted 14 lines · Rob Herring
Quoted 13 lines · Tomi Valkeinen
Quoted 10 lines · Archit Taneja
Quoted 7 lines · Tomi Valkeinen
Quoted 3 lines · Rob Herring
Quoted 3 lines
If we want all DSI host controllers to use a common binding to describe lanes, we'd need to go with the most flexible one, and the driver restricts it to the subsets that we support.
Quoted 8 lines
Quoted 6 lines
Quoted 6 lines
Quoted 4 lines
True, but I wonder if that's necessary. The lane property for the SoC should be read by the SoC specific driver, right? So the DT property can be anything. I'm not sure if there's ever a reason for a generic code to observe the DSI lane setup.
Yeah, it is very SoC specific.
Agreed.
Okay. We probably don't need to go with a generic binding, then. I'll simplify the msm/dsi lane bindings (i.e, drop the clock lanes, and represent things in lanes instead of pins).
Thanks,
Archit
Signature · 1 line
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum, hosted by The Linux Foundation