With the DRM_BRIDGE_ATTACH_NO_CONNECTOR 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 DRM_BRIDGE_ATTACH_NO_CONNECTOR and !DRM_BRIDGE_ATTACH_NO_CONNECTOR 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. Patch 3 fixes HDCP to work with both DRM_BRIDGE_ATTACH_NO_CONNECTOR and !DRM_BRIDGE_ATTACH_NO_CONNECTOR case by moving HDCP state handling into the bridge atomic check inline with the DRM_BRIDGE_ATTACH_NO_CONNECTOR model. Patches 4,5 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 DRM_BRIDGE_ATTACH_NO_CONNECTOR has been enabled in driver. The last patch make smaller adjustment: lowering the log level for noisy DPCD transfer errors. v8 patch link: <https://lore.kernel.org/all/[email protected]/> Changelog v8-v9: -Move the patch 6 in v8 related to HDCP to patch 3 and add fixes tag. -Update to connector_ptr in HDCP code in patch 1. -Rebased on next-20251114. 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
