1. 02 Jan, 2023 3 commits
    • Maíra Canal's avatar
      drm/vc4: drop all currently held locks if deadlock happens · 479d4f0b
      Maíra Canal authored
      If vc4_hdmi_reset_link() returns -EDEADLK, it means that a deadlock
      happened in the locking context. This situation should be addressed by
      dropping all currently held locks and block until the contended lock
      becomes available. Currently, vc4 is not dealing with the deadlock
      properly, producing the following output when PROVE_LOCKING is enabled:
      
      [  825.612809] ------------[ cut here ]------------
      [  825.612852] WARNING: CPU: 1 PID: 116 at drivers/gpu/drm/drm_modeset_lock.c:276 drm_modeset_drop_locks+0x60/0x68 [drm]
      [  825.613458] Modules linked in: 8021q mrp garp stp llc
      raspberrypi_cpufreq brcmfmac brcmutil crct10dif_ce hci_uart cfg80211
      btqca btbcm bluetooth vc4 raspberrypi_hwmon snd_soc_hdmi_codec cec
      clk_raspberrypi ecdh_generic drm_display_helper ecc rfkill
      drm_dma_helper drm_kms_helper pwm_bcm2835 bcm2835_thermal bcm2835_rng
      rng_core i2c_bcm2835 drm fuse ip_tables x_tables ipv6
      [  825.613735] CPU: 1 PID: 116 Comm: kworker/1:2 Tainted: G        W 6.1.0-rc6-01399-g941aae32 #3
      [  825.613759] Hardware name: Raspberry Pi 3 Model B Rev 1.2 (DT)
      [  825.613777] Workqueue: events output_poll_execute [drm_kms_helper]
      [  825.614038] pstate: 60000005 (nZCv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--)
      [  825.614063] pc : drm_modeset_drop_locks+0x60/0x68 [drm]
      [  825.614603] lr : drm_helper_probe_detect+0x120/0x1b4 [drm_kms_helper]
      [  825.614829] sp : ffff800008313bf0
      [  825.614844] x29: ffff800008313bf0 x28: ffffcd7778b8b000 x27: 0000000000000000
      [  825.614883] x26: 0000000000000001 x25: 0000000000000001 x24: ffff677cc35c2758
      [  825.614920] x23: ffffcd7707d01430 x22: ffffcd7707c3edc7 x21: 0000000000000001
      [  825.614958] x20: 0000000000000000 x19: ffff800008313c10 x18: 000000000000b6d3
      [  825.614995] x17: ffffcd777835e214 x16: ffffcd7777cef870 x15: fffff81000000000
      [  825.615033] x14: 0000000000000000 x13: 0000000000000099 x12: 0000000000000002
      [  825.615070] x11: 72917988020af800 x10: 72917988020af800 x9 : 72917988020af800
      [  825.615108] x8 : ffff677cc665e0a8 x7 : d00a8c180000110c x6 : ffffcd77774c0054
      [  825.615145] x5 : 0000000000000000 x4 : 0000000000000001 x3 : 0000000000000000
      [  825.615181] x2 : ffff677cc55e1880 x1 : ffffcd7777cef8ec x0 : ffff800008313c10
      [  825.615219] Call trace:
      [  825.615232]  drm_modeset_drop_locks+0x60/0x68 [drm]
      [  825.615773]  drm_helper_probe_detect+0x120/0x1b4 [drm_kms_helper]
      [  825.616003]  output_poll_execute+0xe4/0x224 [drm_kms_helper]
      [  825.616233]  process_one_work+0x2b4/0x618
      [  825.616264]  worker_thread+0x24c/0x464
      [  825.616288]  kthread+0xec/0x110
      [  825.616310]  ret_from_fork+0x10/0x20
      [  825.616335] irq event stamp: 7634
      [  825.616349] hardirqs last  enabled at (7633): [<ffffcd777831ee90>] _raw_spin_unlock_irq+0x3c/0x78
      [  825.616384] hardirqs last disabled at (7634): [<ffffcd7778315a78>] __schedule+0x134/0x9f0
      [  825.616411] softirqs last  enabled at (7630): [<ffffcd7707aacea0>] local_bh_enable+0x4/0x30 [ipv6]
      [  825.617019] softirqs last disabled at (7618): [<ffffcd7707aace70>] local_bh_disable+0x4/0x30 [ipv6]
      [  825.617586] ---[ end trace 0000000000000000 ]---
      
      Therefore, deal with the deadlock as suggested by [1], using the
      function drm_modeset_backoff().
      
      [1] https://docs.kernel.org/gpu/drm-kms.html?highlight=kms#kms-locking
      
      Fixes: 6bed2ea3 ("drm/vc4: hdmi: Reset link on hotplug")
      Reported-by: default avatarStefan Wahren <stefan.wahren@i2se.com>
      Signed-off-by: default avatarMaíra Canal <mcanal@igalia.com>
      Tested-by: default avatarStefan Wahren <stefan.wahren@i2se.com>
      Signed-off-by: default avatarMaxime Ripard <maxime@cerno.tech>
      Link: https://patchwork.freedesktop.org/patch/msgid/20221229194638.178712-1-mcanal@igalia.com
      479d4f0b
    • Carlo Caione's avatar
      drm/tiny: ili9486: Do not assume 8-bit only SPI controllers · 77772e60
      Carlo Caione authored
      The pixel data for the ILI9486 is always 16-bits wide and it must be
      sent over the SPI bus. When the controller is only able to deal with
      8-bit transfers, this 16-bits data needs to be swapped before the
      sending to account for the big endian bus, this is on the contrary not
      needed when the SPI controller already supports 16-bits transfers.
      
      The decision about swapping the pixel data or not is taken in the MIPI
      DBI code by probing the controller capabilities: if the controller only
      suppors 8-bit transfers the data is swapped, otherwise it is not.
      
      This swapping/non-swapping is relying on the assumption that when the
      controller does support 16-bit transactions then the data is sent
      unswapped in 16-bits-per-word over SPI.
      
      The problem with the ILI9486 driver is that it is forcing 8-bit
      transactions also for controllers supporting 16-bits, violating the
      assumption and corrupting the pixel data.
      
      Align the driver to what is done in the MIPI DBI code by adjusting the
      transfer size to the maximum allowed by the SPI controller.
      Reviewed-by: default avatarNeil Armstrong <neil.armstrong@linaro.org>
      Signed-off-by: default avatarCarlo Caione <ccaione@baylibre.com>
      Reviewed-by: default avatarKamlesh Gurudasani <kamlesh.gurudasani@gmail.com>
      Signed-off-by: default avatarNeil Armstrong <neil.armstrong@linaro.org>
      Link: https://patchwork.freedesktop.org/patch/msgid/20221116-s905x_spi_ili9486-v4-2-f86b4463b9e4@baylibre.com
      77772e60
    • Carlo Caione's avatar
      drm/tiny: ili9486: Enable driver module autoloading · e9c7cfe7
      Carlo Caione authored
      SPI devices use the spi_device_id for module autoloading even on
      systems using device tree.
      
      Add the spi_device_id entry to enable autoloading for the 3.5inch RPi
      Display (rpi-lcd-35 and piscreen).
      Reviewed-by: default avatarNeil Armstrong <neil.armstrong@linaro.org>
      Signed-off-by: default avatarCarlo Caione <ccaione@baylibre.com>
      Reviewed-by: default avatarKamlesh Gurudasani <kamlesh.gurudasani@gmail.com>
      Signed-off-by: default avatarNeil Armstrong <neil.armstrong@linaro.org>
      Link: https://patchwork.freedesktop.org/patch/msgid/20221116-s905x_spi_ili9486-v4-1-f86b4463b9e4@baylibre.com
      e9c7cfe7
  2. 29 Dec, 2022 2 commits
  3. 22 Dec, 2022 7 commits
  4. 20 Dec, 2022 3 commits
  5. 19 Dec, 2022 3 commits
  6. 16 Dec, 2022 20 commits
  7. 15 Dec, 2022 2 commits