From mboxrd@z Thu Jan 1 00:00:00 1970 From: wangzhou1@hisilicon.com (Zhou Wang) Date: Wed, 27 May 2015 21:24:40 +0800 Subject: [RFC PATCH v1 1/3] PCI: designware: Add ARM64 support In-Reply-To: <556428C9.9080202@st.com> References: <000001d096a9$27bf43f0$773dcbd0$@com> <5562F0C9.4090007@hisilicon.com> <000001d096f1$93dca4e0$bb95eea0$@com> <5563451B.4050609@st.com> <5563DF4F.4080601@hisilicon.com> <556428C9.9080202@st.com> Message-ID: <5565C598.7020809@hisilicon.com> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On 2015/5/26 16:03, Fabrice Gasnier wrote: > Hi zhou, > > On 05/26/2015 04:49 AM, Zhou Wang wrote: >>> struct pcie_port { >>> >+#ifdef CONFIG_ARM >>> >+ /* >>> >+ * this is a temporary hack to let the driver work on >>> >+ * both arm32 and arm64. it can be removed after the >>> >+ * arm32 cleanup is complete and bios32.c has stopped >>> >+ * referencing host->pci_sys_data. >>> >+ */ >>> >+ struct pci_sys_data dummy; >>> >+#endif >>> > struct device *dev; >>> > >>> > >>> >This looks like necessary as bios32 is dereferencing sysdata: >>> >struct pci_sys_data *sysdata = dev->bus->sysdata; >>> > >>> >Best Regards, >>> >Fabrice >>> > >> Hi Fabrice, >> >> Firstly, many thanks for your test:) >> >> I am a little confused that pci_sys_data is still needed as we don't use the code >> in bios32. What was the problem you met? Could you share me more information? Then >> let's see how to solve the problem. > > This is not completely true: there is still code in bios32 that requires pci_sys_data. Right. > No matters pci_common_init_dev() is being called or not : > > You can see pcibios_msi_controller() has a weak definition (in drivers/pci/msi.c). > But bios32 defines it for arm. Then it's being used. But here in dw_pcie_host_init, I directly set bus->msi = &dw_pcie_msi_chip. So in drivers/pci/msi.c, we will get the msi controller by dev->bus->msi in pci_msi_controller. It will not run into pcibios_msi_controller(). Maybe there is still something I miss understood, if so, please let me know. Best Regards, Zhou > So, basically, pci_sys_data is still needed on arm. This is how above workaround proposed by Arnd takes care of it. > Without this, dereferencing the pointer as done in bios32, makes it hazardous and lead to crashes... > e.g. in pcibios_msi_controller(), pci_sys_data will point to "dev->bus->sysdata", aka "struct device *dev" above. > > Best Regards, > Fabrice >> >> Thanks again and Best Regards, >> Zhou >> > > > . >