Bug 2486355

Summary: official 7" touch display not working on raspberry 3b+
Product: [Fedora] Fedora Reporter: redhat
Component: bcm283x-firmwareAssignee: Peter Robinson <pbrobinson>
Status: NEW --- QA Contact: Fedora Extras Quality Assurance <extras-qa>
Severity: medium Docs Contact:
Priority: unspecified    
Version: 44CC: pbrobinson, pwhalen
Target Milestone: ---   
Target Release: ---   
Hardware: aarch64   
OS: Linux   
Whiteboard:
Fixed In Version: Doc Type: ---
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:

Description redhat 2026-06-08 14:04:11 UTC
When booting a fresh Fedora IoT 44 (written with arm-image-installer) on a raspberry pi 3 b+, the 7" touchscreen (connected via DSI) does not work. 

When adding either `display_auto_detect=1` or `dtoverlay=vc4-kms-dsi-7inch` (or both) to the `config.txt`, the screen will go dark and I end up with a simpleframebuffer device at `/dev/dri/card0`. 

When I ommit those settings, I end up with a vc4-drm device at `/dev/dri/card1`, but it just fades from black to white and stays dim. 

The screen (and pi) works flawelessly with current raspios. 

Please let me know if you need any more info / logs. 

Reproducible: Always

Steps to Reproduce:
Boot Fedora IoT 44 on Raspberry Pi 3 B+
Actual Results:
Screen does not work

Expected Results:
Well ... 

Additional Information:
```
$ sudo dmesg | grep -E 'vc4|dsi|tc358|ft5|panel'

[   28.541636] vc4-drm soc:gpu: bound 3f400000.hvs (ops vc4_hvs_ops [vc4])
[   28.555528] rc rc0: vc4-hdmi as /devices/platform/soc/3f902000.hdmi/rc/rc0
[   28.562568] input: vc4-hdmi as /devices/platform/soc/3f902000.hdmi/rc/rc0/input0
[   28.582320] input: vc4-hdmi HDMI Jack as /devices/platform/soc/3f902000.hdmi/sound/card1/input1
[   28.614352] vc4-drm soc:gpu: bound 3f902000.hdmi (ops vc4_hdmi_ops [vc4])
[   28.621719] vc4-drm soc:gpu: bound 3f806000.vec (ops vc4_vec_ops [vc4])
[   28.628437] vc4-drm soc:gpu: bound 3f004000.txp (ops vc4_txp_ops [vc4])
[   28.635085] vc4-drm soc:gpu: bound 3f206000.pixelvalve (ops vc4_crtc_ops [vc4])
[   28.642445] vc4-drm soc:gpu: bound 3f207000.pixelvalve (ops vc4_crtc_ops [vc4])
[   28.649832] vc4-drm soc:gpu: bound 3f807000.pixelvalve (ops vc4_crtc_ops [vc4])
[   28.658523] vc4-drm soc:gpu: bound 3fc00000.v3d (ops vc4_v3d_ops [vc4])
[   28.674829] [drm] Initialized vc4 0.0.0 for soc:gpu on minor 1
[   28.727218] vc4-drm soc:gpu: [drm] fb0: vc4drmfb frame buffer device

$ sudo cat /sys/kernel/debug/device_component/soc:gpu

aggregate_device name                                            status
-----------------------------------------------------------------------
soc:gpu                                                           bound

device name                                                      status
-----------------------------------------------------------------------
3f400000.hvs                                                      bound
3f902000.hdmi                                                     bound
3f806000.vec                                                      bound
3f004000.txp                                                      bound
3f206000.pixelvalve                                               bound
3f207000.pixelvalve                                               bound
3f807000.pixelvalve                                               bound
3fc00000.v3d                                                      bound
```

Somehow DSI does not get bound.

Diff of device tree (`dtc -s -I fs -O dts /proc/device-tree`) in fedora vs. raspios:

```
$ diff -u /tmp/fedora-focus.txt /tmp/rpios-focus.txt
--- /tmp/fedora-focus.txt       2026-06-01 02:46:12.735447646 +0200
+++ /tmp/rpios-focus.txt        2026-06-01 02:46:12.727447646 +0200
@@ -1,27 +1,38 @@
-117:           dsi0 = "/soc/dsi@7e209000";
-118:           dsi1 = "/soc/dsi@7e700000";
-139:           i2c0 = "/soc/i2c0mux/i2c@0";
-144:           i2c0if = "/soc/i2c@7e205000";
-146:           i2c1 = "/soc/i2c@7e804000";
-150:           i2c2 = "/soc/i2c@7e805000";
-151:           i2c_arm = "/soc/i2c@7e804000";
-152:           i2c_csi_dsi = "/soc/i2c0mux/i2c@1";
-153:           i2c_csi_dsi0 = "/soc/i2c0mux/i2c@0";
-155:           i2c_vc = "/soc/i2c0mux/i2c@0";
-252:           i2c = "/soc/i2c@7e804000";
-253:           i2c0 = "/soc/i2c0mux/i2c@0";
-254:           i2c1 = "/soc/i2c@7e804000";
-255:           i2c10 = "/soc/i2c0mux/i2c@1";
-256:           i2c2 = "/soc/i2c@7e805000";
-628:           dsi@7e209000 {
-633:                   clock-output-names = "dsi0_byte", "dsi0_ddr2", "dsi0_ddr";
-635:                   compatible = "brcm,bcm2835-dsi0";
-643:           dsi@7e700000 {
-648:                   clock-output-names = "dsi1_byte", "dsi1_ddr2", "dsi1_ddr";
-650:                   compatible = "brcm,bcm2835-dsi1";
-1158:                  pinctrl-names = "i2c0", "i2c_csi_dsi";
-1161:                  i2c@0 {
-1168:                  i2c@1 {
-1176:          i2c@7e205000 {
-1188:          i2c@7e804000 {
-1202:          i2c@7e805000 {
+30:    reg_bridge@1 {
+101:           i2c@7e804000 {
+756:                   pinctrl-names = "i2c0", "i2c_csi_dsi";
+766:                   i2c@0 {
+773:                   i2c@1 {
+782:                                   compatible = "raspberrypi,7inch-touchscreen-panel-regulator";
+789:                                   touchscreen-inverted-y;
+791:                                   touchscreen-size-x = <0x320>;
+792:                                   compatible = "edt,edt-ft5506";
+793:                                   touchscreen-inverted-x;
+797:                                   touchscreen-size-y = <0x1e0>;
+802:           i2c@7e205000 {
+957:           dsi@7e209000 {
+960:                   clock-output-names = "dsi0_byte", "dsi0_ddr2", "dsi0_ddr";
+966:                   compatible = "brcm,bcm2835-dsi0";
+972:           i2c@7e805000 {
+1148:          dsi@7e700000 {
+1151:                  clock-output-names = "dsi1_byte", "dsi1_ddr2", "dsi1_ddr";
+1157:                  compatible = "brcm,bcm2835-dsi1";
+1170:                  bridge@0 {
+1172:                          compatible = "toshiba,tc358762";
+1292:          i2c1 = "/soc/i2c@7e804000";
+1307:          i2c2 = "/soc/i2c@7e805000";
+1312:          i2c0 = "/soc/i2c0mux/i2c@0";
+1321:          i2c = "/soc/i2c@7e804000";
+1322:          i2c10 = "/soc/i2c0mux/i2c@1";
+1325:  panel_disp@1 {
+1328:          compatible = "raspberrypi,7inch-dsi", "simple-panel";
+1468:          i2c_csi_dsi = "/soc/i2c0mux/i2c@1";
+1474:          dsi1 = "/soc/dsi@7e700000";
+1476:          i2c1 = "/soc/i2c@7e804000";
+1491:          i2c_csi_dsi0 = "/soc/i2c0mux/i2c@0";
+1514:          i2c0if = "/soc/i2c@7e205000";
+1522:          i2c_vc = "/soc/i2c0mux/i2c@0";
+1538:          i2c_arm = "/soc/i2c@7e804000";
+1548:          i2c2 = "/soc/i2c@7e805000";
+1558:          dsi0 = "/soc/dsi@7e209000";
+1565:          i2c0 = "/soc/i2c0mux/i2c@0";
```