From: "Pali Rohár" <pali@kernel.org> To: Bjorn Helgaas <helgaas@kernel.org> Cc: "Thomas Petazzoni" <thomas.petazzoni@bootlin.com>, "Lorenzo Pieralisi" <lorenzo.pieralisi@arm.com>, "Rob Herring" <robh@kernel.org>, "Krzysztof Wilczyński" <kw@linux.com>, "Bjorn Helgaas" <bhelgaas@google.com>, "Marek Behún" <kabel@kernel.org>, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 08/15] PCI: mvebu: Propagate errors when updating PCI_IO_BASE and PCI_MEM_BASE registers Date: Fri, 7 Jan 2022 23:28:26 +0100 [thread overview] Message-ID: <20220107222826.cv2bzywwayjwzy3c@pali> (raw) In-Reply-To: <20220107215504.GA406217@bhelgaas> On Friday 07 January 2022 15:55:04 Bjorn Helgaas wrote: > On Thu, Nov 25, 2021 at 01:45:58PM +0100, Pali Rohár wrote: > > Properly propagate failure from mvebu_pcie_add_windows() function back to > > the caller mvebu_pci_bridge_emul_base_conf_write() and correctly updates > > PCI_IO_BASE, PCI_MEM_BASE and PCI_IO_BASE_UPPER16 registers on error. > > On error set base value higher than limit value which indicates that > > address range is disabled. > > Does the spec say that if software programs something invalid, > hardware should proactively set the base and limit registers to > disable the window? No. But this patch address something totally different. Software can do fully valid operation, e.g. try to set forwarding memory window as large as possible. But because this driver "emulates" pci bridge by calling software/kernel function (mvebu_pcie_add_windows), some operations which in real HW cannot happen, are possible in software. For example there are limitations in sizes of forwarding memory windows, because it is done by mvebu-mbus driver, which is responsible for configuring mapping and forwarding of PCIe I/O and MEM windows. And due to Marvell HW, there are restrictions which are not in PCIe HW. Currently if such error happens, obviously kernel is not able to set PCIe windows and it just print warnings to dmesg. Trying to access these windows would result in the worst case in crashes. With this change when mvebu_pcie_add_windows() function fails then into emulated config space is put information that particular forwarding window is disabled. I think that it is better to indicate it in config space what is the current "reality" of hardware configuration. If window is disabled in real-HW (meaning in mvebu-mbus driver) then show it also in emulated config space of pci bridge. Do you have better idea what should emulated pci bridge do, if software try to set fully valid configuration of forwarding window, but it is not possible to achieve it (even compliant PCI bridge must be able to do it)? > I'm not sure I've seen hardware that does this, and it seems ... maybe > a little aggressive. > > What happens if software writes the base and limit in the wrong order, > so the window is invalid after the first write but valid after the > second? That actually sounds like it could be a sensible strategy to > prevent a partially-configured window from being active. > > Bjorn Invalid window (limit < base) means that window is disabled. And pci-mvebu.c in its callbacks from pci-bridge-emul.c should correctly handle it and propagates information about disablement to mvebu-mbus driver. After window is valid again (limit > base) then pci-mvebu.c call mvebu-mbus to setup new mapping.
WARNING: multiple messages have this Message-ID (diff)
From: "Pali Rohár" <pali@kernel.org> To: Bjorn Helgaas <helgaas@kernel.org> Cc: "Thomas Petazzoni" <thomas.petazzoni@bootlin.com>, "Lorenzo Pieralisi" <lorenzo.pieralisi@arm.com>, "Rob Herring" <robh@kernel.org>, "Krzysztof Wilczyński" <kw@linux.com>, "Bjorn Helgaas" <bhelgaas@google.com>, "Marek Behún" <kabel@kernel.org>, linux-pci@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: Re: [PATCH 08/15] PCI: mvebu: Propagate errors when updating PCI_IO_BASE and PCI_MEM_BASE registers Date: Fri, 7 Jan 2022 23:28:26 +0100 [thread overview] Message-ID: <20220107222826.cv2bzywwayjwzy3c@pali> (raw) In-Reply-To: <20220107215504.GA406217@bhelgaas> On Friday 07 January 2022 15:55:04 Bjorn Helgaas wrote: > On Thu, Nov 25, 2021 at 01:45:58PM +0100, Pali Rohár wrote: > > Properly propagate failure from mvebu_pcie_add_windows() function back to > > the caller mvebu_pci_bridge_emul_base_conf_write() and correctly updates > > PCI_IO_BASE, PCI_MEM_BASE and PCI_IO_BASE_UPPER16 registers on error. > > On error set base value higher than limit value which indicates that > > address range is disabled. > > Does the spec say that if software programs something invalid, > hardware should proactively set the base and limit registers to > disable the window? No. But this patch address something totally different. Software can do fully valid operation, e.g. try to set forwarding memory window as large as possible. But because this driver "emulates" pci bridge by calling software/kernel function (mvebu_pcie_add_windows), some operations which in real HW cannot happen, are possible in software. For example there are limitations in sizes of forwarding memory windows, because it is done by mvebu-mbus driver, which is responsible for configuring mapping and forwarding of PCIe I/O and MEM windows. And due to Marvell HW, there are restrictions which are not in PCIe HW. Currently if such error happens, obviously kernel is not able to set PCIe windows and it just print warnings to dmesg. Trying to access these windows would result in the worst case in crashes. With this change when mvebu_pcie_add_windows() function fails then into emulated config space is put information that particular forwarding window is disabled. I think that it is better to indicate it in config space what is the current "reality" of hardware configuration. If window is disabled in real-HW (meaning in mvebu-mbus driver) then show it also in emulated config space of pci bridge. Do you have better idea what should emulated pci bridge do, if software try to set fully valid configuration of forwarding window, but it is not possible to achieve it (even compliant PCI bridge must be able to do it)? > I'm not sure I've seen hardware that does this, and it seems ... maybe > a little aggressive. > > What happens if software writes the base and limit in the wrong order, > so the window is invalid after the first write but valid after the > second? That actually sounds like it could be a sensible strategy to > prevent a partially-configured window from being active. > > Bjorn Invalid window (limit < base) means that window is disabled. And pci-mvebu.c in its callbacks from pci-bridge-emul.c should correctly handle it and propagates information about disablement to mvebu-mbus driver. After window is valid again (limit > base) then pci-mvebu.c call mvebu-mbus to setup new mapping. _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2022-01-07 22:28 UTC|newest] Thread overview: 72+ messages / expand[flat|nested] mbox.gz Atom feed top 2021-11-25 12:45 [PATCH 00/15] pci: mvebu: Various fixes Pali Rohár 2021-11-25 12:45 ` Pali Rohár 2021-11-25 12:45 ` [PATCH 01/15] PCI: mvebu: Check for valid ports Pali Rohár 2021-11-25 12:45 ` Pali Rohár 2021-11-25 12:45 ` [PATCH 02/15] PCI: mvebu: Check for errors from pci_bridge_emul_init() call Pali Rohár 2021-11-25 12:45 ` Pali Rohár 2021-11-25 12:45 ` [PATCH 03/15] PCI: mvebu: Check that PCI bridge specified in DT has function number zero Pali Rohár 2021-11-25 12:45 ` Pali Rohár 2022-01-07 18:15 ` Bjorn Helgaas 2022-01-07 18:15 ` Bjorn Helgaas 2022-01-07 18:18 ` Pali Rohár 2022-01-07 18:18 ` Pali Rohár 2022-01-07 21:09 ` Bjorn Helgaas 2022-01-07 21:09 ` Bjorn Helgaas 2022-01-07 21:58 ` Pali Rohár 2022-01-07 21:58 ` Pali Rohár 2021-11-25 12:45 ` [PATCH 04/15] PCI: mvebu: Handle invalid size of read config request Pali Rohár 2021-11-25 12:45 ` Pali Rohár 2022-01-07 18:45 ` Bjorn Helgaas 2022-01-07 18:45 ` Bjorn Helgaas 2022-01-07 19:15 ` Russell King (Oracle) 2022-01-07 19:15 ` Russell King (Oracle) 2021-11-25 12:45 ` [PATCH 05/15] PCI: mvebu: Disallow mapping interrupts on emulated bridges Pali Rohár 2021-11-25 12:45 ` Pali Rohár 2022-01-07 21:32 ` Bjorn Helgaas 2022-01-07 21:32 ` Bjorn Helgaas 2022-01-07 22:13 ` Pali Rohár 2022-01-07 22:13 ` Pali Rohár 2022-01-07 23:01 ` Bjorn Helgaas 2022-01-07 23:01 ` Bjorn Helgaas 2022-01-07 23:11 ` Pali Rohár 2022-01-07 23:11 ` Pali Rohár 2021-11-25 12:45 ` [PATCH 06/15] PCI: mvebu: Fix support for bus mastering and PCI_COMMAND on emulated bridge Pali Rohár 2021-11-25 12:45 ` Pali Rohár 2021-11-25 12:45 ` [PATCH 07/15] PCI: mvebu: Do not modify PCI IO type bits in conf_write Pali Rohár 2021-11-25 12:45 ` Pali Rohár 2021-11-25 12:45 ` [PATCH 08/15] PCI: mvebu: Propagate errors when updating PCI_IO_BASE and PCI_MEM_BASE registers Pali Rohár 2021-11-25 12:45 ` Pali Rohár 2022-01-07 21:55 ` Bjorn Helgaas 2022-01-07 21:55 ` Bjorn Helgaas 2022-01-07 22:28 ` Pali Rohár [this message] 2022-01-07 22:28 ` Pali Rohár 2022-01-07 23:16 ` Bjorn Helgaas 2022-01-07 23:16 ` Bjorn Helgaas 2022-01-07 23:46 ` Pali Rohár 2022-01-07 23:46 ` Pali Rohár 2022-01-13 0:19 ` Bjorn Helgaas 2022-01-13 0:19 ` Bjorn Helgaas 2022-01-13 10:35 ` Pali Rohár 2022-01-13 10:35 ` Pali Rohár 2022-01-20 17:50 ` Bjorn Helgaas 2022-01-20 17:50 ` Bjorn Helgaas 2022-01-20 19:08 ` Pali Rohár 2022-01-20 19:08 ` Pali Rohár 2022-01-20 19:37 ` Bjorn Helgaas 2022-01-20 19:37 ` Bjorn Helgaas 2021-11-25 12:45 ` [PATCH 09/15] PCI: mvebu: Setup PCIe controller to Root Complex mode Pali Rohár 2021-11-25 12:45 ` Pali Rohár 2021-11-25 12:46 ` [PATCH 10/15] PCI: mvebu: Set PCI Bridge Class Code to PCI Bridge Pali Rohár 2021-11-25 12:46 ` Pali Rohár 2021-11-25 12:46 ` [PATCH 11/15] PCI: mvebu: Fix configuring secondary bus of PCIe Root Port via emulated bridge Pali Rohár 2021-11-25 12:46 ` Pali Rohár 2021-11-25 12:46 ` [PATCH 12/15] PCI: mvebu: Fix support for PCI_BRIDGE_CTL_BUS_RESET on " Pali Rohár 2021-11-25 12:46 ` Pali Rohár 2021-11-25 12:46 ` [PATCH 13/15] PCI: mvebu: Fix support for PCI_EXP_DEVCTL " Pali Rohár 2021-11-25 12:46 ` Pali Rohár 2021-11-25 12:46 ` [PATCH 14/15] PCI: mvebu: Fix support for PCI_EXP_RTSTA " Pali Rohár 2021-11-25 12:46 ` Pali Rohár 2021-11-25 12:46 ` [PATCH 15/15] PCI: mvebu: Fix support for DEVCAP2, DEVCTL2 and LNKCTL2 registers " Pali Rohár 2021-11-25 12:46 ` Pali Rohár 2022-01-04 15:04 ` [PATCH 00/15] pci: mvebu: Various fixes Lorenzo Pieralisi 2022-01-04 15:04 ` Lorenzo Pieralisi
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=20220107222826.cv2bzywwayjwzy3c@pali \ --to=pali@kernel.org \ --cc=bhelgaas@google.com \ --cc=helgaas@kernel.org \ --cc=kabel@kernel.org \ --cc=kw@linux.com \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-pci@vger.kernel.org \ --cc=lorenzo.pieralisi@arm.com \ --cc=robh@kernel.org \ --cc=thomas.petazzoni@bootlin.com \ /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: linkBe 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.