rpi-4.14.y-userqpu: fail to detect qpu job completion
Opened this issue · 0 comments
Hi, I am currently investigating rpi-4.14.y-userqpu branch to run vc4 programs (e.g. hello_fft) with dtovelay=vc4-kms-v3d
enabled.
With this patch, I could confirm that several vc4 programs including hello_fft can be correctly executed under dtovelay=vc4-kms-v3d
enabled. However, in every case, it seems that the driver does not properly detect QPU job completion because it fails to detect writes to a host_interrupt register at the end of qpu instructions, which suppose to trigger an interrupt from qpu.
More precisely, It seems that a write to the host_interrupt register doesn't trigger the interrupt handler vc4_irq , which is supposed to finish the qpu job. Instead, a hangcheck procedure vc4_hangcheck_elapsed
, which is executed every single second, eventually determines that the job has hung, resets the GPU, and vc4_wait_for_seqno in vc4_firmware_qpu_execute
finally returned. Also, whenever vc4_irq
was executed, the contents of V3D_DBQITC were always 0, and a job termination procedure in vc4_irq never seemed to be executed.
I also try dtovelay=vc4-fkms-v3d
instead, but the behavior is the same.
Is there anything you can tell about how to properly detect the end of a QPU job?
I posted a related question in raspberrypi forum, but I asked here as well, hoping for some insight from the patch author's point of view.
This is config.txt I used.
# For more options and information see
# http://rpf.io/configtxt
# Some settings may impact device functionality. See link above for details
# uncomment if you get no picture on HDMI for a default "safe" mode
#hdmi_safe=1
# uncomment this if your display has a black border of unused pixels visible
# and your display can output without overscan
#disable_overscan=1
# uncomment the following to adjust overscan. Use positive numbers if console
# goes off screen, and negative if there is too much border
#overscan_left=16
#overscan_right=16
#overscan_top=16
#overscan_bottom=16
# uncomment to force a console size. By default it will be display's size minus
# overscan.
#framebuffer_width=1280
#framebuffer_height=720
# uncomment if hdmi display is not detected and composite is being output
#hdmi_force_hotplug=1
# uncomment to force a specific HDMI mode (this will force VGA)
#hdmi_group=1
#hdmi_mode=1
# uncomment to force a HDMI mode rather than DVI. This can make audio work in
# DMT (computer monitor) modes
#hdmi_drive=2
# uncomment to increase signal to HDMI, if you have interference, blanking, or
# no display
#config_hdmi_boost=4
# uncomment for composite PAL
#sdtv_mode=2
#uncomment to overclock the arm. 700 MHz is the default.
#arm_freq=800
# Uncomment some or all of these to enable the optional hardware interfaces
#dtparam=i2c_arm=on
#dtparam=i2s=on
#dtparam=spi=on
# Uncomment this to enable infrared communication.
#dtoverlay=gpio-ir,gpio_pin=17
#dtoverlay=gpio-ir-tx,gpio_pin=18
# Additional overlays and parameters are documented /boot/overlays/README
# Enable audio (loads snd_bcm2835)
dtparam=audio=on
[pi4]
# Enable DRM VC4 V3D driver on top of the dispmanx display stack
dtoverlay=vc4-fkms-v3d
max_framebuffers=2
[all]
dtoverlay=vc4-kms-v3d
# using vc4-fkms-v3d instead didn't change the behavior
Regard,