Merge tag 'acpi-4.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael...
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 5 Sep 2017 19:45:03 +0000 (12:45 -0700)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 5 Sep 2017 19:45:03 +0000 (12:45 -0700)
Pull ACPI updates from Rafael Wysocki:
 "These include a usual ACPICA code update (this time to upstream
  revision 20170728), a fix for a boot crash on some systems with
  Thunderbolt devices connected at boot time, a rework of the handling
  of PCI bridges when setting up device wakeup, new support for Apple
  device properties, support for DMA configurations reported via ACPI on
  ARM64, APEI-related updates, ACPI EC driver updates and assorted minor
  modifications in several places.

  Specifics:

   - Update the ACPICA code in the kernel to upstream revision 20170728
     including:
      * Alias operator handling update (Bob Moore).
      * Deferred resolution of reference package elements (Bob Moore).
      * Support for the _DMA method in walk resources (Bob Moore).
      * Tables handling update and support for deferred table
        verification (Lv Zheng).
      * Update of SMMU models for IORT (Robin Murphy).
      * Compiler and disassembler updates (Alex James, Erik Schmauss,
        Ganapatrao Kulkarni, James Morse).
      * Tools updates (Erik Schmauss, Lv Zheng).
      * Assorted minor fixes and cleanups (Bob Moore, Kees Cook, Lv
        Zheng, Shao Ming).

   - Rework the initialization of non-wakeup GPEs with method handlers
     in order to address a boot crash on some systems with Thunderbolt
     devices connected at boot time where we miss an early hotplug event
     due to a delay in GPE enabling (Rafael Wysocki).

   - Rework the handling of PCI bridges when setting up ACPI-based
     device wakeup in order to avoid disabling wakeup for bridges
     prematurely (Rafael Wysocki).

   - Consolidate Apple DMI checks throughout the tree, add support for
     Apple device properties to the device properties framework and use
     these properties for the handling of I2C and SPI devices on Apple
     systems (Lukas Wunner).

   - Add support for _DMA to the ACPI-based device properties lookup
     code and make it possible to use the information from there to
     configure DMA regions on ARM64 systems (Lorenzo Pieralisi).

   - Fix several issues in the APEI code, add support for exporting the
     BERT error region over sysfs and update APEI MAINTAINERS entry with
     reviewers information (Borislav Petkov, Dongjiu Geng, Loc Ho, Punit
     Agrawal, Tony Luck, Yazen Ghannam).

   - Fix a potential initialization ordering issue in the ACPI EC driver
     and clean it up somewhat (Lv Zheng).

   - Update the ACPI SPCR driver to extend the existing XGENE 8250
     workaround in it to a new platform (m400) and to work around an
     Xgene UART clock issue (Graeme Gregory).

   - Add a new utility function to the ACPI core to support using ACPI
     OEM ID / OEM Table ID / Revision for system identification in
     blacklisting or similar and switch over the existing code already
     using this information to this new interface (Toshi Kani).

   - Fix an xpower PMIC issue related to GPADC reads that always return
     0 without extra pin manipulations (Hans de Goede).

   - Add statements to print debug messages in a couple of places in the
     ACPI core for easier diagnostics (Rafael Wysocki).

   - Clean up the ACPI processor driver slightly (Colin Ian King, Hanjun
     Guo).

   - Clean up the ACPI x86 boot code somewhat (Andy Shevchenko).

   - Add a quirk for Dell OptiPlex 9020M to the ACPI backlight driver
     (Alex Hung).

   - Assorted fixes, cleanups and updates related to ACPI (Amitoj Kaur
     Chawla, Bhumika Goyal, Frank Rowand, Jean Delvare, Punit Agrawal,
     Ronald Tschalär, Sumeet Pawnikar)"

* tag 'acpi-4.14-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm: (75 commits)
  ACPI / APEI: Suppress message if HEST not present
  intel_pstate: convert to use acpi_match_platform_list()
  ACPI / blacklist: add acpi_match_platform_list()
  ACPI, APEI, EINJ: Subtract any matching Register Region from Trigger resources
  ACPI: make device_attribute const
  ACPI / sysfs: Extend ACPI sysfs to provide access to boot error region
  ACPI: APEI: fix the wrong iteration of generic error status block
  ACPI / processor: make function acpi_processor_check_duplicates() static
  ACPI / EC: Clean up EC GPE mask flag
  ACPI: EC: Fix possible issues related to EC initialization order
  ACPI / PM: Add debug statements to acpi_pm_notify_handler()
  ACPI: Add debug statements to acpi_global_event_handler()
  ACPI / scan: Enable GPEs before scanning the namespace
  ACPICA: Make it possible to enable runtime GPEs earlier
  ACPICA: Dispatch active GPEs at init time
  ACPI: SPCR: work around clock issue on xgene UART
  ACPI: SPCR: extend XGENE 8250 workaround to m400
  ACPI / LPSS: Don't abort ACPI scan on missing mem resource
  mailbox: pcc: Drop uninformative output during boot
  ACPI/IORT: Add IORT named component memory address limits
  ...

1  2 
MAINTAINERS
arch/x86/kernel/acpi/boot.c
arch/x86/kernel/early-quirks.c
arch/x86/kernel/setup.c
drivers/acpi/arm64/iort.c
drivers/acpi/sleep.c
drivers/cpufreq/intel_pstate.c
drivers/pci/pci-driver.c
drivers/spi/spi.c

diff --cc MAINTAINERS
Simple merge
index 97bb2caf342879ba365582d3bd7b1caab5f77dfe,fc639c156da38316bdf814eaaea08ef231c2acda..f8ae286c15026908b60b49ee72fef6b827b7b515
@@@ -115,19 -115,19 +115,19 @@@ static u32 isa_irq_to_gsi[NR_IRQS_LEGAC
  #define       ACPI_INVALID_GSI                INT_MIN
  
  /*
 - * This is just a simple wrapper around early_ioremap(),
 + * This is just a simple wrapper around early_memremap(),
   * with sanity checks for phys == 0 and size == 0.
   */
char *__init __acpi_map_table(unsigned long phys, unsigned long size)
void __init __iomem *__acpi_map_table(unsigned long phys, unsigned long size)
  {
  
        if (!phys || !size)
                return NULL;
  
 -      return early_ioremap(phys, size);
 +      return early_memremap(phys, size);
  }
  
- void __init __acpi_unmap_table(char *map, unsigned long size)
+ void __init __acpi_unmap_table(void __iomem *map, unsigned long size)
  {
        if (!map || !size)
                return;
Simple merge
Simple merge
index 736783c67ea0599f6b4ae6561fdc66256f1fdeb1,5b9e8dc29c090781ccfc1dd3e1c71c5bf1a4bd03..9565d572f8dd2f3d65c0e16b8257f61100bbad50
@@@ -648,58 -648,68 +648,81 @@@ int iort_add_device_replay(const struc
  { return 0; }
  #endif
  
 -static const struct iommu_ops *iort_iommu_xlate(struct device *dev,
 -                                      struct acpi_iort_node *node,
 -                                      u32 streamid)
 +static int iort_iommu_xlate(struct device *dev, struct acpi_iort_node *node,
 +                          u32 streamid)
  {
 -      const struct iommu_ops *ops = NULL;
 -      int ret = -ENODEV;
 +      const struct iommu_ops *ops;
        struct fwnode_handle *iort_fwnode;
  
 -      if (node) {
 -              iort_fwnode = iort_get_fwnode(node);
 -              if (!iort_fwnode)
 -                      return NULL;
 +      if (!node)
 +              return -ENODEV;
  
 -              ops = iommu_ops_from_fwnode(iort_fwnode);
 -              /*
 -               * If the ops look-up fails, this means that either
 -               * the SMMU drivers have not been probed yet or that
 -               * the SMMU drivers are not built in the kernel;
 -               * Depending on whether the SMMU drivers are built-in
 -               * in the kernel or not, defer the IOMMU configuration
 -               * or just abort it.
 -               */
 -              if (!ops)
 -                      return iort_iommu_driver_enabled(node->type) ?
 -                             ERR_PTR(-EPROBE_DEFER) : NULL;
 +      iort_fwnode = iort_get_fwnode(node);
 +      if (!iort_fwnode)
 +              return -ENODEV;
  
 -              ret = arm_smmu_iort_xlate(dev, streamid, iort_fwnode, ops);
 -      }
 +      /*
 +       * If the ops look-up fails, this means that either
 +       * the SMMU drivers have not been probed yet or that
 +       * the SMMU drivers are not built in the kernel;
 +       * Depending on whether the SMMU drivers are built-in
 +       * in the kernel or not, defer the IOMMU configuration
 +       * or just abort it.
 +       */
 +      ops = iommu_ops_from_fwnode(iort_fwnode);
 +      if (!ops)
 +              return iort_iommu_driver_enabled(node->type) ?
 +                     -EPROBE_DEFER : -ENODEV;
  
 -      return ret ? NULL : ops;
 +      return arm_smmu_iort_xlate(dev, streamid, iort_fwnode, ops);
 +}
 +
 +struct iort_pci_alias_info {
 +      struct device *dev;
 +      struct acpi_iort_node *node;
 +};
 +
 +static int iort_pci_iommu_init(struct pci_dev *pdev, u16 alias, void *data)
 +{
 +      struct iort_pci_alias_info *info = data;
 +      struct acpi_iort_node *parent;
 +      u32 streamid;
 +
 +      parent = iort_node_map_id(info->node, alias, &streamid,
 +                                IORT_IOMMU_TYPE);
 +      return iort_iommu_xlate(info->dev, parent, streamid);
  }
  
+ static int nc_dma_get_range(struct device *dev, u64 *size)
+ {
+       struct acpi_iort_node *node;
+       struct acpi_iort_named_component *ncomp;
+       node = iort_scan_node(ACPI_IORT_NODE_NAMED_COMPONENT,
+                             iort_match_node_callback, dev);
+       if (!node)
+               return -ENODEV;
+       ncomp = (struct acpi_iort_named_component *)node->node_data;
+       *size = ncomp->memory_address_limit >= 64 ? U64_MAX :
+                       1ULL<<ncomp->memory_address_limit;
+       return 0;
+ }
  /**
-  * iort_set_dma_mask - Set-up dma mask for a device.
+  * iort_dma_setup() - Set-up device DMA parameters.
   *
   * @dev: device to configure
+  * @dma_addr: device DMA address result pointer
+  * @size: DMA range size result pointer
   */
- void iort_set_dma_mask(struct device *dev)
+ void iort_dma_setup(struct device *dev, u64 *dma_addr, u64 *dma_size)
  {
+       u64 mask, dmaaddr = 0, size = 0, offset = 0;
+       int ret, msb;
        /*
         * Set default coherent_dma_mask to 32 bit.  Drivers are expected to
         * setup the correct supported mask.
Simple merge
Simple merge
Simple merge
index cf8ee5e48f73659cae5471157b288f9e88669f64,7d920ea19957ef7feb52e630fac30c0ba015c34d..6e65524cbfd9b8f7e1ff21a4c304908531476f21
@@@ -40,7 -40,7 +40,8 @@@
  #include <linux/ioport.h>
  #include <linux/acpi.h>
  #include <linux/highmem.h>
 +#include <linux/idr.h>
+ #include <linux/platform_data/x86/apple.h>
  
  #define CREATE_TRACE_POINTS
  #include <trace/events/spi.h>