Using the Zynq-7000, I would like to perform full memory scrubbing, to avoid single bit errors in RAM becoming uncorrectable. It is not clear to me what are the hardware capabilities of the memory controller in terms of scrubbing. From the technical reference manual, it appears that the controller can use ECC to correct data when reading memory. Scrubbing can be enabled to also fix the error in the memory directly. If the error is already 2 bits, a flag is raised.
By taking a look at the synopsis EDAC driver (attached), I see the scrub capabilities are set to SCRUB_HW_SRC:
In Linux documentation, I could not find information about this setting, except a quick definition: "Hardware scrub only errors". This is not clear to me, can the EDAC actually scrub the whole memory periodically/on-demand or only bytes that are read/accessed?
If it does not support full memory HW scrubbing, what are the possible options to implement this? Is reading the whole memory periodically or on-demand with the EDAC SCRUB_HW_SRC enabled an acceptable solution? Or is a SW implementation required?