Thread (9 messages) 9 messages, 4 authors, 2016-02-05

Re: [PATCH v4 2/2] pci, pci-thunder-pem: Add PCIe host driver for ThunderX processors.

From: Bjorn Helgaas <hidden>
Date: 2016-02-05 19:49:33
Also in: linux-arm-kernel, linux-pci, lkml

On Fri, Feb 05, 2016 at 09:12:50AM -0800, David Daney wrote:
On 02/04/2016 07:10 PM, Bjorn Helgaas wrote:
quoted
On Thu, Feb 04, 2016 at 04:28:29PM -0800, David Daney wrote:
quoted
On 02/04/2016 04:04 PM, Bjorn Helgaas wrote:
quoted
On Tue, Jan 26, 2016 at 01:46:21PM -0800, David Daney wrote:
quoted
From: David Daney <david.daney-YGCgFSpz5w/QT0dZR+AlfA@public.gmane.org>

Some Cavium ThunderX processors require quirky access methods for the
config space of the PCIe bridge.  Add a driver to provide these config
space accessor functions.  The pci-host-common code is used to
configure the PCI machinery.

Signed-off-by: David Daney <david.daney-YGCgFSpz5w/QT0dZR+AlfA@public.gmane.org>
Acked-by: Rob Herring <redacted>
Acked-by: Arnd Bergmann <redacted>
---
 .../devicetree/bindings/pci/pci-thunder-pem.txt    |  43 ++++
 MAINTAINERS                                        |   8 +
 drivers/pci/host/Kconfig                           |   7 +
 drivers/pci/host/Makefile                          |   1 +
 drivers/pci/host/pci-thunder-pem.c                 | 283 +++++++++++++++++++++
What's the significance of the "pem" part of the name?  I'm wondering
if we can shorten the filenames and function names by dropping it and
referring to this simply as "thunder" or "thunderx".
...
quoted
quoted
Since PEM and ECAM are terminology used in the hardware manuals that
have specific meanings relative to the Thunder SoC family, I think
it is not too inconvenient to carry them over into the file names.
As long as PEM and ECAM are really two distinct root complexes that
are unrelated, I guess this is OK.
They are, see above.
OK, I'm convinced.
quoted
quoted
quoted
quoted
+		/*
+		 * 32-bit accesses only.  If the write is for a size
+		 * smaller than 32-bits, we must first read the 32-bit
+		 * value and merge in the desired bits and then write
+		 * the whole 32-bits back out.
+		 */
Ugh.  Another device that only supports 32-bit writes.  I guess this
only affects this single device, and maybe you "know" that it has no
registers where RW1C bits may be corrupted.  Although I suppose this
device has the standard status registers (Status at 0x06, Secondary
Status at 0x1e, Device Status in PCIe capability, etc.), which do
contain RW1C bits.
...
I will add a WARN_ONCE or similar. and send a new patch set.

FWIW, I think I have been able to get the message through to the
hardware architects that building root complexes that are not
exposed as PCI standard ECAMs makes things very difficult.  This was
the original intention, but turned out not to be possible when we
looked more closely at the hardware implementation.  I am optimistic
that subsequent generations of Thunder will be much improved in this
area.
Great!  Since there's apparently only one ThunderX device (devfn == 0
on the root bus) that has this problem, and you know exactly what that
device is and where all its RW1C bits are, you *could* fix this in the
*_config_write() functions by clearing any RW1C bits before the
"modify/write" part of any read/modify/write cycle.

BTW, minor nit, when you repost these, can you reorder the
map_bus/read/write functions in that order so they match the order
they're declared in struct pci_ops?  I think both pem and ecam
versions could benefit from this.

Bjorn
--
To unsubscribe from this list: send the line "unsubscribe devicetree" in
the body of a message to majordomo-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help