]> Git Repo - J-linux.git/commitdiff
Merge tag 'pci-v5.17-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaa...
authorLinus Torvalds <[email protected]>
Sun, 16 Jan 2022 06:08:11 +0000 (08:08 +0200)
committerLinus Torvalds <[email protected]>
Sun, 16 Jan 2022 06:08:11 +0000 (08:08 +0200)
Pull pci updates from Bjorn Helgaas:
 "Enumeration:
   - Use pci_find_vsec_capability() instead of open-coding it (Andy
     Shevchenko)
   - Convert pci_dev_present() stub from macro to static inline to avoid
     'unused variable' errors (Hans de Goede)
   - Convert sysfs slot attributes from default_attrs to default_groups
     (Greg Kroah-Hartman)
   - Use DWORD accesses for LTR, L1 SS to avoid BayHub OZ711LV2 erratum
     (Rajat Jain)
   - Remove unnecessary initialization of static variables (Longji Guo)

  Resource management:
   - Always write Intel I210 ROM BAR on update to work around device
     defect (Bjorn Helgaas)

  PCIe native device hotplug:
   - Fix pciehp lockdep errors on Thunderbolt undock (Hans de Goede)
   - Fix infinite loop in pciehp IRQ handler on power fault (Lukas
     Wunner)

  Power management:
   - Convert amd64-agp, sis-agp, via-agp from legacy PCI power
     management to generic power management (Vaibhav Gupta)

  IOMMU:
   - Add function 1 DMA alias quirk for Marvell 88SE9125 SATA controller
     so it can work with an IOMMU (Yifeng Li)

  Error handling:
   - Add PCI_ERROR_RESPONSE and related definitions for signaling and
     checking for transaction errors on PCI (Naveen Naidu)
   - Fabricate PCI_ERROR_RESPONSE data (~0) in config read wrappers,
     instead of in host controller drivers, when transactions fail on
     PCI (Naveen Naidu)
   - Use PCI_POSSIBLE_ERROR() to check for possible failure of config
     reads (Naveen Naidu)

  Peer-to-peer DMA:
   - Add Logan Gunthorpe as P2PDMA maintainer (Bjorn Helgaas)

  ASPM:
   - Calculate link L0s and L1 exit latencies when needed instead of
     caching them (Saheed O. Bolarinwa)
   - Calculate device L0s and L1 acceptable exit latencies when needed
     instead of caching them (Saheed O. Bolarinwa)
   - Remove struct aspm_latency since it's no longer needed (Saheed O.
     Bolarinwa)

  APM X-Gene PCIe controller driver:
   - Fix IB window setup, which was broken by the fact that IB resources
     are now sorted in address order instead of DT dma-ranges order (Rob
     Herring)

  Apple PCIe controller driver:
   - Enable clock gating to save power (Hector Martin)
   - Fix REFCLK1 enable/poll logic (Hector Martin)

  Broadcom STB PCIe controller driver:
   - Declare bitmap correctly for use by bitmap interfaces (Christophe
     JAILLET)
   - Clean up computation of legacy and non-legacy MSI bitmasks (Florian
     Fainelli)
   - Update suspend/resume/remove error handling to warn about errors
     and not fail the operation (Jim Quinlan)
   - Correct the "pcie" and "msi" interrupt descriptions in DT binding
     (Jim Quinlan)
   - Add DT bindings for endpoint voltage regulators (Jim Quinlan)
   - Split brcm_pcie_setup() into two functions (Jim Quinlan)
   - Add mechanism for turning on voltage regulators for connected
     devices (Jim Quinlan)
   - Turn voltage regulators for connected devices on/off when bus is
     added or removed (Jim Quinlan)
   - When suspending, don't turn off voltage regulators for wakeup
     devices (Jim Quinlan)

  Freescale i.MX6 PCIe controller driver:
   - Add i.MX8MM support (Richard Zhu)

  Freescale Layerscape PCIe controller driver:
   - Use DWC common ops instead of layerscape-specific link-up functions
     (Hou Zhiqiang)

  Intel VMD host bridge driver:
   - Honor platform ACPI _OSC feature negotiation for Root Ports below
     VMD (Kai-Heng Feng)
   - Add support for Raptor Lake SKUs (Karthik L Gopalakrishnan)
   - Reset everything below VMD before enumerating to work around
     failure to enumerate NVMe devices when guest OS reboots (Nirmal
     Patel)

  Bridge emulation (used by Marvell Aardvark and MVEBU):
   - Make emulated ROM BAR read-only by default (Pali Rohár)
   - Make some emulated legacy PCI bits read-only for PCIe devices (Pali
     Rohár)
   - Update reserved bits in emulated PCIe Capability (Pali Rohár)
   - Allow drivers to emulate different PCIe Capability versions (Pali
     Rohár)
   - Set emulated Capabilities List bit for all PCIe devices, since they
     must have at least a PCIe Capability (Pali Rohár)

  Marvell Aardvark PCIe controller driver:
   - Add bridge emulation definitions for PCIe DEVCAP2, DEVCTL2,
     DEVSTA2, LNKCAP2, LNKCTL2, LNKSTA2, SLTCAP2, SLTCTL2, SLTSTA2 (Pali
     Rohár)
   - Add aardvark support for DEVCAP2, DEVCTL2, LNKCAP2 and LNKCTL2
     registers (Pali Rohár)
   - Clear all MSIs at setup to avoid spurious interrupts (Pali Rohár)
   - Disable bus mastering when unbinding host controller driver (Pali
     Rohár)
   - Mask all interrupts when unbinding host controller driver (Pali
     Rohár)
   - Fix memory leak in host controller unbind (Pali Rohár)
   - Assert PERST# when unbinding host controller driver (Pali Rohár)
   - Disable link training when unbinding host controller driver (Pali
     Rohár)
   - Disable common PHY when unbinding host controller driver (Pali
     Rohár)
   - Fix resource type checking to check only IORESOURCE_MEM, not
     IORESOURCE_MEM_64, which is a flavor of IORESOURCE_MEM (Pali Rohár)

  Marvell MVEBU PCIe controller driver:
   - Implement pci_remap_iospace() for ARM so mvebu can use
     devm_pci_remap_iospace() instead of the previous ARM-specific
     pci_ioremap_io() interface (Pali Rohár)
   - Use the standard pci_host_probe() instead of the device-specific
     mvebu_pci_host_probe() (Pali Rohár)
   - Replace all uses of ARM-specific pci_ioremap_io() with the ARM
     implementation of the standard pci_remap_iospace() interface and
     remove pci_ioremap_io() (Pali Rohár)
   - Skip initializing invalid Root Ports (Pali Rohár)
   - Check for errors from pci_bridge_emul_init() (Pali Rohár)
   - Ignore any bridges at non-zero function numbers (Pali Rohár)
   - Return ~0 data for invalid config read size (Pali Rohár)
   - Disallow mapping interrupts on emulated bridges (Pali Rohár)
   - Clear Root Port Memory & I/O Space Enable and Bus Master Enable at
     initialization (Pali Rohár)
   - Make type bits in Root Port I/O Base register read-only (Pali
     Rohár)
   - Disable Root Port windows when base/limit set to invalid values
     (Pali Rohár)
   - Set controller to Root Complex mode (Pali Rohár)
   - Set Root Port Class Code to PCI Bridge (Pali Rohár)
   - Update emulated Root Port secondary bus numbers to better reflect
     the actual topology (Pali Rohár)
   - Add PCI_BRIDGE_CTL_BUS_RESET support to emulated Root Ports so
     pci_reset_secondary_bus() can reset connected devices (Pali Rohár)
   - Add PCI_EXP_DEVCTL Error Reporting Enable support to emulated Root
     Ports (Pali Rohár)
   - Add PCI_EXP_RTSTA PME Status bit support to emulated Root Ports
     (Pali Rohár)
   - Add DEVCAP2, DEVCTL2 and LNKCTL2 support to emulated Root Ports on
     Armada XP and newer devices (Pali Rohár)
   - Export mvebu-mbus.c symbols to allow pci-mvebu.c to be a module
     (Pali Rohár)
   - Add support for compiling as a module (Pali Rohár)

  MediaTek PCIe controller driver:
   - Assert PERST# for 100ms to allow power and clock to stabilize
     (qizhong cheng)

  MediaTek PCIe Gen3 controller driver:
   - Disable Mediatek DVFSRC voltage request since lack of DVFSRC to
     respond to the request causes failure to exit L1 PM Substate
     (Jianjun Wang)

  MediaTek MT7621 PCIe controller driver:
   - Declare mt7621_pci_ops static (Sergio Paracuellos)
   - Give pcibios_root_bridge_prepare() access to host bridge windows
     (Sergio Paracuellos)
   - Move MIPS I/O coherency unit setup from driver to
     pcibios_root_bridge_prepare() (Sergio Paracuellos)
   - Add missing MODULE_LICENSE() (Sergio Paracuellos)
   - Allow COMPILE_TEST for all arches (Sergio Paracuellos)

  Microsoft Hyper-V host bridge driver:
   - Add hv-internal interfaces to encapsulate arch IRQ dependencies
     (Sunil Muthuswamy)
   - Add arm64 Hyper-V vPCI support (Sunil Muthuswamy)

  Qualcomm PCIe controller driver:
   - Undo PM setup in qcom_pcie_probe() error handling path (Christophe
     JAILLET)
   - Use __be16 type to store return value from cpu_to_be16()
     (Manivannan Sadhasivam)
   - Constify static dw_pcie_ep_ops (Rikard Falkeborn)

  Renesas R-Car PCIe controller driver:
   - Fix aarch32 abort handler so it doesn't check the wrong bus clock
     before accessing the host controller (Marek Vasut)

  TI Keystone PCIe controller driver:
   - Add register offset for ti,syscon-pcie-id and ti,syscon-pcie-mode
     DT properties (Kishon Vijay Abraham I)

  MicroSemi Switchtec management driver:
   - Add Gen4 automotive device IDs (Kelvin Cao)
   - Declare state_names[] as static so it's not allocated and
     initialized for every call (Kelvin Cao)

  Host controller driver cleanups:
   - Use of_device_get_match_data(), not of_match_device(), when we only
     need the device data in altera, artpec6, cadence, designware-plat,
     dra7xx, keystone, kirin (Fan Fei)
   - Drop pointless of_device_get_match_data() cast in j721e (Bjorn
     Helgaas)
   - Drop redundant struct device * from j721e since struct cdns_pcie
     already has one (Bjorn Helgaas)
   - Rename driver structs to *_pcie in intel-gw, iproc, ls-gen4,
     mediatek-gen3, microchip, mt7621, rcar-gen2, tegra194, uniphier,
     xgene, xilinx, xilinx-cpm for consistency across drivers (Fan Fei)
   - Fix invalid address space conversions in hisi, spear13xx (Bjorn
     Helgaas)

  Miscellaneous:
   - Sort Intel Device IDs by value (Andy Shevchenko)
   - Change Capability offsets to hex to match spec (Baruch Siach)
   - Correct misspellings (Krzysztof Wilczyński)
   - Terminate statement with semicolon in pci_endpoint_test.c (Ming
     Wang)"

* tag 'pci-v5.17-changes' of git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci: (151 commits)
  PCI: mt7621: Allow COMPILE_TEST for all arches
  PCI: mt7621: Add missing MODULE_LICENSE()
  PCI: mt7621: Move MIPS setup to pcibios_root_bridge_prepare()
  PCI: Let pcibios_root_bridge_prepare() access bridge->windows
  PCI: mt7621: Declare mt7621_pci_ops static
  PCI: brcmstb: Do not turn off WOL regulators on suspend
  PCI: brcmstb: Add control of subdevice voltage regulators
  PCI: brcmstb: Add mechanism to turn on subdev regulators
  PCI: brcmstb: Split brcm_pcie_setup() into two funcs
  dt-bindings: PCI: Add bindings for Brcmstb EP voltage regulators
  dt-bindings: PCI: Correct brcmstb interrupts, interrupt-map.
  PCI: brcmstb: Fix function return value handling
  PCI: brcmstb: Do not use __GENMASK
  PCI: brcmstb: Declare 'used' as bitmap, not unsigned long
  PCI: hv: Add arm64 Hyper-V vPCI support
  PCI: hv: Make the code arch neutral by adding arch specific interfaces
  PCI: pciehp: Use down_read/write_nested(reset_lock) to fix lockdep errors
  x86/PCI: Remove initialization of static variables to false
  PCI: Use DWORD accesses for LTR, L1 SS to avoid erratum
  misc: pci_endpoint_test: Terminate statement with semicolon
  ...

18 files changed:
1  2 
Documentation/devicetree/bindings/pci/brcm,stb-pcie.yaml
Documentation/devicetree/bindings/pci/ti,am65-pci-ep.yaml
Documentation/devicetree/bindings/pci/ti,am65-pci-host.yaml
MAINTAINERS
drivers/pci/controller/Kconfig
drivers/pci/controller/dwc/pci-exynos.c
drivers/pci/controller/dwc/pcie-qcom-ep.c
drivers/pci/controller/pci-aardvark.c
drivers/pci/controller/pci-hyperv.c
drivers/pci/controller/pcie-apple.c
drivers/pci/controller/pcie-brcmstb.c
drivers/pci/p2pdma.c
drivers/pci/pci.c
drivers/pci/probe.c
drivers/pci/quirks.c
include/linux/pci.h
include/linux/pci_ids.h
include/uapi/linux/pci_regs.h

index bc1dcb483dbb06dfa8e4bfd8c619ac0d2d9a512f,3e3c8929c97c525a2c3c31de9701ef118e8faa05..0f064e4222f3ebd1fef99478c030d4b21fa2bd85
@@@ -19,8 -19,6 +19,8 @@@ properties
            - brcm,bcm7278-pcie # Broadcom 7278 Arm
            - brcm,bcm7216-pcie # Broadcom 7216 Arm
            - brcm,bcm7445-pcie # Broadcom 7445 Arm
 +          - brcm,bcm7425-pcie # Broadcom 7425 MIPs
 +          - brcm,bcm7435-pcie # Broadcom 7435 MIPs
  
    reg:
      maxItems: 1
@@@ -78,7 -76,6 +78,7 @@@
        maxItems: 3
  
  required:
 +  - compatible
    - reg
    - ranges
    - dma-ranges
@@@ -146,11 -143,15 +146,15 @@@ examples
                      #address-cells = <3>;
                      #size-cells = <2>;
                      #interrupt-cells = <1>;
-                     interrupts = <GIC_SPI 148 IRQ_TYPE_LEVEL_HIGH>,
+                     interrupts = <GIC_SPI 147 IRQ_TYPE_LEVEL_HIGH>,
                                   <GIC_SPI 148 IRQ_TYPE_LEVEL_HIGH>;
                      interrupt-names = "pcie", "msi";
                      interrupt-map-mask = <0x0 0x0 0x0 0x7>;
-                     interrupt-map = <0 0 0 1 &gicv2 GIC_SPI 143 IRQ_TYPE_LEVEL_HIGH>;
+                     interrupt-map = <0 0 0 1 &gicv2 GIC_SPI 143 IRQ_TYPE_LEVEL_HIGH
+                                      0 0 0 2 &gicv2 GIC_SPI 144 IRQ_TYPE_LEVEL_HIGH
+                                      0 0 0 3 &gicv2 GIC_SPI 145 IRQ_TYPE_LEVEL_HIGH
+                                      0 0 0 4 &gicv2 GIC_SPI 146 IRQ_TYPE_LEVEL_HIGH>;
                      msi-parent = <&pcie0>;
                      msi-controller;
                      ranges = <0x02000000 0x0 0xf8000000 0x6 0x00000000 0x0 0x04000000>;
                                   <0x42000000 0x1 0x80000000 0x3 0x00000000 0x0 0x80000000>;
                      brcm,enable-ssc;
                      brcm,scb-sizes =  <0x0000000080000000 0x0000000080000000>;
+                     /* PCIe bridge, Root Port */
+                     pci@0,0 {
+                             #address-cells = <3>;
+                             #size-cells = <2>;
+                             reg = <0x0 0x0 0x0 0x0 0x0>;
+                             compatible = "pciclass,0604";
+                             device_type = "pci";
+                             vpcie3v3-supply = <&vreg7>;
+                             ranges;
+                             /* PCIe endpoint */
+                             pci-ep@0,0 {
+                                     assigned-addresses =
+                                         <0x82010000 0x0 0xf8000000 0x6 0x00000000 0x0 0x2000>;
+                                     reg = <0x0 0x0 0x0 0x0 0x0>;
+                                     compatible = "pci14e4,1688";
+                             };
+                     };
              };
      };
index a6896cb40e83f8aecb59bb6cca4680af980f850e,98d933b792e7c7afa51abd4d5fee9fe4a55f23fc..74195c1f5292ed83fbd239527ac1910d8a2c863a
@@@ -32,8 -32,12 +32,12 @@@ properties
      maxItems: 1
  
    ti,syscon-pcie-mode:
+     $ref: /schemas/types.yaml#/definitions/phandle-array
+     items:
+       - items:
+           - description: Phandle to the SYSCON entry
+           - description: pcie_ctrl register offset within SYSCON
      description: Phandle to the SYSCON entry required for configuring PCIe in RC or EP mode.
-     $ref: /schemas/types.yaml#/definitions/phandle
  
    interrupts:
      minItems: 1
@@@ -65,7 -69,9 +69,7 @@@ examples
                 <0x5506000 0x1000>;
          reg-names = "app", "dbics", "addr_space", "atu";
          power-domains = <&k3_pds 120 TI_SCI_PD_EXCLUSIVE>;
-         ti,syscon-pcie-mode = <&pcie0_mode>;
+         ti,syscon-pcie-mode = <&scm_conf 0x4060>;
 -        num-ib-windows = <16>;
 -        num-ob-windows = <16>;
          max-link-speed = <2>;
          dma-coherent;
          interrupts = <GIC_SPI 340 IRQ_TYPE_EDGE_RISING>;
index eabe1635e336370fae7e9551a01fcb33e9bae907,f909e262f593788d860d43046774b5afa909d48e..a20dccbafd94e7c276875e65adc0e3acce23341a
@@@ -29,19 -29,24 +29,27 @@@ properties
        - const: config
        - const: atu
  
 +  interrupts:
 +    maxItems: 1
 +
    power-domains:
      maxItems: 1
  
    ti,syscon-pcie-id:
+     $ref: /schemas/types.yaml#/definitions/phandle-array
+     items:
+       - items:
+           - description: Phandle to the SYSCON entry
+           - description: pcie_device_id register offset within SYSCON
      description: Phandle to the SYSCON entry required for getting PCIe device/vendor ID
-     $ref: /schemas/types.yaml#/definitions/phandle
  
    ti,syscon-pcie-mode:
+     $ref: /schemas/types.yaml#/definitions/phandle-array
+     items:
+       - items:
+           - description: Phandle to the SYSCON entry
+           - description: pcie_ctrl register offset within SYSCON
      description: Phandle to the SYSCON entry required for configuring PCIe in RC or EP mode.
-     $ref: /schemas/types.yaml#/definitions/phandle
  
    msi-map: true
  
@@@ -87,9 -92,10 +95,9 @@@ examples
          #size-cells = <2>;
          ranges = <0x81000000 0 0          0x10020000 0 0x00010000>,
                   <0x82000000 0 0x10030000 0x10030000 0 0x07FD0000>;
-         ti,syscon-pcie-id = <&pcie_devid>;
-         ti,syscon-pcie-mode = <&pcie0_mode>;
+         ti,syscon-pcie-id = <&scm_conf 0x0210>;
+         ti,syscon-pcie-mode = <&scm_conf 0x4060>;
          bus-range = <0x0 0xff>;
 -        num-viewport = <16>;
          max-link-speed = <2>;
          dma-coherent;
          interrupts = <GIC_SPI 340 IRQ_TYPE_EDGE_RISING>;
diff --combined MAINTAINERS
index cf006193fd50de3fe43326272bec5b5c96fb389b,ea59e32e1e81eaf141d9414507f958f1448e2c39..fbc29cdc3074d017fd9e3ebb78d9d98d40ed347a
@@@ -226,7 -226,6 +226,7 @@@ F: drivers/net/ethernet/8390
  M:    Eric Van Hensbergen <[email protected]>
  M:    Latchesar Ionkov <[email protected]>
  M:    Dominique Martinet <[email protected]>
 +R:    Christian Schoenebeck <[email protected]>
  L:    [email protected]
  S:    Maintained
  W:    http://swik.net/v9fs
@@@ -967,7 -966,6 +967,7 @@@ F: drivers/gpu/drm/amd/include/kgd_kfd_
  F:    drivers/gpu/drm/amd/include/v9_structs.h
  F:    drivers/gpu/drm/amd/include/vi_structs.h
  F:    include/uapi/linux/kfd_ioctl.h
 +F:    include/uapi/linux/kfd_sysfs.h
  
  AMD SPI DRIVER
  M:    Sanjay R Mehta <[email protected]>
@@@ -995,13 -993,6 +995,13 @@@ S:       Supporte
  T:    git https://gitlab.freedesktop.org/agd5f/linux.git
  F:    drivers/gpu/drm/amd/pm/
  
 +AMD PSTATE DRIVER
 +M:    Huang Rui <[email protected]>
 +L:    [email protected]
 +S:    Supported
 +F:    Documentation/admin-guide/pm/amd-pstate.rst
 +F:    drivers/cpufreq/amd-pstate*
 +
  AMD PTDMA DRIVER
  M:    Sanjay R Mehta <[email protected]>
  L:    [email protected]
@@@ -1078,15 -1069,6 +1078,15 @@@ W:    http://ez.analog.com/community/linux
  F:    Documentation/devicetree/bindings/iio/adc/adi,ad7780.yaml
  F:    drivers/iio/adc/ad7780.c
  
 +ANALOG DEVICES INC AD74413R DRIVER
 +M:    Cosmin Tanislav <[email protected]>
 +L:    [email protected]
 +S:    Supported
 +W:    http://ez.analog.com/community/linux-device-drivers
 +F:    Documentation/devicetree/bindings/iio/addac/adi,ad74413r.yaml
 +F:    drivers/iio/addac/ad74413r.c
 +F:    include/dt-bindings/iio/addac/adi,ad74413r.h
 +
  ANALOG DEVICES INC AD9389B DRIVER
  M:    Hans Verkuil <[email protected]>
  L:    [email protected]
@@@ -1157,7 -1139,6 +1157,7 @@@ ANALOG DEVICES INC ADV748X DRIVE
  M:    Kieran Bingham <[email protected]>
  L:    [email protected]
  S:    Maintained
 +F:    Documentation/devicetree/bindings/media/i2c/adv748x.yaml
  F:    drivers/media/i2c/adv748x/*
  
  ANALOG DEVICES INC ADV7511 DRIVER
@@@ -1764,21 -1745,17 +1764,21 @@@ B:   https://github.com/AsahiLinux/linux/
  C:    irc://irc.oftc.net/asahi-dev
  T:    git https://github.com/AsahiLinux/linux.git
  F:    Documentation/devicetree/bindings/arm/apple.yaml
 +F:    Documentation/devicetree/bindings/arm/apple/*
  F:    Documentation/devicetree/bindings/i2c/apple,i2c.yaml
  F:    Documentation/devicetree/bindings/interrupt-controller/apple,aic.yaml
  F:    Documentation/devicetree/bindings/mailbox/apple,mailbox.yaml
  F:    Documentation/devicetree/bindings/pci/apple,pcie.yaml
  F:    Documentation/devicetree/bindings/pinctrl/apple,pinctrl.yaml
 +F:    Documentation/devicetree/bindings/power/apple*
 +F:    Documentation/devicetree/bindings/watchdog/apple,wdt.yaml
  F:    arch/arm64/boot/dts/apple/
  F:    drivers/i2c/busses/i2c-pasemi-core.c
  F:    drivers/i2c/busses/i2c-pasemi-platform.c
  F:    drivers/irqchip/irq-apple-aic.c
  F:    drivers/mailbox/apple-mailbox.c
  F:    drivers/pinctrl/pinctrl-apple-gpio.c
 +F:    drivers/soc/apple/*
  F:    include/dt-bindings/interrupt-controller/apple-aic.h
  F:    include/dt-bindings/pinctrl/apple.h
  F:    include/linux/apple-mailbox.h
@@@ -1913,7 -1890,6 +1913,7 @@@ F:      Documentation/trace/coresight/
  F:    drivers/hwtracing/coresight/*
  F:    include/dt-bindings/arm/coresight-cti-dt.h
  F:    include/linux/coresight*
 +F:    samples/coresight/*
  F:    tools/perf/arch/arm/util/auxtrace.c
  F:    tools/perf/arch/arm/util/cs-etm.c
  F:    tools/perf/arch/arm/util/cs-etm.h
  S:    Maintained
  F:    drivers/counter/microchip-tcb-capture.c
  
 +ARM/MILBEAUT ARCHITECTURE
 +M:    Taichi Sugaya <[email protected]>
 +M:    Takao Orito <[email protected]>
 +L:    [email protected] (moderated for non-subscribers)
 +S:    Maintained
 +F:    arch/arm/boot/dts/milbeaut*
 +F:    arch/arm/mach-milbeaut/
 +N:    milbeaut
 +
  ARM/MIOA701 MACHINE SUPPORT
  M:    Robert Jarzmik <[email protected]>
  L:    [email protected] (moderated for non-subscribers)
@@@ -2315,7 -2282,6 +2315,7 @@@ F:      Documentation/devicetree/bindings/gp
  F:    arch/arm/boot/dts/mstar-*
  F:    arch/arm/mach-mstar/
  F:    drivers/clk/mstar/
 +F:    drivers/clocksource/timer-msc313e.c
  F:    drivers/gpio/gpio-msc313.c
  F:    drivers/rtc/rtc-msc313.c
  F:    drivers/watchdog/msc313e_wdt.c
@@@ -2576,7 -2542,6 +2576,7 @@@ Q:      https://patchwork.kernel.org/project
  F:    Documentation/arm/samsung/
  F:    Documentation/devicetree/bindings/arm/samsung/
  F:    Documentation/devicetree/bindings/power/pd-samsung.yaml
 +F:    Documentation/devicetree/bindings/soc/samsung/
  F:    arch/arm/boot/dts/exynos*
  F:    arch/arm/boot/dts/s3c*
  F:    arch/arm/boot/dts/s5p*
@@@ -2603,7 -2568,7 +2603,7 @@@ N:      s3c64x
  N:    s5pv210
  
  ARM/SAMSUNG S5P SERIES 2D GRAPHICS ACCELERATION (G2D) SUPPORT
 -M:    Andrzej Hajda <a.hajda@samsung.com>
 +M:    Łukasz Stelmach <l.stelmach@samsung.com>
  L:    [email protected] (moderated for non-subscribers)
  L:    [email protected]
  S:    Maintained
@@@ -2627,8 -2592,7 +2627,8 @@@ S:      Maintaine
  F:    drivers/media/platform/s5p-jpeg/
  
  ARM/SAMSUNG S5P SERIES Multi Format Codec (MFC) SUPPORT
 -M:    Andrzej Hajda <[email protected]>
 +M:    Marek Szyprowski <[email protected]>
 +M:    Andrzej Hajda <[email protected]>
  L:    [email protected] (moderated for non-subscribers)
  L:    [email protected]
  S:    Maintained
@@@ -2765,11 -2729,10 +2765,11 @@@ S:   Maintaine
  F:    drivers/memory/*emif*
  
  ARM/TEXAS INSTRUMENT KEYSTONE ARCHITECTURE
 +M:    Nishanth Menon <[email protected]>
  M:    Santosh Shilimkar <[email protected]>
  L:    [email protected] (moderated for non-subscribers)
  S:    Maintained
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/ssantosh/linux-keystone.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/ti/linux.git
  F:    arch/arm/boot/dts/keystone-*
  F:    arch/arm/mach-keystone/
  
  S:    Supported
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/iwamatsu/linux-visconti.git
  F:    Documentation/devicetree/bindings/arm/toshiba.yaml
 +F:    Documentation/devicetree/bindings/clock/toshiba,tmpv770x-pipllct.yaml
 +F:    Documentation/devicetree/bindings/clock/toshiba,tmpv770x-pismu.yaml
  F:    Documentation/devicetree/bindings/net/toshiba,visconti-dwmac.yaml
  F:    Documentation/devicetree/bindings/gpio/toshiba,gpio-visconti.yaml
  F:    Documentation/devicetree/bindings/pci/toshiba,visconti-pcie.yaml
  F:    Documentation/devicetree/bindings/pinctrl/toshiba,visconti-pinctrl.yaml
  F:    Documentation/devicetree/bindings/watchdog/toshiba,visconti-wdt.yaml
  F:    arch/arm64/boot/dts/toshiba/
 +F:    drivers/clk/visconti/
  F:    drivers/net/ethernet/stmicro/stmmac/dwmac-visconti.c
  F:    drivers/gpio/gpio-visconti.c
  F:    drivers/pci/controller/dwc/pcie-visconti.c
@@@ -3028,27 -2988,6 +3028,27 @@@ W:    http://acpi4asus.sf.ne
  F:    drivers/platform/x86/asus*.c
  F:    drivers/platform/x86/eeepc*.c
  
 +ASUS TF103C DOCK DRIVER
 +M:    Hans de Goede <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86.git
 +F:    drivers/platform/x86/asus-tf103c-dock.c
 +
 +ASUS WMI HARDWARE MONITOR DRIVER
 +M:    Ed Brindley <[email protected]>
 +M:    Denis Pauk <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/hwmon/asus_wmi_sensors.c
 +
 +ASUS WMI EC HARDWARE MONITOR DRIVER
 +M:    Eugene Shalygin <[email protected]>
 +M:    Denis Pauk <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/hwmon/asus_wmi_ec_sensors.c
 +
  ASUS WIRELESS RADIO CONTROL DRIVER
  M:    João Paulo Rechi Vita <[email protected]>
  L:    [email protected]
@@@ -3117,7 -3056,7 +3117,7 @@@ F:      Documentation/devicetree/bindings/ph
  F:    drivers/phy/qualcomm/phy-ath79-usb.c
  
  ATHEROS ATH GENERIC UTILITIES
 -M:    Kalle Valo <kvalo@codeaurora.org>
 +M:    Kalle Valo <kvalo@kernel.org>
  L:    [email protected]
  S:    Supported
  F:    drivers/net/wireless/ath/*
@@@ -3132,7 -3071,7 +3132,7 @@@ W:      https://wireless.wiki.kernel.org/en/
  F:    drivers/net/wireless/ath/ath5k/
  
  ATHEROS ATH6KL WIRELESS DRIVER
 -M:    Kalle Valo <kvalo@codeaurora.org>
 +M:    Kalle Valo <kvalo@kernel.org>
  L:    [email protected]
  S:    Supported
  W:    https://wireless.wiki.kernel.org/en/users/Drivers/ath6kl
@@@ -3431,8 -3370,6 +3431,8 @@@ M:      Jens Axboe <[email protected]
  L:    [email protected]
  S:    Maintained
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/axboe/linux-block.git
 +F:    Documentation/ABI/stable/sysfs-block
 +F:    Documentation/block/
  F:    block/
  F:    drivers/block/
  F:    include/linux/blk*
@@@ -3622,7 -3559,7 +3622,7 @@@ R:      Florent Revest <[email protected]
  R:    Brendan Jackman <[email protected]>
  L:    [email protected]
  S:    Maintained
 -F:    Documentation/bpf/bpf_lsm.rst
 +F:    Documentation/bpf/prog_lsm.rst
  F:    include/linux/bpf_lsm.h
  F:    kernel/bpf/bpf_lsm.c
  F:    security/bpf/
  S:    Supported
  F:    drivers/net/ethernet/broadcom/b44.*
  
 -BROADCOM B53 ETHERNET SWITCH DRIVER
 +BROADCOM B53/SF2 ETHERNET SWITCH DRIVER
  M:    Florian Fainelli <[email protected]>
  L:    [email protected]
  L:    [email protected] (subscribers-only)
  S:    Supported
  F:    Documentation/devicetree/bindings/net/dsa/brcm,b53.yaml
  F:    drivers/net/dsa/b53/*
 +F:    drivers/net/dsa/bcm_sf2*
  F:    include/linux/dsa/brcm.h
  F:    include/linux/platform_data/b53.h
  
@@@ -3689,7 -3625,6 +3689,7 @@@ F:      drivers/net/ethernet/broadcom/bcm490
  F:    drivers/net/ethernet/broadcom/unimac.h
  
  BROADCOM BCM5301X ARM ARCHITECTURE
 +M:    Florian Fainelli <[email protected]>
  M:    Hauke Mehrtens <[email protected]>
  M:    Rafał Miłecki <[email protected]>
  M:    [email protected]
@@@ -3701,7 -3636,6 +3701,7 @@@ F:      arch/arm/boot/dts/bcm953012
  F:    arch/arm/mach-bcm/bcm_5301x.c
  
  BROADCOM BCM53573 ARM ARCHITECTURE
 +M:    Florian Fainelli <[email protected]>
  M:    Rafał Miłecki <[email protected]>
  L:    [email protected]
  L:    [email protected] (moderated for non-subscribers)
@@@ -3745,7 -3679,7 +3745,7 @@@ M:      Al Cooper <[email protected]
  L:    [email protected]
  L:    [email protected]
  S:    Maintained
 -F:    Documentation/devicetree/bindings/usb/brcm,bdc.txt
 +F:    Documentation/devicetree/bindings/usb/brcm,bdc.yaml
  F:    drivers/usb/gadget/udc/bdc/
  
  BROADCOM BMIPS CPUFREQ DRIVER
@@@ -3799,7 -3733,7 +3799,7 @@@ F:      drivers/scsi/bnx2i
  BROADCOM BNX2X 10 GIGABIT ETHERNET DRIVER
  M:    Ariel Elior <[email protected]>
  M:    Sudarsana Kalluru <[email protected]>
 -M:    [email protected]
 +M:    Manish Chopra <[email protected]>
  L:    [email protected]
  S:    Supported
  F:    drivers/net/ethernet/broadcom/bnx2x/
@@@ -3824,11 -3758,10 +3824,11 @@@ S:   Supporte
  F:    drivers/net/wireless/broadcom/brcm80211/
  
  BROADCOM BRCMSTB GPIO DRIVER
 -M:    Gregory Fong <[email protected]>
 +M:    Doug Berger <[email protected]>
 +M:    Florian Fainelli <[email protected]>
  L:    [email protected]
  S:    Supported
 -F:    Documentation/devicetree/bindings/gpio/brcm,brcmstb-gpio.txt
 +F:    Documentation/devicetree/bindings/gpio/brcm,brcmstb-gpio.yaml
  F:    drivers/gpio/gpio-brcmstb.c
  
  BROADCOM BRCMSTB I2C DRIVER
@@@ -3886,7 -3819,7 +3886,7 @@@ M:      Florian Fainelli <[email protected]
  L:    [email protected]
  L:    [email protected]
  S:    Supported
 -F:    Documentation/devicetree/bindings/net/brcm,bcmgenet.txt
 +F:    Documentation/devicetree/bindings/net/brcm,bcmgenet.yaml
  F:    Documentation/devicetree/bindings/net/brcm,unimac-mdio.yaml
  F:    drivers/net/ethernet/broadcom/genet/
  F:    drivers/net/ethernet/broadcom/unimac.h
@@@ -3928,7 -3861,7 +3928,7 @@@ M:      Rafał Miłecki <[email protected]
  M:    [email protected]
  L:    [email protected]
  S:    Maintained
 -F:    Documentation/devicetree/bindings/net/brcm,amac.txt
 +F:    Documentation/devicetree/bindings/net/brcm,amac.yaml
  F:    drivers/net/ethernet/broadcom/bgmac*
  F:    drivers/net/ethernet/broadcom/unimac.h
  
@@@ -4003,7 -3936,7 +4003,7 @@@ M:      Markus Mayer <[email protected]
  M:    [email protected]
  L:    [email protected]
  S:    Maintained
 -F:    Documentation/devicetree/bindings/thermal/brcm,avs-tmon.txt
 +F:    Documentation/devicetree/bindings/thermal/brcm,avs-tmon.yaml
  F:    drivers/thermal/broadcom/brcmstb*
  
  BROADCOM STB DPFE DRIVER
@@@ -4039,7 -3972,6 +4039,7 @@@ L:      [email protected]
  S:    Supported
  F:    drivers/net/ethernet/broadcom/bcmsysport.*
  F:    drivers/net/ethernet/broadcom/unimac.h
 +F:    Documentation/devicetree/bindings/net/brcm,systemport.yaml
  
  BROADCOM TG3 GIGABIT ETHERNET DRIVER
  M:    Siva Reddy Kallam <[email protected]>
@@@ -4579,12 -4511,9 +4579,12 @@@ F:    drivers/media/cec/i2c/ch7322.
  CIRRUS LOGIC AUDIO CODEC DRIVERS
  M:    James Schulman <[email protected]>
  M:    David Rhodes <[email protected]>
 +M:    Lucas Tanure <[email protected]>
  L:    [email protected] (moderated for non-subscribers)
  L:    [email protected]
  S:    Maintained
 +F:    Documentation/devicetree/bindings/sound/cirrus,cs*
 +F:    sound/pci/hda/cs*
  F:    sound/soc/codecs/cs*
  
  CIRRUS LOGIC DSP FIRMWARE DRIVER
@@@ -4784,8 -4713,6 +4784,8 @@@ M:      Ian Abbott <[email protected]
  M:    H Hartley Sweeten <[email protected]>
  S:    Odd Fixes
  F:    drivers/comedi/
 +F:    include/linux/comedi/
 +F:    include/uapi/linux/comedi.h
  
  COMMON CLK FRAMEWORK
  M:    Michael Turquette <[email protected]>
@@@ -5484,12 -5411,6 +5484,12 @@@ W:    https://linuxtv.or
  T:    git git://linuxtv.org/media_tree.git
  F:    drivers/media/platform/sti/delta
  
 +DELTA AHE-50DC FAN CONTROL MODULE DRIVER
 +M:    Zev Weiss <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/hwmon/pmbus/delta-ahe50dc-fan.c
 +
  DELTA DPS920AB PSU DRIVER
  M:    Robert Marko <[email protected]>
  L:    [email protected]
@@@ -6117,7 -6038,6 +6117,7 @@@ F:      drivers/gpu/drm/tiny/mi0283qt.
  DRM DRIVER FOR MSM ADRENO GPU
  M:    Rob Clark <[email protected]>
  M:    Sean Paul <[email protected]>
 +R:    Abhinav Kumar <[email protected]>
  L:    [email protected]
  L:    [email protected]
  L:    [email protected]
@@@ -6143,17 -6063,10 +6143,17 @@@ F:   drivers/gpu/drm/panel/panel-novatek-
  
  DRM DRIVER FOR NVIDIA GEFORCE/QUADRO GPUS
  M:    Ben Skeggs <[email protected]>
 +M:    Karol Herbst <[email protected]>
 +M:    Lyude Paul <[email protected]>
  L:    [email protected]
  L:    [email protected]
  S:    Supported
 -T:    git git://github.com/skeggsb/linux
 +W:    https://nouveau.freedesktop.org/
 +Q:    https://patchwork.freedesktop.org/project/nouveau/
 +Q:    https://gitlab.freedesktop.org/drm/nouveau/-/merge_requests
 +B:    https://gitlab.freedesktop.org/drm/nouveau/-/issues
 +C:    irc://irc.oftc.net/nouveau
 +T:    git https://gitlab.freedesktop.org/drm/nouveau.git
  F:    drivers/gpu/drm/nouveau/
  F:    include/uapi/drm/nouveau_drm.h
  
@@@ -6386,7 -6299,7 +6386,7 @@@ F:      Documentation/devicetree/bindings/di
  F:    drivers/gpu/drm/atmel-hlcdc/
  
  DRM DRIVERS FOR BRIDGE CHIPS
 -M:    Andrzej Hajda <a.hajda@samsung.com>
 +M:    Andrzej Hajda <andrzej.hajda@intel.com>
  M:    Neil Armstrong <[email protected]>
  M:    Robert Foss <[email protected]>
  R:    Laurent Pinchart <[email protected]>
@@@ -6493,7 -6406,6 +6493,7 @@@ L:      [email protected]
  L:    [email protected]
  S:    Supported
  T:    git git://linuxtv.org/pinchartl/media drm/du/next
 +F:    Documentation/devicetree/bindings/display/bridge/renesas,dsi-csi2-tx.yaml
  F:    Documentation/devicetree/bindings/display/bridge/renesas,dw-hdmi.yaml
  F:    Documentation/devicetree/bindings/display/bridge/renesas,lvds.yaml
  F:    Documentation/devicetree/bindings/display/renesas,du.yaml
@@@ -6612,14 -6524,6 +6612,14 @@@ F:    drivers/gpu/drm/drm_panel.
  F:    drivers/gpu/drm/panel/
  F:    include/drm/drm_panel.h
  
 +DRM PRIVACY-SCREEN CLASS
 +M:    Hans de Goede <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +T:    git git://anongit.freedesktop.org/drm/drm-misc
 +F:    drivers/gpu/drm/drm_privacy_screen*
 +F:    include/drm/drm_privacy_screen*
 +
  DRM TTM SUBSYSTEM
  M:    Christian Koenig <[email protected]>
  M:    Huang Rui <[email protected]>
@@@ -7097,7 -7001,9 +7097,7 @@@ S:      Maintaine
  F:    drivers/mmc/host/cqhci*
  
  EMULEX 10Gbps iSCSI - OneConnect DRIVER
 -M:    Subbu Seetharaman <[email protected]>
  M:    Ketan Mukadam <[email protected]>
 -M:    Jitendra Bhivare <[email protected]>
  L:    [email protected]
  S:    Supported
  W:    http://www.broadcom.com
@@@ -7417,6 -7323,7 +7417,6 @@@ F:      include/uapi/scsi/fc
  
  FILE LOCKING (flock() and fcntl()/lockf())
  M:    Jeff Layton <[email protected]>
 -M:    "J. Bruce Fields" <[email protected]>
  L:    [email protected]
  S:    Maintained
  F:    fs/fcntl.c
@@@ -7507,6 -7414,12 +7507,6 @@@ F:     Documentation/firmware_class
  F:    drivers/base/firmware_loader/
  F:    include/linux/firmware.h
  
 -FLASH ADAPTER DRIVER (IBM Flash Adapter 900GB Full Height PCI Flash Card)
 -M:    Joshua Morris <[email protected]>
 -M:    Philip Kelleher <[email protected]>
 -S:    Maintained
 -F:    drivers/block/rsxx/
 -
  FLEXTIMER FTM-QUADDEC DRIVER
  M:    Patrick Havelange <[email protected]>
  L:    [email protected]
@@@ -7598,7 -7511,6 +7598,7 @@@ F:      include/video
  FREESCALE CAAM (Cryptographic Acceleration and Assurance Module) DRIVER
  M:    Horia Geantă <[email protected]>
  M:    Pankaj Gupta <[email protected]>
 +M:    Gaurav Jain <[email protected]>
  L:    [email protected]
  S:    Maintained
  F:    Documentation/devicetree/bindings/crypto/fsl-sec4.txt
@@@ -8563,12 -8475,6 +8563,12 @@@ F:    drivers/hid
  F:    include/linux/hid*
  F:    include/uapi/linux/hid*
  
 +HID LOGITECH DRIVERS
 +R:    Filipe Laíns <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/hid/hid-logitech-*
 +
  HID PLAYSTATION DRIVER
  M:    Roderick Colenbrander <[email protected]>
  L:    [email protected]
@@@ -8690,10 -8596,8 +8690,10 @@@ F:    drivers/misc/hisi_hikey_usb.
  
  HISILICON PMU DRIVER
  M:    Shaokun Zhang <[email protected]>
 +M:    Qi Liu <[email protected]>
  S:    Supported
  W:    http://www.hisilicon.com
 +F:    Documentation/admin-guide/perf/hisi-pcie-pmu.rst
  F:    Documentation/admin-guide/perf/hisi-pmu.rst
  F:    drivers/perf/hisilicon
  
@@@ -8724,7 -8628,6 +8724,7 @@@ F:      drivers/scsi/hisi_sas
  
  HISILICON SECURITY ENGINE V2 DRIVER (SEC2)
  M:    Zaibo Xu <[email protected]>
 +M:    Kai Ye <[email protected]>
  L:    [email protected]
  S:    Maintained
  F:    Documentation/ABI/testing/debugfs-hisi-sec
@@@ -9415,6 -9318,7 +9415,6 @@@ S:      Maintaine
  F:    drivers/iio/pressure/dps310.c
  
  INFINIBAND SUBSYSTEM
 -M:    Doug Ledford <[email protected]>
  M:    Jason Gunthorpe <[email protected]>
  L:    [email protected]
  S:    Supported
@@@ -9575,7 -9479,6 +9575,7 @@@ INTEL DRM DRIVERS (excluding Poulsbo, M
  M:    Jani Nikula <[email protected]>
  M:    Joonas Lahtinen <[email protected]>
  M:    Rodrigo Vivi <[email protected]>
 +M:    Tvrtko Ursulin <[email protected]>
  L:    [email protected]
  S:    Supported
  W:    https://01.org/linuxgraphics/
@@@ -9770,6 -9673,7 +9770,6 @@@ F:      Documentation/devicetree/bindings/cr
  F:    drivers/crypto/keembay/Kconfig
  F:    drivers/crypto/keembay/Makefile
  F:    drivers/crypto/keembay/keembay-ocs-ecc.c
 -F:    drivers/crypto/keembay/ocs-ecc-curve-defs.h
  
  INTEL KEEM BAY OCS HCU CRYPTO DRIVER
  M:    Daniele Alessandrelli <[email protected]>
@@@ -9782,13 -9686,6 +9782,13 @@@ F:    drivers/crypto/keembay/keembay-ocs-h
  F:    drivers/crypto/keembay/ocs-hcu.c
  F:    drivers/crypto/keembay/ocs-hcu.h
  
 +INTEL THUNDER BAY EMMC PHY DRIVER
 +M:    Nandhini Srikandan <[email protected]>
 +M:    Rashmi A <[email protected]>
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/phy/intel,phy-thunderbay-emmc.yaml
 +F:    drivers/phy/intel/phy-intel-thunderbay-emmc.c
 +
  INTEL MANAGEMENT ENGINE (mei)
  M:    Tomas Winkler <[email protected]>
  L:    [email protected]
@@@ -9844,9 -9741,10 +9844,9 @@@ S:     Maintaine
  F:    drivers/mfd/intel_soc_pmic*
  F:    include/linux/mfd/intel_soc_pmic*
  
 -INTEL PMT DRIVER
 -M:    "David E. Box" <[email protected]>
 -S:    Maintained
 -F:    drivers/mfd/intel_pmt.c
 +INTEL PMT DRIVERS
 +M:    David E. Box <[email protected]>
 +S:    Supported
  F:    drivers/platform/x86/intel/pmt/
  
  INTEL PRO/WIRELESS 2100, 2200BG, 2915ABG NETWORK CONNECTION SUPPORT
  S:    Maintained
  F:    drivers/platform/x86/intel/uncore-frequency.c
  
 +INTEL VENDOR SPECIFIC EXTENDED CAPABILITIES DRIVER
 +M:    David E. Box <[email protected]>
 +S:    Supported
 +F:    drivers/platform/x86/intel/vsec.*
 +
  INTEL VIRTUAL BUTTON DRIVER
  M:    AceLan Kao <[email protected]>
  L:    [email protected]
@@@ -10376,9 -10269,9 +10376,9 @@@ F:   lib/Kconfig.kcsa
  F:    scripts/Makefile.kcsan
  
  KDUMP
 -M:    Dave Young <[email protected]>
  M:    Baoquan He <[email protected]>
  R:    Vivek Goyal <[email protected]>
 +R:    Dave Young <[email protected]>
  L:    [email protected]
  S:    Maintained
  W:    http://lse.sourceforge.net/kdump/
@@@ -10427,11 -10320,12 +10427,11 @@@ S:        Odd Fixe
  W:    http://kernelnewbies.org/KernelJanitors
  
  KERNEL NFSD, SUNRPC, AND LOCKD SERVERS
 -M:    "J. Bruce Fields" <[email protected]>
  M:    Chuck Lever <[email protected]>
  L:    [email protected]
  S:    Supported
  W:    http://nfs.sourceforge.net/
 -T:    git git://linux-nfs.org/~bfields/linux.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/cel/linux.git
  F:    fs/lockd/
  F:    fs/nfs_common/
  F:    fs/nfsd/
@@@ -10551,7 -10445,7 +10551,7 @@@ F:   arch/riscv/include/uapi/asm/kvm
  F:    arch/riscv/kvm/
  
  KERNEL VIRTUAL MACHINE for s390 (KVM/s390)
 -M:    Christian Borntraeger <borntraeger@de.ibm.com>
 +M:    Christian Borntraeger <borntraeger@linux.ibm.com>
  M:    Janosch Frank <[email protected]>
  R:    David Hildenbrand <[email protected]>
  R:    Claudio Imbrenda <[email protected]>
@@@ -10841,13 -10735,6 +10841,13 @@@ S: Maintaine
  W:    http://legousb.sourceforge.net/
  F:    drivers/usb/misc/legousbtower.c
  
 +LETSKETCH HID TABLET DRIVER
 +M:    Hans de Goede <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/hid/hid.git
 +F:    drivers/hid/hid-letsketch.c
 +
  LG LAPTOP EXTRAS
  M:    Matan Ziv-Av <[email protected]>
  L:    [email protected]
@@@ -11636,12 -11523,6 +11636,12 @@@ S: Maintaine
  F:    Documentation/devicetree/bindings/media/i2c/maxim,max9286.yaml
  F:    drivers/media/i2c/max9286.c
  
 +MAX96712 QUAD GMSL2 DESERIALIZER DRIVER
 +M:    Niklas Söderlund <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/staging/media/max96712/max96712.c
 +
  MAX9860 MONO AUDIO VOICE CODEC DRIVER
  M:    Peter Rosin <[email protected]>
  L:    [email protected] (moderated for non-subscribers)
@@@ -11677,13 -11558,6 +11677,13 @@@ S: Maintaine
  F:    Documentation/devicetree/bindings/power/supply/maxim,max17042.yaml
  F:    drivers/power/supply/max17042_battery.c
  
 +MAXIM MAX20086 CAMERA POWER PROTECTOR DRIVER
 +M:    Laurent Pinchart <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/regulator/maxim,max20086.yaml
 +F:    drivers/regulator/max20086-regulator.c
 +
  MAXIM MAX77650 PMIC MFD DRIVER
  M:    Bartosz Golaszewski <[email protected]>
  L:    [email protected]
@@@ -11706,12 -11580,6 +11706,12 @@@ F: Documentation/devicetree/bindings/*/
  F:    drivers/regulator/max77802-regulator.c
  F:    include/dt-bindings/*/*max77802.h
  
 +MAXIM MAX77976 BATTERY CHARGER
 +M:    Luca Ceresoli <[email protected]>
 +S:    Supported
 +F:    Documentation/devicetree/bindings/power/supply/maxim,max77976.yaml
 +F:    drivers/power/supply/max77976_charger.c
 +
  MAXIM MUIC CHARGER DRIVERS FOR EXYNOS BASED BOARDS
  M:    Krzysztof Kozlowski <[email protected]>
  M:    Bartlomiej Zolnierkiewicz <[email protected]>
@@@ -11726,7 -11594,7 +11726,7 @@@ M:   Krzysztof Kozlowski <krzysztof.kozlo
  M:    Bartlomiej Zolnierkiewicz <[email protected]>
  L:    [email protected]
  S:    Supported
 -F:    Documentation/devicetree/bindings/*/max77686.txt
 +F:    Documentation/devicetree/bindings/*/maxim,max77686.yaml
  F:    Documentation/devicetree/bindings/clock/maxim,max77686.txt
  F:    Documentation/devicetree/bindings/mfd/max14577.txt
  F:    Documentation/devicetree/bindings/mfd/max77693.txt
@@@ -12301,8 -12169,8 +12301,8 @@@ F:   drivers/net/ethernet/mellanox/mlx5/c
  F:    include/linux/mlx5/mlx5_ifc_fpga.h
  
  MELLANOX ETHERNET SWITCH DRIVERS
 -M:    Jiri Pirko <[email protected]>
  M:    Ido Schimmel <[email protected]>
 +M:    Petr Machata <[email protected]>
  L:    [email protected]
  S:    Supported
  W:    http://www.mellanox.com
  S:    Maintained
  F:    drivers/net/ethernet/microchip/lan743x_*
  
 +MICROCHIP LAN966X ETHERNET DRIVER
 +M:    Horatiu Vultur <[email protected]>
 +M:    [email protected]
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/net/ethernet/microchip/lan966x/*
 +
  MICROCHIP LCDFB DRIVER
  M:    Nicolas Ferre <[email protected]>
  L:    [email protected]
@@@ -13377,7 -13238,7 +13377,7 @@@ F:   include/uapi/linux/if_
  F:    include/uapi/linux/netdevice.h
  
  NETWORKING DRIVERS (WIRELESS)
 -M:    Kalle Valo <kvalo@codeaurora.org>
 +M:    Kalle Valo <kvalo@kernel.org>
  L:    [email protected]
  S:    Maintained
  Q:    http://patchwork.kernel.org/project/linux-wireless/list/
@@@ -13835,24 -13696,12 +13835,24 @@@ F:        Documentation/devicetree/bindings/di
  F:    drivers/gpu/drm/imx/dcss/
  
  NXP i.MX 8QXP ADC DRIVER
 -M:    Cai Huoqing <[email protected]>
 +M:    Cai Huoqing <[email protected]>
 +M:    Haibo Chen <[email protected]>
 +L:    [email protected]
  L:    [email protected]
 -S:    Supported
 +S:    Maintained
  F:    Documentation/devicetree/bindings/iio/adc/nxp,imx8qxp-adc.yaml
  F:    drivers/iio/adc/imx8qxp-adc.c
  
 +NXP i.MX 7D/6SX/6UL AND VF610 ADC DRIVER
 +M:    Haibo Chen <[email protected]>
 +L:    [email protected]
 +L:    [email protected]
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/iio/adc/fsl,imx7d-adc.yaml
 +F:    Documentation/devicetree/bindings/iio/adc/fsl,vf610-adc.yaml
 +F:    drivers/iio/adc/imx7d_adc.c
 +F:    drivers/iio/adc/vf610_adc.c
 +
  NXP PF8100/PF8121A/PF8200 PMIC REGULATOR DEVICE DRIVER
  M:    Jagan Teki <[email protected]>
  S:    Maintained
@@@ -13926,13 -13775,6 +13926,13 @@@ S: Maintaine
  F:    Documentation/hwmon/nzxt-kraken2.rst
  F:    drivers/hwmon/nzxt-kraken2.c
  
 +NZXT-SMART2 HARDWARE MONITORING DRIVER
 +M:    Aleksandr Mezin <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    Documentation/hwmon/nzxt-smart2.rst
 +F:    drivers/hwmon/nzxt-smart2.c
 +
  OBJAGG
  M:    Jiri Pirko <[email protected]>
  L:    [email protected]
@@@ -14245,6 -14087,7 +14245,6 @@@ F:   drivers/media/i2c/ov5647.
  
  OMNIVISION OV5670 SENSOR DRIVER
  M:    Chiranjeevi Rapolu <[email protected]>
 -M:    Hyungwoo Yang <[email protected]>
  L:    [email protected]
  S:    Maintained
  T:    git git://linuxtv.org/media_tree.git
@@@ -14257,13 -14100,6 +14257,13 @@@ S: Maintaine
  T:    git git://linuxtv.org/media_tree.git
  F:    drivers/media/i2c/ov5675.c
  
 +OMNIVISION OV5693 SENSOR DRIVER
 +M:    Daniel Scally <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +T:    git git://linuxtv.org/media_tree.git
 +F:    drivers/media/i2c/ov5693.c
 +
  OMNIVISION OV5695 SENSOR DRIVER
  M:    Shunqian Zheng <[email protected]>
  L:    [email protected]
@@@ -14540,15 -14376,6 +14540,15 @@@ F: include/net/page_pool.
  F:    include/trace/events/page_pool.h
  F:    net/core/page_pool.c
  
 +PAGE TABLE CHECK
 +M:    Pasha Tatashin <[email protected]>
 +M:    Andrew Morton <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    Documentation/vm/page_table_check.rst
 +F:    include/linux/page_table_check.h
 +F:    mm/page_table_check.c
 +
  PANASONIC LAPTOP ACPI EXTRAS DRIVER
  M:    Kenneth Chan <[email protected]>
  L:    [email protected]
  S:    Supported
  F:    Documentation/PCI/pci-error-recovery.rst
  
+ PCI PEER-TO-PEER DMA (P2PDMA)
+ M:    Bjorn Helgaas <[email protected]>
+ M:    Logan Gunthorpe <[email protected]>
+ L:    [email protected]
+ S:    Supported
+ Q:    https://patchwork.kernel.org/project/linux-pci/list/
+ B:    https://bugzilla.kernel.org
+ C:    irc://irc.oftc.net/linux-pci
+ T:    git git://git.kernel.org/pub/scm/linux/kernel/git/helgaas/pci.git
+ F:    Documentation/driver-api/pci/p2pdma.rst
+ F:    drivers/pci/p2pdma.c
+ F:    include/linux/pci-p2pdma.h
  PCI MSI DRIVER FOR ALTERA MSI IP
  M:    Joyce Ooi <[email protected]>
  L:    [email protected]
@@@ -15008,7 -14848,7 +15021,7 @@@ PCIE DRIVER FOR MEDIATE
  M:    Ryder Lee <[email protected]>
  M:    Jianjun Wang <[email protected]>
  L:    [email protected]
 -L:    [email protected]
 +L:    [email protected] (moderated for non-subscribers)
  S:    Supported
  F:    Documentation/devicetree/bindings/pci/mediatek*
  F:    drivers/pci/controller/*mediatek*
@@@ -15059,7 -14899,7 +15072,7 @@@ F:   drivers/pci/controller/dwc/*spear
  PCMCIA SUBSYSTEM
  M:    Dominik Brodowski <[email protected]>
  S:    Odd Fixes
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/brodo/pcmcia.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/brodo/linux.git
  F:    Documentation/pcmcia/
  F:    drivers/pcmcia/
  F:    include/pcmcia/
  S:    Maintained
  F:    drivers/pinctrl/pinctrl-single.c
  
 +PIN CONTROLLER - THUNDERBAY
 +M:    Lakshmi Sowjanya D <[email protected]>
 +S:    Supported
 +F:    drivers/pinctrl/pinctrl-thunderbay.c
 +
  PKTCDVD DRIVER
  M:    [email protected]
  S:    Orphan
@@@ -15507,7 -15342,6 +15520,7 @@@ M:   Sergey Senozhatsky <senozhatsky@chro
  R:    Steven Rostedt <[email protected]>
  R:    John Ogness <[email protected]>
  S:    Maintained
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/printk/linux.git
  F:    include/linux/printk.h
  F:    kernel/printk/
  
@@@ -15772,7 -15606,7 +15785,7 @@@ F:   drivers/scsi/qedi
  
  QLOGIC QL4xxx ETHERNET DRIVER
  M:    Ariel Elior <[email protected]>
 -M:    [email protected]
 +M:    Manish Chopra <[email protected]>
  L:    [email protected]
  S:    Supported
  F:    drivers/net/ethernet/qlogic/qed/
@@@ -15873,7 -15707,7 +15886,7 @@@ T:   git git://linuxtv.org/anttip/media_t
  F:    drivers/media/tuners/qt1010*
  
  QUALCOMM ATHEROS ATH10K WIRELESS DRIVER
 -M:    Kalle Valo <kvalo@codeaurora.org>
 +M:    Kalle Valo <kvalo@kernel.org>
  L:    [email protected]
  S:    Supported
  W:    https://wireless.wiki.kernel.org/en/users/Drivers/ath10k
@@@ -15881,7 -15715,7 +15894,7 @@@ T:   git git://git.kernel.org/pub/scm/lin
  F:    drivers/net/wireless/ath/ath10k/
  
  QUALCOMM ATHEROS ATH11K WIRELESS DRIVER
 -M:    Kalle Valo <kvalo@codeaurora.org>
 +M:    Kalle Valo <kvalo@kernel.org>
  L:    [email protected]
  S:    Supported
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/kvalo/ath.git
@@@ -15895,14 -15729,6 +15908,14 @@@ W: https://wireless.wiki.kernel.org/en/
  F:    Documentation/devicetree/bindings/net/wireless/qca,ath9k.yaml
  F:    drivers/net/wireless/ath/ath9k/
  
 +QUALCOMM BAM-DMUX WWAN NETWORK DRIVER
 +M:    Stephan Gerhold <[email protected]>
 +L:    [email protected]
 +L:    [email protected]
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/net/qcom,bam-dmux.yaml
 +F:    drivers/net/wwan/qcom_bam_dmux.c
 +
  QUALCOMM CAMERA SUBSYSTEM DRIVER
  M:    Robert Foss <[email protected]>
  M:    Todor Tomov <[email protected]>
@@@ -15912,15 -15738,6 +15925,15 @@@ F: Documentation/admin-guide/media/qcom
  F:    Documentation/devicetree/bindings/media/*camss*
  F:    drivers/media/platform/qcom/camss/
  
 +QUALCOMM CLOCK DRIVERS
 +M:    Bjorn Andersson <[email protected]>
 +L:    [email protected]
 +S:    Supported
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/qcom/linux.git
 +F:    Documentation/devicetree/bindings/clock/qcom,*
 +F:    drivers/clk/qcom/
 +F:    include/dt-bindings/clock/qcom,*
 +
  QUALCOMM CORE POWER REDUCTION (CPR) AVS DRIVER
  M:    Niklas Cassel <[email protected]>
  L:    [email protected]
@@@ -15956,15 -15773,6 +15969,15 @@@ S: Maintaine
  F:    Documentation/devicetree/bindings/net/qcom,ethqos.txt
  F:    drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c
  
 +QUALCOMM FASTRPC DRIVER
 +M:    Srinivas Kandagatla <[email protected]>
 +M:    Amol Maheshwari <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/misc/qcom,fastrpc.txt
 +F:    drivers/misc/fastrpc.c
 +F:    include/uapi/misc/fastrpc.h
 +
  QUALCOMM GENERIC INTERFACE I2C DRIVER
  M:    Akash Asthana <[email protected]>
  M:    Mukesh Savaliya <[email protected]>
@@@ -16071,7 -15879,7 +16084,7 @@@ F:   Documentation/devicetree/bindings/me
  F:    drivers/media/platform/qcom/venus/
  
  QUALCOMM WCN36XX WIRELESS DRIVER
 -M:    Kalle Valo <kvalo@codeaurora.org>
 +M:    Kalle Valo <kvalo@kernel.org>
  L:    [email protected]
  S:    Supported
  W:    https://wireless.wiki.kernel.org/en/users/Drivers/wcn36xx
@@@ -16173,8 -15981,6 +16186,8 @@@ F:   arch/mips/generic/board-ranchu.
  
  RANDOM NUMBER DRIVER
  M:    "Theodore Ts'o" <[email protected]>
 +M:    Jason A. Donenfeld <[email protected]>
 +T:    git https://git.kernel.org/pub/scm/linux/kernel/git/crng/random.git
  S:    Maintained
  F:    drivers/char/random.c
  
@@@ -16482,14 -16288,6 +16495,14 @@@ S: Supporte
  F:    Documentation/devicetree/bindings/iio/adc/renesas,rzg2l-adc.yaml
  F:    drivers/iio/adc/rzg2l_adc.c
  
 +RENESAS R-CAR GEN3 & RZ/N1 NAND CONTROLLER DRIVER
 +M:    Miquel Raynal <[email protected]>
 +L:    [email protected]
 +L:    [email protected]
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/mtd/renesas-nandc.yaml
 +F:    drivers/mtd/nand/raw/renesas-nand-controller.c
 +
  RESET CONTROLLER FRAMEWORK
  M:    Philipp Zabel <[email protected]>
  S:    Maintained
@@@ -16660,19 -16458,27 +16673,19 @@@ ROHM POWER MANAGEMENT IC DEVICE DRIVER
  R:    Matti Vaittinen <[email protected]>
  L:    [email protected]
  S:    Supported
 -F:    Documentation/devicetree/bindings/mfd/rohm,bd70528-pmic.txt
 -F:    Documentation/devicetree/bindings/regulator/rohm,bd70528-regulator.txt
  F:    drivers/clk/clk-bd718x7.c
 -F:    drivers/gpio/gpio-bd70528.c
  F:    drivers/gpio/gpio-bd71815.c
  F:    drivers/gpio/gpio-bd71828.c
 -F:    drivers/mfd/rohm-bd70528.c
  F:    drivers/mfd/rohm-bd71828.c
  F:    drivers/mfd/rohm-bd718x7.c
  F:    drivers/mfd/rohm-bd9576.c
 -F:    drivers/power/supply/bd70528-charger.c
 -F:    drivers/regulator/bd70528-regulator.c
  F:    drivers/regulator/bd71815-regulator.c
  F:    drivers/regulator/bd71828-regulator.c
  F:    drivers/regulator/bd718x7-regulator.c
  F:    drivers/regulator/bd9576-regulator.c
  F:    drivers/regulator/rohm-regulator.c
  F:    drivers/rtc/rtc-bd70528.c
 -F:    drivers/watchdog/bd70528_wdt.c
  F:    drivers/watchdog/bd9576_wdt.c
 -F:    include/linux/mfd/rohm-bd70528.h
  F:    include/linux/mfd/rohm-bd71815.h
  F:    include/linux/mfd/rohm-bd71828.h
  F:    include/linux/mfd/rohm-bd718x7.h
@@@ -16697,12 -16503,6 +16710,12 @@@ T: git git://linuxtv.org/media_tree.gi
  F:    Documentation/devicetree/bindings/media/allwinner,sun8i-a83t-de2-rotate.yaml
  F:    drivers/media/platform/sunxi/sun8i-rotate/
  
 +RPMSG TTY DRIVER
 +M:    Arnaud Pouliquen <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/tty/rpmsg_tty.c
 +
  RTL2830 MEDIA DRIVER
  M:    Antti Palosaari <[email protected]>
  L:    [email protected]
@@@ -16786,7 -16586,7 +16799,7 @@@ F:   drivers/video/fbdev/savage
  S390
  M:    Heiko Carstens <[email protected]>
  M:    Vasily Gorbik <[email protected]>
 -M:    Christian Borntraeger <borntraeger@de.ibm.com>
 +M:    Christian Borntraeger <borntraeger@linux.ibm.com>
  R:    Alexander Gordeev <[email protected]>
  L:    [email protected]
  S:    Supported
@@@ -16824,8 -16624,8 +16837,8 @@@ W:   http://www.ibm.com/developerworks/li
  F:    drivers/iommu/s390-iommu.c
  
  S390 IUCV NETWORK LAYER
 -M:    Julian Wiedmann <jwi@linux.ibm.com>
 -M:    Karsten Graul <kgraul@linux.ibm.com>
 +M:    Alexandra Winter <wintera@linux.ibm.com>
 +M:    Wenjia Zhang <wenjia@linux.ibm.com>
  L:    [email protected]
  L:    [email protected]
  S:    Supported
@@@ -16835,8 -16635,8 +16848,8 @@@ F:   include/net/iucv
  F:    net/iucv/
  
  S390 NETWORK DRIVERS
 -M:    Julian Wiedmann <jwi@linux.ibm.com>
 -M:    Karsten Graul <kgraul@linux.ibm.com>
 +M:    Alexandra Winter <wintera@linux.ibm.com>
 +M:    Wenjia Zhang <wenjia@linux.ibm.com>
  L:    [email protected]
  L:    [email protected]
  S:    Supported
@@@ -17023,15 -16823,13 +17036,15 @@@ F:        Documentation/devicetree/bindings/ne
  F:    drivers/nfc/s3fwrn5
  
  SAMSUNG S5C73M3 CAMERA DRIVER
 -M:    Andrzej Hajda <[email protected]>
 +M:    Sylwester Nawrocki <[email protected]>
 +M:    Andrzej Hajda <[email protected]>
  L:    [email protected]
  S:    Supported
  F:    drivers/media/i2c/s5c73m3/*
  
  SAMSUNG S5K5BAF CAMERA DRIVER
 -M:    Andrzej Hajda <[email protected]>
 +M:    Sylwester Nawrocki <[email protected]>
 +M:    Andrzej Hajda <[email protected]>
  L:    [email protected]
  S:    Supported
  F:    drivers/media/i2c/s5k5baf.c
@@@ -17060,8 -16858,10 +17073,8 @@@ M:  Chanwoo Choi <[email protected]
  L:    [email protected]
  S:    Supported
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/snawrocki/clk.git
 -F:    Documentation/devicetree/bindings/clock/exynos*.txt
  F:    Documentation/devicetree/bindings/clock/samsung,*.yaml
  F:    Documentation/devicetree/bindings/clock/samsung,s3c*
 -F:    Documentation/devicetree/bindings/clock/samsung,s5p*
  F:    drivers/clk/samsung/
  F:    include/dt-bindings/clock/exynos*.h
  F:    include/dt-bindings/clock/s3c*.h
  S:    Maintained
  F:    drivers/mmc/host/sdhci-omap.c
  
 +SECURE DIGITAL HOST CONTROLLER INTERFACE (SDHCI) NXP i.MX DRIVER
 +M:    Haibo Chen <[email protected]>
 +L:    [email protected]
 +L:    [email protected]
 +S:    Maintained
 +F:    drivers/mmc/host/sdhci-esdhc-imx.c
 +
  SECURE ENCRYPTING DEVICE (SED) OPAL DRIVER
  M:    Jonathan Derrick <[email protected]>
  M:    Revanth Rajashekar <[email protected]>
@@@ -17617,7 -17410,7 +17630,7 @@@ F:   drivers/video/fbdev/sm712
  SILVACO I3C DUAL-ROLE MASTER
  M:    Miquel Raynal <[email protected]>
  M:    Conor Culhane <[email protected]>
 -L:    [email protected]
 +L:    [email protected] (moderated for non-subscribers)
  S:    Maintained
  F:    Documentation/devicetree/bindings/i3c/silvaco,i3c-master.yaml
  F:    drivers/i3c/master/svc-i3c-master.c
@@@ -17860,17 -17653,12 +17873,17 @@@ F:        drivers/firmware/arm_sdei.
  F:    include/linux/arm_sdei.h
  F:    include/uapi/linux/arm_sdei.h
  
 -SOFTWARE NODES
 +SOFTWARE NODES AND DEVICE PROPERTIES
  R:    Andy Shevchenko <[email protected]>
 +R:    Daniel Scally <[email protected]>
  R:    Heikki Krogerus <[email protected]>
 +R:    Sakari Ailus <[email protected]>
  L:    [email protected]
  S:    Maintained
 +F:    drivers/base/property.c
  F:    drivers/base/swnode.c
 +F:    include/linux/fwnode.h
 +F:    include/linux/property.h
  
  SOFTWARE RAID (Multiple Disks) SUPPORT
  M:    Song Liu <[email protected]>
@@@ -18030,7 -17818,6 +18043,7 @@@ F:   Documentation/sound
  F:    include/sound/
  F:    include/uapi/sound/
  F:    sound/
 +F:    tools/testing/selftests/alsa
  
  SOUND - COMPRESSED AUDIO
  M:    Vinod Koul <[email protected]>
@@@ -18050,13 -17837,6 +18063,13 @@@ F: include/sound/dmaengine_pcm.
  F:    sound/core/pcm_dmaengine.c
  F:    sound/soc/soc-generic-dmaengine-pcm.c
  
 +SOUND - ALSA SELFTESTS
 +M:    Mark Brown <[email protected]>
 +L:    [email protected] (moderated for non-subscribers)
 +L:    [email protected]
 +S:    Supported
 +F:    tools/testing/selftests/alsa
 +
  SOUND - SOC LAYER / DYNAMIC AUDIO POWER MANAGEMENT (ASoC)
  M:    Liam Girdwood <[email protected]>
  M:    Mark Brown <[email protected]>
@@@ -18163,8 -17943,8 +18176,8 @@@ F:   drivers/pinctrl/spear
  
  SPI NOR SUBSYSTEM
  M:    Tudor Ambarus <[email protected]>
 +M:    Pratyush Yadav <[email protected]>
  R:    Michael Walle <[email protected]>
 -R:    Pratyush Yadav <[email protected]>
  L:    [email protected]
  S:    Maintained
  W:    http://www.linux-mtd.infradead.org/
@@@ -18363,28 -18143,6 +18376,28 @@@ M: Ion Badulescu <[email protected]
  S:    Odd Fixes
  F:    drivers/net/ethernet/adaptec/starfire*
  
 +STARFIVE JH7100 CLOCK DRIVER
 +M:    Emil Renner Berthing <[email protected]>
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/clock/starfive,jh7100-clkgen.yaml
 +F:    drivers/clk/starfive/clk-starfive-jh7100.c
 +F:    include/dt-bindings/clock/starfive-jh7100.h
 +
 +STARFIVE JH7100 PINCTRL DRIVER
 +M:    Emil Renner Berthing <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/pinctrl/starfive,jh7100-pinctrl.yaml
 +F:    drivers/pinctrl/pinctrl-starfive.c
 +F:    include/dt-bindings/pinctrl/pinctrl-starfive.h
 +
 +STARFIVE JH7100 RESET CONTROLLER DRIVER
 +M:    Emil Renner Berthing <[email protected]>
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/reset/starfive,jh7100-reset.yaml
 +F:    drivers/reset/reset-starfive-jh7100.c
 +F:    include/dt-bindings/reset/starfive-jh7100.h
 +
  STATIC BRANCH/CALL
  M:    Peter Zijlstra <[email protected]>
  M:    Josh Poimboeuf <[email protected]>
@@@ -18546,7 -18304,6 +18559,7 @@@ M:   Vineet Gupta <[email protected]
  L:    [email protected]
  S:    Supported
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/vgupta/arc.git
 +F:    Documentation/arc/
  F:    Documentation/devicetree/bindings/arc/*
  F:    Documentation/devicetree/bindings/interrupt-controller/snps,arc*
  F:    arch/arc/
@@@ -18739,7 -18496,6 +18752,7 @@@ F:   include/uapi/linux/pkt_sched.
  F:    include/uapi/linux/tc_act/
  F:    include/uapi/linux/tc_ematch/
  F:    net/sched/
 +F:    tools/testing/selftests/tc-testing
  
  TC90522 MEDIA DRIVER
  M:    Akihiro Tsukada <[email protected]>
@@@ -19288,12 -19044,11 +19301,12 @@@ F:        drivers/mmc/host/tifm_sd.
  F:    include/linux/tifm.h
  
  TI KEYSTONE MULTICORE NAVIGATOR DRIVERS
 +M:    Nishanth Menon <[email protected]>
  M:    Santosh Shilimkar <[email protected]>
  L:    [email protected]
  L:    [email protected] (moderated for non-subscribers)
  S:    Maintained
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/ssantosh/linux-keystone.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/ti/linux.git
  F:    drivers/soc/ti/*
  
  TI LM49xxx FAMILY ASoC CODEC DRIVERS
@@@ -19564,6 -19319,12 +19577,6 @@@ W:  https://github.com/srcres258/linux-d
  T:    git git://github.com/srcres258/linux-doc.git doc-zh-tw
  F:    Documentation/translations/zh_TW/
  
 -TRIVIAL PATCHES
 -M:    Jiri Kosina <[email protected]>
 -S:    Maintained
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/jikos/trivial.git
 -K:    ^Subject:.*(?i)trivial
 -
  TTY LAYER
  M:    Greg Kroah-Hartman <[email protected]>
  M:    Jiri Slaby <[email protected]>
@@@ -19668,7 -19429,6 +19681,7 @@@ S:   Supporte
  W:    http://www.linux-mtd.infradead.org/doc/ubifs.html
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/rw/ubifs.git next
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/rw/ubifs.git fixes
 +F:    Documentation/ABI/testing/sysfs-fs-ubifs
  F:    Documentation/filesystems/ubifs-authentication.rst
  F:    Documentation/filesystems/ubifs.rst
  F:    fs/ubifs/
@@@ -20420,8 -20180,6 +20433,8 @@@ F:   include/uapi/linux/virtio_gpio.
  VIRTIO GPU DRIVER
  M:    David Airlie <[email protected]>
  M:    Gerd Hoffmann <[email protected]>
 +R:    Gurchetan Singh <[email protected]>
 +R:    Chia-I Wu <[email protected]>
  L:    [email protected]
  L:    [email protected]
  S:    Maintained
@@@ -20572,8 -20330,7 +20585,8 @@@ F:   arch/x86/include/asm/vmware.
  F:    arch/x86/kernel/cpu/vmware.c
  
  VMWARE PVRDMA DRIVER
 -M:    Adit Ranadive <[email protected]>
 +M:    Bryan Tan <[email protected]>
 +M:    Vishnu Dasa <[email protected]>
  M:    VMware PV-Drivers <[email protected]>
  L:    [email protected]
  S:    Maintained
@@@ -20655,7 -20412,7 +20668,7 @@@ M:   Sergey Senozhatsky <senozhatsky@chro
  R:    Andy Shevchenko <[email protected]>
  R:    Rasmus Villemoes <[email protected]>
  S:    Maintained
 -T:    git git://git.kernel.org/pub/scm/linux/kernel/git/pmladek/printk.git
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/printk/linux.git
  F:    Documentation/core-api/printk-formats.rst
  F:    lib/test_printf.c
  F:    lib/test_scanf.c
@@@ -20923,13 -20680,6 +20936,13 @@@ S: Maintaine
  T:    git git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip.git x86/mm
  F:    arch/x86/mm/
  
 +X86 PLATFORM ANDROID TABLETS DSDT FIXUP DRIVER
 +M:    Hans de Goede <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +T:    git git://git.kernel.org/pub/scm/linux/kernel/git/pdx86/platform-drivers-x86.git
 +F:    drivers/platform/x86/x86-android-tablets.c
 +
  X86 PLATFORM DRIVERS
  M:    Hans de Goede <[email protected]>
  M:    Mark Gross <[email protected]>
@@@ -21093,14 -20843,6 +21106,14 @@@ F: drivers/scsi/xen-scsifront.
  F:    drivers/xen/xen-scsiback.c
  F:    include/xen/interface/io/vscsiif.h
  
 +XEN PVUSB DRIVER
 +M:    Juergen Gross <[email protected]>
 +L:    [email protected] (moderated for non-subscribers)
 +L:    [email protected]
 +S:    Supported
 +F:    drivers/usb/host/xen*
 +F:    include/xen/interface/io/usbif.h
 +
  XEN SOUND FRONTEND DRIVER
  M:    Oleksandr Andrushchenko <[email protected]>
  L:    [email protected] (moderated for non-subscribers)
@@@ -21133,13 -20875,6 +21146,13 @@@ F: fs/xfs
  F:    include/uapi/linux/dqblk_xfs.h
  F:    include/uapi/linux/fsmap.h
  
 +XILINX AMS DRIVER
 +M:    Anand Ashok Dumbre <[email protected]>
 +L:    [email protected]
 +S:    Maintained
 +F:    Documentation/devicetree/bindings/iio/adc/xlnx,zynqmp-ams.yaml
 +F:    drivers/iio/adc/xilinx-ams.c
 +
  XILINX AXI ETHERNET DRIVER
  M:    Radhey Shyam Pandey <[email protected]>
  S:    Maintained
@@@ -21208,12 -20943,6 +21221,12 @@@ T: git https://github.com/Xilinx/linux-
  F:    Documentation/devicetree/bindings/phy/xlnx,zynqmp-psgtr.yaml
  F:    drivers/phy/xilinx/phy-zynqmp.c
  
 +XILINX EVENT MANAGEMENT DRIVER
 +M:    Abhyuday Godhasara <[email protected]>
 +S:    Maintained
 +F:    drivers/soc/xilinx/xlnx_event_manager.c
 +F:    include/linux/firmware/xlnx-event-manager.h
 +
  XILLYBUS DRIVER
  M:    Eli Billauer <[email protected]>
  L:    [email protected]
@@@ -21314,7 -21043,7 +21327,7 @@@ S:   Maintaine
  F:    arch/x86/kernel/cpu/zhaoxin.c
  
  ZONEFS FILESYSTEM
 -M:    Damien Le Moal <[email protected]>
 +M:    Damien Le Moal <damien.lemoal@opensource.wdc.com>
  M:    Naohiro Aota <[email protected]>
  R:    Johannes Thumshirn <[email protected]>
  L:    [email protected]
index aec8c9a3488b683fc4f0ed93cec3169dd5c88266,f7e44d9c69650bc2b9fa996d380b92cebd17a2f2..601f2531ee9144fe9cb2d67e98f729b462534d7b
@@@ -4,7 -4,7 +4,7 @@@ menu "PCI controller drivers
        depends on PCI
  
  config PCI_MVEBU
-       bool "Marvell EBU PCIe controller"
+       tristate "Marvell EBU PCIe controller"
        depends on ARCH_MVEBU || ARCH_DOVE || COMPILE_TEST
        depends on MVEBU_MBUS
        depends on ARM
@@@ -274,14 -274,14 +274,14 @@@ config PCIE_BRCMST
                   BMIPS_GENERIC || COMPILE_TEST
        depends on OF
        depends on PCI_MSI_IRQ_DOMAIN
 -      default ARCH_BRCMSTB
 +      default ARCH_BRCMSTB || BMIPS_GENERIC
        help
          Say Y here to enable PCIe host controller support for
          Broadcom STB based SoCs, like the Raspberry Pi 4.
  
  config PCI_HYPERV_INTERFACE
        tristate "Hyper-V PCI Interface"
-       depends on X86 && HYPERV && PCI_MSI && PCI_MSI_IRQ_DOMAIN && X86_64
+       depends on ((X86 && X86_64) || ARM64) && HYPERV && PCI_MSI && PCI_MSI_IRQ_DOMAIN
        help
          The Hyper-V PCI Interface is a helper driver allows other drivers to
          have a common interface with the Hyper-V PCI frontend driver.
@@@ -332,8 -332,8 +332,8 @@@ config PCIE_APPL
          If unsure, say Y if you have an Apple Silicon system.
  
  config PCIE_MT7621
-       bool "MediaTek MT7621 PCIe Controller"
-       depends on SOC_MT7621 || (MIPS && COMPILE_TEST)
+       tristate "MediaTek MT7621 PCIe Controller"
+       depends on SOC_MT7621 || COMPILE_TEST
        select PHY_MT7621_PCI
        default SOC_MT7621
        help
index 722dacdd5a17f8135f110077ab519c424b60163b,f9526d6de1606ab2365eb81d64f0a93cbd9111e9..467c8d1cd7e4e059cbb2ff12b630fec80929130a
@@@ -19,7 -19,6 +19,7 @@@
  #include <linux/platform_device.h>
  #include <linux/phy/phy.h>
  #include <linux/regulator/consumer.h>
 +#include <linux/module.h>
  
  #include "pcie-designware.h"
  
@@@ -217,10 -216,8 +217,8 @@@ static int exynos_pcie_rd_own_conf(stru
  {
        struct dw_pcie *pci = to_dw_pcie_from_pp(bus->sysdata);
  
-       if (PCI_SLOT(devfn)) {
-               *val = ~0;
+       if (PCI_SLOT(devfn))
                return PCIBIOS_DEVICE_NOT_FOUND;
-       }
  
        *val = dw_pcie_read_dbi(pci, where, size);
        return PCIBIOS_SUCCESSFUL;
index cfe66bf04c1d38ba5dbbe8cb6f7772ca2e996a61,aba082a7054642d279f99d143b0cb29b733542ff..6ce8eddf3a3711758bba5c9e98df6207fca40913
@@@ -18,7 -18,6 +18,7 @@@
  #include <linux/pm_domain.h>
  #include <linux/regmap.h>
  #include <linux/reset.h>
 +#include <linux/module.h>
  
  #include "pcie-designware.h"
  
@@@ -553,10 -552,8 +553,8 @@@ static int qcom_pcie_ep_enable_irq_reso
        int irq, ret;
  
        irq = platform_get_irq_byname(pdev, "global");
-       if (irq < 0) {
-               dev_err(&pdev->dev, "Failed to get Global IRQ\n");
+       if (irq < 0)
                return irq;
-       }
  
        ret = devm_request_threaded_irq(&pdev->dev, irq, NULL,
                                        qcom_pcie_ep_global_irq_thread,
@@@ -620,7 -617,7 +618,7 @@@ static void qcom_pcie_ep_init(struct dw
                dw_pcie_ep_reset_bar(pci, bar);
  }
  
- static struct dw_pcie_ep_ops pci_ep_ops = {
+ static const struct dw_pcie_ep_ops pci_ep_ops = {
        .ep_init = qcom_pcie_ep_init,
        .raise_irq = qcom_pcie_ep_raise_irq,
        .get_features = qcom_pcie_epc_get_features,
index c3b725afa11fdbd0b96f0bcc5443731817ee49e8,ec0df426863ddc179a14f9f8c90fee739650bab7..4f5b44827d21329d94ffe63a7efd3dc3e08f8283
@@@ -32,6 -32,7 +32,6 @@@
  #define PCIE_CORE_DEV_ID_REG                                  0x0
  #define PCIE_CORE_CMD_STATUS_REG                              0x4
  #define PCIE_CORE_DEV_REV_REG                                 0x8
 -#define PCIE_CORE_EXP_ROM_BAR_REG                             0x30
  #define PCIE_CORE_PCIEXP_CAP                                  0xc0
  #define PCIE_CORE_ERR_CAPCTL_REG                              0x118
  #define     PCIE_CORE_ERR_CAPCTL_ECRC_CHK_TX                  BIT(5)
  #define PCIE_MSI_ADDR_HIGH_REG                        (CONTROL_BASE_ADDR + 0x54)
  #define PCIE_MSI_STATUS_REG                   (CONTROL_BASE_ADDR + 0x58)
  #define PCIE_MSI_MASK_REG                     (CONTROL_BASE_ADDR + 0x5C)
+ #define     PCIE_MSI_ALL_MASK                 GENMASK(31, 0)
  #define PCIE_MSI_PAYLOAD_REG                  (CONTROL_BASE_ADDR + 0x9C)
  #define     PCIE_MSI_DATA_MASK                        GENMASK(15, 0)
  
@@@ -570,6 -572,7 +571,7 @@@ static void advk_pcie_setup_hw(struct a
        advk_writel(pcie, reg, PCIE_CORE_CTRL2_REG);
  
        /* Clear all interrupts */
+       advk_writel(pcie, PCIE_MSI_ALL_MASK, PCIE_MSI_STATUS_REG);
        advk_writel(pcie, PCIE_ISR0_ALL_MASK, PCIE_ISR0_REG);
        advk_writel(pcie, PCIE_ISR1_ALL_MASK, PCIE_ISR1_REG);
        advk_writel(pcie, PCIE_IRQ_ALL_MASK, HOST_CTRL_INT_STATUS_REG);
        advk_writel(pcie, PCIE_ISR1_ALL_MASK, PCIE_ISR1_MASK_REG);
  
        /* Unmask all MSIs */
-       advk_writel(pcie, 0, PCIE_MSI_MASK_REG);
+       advk_writel(pcie, ~(u32)PCIE_MSI_ALL_MASK, PCIE_MSI_MASK_REG);
  
        /* Enable summary interrupt for GIC SPI source */
        reg = PCIE_IRQ_ALL_MASK & (~PCIE_IRQ_ENABLE_INTS_MASK);
@@@ -773,6 -776,10 +775,6 @@@ advk_pci_bridge_emul_base_conf_read(str
                *value = advk_readl(pcie, PCIE_CORE_CMD_STATUS_REG);
                return PCI_BRIDGE_EMUL_HANDLED;
  
 -      case PCI_ROM_ADDRESS1:
 -              *value = advk_readl(pcie, PCIE_CORE_EXP_ROM_BAR_REG);
 -              return PCI_BRIDGE_EMUL_HANDLED;
 -
        case PCI_INTERRUPT_LINE: {
                /*
                 * From the whole 32bit register we support reading from HW only
@@@ -805,6 -812,10 +807,6 @@@ advk_pci_bridge_emul_base_conf_write(st
                advk_writel(pcie, new, PCIE_CORE_CMD_STATUS_REG);
                break;
  
 -      case PCI_ROM_ADDRESS1:
 -              advk_writel(pcie, new, PCIE_CORE_EXP_ROM_BAR_REG);
 -              break;
 -
        case PCI_INTERRUPT_LINE:
                if (mask & (PCI_BRIDGE_CTL_BUS_RESET << 16)) {
                        u32 val = advk_readl(pcie, PCIE_CORE_CTRL1_REG);
@@@ -872,11 -883,15 +874,15 @@@ advk_pci_bridge_emul_pcie_conf_read(str
                return PCI_BRIDGE_EMUL_HANDLED;
        }
  
-       case PCI_CAP_LIST_ID:
        case PCI_EXP_DEVCAP:
        case PCI_EXP_DEVCTL:
+       case PCI_EXP_DEVCAP2:
+       case PCI_EXP_DEVCTL2:
+       case PCI_EXP_LNKCAP2:
+       case PCI_EXP_LNKCTL2:
                *value = advk_readl(pcie, PCIE_CORE_PCIEXP_CAP + reg);
                return PCI_BRIDGE_EMUL_HANDLED;
        default:
                return PCI_BRIDGE_EMUL_NOT_HANDLED;
        }
@@@ -890,10 -905,6 +896,6 @@@ advk_pci_bridge_emul_pcie_conf_write(st
        struct advk_pcie *pcie = bridge->data;
  
        switch (reg) {
-       case PCI_EXP_DEVCTL:
-               advk_writel(pcie, new, PCIE_CORE_PCIEXP_CAP + reg);
-               break;
        case PCI_EXP_LNKCTL:
                advk_writel(pcie, new, PCIE_CORE_PCIEXP_CAP + reg);
                if (new & PCI_EXP_LNKCTL_RL)
                advk_writel(pcie, new, PCIE_ISR0_REG);
                break;
  
+       case PCI_EXP_DEVCTL:
+       case PCI_EXP_DEVCTL2:
+       case PCI_EXP_LNKCTL2:
+               advk_writel(pcie, new, PCIE_CORE_PCIEXP_CAP + reg);
+               break;
        default:
                break;
        }
@@@ -953,6 -970,9 +961,9 @@@ static int advk_sw_pci_bridge_init(stru
        /* Support interrupt A for MSI feature */
        bridge->conf.intpin = PCIE_CORE_INT_A_ASSERT_ENABLE;
  
+       /* Aardvark HW provides PCIe Capability structure in version 2 */
+       bridge->pcie_conf.cap = cpu_to_le16(2);
        /* Indicates supports for Completion Retry Status */
        bridge->pcie_conf.rootcap = cpu_to_le16(PCI_EXP_RTCAP_CRSVIS);
  
@@@ -1017,10 -1037,8 +1028,8 @@@ static int advk_pcie_rd_conf(struct pci
        u32 reg;
        int ret;
  
-       if (!advk_pcie_valid_device(pcie, bus, devfn)) {
-               *val = 0xffffffff;
+       if (!advk_pcie_valid_device(pcie, bus, devfn))
                return PCIBIOS_DEVICE_NOT_FOUND;
-       }
  
        if (pci_is_root_bus(bus))
                return pci_bridge_emul_conf_read(&pcie->bridge, where,
@@@ -1383,7 -1401,7 +1392,7 @@@ static void advk_pcie_handle_msi(struc
  
        msi_mask = advk_readl(pcie, PCIE_MSI_MASK_REG);
        msi_val = advk_readl(pcie, PCIE_MSI_STATUS_REG);
-       msi_status = msi_val & ~msi_mask;
+       msi_status = msi_val & ((~msi_mask) & PCIE_MSI_ALL_MASK);
  
        for (msi_idx = 0; msi_idx < MSI_IRQ_NUM; msi_idx++) {
                if (!(BIT(msi_idx) & msi_status))
@@@ -1535,8 -1553,7 +1544,7 @@@ static int advk_pcie_probe(struct platf
                 * only PIO for issuing configuration transfers which does
                 * not use PCIe window configuration.
                 */
-               if (type != IORESOURCE_MEM && type != IORESOURCE_MEM_64 &&
-                   type != IORESOURCE_IO)
+               if (type != IORESOURCE_MEM && type != IORESOURCE_IO)
                        continue;
  
                /*
                 * configuration is set to transparent memory access so it
                 * does not need window configuration.
                 */
-               if ((type == IORESOURCE_MEM || type == IORESOURCE_MEM_64) &&
-                   entry->offset == 0)
+               if (type == IORESOURCE_MEM && entry->offset == 0)
                        continue;
  
                /*
@@@ -1677,20 -1693,64 +1684,64 @@@ static int advk_pcie_remove(struct plat
  {
        struct advk_pcie *pcie = platform_get_drvdata(pdev);
        struct pci_host_bridge *bridge = pci_host_bridge_from_priv(pcie);
+       u32 val;
        int i;
  
+       /* Remove PCI bus with all devices */
        pci_lock_rescan_remove();
        pci_stop_root_bus(bridge->bus);
        pci_remove_root_bus(bridge->bus);
        pci_unlock_rescan_remove();
  
+       /* Disable Root Bridge I/O space, memory space and bus mastering */
+       val = advk_readl(pcie, PCIE_CORE_CMD_STATUS_REG);
+       val &= ~(PCI_COMMAND_IO | PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER);
+       advk_writel(pcie, val, PCIE_CORE_CMD_STATUS_REG);
+       /* Disable MSI */
+       val = advk_readl(pcie, PCIE_CORE_CTRL2_REG);
+       val &= ~PCIE_CORE_CTRL2_MSI_ENABLE;
+       advk_writel(pcie, val, PCIE_CORE_CTRL2_REG);
+       /* Clear MSI address */
+       advk_writel(pcie, 0, PCIE_MSI_ADDR_LOW_REG);
+       advk_writel(pcie, 0, PCIE_MSI_ADDR_HIGH_REG);
+       /* Mask all interrupts */
+       advk_writel(pcie, PCIE_MSI_ALL_MASK, PCIE_MSI_MASK_REG);
+       advk_writel(pcie, PCIE_ISR0_ALL_MASK, PCIE_ISR0_MASK_REG);
+       advk_writel(pcie, PCIE_ISR1_ALL_MASK, PCIE_ISR1_MASK_REG);
+       advk_writel(pcie, PCIE_IRQ_ALL_MASK, HOST_CTRL_INT_MASK_REG);
+       /* Clear all interrupts */
+       advk_writel(pcie, PCIE_MSI_ALL_MASK, PCIE_MSI_STATUS_REG);
+       advk_writel(pcie, PCIE_ISR0_ALL_MASK, PCIE_ISR0_REG);
+       advk_writel(pcie, PCIE_ISR1_ALL_MASK, PCIE_ISR1_REG);
+       advk_writel(pcie, PCIE_IRQ_ALL_MASK, HOST_CTRL_INT_STATUS_REG);
+       /* Remove IRQ domains */
        advk_pcie_remove_msi_irq_domain(pcie);
        advk_pcie_remove_irq_domain(pcie);
  
+       /* Free config space for emulated root bridge */
+       pci_bridge_emul_cleanup(&pcie->bridge);
+       /* Assert PERST# signal which prepares PCIe card for power down */
+       if (pcie->reset_gpio)
+               gpiod_set_value_cansleep(pcie->reset_gpio, 1);
+       /* Disable link training */
+       val = advk_readl(pcie, PCIE_CORE_CTRL0_REG);
+       val &= ~LINK_TRAINING_EN;
+       advk_writel(pcie, val, PCIE_CORE_CTRL0_REG);
        /* Disable outbound address windows mapping */
        for (i = 0; i < OB_WIN_COUNT; i++)
                advk_pcie_disable_ob_win(pcie, i);
  
+       /* Disable phy */
+       advk_pcie_disable_phy(pcie);
        return 0;
  }
  
index 45b6ff8dc665cf5dae4792e5112e22b1553b9faa,154bb8b20e547eb9b32b99a66b9ec5a7a0860d56..20ea2ee330b8776a2c22e8a113b3bec0404427d1
  #include <linux/pci-ecam.h>
  #include <linux/delay.h>
  #include <linux/semaphore.h>
- #include <linux/irqdomain.h>
- #include <asm/irqdomain.h>
- #include <asm/apic.h>
  #include <linux/irq.h>
  #include <linux/msi.h>
  #include <linux/hyperv.h>
  #include <linux/refcount.h>
+ #include <linux/irqdomain.h>
+ #include <linux/acpi.h>
  #include <asm/mshyperv.h>
  
  /*
@@@ -583,6 -582,265 +582,265 @@@ struct hv_pci_compl 
  
  static void hv_pci_onchannelcallback(void *context);
  
+ #ifdef CONFIG_X86
+ #define DELIVERY_MODE APIC_DELIVERY_MODE_FIXED
+ #define FLOW_HANDLER  handle_edge_irq
+ #define FLOW_NAME     "edge"
+ static int hv_pci_irqchip_init(void)
+ {
+       return 0;
+ }
+ static struct irq_domain *hv_pci_get_root_domain(void)
+ {
+       return x86_vector_domain;
+ }
+ static unsigned int hv_msi_get_int_vector(struct irq_data *data)
+ {
+       struct irq_cfg *cfg = irqd_cfg(data);
+       return cfg->vector;
+ }
+ static void hv_set_msi_entry_from_desc(union hv_msi_entry *msi_entry,
+                                      struct msi_desc *msi_desc)
+ {
+       msi_entry->address.as_uint32 = msi_desc->msg.address_lo;
+       msi_entry->data.as_uint32 = msi_desc->msg.data;
+ }
+ static int hv_msi_prepare(struct irq_domain *domain, struct device *dev,
+                         int nvec, msi_alloc_info_t *info)
+ {
+       return pci_msi_prepare(domain, dev, nvec, info);
+ }
+ #elif defined(CONFIG_ARM64)
+ /*
+  * SPI vectors to use for vPCI; arch SPIs range is [32, 1019], but leaving a bit
+  * of room at the start to allow for SPIs to be specified through ACPI and
+  * starting with a power of two to satisfy power of 2 multi-MSI requirement.
+  */
+ #define HV_PCI_MSI_SPI_START  64
+ #define HV_PCI_MSI_SPI_NR     (1020 - HV_PCI_MSI_SPI_START)
+ #define DELIVERY_MODE         0
+ #define FLOW_HANDLER          NULL
+ #define FLOW_NAME             NULL
+ #define hv_msi_prepare                NULL
+ struct hv_pci_chip_data {
+       DECLARE_BITMAP(spi_map, HV_PCI_MSI_SPI_NR);
+       struct mutex    map_lock;
+ };
+ /* Hyper-V vPCI MSI GIC IRQ domain */
+ static struct irq_domain *hv_msi_gic_irq_domain;
+ /* Hyper-V PCI MSI IRQ chip */
+ static struct irq_chip hv_arm64_msi_irq_chip = {
+       .name = "MSI",
+       .irq_set_affinity = irq_chip_set_affinity_parent,
+       .irq_eoi = irq_chip_eoi_parent,
+       .irq_mask = irq_chip_mask_parent,
+       .irq_unmask = irq_chip_unmask_parent
+ };
+ static unsigned int hv_msi_get_int_vector(struct irq_data *irqd)
+ {
+       return irqd->parent_data->hwirq;
+ }
+ static void hv_set_msi_entry_from_desc(union hv_msi_entry *msi_entry,
+                                      struct msi_desc *msi_desc)
+ {
+       msi_entry->address = ((u64)msi_desc->msg.address_hi << 32) |
+                             msi_desc->msg.address_lo;
+       msi_entry->data = msi_desc->msg.data;
+ }
+ /*
+  * @nr_bm_irqs:               Indicates the number of IRQs that were allocated from
+  *                    the bitmap.
+  * @nr_dom_irqs:      Indicates the number of IRQs that were allocated from
+  *                    the parent domain.
+  */
+ static void hv_pci_vec_irq_free(struct irq_domain *domain,
+                               unsigned int virq,
+                               unsigned int nr_bm_irqs,
+                               unsigned int nr_dom_irqs)
+ {
+       struct hv_pci_chip_data *chip_data = domain->host_data;
+       struct irq_data *d = irq_domain_get_irq_data(domain, virq);
+       int first = d->hwirq - HV_PCI_MSI_SPI_START;
+       int i;
+       mutex_lock(&chip_data->map_lock);
+       bitmap_release_region(chip_data->spi_map,
+                             first,
+                             get_count_order(nr_bm_irqs));
+       mutex_unlock(&chip_data->map_lock);
+       for (i = 0; i < nr_dom_irqs; i++) {
+               if (i)
+                       d = irq_domain_get_irq_data(domain, virq + i);
+               irq_domain_reset_irq_data(d);
+       }
+       irq_domain_free_irqs_parent(domain, virq, nr_dom_irqs);
+ }
+ static void hv_pci_vec_irq_domain_free(struct irq_domain *domain,
+                                      unsigned int virq,
+                                      unsigned int nr_irqs)
+ {
+       hv_pci_vec_irq_free(domain, virq, nr_irqs, nr_irqs);
+ }
+ static int hv_pci_vec_alloc_device_irq(struct irq_domain *domain,
+                                      unsigned int nr_irqs,
+                                      irq_hw_number_t *hwirq)
+ {
+       struct hv_pci_chip_data *chip_data = domain->host_data;
+       int index;
+       /* Find and allocate region from the SPI bitmap */
+       mutex_lock(&chip_data->map_lock);
+       index = bitmap_find_free_region(chip_data->spi_map,
+                                       HV_PCI_MSI_SPI_NR,
+                                       get_count_order(nr_irqs));
+       mutex_unlock(&chip_data->map_lock);
+       if (index < 0)
+               return -ENOSPC;
+       *hwirq = index + HV_PCI_MSI_SPI_START;
+       return 0;
+ }
+ static int hv_pci_vec_irq_gic_domain_alloc(struct irq_domain *domain,
+                                          unsigned int virq,
+                                          irq_hw_number_t hwirq)
+ {
+       struct irq_fwspec fwspec;
+       struct irq_data *d;
+       int ret;
+       fwspec.fwnode = domain->parent->fwnode;
+       fwspec.param_count = 2;
+       fwspec.param[0] = hwirq;
+       fwspec.param[1] = IRQ_TYPE_EDGE_RISING;
+       ret = irq_domain_alloc_irqs_parent(domain, virq, 1, &fwspec);
+       if (ret)
+               return ret;
+       /*
+        * Since the interrupt specifier is not coming from ACPI or DT, the
+        * trigger type will need to be set explicitly. Otherwise, it will be
+        * set to whatever is in the GIC configuration.
+        */
+       d = irq_domain_get_irq_data(domain->parent, virq);
+       return d->chip->irq_set_type(d, IRQ_TYPE_EDGE_RISING);
+ }
+ static int hv_pci_vec_irq_domain_alloc(struct irq_domain *domain,
+                                      unsigned int virq, unsigned int nr_irqs,
+                                      void *args)
+ {
+       irq_hw_number_t hwirq;
+       unsigned int i;
+       int ret;
+       ret = hv_pci_vec_alloc_device_irq(domain, nr_irqs, &hwirq);
+       if (ret)
+               return ret;
+       for (i = 0; i < nr_irqs; i++) {
+               ret = hv_pci_vec_irq_gic_domain_alloc(domain, virq + i,
+                                                     hwirq + i);
+               if (ret) {
+                       hv_pci_vec_irq_free(domain, virq, nr_irqs, i);
+                       return ret;
+               }
+               irq_domain_set_hwirq_and_chip(domain, virq + i,
+                                             hwirq + i,
+                                             &hv_arm64_msi_irq_chip,
+                                             domain->host_data);
+               pr_debug("pID:%d vID:%u\n", (int)(hwirq + i), virq + i);
+       }
+       return 0;
+ }
+ /*
+  * Pick the first cpu as the irq affinity that can be temporarily used for
+  * composing MSI from the hypervisor. GIC will eventually set the right
+  * affinity for the irq and the 'unmask' will retarget the interrupt to that
+  * cpu.
+  */
+ static int hv_pci_vec_irq_domain_activate(struct irq_domain *domain,
+                                         struct irq_data *irqd, bool reserve)
+ {
+       int cpu = cpumask_first(cpu_present_mask);
+       irq_data_update_effective_affinity(irqd, cpumask_of(cpu));
+       return 0;
+ }
+ static const struct irq_domain_ops hv_pci_domain_ops = {
+       .alloc  = hv_pci_vec_irq_domain_alloc,
+       .free   = hv_pci_vec_irq_domain_free,
+       .activate = hv_pci_vec_irq_domain_activate,
+ };
+ static int hv_pci_irqchip_init(void)
+ {
+       static struct hv_pci_chip_data *chip_data;
+       struct fwnode_handle *fn = NULL;
+       int ret = -ENOMEM;
+       chip_data = kzalloc(sizeof(*chip_data), GFP_KERNEL);
+       if (!chip_data)
+               return ret;
+       mutex_init(&chip_data->map_lock);
+       fn = irq_domain_alloc_named_fwnode("hv_vpci_arm64");
+       if (!fn)
+               goto free_chip;
+       /*
+        * IRQ domain once enabled, should not be removed since there is no
+        * way to ensure that all the corresponding devices are also gone and
+        * no interrupts will be generated.
+        */
+       hv_msi_gic_irq_domain = acpi_irq_create_hierarchy(0, HV_PCI_MSI_SPI_NR,
+                                                         fn, &hv_pci_domain_ops,
+                                                         chip_data);
+       if (!hv_msi_gic_irq_domain) {
+               pr_err("Failed to create Hyper-V arm64 vPCI MSI IRQ domain\n");
+               goto free_chip;
+       }
+       return 0;
+ free_chip:
+       kfree(chip_data);
+       if (fn)
+               irq_domain_free_fwnode(fn);
+       return ret;
+ }
+ static struct irq_domain *hv_pci_get_root_domain(void)
+ {
+       return hv_msi_gic_irq_domain;
+ }
+ #endif /* CONFIG_ARM64 */
  /**
   * hv_pci_generic_compl() - Invoked for a completion packet
   * @context:          Set up by the sender of the packet.
@@@ -1191,17 -1449,11 +1449,11 @@@ static void hv_msi_free(struct irq_doma
        put_pcichild(hpdev);
  }
  
- static int hv_set_affinity(struct irq_data *data, const struct cpumask *dest,
-                          bool force)
- {
-       struct irq_data *parent = data->parent_data;
-       return parent->chip->irq_set_affinity(parent, dest, force);
- }
  static void hv_irq_mask(struct irq_data *data)
  {
        pci_msi_mask_irq(data);
+       if (data->parent_data->chip->irq_mask)
+               irq_chip_mask_parent(data);
  }
  
  /**
  static void hv_irq_unmask(struct irq_data *data)
  {
        struct msi_desc *msi_desc = irq_data_get_msi_desc(data);
-       struct irq_cfg *cfg = irqd_cfg(data);
        struct hv_retarget_device_interrupt *params;
        struct hv_pcibus_device *hbus;
        struct cpumask *dest;
                           (hbus->hdev->dev_instance.b[7] << 8) |
                           (hbus->hdev->dev_instance.b[6] & 0xf8) |
                           PCI_FUNC(pdev->devfn);
-       params->int_target.vector = cfg->vector;
+       params->int_target.vector = hv_msi_get_int_vector(data);
  
        /*
         * Honoring apic->delivery_mode set to APIC_DELIVERY_MODE_FIXED by
@@@ -1319,6 -1570,8 +1570,8 @@@ exit_unlock
                dev_err(&hbus->hdev->device,
                        "%s() failed: %#llx", __func__, res);
  
+       if (data->parent_data->chip->irq_unmask)
+               irq_chip_unmask_parent(data);
        pci_msi_unmask_irq(data);
  }
  
@@@ -1347,7 -1600,7 +1600,7 @@@ static u32 hv_compose_msi_req_v1
        int_pkt->wslot.slot = slot;
        int_pkt->int_desc.vector = vector;
        int_pkt->int_desc.vector_count = 1;
-       int_pkt->int_desc.delivery_mode = APIC_DELIVERY_MODE_FIXED;
+       int_pkt->int_desc.delivery_mode = DELIVERY_MODE;
  
        /*
         * Create MSI w/ dummy vCPU set, overwritten by subsequent retarget in
@@@ -1377,7 -1630,7 +1630,7 @@@ static u32 hv_compose_msi_req_v2
        int_pkt->wslot.slot = slot;
        int_pkt->int_desc.vector = vector;
        int_pkt->int_desc.vector_count = 1;
-       int_pkt->int_desc.delivery_mode = APIC_DELIVERY_MODE_FIXED;
+       int_pkt->int_desc.delivery_mode = DELIVERY_MODE;
        cpu = hv_compose_msi_req_get_cpu(affinity);
        int_pkt->int_desc.processor_array[0] =
                hv_cpu_number_to_vp_number(cpu);
@@@ -1397,7 -1650,7 +1650,7 @@@ static u32 hv_compose_msi_req_v3
        int_pkt->int_desc.vector = vector;
        int_pkt->int_desc.reserved = 0;
        int_pkt->int_desc.vector_count = 1;
-       int_pkt->int_desc.delivery_mode = APIC_DELIVERY_MODE_FIXED;
+       int_pkt->int_desc.delivery_mode = DELIVERY_MODE;
        cpu = hv_compose_msi_req_get_cpu(affinity);
        int_pkt->int_desc.processor_array[0] =
                hv_cpu_number_to_vp_number(cpu);
   */
  static void hv_compose_msi_msg(struct irq_data *data, struct msi_msg *msg)
  {
-       struct irq_cfg *cfg = irqd_cfg(data);
        struct hv_pcibus_device *hbus;
        struct vmbus_channel *channel;
        struct hv_pci_dev *hpdev;
                size = hv_compose_msi_req_v1(&ctxt.int_pkts.v1,
                                        dest,
                                        hpdev->desc.win_slot.slot,
-                                       cfg->vector);
+                                       hv_msi_get_int_vector(data));
                break;
  
        case PCI_PROTOCOL_VERSION_1_2:
                size = hv_compose_msi_req_v2(&ctxt.int_pkts.v2,
                                        dest,
                                        hpdev->desc.win_slot.slot,
-                                       cfg->vector);
+                                       hv_msi_get_int_vector(data));
                break;
  
        case PCI_PROTOCOL_VERSION_1_4:
                size = hv_compose_msi_req_v3(&ctxt.int_pkts.v3,
                                        dest,
                                        hpdev->desc.win_slot.slot,
-                                       cfg->vector);
+                                       hv_msi_get_int_vector(data));
                break;
  
        default:
@@@ -1594,14 -1846,18 +1846,18 @@@ return_null_message
  static struct irq_chip hv_msi_irq_chip = {
        .name                   = "Hyper-V PCIe MSI",
        .irq_compose_msi_msg    = hv_compose_msi_msg,
-       .irq_set_affinity       = hv_set_affinity,
+       .irq_set_affinity       = irq_chip_set_affinity_parent,
+ #ifdef CONFIG_X86
        .irq_ack                = irq_chip_ack_parent,
+ #elif defined(CONFIG_ARM64)
+       .irq_eoi                = irq_chip_eoi_parent,
+ #endif
        .irq_mask               = hv_irq_mask,
        .irq_unmask             = hv_irq_unmask,
  };
  
  static struct msi_domain_ops hv_msi_ops = {
-       .msi_prepare    = pci_msi_prepare,
+       .msi_prepare    = hv_msi_prepare,
        .msi_free       = hv_msi_free,
  };
  
@@@ -1625,12 -1881,12 +1881,12 @@@ static int hv_pcie_init_irq_domain(stru
        hbus->msi_info.flags = (MSI_FLAG_USE_DEF_DOM_OPS |
                MSI_FLAG_USE_DEF_CHIP_OPS | MSI_FLAG_MULTI_PCI_MSI |
                MSI_FLAG_PCI_MSIX);
-       hbus->msi_info.handler = handle_edge_irq;
-       hbus->msi_info.handler_name = "edge";
+       hbus->msi_info.handler = FLOW_HANDLER;
+       hbus->msi_info.handler_name = FLOW_NAME;
        hbus->msi_info.data = hbus;
        hbus->irq_domain = pci_msi_create_irq_domain(hbus->fwnode,
                                                     &hbus->msi_info,
-                                                    x86_vector_domain);
+                                                    hv_pci_get_root_domain());
        if (!hbus->irq_domain) {
                dev_err(&hbus->hdev->device,
                        "Failed to build an MSI IRQ domain\n");
@@@ -1774,7 -2030,7 +2030,7 @@@ static void prepopulate_bars(struct hv_
         * If the memory enable bit is already set, Hyper-V silently ignores
         * the below BAR updates, and the related PCI device driver can not
         * work, because reading from the device register(s) always returns
-        * 0xFFFFFFFF.
+        * 0xFFFFFFFF (PCI_ERROR_RESPONSE).
         */
        list_for_each_entry(hpdev, &hbus->children, list_entry) {
                _hv_pcifront_read_config(hpdev, PCI_COMMAND, 2, &command);
@@@ -3445,23 -3701,18 +3701,23 @@@ static int hv_pci_suspend(struct hv_dev
  
  static int hv_pci_restore_msi_msg(struct pci_dev *pdev, void *arg)
  {
 -      struct msi_desc *entry;
        struct irq_data *irq_data;
 +      struct msi_desc *entry;
 +      int ret = 0;
  
 -      for_each_pci_msi_entry(entry, pdev) {
 +      msi_lock_descs(&pdev->dev);
 +      msi_for_each_desc(entry, &pdev->dev, MSI_DESC_ASSOCIATED) {
                irq_data = irq_get_irq_data(entry->irq);
 -              if (WARN_ON_ONCE(!irq_data))
 -                      return -EINVAL;
 +              if (WARN_ON_ONCE(!irq_data)) {
 +                      ret = -EINVAL;
 +                      break;
 +              }
  
                hv_compose_msi_msg(irq_data, &entry->msg);
        }
 +      msi_unlock_descs(&pdev->dev);
  
 -      return 0;
 +      return ret;
  }
  
  /*
@@@ -3547,9 -3798,15 +3803,15 @@@ static void __exit exit_hv_pci_drv(void
  
  static int __init init_hv_pci_drv(void)
  {
+       int ret;
        if (!hv_is_hyperv_initialized())
                return -ENODEV;
  
+       ret = hv_pci_irqchip_init();
+       if (ret)
+               return ret;
        /* Set the invalid domain number's bit, so it will not be used */
        set_bit(HVPCI_DOM_INVALID, hvpci_dom_map);
  
index b090924b41feefac638f5a127cdfa9bcf801f2a7,f98551336b423c882c8ffd5562a4dd692e0b172d..854d951631129a5385f2519351c46d82e2b3335e
@@@ -42,8 -42,9 +42,9 @@@
  #define   CORE_FABRIC_STAT_MASK               0x001F001F
  #define CORE_LANE_CFG(port)           (0x84000 + 0x4000 * (port))
  #define   CORE_LANE_CFG_REFCLK0REQ    BIT(0)
- #define   CORE_LANE_CFG_REFCLK1               BIT(1)
+ #define   CORE_LANE_CFG_REFCLK1REQ    BIT(1)
  #define   CORE_LANE_CFG_REFCLK0ACK    BIT(2)
+ #define   CORE_LANE_CFG_REFCLK1ACK    BIT(3)
  #define   CORE_LANE_CFG_REFCLKEN      (BIT(9) | BIT(10))
  #define CORE_LANE_CTL(port)           (0x84004 + 0x4000 * (port))
  #define   CORE_LANE_CTL_CFGACC                BIT(15)
@@@ -482,9 -483,9 +483,9 @@@ static int apple_pcie_setup_refclk(stru
        if (res < 0)
                return res;
  
-       rmw_set(CORE_LANE_CFG_REFCLK1, pcie->base + CORE_LANE_CFG(port->idx));
+       rmw_set(CORE_LANE_CFG_REFCLK1REQ, pcie->base + CORE_LANE_CFG(port->idx));
        res = readl_relaxed_poll_timeout(pcie->base + CORE_LANE_CFG(port->idx),
-                                        stat, stat & CORE_LANE_CFG_REFCLK1,
+                                        stat, stat & CORE_LANE_CFG_REFCLK1ACK,
                                         100, 50000);
  
        if (res < 0)
@@@ -516,7 -517,7 +517,7 @@@ static int apple_pcie_setup_port(struc
        int ret, i;
  
        reset = gpiod_get_from_of_node(np, "reset-gpios", 0,
 -                                     GPIOD_OUT_LOW, "#PERST");
 +                                     GPIOD_OUT_LOW, "PERST#");
        if (IS_ERR(reset))
                return PTR_ERR(reset);
  
  
        rmw_set(PORT_APPCLK_EN, port->base + PORT_APPCLK);
  
 +      /* Assert PERST# before setting up the clock */
 +      gpiod_set_value(reset, 1);
 +
        ret = apple_pcie_setup_refclk(pcie, port);
        if (ret < 0)
                return ret;
  
 +      /* The minimal Tperst-clk value is 100us (PCIe CEM r5.0, 2.9.2) */
 +      usleep_range(100, 200);
 +
 +      /* Deassert PERST# */
        rmw_set(PORT_PERST_OFF, port->base + PORT_PERST);
 -      gpiod_set_value(reset, 1);
 +      gpiod_set_value(reset, 0);
 +
 +      /* Wait for 100ms after PERST# deassertion (PCIe r5.0, 6.6.1) */
 +      msleep(100);
  
        ret = readl_relaxed_poll_timeout(port->base + PORT_STATUS, stat,
                                         stat & PORT_STATUS_READY, 100, 250000);
                return ret;
        }
  
+       rmw_clear(PORT_REFCLK_CGDIS, port->base + PORT_REFCLK);
+       rmw_clear(PORT_APPCLK_CGDIS, port->base + PORT_APPCLK);
        ret = apple_pcie_port_setup_irq(port);
        if (ret)
                return ret;
index a267cd5b3233119a0662e4e2acaa8e0654a5a543,1cba6e66815022cbbdd8e7dde8157e15ba817bfc..375c0c40bbf8de34a26b0f0feecf6ad24da885f4
@@@ -24,6 -24,7 +24,7 @@@
  #include <linux/pci.h>
  #include <linux/pci-ecam.h>
  #include <linux/printk.h>
+ #include <linux/regulator/consumer.h>
  #include <linux/reset.h>
  #include <linux/sizes.h>
  #include <linux/slab.h>
  #define PCIE_MISC_HARD_PCIE_HARD_DEBUG                                        0x4204
  #define  PCIE_MISC_HARD_PCIE_HARD_DEBUG_CLKREQ_DEBUG_ENABLE_MASK      0x2
  #define  PCIE_MISC_HARD_PCIE_HARD_DEBUG_SERDES_IDDQ_MASK              0x08000000
 +#define  PCIE_BMIPS_MISC_HARD_PCIE_HARD_DEBUG_SERDES_IDDQ_MASK                0x00800000
  
  
  #define PCIE_INTR2_CPU_BASE           0x4300
  #define BRCM_INT_PCI_MSI_NR           32
  #define BRCM_INT_PCI_MSI_LEGACY_NR    8
  #define BRCM_INT_PCI_MSI_SHIFT                0
+ #define BRCM_INT_PCI_MSI_MASK         GENMASK(BRCM_INT_PCI_MSI_NR - 1, 0)
+ #define BRCM_INT_PCI_MSI_LEGACY_MASK  GENMASK(31, \
+                                               32 - BRCM_INT_PCI_MSI_LEGACY_NR)
  
  /* MSI target addresses */
  #define BRCM_MSI_TARGET_ADDR_LT_4GB   0x0fffffffcULL
@@@ -192,6 -195,8 +196,8 @@@ static inline void brcm_pcie_bridge_sw_
  static inline void brcm_pcie_perst_set_4908(struct brcm_pcie *pcie, u32 val);
  static inline void brcm_pcie_perst_set_7278(struct brcm_pcie *pcie, u32 val);
  static inline void brcm_pcie_perst_set_generic(struct brcm_pcie *pcie, u32 val);
+ static int brcm_pcie_linkup(struct brcm_pcie *pcie);
+ static int brcm_pcie_add_bus(struct pci_bus *bus);
  
  enum {
        RGR1_SW_INIT_1,
@@@ -206,8 -211,6 +212,8 @@@ enum 
  
  enum pcie_type {
        GENERIC,
 +      BCM7425,
 +      BCM7435,
        BCM4908,
        BCM7278,
        BCM2711,
@@@ -226,12 -229,6 +232,12 @@@ static const int pcie_offsets[] = 
        [EXT_CFG_DATA]   = 0x9004,
  };
  
 +static const int pcie_offsets_bmips_7425[] = {
 +      [RGR1_SW_INIT_1] = 0x8010,
 +      [EXT_CFG_INDEX]  = 0x8300,
 +      [EXT_CFG_DATA]   = 0x8304,
 +};
 +
  static const struct pcie_cfg_data generic_cfg = {
        .offsets        = pcie_offsets,
        .type           = GENERIC,
        .bridge_sw_init_set = brcm_pcie_bridge_sw_init_set_generic,
  };
  
 +static const struct pcie_cfg_data bcm7425_cfg = {
 +      .offsets        = pcie_offsets_bmips_7425,
 +      .type           = BCM7425,
 +      .perst_set      = brcm_pcie_perst_set_generic,
 +      .bridge_sw_init_set = brcm_pcie_bridge_sw_init_set_generic,
 +};
 +
 +static const struct pcie_cfg_data bcm7435_cfg = {
 +      .offsets        = pcie_offsets,
 +      .type           = BCM7435,
 +      .perst_set      = brcm_pcie_perst_set_generic,
 +      .bridge_sw_init_set = brcm_pcie_bridge_sw_init_set_generic,
 +};
 +
  static const struct pcie_cfg_data bcm4908_cfg = {
        .offsets        = pcie_offsets,
        .type           = BCM4908,
@@@ -280,6 -263,14 +286,14 @@@ static const struct pcie_cfg_data bcm27
        .bridge_sw_init_set = brcm_pcie_bridge_sw_init_set_generic,
  };
  
+ struct subdev_regulators {
+       unsigned int num_supplies;
+       struct regulator_bulk_data supplies[];
+ };
+ static int pci_subdev_regulators_add_bus(struct pci_bus *bus);
+ static void pci_subdev_regulators_remove_bus(struct pci_bus *bus);
  struct brcm_msi {
        struct device           *dev;
        void __iomem            *base;
        struct mutex            lock; /* guards the alloc/free operations */
        u64                     target_addr;
        int                     irq;
-       /* used indicates which MSI interrupts have been alloc'd */
-       unsigned long           used;
+       DECLARE_BITMAP(used, BRCM_INT_PCI_MSI_NR);
        bool                    legacy;
        /* Some chips have MSIs in bits [31..24] of a shared register. */
        int                     legacy_shift;
@@@ -318,13 -308,11 +331,16 @@@ struct brcm_pcie 
        u32                     hw_rev;
        void                    (*perst_set)(struct brcm_pcie *pcie, u32 val);
        void                    (*bridge_sw_init_set)(struct brcm_pcie *pcie, u32 val);
+       bool                    refusal_mode;
+       struct subdev_regulators *sr;
+       bool                    ep_wakeup_capable;
  };
  
 +static inline bool is_bmips(const struct brcm_pcie *pcie)
 +{
 +      return pcie->type == BCM7435 || pcie->type == BCM7425;
 +}
 +
  /*
   * This is to convert the size of the inbound "BAR" region to the
   * non-linear values of PCIE_X_MISC_RC_BAR[123]_CONFIG_LO.SIZE
@@@ -434,6 -422,99 +450,99 @@@ static int brcm_pcie_set_ssc(struct brc
        return ssc && pll ? 0 : -EIO;
  }
  
+ static void *alloc_subdev_regulators(struct device *dev)
+ {
+       static const char * const supplies[] = {
+               "vpcie3v3",
+               "vpcie3v3aux",
+               "vpcie12v",
+       };
+       const size_t size = sizeof(struct subdev_regulators)
+               + sizeof(struct regulator_bulk_data) * ARRAY_SIZE(supplies);
+       struct subdev_regulators *sr;
+       int i;
+       sr = devm_kzalloc(dev, size, GFP_KERNEL);
+       if (sr) {
+               sr->num_supplies = ARRAY_SIZE(supplies);
+               for (i = 0; i < ARRAY_SIZE(supplies); i++)
+                       sr->supplies[i].supply = supplies[i];
+       }
+       return sr;
+ }
+ static int pci_subdev_regulators_add_bus(struct pci_bus *bus)
+ {
+       struct device *dev = &bus->dev;
+       struct subdev_regulators *sr;
+       int ret;
+       if (!dev->of_node || !bus->parent || !pci_is_root_bus(bus->parent))
+               return 0;
+       if (dev->driver_data)
+               dev_err(dev, "dev.driver_data unexpectedly non-NULL\n");
+       sr = alloc_subdev_regulators(dev);
+       if (!sr)
+               return -ENOMEM;
+       dev->driver_data = sr;
+       ret = regulator_bulk_get(dev, sr->num_supplies, sr->supplies);
+       if (ret)
+               return ret;
+       ret = regulator_bulk_enable(sr->num_supplies, sr->supplies);
+       if (ret) {
+               dev_err(dev, "failed to enable regulators for downstream device\n");
+               return ret;
+       }
+       return 0;
+ }
+ static int brcm_pcie_add_bus(struct pci_bus *bus)
+ {
+       struct device *dev = &bus->dev;
+       struct brcm_pcie *pcie = (struct brcm_pcie *) bus->sysdata;
+       int ret;
+       if (!dev->of_node || !bus->parent || !pci_is_root_bus(bus->parent))
+               return 0;
+       ret = pci_subdev_regulators_add_bus(bus);
+       if (ret)
+               return ret;
+       /* Grab the regulators for suspend/resume */
+       pcie->sr = bus->dev.driver_data;
+       /*
+        * If we have failed linkup there is no point to return an error as
+        * currently it will cause a WARNING() from pci_alloc_child_bus().
+        * We return 0 and turn on the "refusal_mode" so that any further
+        * accesses to the pci_dev just get 0xffffffff
+        */
+       if (brcm_pcie_linkup(pcie) != 0)
+               pcie->refusal_mode = true;
+       return 0;
+ }
+ static void pci_subdev_regulators_remove_bus(struct pci_bus *bus)
+ {
+       struct device *dev = &bus->dev;
+       struct subdev_regulators *sr = dev->driver_data;
+       if (!sr || !bus->parent || !pci_is_root_bus(bus->parent))
+               return;
+       if (regulator_bulk_disable(sr->num_supplies, sr->supplies))
+               dev_err(dev, "failed to disable regulators for downstream device\n");
+       dev->driver_data = NULL;
+ }
  /* Limits operation to a specific generation (1, 2, or 3) */
  static void brcm_pcie_set_gen(struct brcm_pcie *pcie, int gen)
  {
@@@ -471,9 -552,6 +580,9 @@@ static void brcm_pcie_set_outbound_win(
                          PCIE_MISC_CPU_2_PCIE_MEM_WIN0_BASE_LIMIT_LIMIT_MASK);
        writel(tmp, pcie->base + PCIE_MEM_WIN0_BASE_LIMIT(win));
  
 +      if (is_bmips(pcie))
 +              return;
 +
        /* Write the cpu & limit addr upper bits */
        high_addr_shift =
                HWEIGHT32(PCIE_MISC_CPU_2_PCIE_MEM_WIN0_BASE_LIMIT_BASE_MASK);
@@@ -565,7 -643,7 +674,7 @@@ static int brcm_msi_alloc(struct brcm_m
        int hwirq;
  
        mutex_lock(&msi->lock);
-       hwirq = bitmap_find_free_region(&msi->used, msi->nr, 0);
+       hwirq = bitmap_find_free_region(msi->used, msi->nr, 0);
        mutex_unlock(&msi->lock);
  
        return hwirq;
  static void brcm_msi_free(struct brcm_msi *msi, unsigned long hwirq)
  {
        mutex_lock(&msi->lock);
-       bitmap_release_region(&msi->used, hwirq, 0);
+       bitmap_release_region(msi->used, hwirq, 0);
        mutex_unlock(&msi->lock);
  }
  
@@@ -650,7 -728,8 +759,8 @@@ static void brcm_msi_remove(struct brcm
  
  static void brcm_msi_set_regs(struct brcm_msi *msi)
  {
-       u32 val = __GENMASK(31, msi->legacy_shift);
+       u32 val = msi->legacy ? BRCM_INT_PCI_MSI_LEGACY_MASK :
+                               BRCM_INT_PCI_MSI_MASK;
  
        writel(val, msi->intr_base + MSI_INT_MASK_CLR);
        writel(val, msi->intr_base + MSI_INT_CLR);
@@@ -692,6 -771,12 +802,12 @@@ static int brcm_pcie_enable_msi(struct 
        msi->irq = irq;
        msi->legacy = pcie->hw_rev < BRCM_PCIE_HW_REV_33;
  
+       /*
+        * Sanity check to make sure that the 'used' bitmap in struct brcm_msi
+        * is large enough.
+        */
+       BUILD_BUG_ON(BRCM_INT_PCI_MSI_LEGACY_NR > BRCM_INT_PCI_MSI_NR);
        if (msi->legacy) {
                msi->intr_base = msi->base + PCIE_INTR2_CPU_BASE;
                msi->nr = BRCM_INT_PCI_MSI_LEGACY_NR;
@@@ -742,6 -827,18 +858,18 @@@ static void __iomem *brcm_pcie_map_conf
        /* Accesses to the RC go right to the RC registers if slot==0 */
        if (pci_is_root_bus(bus))
                return PCI_SLOT(devfn) ? NULL : base + where;
+       if (pcie->refusal_mode) {
+               /*
+                * At this point we do not have link.  There will be a CPU
+                * abort -- a quirk with this controller --if Linux tries
+                * to read any config-space registers besides those
+                * targeting the host bridge.  To prevent this we hijack
+                * the address to point to a safe access that will return
+                * 0xffffffff.
+                */
+               writel(0xffffffff, base + PCIE_MISC_RC_BAR2_CONFIG_HI);
+               return base + PCIE_MISC_RC_BAR2_CONFIG_HI + (where & 0x3);
+       }
  
        /* For devices, write to the config space index register */
        idx = PCIE_ECAM_OFFSET(bus->number, devfn, 0);
        return base + PCIE_EXT_CFG_DATA + where;
  }
  
 +static void __iomem *brcm_pcie_map_conf32(struct pci_bus *bus, unsigned int devfn,
 +                                       int where)
 +{
 +      struct brcm_pcie *pcie = bus->sysdata;
 +      void __iomem *base = pcie->base;
 +      int idx;
 +
 +      /* Accesses to the RC go right to the RC registers if slot==0 */
 +      if (pci_is_root_bus(bus))
 +              return PCI_SLOT(devfn) ? NULL : base + (where & ~0x3);
 +
 +      /* For devices, write to the config space index register */
 +      idx = PCIE_ECAM_OFFSET(bus->number, devfn, (where & ~3));
 +      writel(idx, base + IDX_ADDR(pcie));
 +      return base + DATA_ADDR(pcie);
 +}
 +
  static struct pci_ops brcm_pcie_ops = {
        .map_bus = brcm_pcie_map_conf,
        .read = pci_generic_config_read,
        .write = pci_generic_config_write,
+       .add_bus = brcm_pcie_add_bus,
+       .remove_bus = pci_subdev_regulators_remove_bus,
  };
  
 +static struct pci_ops brcm_pcie_ops32 = {
 +      .map_bus = brcm_pcie_map_conf32,
 +      .read = pci_generic_config_read32,
 +      .write = pci_generic_config_write32,
 +};
 +
  static inline void brcm_pcie_bridge_sw_init_set_generic(struct brcm_pcie *pcie, u32 val)
  {
        u32 tmp, mask =  RGR1_SW_INIT_1_INIT_GENERIC_MASK;
@@@ -917,16 -993,9 +1047,9 @@@ static inline int brcm_pcie_get_rc_bar2
  
  static int brcm_pcie_setup(struct brcm_pcie *pcie)
  {
-       struct pci_host_bridge *bridge = pci_host_bridge_from_priv(pcie);
        u64 rc_bar2_offset, rc_bar2_size;
        void __iomem *base = pcie->base;
-       struct device *dev = pcie->dev;
-       struct resource_entry *entry;
-       bool ssc_good = false;
-       struct resource *res;
-       int num_out_wins = 0;
-       u16 nlw, cls, lnksta;
-       int i, ret, memc;
+       int ret, memc;
        u32 tmp, burst, aspm_support;
  
        /* Reset the bridge */
        pcie->bridge_sw_init_set(pcie, 0);
  
        tmp = readl(base + PCIE_MISC_HARD_PCIE_HARD_DEBUG);
 -      tmp &= ~PCIE_MISC_HARD_PCIE_HARD_DEBUG_SERDES_IDDQ_MASK;
 +      if (is_bmips(pcie))
 +              tmp &= ~PCIE_BMIPS_MISC_HARD_PCIE_HARD_DEBUG_SERDES_IDDQ_MASK;
 +      else
 +              tmp &= ~PCIE_MISC_HARD_PCIE_HARD_DEBUG_SERDES_IDDQ_MASK;
        writel(tmp, base + PCIE_MISC_HARD_PCIE_HARD_DEBUG);
        /* Wait for SerDes to be stable */
        usleep_range(100, 200);
         * is encoded as 0=128, 1=256, 2=512, 3=Rsvd, for BCM7278 it
         * is encoded as 0=Rsvd, 1=128, 2=256, 3=512.
         */
 -      if (pcie->type == BCM2711)
 -              burst = 0x0; /* 128B */
 +      if (is_bmips(pcie))
 +              burst = 0x1; /* 256 bytes */
 +      else if (pcie->type == BCM2711)
 +              burst = 0x0; /* 128 bytes */
        else if (pcie->type == BCM7278)
                burst = 0x3; /* 512 bytes */
        else
        if (pcie->gen)
                brcm_pcie_set_gen(pcie, pcie->gen);
  
+       /* Don't advertise L0s capability if 'aspm-no-l0s' */
+       aspm_support = PCIE_LINK_STATE_L1;
+       if (!of_property_read_bool(pcie->np, "aspm-no-l0s"))
+               aspm_support |= PCIE_LINK_STATE_L0S;
+       tmp = readl(base + PCIE_RC_CFG_PRIV1_LINK_CAPABILITY);
+       u32p_replace_bits(&tmp, aspm_support,
+               PCIE_RC_CFG_PRIV1_LINK_CAPABILITY_ASPM_SUPPORT_MASK);
+       writel(tmp, base + PCIE_RC_CFG_PRIV1_LINK_CAPABILITY);
+       /*
+        * For config space accesses on the RC, show the right class for
+        * a PCIe-PCIe bridge (the default setting is to be EP mode).
+        */
+       tmp = readl(base + PCIE_RC_CFG_PRIV1_ID_VAL3);
+       u32p_replace_bits(&tmp, 0x060400,
+                         PCIE_RC_CFG_PRIV1_ID_VAL3_CLASS_CODE_MASK);
+       writel(tmp, base + PCIE_RC_CFG_PRIV1_ID_VAL3);
+       return 0;
+ }
+ static int brcm_pcie_linkup(struct brcm_pcie *pcie)
+ {
+       struct pci_host_bridge *bridge = pci_host_bridge_from_priv(pcie);
+       struct device *dev = pcie->dev;
+       void __iomem *base = pcie->base;
+       struct resource_entry *entry;
+       struct resource *res;
+       int num_out_wins = 0;
+       u16 nlw, cls, lnksta;
+       bool ssc_good = false;
+       u32 tmp;
+       int ret, i;
        /* Unassert the fundamental reset */
        pcie->perst_set(pcie, 0);
  
                        return -EINVAL;
                }
  
 +              if (is_bmips(pcie)) {
 +                      u64 start = res->start;
 +                      unsigned int j, nwins = resource_size(res) / SZ_128M;
 +
 +                      /* bmips PCIe outbound windows have a 128MB max size */
 +                      if (nwins > BRCM_NUM_PCIE_OUT_WINS)
 +                              nwins = BRCM_NUM_PCIE_OUT_WINS;
 +                      for (j = 0; j < nwins; j++, start += SZ_128M)
 +                              brcm_pcie_set_outbound_win(pcie, j, start,
 +                                                         start - entry->offset,
 +                                                         SZ_128M);
 +                      break;
 +              }
                brcm_pcie_set_outbound_win(pcie, num_out_wins, res->start,
                                           res->start - entry->offset,
                                           resource_size(res));
                num_out_wins++;
        }
  
-       /* Don't advertise L0s capability if 'aspm-no-l0s' */
-       aspm_support = PCIE_LINK_STATE_L1;
-       if (!of_property_read_bool(pcie->np, "aspm-no-l0s"))
-               aspm_support |= PCIE_LINK_STATE_L0S;
-       tmp = readl(base + PCIE_RC_CFG_PRIV1_LINK_CAPABILITY);
-       u32p_replace_bits(&tmp, aspm_support,
-               PCIE_RC_CFG_PRIV1_LINK_CAPABILITY_ASPM_SUPPORT_MASK);
-       writel(tmp, base + PCIE_RC_CFG_PRIV1_LINK_CAPABILITY);
-       /*
-        * For config space accesses on the RC, show the right class for
-        * a PCIe-PCIe bridge (the default setting is to be EP mode).
-        */
-       tmp = readl(base + PCIE_RC_CFG_PRIV1_ID_VAL3);
-       u32p_replace_bits(&tmp, 0x060400,
-                         PCIE_RC_CFG_PRIV1_ID_VAL3_CLASS_CODE_MASK);
-       writel(tmp, base + PCIE_RC_CFG_PRIV1_ID_VAL3);
        if (pcie->ssc) {
                ret = brcm_pcie_set_ssc(pcie);
                if (ret == 0)
@@@ -1212,17 -1279,60 +1351,60 @@@ static void brcm_pcie_turn_off(struct b
        pcie->bridge_sw_init_set(pcie, 1);
  }
  
+ static int pci_dev_may_wakeup(struct pci_dev *dev, void *data)
+ {
+       bool *ret = data;
+       if (device_may_wakeup(&dev->dev)) {
+               *ret = true;
+               dev_info(&dev->dev, "disable cancelled for wake-up device\n");
+       }
+       return (int) *ret;
+ }
  static int brcm_pcie_suspend(struct device *dev)
  {
        struct brcm_pcie *pcie = dev_get_drvdata(dev);
+       struct pci_host_bridge *bridge = pci_host_bridge_from_priv(pcie);
        int ret;
  
        brcm_pcie_turn_off(pcie);
-       ret = brcm_phy_stop(pcie);
-       reset_control_rearm(pcie->rescal);
+       /*
+        * If brcm_phy_stop() returns an error, just dev_err(). If we
+        * return the error it will cause the suspend to fail and this is a
+        * forgivable offense that will probably be erased on resume.
+        */
+       if (brcm_phy_stop(pcie))
+               dev_err(dev, "Could not stop phy for suspend\n");
+       ret = reset_control_rearm(pcie->rescal);
+       if (ret) {
+               dev_err(dev, "Could not rearm rescal reset\n");
+               return ret;
+       }
+       if (pcie->sr) {
+               /*
+                * Now turn off the regulators, but if at least one
+                * downstream device is enabled as a wake-up source, do not
+                * turn off regulators.
+                */
+               pcie->ep_wakeup_capable = false;
+               pci_walk_bus(bridge->bus, pci_dev_may_wakeup,
+                            &pcie->ep_wakeup_capable);
+               if (!pcie->ep_wakeup_capable) {
+                       ret = regulator_bulk_disable(pcie->sr->num_supplies,
+                                                    pcie->sr->supplies);
+                       if (ret) {
+                               dev_err(dev, "Could not turn off regulators\n");
+                               reset_control_reset(pcie->rescal);
+                               return ret;
+                       }
+               }
+       }
        clk_disable_unprepare(pcie->clk);
  
-       return ret;
+       return 0;
  }
  
  static int brcm_pcie_resume(struct device *dev)
        int ret;
  
        base = pcie->base;
-       clk_prepare_enable(pcie->clk);
+       ret = clk_prepare_enable(pcie->clk);
+       if (ret)
+               return ret;
+       if (pcie->sr) {
+               if (pcie->ep_wakeup_capable) {
+                       /*
+                        * We are resuming from a suspend.  In the suspend we
+                        * did not disable the power supplies, so there is
+                        * no need to enable them (and falsely increase their
+                        * usage count).
+                        */
+                       pcie->ep_wakeup_capable = false;
+               } else {
+                       ret = regulator_bulk_enable(pcie->sr->num_supplies,
+                                                   pcie->sr->supplies);
+                       if (ret) {
+                               dev_err(dev, "Could not turn on regulators\n");
+                               goto err_disable_clk;
+                       }
+               }
+       }
  
        ret = reset_control_reset(pcie->rescal);
        if (ret)
-               goto err_disable_clk;
+               goto err_regulator;
  
        ret = brcm_phy_start(pcie);
        if (ret)
        if (ret)
                goto err_reset;
  
+       ret = brcm_pcie_linkup(pcie);
+       if (ret)
+               goto err_reset;
        if (pcie->msi)
                brcm_msi_set_regs(pcie->msi);
  
  
  err_reset:
        reset_control_rearm(pcie->rescal);
+ err_regulator:
+       if (pcie->sr)
+               regulator_bulk_disable(pcie->sr->num_supplies, pcie->sr->supplies);
  err_disable_clk:
        clk_disable_unprepare(pcie->clk);
        return ret;
@@@ -1274,8 -1412,10 +1484,10 @@@ static void __brcm_pcie_remove(struct b
  {
        brcm_msi_remove(pcie);
        brcm_pcie_turn_off(pcie);
-       brcm_phy_stop(pcie);
-       reset_control_rearm(pcie->rescal);
+       if (brcm_phy_stop(pcie))
+               dev_err(pcie->dev, "Could not stop phy\n");
+       if (reset_control_rearm(pcie->rescal))
+               dev_err(pcie->dev, "Could not rearm rescal reset\n");
        clk_disable_unprepare(pcie->clk);
  }
  
@@@ -1298,8 -1438,6 +1510,8 @@@ static const struct of_device_id brcm_p
        { .compatible = "brcm,bcm7278-pcie", .data = &bcm7278_cfg },
        { .compatible = "brcm,bcm7216-pcie", .data = &bcm7278_cfg },
        { .compatible = "brcm,bcm7445-pcie", .data = &generic_cfg },
 +      { .compatible = "brcm,bcm7435-pcie", .data = &bcm7435_cfg },
 +      { .compatible = "brcm,bcm7425-pcie", .data = &bcm7425_cfg },
        {},
  };
  
@@@ -1389,12 -1527,22 +1601,22 @@@ static int brcm_pcie_probe(struct platf
                }
        }
  
 -      bridge->ops = &brcm_pcie_ops;
 +      bridge->ops = pcie->type == BCM7425 ? &brcm_pcie_ops32 : &brcm_pcie_ops;
        bridge->sysdata = pcie;
  
        platform_set_drvdata(pdev, pcie);
  
-       return pci_host_probe(bridge);
+       ret = pci_host_probe(bridge);
+       if (!ret && !brcm_pcie_link_up(pcie))
+               ret = -ENODEV;
+       if (ret) {
+               brcm_pcie_remove(pdev);
+               return ret;
+       }
+       return 0;
  fail:
        __brcm_pcie_remove(pcie);
        return ret;
  MODULE_DEVICE_TABLE(of, brcm_pcie_match);
  
  static const struct dev_pm_ops brcm_pcie_pm_ops = {
-       .suspend = brcm_pcie_suspend,
-       .resume = brcm_pcie_resume,
+       .suspend_noirq = brcm_pcie_suspend,
+       .resume_noirq = brcm_pcie_resume,
  };
  
  static struct platform_driver brcm_pcie_driver = {
diff --combined drivers/pci/p2pdma.c
index 454d5f6f16ffeed0c50c6ebd01d0a3df76939172,081c391690d45c8860898c610b653d1a95a8d99f..1015274bd2fede697ea4d05d6bbb0a333a0da822
@@@ -219,7 -219,7 +219,7 @@@ int pci_p2pdma_add_resource(struct pci_
        error = gen_pool_add_owner(p2pdma->pool, (unsigned long)addr,
                        pci_bus_address(pdev, bar) + offset,
                        range_len(&pgmap->range), dev_to_node(&pdev->dev),
 -                      pgmap->ref);
 +                      &pgmap->ref);
        if (error)
                goto pages_free;
  
@@@ -710,7 -710,7 +710,7 @@@ void *pci_alloc_p2pmem(struct pci_dev *
        if (!ret)
                goto out;
  
-       if (unlikely(!percpu_ref_tryget_live(ref))) {
+       if (unlikely(!percpu_ref_tryget_live_rcu(ref))) {
                gen_pool_free(p2pdma->pool, (unsigned long) ret, size);
                ret = NULL;
                goto out;
diff --combined drivers/pci/pci.c
index f3f606c232a8ab6c966cabde64a0d901a5426bfb,f45ea60fd6c48d2942089e504f7f2187ceb07fdf..9ecce435fb3f125abb5ba52455d4a6d2f40fdcdf
@@@ -1115,7 -1115,7 +1115,7 @@@ static int pci_raw_set_power_state(stru
                return -EIO;
  
        pci_read_config_word(dev, dev->pm_cap + PCI_PM_CTRL, &pmcsr);
-       if (pmcsr == (u16) ~0) {
+       if (PCI_POSSIBLE_ERROR(pmcsr)) {
                pci_err(dev, "can't change power state from %s to %s (config space inaccessible)\n",
                        pci_power_name(dev->current_state),
                        pci_power_name(state));
@@@ -1271,16 -1271,16 +1271,16 @@@ static int pci_dev_wait(struct pci_dev 
         * After reset, the device should not silently discard config
         * requests, but it may still indicate that it needs more time by
         * responding to them with CRS completions.  The Root Port will
-        * generally synthesize ~0 data to complete the read (except when
-        * CRS SV is enabled and the read was for the Vendor ID; in that
-        * case it synthesizes 0x0001 data).
+        * generally synthesize ~0 (PCI_ERROR_RESPONSE) data to complete
+        * the read (except when CRS SV is enabled and the read was for the
+        * Vendor ID; in that case it synthesizes 0x0001 data).
         *
         * Wait for the device to return a non-CRS completion.  Read the
         * Command register instead of Vendor ID so we don't have to
         * contend with the CRS SV value.
         */
        pci_read_config_dword(dev, PCI_COMMAND, &id);
-       while (id == ~0) {
+       while (PCI_POSSIBLE_ERROR(id)) {
                if (delay > timeout) {
                        pci_warn(dev, "not ready %dms after %s; giving up\n",
                                 delay - 1, reset_type);
@@@ -1556,7 -1556,7 +1556,7 @@@ static void pci_save_ltr_state(struct p
  {
        int ltr;
        struct pci_cap_saved_state *save_state;
-       u16 *cap;
+       u32 *cap;
  
        if (!pci_is_pcie(dev))
                return;
                return;
        }
  
-       cap = (u16 *)&save_state->cap.data[0];
-       pci_read_config_word(dev, ltr + PCI_LTR_MAX_SNOOP_LAT, cap++);
-       pci_read_config_word(dev, ltr + PCI_LTR_MAX_NOSNOOP_LAT, cap++);
+       /* Some broken devices only support dword access to LTR */
+       cap = &save_state->cap.data[0];
+       pci_read_config_dword(dev, ltr + PCI_LTR_MAX_SNOOP_LAT, cap);
  }
  
  static void pci_restore_ltr_state(struct pci_dev *dev)
  {
        struct pci_cap_saved_state *save_state;
        int ltr;
-       u16 *cap;
+       u32 *cap;
  
        save_state = pci_find_saved_ext_cap(dev, PCI_EXT_CAP_ID_LTR);
        ltr = pci_find_ext_capability(dev, PCI_EXT_CAP_ID_LTR);
        if (!save_state || !ltr)
                return;
  
-       cap = (u16 *)&save_state->cap.data[0];
-       pci_write_config_word(dev, ltr + PCI_LTR_MAX_SNOOP_LAT, *cap++);
-       pci_write_config_word(dev, ltr + PCI_LTR_MAX_NOSNOOP_LAT, *cap++);
+       /* Some broken devices only support dword access to LTR */
+       cap = &save_state->cap.data[0];
+       pci_write_config_dword(dev, ltr + PCI_LTR_MAX_SNOOP_LAT, *cap);
  }
  
  /**
@@@ -2024,6 -2024,11 +2024,6 @@@ static void pcim_release(struct device 
        struct pci_devres *this = res;
        int i;
  
 -      if (dev->msi_enabled)
 -              pci_disable_msi(dev);
 -      if (dev->msix_enabled)
 -              pci_disable_msix(dev);
 -
        for (i = 0; i < DEVICE_COUNT_RESOURCE; i++)
                if (this->region_mask & (1 << i))
                        pci_release_region(dev, i);
diff --combined drivers/pci/probe.c
index 443efb00e21933c1eb3549c484aa63552d58536f,70ceb30bcad62284045cda55149d9d135ca9b83d..17a969942d37033ace71beeb3f1f7f82920bdb7b
@@@ -206,14 -206,14 +206,14 @@@ int __pci_read_base(struct pci_dev *dev
         * memory BAR or a ROM, bit 0 must be clear; if it's an io BAR, bit
         * 1 must be clear.
         */
-       if (sz == 0xffffffff)
+       if (PCI_POSSIBLE_ERROR(sz))
                sz = 0;
  
        /*
         * I don't know how l can have all bits set.  Copied from old code.
         * Maybe it fixes a bug on some ancient platform.
         */
-       if (l == 0xffffffff)
+       if (PCI_POSSIBLE_ERROR(l))
                l = 0;
  
        if (type == pci_bar_unknown) {
@@@ -898,8 -898,6 +898,6 @@@ static int pci_register_host_bridge(str
  
        bridge->bus = bus;
  
-       /* Temporarily move resources off the list */
-       list_splice_init(&bridge->windows, &resources);
        bus->sysdata = bridge->sysdata;
        bus->ops = bridge->ops;
        bus->number = bus->busn_res.start = bridge->busnr;
        if (err)
                goto free;
  
+       /* Temporarily move resources off the list */
+       list_splice_init(&bridge->windows, &resources);
        err = device_add(&bridge->dev);
        if (err) {
                put_device(&bridge->dev);
@@@ -1579,20 -1579,12 +1579,12 @@@ void set_pcie_hotplug_bridge(struct pci
  
  static void set_pcie_thunderbolt(struct pci_dev *dev)
  {
-       int vsec = 0;
-       u32 header;
+       u16 vsec;
  
-       while ((vsec = pci_find_next_ext_capability(dev, vsec,
-                                                   PCI_EXT_CAP_ID_VNDR))) {
-               pci_read_config_dword(dev, vsec + PCI_VNDR_HEADER, &header);
-               /* Is the device part of a Thunderbolt controller? */
-               if (dev->vendor == PCI_VENDOR_ID_INTEL &&
-                   PCI_VNDR_HEADER_ID(header) == PCI_VSEC_ID_INTEL_TBT) {
-                       dev->is_thunderbolt = 1;
-                       return;
-               }
-       }
+       /* Is the device part of a Thunderbolt controller? */
+       vsec = pci_find_vsec_capability(dev, PCI_VENDOR_ID_INTEL, PCI_VSEC_ID_INTEL_TBT);
+       if (vsec)
+               dev->is_thunderbolt = 1;
  }
  
  static void set_pcie_untrusted(struct pci_dev *dev)
@@@ -1683,7 -1675,7 +1675,7 @@@ static int pci_cfg_space_size_ext(struc
  
        if (pci_read_config_dword(dev, pos, &status) != PCIBIOS_SUCCESSFUL)
                return PCI_CFG_SPACE_SIZE;
-       if (status == 0xffffffff || pci_ext_cfg_is_aliased(dev))
+       if (PCI_POSSIBLE_ERROR(status) || pci_ext_cfg_is_aliased(dev))
                return PCI_CFG_SPACE_SIZE;
  
        return PCI_CFG_SPACE_EXP_SIZE;
@@@ -2311,9 -2303,7 +2303,9 @@@ struct pci_dev *pci_alloc_dev(struct pc
        INIT_LIST_HEAD(&dev->bus_list);
        dev->dev.type = &pci_dev_type;
        dev->bus = pci_bus_get(bus);
 -
 +#ifdef CONFIG_PCI_MSI
 +      raw_spin_lock_init(&dev->msi_lock);
 +#endif
        return dev;
  }
  EXPORT_SYMBOL(pci_alloc_dev);
@@@ -2373,8 -2363,8 +2365,8 @@@ bool pci_bus_generic_read_dev_vendor_id
        if (pci_bus_read_config_dword(bus, devfn, PCI_VENDOR_ID, l))
                return false;
  
-       /* Some broken boards return 0 or ~0 if a slot is empty: */
-       if (*l == 0xffffffff || *l == 0x00000000 ||
+       /* Some broken boards return 0 or ~0 (PCI_ERROR_RESPONSE) if a slot is empty: */
+       if (PCI_POSSIBLE_ERROR(*l) || *l == 0x00000000 ||
            *l == 0x0000ffff || *l == 0xffff0000)
                return false;
  
diff --combined drivers/pci/quirks.c
index b4cb658cce2b15d9958b676e970be82c8d40060f,6c7410ccc74be88aab3a261f88704691c48ff358..d2dd6a6cda608ada20cee2f25acc2dda458027cb
@@@ -980,8 -980,8 +980,8 @@@ static void quirk_via_ioapic(struct pci
        else
                tmp = 0x1f; /* all known bits (4-0) routed to external APIC */
  
-       pci_info(dev, "%sbling VIA external APIC routing\n",
-              tmp == 0 ? "Disa" : "Ena");
+       pci_info(dev, "%s VIA external APIC routing\n",
+                tmp ? "Enabling" : "Disabling");
  
        /* Offset 0x58: External APIC IRQ output control */
        pci_write_config_byte(dev, 0x58, tmp);
@@@ -1850,7 -1850,7 +1850,7 @@@ static void quirk_huawei_pcie_sva(struc
         * can set it directly.
         */
        if (!pdev->dev.of_node &&
 -          device_add_properties(&pdev->dev, properties))
 +          device_create_managed_software_node(&pdev->dev, properties, NULL))
                pci_warn(pdev, "could not add stall property");
  }
  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_HUAWEI, 0xa250, quirk_huawei_pcie_sva);
@@@ -4103,6 -4103,9 +4103,9 @@@ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_
                         quirk_dma_func1_alias);
  DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MARVELL_EXT, 0x9123,
                         quirk_dma_func1_alias);
+ /* https://bugzilla.kernel.org/show_bug.cgi?id=42679#c136 */
+ DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MARVELL_EXT, 0x9125,
+                        quirk_dma_func1_alias);
  DECLARE_PCI_FIXUP_HEADER(PCI_VENDOR_ID_MARVELL_EXT, 0x9128,
                         quirk_dma_func1_alias);
  /* https://bugzilla.kernel.org/show_bug.cgi?id=42679#c14 */
@@@ -5683,6 -5686,15 +5686,15 @@@ SWITCHTEC_QUIRK(0x4268);  /* PAX 68XG
  SWITCHTEC_QUIRK(0x4252);  /* PAX 52XG4  */
  SWITCHTEC_QUIRK(0x4236);  /* PAX 36XG4  */
  SWITCHTEC_QUIRK(0x4228);  /* PAX 28XG4  */
+ SWITCHTEC_QUIRK(0x4352);  /* PFXA 52XG4 */
+ SWITCHTEC_QUIRK(0x4336);  /* PFXA 36XG4 */
+ SWITCHTEC_QUIRK(0x4328);  /* PFXA 28XG4 */
+ SWITCHTEC_QUIRK(0x4452);  /* PSXA 52XG4 */
+ SWITCHTEC_QUIRK(0x4436);  /* PSXA 36XG4 */
+ SWITCHTEC_QUIRK(0x4428);  /* PSXA 28XG4 */
+ SWITCHTEC_QUIRK(0x4552);  /* PAXA 52XG4 */
+ SWITCHTEC_QUIRK(0x4536);  /* PAXA 36XG4 */
+ SWITCHTEC_QUIRK(0x4528);  /* PAXA 28XG4 */
  
  /*
   * The PLX NTB uses devfn proxy IDs to move TLPs between NT endpoints.
@@@ -5857,3 -5869,13 +5869,13 @@@ static void nvidia_ion_ahci_fixup(struc
        pdev->dev_flags |= PCI_DEV_FLAGS_HAS_MSI_MASKING;
  }
  DECLARE_PCI_FIXUP_FINAL(PCI_VENDOR_ID_NVIDIA, 0x0ab8, nvidia_ion_ahci_fixup);
+ static void rom_bar_overlap_defect(struct pci_dev *dev)
+ {
+       pci_info(dev, "working around ROM BAR overlap defect\n");
+       dev->rom_bar_overlap = 1;
+ }
+ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x1533, rom_bar_overlap_defect);
+ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x1536, rom_bar_overlap_defect);
+ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x1537, rom_bar_overlap_defect);
+ DECLARE_PCI_FIXUP_EARLY(PCI_VENDOR_ID_INTEL, 0x1538, rom_bar_overlap_defect);
diff --combined include/linux/pci.h
index 0a7b6b2f163b1d4bd6633f20e9b983ef412fb789,99028eac89f7d86fd9ddd424fef80a9b7df2115d..8253a5413d7c4215b8e9d8befd3f3a72d8b6bab8
@@@ -154,6 -154,15 +154,15 @@@ enum pci_interrupt_pin 
  /* The number of legacy PCI INTx interrupts */
  #define PCI_NUM_INTX  4
  
+ /*
+  * Reading from a device that doesn't respond typically returns ~0.  A
+  * successful read from a device may also return ~0, so you need additional
+  * information to reliably identify errors.
+  */
+ #define PCI_ERROR_RESPONSE            (~0ULL)
+ #define PCI_SET_ERROR_RESPONSE(val)   (*(val) = ((typeof(*(val))) PCI_ERROR_RESPONSE))
+ #define PCI_POSSIBLE_ERROR(val)               ((val) == ((typeof(val)) PCI_ERROR_RESPONSE))
  /*
   * pci_power_t values must match the bits in the Capabilities PME_Support
   * and Control/Status PowerState fields in the Power Management capability.
@@@ -425,8 -434,7 +434,8 @@@ struct pci_dev 
        unsigned int    ats_enabled:1;          /* Address Translation Svc */
        unsigned int    pasid_enabled:1;        /* Process Address Space ID */
        unsigned int    pri_enabled:1;          /* Page Request Interface */
 -      unsigned int    is_managed:1;
 +      unsigned int    is_managed:1;           /* Managed via devres */
 +      unsigned int    is_msi_managed:1;       /* MSI release via devres installed */
        unsigned int    needs_freset:1;         /* Requires fundamental reset */
        unsigned int    state_saved:1;
        unsigned int    is_physfn:1;
        unsigned int    link_active_reporting:1;/* Device capable of reporting link active */
        unsigned int    no_vf_scan:1;           /* Don't scan for VFs after IOV enablement */
        unsigned int    no_command_memory:1;    /* No PCI_COMMAND_MEMORY */
+       unsigned int    rom_bar_overlap:1;      /* ROM BAR disable broken */
        pci_dev_flags_t dev_flags;
        atomic_t        enable_cnt;     /* pci_enable_device has been called */
  
        u8              ptm_granularity;
  #endif
  #ifdef CONFIG_PCI_MSI
 -      const struct attribute_group **msi_irq_groups;
 +      void __iomem    *msix_base;
 +      raw_spinlock_t  msi_lock;
  #endif
        struct pci_vpd  vpd;
  #ifdef CONFIG_PCIE_DPC
@@@ -1777,7 -1785,10 +1787,10 @@@ static inline struct pci_dev *pci_get_c
                                            struct pci_dev *from)
  { return NULL; }
  
- #define pci_dev_present(ids)  (0)
+ static inline int pci_dev_present(const struct pci_device_id *ids)
+ { return 0; }
  #define no_pci_devices()      (1)
  #define pci_dev_put(dev)      do { } while (0)
  
diff --combined include/linux/pci_ids.h
index 86678588d191ef55d54af6f71138b568f5a60771,0d26ab7eb7dcef40f7bfc4b980fca5f4581c7df0..aad54c66640774643e68910ed23f882a55655592
  #define PCI_DEVICE_ID_AMD_17H_M60H_DF_F3 0x144b
  #define PCI_DEVICE_ID_AMD_17H_M70H_DF_F3 0x1443
  #define PCI_DEVICE_ID_AMD_19H_DF_F3   0x1653
 +#define PCI_DEVICE_ID_AMD_19H_M10H_DF_F3 0x14b0
  #define PCI_DEVICE_ID_AMD_19H_M40H_DF_F3 0x167c
  #define PCI_DEVICE_ID_AMD_19H_M50H_DF_F3 0x166d
  #define PCI_DEVICE_ID_AMD_CNB17H_F3   0x1703
  #define PCI_DEVICE_ID_APPLICOM_PCI2000PFB 0x0003
  
  #define PCI_VENDOR_ID_MOXA            0x1393
 -#define PCI_DEVICE_ID_MOXA_RC7000     0x0001
 -#define PCI_DEVICE_ID_MOXA_CP102      0x1020
 -#define PCI_DEVICE_ID_MOXA_CP102UL    0x1021
 -#define PCI_DEVICE_ID_MOXA_CP102U     0x1022
 -#define PCI_DEVICE_ID_MOXA_C104               0x1040
 -#define PCI_DEVICE_ID_MOXA_CP104U     0x1041
 -#define PCI_DEVICE_ID_MOXA_CP104JU    0x1042
 -#define PCI_DEVICE_ID_MOXA_CP104EL    0x1043
 -#define PCI_DEVICE_ID_MOXA_CT114      0x1140
 -#define PCI_DEVICE_ID_MOXA_CP114      0x1141
 -#define PCI_DEVICE_ID_MOXA_CP118U     0x1180
 -#define PCI_DEVICE_ID_MOXA_CP118EL    0x1181
 -#define PCI_DEVICE_ID_MOXA_CP132      0x1320
 -#define PCI_DEVICE_ID_MOXA_CP132U     0x1321
 -#define PCI_DEVICE_ID_MOXA_CP134U     0x1340
 -#define PCI_DEVICE_ID_MOXA_C168               0x1680
 -#define PCI_DEVICE_ID_MOXA_CP168U     0x1681
 -#define PCI_DEVICE_ID_MOXA_CP168EL    0x1682
  #define PCI_DEVICE_ID_MOXA_CP204J     0x2040
  #define PCI_DEVICE_ID_MOXA_C218               0x2180
  #define PCI_DEVICE_ID_MOXA_C320               0x3200
  #define PCI_DEVICE_ID_INTEL_PXHD_0    0x0320
  #define PCI_DEVICE_ID_INTEL_PXHD_1    0x0321
  #define PCI_DEVICE_ID_INTEL_PXH_0     0x0329
- #define PCI_DEVICE_ID_INTEL_PXH_1     0x032A
- #define PCI_DEVICE_ID_INTEL_PXHV      0x032C
+ #define PCI_DEVICE_ID_INTEL_PXH_1     0x032a
+ #define PCI_DEVICE_ID_INTEL_PXHV      0x032c
  #define PCI_DEVICE_ID_INTEL_80332_0   0x0330
  #define PCI_DEVICE_ID_INTEL_80332_1   0x0332
  #define PCI_DEVICE_ID_INTEL_80333_0   0x0370
  #define PCI_DEVICE_ID_INTEL_MFD_SDIO2 0x0822
  #define PCI_DEVICE_ID_INTEL_MFD_EMMC0 0x0823
  #define PCI_DEVICE_ID_INTEL_MFD_EMMC1 0x0824
- #define PCI_DEVICE_ID_INTEL_MRST_SD2  0x084F
- #define PCI_DEVICE_ID_INTEL_QUARK_X1000_ILB   0x095E
+ #define PCI_DEVICE_ID_INTEL_MRST_SD2  0x084f
+ #define PCI_DEVICE_ID_INTEL_QUARK_X1000_ILB   0x095e
  #define PCI_DEVICE_ID_INTEL_I960      0x0960
  #define PCI_DEVICE_ID_INTEL_I960RM    0x0962
  #define PCI_DEVICE_ID_INTEL_CENTERTON_ILB     0x0c60
  #define PCI_DEVICE_ID_INTEL_8257X_SOL 0x1062
  #define PCI_DEVICE_ID_INTEL_82573E_SOL        0x1085
- #define PCI_DEVICE_ID_INTEL_82573L_SOL        0x108F
+ #define PCI_DEVICE_ID_INTEL_82573L_SOL        0x108f
  #define PCI_DEVICE_ID_INTEL_82815_MC  0x1130
  #define PCI_DEVICE_ID_INTEL_82815_CGC 0x1132
  #define PCI_DEVICE_ID_INTEL_82092AA_0 0x1221
  #define PCI_DEVICE_ID_INTEL_82801EB_11        0x24db
  #define PCI_DEVICE_ID_INTEL_82801EB_12        0x24dc
  #define PCI_DEVICE_ID_INTEL_82801EB_13        0x24dd
- #define PCI_DEVICE_ID_INTEL_ESB_1     0x25a1
- #define PCI_DEVICE_ID_INTEL_ESB_2     0x25a2
- #define PCI_DEVICE_ID_INTEL_ESB_4     0x25a4
- #define PCI_DEVICE_ID_INTEL_ESB_5     0x25a6
- #define PCI_DEVICE_ID_INTEL_ESB_9     0x25ab
- #define PCI_DEVICE_ID_INTEL_ESB_10    0x25ac
  #define PCI_DEVICE_ID_INTEL_82820_HB  0x2500
  #define PCI_DEVICE_ID_INTEL_82820_UP_HB       0x2501
  #define PCI_DEVICE_ID_INTEL_82850_HB  0x2530
  #define PCI_DEVICE_ID_INTEL_82915G_IG 0x2582
  #define PCI_DEVICE_ID_INTEL_82915GM_HB        0x2590
  #define PCI_DEVICE_ID_INTEL_82915GM_IG        0x2592
- #define PCI_DEVICE_ID_INTEL_5000_ERR  0x25F0
- #define PCI_DEVICE_ID_INTEL_5000_FBD0 0x25F5
- #define PCI_DEVICE_ID_INTEL_5000_FBD1 0x25F6
- #define PCI_DEVICE_ID_INTEL_82945G_HB 0x2770
- #define PCI_DEVICE_ID_INTEL_82945G_IG 0x2772
- #define PCI_DEVICE_ID_INTEL_3000_HB   0x2778
- #define PCI_DEVICE_ID_INTEL_82945GM_HB        0x27A0
- #define PCI_DEVICE_ID_INTEL_82945GM_IG        0x27A2
+ #define PCI_DEVICE_ID_INTEL_ESB_1     0x25a1
+ #define PCI_DEVICE_ID_INTEL_ESB_2     0x25a2
+ #define PCI_DEVICE_ID_INTEL_ESB_4     0x25a4
+ #define PCI_DEVICE_ID_INTEL_ESB_5     0x25a6
+ #define PCI_DEVICE_ID_INTEL_ESB_9     0x25ab
+ #define PCI_DEVICE_ID_INTEL_ESB_10    0x25ac
+ #define PCI_DEVICE_ID_INTEL_5000_ERR  0x25f0
+ #define PCI_DEVICE_ID_INTEL_5000_FBD0 0x25f5
+ #define PCI_DEVICE_ID_INTEL_5000_FBD1 0x25f6
  #define PCI_DEVICE_ID_INTEL_ICH6_0    0x2640
  #define PCI_DEVICE_ID_INTEL_ICH6_1    0x2641
  #define PCI_DEVICE_ID_INTEL_ICH6_2    0x2642
  #define PCI_DEVICE_ID_INTEL_ESB2_14   0x2698
  #define PCI_DEVICE_ID_INTEL_ESB2_17   0x269b
  #define PCI_DEVICE_ID_INTEL_ESB2_18   0x269e
+ #define PCI_DEVICE_ID_INTEL_82945G_HB 0x2770
+ #define PCI_DEVICE_ID_INTEL_82945G_IG 0x2772
+ #define PCI_DEVICE_ID_INTEL_3000_HB   0x2778
+ #define PCI_DEVICE_ID_INTEL_82945GM_HB        0x27a0
+ #define PCI_DEVICE_ID_INTEL_82945GM_IG        0x27a2
  #define PCI_DEVICE_ID_INTEL_ICH7_0    0x27b8
  #define PCI_DEVICE_ID_INTEL_ICH7_1    0x27b9
  #define PCI_DEVICE_ID_INTEL_ICH7_30   0x27b0
  #define PCI_DEVICE_ID_INTEL_LYNNFIELD_QPI_PHY0    0x2c91
  #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MCR         0x2c98
  #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_TAD      0x2c99
- #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_TEST     0x2c9C
+ #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_TEST     0x2c9c
  #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_CTRL 0x2ca0
  #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_ADDR 0x2ca1
  #define PCI_DEVICE_ID_INTEL_LYNNFIELD_MC_CH0_RANK 0x2ca2
  #define PCI_DEVICE_ID_INTEL_SBRIDGE_BR                0x3cf5  /* 13.6 */
  #define PCI_DEVICE_ID_INTEL_SBRIDGE_SAD1      0x3cf6  /* 12.7 */
  #define PCI_DEVICE_ID_INTEL_IOAT_SNB  0x402f
- #define PCI_DEVICE_ID_INTEL_5100_16   0x65f0
- #define PCI_DEVICE_ID_INTEL_5100_19   0x65f3
- #define PCI_DEVICE_ID_INTEL_5100_21   0x65f5
- #define PCI_DEVICE_ID_INTEL_5100_22   0x65f6
  #define PCI_DEVICE_ID_INTEL_5400_ERR  0x4030
  #define PCI_DEVICE_ID_INTEL_5400_FBD0 0x4035
  #define PCI_DEVICE_ID_INTEL_5400_FBD1 0x4036
- #define PCI_DEVICE_ID_INTEL_IOAT_SCNB 0x65ff
  #define PCI_DEVICE_ID_INTEL_EP80579_0 0x5031
  #define PCI_DEVICE_ID_INTEL_EP80579_1 0x5032
+ #define PCI_DEVICE_ID_INTEL_5100_16   0x65f0
+ #define PCI_DEVICE_ID_INTEL_5100_19   0x65f3
+ #define PCI_DEVICE_ID_INTEL_5100_21   0x65f5
+ #define PCI_DEVICE_ID_INTEL_5100_22   0x65f6
+ #define PCI_DEVICE_ID_INTEL_IOAT_SCNB 0x65ff
  #define PCI_DEVICE_ID_INTEL_82371SB_0 0x7000
  #define PCI_DEVICE_ID_INTEL_82371SB_1 0x7010
  #define PCI_DEVICE_ID_INTEL_82371SB_2 0x7020
index 318f3f1f9e92f9e7ea8e4c28069800fe49a9c934,fe86f5310d76e8277261d312bc9557bcc1036555..bee1a9ed6e663fe44b95f1abf8c770f519c1d68a
  #define  PCI_SID_ESR_FIC      0x20    /* First In Chassis Flag */
  #define PCI_SID_CHASSIS_NR    3       /* Chassis Number */
  
- /* Message Signalled Interrupt registers */
+ /* Message Signaled Interrupt registers */
  
- #define PCI_MSI_FLAGS         2       /* Message Control */
+ #define PCI_MSI_FLAGS         0x02    /* Message Control */
  #define  PCI_MSI_FLAGS_ENABLE 0x0001  /* MSI feature enabled */
  #define  PCI_MSI_FLAGS_QMASK  0x000e  /* Maximum queue size available */
  #define  PCI_MSI_FLAGS_QSIZE  0x0070  /* Message queue size configured */
  #define  PCI_MSI_FLAGS_64BIT  0x0080  /* 64-bit addresses allowed */
  #define  PCI_MSI_FLAGS_MASKBIT        0x0100  /* Per-vector masking capable */
  #define PCI_MSI_RFU           3       /* Rest of capability flags */
- #define PCI_MSI_ADDRESS_LO    4       /* Lower 32 bits */
- #define PCI_MSI_ADDRESS_HI    8       /* Upper 32 bits (if PCI_MSI_FLAGS_64BIT set) */
- #define PCI_MSI_DATA_32               8       /* 16 bits of data for 32-bit devices */
- #define PCI_MSI_MASK_32               12      /* Mask bits register for 32-bit devices */
- #define PCI_MSI_PENDING_32    16      /* Pending intrs for 32-bit devices */
- #define PCI_MSI_DATA_64               12      /* 16 bits of data for 64-bit devices */
- #define PCI_MSI_MASK_64               16      /* Mask bits register for 64-bit devices */
- #define PCI_MSI_PENDING_64    20      /* Pending intrs for 64-bit devices */
+ #define PCI_MSI_ADDRESS_LO    0x04    /* Lower 32 bits */
+ #define PCI_MSI_ADDRESS_HI    0x08    /* Upper 32 bits (if PCI_MSI_FLAGS_64BIT set) */
+ #define PCI_MSI_DATA_32               0x08    /* 16 bits of data for 32-bit devices */
+ #define PCI_MSI_MASK_32               0x0c    /* Mask bits register for 32-bit devices */
+ #define PCI_MSI_PENDING_32    0x10    /* Pending intrs for 32-bit devices */
+ #define PCI_MSI_DATA_64               0x0c    /* 16 bits of data for 64-bit devices */
+ #define PCI_MSI_MASK_64               0x10    /* Mask bits register for 64-bit devices */
+ #define PCI_MSI_PENDING_64    0x14    /* Pending intrs for 64-bit devices */
  
  /* MSI-X registers (in MSI-X capability) */
  #define PCI_MSIX_FLAGS                2       /* Message Control */
  
  /* MSI-X Table entry format (in memory mapped by a BAR) */
  #define PCI_MSIX_ENTRY_SIZE           16
- #define PCI_MSIX_ENTRY_LOWER_ADDR     0  /* Message Address */
- #define PCI_MSIX_ENTRY_UPPER_ADDR     4  /* Message Upper Address */
- #define PCI_MSIX_ENTRY_DATA           8  /* Message Data */
- #define PCI_MSIX_ENTRY_VECTOR_CTRL    12 /* Vector Control */
+ #define PCI_MSIX_ENTRY_LOWER_ADDR     0x0  /* Message Address */
+ #define PCI_MSIX_ENTRY_UPPER_ADDR     0x4  /* Message Upper Address */
+ #define PCI_MSIX_ENTRY_DATA           0x8  /* Message Data */
+ #define PCI_MSIX_ENTRY_VECTOR_CTRL    0xc  /* Vector Control */
  #define  PCI_MSIX_ENTRY_CTRL_MASKBIT  0x00000001
  
  /* CompactPCI Hotswap Register */
  
  /* PCI Express capability registers */
  
- #define PCI_EXP_FLAGS         2       /* Capabilities register */
+ #define PCI_EXP_FLAGS         0x02    /* Capabilities register */
  #define  PCI_EXP_FLAGS_VERS   0x000f  /* Capability version */
  #define  PCI_EXP_FLAGS_TYPE   0x00f0  /* Device/Port type */
  #define   PCI_EXP_TYPE_ENDPOINT          0x0  /* Express Endpoint */
  #define   PCI_EXP_TYPE_RC_EC     0xa  /* Root Complex Event Collector */
  #define  PCI_EXP_FLAGS_SLOT   0x0100  /* Slot implemented */
  #define  PCI_EXP_FLAGS_IRQ    0x3e00  /* Interrupt message number */
- #define PCI_EXP_DEVCAP                4       /* Device capabilities */
+ #define PCI_EXP_DEVCAP                0x04    /* Device capabilities */
  #define  PCI_EXP_DEVCAP_PAYLOAD       0x00000007 /* Max_Payload_Size */
  #define  PCI_EXP_DEVCAP_PHANTOM       0x00000018 /* Phantom functions */
  #define  PCI_EXP_DEVCAP_EXT_TAG       0x00000020 /* Extended tags */
  #define  PCI_EXP_DEVCAP_PWR_VAL       0x03fc0000 /* Slot Power Limit Value */
  #define  PCI_EXP_DEVCAP_PWR_SCL       0x0c000000 /* Slot Power Limit Scale */
  #define  PCI_EXP_DEVCAP_FLR     0x10000000 /* Function Level Reset */
- #define PCI_EXP_DEVCTL                8       /* Device Control */
+ #define PCI_EXP_DEVCTL                0x08    /* Device Control */
  #define  PCI_EXP_DEVCTL_CERE  0x0001  /* Correctable Error Reporting En. */
  #define  PCI_EXP_DEVCTL_NFERE 0x0002  /* Non-Fatal Error Reporting Enable */
  #define  PCI_EXP_DEVCTL_FERE  0x0004  /* Fatal Error Reporting Enable */
  #define  PCI_EXP_DEVCTL_READRQ_2048B 0x4000 /* 2048 Bytes */
  #define  PCI_EXP_DEVCTL_READRQ_4096B 0x5000 /* 4096 Bytes */
  #define  PCI_EXP_DEVCTL_BCR_FLR 0x8000  /* Bridge Configuration Retry / FLR */
- #define PCI_EXP_DEVSTA                10      /* Device Status */
+ #define PCI_EXP_DEVSTA                0x0a    /* Device Status */
  #define  PCI_EXP_DEVSTA_CED   0x0001  /* Correctable Error Detected */
  #define  PCI_EXP_DEVSTA_NFED  0x0002  /* Non-Fatal Error Detected */
  #define  PCI_EXP_DEVSTA_FED   0x0004  /* Fatal Error Detected */
  #define  PCI_EXP_DEVSTA_AUXPD 0x0010  /* AUX Power Detected */
  #define  PCI_EXP_DEVSTA_TRPND 0x0020  /* Transactions Pending */
  #define PCI_CAP_EXP_RC_ENDPOINT_SIZEOF_V1     12      /* v1 endpoints without link end here */
- #define PCI_EXP_LNKCAP                12      /* Link Capabilities */
+ #define PCI_EXP_LNKCAP                0x0c    /* Link Capabilities */
  #define  PCI_EXP_LNKCAP_SLS   0x0000000f /* Supported Link Speeds */
  #define  PCI_EXP_LNKCAP_SLS_2_5GB 0x00000001 /* LNKCAP2 SLS Vector bit 0 */
  #define  PCI_EXP_LNKCAP_SLS_5_0GB 0x00000002 /* LNKCAP2 SLS Vector bit 1 */
  #define  PCI_EXP_LNKCAP_DLLLARC       0x00100000 /* Data Link Layer Link Active Reporting Capable */
  #define  PCI_EXP_LNKCAP_LBNC  0x00200000 /* Link Bandwidth Notification Capability */
  #define  PCI_EXP_LNKCAP_PN    0xff000000 /* Port Number */
- #define PCI_EXP_LNKCTL                16      /* Link Control */
+ #define PCI_EXP_LNKCTL                0x10    /* Link Control */
  #define  PCI_EXP_LNKCTL_ASPMC 0x0003  /* ASPM Control */
  #define  PCI_EXP_LNKCTL_ASPM_L0S 0x0001       /* L0s Enable */
  #define  PCI_EXP_LNKCTL_ASPM_L1  0x0002       /* L1 Enable */
  #define  PCI_EXP_LNKCTL_HAWD  0x0200  /* Hardware Autonomous Width Disable */
  #define  PCI_EXP_LNKCTL_LBMIE 0x0400  /* Link Bandwidth Management Interrupt Enable */
  #define  PCI_EXP_LNKCTL_LABIE 0x0800  /* Link Autonomous Bandwidth Interrupt Enable */
- #define PCI_EXP_LNKSTA                18      /* Link Status */
+ #define PCI_EXP_LNKSTA                0x12    /* Link Status */
  #define  PCI_EXP_LNKSTA_CLS   0x000f  /* Current Link Speed */
  #define  PCI_EXP_LNKSTA_CLS_2_5GB 0x0001 /* Current Link Speed 2.5GT/s */
  #define  PCI_EXP_LNKSTA_CLS_5_0GB 0x0002 /* Current Link Speed 5.0GT/s */
  #define  PCI_EXP_LNKSTA_LBMS  0x4000  /* Link Bandwidth Management Status */
  #define  PCI_EXP_LNKSTA_LABS  0x8000  /* Link Autonomous Bandwidth Status */
  #define PCI_CAP_EXP_ENDPOINT_SIZEOF_V1        20      /* v1 endpoints with link end here */
- #define PCI_EXP_SLTCAP                20      /* Slot Capabilities */
+ #define PCI_EXP_SLTCAP                0x14    /* Slot Capabilities */
  #define  PCI_EXP_SLTCAP_ABP   0x00000001 /* Attention Button Present */
  #define  PCI_EXP_SLTCAP_PCP   0x00000002 /* Power Controller Present */
  #define  PCI_EXP_SLTCAP_MRLSP 0x00000004 /* MRL Sensor Present */
  #define  PCI_EXP_SLTCAP_EIP   0x00020000 /* Electromechanical Interlock Present */
  #define  PCI_EXP_SLTCAP_NCCS  0x00040000 /* No Command Completed Support */
  #define  PCI_EXP_SLTCAP_PSN   0xfff80000 /* Physical Slot Number */
- #define PCI_EXP_SLTCTL                24      /* Slot Control */
+ #define PCI_EXP_SLTCTL                0x18    /* Slot Control */
  #define  PCI_EXP_SLTCTL_ABPE  0x0001  /* Attention Button Pressed Enable */
  #define  PCI_EXP_SLTCTL_PFDE  0x0002  /* Power Fault Detected Enable */
  #define  PCI_EXP_SLTCTL_MRLSCE        0x0004  /* MRL Sensor Changed Enable */
  #define  PCI_EXP_SLTCTL_EIC   0x0800  /* Electromechanical Interlock Control */
  #define  PCI_EXP_SLTCTL_DLLSCE        0x1000  /* Data Link Layer State Changed Enable */
  #define  PCI_EXP_SLTCTL_IBPD_DISABLE  0x4000 /* In-band PD disable */
- #define PCI_EXP_SLTSTA                26      /* Slot Status */
+ #define PCI_EXP_SLTSTA                0x1a    /* Slot Status */
  #define  PCI_EXP_SLTSTA_ABP   0x0001  /* Attention Button Pressed */
  #define  PCI_EXP_SLTSTA_PFD   0x0002  /* Power Fault Detected */
  #define  PCI_EXP_SLTSTA_MRLSC 0x0004  /* MRL Sensor Changed */
  #define  PCI_EXP_SLTSTA_PDS   0x0040  /* Presence Detect State */
  #define  PCI_EXP_SLTSTA_EIS   0x0080  /* Electromechanical Interlock Status */
  #define  PCI_EXP_SLTSTA_DLLSC 0x0100  /* Data Link Layer State Changed */
- #define PCI_EXP_RTCTL         28      /* Root Control */
+ #define PCI_EXP_RTCTL         0x1c    /* Root Control */
  #define  PCI_EXP_RTCTL_SECEE  0x0001  /* System Error on Correctable Error */
  #define  PCI_EXP_RTCTL_SENFEE 0x0002  /* System Error on Non-Fatal Error */
  #define  PCI_EXP_RTCTL_SEFEE  0x0004  /* System Error on Fatal Error */
  #define  PCI_EXP_RTCTL_PMEIE  0x0008  /* PME Interrupt Enable */
  #define  PCI_EXP_RTCTL_CRSSVE 0x0010  /* CRS Software Visibility Enable */
- #define PCI_EXP_RTCAP         30      /* Root Capabilities */
+ #define PCI_EXP_RTCAP         0x1e    /* Root Capabilities */
  #define  PCI_EXP_RTCAP_CRSVIS 0x0001  /* CRS Software Visibility capability */
- #define PCI_EXP_RTSTA         32      /* Root Status */
+ #define PCI_EXP_RTSTA         0x20    /* Root Status */
  #define  PCI_EXP_RTSTA_PME    0x00010000 /* PME status */
  #define  PCI_EXP_RTSTA_PENDING        0x00020000 /* PME pending */
  /*
   * Use pcie_capability_read_word() and similar interfaces to use them
   * safely.
   */
- #define PCI_EXP_DEVCAP2               36      /* Device Capabilities 2 */
+ #define PCI_EXP_DEVCAP2               0x24    /* Device Capabilities 2 */
  #define  PCI_EXP_DEVCAP2_COMP_TMOUT_DIS       0x00000010 /* Completion Timeout Disable supported */
  #define  PCI_EXP_DEVCAP2_ARI          0x00000020 /* Alternative Routing-ID */
  #define  PCI_EXP_DEVCAP2_ATOMIC_ROUTE 0x00000040 /* Atomic Op routing */
  #define  PCI_EXP_DEVCAP2_OBFF_MSG     0x00040000 /* New message signaling */
  #define  PCI_EXP_DEVCAP2_OBFF_WAKE    0x00080000 /* Re-use WAKE# for OBFF */
  #define  PCI_EXP_DEVCAP2_EE_PREFIX    0x00200000 /* End-End TLP Prefix */
- #define PCI_EXP_DEVCTL2               40      /* Device Control 2 */
+ #define PCI_EXP_DEVCTL2               0x28    /* Device Control 2 */
  #define  PCI_EXP_DEVCTL2_COMP_TIMEOUT 0x000f  /* Completion Timeout Value */
  #define  PCI_EXP_DEVCTL2_COMP_TMOUT_DIS       0x0010  /* Completion Timeout Disable */
  #define  PCI_EXP_DEVCTL2_ARI          0x0020  /* Alternative Routing-ID */
  #define  PCI_EXP_DEVCTL2_OBFF_MSGA_EN 0x2000  /* Enable OBFF Message type A */
  #define  PCI_EXP_DEVCTL2_OBFF_MSGB_EN 0x4000  /* Enable OBFF Message type B */
  #define  PCI_EXP_DEVCTL2_OBFF_WAKE_EN 0x6000  /* OBFF using WAKE# signaling */
- #define PCI_EXP_DEVSTA2               42      /* Device Status 2 */
- #define PCI_CAP_EXP_RC_ENDPOINT_SIZEOF_V2     44      /* v2 endpoints without link end here */
- #define PCI_EXP_LNKCAP2               44      /* Link Capabilities 2 */
+ #define PCI_EXP_DEVSTA2               0x2a    /* Device Status 2 */
+ #define PCI_CAP_EXP_RC_ENDPOINT_SIZEOF_V2 0x2c        /* end of v2 EPs w/o link */
+ #define PCI_EXP_LNKCAP2               0x2c    /* Link Capabilities 2 */
  #define  PCI_EXP_LNKCAP2_SLS_2_5GB    0x00000002 /* Supported Speed 2.5GT/s */
  #define  PCI_EXP_LNKCAP2_SLS_5_0GB    0x00000004 /* Supported Speed 5GT/s */
  #define  PCI_EXP_LNKCAP2_SLS_8_0GB    0x00000008 /* Supported Speed 8GT/s */
  #define  PCI_EXP_LNKCAP2_SLS_32_0GB   0x00000020 /* Supported Speed 32GT/s */
  #define  PCI_EXP_LNKCAP2_SLS_64_0GB   0x00000040 /* Supported Speed 64GT/s */
  #define  PCI_EXP_LNKCAP2_CROSSLINK    0x00000100 /* Crosslink supported */
- #define PCI_EXP_LNKCTL2               48      /* Link Control 2 */
+ #define PCI_EXP_LNKCTL2               0x30    /* Link Control 2 */
  #define  PCI_EXP_LNKCTL2_TLS          0x000f
  #define  PCI_EXP_LNKCTL2_TLS_2_5GT    0x0001 /* Supported Speed 2.5GT/s */
  #define  PCI_EXP_LNKCTL2_TLS_5_0GT    0x0002 /* Supported Speed 5GT/s */
  #define  PCI_EXP_LNKCTL2_ENTER_COMP   0x0010 /* Enter Compliance */
  #define  PCI_EXP_LNKCTL2_TX_MARGIN    0x0380 /* Transmit Margin */
  #define  PCI_EXP_LNKCTL2_HASD         0x0020 /* HW Autonomous Speed Disable */
- #define PCI_EXP_LNKSTA2               50      /* Link Status 2 */
- #define PCI_CAP_EXP_ENDPOINT_SIZEOF_V2        52      /* v2 endpoints with link end here */
- #define PCI_EXP_SLTCAP2               52      /* Slot Capabilities 2 */
+ #define PCI_EXP_LNKSTA2               0x32    /* Link Status 2 */
+ #define PCI_CAP_EXP_ENDPOINT_SIZEOF_V2        0x32    /* end of v2 EPs w/ link */
+ #define PCI_EXP_SLTCAP2               0x34    /* Slot Capabilities 2 */
  #define  PCI_EXP_SLTCAP2_IBPD 0x00000001 /* In-band PD Disable Supported */
- #define PCI_EXP_SLTCTL2               56      /* Slot Control 2 */
- #define PCI_EXP_SLTSTA2               58      /* Slot Status 2 */
+ #define PCI_EXP_SLTCTL2               0x38    /* Slot Control 2 */
+ #define PCI_EXP_SLTSTA2               0x3a    /* Slot Status 2 */
  
  /* Extended Capabilities (PCI-X 2.0 and Express) */
  #define PCI_EXT_CAP_ID(header)                (header & 0x0000ffff)
  #define PCI_EXT_CAP_MCAST_ENDPOINT_SIZEOF 40
  
  /* Advanced Error Reporting */
- #define PCI_ERR_UNCOR_STATUS  4       /* Uncorrectable Error Status */
+ #define PCI_ERR_UNCOR_STATUS  0x04    /* Uncorrectable Error Status */
  #define  PCI_ERR_UNC_UND      0x00000001      /* Undefined */
  #define  PCI_ERR_UNC_DLP      0x00000010      /* Data Link Protocol */
  #define  PCI_ERR_UNC_SURPDN   0x00000020      /* Surprise Down */
  #define  PCI_ERR_UNC_MCBTLP   0x00800000      /* MC blocked TLP */
  #define  PCI_ERR_UNC_ATOMEG   0x01000000      /* Atomic egress blocked */
  #define  PCI_ERR_UNC_TLPPRE   0x02000000      /* TLP prefix blocked */
- #define PCI_ERR_UNCOR_MASK    8       /* Uncorrectable Error Mask */
+ #define PCI_ERR_UNCOR_MASK    0x08    /* Uncorrectable Error Mask */
        /* Same bits as above */
- #define PCI_ERR_UNCOR_SEVER   12      /* Uncorrectable Error Severity */
+ #define PCI_ERR_UNCOR_SEVER   0x0c    /* Uncorrectable Error Severity */
        /* Same bits as above */
- #define PCI_ERR_COR_STATUS    16      /* Correctable Error Status */
+ #define PCI_ERR_COR_STATUS    0x10    /* Correctable Error Status */
  #define  PCI_ERR_COR_RCVR     0x00000001      /* Receiver Error Status */
  #define  PCI_ERR_COR_BAD_TLP  0x00000040      /* Bad TLP Status */
  #define  PCI_ERR_COR_BAD_DLLP 0x00000080      /* Bad DLLP Status */
  #define  PCI_ERR_COR_ADV_NFAT 0x00002000      /* Advisory Non-Fatal */
  #define  PCI_ERR_COR_INTERNAL 0x00004000      /* Corrected Internal */
  #define  PCI_ERR_COR_LOG_OVER 0x00008000      /* Header Log Overflow */
- #define PCI_ERR_COR_MASK      20      /* Correctable Error Mask */
+ #define PCI_ERR_COR_MASK      0x14    /* Correctable Error Mask */
        /* Same bits as above */
- #define PCI_ERR_CAP           24      /* Advanced Error Capabilities */
- #define  PCI_ERR_CAP_FEP(x)   ((x) & 31)      /* First Error Pointer */
+ #define PCI_ERR_CAP           0x18    /* Advanced Error Capabilities & Ctrl*/
+ #define  PCI_ERR_CAP_FEP(x)   ((x) & 0x1f)    /* First Error Pointer */
  #define  PCI_ERR_CAP_ECRC_GENC        0x00000020      /* ECRC Generation Capable */
  #define  PCI_ERR_CAP_ECRC_GENE        0x00000040      /* ECRC Generation Enable */
  #define  PCI_ERR_CAP_ECRC_CHKC        0x00000080      /* ECRC Check Capable */
  #define  PCI_ERR_CAP_ECRC_CHKE        0x00000100      /* ECRC Check Enable */
- #define PCI_ERR_HEADER_LOG    28      /* Header Log Register (16 bytes) */
- #define PCI_ERR_ROOT_COMMAND  44      /* Root Error Command */
+ #define PCI_ERR_HEADER_LOG    0x1c    /* Header Log Register (16 bytes) */
+ #define PCI_ERR_ROOT_COMMAND  0x2c    /* Root Error Command */
  #define  PCI_ERR_ROOT_CMD_COR_EN      0x00000001 /* Correctable Err Reporting Enable */
  #define  PCI_ERR_ROOT_CMD_NONFATAL_EN 0x00000002 /* Non-Fatal Err Reporting Enable */
  #define  PCI_ERR_ROOT_CMD_FATAL_EN    0x00000004 /* Fatal Err Reporting Enable */
- #define PCI_ERR_ROOT_STATUS   48
+ #define PCI_ERR_ROOT_STATUS   0x30
  #define  PCI_ERR_ROOT_COR_RCV         0x00000001 /* ERR_COR Received */
  #define  PCI_ERR_ROOT_MULTI_COR_RCV   0x00000002 /* Multiple ERR_COR */
  #define  PCI_ERR_ROOT_UNCOR_RCV               0x00000004 /* ERR_FATAL/NONFATAL */
  #define  PCI_ERR_ROOT_NONFATAL_RCV    0x00000020 /* Non-Fatal Received */
  #define  PCI_ERR_ROOT_FATAL_RCV               0x00000040 /* Fatal Received */
  #define  PCI_ERR_ROOT_AER_IRQ         0xf8000000 /* Advanced Error Interrupt Message Number */
- #define PCI_ERR_ROOT_ERR_SRC  52      /* Error Source Identification */
+ #define PCI_ERR_ROOT_ERR_SRC  0x34    /* Error Source Identification */
  
  /* Virtual Channel */
- #define PCI_VC_PORT_CAP1      4
+ #define PCI_VC_PORT_CAP1      0x04
  #define  PCI_VC_CAP1_EVCC     0x00000007      /* extended VC count */
  #define  PCI_VC_CAP1_LPEVCC   0x00000070      /* low prio extended VC count */
  #define  PCI_VC_CAP1_ARB_SIZE 0x00000c00
- #define PCI_VC_PORT_CAP2      8
+ #define PCI_VC_PORT_CAP2      0x08
  #define  PCI_VC_CAP2_32_PHASE         0x00000002
  #define  PCI_VC_CAP2_64_PHASE         0x00000004
  #define  PCI_VC_CAP2_128_PHASE                0x00000008
  #define  PCI_VC_CAP2_ARB_OFF          0xff000000
- #define PCI_VC_PORT_CTRL      12
+ #define PCI_VC_PORT_CTRL      0x0c
  #define  PCI_VC_PORT_CTRL_LOAD_TABLE  0x00000001
- #define PCI_VC_PORT_STATUS    14
+ #define PCI_VC_PORT_STATUS    0x0e
  #define  PCI_VC_PORT_STATUS_TABLE     0x00000001
- #define PCI_VC_RES_CAP                16
+ #define PCI_VC_RES_CAP                0x10
  #define  PCI_VC_RES_CAP_32_PHASE      0x00000002
  #define  PCI_VC_RES_CAP_64_PHASE      0x00000004
  #define  PCI_VC_RES_CAP_128_PHASE     0x00000008
  #define  PCI_VC_RES_CAP_128_PHASE_TB  0x00000010
  #define  PCI_VC_RES_CAP_256_PHASE     0x00000020
  #define  PCI_VC_RES_CAP_ARB_OFF               0xff000000
- #define PCI_VC_RES_CTRL               20
+ #define PCI_VC_RES_CTRL               0x14
  #define  PCI_VC_RES_CTRL_LOAD_TABLE   0x00010000
  #define  PCI_VC_RES_CTRL_ARB_SELECT   0x000e0000
  #define  PCI_VC_RES_CTRL_ID           0x07000000
  #define  PCI_VC_RES_CTRL_ENABLE               0x80000000
- #define PCI_VC_RES_STATUS     26
+ #define PCI_VC_RES_STATUS     0x1a
  #define  PCI_VC_RES_STATUS_TABLE      0x00000001
  #define  PCI_VC_RES_STATUS_NEGO               0x00000002
  #define PCI_CAP_VC_BASE_SIZEOF                0x10
- #define PCI_CAP_VC_PER_VC_SIZEOF      0x0C
+ #define PCI_CAP_VC_PER_VC_SIZEOF      0x0c
  
  /* Power Budgeting */
- #define PCI_PWR_DSR           4       /* Data Select Register */
- #define PCI_PWR_DATA          8       /* Data Register */
+ #define PCI_PWR_DSR           0x04    /* Data Select Register */
+ #define PCI_PWR_DATA          0x08    /* Data Register */
  #define  PCI_PWR_DATA_BASE(x) ((x) & 0xff)        /* Base Power */
  #define  PCI_PWR_DATA_SCALE(x)        (((x) >> 8) & 3)    /* Data Scale */
  #define  PCI_PWR_DATA_PM_SUB(x)       (((x) >> 10) & 7)   /* PM Sub State */
  #define  PCI_PWR_DATA_PM_STATE(x) (((x) >> 13) & 3) /* PM State */
  #define  PCI_PWR_DATA_TYPE(x) (((x) >> 15) & 7)   /* Type */
  #define  PCI_PWR_DATA_RAIL(x) (((x) >> 18) & 7)   /* Power Rail */
- #define PCI_PWR_CAP           12      /* Capability */
+ #define PCI_PWR_CAP           0x0c    /* Capability */
  #define  PCI_PWR_CAP_BUDGET(x)        ((x) & 1)       /* Included in system budget */
- #define PCI_EXT_CAP_PWR_SIZEOF        16
+ #define PCI_EXT_CAP_PWR_SIZEOF        0x10
  
  /* Root Complex Event Collector Endpoint Association  */
  #define PCI_RCEC_RCIEP_BITMAP 4       /* Associated Bitmap for RCiEPs */
  #define  PCI_SRIOV_VFM_MI     0x1     /* Dormant.MigrateIn */
  #define  PCI_SRIOV_VFM_MO     0x2     /* Active.MigrateOut */
  #define  PCI_SRIOV_VFM_AV     0x3     /* Active.Available */
- #define PCI_EXT_CAP_SRIOV_SIZEOF 64
+ #define PCI_EXT_CAP_SRIOV_SIZEOF 0x40
  
  #define PCI_LTR_MAX_SNOOP_LAT 0x4
  #define PCI_LTR_MAX_NOSNOOP_LAT       0x6
  #define   PCI_TPH_LOC_NONE    0x000   /* no location */
  #define   PCI_TPH_LOC_CAP     0x200   /* in capability */
  #define   PCI_TPH_LOC_MSIX    0x400   /* in MSI-X */
- #define PCI_TPH_CAP_ST_MASK   0x07FF0000      /* st table mask */
- #define PCI_TPH_CAP_ST_SHIFT  16      /* st table shift */
- #define PCI_TPH_BASE_SIZEOF   12      /* size with no st table */
+ #define PCI_TPH_CAP_ST_MASK   0x07FF0000      /* ST table mask */
+ #define PCI_TPH_CAP_ST_SHIFT  16      /* ST table shift */
+ #define PCI_TPH_BASE_SIZEOF   0xc     /* size with no ST table */
  
  /* Downstream Port Containment */
- #define PCI_EXP_DPC_CAP                       4       /* DPC Capability */
+ #define PCI_EXP_DPC_CAP                       0x04    /* DPC Capability */
  #define PCI_EXP_DPC_IRQ                       0x001F  /* Interrupt Message Number */
  #define  PCI_EXP_DPC_CAP_RP_EXT               0x0020  /* Root Port Extensions */
  #define  PCI_EXP_DPC_CAP_POISONED_TLP 0x0040  /* Poisoned TLP Egress Blocking Supported */
  #define  PCI_EXP_DPC_RP_PIO_LOG_SIZE  0x0F00  /* RP PIO Log Size */
  #define  PCI_EXP_DPC_CAP_DL_ACTIVE    0x1000  /* ERR_COR signal on DL_Active supported */
  
- #define PCI_EXP_DPC_CTL                       6       /* DPC control */
+ #define PCI_EXP_DPC_CTL                       0x06    /* DPC control */
  #define  PCI_EXP_DPC_CTL_EN_FATAL     0x0001  /* Enable trigger on ERR_FATAL message */
  #define  PCI_EXP_DPC_CTL_EN_NONFATAL  0x0002  /* Enable trigger on ERR_NONFATAL message */
  #define  PCI_EXP_DPC_CTL_INT_EN               0x0008  /* DPC Interrupt Enable */
  
- #define PCI_EXP_DPC_STATUS            8       /* DPC Status */
+ #define PCI_EXP_DPC_STATUS            0x08    /* DPC Status */
  #define  PCI_EXP_DPC_STATUS_TRIGGER       0x0001 /* Trigger Status */
  #define  PCI_EXP_DPC_STATUS_TRIGGER_RSN           0x0006 /* Trigger Reason */
  #define  PCI_EXP_DPC_STATUS_INTERRUPT     0x0008 /* Interrupt Status */
  #define  PCI_EXP_DPC_RP_BUSY              0x0010 /* Root Port Busy */
  #define  PCI_EXP_DPC_STATUS_TRIGGER_RSN_EXT 0x0060 /* Trig Reason Extension */
  
- #define PCI_EXP_DPC_SOURCE_ID         10      /* DPC Source Identifier */
+ #define PCI_EXP_DPC_SOURCE_ID          0x0A   /* DPC Source Identifier */
  
  #define PCI_EXP_DPC_RP_PIO_STATUS      0x0C   /* RP PIO Status */
  #define PCI_EXP_DPC_RP_PIO_MASK                0x10   /* RP PIO Mask */
  
  /* Designated Vendor-Specific (DVSEC, PCI_EXT_CAP_ID_DVSEC) */
  #define PCI_DVSEC_HEADER1             0x4 /* Designated Vendor-Specific Header1 */
 +#define  PCI_DVSEC_HEADER1_VID(x)     ((x) & 0xffff)
 +#define  PCI_DVSEC_HEADER1_REV(x)     (((x) >> 16) & 0xf)
 +#define  PCI_DVSEC_HEADER1_LEN(x)     (((x) >> 20) & 0xfff)
  #define PCI_DVSEC_HEADER2             0x8 /* Designated Vendor-Specific Header2 */
 +#define  PCI_DVSEC_HEADER2_ID(x)              ((x) & 0xffff)
  
  /* Data Link Feature */
  #define PCI_DLF_CAP           0x04    /* Capabilities Register */
This page took 0.266674 seconds and 4 git commands to generate.