• Marek Vasut's avatar
    firmware: xilinx: Clear IOCTL_SET_SD_TAPDELAY using PM_MMIO_WRITE · a4b2e606
    Marek Vasut authored
    In case the tap delay required by Arasan SDHCI is set to 0, the current
    embeddedsw firmware unconditionally writes IOU_SLCR SD_ITAPDLY to 0x100
    (SD0_ITAPDLYENA=1, SD0_ITAPDLYSEL=0). Previous behavior was to keep the
    IOU_SLCR SD_ITAPDLY set to 0x0. There is some sort of difference in the
    behavior between SD0_ITAPDLYENA=1/0 with the same SD0_ITAPDLYSEL=0, even
    though the behavior should be identical -- zero delay added to rxclk_in
    line. The former breaks HS200 training in low temperature conditions.
    
    Write IOU_SLCR SD_ITAPDLY register to 0 using PM_MMIO_WRITE which seem
    to allow unrestricted WRITE access (and PM_MMIO_READ which allows read
    access) to the entire address space. This way, it is possible to work
    around the defect in IOCTL_SET_SD_TAPDELAY design which does not permit
    clearing SDx_ITAPDLYENA bit.
    
    Note that the embeddedsw firmware does not permit clearing the SD_ITAPDLY
    SD0_ITAPDLYENA bit, this bit can only ever be set by the firmware and it
    is often impossible to update the possibly broken firmware.
    Signed-off-by: default avatarMarek Vasut <marex@denx.de>
    Link: https://lore.kernel.org/r/20221215152023.8387-1-marex@denx.deSigned-off-by: default avatarMichal Simek <michal.simek@amd.com>
    a4b2e606
zynqmp.c 50.5 KB