Thread (60 messages) 60 messages, 7 authors, 2024-09-12

Re: [PATCH v6 05/13] PCI: brcmstb: Use bridge reset if available

From: Jim Quinlan <hidden>
Date: 2024-09-12 18:21:40
Also in: linux-pci, lkml

On Tue, Sep 10, 2024 at 1:59 PM Bjorn Helgaas [off-list ref] wrote:
On Tue, Sep 10, 2024 at 01:30:41PM -0400, Jim Quinlan wrote:
quoted
On Tue, Sep 3, 2024 at 10:26 AM Jim Quinlan [off-list ref] wrote:
quoted
On Mon, Sep 2, 2024 at 3:18 PM Bjorn Helgaas [off-list ref] wrote:
quoted
On Thu, Aug 15, 2024 at 06:57:18PM -0400, Jim Quinlan wrote:
quoted
The 7712 SOC has a bridge reset which can be described in the device tree.
Use it if present.  Otherwise, continue to use the legacy method to reset
the bridge.
quoted
 static void brcm_pcie_bridge_sw_init_set_generic(struct brcm_pcie *pcie, u32 val)
 {
-     u32 tmp, mask =  RGR1_SW_INIT_1_INIT_GENERIC_MASK;
-     u32 shift = RGR1_SW_INIT_1_INIT_GENERIC_SHIFT;
+     if (val)
+             reset_control_assert(pcie->bridge_reset);
+     else
+             reset_control_deassert(pcie->bridge_reset);

-     tmp = readl(pcie->base + PCIE_RGR1_SW_INIT_1(pcie));
-     tmp = (tmp & ~mask) | ((val << shift) & mask);
-     writel(tmp, pcie->base + PCIE_RGR1_SW_INIT_1(pcie));
+     if (!pcie->bridge_reset) {
+             u32 tmp, mask =  RGR1_SW_INIT_1_INIT_GENERIC_MASK;
+             u32 shift = RGR1_SW_INIT_1_INIT_GENERIC_SHIFT;
+
+             tmp = readl(pcie->base + PCIE_RGR1_SW_INIT_1(pcie));
+             tmp = (tmp & ~mask) | ((val << shift) & mask);
+             writel(tmp, pcie->base + PCIE_RGR1_SW_INIT_1(pcie));
+     }
This pattern looks goofy:

  reset_control_assert(pcie->bridge_reset);
  if (!pcie->bridge_reset) {
    ...

If we're going to test pcie->bridge_reset at all, it should be first
so it's obvious what's going on and the reader doesn't have to go
verify that reset_control_assert() ignores and returns success for a
NULL pointer:

  if (pcie->bridge_reset) {
    if (val)
      reset_control_assert(pcie->bridge_reset);
    else
      reset_control_deassert(pcie->bridge_reset);

    return;
  }

  u32 tmp, mask =  RGR1_SW_INIT_1_INIT_GENERIC_MASK;
  ...
Will do.
Hi Bjorn,

It is not clear to me if you want a new series -- which would be V7 --
or you are okay with the current series V6.  If the latter, someone
sent in a fixup commit which must be included.
Please advise.
Krzysztof amended this on the branch.  Take a look here and verify
that it makes sense to you:

  https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git/tree/drivers/pci/controller/pcie-brcmstb.c?h=controller/brcmstb#n752

If that looks right to you, no need to post a new v7.

I think Krzysztof also integrated an "int num_inbound_wins" fix; is
that the one you mean?  If I'm thinking of the right one, you can
check that at:

  https://git.kernel.org/pub/scm/linux/kernel/git/pci/pci.git/tree/drivers/pci/controller/pcie-brcmstb.c?h=controller/brcmstb#n1034
quoted
quoted
quoted
Krzysztof, can you amend this on the branch?

It will also make the eventual return checking and error message
simpler because we won't have to initialize "ret" first, and we can
"return 0" directly for the legacy case.

Bjorn
Sorry, I didn't see this email until now.  The changes look good,
thanks for making them.

Regards,
Jim

Attachments

  • smime.p7s [application/pkcs7-signature] 4210 bytes
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help