With the DBANC framework, the connector is no longer initialized in bridge_attach()when the display controller sets the DRM_BRIDGE_ATTACH_NO_CONNECTOR flag. This causes a null pointer dereference in cdns_mhdp_modeset_retry_fn() when trying to access &conn->dev->mode_config.mutex. Observed on a board where EDID read failed. (log: https://gist.github.com/Jayesh2000/233f87f9becdf1e66f1da6fd53f77429)
Patch 1 adds a connector_ptr which takes care of both DBANC and !DBANC case by setting the pointer in appropriate hooks and checking for pointer validity before accessing the connector. Patch 2 adds mode validation hook to bridge fucntions. Patches 3,4 do necessary cleanup and alignment for using connector pointer. The rationale behind the sequence of commits is we can cleanly switch to drm_connector pointer after removal of connector helper code blocks, which are anyways not touch after DBANC has been enabled in driver. The later patches make smaller adjustments: lowering the log level for noisy DPCD transfer errors and moving HDCP state handling into the bridge atomic check in line with the DBANC model. v7 patch link: <https://lore.kernel.org/all/[email protected]/> Changelog v7-v8: -Move patches with firxes tag to top of series with appropriate changes to them. -Add R/B tag to patch https://lore.kernel.org/all/ae3snoap64r252sbqhsshsadxfmlqdfn6b4o5fgfcmxppglkqf@2lsstfsghzwb/ v6 patch link: <https://lore.kernel.org/all/[email protected]/> Changelog v6-v7: -Update cover letter to explain the series. -Add R/B tag in PATCH 1 and drop fixes tag as suggested. -Drop fixes tag in PATCH 2. -Update the commit messages for clear understanding of changes done in patches. v5 patch link: <https://lore.kernel.org/all/[email protected]/> Changelog v5 -> v6: -Update cover letter to clarify the series in better way. -Add Reviewed-by tag to relevant patches. v4 patch link: <https://lore.kernel.org/all/[email protected]> Changelog v4->v5: - Handle HDCP state in bridge atomic check instead of connector atomic check v3 patch link: <https://lore.kernel.org/all/[email protected]/> Changelog v3->v4: - Fix kernel test robot build warning: <https://lore.kernel.org/all/[email protected]/> v2 patch link: <https://lore.kernel.org/all/[email protected]/> Changelog v2->v3: - Add mode_valid in drm_bridge_funcs to a separate patch - Remove "if (mhdp->connector.dev)" conditions that were missed in v2 - Split out the move of drm_atomic_get_new_connector_for_encoder() to a separate patch - Drop "R-by" considering the changes in v2[1/3] - Add Fixes tag to first 4 patches: commit c932ced6b585 ("drm/tidss: Update encoder/bridge chain connect model") This added DBANC flag in tidss while attaching bridge to the encoder - Drop RFC prefix v1 patch link: <https://lore.kernel.org/all/[email protected]/> Changelog v1->v2: - Remove !DRM_BRIDGE_ATTACH_NO_CONNECTOR entirely - Add mode_valid in drm_bridge_funcs[0] - Fix NULL POINTER differently since we cannot access atomic_state - Reduce log level in cdns_mhdp_transfer call [0]: https://lore.kernel.org/all/[email protected]/ Harikrishna Shenoy (1): drm/bridge: cadence: cdns-mhdp8546-core: Handle HDCP state in bridge atomic check Jayesh Choudhary (5): drm/bridge: cadence: cdns-mhdp8546-core: Set the mhdp connector earlier in atomic_enable() drm/bridge: cadence: cdns-mhdp8546-core: Add mode_valid hook to drm_bridge_funcs drm/bridge: cadence: cdns-mhdp8546-core: Remove legacy support for connector initialisation in bridge drm/bridge: cadence: cdns-mhdp8546*: Change drm_connector from structure to pointer drm/bridge: cadence: cdns-mhdp8546-core: Reduce log level for DPCD read/write .../drm/bridge/cadence/cdns-mhdp8546-core.c | 258 +++++------------- .../drm/bridge/cadence/cdns-mhdp8546-core.h | 2 +- .../drm/bridge/cadence/cdns-mhdp8546-hdcp.c | 8 +- 3 files changed, 72 insertions(+), 196 deletions(-) -- 2.34.1
