• H
    PCI: loongson: Improve the MRRS quirk for LS7A · 81e3f828
    Huacai Chen 提交于
    LoongArch inclusion
    category: feature
    bugzilla: https://gitee.com/openeuler/kernel/issues/I5OHOB
    
    --------------------------------
    
    In new revision of LS7A, some PCIe ports support larger value than 256,
    but their maximum supported MRRS values are not detectable. Moreover,
    the current loongson_mrrs_quirk() cannot avoid devices increasing its
    MRRS after pci_enable_device(), and some devices (e.g. Realtek 8169)
    will actually set a big value in its driver. So the only possible way
    is configure MRRS of all devices in BIOS, and add a pci host bridge bit
    flag (i.e., no_inc_mrrs) to stop the increasing MRRS operations.
    
    However, according to PCIe Spec, it is legal for an OS to program any
    value for MRRS, and it is also legal for an endpoint to generate a Read
    Request with any size up to its MRRS. As the hardware engineers say, the
    root cause here is LS7A doesn't break up large read requests. In detail,
    LS7A PCIe port reports CA (Completer Abort) if it receives a Memory Read
    request with a size that's "too big" ("too big" means larger than the
    PCIe ports can handle, which means 256 for some ports and 4096 for the
    others, and of course this is a problem in the LS7A's hardware design).
    Signed-off-by: NHuacai Chen <chenhuacai@loongson.cn>
    81e3f828
pci.h 87.5 KB