Subject: [PATCH V8 2/9] PCI: ecam: Add parent device field to pci_config_window

From: [email-masked] (Lorenzo Pieralisi)
Date: Thu, 2 Jun 2016 11:13:56 +0100

On Mon, May 30, 2016 at 05:14:15PM +0200, Tomasz Nowicki wrote:
> From: Jayachandran C <[email-masked]>
> 
> Add a parent device field to struct pci_config_window. The parent
> is not saved now, but will be useful to save it in some cases.
> Specifically in case of ACPI for ARM64, it can be used to setup
> ACPI companion and domain.
> 
> Since the parent dev is in struct pci_config_window now, we need
> not pass it to he init function as a separate argument.

Nit: "the init function"

> Signed-off-by: Jayachandran C <[email-masked]>
> ---
>  drivers/pci/ecam.c                 | 3 ++-
>  drivers/pci/host/pci-thunder-pem.c | 3 ++-
>  include/linux/pci-ecam.h           | 4 ++--
>  3 files changed, 6 insertions(+), 4 deletions(-)

Acked-by: Lorenzo Pieralisi <[email-masked]>

> diff --git a/drivers/pci/ecam.c b/drivers/pci/ecam.c
> index 820e26b..66e0d71 100644
> --- a/drivers/pci/ecam.c
> +++ b/drivers/pci/ecam.c
> @@ -51,6 +51,7 @@ struct pci_config_window *pci_ecam_create(struct device *dev,
>  	if (!cfg)
>  		return ERR_PTR(-ENOMEM);
>  
> +	cfg->parent = dev;
>  	cfg->ops = ops;
>  	cfg->busr.start = busr->start;
>  	cfg->busr.end = busr->end;
> @@ -94,7 +95,7 @@ struct pci_config_window *pci_ecam_create(struct device *dev,
>  	}
>  
>  	if (ops->init) {
> -		err = ops->init(dev, cfg);
> +		err = ops->init(cfg);
>  		if (err)
>  			goto err_exit;
>  	}
> diff --git a/drivers/pci/host/pci-thunder-pem.c b/drivers/pci/host/pci-thunder-pem.c
> index 5020d3d..91f6fc6 100644
> --- a/drivers/pci/host/pci-thunder-pem.c
> +++ b/drivers/pci/host/pci-thunder-pem.c
> @@ -284,8 +284,9 @@ static int thunder_pem_config_write(struct pci_bus *bus, unsigned int devfn,
>  	return pci_generic_config_write(bus, devfn, where, size, val);
>  }
>  
> -static int thunder_pem_init(struct device *dev, struct pci_config_window *cfg)
> +static int thunder_pem_init(struct pci_config_window *cfg)
>  {
> +	struct device *dev = cfg->parent;
>  	resource_size_t bar4_start;
>  	struct resource *res_pem;
>  	struct thunder_pem_pci *pem_pci;
> diff --git a/include/linux/pci-ecam.h b/include/linux/pci-ecam.h
> index 9878beb..7adad20 100644
> --- a/include/linux/pci-ecam.h
> +++ b/include/linux/pci-ecam.h
> @@ -27,8 +27,7 @@ struct pci_config_window;
>  struct pci_ecam_ops {
>  	unsigned int			bus_shift;
>  	struct pci_ops			pci_ops;
> -	int				(*init)(struct device *,
> -						struct pci_config_window *);
> +	int				(*init)(struct pci_config_window *);
>  };
>  
>  /*
> @@ -45,6 +44,7 @@ struct pci_config_window {
>  		void __iomem		*win;	/* 64-bit single mapping */
>  		void __iomem		**winp; /* 32-bit per-bus mapping */
>  	};
> +	struct device			*parent;/* ECAM res was from this dev */
>  };
>  
>  /* create and free pci_config_window */
> -- 
> 1.9.1
>