On Fri, Mar 01, 2019 at 10:22:16AM +0530, Srinath Mannam wrote:
> In the present driver outbound window configuration is done to map above
> 32-bit address I/O regions with corresponding PCI memory range given in
> ranges DT property.
> 
> This patch add outbound window configuration to map below 32-bit I/O range
> with corresponding PCI memory, which helps to access I/O region in ARM
> 32-bit and one to one mapping of I/O region to PCI memory.
> 
> Ex:
> 1. ranges DT property given for current driver is,
>     ranges = <0x83000000 0x0 0x40000000 0x4 0x00000000 0 0x40000000>;
>     I/O region address is 0x400000000
> 2. ranges DT property can be given after this patch,
>     ranges = <0x83000000 0x0 0x42000000 0x0 0x42000000 0 0x2000000>;
>     I/O region address is 0x42000000

I was applying this patch but I don't understand the commit log and
how it matches the code, please explain it to me and I will reword
it.

Thanks,
Lorenzo

> Signed-off-by: Srinath Mannam <[email protected]>
> Signed-off-by: Abhishek Shah <[email protected]>
> Signed-off-by: Ray Jui <[email protected]>
> ---
>  drivers/pci/controller/pcie-iproc.c | 21 +++++++++++++++++++--
>  1 file changed, 19 insertions(+), 2 deletions(-)
> 
> diff --git a/drivers/pci/controller/pcie-iproc.c 
> b/drivers/pci/controller/pcie-iproc.c
> index b882255..080f142 100644
> --- a/drivers/pci/controller/pcie-iproc.c
> +++ b/drivers/pci/controller/pcie-iproc.c
> @@ -955,8 +955,25 @@ static int iproc_pcie_setup_ob(struct iproc_pcie *pcie, 
> u64 axi_addr,
>                       resource_size_t window_size =
>                               ob_map->window_sizes[size_idx] * SZ_1M;
>  
> -                     if (size < window_size)
> -                             continue;
> +                     /*
> +                      * Keep iterating until we reach the last window and
> +                      * with the minimal window size at index zero. In this
> +                      * case, we take a compromise by mapping it using the
> +                      * minimum window size that can be supported
> +                      */
> +                     if (size < window_size) {
> +                             if (size_idx > 0 || window_idx > 0)
> +                                     continue;
> +
> +                             /*
> +                              * For the corner case of reaching the minimal
> +                              * window size that can be supported on the
> +                              * last window
> +                              */
> +                             axi_addr = ALIGN_DOWN(axi_addr, window_size);
> +                             pci_addr = ALIGN_DOWN(pci_addr, window_size);
> +                             size = window_size;
> +                     }
>  
>                       if (!IS_ALIGNED(axi_addr, window_size) ||
>                           !IS_ALIGNED(pci_addr, window_size)) {
> -- 
> 2.7.4
> 

Reply via email to