[Skiboot] [PATCH 1/4] PHB3: Fix corruption of pref window register

Stewart Smith stewart at linux.vnet.ibm.com
Fri Apr 29 14:58:14 AEST 2016


Gavin Shan <gwshan at linux.vnet.ibm.com> writes:
> On P8+ Garrison platform, the root port's pref window register might
> be not writable and we have to emulate the window because of hardware
> defect. In order to detect that, we read the register content, write
> inversed value and read the register content again. The register is
> regarded as read-only if the values from the two continuous read are
> same. However, the original register content isn't written back and
> it causes corruption on pref window register if it's writable.
>
> This fixes the above issue by writing the original content back to
> the register at the end.
>
> Fixes: d40160f6 ("PHB3: Emulate root complex pref 64-bits window")
> Signed-off-by: Gavin Shan <gwshan at linux.vnet.ibm.com>

Following IM discussion on the topic, merged to
5.2.x as of a2c5ede
master as of f849108

I also added some comments around what the vendor/device IDs are there,
because it turns out I'm unable to keep that mapping in my head. Patch
below:

--- a/hw/phb3.c
+++ b/hw/phb3.c
@@ -505,7 +505,7 @@ static void phb3_check_device_quirks(struct phb *phb, struct pci_device *dev)
                 * adjust some settings for performances
                 */
                xscom_read(p->chip_id, p->pe_xscom + 0x0b, &modectl);
-               if (vendor == 0x15b3 &&
+               if (vendor == 0x15b3 &&         /* Mellanox */
                    (device == 0x1003 ||        /* Travis3-EN (CX3) */
                     device == 0x1011 ||        /* HydePark (ConnectIB) */
                     device == 0x1013)) {       /* GlacierPark (CX4) */
@@ -518,7 +518,8 @@ static void phb3_check_device_quirks(struct phb *phb, struct pci_device *dev)
 
                xscom_write(p->chip_id, p->pe_xscom + 0x0b, modectl);
        } else if (dev->primary_bus == 0) {
-               if (vendor == 0x1014 && device == 0x03dc) {
+               if (vendor == 0x1014 &&         /* IBM */
+                   device == 0x03dc) {         /* P8/P8E/P8NVL Root port */
                        uint32_t pref_hi, tmp;
 
                        pci_cfg_read32(phb, dev->bdfn,

-- 
Stewart Smith
OPAL Architect, IBM.



More information about the Skiboot mailing list