04 Sep, 2013

1 commit


07 Aug, 2013

4 commits

  • The code incorrectly masked with PAGE_OFFSET instead of
    PAGE_SIZE-1. This only matters when trying to do a
    non page-aligned DMA; it was noticed during code inspection.

    Signed-off-by: Chris Metcalf

    Chris Metcalf
     
  • The standard kernel function dma_get_required_mask() uses the
    highest DRAM address to determine if 32-bit or 64-bit DMA addressing
    is needed. This only works on architectures that have direct mapping
    between the PA and the PCI address space, i.e. those that don't have
    I/O TLBs or have I/O TLB but choose to use direct mapping. Neither
    of these are true for tilegx. Whether to use 64-bit DMA should depend
    on the PCI device's capability only, not on the amount of DRAM
    installeds, so we now advertise a 64-bit DMA mask unconditionally.

    Signed-off-by: Chris Metcalf

    Chris Metcalf
     
  • Signed-off-by: Chris Metcalf

    Chris Metcalf
     
  • The LSI MEGARAID SAS HBA suffers from the problem where it can do
    64-bit DMA to streaming buffers but not to consistent buffers.
    In other words, 64-bit DMA is used for disk data transfers and 32-bit
    DMA must be used for control message transfers. According to LSI,
    the firmware is not fully functional yet. This change implements a
    kind of hybrid dma_ops to support this.

    Note that on most other platforms, the 64-bit DMA addressing space is the
    same as the 32-bit DMA space and they overlap the physical memory space.
    No special arrangement is needed to support this kind of mixed DMA
    capability. On TILE-Gx, the 64-bit DMA space is completely separate
    from the 32-bit DMA space. Due to the use of the IOMMU, the 64-bit DMA
    space doesn't overlap the physical memory space. On the other hand,
    the 32-bit DMA space overlaps the physical memory space under 4GB.
    The separate address spaces make it necessary to have separate dma_ops.

    Signed-off-by: Chris Metcalf

    Chris Metcalf
     

19 Jul, 2012

3 commits

  • This change uses the TRIO IOMMU to map the PCI DMA space and physical
    memory at different addresses. We also now use the dma_mapping_ops
    to provide support for non-PCI DMA, PCIe DMA (64-bit) and legacy PCI
    DMA (32-bit). We use the kernel's software I/O TLB framework
    (i.e. bounce buffers) for the legacy 32-bit PCI device support since
    there are a limited number of TLB entries in the IOMMU and it is
    non-trivial to handle indexing, searching, matching, etc. For 32-bit
    devices the performance impact of bounce buffers should not be a concern.

    Signed-off-by: Chris Metcalf

    Chris Metcalf
     
  • This is required for PCI root complex legacy support and USB OHCI root
    complex support. With this change tilegx now supports allocating memory
    whose PA fits in 32 bits.

    Signed-off-by: Chris Metcalf

    Chris Metcalf
     
  • The tilegx PCI root complex support (currently only in linux-next)
    is limited to pages that are homed on cached in the default manner,
    i.e. "hash-for-home". This change supports delivery of I/O data to
    pages that are cached in other ways (locally on a particular core,
    uncached, user-managed incoherent, etc.).

    A large part of the change is supporting flushing pages from cache
    on particular homes so that we can transition the data that we are
    delivering to or from the device appropriately. The new homecache_finv*
    routines handle this.

    Some changes to page_table_range_init() were also required to make
    the fixmap code work correctly on tilegx; it hadn't been used there
    before.

    We also remove some stub mark_caches_evicted_*() routines that
    were just no-ops anyway.

    Signed-off-by: Chris Metcalf

    Chris Metcalf
     

04 Dec, 2011

1 commit


05 May, 2011

1 commit

  • Since v2.6.20 "Pass struct dev pointer to dma_cache_sync()"
    (d3fa72e4556ec1f04e46a0d561d9e785ecaa173d), dma_cache_sync() takes a
    struct dev pointer, but these appear to be missing from the tile and
    mn10300 implementations, so add them.

    Signed-off-by: James Hogan
    [cmetcalf@tilera.com: took only the "tile" portion as I don't maintain mn10300]
    Signed-off-by: Chris Metcalf

    James Hogan
     

11 Mar, 2011

1 commit

  • The Tilera architecture traditionally supports 64KB page sizes
    to improve TLB utilization and improve performance when the
    hardware is being used primarily to run a single application.

    For more generic server scenarios, it can be beneficial to run
    with 4KB page sizes, so this commit allows that to be specified
    (by modifying the arch/tile/include/hv/pagesize.h header).

    As part of this change, we also re-worked the PTE management
    slightly so that PTE writes all go through a __set_pte() function
    where we can do some additional validation. The set_pte_order()
    function was eliminated since the "order" argument wasn't being used.

    One bug uncovered was in the PCI DMA code, which wasn't properly
    flushing the specified range. This was benign with 64KB pages,
    but with 4KB pages we were getting some larger flushes wrong.

    The per-cpu memory reservation code also needed updating to
    conform with the newer percpu stuff; before it always chose 64KB,
    and that was always correct, but with 4KB granularity we now have
    to pay closer attention and reserve the amount of memory that will
    be requested when the percpu code starts allocating.

    Signed-off-by: Chris Metcalf

    Chris Metcalf
     

05 Jun, 2010

2 commits