Re: [PATCH v3] PCI: loongson: Use DECLARE_PCI_FIXUP_EARLY for bridge_class_quirk()

From: Tiezhu Yang
Date: Wed Jul 15 2020 - 22:37:41 EST


On 07/16/2020 10:21 AM, Huacai Chen wrote:
Hi, Tiezhu,

You don't need to use the lower case in the title, "Loongson" is just
fine (and is recommended).

Hi Huacai,

Thanks for your reply.

In the first version of this patch, I received the following reply by Bjorn:

[Subject line:

PCI: loongson: Use DECLARE_PCI_FIXUP_EARLY for bridge_class_quirk()

(Driver names are conventionally lower case.)

Lorenzo will probably silently fix this when applying, so this is
mostly just a reminder in case you need to revise this or for future
patches.]

https://lore.kernel.org/patchwork/patch/1254407/

I also checked the git log of drivers/pci/controller:

[yangtiezhu@linux linux.git]$ git log --oneline drivers/pci/controller | grep "PCI:" | head
8d7e33d PCI: uniphier: Add Socionext UniPhier Pro5 PCIe endpoint controller driver
fcee90c PCI: tegra: Fix runtime PM imbalance on error
3e5095e PCI: vmd: Filter resource type bits from shadow register
1c1dbb2 PCI: tegra194: Fix runtime PM imbalance on error
d0684fd0 PCI: hv: Use struct_size() helper
1f58cca PCI: Add Loongson PCI Controller support
03f8c1b3 PCI: dwc: Use private data pointer of "struct irq_domain" to get pcie_port
87dccf0 PCI: amlogic: meson: Don't use FAST_LINK_MODE to set up link
0414b93 PCI: dwc: Fix inner MSI IRQ domain registration
c8a1197 PCI: dwc: pci-dra7xx: Use devm_platform_ioremap_resource_byname()

So use lower case "loongson" may be proper here.

Thanks,
Tiezhu


On Thu, Jul 16, 2020 at 10:19 AM Tiezhu Yang <yangtiezhu@xxxxxxxxxxx> wrote:
According to the datasheet of Loongson LS7A bridge chip, the old version
of Loongson LS7A PCIE port has a hardware bug about PCI class. As far as
I know, the latest version has already fixed this bug.

In order to maintain downward compatibility, use DECLARE_PCI_FIXUP_EARLY
instead of DECLARE_PCI_FIXUP_HEADER for bridge_class_quirk() to fix it as
early as possible.

Otherwise, in the function pci_setup_device(), the related code about
"dev->class" such as "class = dev->class >> 8;" and "dev->transparent
= ((dev->class & 0xff) == 1);" maybe get wrong value due to without
EARLY fixup.

By the way, we can see that the PCI class fixup of other controllers are
all EARLY fixups:

[root@linux linux.git]# grep -rn -A 3 "PCI_CLASS_BRIDGE_PCI << 8" drivers/pci/controller/ | grep EARLY
drivers/pci/controller/pcie-tango.c-327-DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SIGMA, 0x0024, tango_fixup_class);
drivers/pci/controller/pcie-tango.c-328-DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_SIGMA, 0x0028, tango_fixup_class);
drivers/pci/controller/pci-tegra.c-775-DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_NVIDIA, 0x0bf0, tegra_pcie_fixup_class);
drivers/pci/controller/pci-tegra.c-776-DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_NVIDIA, 0x0bf1, tegra_pcie_fixup_class);
drivers/pci/controller/dwc/pcie-qcom.c-1442-DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_QCOM, 0x0101, qcom_fixup_class);
drivers/pci/controller/dwc/pcie-qcom.c-1443-DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_QCOM, 0x0104, qcom_fixup_class);
drivers/pci/controller/pcie-iproc-bcma.c-23-DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_BROADCOM, 0x8011, bcma_pcie2_fixup_class);
drivers/pci/controller/pcie-iproc-bcma.c-24-DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_BROADCOM, 0x8012, bcma_pcie2_fixup_class);

Fixes: 1f58cca5cf2b ("PCI: Add Loongson PCI Controller support")
Signed-off-by: Tiezhu Yang <yangtiezhu@xxxxxxxxxxx>
---

v2: Modify the patch subject used with lower case "loongson"

v3: Update the commit message

drivers/pci/controller/pci-loongson.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/pci/controller/pci-loongson.c b/drivers/pci/controller/pci-loongson.c
index 459009c..58b862a 100644
--- a/drivers/pci/controller/pci-loongson.c
+++ b/drivers/pci/controller/pci-loongson.c
@@ -37,11 +37,11 @@ static void bridge_class_quirk(struct pci_dev *dev)
{
dev->class = PCI_CLASS_BRIDGE_PCI << 8;
}
-DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_LOONGSON,
+DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_LOONGSON,
DEV_PCIE_PORT_0, bridge_class_quirk);
-DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_LOONGSON,
+DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_LOONGSON,
DEV_PCIE_PORT_1, bridge_class_quirk);
-DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_LOONGSON,
+DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_LOONGSON,
DEV_PCIE_PORT_2, bridge_class_quirk);

static void system_bus_quirk(struct pci_dev *pdev)
--
2.1.0