Re: [PATCH v4 00/78] drm/vc4: Support BCM2711 Display Pipeline

From: Chanwoo Choi
Date: Sun Aug 30 2020 - 22:24:39 EST


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