Re: [PATCH 1/3] ARM: mvebu: fix HW I/O coherency related deadlocks

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Thomas,
 
 On jeu., juin 16 2016, Thomas Petazzoni <thomas.petazzoni@xxxxxxxxxxxxxxxxxx> wrote:

> Until now, our understanding for HW I/O coherency to work on the
> Cortex-A9 based Marvell SoC was that only the PCIe regions should be
> mapped strongly-ordered. However, we were still encountering some
> deadlocks, especially when testing the CESA crypto engine. After
> checking with the HW designers, it was concluded that all the MMIO
> registers should be mapped as strongly ordered for the HW I/O coherency
> mechanism to work properly.
>
> This fixes some easy to reproduce deadlocks with the CESA crypto engine
> driver (dmcrypt on a sufficiently large disk partition).
>
> Tested-by: Terry Stockert <stockert@xxxxxxxxxxxxxxxxx>
> Tested-by: Romain Perier <romain.perier@xxxxxxxxxxxxxxxxxx>
> Cc: Terry Stockert <stockert@xxxxxxxxxxxxxxxxx>
> Cc: Romain Perier <romain.perier@xxxxxxxxxxxxxxxxxx>
> Cc: <stable@xxxxxxxxxxxxxxx>
> Signed-off-by: Thomas Petazzoni <thomas.petazzoni@xxxxxxxxxxxxxxxxxx>

Applied on mvebu/fixes

Thanks,

Gregory


> ---
>  arch/arm/mach-mvebu/coherency.c | 22 ++++++++--------------
>  1 file changed, 8 insertions(+), 14 deletions(-)
>
> diff --git a/arch/arm/mach-mvebu/coherency.c b/arch/arm/mach-mvebu/coherency.c
> index 7e989d6..474abff 100644
> --- a/arch/arm/mach-mvebu/coherency.c
> +++ b/arch/arm/mach-mvebu/coherency.c
> @@ -162,22 +162,16 @@ exit:
>  }
>  
>  /*
> - * This ioremap hook is used on Armada 375/38x to ensure that PCIe
> - * memory areas are mapped as MT_UNCACHED instead of MT_DEVICE. This
> - * is needed as a workaround for a deadlock issue between the PCIe
> - * interface and the cache controller.
> + * This ioremap hook is used on Armada 375/38x to ensure that all MMIO
> + * areas are mapped as MT_UNCACHED instead of MT_DEVICE. This is
> + * needed for the HW I/O coherency mechanism to work properly without
> + * deadlock.
>   */
>  static void __iomem *
> -armada_pcie_wa_ioremap_caller(phys_addr_t phys_addr, size_t size,
> -			      unsigned int mtype, void *caller)
> +armada_wa_ioremap_caller(phys_addr_t phys_addr, size_t size,
> +			 unsigned int mtype, void *caller)
>  {
> -	struct resource pcie_mem;
> -
> -	mvebu_mbus_get_pcie_mem_aperture(&pcie_mem);
> -
> -	if (pcie_mem.start <= phys_addr && (phys_addr + size) <= pcie_mem.end)
> -		mtype = MT_UNCACHED;
> -
> +	mtype = MT_UNCACHED;
>  	return __arm_ioremap_caller(phys_addr, size, mtype, caller);
>  }
>  
> @@ -186,7 +180,7 @@ static void __init armada_375_380_coherency_init(struct device_node *np)
>  	struct device_node *cache_dn;
>  
>  	coherency_cpu_base = of_iomap(np, 0);
> -	arch_ioremap_caller = armada_pcie_wa_ioremap_caller;
> +	arch_ioremap_caller = armada_wa_ioremap_caller;
>  
>  	/*
>  	 * We should switch the PL310 to I/O coherency mode only if
> -- 
> 2.7.4
>

-- 
Gregory Clement, Free Electrons
Kernel, drivers, real-time and embedded Linux
development, consulting, training and support.
http://free-electrons.com
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]