Skip to content
  • David VomLehn's avatar
    MIPS: PowerTV: Use O(1) algorthm for phys_to_dma/dma_to_phys · ca36c36b
    David VomLehn authored
    
    
    Replace phys_to_dma()/dma_to_phys() looping algorithm with an O(1) algorithm
    The approach taken is inspired by the sparse memory implementation: take a
    certain number of high-order bits off the address them, use this as an
    index into a table containing an offset to the desired address and add
    it to the original value. There is a table for mapping physical addresses
    to DMA addresses and another one for the reverse mapping. The table sizes
    depend on how fine-grained the mappings need to be; Coarser granularity
    less to smaller tables.  On a processor with 32-bit physical and DMA
    addresses, with 4 MIB granularity, memory usage is two 2048-byte arrays.
    Each 32-byte cache line thus covers 64 MiB of address space.
    
    Also, renames phys_to_bus() to phys_to_dma() and bus_to_phys() to
    dma_to_phys() to align with kernel usage.
    
    [Ralf: Fixed silly build breakage due to stackoverflow warning caused by
    huge array on stack.]
    
    Signed-off-by: default avatarDavid VomLehn <dvomlehn@cisco.com>
    To: linux-mips@linux-mips.org
    Patchwork: https://patchwork.linux-mips.org/patch/1257/
    
    
    Signed-off-by: default avatarRalf Baechle <ralf@linux-mips.org>
    ca36c36b