• Sowjanya Komatineni's avatar
    i2c: tegra: Add DMA support · 86c92b99
    Sowjanya Komatineni authored
    This patch adds DMA support for Tegra I2C.
    
    Tegra I2C TX and RX FIFO depth is 8 words. PIO mode is used for
    transfer size of the max FIFO depth and DMA mode is used for
    transfer size higher than max FIFO depth to save CPU overhead.
    
    PIO mode needs full intervention of CPU to fill or empty FIFO's
    and also need to service multiple data requests interrupt for the
    same transaction. This adds delay between data bytes of the same
    transfer when CPU is fully loaded and some slave devices has
    internal timeout for no bus activity and stops transaction to
    avoid bus hang. DMA mode is helpful in such cases.
    
    DMA mode is also helpful for Large transfers during downloading or
    uploading FW over I2C to some external devices.
    
    Tegra210 and prior Tegra chips use APBDMA driver which is replaced
    with GPCDMA on Tegra186 and Tegra194.
    This patch uses has_apb_dma flag in hw_feature to differentiate
    DMA driver change between Tegra chipset.
    
    APBDMA driver is registered from module-init level and this patch
    also has a change to register I2C driver at module-init level
    rather than subsys-init to avoid deferring I2C probe till APBDMA
    driver is registered.
    Acked-by: default avatarThierry Reding <treding@nvidia.com>
    Reviewed-by: default avatarDmitry Osipenko <digetx@gmail.com>
    Tested-by: default avatarDmitry Osipenko <digetx@gmail.com>
    Signed-off-by: default avatarSowjanya Komatineni <skomatineni@nvidia.com>
    Signed-off-by: default avatarWolfram Sang <wsa@the-dreams.de>
    86c92b99
i2c-tegra.c 43.1 KB