[PATCH] [RFC] drm: mxsfb: Implement LCDIF scanout CRC32 support

Liu Ying victor.liu at oss.nxp.com
Mon Feb 7 09:18:43 UTC 2022


On Mon, 2022-02-07 at 09:14 +0100, Marek Vasut wrote:
> On 2/7/22 06:13, Liu Ying wrote:
> > Hi Marek,
> 
> Hi,
> 
> > On Sun, 2022-02-06 at 19:56 +0100, Marek Vasut wrote:
> > > The LCDIF controller as present in i.MX6SX/i.MX8M Mini/Nano has a
> > > CRC_STAT
> > > register, which contains CRC32 of the frame as it was clocked out
> > > of the
> > > DPI interface of the LCDIF. This is likely meant as a functional
> > > safety
> > > register.
> > > 
> > > Unfortunatelly, there is zero documentation on how the CRC32 is
> > > calculated,
> > > there is no documentation of the polynomial, the init value, nor
> > > on which
> > > data is the checksum applied.
> > > 
> > > By applying brute-force on 8 pixel / 2 line frame, which is the
> > > minimum
> > > size LCDIF would work with, it turns out the polynomial is
> > > CRC32_POLY_LE
> > > 0xedb88320 , init value is 0xffffffff , the input data are
> > > bitrev32()
> > > of the entire frame and the resulting CRC has to be also
> > > bitrev32()ed.
> > 
> > No idea how the HW calculates the CRC value.
> > I didn't hear anyone internal tried this feature.
> 
> It would be nice if the datasheet could be improved.

Agreed.

> 
> There are many blank areas which are undocumented, this LCDIF CRC32 
> feature, i.MX8M Mini Arteris NOC at 0x32700000 , the ARM GPV NIC-301
> at 
> 0x32{0,1,2,3,4,5,6,8}00000 and their master/slave port mapping. The
> NOC 
> and NICs were documented at least up to i.MX6QP and then that 
> information disappeared from NXP datasheets. I think reconfiguring
> the 
> NOC/NIC QoS would help mitigate this shift issue described below (*).

I also think the QoS would help if it is configureable.

> 
> Do you know if there is some additional NOC/NIC documentation for
> i.MX8M 
> Mini available ?

No.

> 
> > > Doing this calculation in software for each frame is unrealistic
> > > due to
> > > the CPU demand, implement at least a sysfs attribute which
> > > permits testing
> > > the current frame on demand.
> > 
> > Why not using the existing debugfs CRC support implemented
> > in drivers/gpu/drm/drm_debugfs_crc.c?
> 
> I wasn't aware of that, thanks.

No problem.

> 
> > > Unfortunatelly, this functionality has another problem. On all of
> > > those SoCs,
> > > it is possible to overload interconnect e.g. by concurrent USB
> > > and uSDHC
> > > transfers, at which point the LCDIF LFIFO suffers an UNDERFLOW
> > > condition,
> > > which results in the image being shifted to the right by exactly
> > > LFIFO size
> > > pixels. On i.MX8M Mini, the LFIFO is 76x256 bits = 2432 Byte ~=
> > > 810 pixel
> > > at 24bpp. In this case, the LCDIF does not assert UNDERFLOW_IRQ
> > > bit, the
> > > frame CRC32 indicated in CRC_STAT register matches the CRC32 of
> > > the frame
> > > in DRAM, the RECOVER_ON_UNDERFLOW bit has no effect, so if this
> > > mode of
> > > failure occurs, the failure gets undetected and uncorrected.
> > 
> > Hmmm, interesting, no UNDERFLOW_IRQ bit asserted when LCDIF suffers
> > an
> > UNDERFLOW condition?
> 
> Yes

Did you ever see UNDERFLOW_IRQ bit asserted in any case?

Liu Ying



More information about the dri-devel mailing list