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 :-(
This commit is contained in:
parent
940e3165d3
commit
c5cf9b3e26
1 changed files with 30 additions and 0 deletions
|
@ -410,6 +410,34 @@ pcicfginit(void)
|
||||||
rootinit(&ctlrs[1]);
|
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 {
|
enum {
|
||||||
SRC_PCIEPHY_RCR = 0x2C/4,
|
SRC_PCIEPHY_RCR = 0x2C/4,
|
||||||
SRC_PCIE2_RCR = 0x48/4,
|
SRC_PCIE2_RCR = 0x48/4,
|
||||||
|
@ -494,4 +522,6 @@ pciimxlink(void)
|
||||||
resetc[SRC_PCIE2_RCR] &= ~(PCIE_BTN | PCIE_G_RST);
|
resetc[SRC_PCIE2_RCR] &= ~(PCIE_BTN | PCIE_G_RST);
|
||||||
|
|
||||||
pcicfginit();
|
pcicfginit();
|
||||||
|
|
||||||
|
qosmagic();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue