mbox series

[v2,00/15] drm/vc4: hdmi: Add CEC support for the BCM2711

Message ID 20210111142309.193441-1-maxime@cerno.tech (mailing list archive)
Headers show
Series drm/vc4: hdmi: Add CEC support for the BCM2711 | expand

Message

Maxime Ripard Jan. 11, 2021, 2:22 p.m. UTC
Hi,

Here's a series introducing the CEC support for the BCM2711 found on the
RaspberryPi4.

The BCM2711 HDMI controller uses a similar layout for the CEC registers, the
main difference being that the interrupt handling part is now shared between
both HDMI controllers.

This series is mainly about fixing a couple of bugs, reworking the driver to
support having two different interrupts, one for each direction, provided by an
external irqchip, and enables the irqchip driver for the controller we have.

This has been tested on an RPi3 and RPi4, but requires the latest firmware.
It's is based on the 10 and 12 bpc series.

Here is the cec-compliance output:

pi@raspberrypi:~$ cec-ctl --tuner -p 1.0.0.0
The CEC adapter doesn't allow setting the physical address manually, ignore this option.

Driver Info:
	Driver Name                : vc4_hdmi
	Adapter Name               : vc4
	Capabilities               : 0x0000010e
		Logical Addresses
		Transmit
		Passthrough
	Driver version             : 5.10.0
	Available Logical Addresses: 1
	Physical Address           : 1.0.0.0
	Logical Address Mask       : 0x0008
	CEC Version                : 2.0
	Vendor ID                  : 0x000c03 (HDMI)
	OSD Name                   : Tuner
	Logical Addresses          : 1 (Allow RC Passthrough)

	  Logical Address          : 3 (Tuner 1)
	    Primary Device Type    : Tuner
	    Logical Address Type   : Tuner
	    All Device Types       : Tuner
	    RC TV Profile          : None
	    Device Features        :
		None

pi@raspberrypi:~$ cec-compliance
cec-compliance SHA                 : not available
Driver Info:
	Driver Name                : vc4_hdmi
	Adapter Name               : vc4
	Capabilities               : 0x0000010e
		Logical Addresses
		Transmit
		Passthrough
	Driver version             : 5.10.0
	Available Logical Addresses: 1
	Physical Address           : 1.0.0.0
	Logical Address Mask       : 0x0008
	CEC Version                : 2.0
	Vendor ID                  : 0x000c03 (HDMI)
	OSD Name                   : Tuner
	Logical Addresses          : 1 (Allow RC Passthrough)

	  Logical Address          : 3 (Tuner 1)
	    Primary Device Type    : Tuner
	    Logical Address Type   : Tuner
	    All Device Types       : Tuner
	    RC TV Profile          : None
	    Device Features        :
		None

Compliance test for device /dev/cec0:

    The test results mean the following:
        OK                  Supported correctly by the device.
        OK (Not Supported)  Not supported and not mandatory for the device.
        OK (Presumed)       Presumably supported.  Manually check to confirm.
        OK (Unexpected)     Supported correctly but is not expected to be supported for this device.
        OK (Refused)        Supported by the device, but was refused.
        FAIL                Failed and was expected to be supported by this device.

Find remote devices:
	Polling: OK

Network topology:
	System Information for device 0 (TV) from device 3 (Tuner 1):
		CEC Version                : 2.0
		Physical Address           : 0.0.0.0
		Primary Device Type        : TV
		Vendor ID                  : 0x000c03
		OSD Name                   : 'TV  '
		Power Status               : Tx, OK, Rx, OK, Feature Abort

Total: 1, Succeeded: 1, Failed: 0, Warnings: 0

pi@raspberrypi:~$ cec-ctl -d1 --tuner -p 1.0.0.0
The CEC adapter doesn't allow setting the physical address manually, ignore this option.

Driver Info:
	Driver Name                : vc4_hdmi
	Adapter Name               : vc4
	Capabilities               : 0x0000010e
		Logical Addresses
		Transmit
		Passthrough
	Driver version             : 5.10.0
	Available Logical Addresses: 1
	Physical Address           : 1.0.0.0
	Logical Address Mask       : 0x0008
	CEC Version                : 2.0
	Vendor ID                  : 0x000c03 (HDMI)
	OSD Name                   : Tuner
	Logical Addresses          : 1 (Allow RC Passthrough)

	  Logical Address          : 3 (Tuner 1)
	    Primary Device Type    : Tuner
	    Logical Address Type   : Tuner
	    All Device Types       : Tuner
	    RC TV Profile          : None
	    Device Features        :
		None

pi@raspberrypi:~$ cec-compliance -d1
cec-compliance SHA                 : not available
Driver Info:
	Driver Name                : vc4_hdmi
	Adapter Name               : vc4
	Capabilities               : 0x0000010e
		Logical Addresses
		Transmit
		Passthrough
	Driver version             : 5.10.0
	Available Logical Addresses: 1
	Physical Address           : 1.0.0.0
	Logical Address Mask       : 0x0008
	CEC Version                : 2.0
	Vendor ID                  : 0x000c03 (HDMI)
	OSD Name                   : Tuner
	Logical Addresses          : 1 (Allow RC Passthrough)

	  Logical Address          : 3 (Tuner 1)
	    Primary Device Type    : Tuner
	    Logical Address Type   : Tuner
	    All Device Types       : Tuner
	    RC TV Profile          : None
	    Device Features        :
		None

Compliance test for device /dev/cec1:

    The test results mean the following:
        OK                  Supported correctly by the device.
        OK (Not Supported)  Not supported and not mandatory for the device.
        OK (Presumed)       Presumably supported.  Manually check to confirm.
        OK (Unexpected)     Supported correctly but is not expected to be supported for this device.
        OK (Refused)        Supported by the device, but was refused.
        FAIL                Failed and was expected to be supported by this device.

Find remote devices:
	Polling: OK

Network topology:
	System Information for device 0 (TV) from device 3 (Tuner 1):
		CEC Version                : 2.0
		Physical Address           : 0.0.0.0
		Primary Device Type        : TV
		Vendor ID                  : 0x000c03
		OSD Name                   : 'TV  '
		Power Status               : Tx, OK, Rx, OK, Feature Abort

Total: 1, Succeeded: 1, Failed: 0, Warnings: 0

And for the hotplug detect test:

pi@raspberrypi:~$ cec-ctl --playback
Driver Info:
	Driver Name                : vc4_hdmi
	Adapter Name               : vc4
	Capabilities               : 0x0000010e
		Logical Addresses
		Transmit
		Passthrough
	Driver version             : 5.10.0
	Available Logical Addresses: 1
	Physical Address           : f.f.f.f
	Logical Address Mask       : 0x0000
	CEC Version                : 2.0
	Vendor ID                  : 0x000c03 (HDMI)
	OSD Name                   : Playback
	Logical Addresses          : 1 (Allow RC Passthrough)

	  Logical Address          : Not Allocated
	    Primary Device Type    : Playback
	    Logical Address Type   : Playback
	    All Device Types       : Playback
	    RC TV Profile          : None
	    Device Features        :
		None

pi@raspberrypi:~$ cec-ctl -t0 --image-view-on
Driver Info:
	Driver Name                : vc4_hdmi
	Adapter Name               : vc4
	Capabilities               : 0x0000010e
		Logical Addresses
		Transmit
		Passthrough
	Driver version             : 5.10.0
	Available Logical Addresses: 1
	Physical Address           : f.f.f.f
	Logical Address Mask       : 0x0000
	CEC Version                : 2.0
	Vendor ID                  : 0x000c03 (HDMI)
	OSD Name                   : Playback
	Logical Addresses          : 1 (Allow RC Passthrough)

	  Logical Address          : Not Allocated
	    Primary Device Type    : Playback
	    Logical Address Type   : Playback
	    All Device Types       : Playback
	    RC TV Profile          : None
	    Device Features        :
		None

Transmit from Unregistered to TV (15 to 0):
CEC_MSG_IMAGE_VIEW_ON (0x04)
	Sequence: 1 Tx Timestamp: 9182.611s
pi@raspberrypi:~$ cec-ctl -d1 --playback
Driver Info:
	Driver Name                : vc4_hdmi
	Adapter Name               : vc4
	Capabilities               : 0x0000010e
		Logical Addresses
		Transmit
		Passthrough
	Driver version             : 5.10.0
	Available Logical Addresses: 1
	Physical Address           : f.f.f.f
	Logical Address Mask       : 0x0000
	CEC Version                : 2.0
	Vendor ID                  : 0x000c03 (HDMI)
	OSD Name                   : Playback
	Logical Addresses          : 1 (Allow RC Passthrough)

	  Logical Address          : Not Allocated
	    Primary Device Type    : Playback
	    Logical Address Type   : Playback
	    All Device Types       : Playback
	    RC TV Profile          : None
	    Device Features        :
		None

pi@raspberrypi:~$ cec-ctl -d1 -t0 --image-view-on
Driver Info:
	Driver Name                : vc4_hdmi
	Adapter Name               : vc4
	Capabilities               : 0x0000010e
		Logical Addresses
		Transmit
		Passthrough
	Driver version             : 5.10.0
	Available Logical Addresses: 1
	Physical Address           : f.f.f.f
	Logical Address Mask       : 0x0000
	CEC Version                : 2.0
	Vendor ID                  : 0x000c03 (HDMI)
	OSD Name                   : Playback
	Logical Addresses          : 1 (Allow RC Passthrough)

	  Logical Address          : Not Allocated
	    Primary Device Type    : Playback
	    Logical Address Type   : Playback
	    All Device Types       : Playback
	    RC TV Profile          : None
	    Device Features        :
		None

Transmit from Unregistered to TV (15 to 0):
CEC_MSG_IMAGE_VIEW_ON (0x04)
	Sequence: 1 Tx Timestamp: 9207.191s

With the pulse-eight side reporting:

$ sudo cec-ctl -M
Driver Info:
	Driver Name                : pulse8-cec
	Adapter Name               : serio0
	Capabilities               : 0x0000003f
		Physical Address
		Logical Addresses
		Transmit
		Passthrough
		Remote Control Support
		Monitor All
	Driver version             : 5.9.16
	Available Logical Addresses: 1
	Connector Info             : None
	Physical Address           : 0.0.0.0
	Logical Address Mask       : 0x0001
	CEC Version                : 2.0
	Vendor ID                  : 0x000c03 (HDMI)
	OSD Name                   : 'TV  '
	Logical Addresses          : 1 (Allow RC Passthrough)

	  Logical Address          : 0 (TV)
	    Primary Device Type    : TV
	    Logical Address Type   : TV
	    All Device Types       : TV
	    RC TV Profile          : None
	    Device Features        :
		None

Initial Event: State Change: PA: 0.0.0.0, LA mask: 0x0001, Conn Info: no

Received from Unregistered to TV (15 to 0): IMAGE_VIEW_ON (0x04)
Received from Unregistered to TV (15 to 0): IMAGE_VIEW_ON (0x04)

Let me know what you think,
Maxime

Changes from v1:
  - Removed the irqchip patch in favor of a select in mach-bcm
  - Fixed HDMI1 interrupt numbers
  - Removed redundant call to drm_connector_update_edid_property
  - Fixed the condition in vc4_hdmi_connector_detect
  - Added the tags
  - Rebased on top of drm-misc-next-2021-01-06

Dom Cobley (5):
  drm/vc4: hdmi: Move hdmi reset to bind
  drm/vc4: hdmi: Fix register offset with longer CEC messages
  drm/vc4: hdmi: Fix up CEC registers
  drm/vc4: hdmi: Restore cec physical address on reconnect
  drm/vc4: hdmi: Remove cec_available flag

Maxime Ripard (10):
  ARM: bcm: Select BRCMSTB_L2_IRQ for bcm2835
  drm/vc4: hdmi: Compute the CEC clock divider from the clock rate
  drm/vc4: hdmi: Update the CEC clock divider on HSM rate change
  drm/vc4: hdmi: Introduce a CEC clock
  drm/vc4: hdmi: Split the interrupt handlers
  drm/vc4: hdmi: Support BCM2711 CEC interrupt setup
  drm/vc4: hdmi: Don't register the CEC adapter if there's no interrupts
  dt-binding: display: bcm2711-hdmi: Add CEC and hotplug interrupts
  ARM: dts: bcm2711: Add the BSC interrupt controller
  ARM: dts: bcm2711: Add the CEC interrupt controller

 .../bindings/display/brcm,bcm2711-hdmi.yaml   |  20 +-
 arch/arm/boot/dts/bcm2711.dtsi                |  30 +++
 arch/arm/mach-bcm/Kconfig                     |   1 +
 arch/arm64/Kconfig.platforms                  |   1 +
 drivers/gpu/drm/vc4/vc4_hdmi.c                | 223 ++++++++++++++----
 drivers/gpu/drm/vc4/vc4_hdmi.h                |  11 +-
 drivers/gpu/drm/vc4/vc4_hdmi_regs.h           |   4 +-
 7 files changed, 234 insertions(+), 56 deletions(-)

Comments

Hans Verkuil Jan. 12, 2021, 3:24 p.m. UTC | #1
Hi Maxime,

On 11/01/2021 15:22, Maxime Ripard wrote:
> Hi,
> 
> Here's a series introducing the CEC support for the BCM2711 found on the
> RaspberryPi4.
> 
> The BCM2711 HDMI controller uses a similar layout for the CEC registers, the
> main difference being that the interrupt handling part is now shared between
> both HDMI controllers.
> 
> This series is mainly about fixing a couple of bugs, reworking the driver to
> support having two different interrupts, one for each direction, provided by an
> external irqchip, and enables the irqchip driver for the controller we have.
> 
> This has been tested on an RPi3 and RPi4, but requires the latest firmware.
> It's is based on the 10 and 12 bpc series.

Thank you for this series, I plan to test this later this week.

Regards,

	Hans

> 
> Here is the cec-compliance output:
> 
> pi@raspberrypi:~$ cec-ctl --tuner -p 1.0.0.0
> The CEC adapter doesn't allow setting the physical address manually, ignore this option.
> 
> Driver Info:
> 	Driver Name                : vc4_hdmi
> 	Adapter Name               : vc4
> 	Capabilities               : 0x0000010e
> 		Logical Addresses
> 		Transmit
> 		Passthrough
> 	Driver version             : 5.10.0
> 	Available Logical Addresses: 1
> 	Physical Address           : 1.0.0.0
> 	Logical Address Mask       : 0x0008
> 	CEC Version                : 2.0
> 	Vendor ID                  : 0x000c03 (HDMI)
> 	OSD Name                   : Tuner
> 	Logical Addresses          : 1 (Allow RC Passthrough)
> 
> 	  Logical Address          : 3 (Tuner 1)
> 	    Primary Device Type    : Tuner
> 	    Logical Address Type   : Tuner
> 	    All Device Types       : Tuner
> 	    RC TV Profile          : None
> 	    Device Features        :
> 		None
> 
> pi@raspberrypi:~$ cec-compliance
> cec-compliance SHA                 : not available
> Driver Info:
> 	Driver Name                : vc4_hdmi
> 	Adapter Name               : vc4
> 	Capabilities               : 0x0000010e
> 		Logical Addresses
> 		Transmit
> 		Passthrough
> 	Driver version             : 5.10.0
> 	Available Logical Addresses: 1
> 	Physical Address           : 1.0.0.0
> 	Logical Address Mask       : 0x0008
> 	CEC Version                : 2.0
> 	Vendor ID                  : 0x000c03 (HDMI)
> 	OSD Name                   : Tuner
> 	Logical Addresses          : 1 (Allow RC Passthrough)
> 
> 	  Logical Address          : 3 (Tuner 1)
> 	    Primary Device Type    : Tuner
> 	    Logical Address Type   : Tuner
> 	    All Device Types       : Tuner
> 	    RC TV Profile          : None
> 	    Device Features        :
> 		None
> 
> Compliance test for device /dev/cec0:
> 
>     The test results mean the following:
>         OK                  Supported correctly by the device.
>         OK (Not Supported)  Not supported and not mandatory for the device.
>         OK (Presumed)       Presumably supported.  Manually check to confirm.
>         OK (Unexpected)     Supported correctly but is not expected to be supported for this device.
>         OK (Refused)        Supported by the device, but was refused.
>         FAIL                Failed and was expected to be supported by this device.
> 
> Find remote devices:
> 	Polling: OK
> 
> Network topology:
> 	System Information for device 0 (TV) from device 3 (Tuner 1):
> 		CEC Version                : 2.0
> 		Physical Address           : 0.0.0.0
> 		Primary Device Type        : TV
> 		Vendor ID                  : 0x000c03
> 		OSD Name                   : 'TV  '
> 		Power Status               : Tx, OK, Rx, OK, Feature Abort
> 
> Total: 1, Succeeded: 1, Failed: 0, Warnings: 0
> 
> pi@raspberrypi:~$ cec-ctl -d1 --tuner -p 1.0.0.0
> The CEC adapter doesn't allow setting the physical address manually, ignore this option.
> 
> Driver Info:
> 	Driver Name                : vc4_hdmi
> 	Adapter Name               : vc4
> 	Capabilities               : 0x0000010e
> 		Logical Addresses
> 		Transmit
> 		Passthrough
> 	Driver version             : 5.10.0
> 	Available Logical Addresses: 1
> 	Physical Address           : 1.0.0.0
> 	Logical Address Mask       : 0x0008
> 	CEC Version                : 2.0
> 	Vendor ID                  : 0x000c03 (HDMI)
> 	OSD Name                   : Tuner
> 	Logical Addresses          : 1 (Allow RC Passthrough)
> 
> 	  Logical Address          : 3 (Tuner 1)
> 	    Primary Device Type    : Tuner
> 	    Logical Address Type   : Tuner
> 	    All Device Types       : Tuner
> 	    RC TV Profile          : None
> 	    Device Features        :
> 		None
> 
> pi@raspberrypi:~$ cec-compliance -d1
> cec-compliance SHA                 : not available
> Driver Info:
> 	Driver Name                : vc4_hdmi
> 	Adapter Name               : vc4
> 	Capabilities               : 0x0000010e
> 		Logical Addresses
> 		Transmit
> 		Passthrough
> 	Driver version             : 5.10.0
> 	Available Logical Addresses: 1
> 	Physical Address           : 1.0.0.0
> 	Logical Address Mask       : 0x0008
> 	CEC Version                : 2.0
> 	Vendor ID                  : 0x000c03 (HDMI)
> 	OSD Name                   : Tuner
> 	Logical Addresses          : 1 (Allow RC Passthrough)
> 
> 	  Logical Address          : 3 (Tuner 1)
> 	    Primary Device Type    : Tuner
> 	    Logical Address Type   : Tuner
> 	    All Device Types       : Tuner
> 	    RC TV Profile          : None
> 	    Device Features        :
> 		None
> 
> Compliance test for device /dev/cec1:
> 
>     The test results mean the following:
>         OK                  Supported correctly by the device.
>         OK (Not Supported)  Not supported and not mandatory for the device.
>         OK (Presumed)       Presumably supported.  Manually check to confirm.
>         OK (Unexpected)     Supported correctly but is not expected to be supported for this device.
>         OK (Refused)        Supported by the device, but was refused.
>         FAIL                Failed and was expected to be supported by this device.
> 
> Find remote devices:
> 	Polling: OK
> 
> Network topology:
> 	System Information for device 0 (TV) from device 3 (Tuner 1):
> 		CEC Version                : 2.0
> 		Physical Address           : 0.0.0.0
> 		Primary Device Type        : TV
> 		Vendor ID                  : 0x000c03
> 		OSD Name                   : 'TV  '
> 		Power Status               : Tx, OK, Rx, OK, Feature Abort
> 
> Total: 1, Succeeded: 1, Failed: 0, Warnings: 0
> 
> And for the hotplug detect test:
> 
> pi@raspberrypi:~$ cec-ctl --playback
> Driver Info:
> 	Driver Name                : vc4_hdmi
> 	Adapter Name               : vc4
> 	Capabilities               : 0x0000010e
> 		Logical Addresses
> 		Transmit
> 		Passthrough
> 	Driver version             : 5.10.0
> 	Available Logical Addresses: 1
> 	Physical Address           : f.f.f.f
> 	Logical Address Mask       : 0x0000
> 	CEC Version                : 2.0
> 	Vendor ID                  : 0x000c03 (HDMI)
> 	OSD Name                   : Playback
> 	Logical Addresses          : 1 (Allow RC Passthrough)
> 
> 	  Logical Address          : Not Allocated
> 	    Primary Device Type    : Playback
> 	    Logical Address Type   : Playback
> 	    All Device Types       : Playback
> 	    RC TV Profile          : None
> 	    Device Features        :
> 		None
> 
> pi@raspberrypi:~$ cec-ctl -t0 --image-view-on
> Driver Info:
> 	Driver Name                : vc4_hdmi
> 	Adapter Name               : vc4
> 	Capabilities               : 0x0000010e
> 		Logical Addresses
> 		Transmit
> 		Passthrough
> 	Driver version             : 5.10.0
> 	Available Logical Addresses: 1
> 	Physical Address           : f.f.f.f
> 	Logical Address Mask       : 0x0000
> 	CEC Version                : 2.0
> 	Vendor ID                  : 0x000c03 (HDMI)
> 	OSD Name                   : Playback
> 	Logical Addresses          : 1 (Allow RC Passthrough)
> 
> 	  Logical Address          : Not Allocated
> 	    Primary Device Type    : Playback
> 	    Logical Address Type   : Playback
> 	    All Device Types       : Playback
> 	    RC TV Profile          : None
> 	    Device Features        :
> 		None
> 
> Transmit from Unregistered to TV (15 to 0):
> CEC_MSG_IMAGE_VIEW_ON (0x04)
> 	Sequence: 1 Tx Timestamp: 9182.611s
> pi@raspberrypi:~$ cec-ctl -d1 --playback
> Driver Info:
> 	Driver Name                : vc4_hdmi
> 	Adapter Name               : vc4
> 	Capabilities               : 0x0000010e
> 		Logical Addresses
> 		Transmit
> 		Passthrough
> 	Driver version             : 5.10.0
> 	Available Logical Addresses: 1
> 	Physical Address           : f.f.f.f
> 	Logical Address Mask       : 0x0000
> 	CEC Version                : 2.0
> 	Vendor ID                  : 0x000c03 (HDMI)
> 	OSD Name                   : Playback
> 	Logical Addresses          : 1 (Allow RC Passthrough)
> 
> 	  Logical Address          : Not Allocated
> 	    Primary Device Type    : Playback
> 	    Logical Address Type   : Playback
> 	    All Device Types       : Playback
> 	    RC TV Profile          : None
> 	    Device Features        :
> 		None
> 
> pi@raspberrypi:~$ cec-ctl -d1 -t0 --image-view-on
> Driver Info:
> 	Driver Name                : vc4_hdmi
> 	Adapter Name               : vc4
> 	Capabilities               : 0x0000010e
> 		Logical Addresses
> 		Transmit
> 		Passthrough
> 	Driver version             : 5.10.0
> 	Available Logical Addresses: 1
> 	Physical Address           : f.f.f.f
> 	Logical Address Mask       : 0x0000
> 	CEC Version                : 2.0
> 	Vendor ID                  : 0x000c03 (HDMI)
> 	OSD Name                   : Playback
> 	Logical Addresses          : 1 (Allow RC Passthrough)
> 
> 	  Logical Address          : Not Allocated
> 	    Primary Device Type    : Playback
> 	    Logical Address Type   : Playback
> 	    All Device Types       : Playback
> 	    RC TV Profile          : None
> 	    Device Features        :
> 		None
> 
> Transmit from Unregistered to TV (15 to 0):
> CEC_MSG_IMAGE_VIEW_ON (0x04)
> 	Sequence: 1 Tx Timestamp: 9207.191s
> 
> With the pulse-eight side reporting:
> 
> $ sudo cec-ctl -M
> Driver Info:
> 	Driver Name                : pulse8-cec
> 	Adapter Name               : serio0
> 	Capabilities               : 0x0000003f
> 		Physical Address
> 		Logical Addresses
> 		Transmit
> 		Passthrough
> 		Remote Control Support
> 		Monitor All
> 	Driver version             : 5.9.16
> 	Available Logical Addresses: 1
> 	Connector Info             : None
> 	Physical Address           : 0.0.0.0
> 	Logical Address Mask       : 0x0001
> 	CEC Version                : 2.0
> 	Vendor ID                  : 0x000c03 (HDMI)
> 	OSD Name                   : 'TV  '
> 	Logical Addresses          : 1 (Allow RC Passthrough)
> 
> 	  Logical Address          : 0 (TV)
> 	    Primary Device Type    : TV
> 	    Logical Address Type   : TV
> 	    All Device Types       : TV
> 	    RC TV Profile          : None
> 	    Device Features        :
> 		None
> 
> Initial Event: State Change: PA: 0.0.0.0, LA mask: 0x0001, Conn Info: no
> 
> Received from Unregistered to TV (15 to 0): IMAGE_VIEW_ON (0x04)
> Received from Unregistered to TV (15 to 0): IMAGE_VIEW_ON (0x04)
> 
> Let me know what you think,
> Maxime
> 
> Changes from v1:
>   - Removed the irqchip patch in favor of a select in mach-bcm
>   - Fixed HDMI1 interrupt numbers
>   - Removed redundant call to drm_connector_update_edid_property
>   - Fixed the condition in vc4_hdmi_connector_detect
>   - Added the tags
>   - Rebased on top of drm-misc-next-2021-01-06
> 
> Dom Cobley (5):
>   drm/vc4: hdmi: Move hdmi reset to bind
>   drm/vc4: hdmi: Fix register offset with longer CEC messages
>   drm/vc4: hdmi: Fix up CEC registers
>   drm/vc4: hdmi: Restore cec physical address on reconnect
>   drm/vc4: hdmi: Remove cec_available flag
> 
> Maxime Ripard (10):
>   ARM: bcm: Select BRCMSTB_L2_IRQ for bcm2835
>   drm/vc4: hdmi: Compute the CEC clock divider from the clock rate
>   drm/vc4: hdmi: Update the CEC clock divider on HSM rate change
>   drm/vc4: hdmi: Introduce a CEC clock
>   drm/vc4: hdmi: Split the interrupt handlers
>   drm/vc4: hdmi: Support BCM2711 CEC interrupt setup
>   drm/vc4: hdmi: Don't register the CEC adapter if there's no interrupts
>   dt-binding: display: bcm2711-hdmi: Add CEC and hotplug interrupts
>   ARM: dts: bcm2711: Add the BSC interrupt controller
>   ARM: dts: bcm2711: Add the CEC interrupt controller
> 
>  .../bindings/display/brcm,bcm2711-hdmi.yaml   |  20 +-
>  arch/arm/boot/dts/bcm2711.dtsi                |  30 +++
>  arch/arm/mach-bcm/Kconfig                     |   1 +
>  arch/arm64/Kconfig.platforms                  |   1 +
>  drivers/gpu/drm/vc4/vc4_hdmi.c                | 223 ++++++++++++++----
>  drivers/gpu/drm/vc4/vc4_hdmi.h                |  11 +-
>  drivers/gpu/drm/vc4/vc4_hdmi_regs.h           |   4 +-
>  7 files changed, 234 insertions(+), 56 deletions(-)
>
Hans Verkuil Jan. 18, 2021, 1:55 p.m. UTC | #2
On 12/01/2021 16:24, Hans Verkuil wrote:
> Hi Maxime,
> 
> On 11/01/2021 15:22, Maxime Ripard wrote:
>> Hi,
>>
>> Here's a series introducing the CEC support for the BCM2711 found on the
>> RaspberryPi4.
>>
>> The BCM2711 HDMI controller uses a similar layout for the CEC registers, the
>> main difference being that the interrupt handling part is now shared between
>> both HDMI controllers.
>>
>> This series is mainly about fixing a couple of bugs, reworking the driver to
>> support having two different interrupts, one for each direction, provided by an
>> external irqchip, and enables the irqchip driver for the controller we have.
>>
>> This has been tested on an RPi3 and RPi4, but requires the latest firmware.
>> It's is based on the 10 and 12 bpc series.
> 
> Thank you for this series, I plan to test this later this week.

Testing is delayed: my microHDMI to HDMI adapter has problems with the CEC pin
(possibly not connected at all). I've ordered adapter cables (hopefully of better
quality), but those haven't arrived yet. I expect them later this week.

Regards,

	Hans

> 
> Regards,
> 
> 	Hans
> 
>>
>> Here is the cec-compliance output:
>>
>> pi@raspberrypi:~$ cec-ctl --tuner -p 1.0.0.0
>> The CEC adapter doesn't allow setting the physical address manually, ignore this option.
>>
>> Driver Info:
>> 	Driver Name                : vc4_hdmi
>> 	Adapter Name               : vc4
>> 	Capabilities               : 0x0000010e
>> 		Logical Addresses
>> 		Transmit
>> 		Passthrough
>> 	Driver version             : 5.10.0
>> 	Available Logical Addresses: 1
>> 	Physical Address           : 1.0.0.0
>> 	Logical Address Mask       : 0x0008
>> 	CEC Version                : 2.0
>> 	Vendor ID                  : 0x000c03 (HDMI)
>> 	OSD Name                   : Tuner
>> 	Logical Addresses          : 1 (Allow RC Passthrough)
>>
>> 	  Logical Address          : 3 (Tuner 1)
>> 	    Primary Device Type    : Tuner
>> 	    Logical Address Type   : Tuner
>> 	    All Device Types       : Tuner
>> 	    RC TV Profile          : None
>> 	    Device Features        :
>> 		None
>>
>> pi@raspberrypi:~$ cec-compliance
>> cec-compliance SHA                 : not available
>> Driver Info:
>> 	Driver Name                : vc4_hdmi
>> 	Adapter Name               : vc4
>> 	Capabilities               : 0x0000010e
>> 		Logical Addresses
>> 		Transmit
>> 		Passthrough
>> 	Driver version             : 5.10.0
>> 	Available Logical Addresses: 1
>> 	Physical Address           : 1.0.0.0
>> 	Logical Address Mask       : 0x0008
>> 	CEC Version                : 2.0
>> 	Vendor ID                  : 0x000c03 (HDMI)
>> 	OSD Name                   : Tuner
>> 	Logical Addresses          : 1 (Allow RC Passthrough)
>>
>> 	  Logical Address          : 3 (Tuner 1)
>> 	    Primary Device Type    : Tuner
>> 	    Logical Address Type   : Tuner
>> 	    All Device Types       : Tuner
>> 	    RC TV Profile          : None
>> 	    Device Features        :
>> 		None
>>
>> Compliance test for device /dev/cec0:
>>
>>     The test results mean the following:
>>         OK                  Supported correctly by the device.
>>         OK (Not Supported)  Not supported and not mandatory for the device.
>>         OK (Presumed)       Presumably supported.  Manually check to confirm.
>>         OK (Unexpected)     Supported correctly but is not expected to be supported for this device.
>>         OK (Refused)        Supported by the device, but was refused.
>>         FAIL                Failed and was expected to be supported by this device.
>>
>> Find remote devices:
>> 	Polling: OK
>>
>> Network topology:
>> 	System Information for device 0 (TV) from device 3 (Tuner 1):
>> 		CEC Version                : 2.0
>> 		Physical Address           : 0.0.0.0
>> 		Primary Device Type        : TV
>> 		Vendor ID                  : 0x000c03
>> 		OSD Name                   : 'TV  '
>> 		Power Status               : Tx, OK, Rx, OK, Feature Abort
>>
>> Total: 1, Succeeded: 1, Failed: 0, Warnings: 0
>>
>> pi@raspberrypi:~$ cec-ctl -d1 --tuner -p 1.0.0.0
>> The CEC adapter doesn't allow setting the physical address manually, ignore this option.
>>
>> Driver Info:
>> 	Driver Name                : vc4_hdmi
>> 	Adapter Name               : vc4
>> 	Capabilities               : 0x0000010e
>> 		Logical Addresses
>> 		Transmit
>> 		Passthrough
>> 	Driver version             : 5.10.0
>> 	Available Logical Addresses: 1
>> 	Physical Address           : 1.0.0.0
>> 	Logical Address Mask       : 0x0008
>> 	CEC Version                : 2.0
>> 	Vendor ID                  : 0x000c03 (HDMI)
>> 	OSD Name                   : Tuner
>> 	Logical Addresses          : 1 (Allow RC Passthrough)
>>
>> 	  Logical Address          : 3 (Tuner 1)
>> 	    Primary Device Type    : Tuner
>> 	    Logical Address Type   : Tuner
>> 	    All Device Types       : Tuner
>> 	    RC TV Profile          : None
>> 	    Device Features        :
>> 		None
>>
>> pi@raspberrypi:~$ cec-compliance -d1
>> cec-compliance SHA                 : not available
>> Driver Info:
>> 	Driver Name                : vc4_hdmi
>> 	Adapter Name               : vc4
>> 	Capabilities               : 0x0000010e
>> 		Logical Addresses
>> 		Transmit
>> 		Passthrough
>> 	Driver version             : 5.10.0
>> 	Available Logical Addresses: 1
>> 	Physical Address           : 1.0.0.0
>> 	Logical Address Mask       : 0x0008
>> 	CEC Version                : 2.0
>> 	Vendor ID                  : 0x000c03 (HDMI)
>> 	OSD Name                   : Tuner
>> 	Logical Addresses          : 1 (Allow RC Passthrough)
>>
>> 	  Logical Address          : 3 (Tuner 1)
>> 	    Primary Device Type    : Tuner
>> 	    Logical Address Type   : Tuner
>> 	    All Device Types       : Tuner
>> 	    RC TV Profile          : None
>> 	    Device Features        :
>> 		None
>>
>> Compliance test for device /dev/cec1:
>>
>>     The test results mean the following:
>>         OK                  Supported correctly by the device.
>>         OK (Not Supported)  Not supported and not mandatory for the device.
>>         OK (Presumed)       Presumably supported.  Manually check to confirm.
>>         OK (Unexpected)     Supported correctly but is not expected to be supported for this device.
>>         OK (Refused)        Supported by the device, but was refused.
>>         FAIL                Failed and was expected to be supported by this device.
>>
>> Find remote devices:
>> 	Polling: OK
>>
>> Network topology:
>> 	System Information for device 0 (TV) from device 3 (Tuner 1):
>> 		CEC Version                : 2.0
>> 		Physical Address           : 0.0.0.0
>> 		Primary Device Type        : TV
>> 		Vendor ID                  : 0x000c03
>> 		OSD Name                   : 'TV  '
>> 		Power Status               : Tx, OK, Rx, OK, Feature Abort
>>
>> Total: 1, Succeeded: 1, Failed: 0, Warnings: 0
>>
>> And for the hotplug detect test:
>>
>> pi@raspberrypi:~$ cec-ctl --playback
>> Driver Info:
>> 	Driver Name                : vc4_hdmi
>> 	Adapter Name               : vc4
>> 	Capabilities               : 0x0000010e
>> 		Logical Addresses
>> 		Transmit
>> 		Passthrough
>> 	Driver version             : 5.10.0
>> 	Available Logical Addresses: 1
>> 	Physical Address           : f.f.f.f
>> 	Logical Address Mask       : 0x0000
>> 	CEC Version                : 2.0
>> 	Vendor ID                  : 0x000c03 (HDMI)
>> 	OSD Name                   : Playback
>> 	Logical Addresses          : 1 (Allow RC Passthrough)
>>
>> 	  Logical Address          : Not Allocated
>> 	    Primary Device Type    : Playback
>> 	    Logical Address Type   : Playback
>> 	    All Device Types       : Playback
>> 	    RC TV Profile          : None
>> 	    Device Features        :
>> 		None
>>
>> pi@raspberrypi:~$ cec-ctl -t0 --image-view-on
>> Driver Info:
>> 	Driver Name                : vc4_hdmi
>> 	Adapter Name               : vc4
>> 	Capabilities               : 0x0000010e
>> 		Logical Addresses
>> 		Transmit
>> 		Passthrough
>> 	Driver version             : 5.10.0
>> 	Available Logical Addresses: 1
>> 	Physical Address           : f.f.f.f
>> 	Logical Address Mask       : 0x0000
>> 	CEC Version                : 2.0
>> 	Vendor ID                  : 0x000c03 (HDMI)
>> 	OSD Name                   : Playback
>> 	Logical Addresses          : 1 (Allow RC Passthrough)
>>
>> 	  Logical Address          : Not Allocated
>> 	    Primary Device Type    : Playback
>> 	    Logical Address Type   : Playback
>> 	    All Device Types       : Playback
>> 	    RC TV Profile          : None
>> 	    Device Features        :
>> 		None
>>
>> Transmit from Unregistered to TV (15 to 0):
>> CEC_MSG_IMAGE_VIEW_ON (0x04)
>> 	Sequence: 1 Tx Timestamp: 9182.611s
>> pi@raspberrypi:~$ cec-ctl -d1 --playback
>> Driver Info:
>> 	Driver Name                : vc4_hdmi
>> 	Adapter Name               : vc4
>> 	Capabilities               : 0x0000010e
>> 		Logical Addresses
>> 		Transmit
>> 		Passthrough
>> 	Driver version             : 5.10.0
>> 	Available Logical Addresses: 1
>> 	Physical Address           : f.f.f.f
>> 	Logical Address Mask       : 0x0000
>> 	CEC Version                : 2.0
>> 	Vendor ID                  : 0x000c03 (HDMI)
>> 	OSD Name                   : Playback
>> 	Logical Addresses          : 1 (Allow RC Passthrough)
>>
>> 	  Logical Address          : Not Allocated
>> 	    Primary Device Type    : Playback
>> 	    Logical Address Type   : Playback
>> 	    All Device Types       : Playback
>> 	    RC TV Profile          : None
>> 	    Device Features        :
>> 		None
>>
>> pi@raspberrypi:~$ cec-ctl -d1 -t0 --image-view-on
>> Driver Info:
>> 	Driver Name                : vc4_hdmi
>> 	Adapter Name               : vc4
>> 	Capabilities               : 0x0000010e
>> 		Logical Addresses
>> 		Transmit
>> 		Passthrough
>> 	Driver version             : 5.10.0
>> 	Available Logical Addresses: 1
>> 	Physical Address           : f.f.f.f
>> 	Logical Address Mask       : 0x0000
>> 	CEC Version                : 2.0
>> 	Vendor ID                  : 0x000c03 (HDMI)
>> 	OSD Name                   : Playback
>> 	Logical Addresses          : 1 (Allow RC Passthrough)
>>
>> 	  Logical Address          : Not Allocated
>> 	    Primary Device Type    : Playback
>> 	    Logical Address Type   : Playback
>> 	    All Device Types       : Playback
>> 	    RC TV Profile          : None
>> 	    Device Features        :
>> 		None
>>
>> Transmit from Unregistered to TV (15 to 0):
>> CEC_MSG_IMAGE_VIEW_ON (0x04)
>> 	Sequence: 1 Tx Timestamp: 9207.191s
>>
>> With the pulse-eight side reporting:
>>
>> $ sudo cec-ctl -M
>> Driver Info:
>> 	Driver Name                : pulse8-cec
>> 	Adapter Name               : serio0
>> 	Capabilities               : 0x0000003f
>> 		Physical Address
>> 		Logical Addresses
>> 		Transmit
>> 		Passthrough
>> 		Remote Control Support
>> 		Monitor All
>> 	Driver version             : 5.9.16
>> 	Available Logical Addresses: 1
>> 	Connector Info             : None
>> 	Physical Address           : 0.0.0.0
>> 	Logical Address Mask       : 0x0001
>> 	CEC Version                : 2.0
>> 	Vendor ID                  : 0x000c03 (HDMI)
>> 	OSD Name                   : 'TV  '
>> 	Logical Addresses          : 1 (Allow RC Passthrough)
>>
>> 	  Logical Address          : 0 (TV)
>> 	    Primary Device Type    : TV
>> 	    Logical Address Type   : TV
>> 	    All Device Types       : TV
>> 	    RC TV Profile          : None
>> 	    Device Features        :
>> 		None
>>
>> Initial Event: State Change: PA: 0.0.0.0, LA mask: 0x0001, Conn Info: no
>>
>> Received from Unregistered to TV (15 to 0): IMAGE_VIEW_ON (0x04)
>> Received from Unregistered to TV (15 to 0): IMAGE_VIEW_ON (0x04)
>>
>> Let me know what you think,
>> Maxime
>>
>> Changes from v1:
>>   - Removed the irqchip patch in favor of a select in mach-bcm
>>   - Fixed HDMI1 interrupt numbers
>>   - Removed redundant call to drm_connector_update_edid_property
>>   - Fixed the condition in vc4_hdmi_connector_detect
>>   - Added the tags
>>   - Rebased on top of drm-misc-next-2021-01-06
>>
>> Dom Cobley (5):
>>   drm/vc4: hdmi: Move hdmi reset to bind
>>   drm/vc4: hdmi: Fix register offset with longer CEC messages
>>   drm/vc4: hdmi: Fix up CEC registers
>>   drm/vc4: hdmi: Restore cec physical address on reconnect
>>   drm/vc4: hdmi: Remove cec_available flag
>>
>> Maxime Ripard (10):
>>   ARM: bcm: Select BRCMSTB_L2_IRQ for bcm2835
>>   drm/vc4: hdmi: Compute the CEC clock divider from the clock rate
>>   drm/vc4: hdmi: Update the CEC clock divider on HSM rate change
>>   drm/vc4: hdmi: Introduce a CEC clock
>>   drm/vc4: hdmi: Split the interrupt handlers
>>   drm/vc4: hdmi: Support BCM2711 CEC interrupt setup
>>   drm/vc4: hdmi: Don't register the CEC adapter if there's no interrupts
>>   dt-binding: display: bcm2711-hdmi: Add CEC and hotplug interrupts
>>   ARM: dts: bcm2711: Add the BSC interrupt controller
>>   ARM: dts: bcm2711: Add the CEC interrupt controller
>>
>>  .../bindings/display/brcm,bcm2711-hdmi.yaml   |  20 +-
>>  arch/arm/boot/dts/bcm2711.dtsi                |  30 +++
>>  arch/arm/mach-bcm/Kconfig                     |   1 +
>>  arch/arm64/Kconfig.platforms                  |   1 +
>>  drivers/gpu/drm/vc4/vc4_hdmi.c                | 223 ++++++++++++++----
>>  drivers/gpu/drm/vc4/vc4_hdmi.h                |  11 +-
>>  drivers/gpu/drm/vc4/vc4_hdmi_regs.h           |   4 +-
>>  7 files changed, 234 insertions(+), 56 deletions(-)
>>
>
Nicolas Saenz Julienne Jan. 25, 2021, 9:03 p.m. UTC | #3
Hi,

On Mon, 2021-01-11 at 15:22 +0100, Maxime Ripard wrote:
> Hi,
> 
> Here's a series introducing the CEC support for the BCM2711 found on the
> RaspberryPi4.
> 
> The BCM2711 HDMI controller uses a similar layout for the CEC registers, the
> main difference being that the interrupt handling part is now shared between
> both HDMI controllers.
> 
> This series is mainly about fixing a couple of bugs, reworking the driver to
> support having two different interrupts, one for each direction, provided by an
> external irqchip, and enables the irqchip driver for the controller we have.
> 
> This has been tested on an RPi3 and RPi4, but requires the latest firmware.
> It's is based on the 10 and 12 bpc series.

I applied patches #1 and #14 for-next. I'm waiting on Hans' testing for #15.

Regards,
Nicolas
Hans Verkuil Jan. 27, 2021, 3:28 p.m. UTC | #4
On 18/01/2021 14:55, Hans Verkuil wrote:
> On 12/01/2021 16:24, Hans Verkuil wrote:
>> Hi Maxime,
>>
>> On 11/01/2021 15:22, Maxime Ripard wrote:
>>> Hi,
>>>
>>> Here's a series introducing the CEC support for the BCM2711 found on the
>>> RaspberryPi4.
>>>
>>> The BCM2711 HDMI controller uses a similar layout for the CEC registers, the
>>> main difference being that the interrupt handling part is now shared between
>>> both HDMI controllers.
>>>
>>> This series is mainly about fixing a couple of bugs, reworking the driver to
>>> support having two different interrupts, one for each direction, provided by an
>>> external irqchip, and enables the irqchip driver for the controller we have.
>>>
>>> This has been tested on an RPi3 and RPi4, but requires the latest firmware.
>>> It's is based on the 10 and 12 bpc series.
>>
>> Thank you for this series, I plan to test this later this week.
> 
> Testing is delayed: my microHDMI to HDMI adapter has problems with the CEC pin
> (possibly not connected at all). I've ordered adapter cables (hopefully of better
> quality), but those haven't arrived yet. I expect them later this week.

After testing this you can add my:

Acked-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
Tested-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>

for the patches in this series.

Thank you for working on this!

Regards,

	Hans

> 
> Regards,
> 
> 	Hans
> 
>>
>> Regards,
>>
>> 	Hans
>>
>>>
>>> Here is the cec-compliance output:
>>>
>>> pi@raspberrypi:~$ cec-ctl --tuner -p 1.0.0.0
>>> The CEC adapter doesn't allow setting the physical address manually, ignore this option.
>>>
>>> Driver Info:
>>> 	Driver Name                : vc4_hdmi
>>> 	Adapter Name               : vc4
>>> 	Capabilities               : 0x0000010e
>>> 		Logical Addresses
>>> 		Transmit
>>> 		Passthrough
>>> 	Driver version             : 5.10.0
>>> 	Available Logical Addresses: 1
>>> 	Physical Address           : 1.0.0.0
>>> 	Logical Address Mask       : 0x0008
>>> 	CEC Version                : 2.0
>>> 	Vendor ID                  : 0x000c03 (HDMI)
>>> 	OSD Name                   : Tuner
>>> 	Logical Addresses          : 1 (Allow RC Passthrough)
>>>
>>> 	  Logical Address          : 3 (Tuner 1)
>>> 	    Primary Device Type    : Tuner
>>> 	    Logical Address Type   : Tuner
>>> 	    All Device Types       : Tuner
>>> 	    RC TV Profile          : None
>>> 	    Device Features        :
>>> 		None
>>>
>>> pi@raspberrypi:~$ cec-compliance
>>> cec-compliance SHA                 : not available
>>> Driver Info:
>>> 	Driver Name                : vc4_hdmi
>>> 	Adapter Name               : vc4
>>> 	Capabilities               : 0x0000010e
>>> 		Logical Addresses
>>> 		Transmit
>>> 		Passthrough
>>> 	Driver version             : 5.10.0
>>> 	Available Logical Addresses: 1
>>> 	Physical Address           : 1.0.0.0
>>> 	Logical Address Mask       : 0x0008
>>> 	CEC Version                : 2.0
>>> 	Vendor ID                  : 0x000c03 (HDMI)
>>> 	OSD Name                   : Tuner
>>> 	Logical Addresses          : 1 (Allow RC Passthrough)
>>>
>>> 	  Logical Address          : 3 (Tuner 1)
>>> 	    Primary Device Type    : Tuner
>>> 	    Logical Address Type   : Tuner
>>> 	    All Device Types       : Tuner
>>> 	    RC TV Profile          : None
>>> 	    Device Features        :
>>> 		None
>>>
>>> Compliance test for device /dev/cec0:
>>>
>>>     The test results mean the following:
>>>         OK                  Supported correctly by the device.
>>>         OK (Not Supported)  Not supported and not mandatory for the device.
>>>         OK (Presumed)       Presumably supported.  Manually check to confirm.
>>>         OK (Unexpected)     Supported correctly but is not expected to be supported for this device.
>>>         OK (Refused)        Supported by the device, but was refused.
>>>         FAIL                Failed and was expected to be supported by this device.
>>>
>>> Find remote devices:
>>> 	Polling: OK
>>>
>>> Network topology:
>>> 	System Information for device 0 (TV) from device 3 (Tuner 1):
>>> 		CEC Version                : 2.0
>>> 		Physical Address           : 0.0.0.0
>>> 		Primary Device Type        : TV
>>> 		Vendor ID                  : 0x000c03
>>> 		OSD Name                   : 'TV  '
>>> 		Power Status               : Tx, OK, Rx, OK, Feature Abort
>>>
>>> Total: 1, Succeeded: 1, Failed: 0, Warnings: 0
>>>
>>> pi@raspberrypi:~$ cec-ctl -d1 --tuner -p 1.0.0.0
>>> The CEC adapter doesn't allow setting the physical address manually, ignore this option.
>>>
>>> Driver Info:
>>> 	Driver Name                : vc4_hdmi
>>> 	Adapter Name               : vc4
>>> 	Capabilities               : 0x0000010e
>>> 		Logical Addresses
>>> 		Transmit
>>> 		Passthrough
>>> 	Driver version             : 5.10.0
>>> 	Available Logical Addresses: 1
>>> 	Physical Address           : 1.0.0.0
>>> 	Logical Address Mask       : 0x0008
>>> 	CEC Version                : 2.0
>>> 	Vendor ID                  : 0x000c03 (HDMI)
>>> 	OSD Name                   : Tuner
>>> 	Logical Addresses          : 1 (Allow RC Passthrough)
>>>
>>> 	  Logical Address          : 3 (Tuner 1)
>>> 	    Primary Device Type    : Tuner
>>> 	    Logical Address Type   : Tuner
>>> 	    All Device Types       : Tuner
>>> 	    RC TV Profile          : None
>>> 	    Device Features        :
>>> 		None
>>>
>>> pi@raspberrypi:~$ cec-compliance -d1
>>> cec-compliance SHA                 : not available
>>> Driver Info:
>>> 	Driver Name                : vc4_hdmi
>>> 	Adapter Name               : vc4
>>> 	Capabilities               : 0x0000010e
>>> 		Logical Addresses
>>> 		Transmit
>>> 		Passthrough
>>> 	Driver version             : 5.10.0
>>> 	Available Logical Addresses: 1
>>> 	Physical Address           : 1.0.0.0
>>> 	Logical Address Mask       : 0x0008
>>> 	CEC Version                : 2.0
>>> 	Vendor ID                  : 0x000c03 (HDMI)
>>> 	OSD Name                   : Tuner
>>> 	Logical Addresses          : 1 (Allow RC Passthrough)
>>>
>>> 	  Logical Address          : 3 (Tuner 1)
>>> 	    Primary Device Type    : Tuner
>>> 	    Logical Address Type   : Tuner
>>> 	    All Device Types       : Tuner
>>> 	    RC TV Profile          : None
>>> 	    Device Features        :
>>> 		None
>>>
>>> Compliance test for device /dev/cec1:
>>>
>>>     The test results mean the following:
>>>         OK                  Supported correctly by the device.
>>>         OK (Not Supported)  Not supported and not mandatory for the device.
>>>         OK (Presumed)       Presumably supported.  Manually check to confirm.
>>>         OK (Unexpected)     Supported correctly but is not expected to be supported for this device.
>>>         OK (Refused)        Supported by the device, but was refused.
>>>         FAIL                Failed and was expected to be supported by this device.
>>>
>>> Find remote devices:
>>> 	Polling: OK
>>>
>>> Network topology:
>>> 	System Information for device 0 (TV) from device 3 (Tuner 1):
>>> 		CEC Version                : 2.0
>>> 		Physical Address           : 0.0.0.0
>>> 		Primary Device Type        : TV
>>> 		Vendor ID                  : 0x000c03
>>> 		OSD Name                   : 'TV  '
>>> 		Power Status               : Tx, OK, Rx, OK, Feature Abort
>>>
>>> Total: 1, Succeeded: 1, Failed: 0, Warnings: 0
>>>
>>> And for the hotplug detect test:
>>>
>>> pi@raspberrypi:~$ cec-ctl --playback
>>> Driver Info:
>>> 	Driver Name                : vc4_hdmi
>>> 	Adapter Name               : vc4
>>> 	Capabilities               : 0x0000010e
>>> 		Logical Addresses
>>> 		Transmit
>>> 		Passthrough
>>> 	Driver version             : 5.10.0
>>> 	Available Logical Addresses: 1
>>> 	Physical Address           : f.f.f.f
>>> 	Logical Address Mask       : 0x0000
>>> 	CEC Version                : 2.0
>>> 	Vendor ID                  : 0x000c03 (HDMI)
>>> 	OSD Name                   : Playback
>>> 	Logical Addresses          : 1 (Allow RC Passthrough)
>>>
>>> 	  Logical Address          : Not Allocated
>>> 	    Primary Device Type    : Playback
>>> 	    Logical Address Type   : Playback
>>> 	    All Device Types       : Playback
>>> 	    RC TV Profile          : None
>>> 	    Device Features        :
>>> 		None
>>>
>>> pi@raspberrypi:~$ cec-ctl -t0 --image-view-on
>>> Driver Info:
>>> 	Driver Name                : vc4_hdmi
>>> 	Adapter Name               : vc4
>>> 	Capabilities               : 0x0000010e
>>> 		Logical Addresses
>>> 		Transmit
>>> 		Passthrough
>>> 	Driver version             : 5.10.0
>>> 	Available Logical Addresses: 1
>>> 	Physical Address           : f.f.f.f
>>> 	Logical Address Mask       : 0x0000
>>> 	CEC Version                : 2.0
>>> 	Vendor ID                  : 0x000c03 (HDMI)
>>> 	OSD Name                   : Playback
>>> 	Logical Addresses          : 1 (Allow RC Passthrough)
>>>
>>> 	  Logical Address          : Not Allocated
>>> 	    Primary Device Type    : Playback
>>> 	    Logical Address Type   : Playback
>>> 	    All Device Types       : Playback
>>> 	    RC TV Profile          : None
>>> 	    Device Features        :
>>> 		None
>>>
>>> Transmit from Unregistered to TV (15 to 0):
>>> CEC_MSG_IMAGE_VIEW_ON (0x04)
>>> 	Sequence: 1 Tx Timestamp: 9182.611s
>>> pi@raspberrypi:~$ cec-ctl -d1 --playback
>>> Driver Info:
>>> 	Driver Name                : vc4_hdmi
>>> 	Adapter Name               : vc4
>>> 	Capabilities               : 0x0000010e
>>> 		Logical Addresses
>>> 		Transmit
>>> 		Passthrough
>>> 	Driver version             : 5.10.0
>>> 	Available Logical Addresses: 1
>>> 	Physical Address           : f.f.f.f
>>> 	Logical Address Mask       : 0x0000
>>> 	CEC Version                : 2.0
>>> 	Vendor ID                  : 0x000c03 (HDMI)
>>> 	OSD Name                   : Playback
>>> 	Logical Addresses          : 1 (Allow RC Passthrough)
>>>
>>> 	  Logical Address          : Not Allocated
>>> 	    Primary Device Type    : Playback
>>> 	    Logical Address Type   : Playback
>>> 	    All Device Types       : Playback
>>> 	    RC TV Profile          : None
>>> 	    Device Features        :
>>> 		None
>>>
>>> pi@raspberrypi:~$ cec-ctl -d1 -t0 --image-view-on
>>> Driver Info:
>>> 	Driver Name                : vc4_hdmi
>>> 	Adapter Name               : vc4
>>> 	Capabilities               : 0x0000010e
>>> 		Logical Addresses
>>> 		Transmit
>>> 		Passthrough
>>> 	Driver version             : 5.10.0
>>> 	Available Logical Addresses: 1
>>> 	Physical Address           : f.f.f.f
>>> 	Logical Address Mask       : 0x0000
>>> 	CEC Version                : 2.0
>>> 	Vendor ID                  : 0x000c03 (HDMI)
>>> 	OSD Name                   : Playback
>>> 	Logical Addresses          : 1 (Allow RC Passthrough)
>>>
>>> 	  Logical Address          : Not Allocated
>>> 	    Primary Device Type    : Playback
>>> 	    Logical Address Type   : Playback
>>> 	    All Device Types       : Playback
>>> 	    RC TV Profile          : None
>>> 	    Device Features        :
>>> 		None
>>>
>>> Transmit from Unregistered to TV (15 to 0):
>>> CEC_MSG_IMAGE_VIEW_ON (0x04)
>>> 	Sequence: 1 Tx Timestamp: 9207.191s
>>>
>>> With the pulse-eight side reporting:
>>>
>>> $ sudo cec-ctl -M
>>> Driver Info:
>>> 	Driver Name                : pulse8-cec
>>> 	Adapter Name               : serio0
>>> 	Capabilities               : 0x0000003f
>>> 		Physical Address
>>> 		Logical Addresses
>>> 		Transmit
>>> 		Passthrough
>>> 		Remote Control Support
>>> 		Monitor All
>>> 	Driver version             : 5.9.16
>>> 	Available Logical Addresses: 1
>>> 	Connector Info             : None
>>> 	Physical Address           : 0.0.0.0
>>> 	Logical Address Mask       : 0x0001
>>> 	CEC Version                : 2.0
>>> 	Vendor ID                  : 0x000c03 (HDMI)
>>> 	OSD Name                   : 'TV  '
>>> 	Logical Addresses          : 1 (Allow RC Passthrough)
>>>
>>> 	  Logical Address          : 0 (TV)
>>> 	    Primary Device Type    : TV
>>> 	    Logical Address Type   : TV
>>> 	    All Device Types       : TV
>>> 	    RC TV Profile          : None
>>> 	    Device Features        :
>>> 		None
>>>
>>> Initial Event: State Change: PA: 0.0.0.0, LA mask: 0x0001, Conn Info: no
>>>
>>> Received from Unregistered to TV (15 to 0): IMAGE_VIEW_ON (0x04)
>>> Received from Unregistered to TV (15 to 0): IMAGE_VIEW_ON (0x04)
>>>
>>> Let me know what you think,
>>> Maxime
>>>
>>> Changes from v1:
>>>   - Removed the irqchip patch in favor of a select in mach-bcm
>>>   - Fixed HDMI1 interrupt numbers
>>>   - Removed redundant call to drm_connector_update_edid_property
>>>   - Fixed the condition in vc4_hdmi_connector_detect
>>>   - Added the tags
>>>   - Rebased on top of drm-misc-next-2021-01-06
>>>
>>> Dom Cobley (5):
>>>   drm/vc4: hdmi: Move hdmi reset to bind
>>>   drm/vc4: hdmi: Fix register offset with longer CEC messages
>>>   drm/vc4: hdmi: Fix up CEC registers
>>>   drm/vc4: hdmi: Restore cec physical address on reconnect
>>>   drm/vc4: hdmi: Remove cec_available flag
>>>
>>> Maxime Ripard (10):
>>>   ARM: bcm: Select BRCMSTB_L2_IRQ for bcm2835
>>>   drm/vc4: hdmi: Compute the CEC clock divider from the clock rate
>>>   drm/vc4: hdmi: Update the CEC clock divider on HSM rate change
>>>   drm/vc4: hdmi: Introduce a CEC clock
>>>   drm/vc4: hdmi: Split the interrupt handlers
>>>   drm/vc4: hdmi: Support BCM2711 CEC interrupt setup
>>>   drm/vc4: hdmi: Don't register the CEC adapter if there's no interrupts
>>>   dt-binding: display: bcm2711-hdmi: Add CEC and hotplug interrupts
>>>   ARM: dts: bcm2711: Add the BSC interrupt controller
>>>   ARM: dts: bcm2711: Add the CEC interrupt controller
>>>
>>>  .../bindings/display/brcm,bcm2711-hdmi.yaml   |  20 +-
>>>  arch/arm/boot/dts/bcm2711.dtsi                |  30 +++
>>>  arch/arm/mach-bcm/Kconfig                     |   1 +
>>>  arch/arm64/Kconfig.platforms                  |   1 +
>>>  drivers/gpu/drm/vc4/vc4_hdmi.c                | 223 ++++++++++++++----
>>>  drivers/gpu/drm/vc4/vc4_hdmi.h                |  11 +-
>>>  drivers/gpu/drm/vc4/vc4_hdmi_regs.h           |   4 +-
>>>  7 files changed, 234 insertions(+), 56 deletions(-)
>>>
>>
>
Maxime Ripard Jan. 28, 2021, 9:48 a.m. UTC | #5
Hi!

On Mon, Jan 25, 2021 at 10:03:44PM +0100, Nicolas Saenz Julienne wrote:
> Hi,
> 
> On Mon, 2021-01-11 at 15:22 +0100, Maxime Ripard wrote:
> > Hi,
> > 
> > Here's a series introducing the CEC support for the BCM2711 found on the
> > RaspberryPi4.
> > 
> > The BCM2711 HDMI controller uses a similar layout for the CEC registers, the
> > main difference being that the interrupt handling part is now shared between
> > both HDMI controllers.
> > 
> > This series is mainly about fixing a couple of bugs, reworking the driver to
> > support having two different interrupts, one for each direction, provided by an
> > external irqchip, and enables the irqchip driver for the controller we have.
> > 
> > This has been tested on an RPi3 and RPi4, but requires the latest firmware.
> > It's is based on the 10 and 12 bpc series.
> 
> I applied patches #1 and #14 for-next. I'm waiting on Hans' testing for #15.

I've applied to drm-misc-next the patches 2 to 13

Maxime