• Alan Mikhak's avatar
    PCI: dwc: Program outbound ATU upper limit register · 668b4490
    Alan Mikhak authored
    Function dw_pcie_prog_outbound_atu_unroll() does not program the upper
    32-bit ATU limit register. Since ATU programming functions limit the
    size of the translated region to 4GB by using a u32 size parameter,
    these issues may combine into undefined behavior for resource sizes
    with non-zero upper 32-bits.
    
    For example, a 128GB address space starting at physical CPU address of
    0x2000000000 with size of 0x2000000000 needs the following values
    programmed into the lower and upper 32-bit limit registers:
     0x3fffffff in the upper 32-bit limit register
     0xffffffff in the lower 32-bit limit register
    
    Currently, only the lower 32-bit limit register is programmed with a
    value of 0xffffffff but the upper 32-bit limit register is not being
    programmed. As a result, the upper 32-bit limit register remains at its
    default value after reset of 0x0.
    
    These issues may combine to produce undefined behavior since the ATU
    limit address may be lower than the ATU base address. Programming the
    upper ATU limit address register prevents such undefined behavior despite
    the region size getting truncated due to the 32-bit size limit.
    
    Link: https://lore.kernel.org/r/1585785493-23210-1-git-send-email-alan.mikhak@sifive.comSigned-off-by: default avatarAlan Mikhak <alan.mikhak@sifive.com>
    Signed-off-by: default avatarLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
    Acked-by: default avatarGustavo Pimentel <gustavo.pimentel@synopsys.com>
    668b4490
pcie-designware.h 13.3 KB