[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20250417165219.GA115235@bhelgaas>
Date: Thu, 17 Apr 2025 11:52:19 -0500
From: Bjorn Helgaas <helgaas@...nel.org>
To: Niklas Cassel <cassel@...nel.org>
Cc: Hans Zhang <18255117159@....com>, Shawn Lin <shawn.lin@...k-chips.com>,
lpieralisi@...nel.org, kw@...ux.com, bhelgaas@...gle.com,
heiko@...ech.de, manivannan.sadhasivam@...aro.org, robh@...nel.org,
jingoohan1@...il.com, thomas.richard@...tlin.com,
linux-pci@...r.kernel.org, linux-kernel@...r.kernel.org,
linux-arm-kernel@...ts.infradead.org,
linux-rockchip@...ts.infradead.org
Subject: Re: [PATCH] PCI: dw-rockchip: Configure max payload size on host init
On Thu, Apr 17, 2025 at 10:39:49AM +0200, Niklas Cassel wrote:
> On Thu, Apr 17, 2025 at 04:07:51PM +0800, Hans Zhang wrote:
> > On 2025/4/17 15:48, Niklas Cassel wrote:
> >
> > Hi Niklas and Shawn,
> >
> > Thank you very much for your discussion and reply.
> >
> > I tested it on RK3588 and our platform. By setting pci=pcie_bus_safe, the
> > maximum MPS will be automatically matched in the end.
> >
> > So is my patch no longer needed? For RK3588, does the customer have to
> > configure CONFIG_PCIE_BUS_SAFE or pci=pcie_bus_safe?
> >
> > Also, for pci-meson.c, can the meson_set_max_payload be deleted?
>
> I think the only reason why this works is because
> pcie_bus_configure_settings(), in the case of
> pcie_bus_config == PCIE_BUS_SAFE, will walk the bus and set MPS in
> the bridge to the lowest of the downstream devices:
> https://github.com/torvalds/linux/blob/v6.15-rc2/drivers/pci/probe.c#L2994-L2999
>
> So Hans, if you look at lspci for the other RCs/bridges that don't
> have any downstream devices connected, do they also show DevCtl.MPS 256B
> or do they still show 128B ?
>
> One could argue that for all policies (execept for maybe PCIE_BUS_TUNE_OFF),
> pcie_bus_configure_settings() should start off by initializing DevCtl.MPS to
> DevCap.MPS (for the bridge itself), and after that pcie_bus_configure_settings()
> can override it depending on policy, e.g. set MPS to 128B in case of
> pcie_bus_config == PCIE_BUS_PEER2PEER, or walk the bus in case of
> pcie_bus_config == PCIE_BUS_SAFE.
>
> That way, we should be able to remove the setting for pci-meson.c as well.
Thanks, I came here to say basically the same thing. Ideally I think
the generic code in pcie_bus_configure_settings() should be able to
increase MPS or decrease it such that neither meson_set_max_payload()
nor rockchip_pcie_set_max_payload() is required.
However, the requirement to pick a Kconfig setting makes it a mess. I
would love to get rid of those Kconfig symbols. I don't like the
command-line parameters either, but it would definitely be an
improvement if we could nuke the Kconfig symbols and rely on the
command-line parameters.
It's also a problem when devices are hot-added after the hierarchy has
already been set up because the new device might not work correctly in
the existing config.
It's a hard problem to solve.
For new platforms without an install base, maybe it would be easier to
rely on the command-line parameters since there aren't a bunch of
users that would have to change the Kconfig.
Bjorn
Powered by blists - more mailing lists