From: Yoshinori Sato <ysato@users.sourceforge.jp>
To: Geert Uytterhoeven <geert@linux-m68k.org>
Cc: linux-sh@vger.kernel.org, glaubitz@physik.fu-berlin.de,
linux-pci@vger.kernel.org
Subject: Re: [RFC PATCH v2 07/30] drivers/pci: SH7751 PCI Host bridge controller driver.
Date: Wed, 20 Sep 2023 21:15:59 +0900 [thread overview]
Message-ID: <87sf79t4zk.wl-ysato@users.sourceforge.jp> (raw)
In-Reply-To: <CAMuHMdX0enQeLcLO6hmKFXqMeZVfoT0qrz3XTCWuUUTWwS-vHw@mail.gmail.com>
On Tue, 19 Sep 2023 00:32:46 +0900,
Geert Uytterhoeven wrote:
>
> Hi Sato-san,
>
> On Wed, Sep 13, 2023 at 11:35 AM Yoshinori Sato
> <ysato@users.sourceforge.jp> wrote:
> > Signed-off-by: Yoshinori Sato <ysato@users.sourceforge.jp>
>
> Thanks for your patch!
>
> > --- /dev/null
> > +++ b/drivers/pci/controller/pci-sh7751.c
> > @@ -0,0 +1,338 @@
> > +// SPDX-License-Identifier: GPL-2.0
> > +/*
> > + * SH7751 PCI driver
> > + * Copyright (C) 2023 Yoshinori Sato
> > + *
> > + */
> > +
> > +#include <linux/kernel.h>
> > +#include <linux/module.h>
> > +#include <linux/of_address.h>
> > +#include <linux/of_pci.h>
> > +#include <linux/of_platform.h>
> > +#include <linux/pci-ecam.h>
> > +#include <linux/platform_device.h>
> > +#include <linux/io.h>
> > +#include <asm-generic/pci.h>
> > +#include "pci-sh7751.h"
> > +
> > +#define pcic_writel(val, reg) __raw_writel(val, pci_reg_base + (reg))
> > +#define pcic_readl(reg) __raw_readl(pci_reg_base + (reg))
> > +
> > +DEFINE_RAW_SPINLOCK(pci_config_lock);
> > +
> > +/*
> > + * PCIC fixups
> > + */
> > +
> > +#define PCIMCR_MRSET 0x40000000
> > +#define PCIMCR_RFSH 0x00000004
> > +
> > +/* board depend PCI bus fixups */
> > +static void __init julian_fixup(void __iomem *pci_reg_base, void __iomem *bcr)
>
> Please drop all the __init* annotations.
> Although I no longer see invalid section warnings, all symbols tagged
> with __init* are still referenced from sh7751_pci_probe(), eventually.
>
> > +{
> > + unsigned long bcr1, mcr;
> > +
> > + bcr1 = __raw_readl(bcr + SH7751_BCR1);
> > + bcr1 |= 0x00080000; /* Enable Bit 19 BREQEN, set PCIC to slave */
> > + pcic_writel(bcr1, SH4_PCIBCR1);
> > +
> > + mcr = __raw_readl(bcr + SH7751_MCR);
> > + mcr &= (~PCIMCR_MRSET) & (~PCIMCR_RFSH);
> > + pcic_writel(mcr, SH4_PCIMCR);
> > +
> > + pcic_writel(0x0c000000, SH7751_PCICONF5);
> > + pcic_writel(0xd0000000, SH7751_PCICONF6);
> > + pcic_writel(0x0c000000, SH4_PCILAR0);
> > + pcic_writel(0x00000000, SH4_PCILAR1);
> > +}
> > +
> > +static void __init r2d_fixup(void __iomem *pci_reg_base, void __iomem *bcr)
> > +{
> > + unsigned long bcr1, mcr;
> > +
> > + bcr1 = ioread32(bcr + SH7751_BCR1);
> > + bcr1 |= 0x40080000; /* Enable Bit 19 BREQEN, set PCIC to slave */
> > + pcic_writel(bcr1, SH4_PCIBCR1);
> > +
> > + /* Enable all interrupts, so we known what to fix */
> > + pcic_writel(0x0000c3ff, SH4_PCIINTM);
> > + pcic_writel(0x0000380f, SH4_PCIAINTM);
> > +
> > + pcic_writel(0xfb900047, SH7751_PCICONF1);
> > + pcic_writel(0xab000001, SH7751_PCICONF4);
> > +
> > + mcr = ioread32(bcr + SH7751_MCR);
> > + mcr &= (~PCIMCR_MRSET) & (~PCIMCR_RFSH);
> > + pcic_writel(mcr, SH4_PCIMCR);
> > +
> > + pcic_writel(0x0c000000, SH7751_PCICONF5);
> > + pcic_writel(0xd0000000, SH7751_PCICONF6);
> > + pcic_writel(0x0c000000, SH4_PCILAR0);
> > + pcic_writel(0x00000000, SH4_PCILAR1);
> > +}
> > +
> > +static const __initconst struct fixups {
> > + char *compatible;
> > + void (*fixup)(void __iomem *pci_reg_base, void __iomem *bcr);
> > +} fixup_list[] = {
> > + {
> > + .compatible = "iodata,julian-pci",
> > + .fixup = julian_fixup,
> > + },
> > + {
> > + .compatible = "renesas,r2d-pci",
> > + .fixup = r2d_fixup,
> > + },
> > +};
>
> These fixups seem to be board-specific instead of specific to the
> PCI block in the SoCs on these boards.
>
> I see three options to handle this in a more appropriate way:
> 1. Handle this in the bootloader.
> Not an attractive solution, as not everyone can/wants to update
> the bootloader,
> 2. Use of_machine_is_compatible() in a platform-specific quirk
> handler, outside the PCI driver,
> 3. Move the common parts into sh7751_pci_probe(), and the
> handle the differences through DT topology analysis and/or
> properties in DT.
I think the bootloader is not initialized on targets that do not use
a PCI device for booting.
I think it's better to use option 2 or 3.
I looked at the current fixup, but the only difference is the PCIC setting,
so I will try plan 3.
> Gr{oetje,eeting}s,
>
> Geert
>
> --
> Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org
>
> In personal conversations with technical people, I call myself a hacker. But
> when I'm talking to journalists I just say "programmer" or something like that.
> -- Linus Torvalds
--
Yosinori Sato
next prev parent reply other threads:[~2023-09-20 12:16 UTC|newest]
Thread overview: 83+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-13 9:23 [RFC PATCH v2 00/30] Device Tree support for SH7751 based board Yoshinori Sato
2023-09-13 9:23 ` [RFC PATCH v2 01/30] arch/sh: head_32.S passing FDT address to initialize function Yoshinori Sato
2023-09-18 15:16 ` Geert Uytterhoeven
2023-09-13 9:23 ` [RFC PATCH v2 02/30] arch/sh: boards/Kconfig unified OF supported targets Yoshinori Sato
2023-09-18 15:05 ` Geert Uytterhoeven
2023-09-13 9:23 ` [RFC PATCH v2 03/30] arch/sh: Disable SH specific drivers in OF enabled Yoshinori Sato
2023-09-18 15:14 ` Geert Uytterhoeven
2023-09-13 9:23 ` [RFC PATCH v2 04/30] include: sh_intc.h Add stub function "intc_finalize" Yoshinori Sato
2023-09-18 15:16 ` Geert Uytterhoeven
2023-09-13 9:23 ` [RFC PATCH v2 05/30] arch/sh: setup.c update DeviceTree support Yoshinori Sato
2023-09-13 9:23 ` [RFC PATCH v2 06/30] drivers/pci: SH7751 PCI Host bridge header Yoshinori Sato
2023-09-18 19:16 ` Bjorn Helgaas
2023-09-13 9:23 ` [RFC PATCH v2 07/30] drivers/pci: SH7751 PCI Host bridge controller driver Yoshinori Sato
2023-09-18 15:32 ` Geert Uytterhoeven
2023-09-20 12:15 ` Yoshinori Sato [this message]
2023-09-18 19:30 ` Bjorn Helgaas
2023-09-13 9:23 ` [RFC PATCH v2 08/30] drivers/pci: Add SH7751 Host bridge controller Yoshinori Sato
2023-09-18 15:34 ` Geert Uytterhoeven
2023-09-18 19:33 ` Bjorn Helgaas
2023-10-12 7:16 ` Geert Uytterhoeven
2023-09-13 9:23 ` [RFC PATCH v2 09/30] Documentation/devicetree: Add renesas,sh7751-pci binding document Yoshinori Sato
2023-09-13 10:42 ` Krzysztof Kozlowski
2023-09-18 15:41 ` Geert Uytterhoeven
2023-09-13 9:23 ` [RFC PATCH v2 10/30] drivers/clk: SH7750 / SH7751 CPG Driver Yoshinori Sato
2023-09-13 10:43 ` Krzysztof Kozlowski
2023-09-18 16:05 ` Geert Uytterhoeven
2023-09-13 9:23 ` [RFC PATCH v2 11/30] drivers/clk: SuperH generai clock divider helper Yoshinori Sato
2023-09-18 18:59 ` Geert Uytterhoeven
2023-09-13 9:23 ` [RFC PATCH v2 12/30] drivers/clk: Add SH7750 CPG drivers entry Yoshinori Sato
2023-09-18 19:05 ` Geert Uytterhoeven
2023-09-13 9:23 ` [RFC PATCH v2 13/30] Documentation/devicetree: Add renesas,sh7751-cpg binding document Yoshinori Sato
2023-09-13 10:44 ` Krzysztof Kozlowski
2023-09-18 19:21 ` Geert Uytterhoeven
2023-10-03 9:16 ` Geert Uytterhoeven
2023-09-13 9:23 ` [RFC PATCH v2 14/30] drivers/irqchip: Add SH7751 Internal INTC drivers Yoshinori Sato
2023-09-19 11:50 ` Geert Uytterhoeven
2023-09-22 10:12 ` Yoshinori Sato
2023-09-25 7:38 ` Geert Uytterhoeven
2023-09-30 15:14 ` Yoshinori Sato
2023-09-13 9:23 ` [RFC PATCH v2 15/30] Documentation/devicetree: Add renesas,sh7751-intc binding document Yoshinori Sato
2023-09-13 10:44 ` Krzysztof Kozlowski
2023-09-19 11:56 ` Geert Uytterhoeven
2023-09-13 9:23 ` [RFC PATCH v2 16/30] drivers/irqchip: SH7751 IRL external encoder with enable gate Yoshinori Sato
2023-09-19 12:10 ` Geert Uytterhoeven
2023-09-13 9:23 ` [RFC PATCH v2 17/30] Documentation/devicetree: Add renesas,sh7751-irl-ext binding document Yoshinori Sato
2023-09-13 10:45 ` Krzysztof Kozlowski
2023-09-19 12:08 ` Geert Uytterhoeven
2023-09-13 9:23 ` [RFC PATCH v2 18/30] drivers/clocksource: sh_tmu clocks property support Yoshinori Sato
2023-09-19 12:15 ` Geert Uytterhoeven
2023-09-13 9:23 ` [RFC PATCH v2 19/30] drivers/tty: sh-sci fix SH4 OF support Yoshinori Sato
2023-09-19 12:25 ` Geert Uytterhoeven
2023-10-02 12:56 ` Yoshinori Sato
2023-09-13 9:23 ` [RFC PATCH v2 20/30] drivers/mfd: sm501 add some properties Yoshinori Sato
2023-09-20 12:25 ` Lee Jones
2023-09-13 9:23 ` [RFC PATCH v2 21/30] Documentation/devicetree: sm501fb add properies Yoshinori Sato
2023-09-13 10:45 ` Krzysztof Kozlowski
2023-09-13 9:23 ` [RFC PATCH v2 22/30] arch/sh: Add dtbs target support Yoshinori Sato
2023-09-19 12:28 ` Geert Uytterhoeven
2023-09-13 9:23 ` [RFC PATCH v2 23/30] arch/sh: Add SH7751 SoC Internal periphreal devicetree Yoshinori Sato
2023-09-13 10:49 ` Krzysztof Kozlowski
2023-09-19 12:41 ` Geert Uytterhoeven
2023-09-19 13:11 ` Geert Uytterhoeven
2023-09-13 9:23 ` [RFC PATCH v2 24/30] include/dt-bindings: Add SH7750 CPG header Yoshinori Sato
2023-09-13 10:46 ` Krzysztof Kozlowski
2023-09-19 12:43 ` Geert Uytterhoeven
2023-09-20 11:52 ` Krzysztof Kozlowski
2023-09-19 12:46 ` Geert Uytterhoeven
2023-09-13 9:23 ` [RFC PATCH v2 25/30] include/dt-bindings: Add sh_intc IRQ - EVT conversion helper Yoshinori Sato
2023-09-13 10:47 ` Krzysztof Kozlowski
2023-09-19 13:02 ` Geert Uytterhoeven
2023-09-20 11:51 ` Krzysztof Kozlowski
2023-09-20 12:30 ` Geert Uytterhoeven
2023-09-19 13:05 ` Geert Uytterhoeven
2023-09-13 9:23 ` [RFC PATCH v2 26/30] arch/sh: RTS7751R2D Plus DeviceTree Yoshinori Sato
2023-09-13 10:49 ` Krzysztof Kozlowski
2023-09-15 15:43 ` Geert Uytterhoeven
2023-09-19 13:25 ` Geert Uytterhoeven
2023-10-02 13:21 ` Yoshinori Sato
2023-10-02 13:51 ` Geert Uytterhoeven
2023-09-13 9:23 ` [RFC PATCH v2 27/30] arch/sh: LANDISK DeviceTree Yoshinori Sato
2023-09-13 9:23 ` [RFC PATCH v2 28/30] arch/sh: USL-5P DeviceTree Yoshinori Sato
2023-09-13 9:23 ` [RFC PATCH v2 29/30] arch/sh: RTS7751R2D Plus OF defconfig Yoshinori Sato
2023-09-13 9:23 ` [RFC PATCH v2 30/30] arch/sh: LANDISK " Yoshinori Sato
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87sf79t4zk.wl-ysato@users.sourceforge.jp \
--to=ysato@users.sourceforge.jp \
--cc=geert@linux-m68k.org \
--cc=glaubitz@physik.fu-berlin.de \
--cc=linux-pci@vger.kernel.org \
--cc=linux-sh@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.