Hi Maxime, On 7/9/20 2:41 AM, Maxime Ripard wrote: > Hi everyone, > > Here's a (pretty long) series to introduce support in the VC4 DRM driver > for the display pipeline found in the BCM2711 (and thus the RaspberryPi 4). > > The main differences are that there's two HDMI controllers and that there's > more pixelvalve now. Those pixelvalve come with a mux in the HVS that still > have only 3 FIFOs. Both of those differences are breaking a bunch of > expectations in the driver, so we first need a good bunch of cleanup and > reworks to introduce support for the new controllers. > > Similarly, the HDMI controller has all its registers shuffled and split in > multiple controllers now, so we need a bunch of changes to support this as > well. > > Only the HDMI support is enabled for now (even though the DPI and DSI > outputs have been tested too). > > Let me know if you have any comments > Maxime > > Cc: bcm-kernel-feedback-list@xxxxxxxxxxxx > Cc: devicetree@xxxxxxxxxxxxxxx > Cc: Kamal Dasu <kdasu.kdev@xxxxxxxxx> > Cc: linux-clk@xxxxxxxxxxxxxxx > Cc: Michael Turquette <mturquette@xxxxxxxxxxxx> > Cc: Philipp Zabel <p.zabel@xxxxxxxxxxxxxx> > Cc: Rob Herring <robh+dt@xxxxxxxxxx> > Cc: Stephen Boyd <sboyd@xxxxxxxxxx> > > Changes from v3: > - Rebased on top of next-20200708 > - Added a name to the HDMI audio codec component > - Only disable the BCM2711 HDMI pixelvalves at boot > - Fixed an error in the HVS binding > - Fix a framebuffer size condition that was inverted > - Changed the channel allocation algorithm using Eric's suggestion > - Always write the muxing values instead of updating if needed > - Improved a bit the hvs_available_channels comment in the structure > - Change atomic_complete_commit code to use for_each_new_crtc_in_state > - Change the muxing code to take into account disparities between the > BCM2711 and previous SoCs. > - Only change the clock rate on BCM2711 during a modeset > - Fix a crash at atomic_disable > - Use clk_set_min_rate for the core clock too > - Add a few defines, and simplify the FIFO level stuff > - Reordered the patches according to Eric's reviews > - Fixed a regression with VID_CTL setting on RPI3 > > Changes from v2: > - Rebased on top of next-20200526 > - Split the firmware clock series away > - Removed the stuck pixel (with all the subsequent pixels being shifted > by one > - Fixed the writeback issue too. > - Fix the dual output > - Fixed the return value of phy_get_cp_current > - Enhanced the comment on the reset delay > - Increase the max width and height > - Made a proper Kconfig option for the DVP clock driver > - Fixed the alsa card name collision > > Changes from v1: > - Rebased on top of 5.7-rc1 > - Run checkpatch > - Added audio support > - Fixed some HDMI timeouts > - Swiched to clk_hw_register_gate_parent_data > - Reorder Kconfig symbols in drivers/i2c/busses > - Make the firmware clocks a child of the firmware node > - Switch DVP clock driver to clk_hw interface > - constify raspberrypi_clk_data in raspberrypi_clock_property > - Don't mark firmware clocks as IGNORE_UNUSED > - Change from reset_ms to reset_us in reset-simple, and add a bit more > comments > - Remove generic clk patch to test if a NULL pointer is returned > - Removed misleading message in the is_prepared renaming patch commit > message > - Constify HDMI controller variants > - Fix a bug in the allocation size of the clk data array > - Added a mention in the DT binding conversion patches about the breakage > - Merged a few fixes from kbuild > - Fixed a few bisection and CEC build issues > - Collected Acked-by and Reviewed-by > - Change Dave email address to raspberrypi.com > > Dave Stevenson (7): > drm/vc4: Add support for the BCM2711 HVS5 > drm/vc4: plane: Change LBM alignment constraint on LBM > drm/vc4: plane: Optimize the LBM allocation size > drm/vc4: hdmi: Use reg-names to retrieve the HDMI audio registers > drm/vc4: hdmi: Reset audio infoframe on encoder_enable if previously streaming > drm/vc4: hdmi: Set the b-frame marker to the match ALSA's default. > drm/vc4: hdmi: Add audio-related callbacks > > Maxime Ripard (71): > dt-bindings: display: Add support for the BCM2711 HVS > drm/vc4: hvs: Boost the core clock during modeset > drm/vc4: plane: Create more planes > drm/vc4: crtc: Deal with different number of pixel per clock > drm/vc4: crtc: Use a shared interrupt > drm/vc4: crtc: Move the cob allocation outside of bind > drm/vc4: crtc: Rename HVS channel to output > drm/vc4: crtc: Use local chan variable > drm/vc4: crtc: Enable and disable the PV in atomic_enable / disable > drm/vc4: kms: Convert to for_each_new_crtc_state > drm/vc4: crtc: Assign output to channel automatically > drm/vc4: crtc: Add FIFO depth to vc4_crtc_data > drm/vc4: crtc: Add function to compute FIFO level bits > drm/vc4: crtc: Rename HDMI encoder type to HDMI0 > drm/vc4: crtc: Add HDMI1 encoder type > drm/vc4: crtc: Disable color management for HVS5 > drm/vc4: crtc: Turn pixelvalve reset into a function > drm/vc4: crtc: Move PV dump to config_pv > drm/vc4: crtc: Move HVS init and close to a function > drm/vc4: crtc: Move the HVS gamma LUT setup to our init function > drm/vc4: hvs: Make sure our channel is reset > drm/vc4: crtc: Remove mode_set_nofb > drm/vc4: crtc: Remove redundant pixelvalve reset > drm/vc4: crtc: Move HVS channel init before the PV initialisation > drm/vc4: encoder: Add finer-grained encoder callbacks > drm/vc4: crtc: Add a delay after disabling the PixelValve output > drm/vc4: crtc: Clear the PixelValve FIFO on disable > drm/vc4: crtc: Clear the PixelValve FIFO during configuration > drm/vc4: hvs: Make the stop_channel function public > drm/vc4: hvs: Introduce a function to get the assigned FIFO > drm/vc4: crtc: Move the CRTC disable out > drm/vc4: drv: Disable the CRTC at boot time > dt-bindings: display: vc4: pv: Add BCM2711 pixel valves > drm/vc4: crtc: Add BCM2711 pixelvalves > drm/vc4: hdmi: Use debugfs private field > drm/vc4: hdmi: Move structure to header > drm/vc4: hdmi: rework connectors and encoders > drm/vc4: hdmi: Remove DDC argument to connector_init > drm/vc4: hdmi: Rename hdmi to vc4_hdmi > drm/vc4: hdmi: Move accessors to vc4_hdmi > drm/vc4: hdmi: Use local vc4_hdmi directly > drm/vc4: hdmi: Add container_of macros for encoders and connectors > drm/vc4: hdmi: Pass vc4_hdmi to CEC code > drm/vc4: hdmi: Retrieve the vc4_hdmi at unbind using our device > drm/vc4: hdmi: Remove vc4_dev hdmi pointer > drm/vc4: hdmi: Remove vc4_hdmi_connector > drm/vc4: hdmi: Introduce resource init and variant > drm/vc4: hdmi: Implement a register layout abstraction > drm/vc4: hdmi: Add reset callback > drm/vc4: hdmi: Add PHY init and disable function > drm/vc4: hdmi: Add PHY RNG enable / disable function > drm/vc4: hdmi: Add a CSC setup callback > drm/vc4: hdmi: Store the encoder type in the variant structure > drm/vc4: hdmi: Deal with multiple debugfs files > drm/vc4: hdmi: Move CEC init to its own function > drm/vc4: hdmi: Add CEC support flag > drm/vc4: hdmi: Remove unused CEC_CLOCK_DIV define > drm/vc4: hdmi: Rename drm_encoder pointer in mode_valid > drm/vc4: hdmi: Adjust HSM clock rate depending on pixel rate > drm/vc4: hdmi: Use clk_set_min_rate instead > drm/vc4: hdmi: Deal with multiple ALSA cards > drm/vc4: hdmi: Remove register dumps in enable > drm/vc4: hdmi: Always recenter the HDMI FIFO > drm/vc4: hdmi: Implement finer-grained hooks > drm/vc4: hdmi: Do the VID_CTL configuration at once > drm/vc4: hdmi: Switch to blank pixels when disabled > drm/vc4: hdmi: Support the BCM2711 HDMI controllers > dt-bindings: display: vc4: hdmi: Add BCM2711 HDMI controllers bindings > dt-bindings: display: vc4: Document BCM2711 VC5 > drm/vc4: drv: Support BCM2711 > ARM: dts: bcm2711: Enable the display pipeline > > Documentation/devicetree/bindings/display/brcm,bcm2711-hdmi.yaml | 109 +++++- > Documentation/devicetree/bindings/display/brcm,bcm2835-hvs.yaml | 18 +- > Documentation/devicetree/bindings/display/brcm,bcm2835-pixelvalve0.yaml | 5 +- > Documentation/devicetree/bindings/display/brcm,bcm2835-vc4.yaml | 1 +- > arch/arm/boot/dts/bcm2711-rpi-4-b.dts | 46 ++- > arch/arm/boot/dts/bcm2711.dtsi | 115 ++++- > drivers/gpu/drm/vc4/Makefile | 1 +- > drivers/gpu/drm/vc4/vc4_crtc.c | 338 +++++++++++---- > drivers/gpu/drm/vc4/vc4_drv.c | 5 +- > drivers/gpu/drm/vc4/vc4_drv.h | 43 +- > drivers/gpu/drm/vc4/vc4_hdmi.c | 1625 +++++++++++++++++++++++++++++++++++++++++++----------------------------- > drivers/gpu/drm/vc4/vc4_hdmi.h | 183 ++++++++- > drivers/gpu/drm/vc4/vc4_hdmi_phy.c | 520 +++++++++++++++++++++++- > drivers/gpu/drm/vc4/vc4_hdmi_regs.h | 442 ++++++++++++++++++++- > drivers/gpu/drm/vc4/vc4_hvs.c | 260 +++++++----- > drivers/gpu/drm/vc4/vc4_kms.c | 225 +++++++++- > drivers/gpu/drm/vc4/vc4_plane.c | 222 +++++++--- > drivers/gpu/drm/vc4/vc4_regs.h | 177 +++----- > drivers/gpu/drm/vc4/vc4_txp.c | 4 +- > 19 files changed, 3331 insertions(+), 1008 deletions(-) > create mode 100644 Documentation/devicetree/bindings/display/brcm,bcm2711-hdmi.yaml > create mode 100644 drivers/gpu/drm/vc4/vc4_hdmi.h > create mode 100644 drivers/gpu/drm/vc4/vc4_hdmi_phy.c > create mode 100644 drivers/gpu/drm/vc4/vc4_hdmi_regs.h > > base-commit: 5bdd2824d705fb8d339d6f96e464b907c9a1553d > I tested it for stress test with reboot command repetitively for verifying this patchset. It is well working. Tested-by: Chanwoo Choi <cw00.choi@xxxxxxxxxxx> -- Best Regards, Chanwoo Choi Samsung Electronics