Hi Dilip, On Mon, Aug 26, 2019 at 8:42 AM Dilip Kota <eswara.kota@xxxxxxxxxxxxxxx> wrote: [...] > intel_pcie_port structure is having "struct dw_pcie" as mentioned below: > > struct intel_pcie_port { > struct dw_pcie *pci; > unsigned int id; /* Physical RC Index */ > void __iomem *app_base; > struct gpio_desc *reset_gpio; > [...] > }; > > Almost all the drivers are following the same way. I don't see any issue in this way. > Please help me with more description if you see an issue here. > > struct qcom_pcie { > struct dw_pcie *pci; > Ref: https://elixir.bootlin.com/linux/v5.3-rc6/source/drivers/pci/controller/dwc/pcie-qcom.c > > struct armada8k_pcie { > struct dw_pcie *pci; > Ref: https://elixir.bootlin.com/linux/v5.3-rc6/source/drivers/pci/controller/dwc/pcie-armada8k.c > > struct artpec6_pcie { > struct dw_pcie *pci; > Ref: https://elixir.bootlin.com/linux/v5.3-rc6/source/drivers/pci/controller/dwc/pcie-artpec6.c > > struct kirin_pcie { > struct dw_pcie *pci; > Ref: https://elixir.bootlin.com/linux/v5.3-rc6/source/drivers/pci/controller/dwc/pcie-kirin.c > > struct spear13xx_pcie { > struct dw_pcie *pci; > Ref: https://elixir.bootlin.com/linux/v5.3-rc6/source/drivers/pci/controller/dwc/pcie-spear13xx.c thank you for this detailed list. it seems that I picked the minority of drivers as "reference" where it's implemented differently: first example: pci-meson struct meson_pcie { struct dw_pcie pci; ... }; second example: pcie-tegra194 (only in -next, will be part of v5.4) struct tegra_pcie_dw { ... struct dw_pcie pci; ... }; so some drivers store a pointer pointer to the dw_pcie struct vs. embedding the dw_pcie struct directly. as far as I know the result will be equal, except that you don't have to use a second devm_kzalloc for struct dw_pcie (and thus reducing memory fragmentation). Martin