• Kishon Vijay Abraham I's avatar
    PCI: endpoint: Add support to specify alignment for buffers allocated to BARs · 2a9a8016
    Kishon Vijay Abraham I authored
    The address that is allocated using pci_epf_alloc_space() is
    directly written to the target address of the Inbound Address
    Translation unit (ie the HW component implementing inbound address
    decoding) on endpoint controllers.
    
    Designware IP [1] has a configuration parameter (CX_ATU_MIN_REGION_SIZE
    [2]) which has 64KB as default value and the lower 16 bits of the Base,
    Limit and Target registers of the Inbound ATU are fixed to zero. If the
    programmed memory address is not aligned to 64 KB boundary this causes
    memory corruption.
    
    Modify pci_epf_alloc_space() API to take alignment size as argument in
    order to allocate buffers to be mapped to BARs with an alignment that
    suits the platform where they are used.
    
    Add an 'align' parameter to epc_features which can be used by platform
    drivers to specify the BAR allocation alignment requirements and use
    this while invoking pci_epf_alloc_space().
    
    [1] "I/O and MEM Match Modes" section in DesignWare Cores PCI Express
         Controller Databook version 4.90a
    [2]  http://www.ti.com/lit/ug/spruid7c/spruid7c.pdfSigned-off-by: default avatarKishon Vijay Abraham I <kishon@ti.com>
    Signed-off-by: default avatarLorenzo Pieralisi <lorenzo.pieralisi@arm.com>
    2a9a8016
pci-epf-core.c 8.97 KB