git: 9front

Download patch

ref: 67e7530973d29123efb33d6d64f72147346fa70f
parent: 1b26d1b08fe0065e5c532e065aa4238eaae25f95
author: cinap_lenrek <cinap_lenrek@felloff.net>
date: Sun Jul 3 12:13:19 EDT 2022

imx8: qos magic to avoid interference between pcie and lcdif

when writing to the nvme ssd, the screen can glitch out.

found this in linux lcdif driver (mxcfb) that appears to
resolve the issue.

the QoSc registers are all completely undocumented tho :-(

--- a/sys/src/9/imx8/pciimx.c
+++ b/sys/src/9/imx8/pciimx.c
@@ -410,6 +410,34 @@
 	rootinit(&ctlrs[1]);
 }
 
+/* undocumented magic to avoid interference between lcdif and pcie */
+static void
+qosmagic(void)
+{
+	static u32int *qosc = (u32int*)(VIRTIO + 0x7f0000);
+
+	/* unlock */
+	qosc[0x0000/4] = 0x0;
+	qosc[0x0000/4] = 0x1;
+	qosc[0x0060/4] = 0x0;
+
+	/* pci1 */
+	qosc[0x1000/4] = 0x0;
+	qosc[0x1000/4] = 0x1;
+	qosc[0x1050/4] = 0x01010100;
+	qosc[0x1060/4] = 0x01010100;
+	qosc[0x1070/4] = 0x01010100;
+	qosc[0x1000/4] = 0x1;
+
+	/* pcie2 */
+	qosc[0x2000/4] = 0x0;
+	qosc[0x2000/4] = 0x1;
+	qosc[0x2050/4] = 0x01010100;
+	qosc[0x2060/4] = 0x01010100;
+	qosc[0x2070/4] = 0x01010100;
+	qosc[0x2000/4] = 0x1;
+}
+
 enum {
 	SRC_PCIEPHY_RCR		= 0x2C/4,
 	SRC_PCIE2_RCR		= 0x48/4,
@@ -494,4 +522,6 @@
 	resetc[SRC_PCIE2_RCR] &= ~(PCIE_BTN | PCIE_G_RST);
 
 	pcicfginit();
+
+	qosmagic();
 }
--