Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1243699 > unrolled thread

[PATCH 00/20] tree-wide convert to memremap()

Started byDan Williams <dan.j.williams@intel.com>
First post2015-10-10 00:30 +0200
Last post2015-10-10 00:30 +0200
Articles 20 on this page of 31 — 5 participants

Back to article view | Back to linux.kernel


Contents

  [PATCH 00/20] tree-wide convert to memremap() Dan Williams <dan.j.williams@intel.com> - 2015-10-10 00:30 +0200
    [PATCH 09/20] i915: switch from acpi_os_ioremap to memremap Dan Williams <dan.j.williams@intel.com> - 2015-10-10 00:30 +0200
      Re: [Intel-gfx] [PATCH 09/20] i915: switch from acpi_os_ioremap to  memremap Daniel Vetter <daniel@ffwll.ch> - 2015-10-12 09:00 +0200
        Re: [Intel-gfx] [PATCH 09/20] i915: switch from acpi_os_ioremap to  memremap "Williams, Dan J" <dan.j.williams@intel.com> - 2015-10-12 23:20 +0200
          Re: [Intel-gfx] [PATCH 09/20] i915: switch from acpi_os_ioremap to  memremap Daniel Vetter <daniel@ffwll.ch> - 2015-10-13 10:30 +0200
            Re: [Intel-gfx] [PATCH 09/20] i915: switch from acpi_os_ioremap to memremap Dan Williams <dan.j.williams@intel.com> - 2015-10-13 18:30 +0200
              Re: [Intel-gfx] [PATCH 09/20] i915: switch from acpi_os_ioremap to  memremap Daniel Vetter <daniel@ffwll.ch> - 2015-10-14 09:40 +0200
    [PATCH 13/20] intel-iommu: switch from ioremap_cache to memremap Dan Williams <dan.j.williams@intel.com> - 2015-10-10 00:30 +0200
      Re: [PATCH 13/20] intel-iommu: switch from ioremap_cache to memremap Joerg Roedel <jroedel@suse.de> - 2015-10-13 00:00 +0200
        Re: [PATCH 13/20] intel-iommu: switch from ioremap_cache to memremap Dan Williams <dan.j.williams@intel.com> - 2015-10-13 00:10 +0200
          Re: [PATCH 13/20] intel-iommu: switch from ioremap_cache to memremap Dan Williams <dan.j.williams@intel.com> - 2015-10-13 00:30 +0200
            Re: [PATCH 13/20] intel-iommu: switch from ioremap_cache to memremap Joerg Roedel <jroedel@suse.de> - 2015-10-14 15:30 +0200
    [PATCH 17/20] arch: kill ioremap_cached() Dan Williams <dan.j.williams@intel.com> - 2015-10-10 00:30 +0200
    [PATCH 14/20] pxa2xx-flash: switch from ioremap_cache to memremap Dan Williams <dan.j.williams@intel.com> - 2015-10-10 00:30 +0200
      Re: [PATCH 14/20] pxa2xx-flash: switch from ioremap_cache to memremap Brian Norris <computersforpeace@gmail.com> - 2015-10-12 20:00 +0200
        Re: [PATCH 14/20] pxa2xx-flash: switch from ioremap_cache to memremap Dan Williams <dan.j.williams@intel.com> - 2015-10-12 22:40 +0200
        Re: [PATCH 14/20] pxa2xx-flash: switch from ioremap_cache to memremap Brian Norris <computersforpeace@gmail.com> - 2015-10-12 22:40 +0200
    [PATCH 03/20] ia64: introduce arch_memremap() Dan Williams <dan.j.williams@intel.com> - 2015-10-10 00:30 +0200
    [PATCH 19/20] arch: remove ioremap_cache, replace with arch_memremap Dan Williams <dan.j.williams@intel.com> - 2015-10-10 00:30 +0200
    [PATCH 01/20] x86: introduce arch_memremap() Dan Williams <dan.j.williams@intel.com> - 2015-10-10 00:30 +0200
    [PATCH 04/20] sh: introduce arch_memremap() Dan Williams <dan.j.williams@intel.com> - 2015-10-10 00:30 +0200
    [PATCH 08/20] gma500: switch from acpi_os_ioremap to memremap Dan Williams <dan.j.williams@intel.com> - 2015-10-10 00:30 +0200
    [PATCH 12/20] memconsole: fix __iomem mishandling,  switch to memremap Dan Williams <dan.j.williams@intel.com> - 2015-10-10 00:30 +0200
    [PATCH 05/20] m68k: introduce arch_memremap() Dan Williams <dan.j.williams@intel.com> - 2015-10-10 00:30 +0200
    [PATCH 07/20] x86: switch from ioremap_cache to memremap Dan Williams <dan.j.williams@intel.com> - 2015-10-10 00:30 +0200
    [PATCH 15/20] sfi: switch from ioremap_cache to memremap Dan Williams <dan.j.williams@intel.com> - 2015-10-10 00:30 +0200
    [PATCH 02/20] arm: introduce arch_memremap() Dan Williams <dan.j.williams@intel.com> - 2015-10-10 00:30 +0200
    [PATCH 06/20] arm: switch from ioremap_cache to memremap Dan Williams <dan.j.williams@intel.com> - 2015-10-10 00:30 +0200
    [PATCH 18/20] arch: kill ioremap_fullcache() Dan Williams <dan.j.williams@intel.com> - 2015-10-10 00:30 +0200
    [PATCH 10/20] acpi: switch from ioremap_cache to memremap Dan Williams <dan.j.williams@intel.com> - 2015-10-10 00:30 +0200
    [PATCH 11/20] sound, skylake: switch from ioremap_cache to memremap Dan Williams <dan.j.williams@intel.com> - 2015-10-10 00:30 +0200

Page 1 of 2  [1] 2  Next page →


#1243699 — [PATCH 00/20] tree-wide convert to memremap()

FromDan Williams <dan.j.williams@intel.com>
Date2015-10-10 00:30 +0200
Subject[PATCH 00/20] tree-wide convert to memremap()
Message-ID<qhOkN-73l-3@gated-at.bofh.it>
The memremap() api [1] was merged in 4.3 [2] with an initial
implementation for x86 and a conversion of the pmem driver. Complete the
conversion for the rest of the kernel.

Feel free to either ack or directly apply a conversion-patch as I will
defer the final removal patches until all the conversions have landed.

[1]: https://lwn.net/Articles/653585/
[2]: commit 92281dee825f arch: introduce memremap()

---

Dan Williams (20):
      x86: introduce arch_memremap()
      arm: introduce arch_memremap()
      ia64: introduce arch_memremap()
      sh: introduce arch_memremap()
      m68k: introduce arch_memremap()
      arm: switch from ioremap_cache to memremap
      x86: switch from ioremap_cache to memremap
      gma500: switch from acpi_os_ioremap to memremap
      i915: switch from acpi_os_ioremap to memremap
      acpi: switch from ioremap_cache to memremap
      sound, skylake: switch from ioremap_cache to memremap
      memconsole: fix __iomem mishandling, switch to memremap
      intel-iommu: switch from ioremap_cache to memremap
      pxa2xx-flash: switch from ioremap_cache to memremap
      sfi: switch from ioremap_cache to memremap
      fbdev: switch from ioremap_wt to memremap
      arch: kill ioremap_cached()
      arch: kill ioremap_fullcache()
      arch: remove ioremap_cache, replace with arch_memremap
      arch: remove ioremap_wt, optionally replace with arch_memremap


 Documentation/x86/pat.txt             |    6 +--
 arch/arc/include/asm/io.h             |    1 
 arch/arm/Kconfig                      |    1 
 arch/arm/include/asm/io.h             |    7 ---
 arch/arm/include/asm/xen/page.h       |    4 +-
 arch/arm/mm/ioremap.c                 |   12 ++++-
 arch/arm/mm/mmu.c                     |    2 -
 arch/arm/mm/nommu.c                   |   11 +++--
 arch/arm64/Kconfig                    |    1 
 arch/arm64/include/asm/acpi.h         |   11 -----
 arch/arm64/include/asm/dmi.h          |    8 ++--
 arch/arm64/include/asm/io.h           |    2 -
 arch/arm64/kernel/efi.c               |    9 ++--
 arch/arm64/kernel/smp_spin_table.c    |   19 ++++-----
 arch/arm64/mm/ioremap.c               |   20 +++------
 arch/avr32/include/asm/io.h           |    1 
 arch/frv/include/asm/io.h             |   12 -----
 arch/ia64/Kconfig                     |    1 
 arch/ia64/include/asm/io.h            |    6 ---
 arch/ia64/mm/ioremap.c                |   10 +++++
 arch/m32r/include/asm/io.h            |    1 
 arch/m68k/Kconfig                     |    1 
 arch/m68k/include/asm/io_mm.h         |   13 ------
 arch/m68k/include/asm/io_no.h         |   11 -----
 arch/m68k/include/asm/raw_io.h        |    1 
 arch/m68k/mm/kmap.c                   |   17 +++++++-
 arch/m68k/mm/sun3kmap.c               |    7 +++
 arch/metag/include/asm/io.h           |    6 ---
 arch/microblaze/include/asm/io.h      |    2 -
 arch/mn10300/include/asm/io.h         |    1 
 arch/nios2/include/asm/io.h           |    1 
 arch/s390/include/asm/io.h            |    1 
 arch/sh/Kconfig                       |    1 
 arch/sh/include/asm/io.h              |    7 ---
 arch/sh/mm/ioremap.c                  |    9 ++++
 arch/sparc/include/asm/io_32.h        |    1 
 arch/sparc/include/asm/io_64.h        |    1 
 arch/tile/include/asm/io.h            |    2 -
 arch/unicore32/include/asm/io.h       |    4 --
 arch/unicore32/mm/ioremap.c           |    8 ----
 arch/x86/Kconfig                      |    1 
 arch/x86/include/asm/efi.h            |    3 +
 arch/x86/include/asm/io.h             |    4 --
 arch/x86/kernel/crash_dump_64.c       |    6 +--
 arch/x86/kernel/kdebugfs.c            |    8 ++--
 arch/x86/kernel/ksysfs.c              |   28 ++++++-------
 arch/x86/mm/ioremap.c                 |   43 ++++++++-----------
 arch/xtensa/include/asm/io.h          |   12 -----
 drivers/acpi/apei/einj.c              |    9 ++--
 drivers/acpi/apei/erst.c              |    6 +--
 drivers/acpi/nvs.c                    |    6 +--
 drivers/acpi/osl.c                    |   70 +++++++++-----------------------
 drivers/firmware/google/memconsole.c  |    7 ++-
 drivers/gpu/drm/gma500/opregion.c     |    8 ++--
 drivers/gpu/drm/gma500/psb_drv.h      |    2 -
 drivers/gpu/drm/gma500/psb_lid.c      |    8 ++--
 drivers/gpu/drm/i915/i915_debugfs.c   |    2 -
 drivers/gpu/drm/i915/i915_drv.h       |   12 +++--
 drivers/gpu/drm/i915/intel_bios.c     |    7 +--
 drivers/gpu/drm/i915/intel_opregion.c |   73 ++++++++++++++++-----------------
 drivers/gpu/drm/i915/intel_panel.c    |    2 -
 drivers/iommu/intel-iommu.c           |   20 +++++----
 drivers/iommu/intel_irq_remapping.c   |    8 ++--
 drivers/mtd/maps/pxa2xx-flash.c       |    6 +--
 drivers/nvdimm/Kconfig                |    2 -
 drivers/sfi/sfi_core.c                |    4 +-
 drivers/video/fbdev/Kconfig           |    2 -
 drivers/video/fbdev/amifb.c           |    5 +-
 drivers/video/fbdev/atafb.c           |    5 +-
 drivers/video/fbdev/hpfb.c            |    6 +--
 include/acpi/acpi_io.h                |    6 +--
 include/asm-generic/io.h              |    8 ----
 include/asm-generic/iomap.h           |    4 --
 include/linux/io.h                    |    1 
 kernel/Makefile                       |    2 -
 kernel/memremap.c                     |   27 +++++-------
 lib/Kconfig                           |    6 ++-
 sound/soc/intel/skylake/skl-nhlt.c    |   10 ++---
 sound/soc/intel/skylake/skl.h         |    6 +--
 79 files changed, 284 insertions(+), 400 deletions(-)
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [next] | [standalone]


#1243700 — [PATCH 09/20] i915: switch from acpi_os_ioremap to memremap

FromDan Williams <dan.j.williams@intel.com>
Date2015-10-10 00:30 +0200
Subject[PATCH 09/20] i915: switch from acpi_os_ioremap to memremap
Message-ID<qhOkN-73l-7@gated-at.bofh.it>
In reply to#1243699
i915 expects the OpRegion to be cached (i.e. not __iomem), so explicitly
map it with memremap rather than the implied cache setting of
acpi_os_ioremap().

Cc: Daniel Vetter <daniel.vetter@intel.com>
Cc: Jani Nikula <jani.nikula@linux.intel.com>
Cc: intel-gfx@lists.freedesktop.org
Cc: David Airlie <airlied@linux.ie>
Cc: dri-devel@lists.freedesktop.org
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
---
 drivers/gpu/drm/i915/i915_debugfs.c   |    2 -
 drivers/gpu/drm/i915/i915_drv.h       |   12 +++--
 drivers/gpu/drm/i915/intel_bios.c     |    7 +--
 drivers/gpu/drm/i915/intel_opregion.c |   73 ++++++++++++++++-----------------
 drivers/gpu/drm/i915/intel_panel.c    |    2 -
 5 files changed, 47 insertions(+), 49 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index e3ec9049081f..15989cc16e92 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -1849,7 +1849,7 @@ static int i915_opregion(struct seq_file *m, void *unused)
 		goto out;
 
 	if (opregion->header) {
-		memcpy_fromio(data, opregion->header, OPREGION_SIZE);
+		memcpy(data, opregion->header, OPREGION_SIZE);
 		seq_write(m, data, OPREGION_SIZE);
 	}
 
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index e1db8de52851..d8684634a31d 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -444,14 +444,14 @@ struct opregion_swsci;
 struct opregion_asle;
 
 struct intel_opregion {
-	struct opregion_header __iomem *header;
-	struct opregion_acpi __iomem *acpi;
-	struct opregion_swsci __iomem *swsci;
+	struct opregion_header *header;
+	struct opregion_acpi *acpi;
+	struct opregion_swsci *swsci;
 	u32 swsci_gbda_sub_functions;
 	u32 swsci_sbcb_sub_functions;
-	struct opregion_asle __iomem *asle;
-	void __iomem *vbt;
-	u32 __iomem *lid_state;
+	struct opregion_asle *asle;
+	void *vbt;
+	u32 *lid_state;
 	struct work_struct asle_work;
 };
 #define OPREGION_SIZE            (8*1024)
diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
index c19e669ffe50..1ee2f11d355d 100644
--- a/drivers/gpu/drm/i915/intel_bios.c
+++ b/drivers/gpu/drm/i915/intel_bios.c
@@ -1238,11 +1238,10 @@ static const struct bdb_header *validate_vbt(const void __iomem *_base,
 {
 	/*
 	 * This is the one place where we explicitly discard the address space
-	 * (__iomem) of the BIOS/VBT. (And this will cause a sparse complaint.)
-	 * From now on everything is based on 'base', and treated as regular
-	 * memory.
+	 * (__iomem) of the BIOS/VBT. From now on everything is based on
+	 * 'base', and treated as regular memory.
 	 */
-	const void *base = (const void *) _base;
+	const void *base = (const void __force *) _base;
 	size_t offset = _vbt - _base;
 	const struct vbt_header *vbt = base + offset;
 	const struct bdb_header *bdb;
diff --git a/drivers/gpu/drm/i915/intel_opregion.c b/drivers/gpu/drm/i915/intel_opregion.c
index cb1c65739425..4f65cdb38e1b 100644
--- a/drivers/gpu/drm/i915/intel_opregion.c
+++ b/drivers/gpu/drm/i915/intel_opregion.c
@@ -239,7 +239,7 @@ struct opregion_asle {
 static int swsci(struct drm_device *dev, u32 function, u32 parm, u32 *parm_out)
 {
 	struct drm_i915_private *dev_priv = dev->dev_private;
-	struct opregion_swsci __iomem *swsci = dev_priv->opregion.swsci;
+	struct opregion_swsci *swsci = dev_priv->opregion.swsci;
 	u32 main_function, sub_function, scic;
 	u16 pci_swsci;
 	u32 dslp;
@@ -264,7 +264,7 @@ static int swsci(struct drm_device *dev, u32 function, u32 parm, u32 *parm_out)
 	}
 
 	/* Driver sleep timeout in ms. */
-	dslp = ioread32(&swsci->dslp);
+	dslp = swsci->dslp;
 	if (!dslp) {
 		/* The spec says 2ms should be the default, but it's too small
 		 * for some machines. */
@@ -277,7 +277,7 @@ static int swsci(struct drm_device *dev, u32 function, u32 parm, u32 *parm_out)
 	}
 
 	/* The spec tells us to do this, but we are the only user... */
-	scic = ioread32(&swsci->scic);
+	scic = swsci->scic;
 	if (scic & SWSCI_SCIC_INDICATOR) {
 		DRM_DEBUG_DRIVER("SWSCI request already in progress\n");
 		return -EBUSY;
@@ -285,8 +285,8 @@ static int swsci(struct drm_device *dev, u32 function, u32 parm, u32 *parm_out)
 
 	scic = function | SWSCI_SCIC_INDICATOR;
 
-	iowrite32(parm, &swsci->parm);
-	iowrite32(scic, &swsci->scic);
+	swsci->parm = parm;
+	swsci->scic = scic;
 
 	/* Ensure SCI event is selected and event trigger is cleared. */
 	pci_read_config_word(dev->pdev, PCI_SWSCI, &pci_swsci);
@@ -301,7 +301,7 @@ static int swsci(struct drm_device *dev, u32 function, u32 parm, u32 *parm_out)
 	pci_write_config_word(dev->pdev, PCI_SWSCI, pci_swsci);
 
 	/* Poll for the result. */
-#define C (((scic = ioread32(&swsci->scic)) & SWSCI_SCIC_INDICATOR) == 0)
+#define C (((scic = swsci->scic) & SWSCI_SCIC_INDICATOR) == 0)
 	if (wait_for(C, dslp)) {
 		DRM_DEBUG_DRIVER("SWSCI request timed out\n");
 		return -ETIMEDOUT;
@@ -317,7 +317,7 @@ static int swsci(struct drm_device *dev, u32 function, u32 parm, u32 *parm_out)
 	}
 
 	if (parm_out)
-		*parm_out = ioread32(&swsci->parm);
+		*parm_out = swsci->parm;
 
 	return 0;
 
@@ -407,7 +407,7 @@ static u32 asle_set_backlight(struct drm_device *dev, u32 bclp)
 {
 	struct drm_i915_private *dev_priv = dev->dev_private;
 	struct intel_connector *intel_connector;
-	struct opregion_asle __iomem *asle = dev_priv->opregion.asle;
+	struct opregion_asle *asle = dev_priv->opregion.asle;
 
 	DRM_DEBUG_DRIVER("bclp = 0x%08x\n", bclp);
 
@@ -432,7 +432,7 @@ static u32 asle_set_backlight(struct drm_device *dev, u32 bclp)
 	DRM_DEBUG_KMS("updating opregion backlight %d/255\n", bclp);
 	list_for_each_entry(intel_connector, &dev->mode_config.connector_list, base.head)
 		intel_panel_set_backlight_acpi(intel_connector, bclp, 255);
-	iowrite32(DIV_ROUND_UP(bclp * 100, 255) | ASLE_CBLV_VALID, &asle->cblv);
+	asle->cblv = DIV_ROUND_UP(bclp * 100, 255) | ASLE_CBLV_VALID;
 
 	drm_modeset_unlock(&dev->mode_config.connection_mutex);
 
@@ -519,14 +519,14 @@ static void asle_work(struct work_struct *work)
 	struct drm_i915_private *dev_priv =
 		container_of(opregion, struct drm_i915_private, opregion);
 	struct drm_device *dev = dev_priv->dev;
-	struct opregion_asle __iomem *asle = dev_priv->opregion.asle;
+	struct opregion_asle *asle = dev_priv->opregion.asle;
 	u32 aslc_stat = 0;
 	u32 aslc_req;
 
 	if (!asle)
 		return;
 
-	aslc_req = ioread32(&asle->aslc);
+	aslc_req = asle->aslc;
 
 	if (!(aslc_req & ASLC_REQ_MSK)) {
 		DRM_DEBUG_DRIVER("No request on ASLC interrupt 0x%08x\n",
@@ -535,34 +535,34 @@ static void asle_work(struct work_struct *work)
 	}
 
 	if (aslc_req & ASLC_SET_ALS_ILLUM)
-		aslc_stat |= asle_set_als_illum(dev, ioread32(&asle->alsi));
+		aslc_stat |= asle_set_als_illum(dev, asle->alsi);
 
 	if (aslc_req & ASLC_SET_BACKLIGHT)
-		aslc_stat |= asle_set_backlight(dev, ioread32(&asle->bclp));
+		aslc_stat |= asle_set_backlight(dev, asle->bclp);
 
 	if (aslc_req & ASLC_SET_PFIT)
-		aslc_stat |= asle_set_pfit(dev, ioread32(&asle->pfit));
+		aslc_stat |= asle_set_pfit(dev, asle->pfit);
 
 	if (aslc_req & ASLC_SET_PWM_FREQ)
-		aslc_stat |= asle_set_pwm_freq(dev, ioread32(&asle->pfmb));
+		aslc_stat |= asle_set_pwm_freq(dev, asle->pfmb);
 
 	if (aslc_req & ASLC_SUPPORTED_ROTATION_ANGLES)
 		aslc_stat |= asle_set_supported_rotation_angles(dev,
-							ioread32(&asle->srot));
+							asle->srot);
 
 	if (aslc_req & ASLC_BUTTON_ARRAY)
-		aslc_stat |= asle_set_button_array(dev, ioread32(&asle->iuer));
+		aslc_stat |= asle_set_button_array(dev, asle->iuer);
 
 	if (aslc_req & ASLC_CONVERTIBLE_INDICATOR)
-		aslc_stat |= asle_set_convertible(dev, ioread32(&asle->iuer));
+		aslc_stat |= asle_set_convertible(dev, asle->iuer);
 
 	if (aslc_req & ASLC_DOCKING_INDICATOR)
-		aslc_stat |= asle_set_docking(dev, ioread32(&asle->iuer));
+		aslc_stat |= asle_set_docking(dev, asle->iuer);
 
 	if (aslc_req & ASLC_ISCT_STATE_CHANGE)
 		aslc_stat |= asle_isct_state(dev);
 
-	iowrite32(aslc_stat, &asle->aslc);
+	asle->aslc = aslc_stat;
 }
 
 void intel_opregion_asle_intr(struct drm_device *dev)
@@ -587,8 +587,8 @@ static int intel_opregion_video_event(struct notifier_block *nb,
 	   Linux, these are handled by the dock, button and video drivers.
 	*/
 
-	struct opregion_acpi __iomem *acpi;
 	struct acpi_bus_event *event = data;
+	struct opregion_acpi *acpi;
 	int ret = NOTIFY_OK;
 
 	if (strcmp(event->device_class, ACPI_VIDEO_CLASS) != 0)
@@ -599,11 +599,10 @@ static int intel_opregion_video_event(struct notifier_block *nb,
 
 	acpi = system_opregion->acpi;
 
-	if (event->type == 0x80 &&
-	    (ioread32(&acpi->cevt) & 1) == 0)
+	if (event->type == 0x80 && ((acpi->cevt & 1) == 0))
 		ret = NOTIFY_BAD;
 
-	iowrite32(0, &acpi->csts);
+	acpi->csts = 0;
 
 	return ret;
 }
@@ -787,16 +786,16 @@ void intel_opregion_init(struct drm_device *dev)
 		/* Notify BIOS we are ready to handle ACPI video ext notifs.
 		 * Right now, all the events are handled by the ACPI video module.
 		 * We don't actually need to do anything with them. */
-		iowrite32(0, &opregion->acpi->csts);
-		iowrite32(1, &opregion->acpi->drdy);
+		opregion->acpi->csts = 0;
+		opregion->acpi->drdy = 1;
 
 		system_opregion = opregion;
 		register_acpi_notifier(&intel_opregion_notifier);
 	}
 
 	if (opregion->asle) {
-		iowrite32(ASLE_TCHE_BLC_EN, &opregion->asle->tche);
-		iowrite32(ASLE_ARDY_READY, &opregion->asle->ardy);
+		opregion->asle->tche = ASLE_TCHE_BLC_EN;
+		opregion->asle->ardy = ASLE_ARDY_READY;
 	}
 }
 
@@ -809,19 +808,19 @@ void intel_opregion_fini(struct drm_device *dev)
 		return;
 
 	if (opregion->asle)
-		iowrite32(ASLE_ARDY_NOT_READY, &opregion->asle->ardy);
+		opregion->asle->ardy = ASLE_ARDY_NOT_READY;
 
 	cancel_work_sync(&dev_priv->opregion.asle_work);
 
 	if (opregion->acpi) {
-		iowrite32(0, &opregion->acpi->drdy);
+		opregion->acpi->drdy = 0;
 
 		system_opregion = NULL;
 		unregister_acpi_notifier(&intel_opregion_notifier);
 	}
 
 	/* just clear all opregion memory pointers now */
-	iounmap(opregion->header);
+	memunmap(opregion->header);
 	opregion->header = NULL;
 	opregion->acpi = NULL;
 	opregion->swsci = NULL;
@@ -894,10 +893,10 @@ int intel_opregion_setup(struct drm_device *dev)
 {
 	struct drm_i915_private *dev_priv = dev->dev_private;
 	struct intel_opregion *opregion = &dev_priv->opregion;
-	void __iomem *base;
 	u32 asls, mboxes;
 	char buf[sizeof(OPREGION_SIGNATURE)];
 	int err = 0;
+	void *base;
 
 	BUILD_BUG_ON(sizeof(struct opregion_header) != 0x100);
 	BUILD_BUG_ON(sizeof(struct opregion_acpi) != 0x100);
@@ -915,11 +914,11 @@ int intel_opregion_setup(struct drm_device *dev)
 	INIT_WORK(&opregion->asle_work, asle_work);
 #endif
 
-	base = acpi_os_ioremap(asls, OPREGION_SIZE);
+	base = memremap(asls, OPREGION_SIZE, MEMREMAP_WB);
 	if (!base)
 		return -ENOMEM;
 
-	memcpy_fromio(buf, base, sizeof(buf));
+	memcpy(buf, base, sizeof(buf));
 
 	if (memcmp(buf, OPREGION_SIGNATURE, 16)) {
 		DRM_DEBUG_DRIVER("opregion signature mismatch\n");
@@ -931,7 +930,7 @@ int intel_opregion_setup(struct drm_device *dev)
 
 	opregion->lid_state = base + ACPI_CLID;
 
-	mboxes = ioread32(&opregion->header->mboxes);
+	mboxes = opregion->header->mboxes;
 	if (mboxes & MBOX_ACPI) {
 		DRM_DEBUG_DRIVER("Public ACPI methods supported\n");
 		opregion->acpi = base + OPREGION_ACPI_OFFSET;
@@ -946,12 +945,12 @@ int intel_opregion_setup(struct drm_device *dev)
 		DRM_DEBUG_DRIVER("ASLE supported\n");
 		opregion->asle = base + OPREGION_ASLE_OFFSET;
 
-		iowrite32(ASLE_ARDY_NOT_READY, &opregion->asle->ardy);
+		opregion->asle->ardy = ASLE_ARDY_NOT_READY;
 	}
 
 	return 0;
 
 err_out:
-	iounmap(base);
+	memunmap(base);
 	return err;
 }
diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
index e2ab3f6ed022..c8444d5f549f 100644
--- a/drivers/gpu/drm/i915/intel_panel.c
+++ b/drivers/gpu/drm/i915/intel_panel.c
@@ -387,7 +387,7 @@ intel_panel_detect(struct drm_device *dev)
 
 	/* Assume that the BIOS does not lie through the OpRegion... */
 	if (!i915.panel_ignore_lid && dev_priv->opregion.lid_state) {
-		return ioread32(dev_priv->opregion.lid_state) & 0x1 ?
+		return *(dev_priv->opregion.lid_state) & 0x1 ?
 			connector_status_connected :
 			connector_status_disconnected;
 	}

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1244417 — Re: [Intel-gfx] [PATCH 09/20] i915: switch from acpi_os_ioremap to memremap

FromDaniel Vetter <daniel@ffwll.ch>
Date2015-10-12 09:00 +0200
SubjectRe: [Intel-gfx] [PATCH 09/20] i915: switch from acpi_os_ioremap to memremap
Message-ID<qiFfr-83W-11@gated-at.bofh.it>
In reply to#1243700
On Fri, Oct 09, 2015 at 06:16:25PM -0400, Dan Williams wrote:
> i915 expects the OpRegion to be cached (i.e. not __iomem), so explicitly
> map it with memremap rather than the implied cache setting of
> acpi_os_ioremap().
> 
> Cc: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Jani Nikula <jani.nikula@linux.intel.com>
> Cc: intel-gfx@lists.freedesktop.org
> Cc: David Airlie <airlied@linux.ie>
> Cc: dri-devel@lists.freedesktop.org
> Signed-off-by: Dan Williams <dan.j.williams@intel.com>

Assuming you've run sparse over this to make sure you've caught them all,
and with the nit below addressed this is

Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>

Feel free to pull v2 into whatever tree you think it's suitable for (but
you can also resend and I'll pick it up).

> diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
> index e2ab3f6ed022..c8444d5f549f 100644
> --- a/drivers/gpu/drm/i915/intel_panel.c
> +++ b/drivers/gpu/drm/i915/intel_panel.c
> @@ -387,7 +387,7 @@ intel_panel_detect(struct drm_device *dev)
>  
>  	/* Assume that the BIOS does not lie through the OpRegion... */
>  	if (!i915.panel_ignore_lid && dev_priv->opregion.lid_state) {
> -		return ioread32(dev_priv->opregion.lid_state) & 0x1 ?
> +		return *(dev_priv->opregion.lid_state) & 0x1 ?

() are redundant now here.
-Daniel

>  			connector_status_connected :
>  			connector_status_disconnected;
>  	}
> 
> _______________________________________________
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/intel-gfx

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1245144 — Re: [Intel-gfx] [PATCH 09/20] i915: switch from acpi_os_ioremap to memremap

From"Williams, Dan J" <dan.j.williams@intel.com>
Date2015-10-12 23:20 +0200
SubjectRe: [Intel-gfx] [PATCH 09/20] i915: switch from acpi_os_ioremap to memremap
Message-ID<qiSFI-2zW-9@gated-at.bofh.it>
In reply to#1244417
T24gTW9uLCAyMDE1LTEwLTEyIGF0IDA5OjAxICswMjAwLCBEYW5pZWwgVmV0dGVyIHdyb3RlOg0K
PiBPbiBGcmksIE9jdCAwOSwgMjAxNSBhdCAwNjoxNjoyNVBNIC0wNDAwLCBEYW4gV2lsbGlhbXMg
d3JvdGU6DQo+ID4gaTkxNSBleHBlY3RzIHRoZSBPcFJlZ2lvbiB0byBiZSBjYWNoZWQgKGkuZS4g
bm90IF9faW9tZW0pLCBzbyBleHBsaWNpdGx5DQo+ID4gbWFwIGl0IHdpdGggbWVtcmVtYXAgcmF0
aGVyIHRoYW4gdGhlIGltcGxpZWQgY2FjaGUgc2V0dGluZyBvZg0KPiA+IGFjcGlfb3NfaW9yZW1h
cCgpLg0KPiA+IA0KPiA+IENjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWwudmV0dGVyQGludGVsLmNv
bT4NCj4gPiBDYzogSmFuaSBOaWt1bGEgPGphbmkubmlrdWxhQGxpbnV4LmludGVsLmNvbT4NCj4g
PiBDYzogaW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZw0KPiA+IENjOiBEYXZpZCBBaXJs
aWUgPGFpcmxpZWRAbGludXguaWU+DQo+ID4gQ2M6IGRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3Rv
cC5vcmcNCj4gPiBTaWduZWQtb2ZmLWJ5OiBEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGlu
dGVsLmNvbT4NCj4gDQo+IEFzc3VtaW5nIHlvdSd2ZSBydW4gc3BhcnNlIG92ZXIgdGhpcyB0byBt
YWtlIHN1cmUgeW91J3ZlIGNhdWdodCB0aGVtIGFsbCwNCj4gYW5kIHdpdGggdGhlIG5pdCBiZWxv
dyBhZGRyZXNzZWQgdGhpcyBpcw0KPiANCj4gUmV2aWV3ZWQtYnk6IERhbmllbCBWZXR0ZXIgPGRh
bmllbC52ZXR0ZXJAZmZ3bGwuY2g+DQoNCkluZGVlZCwgcmUtcnVubmluZyBzcGFyc2UgYWdhaW4g
Zm91bmQgYSBmZXcgY29udmVyc2lvbnMgb2YgaW9yZWFkKiBJDQptaXNzZWQgYXMgd2VsbCBhcyBt
b3ZpbmcgdGhlIGZvcmNlIGNhc3Rpbmcgb3V0IG9mIHZhbGlkYXRlX3ZidCgpIHRvDQpmaW5kX3Zi
dCgpLg0KDQo+IEZlZWwgZnJlZSB0byBwdWxsIHYyIGludG8gd2hhdGV2ZXIgdHJlZSB5b3UgdGhp
bmsgaXQncyBzdWl0YWJsZSBmb3IgKGJ1dA0KPiB5b3UgY2FuIGFsc28gcmVzZW5kIGFuZCBJJ2xs
IHBpY2sgaXQgdXApLg0KDQpQbGVhc2UgcGljayB1cCB2MiBiZWxvdy4NCg0KPiANCj4gPiBkaWZm
IC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcGFuZWwuYyBiL2RyaXZlcnMvZ3B1
L2RybS9pOTE1L2ludGVsX3BhbmVsLmMNCj4gPiBpbmRleCBlMmFiM2Y2ZWQwMjIuLmM4NDQ0ZDVm
NTQ5ZiAxMDA2NDQNCj4gPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wYW5lbC5j
DQo+ID4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcGFuZWwuYw0KPiA+IEBAIC0z
ODcsNyArMzg3LDcgQEAgaW50ZWxfcGFuZWxfZGV0ZWN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp
DQo+ID4gIA0KPiA+ICAJLyogQXNzdW1lIHRoYXQgdGhlIEJJT1MgZG9lcyBub3QgbGllIHRocm91
Z2ggdGhlIE9wUmVnaW9uLi4uICovDQo+ID4gIAlpZiAoIWk5MTUucGFuZWxfaWdub3JlX2xpZCAm
JiBkZXZfcHJpdi0+b3ByZWdpb24ubGlkX3N0YXRlKSB7DQo+ID4gLQkJcmV0dXJuIGlvcmVhZDMy
KGRldl9wcml2LT5vcHJlZ2lvbi5saWRfc3RhdGUpICYgMHgxID8NCj4gPiArCQlyZXR1cm4gKihk
ZXZfcHJpdi0+b3ByZWdpb24ubGlkX3N0YXRlKSAmIDB4MSA/DQo+IA0KPiAoKSBhcmUgcmVkdW5k
YW50IG5vdyBoZXJlLg0KDQpZdXAsIGZpeGVkLg0KDQo4PC0tLS0NClN1YmplY3Q6IGk5MTU6IHN3
aXRjaCBmcm9tIGFjcGlfb3NfaW9yZW1hcCB0byBtZW1yZW1hcA0KDQpGcm9tOiBEYW4gV2lsbGlh
bXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4NCg0KaTkxNSBleHBlY3RzIHRoZSBPcFJlZ2lv
biB0byBiZSBjYWNoZWQgKGkuZS4gbm90IF9faW9tZW0pLCBzbyBleHBsaWNpdGx5DQptYXAgaXQg
d2l0aCBtZW1yZW1hcCByYXRoZXIgdGhhbiB0aGUgaW1wbGllZCBjYWNoZSBzZXR0aW5nIG9mDQph
Y3BpX29zX2lvcmVtYXAoKS4NCg0KQ2M6IERhbmllbCBWZXR0ZXIgPGRhbmllbC52ZXR0ZXJAaW50
ZWwuY29tPg0KQ2M6IEphbmkgTmlrdWxhIDxqYW5pLm5pa3VsYUBsaW51eC5pbnRlbC5jb20+DQpD
YzogaW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZw0KQ2M6IERhdmlkIEFpcmxpZSA8YWly
bGllZEBsaW51eC5pZT4NCkNjOiBkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnDQpTaWdu
ZWQtb2ZmLWJ5OiBEYW4gV2lsbGlhbXMgPGRhbi5qLndpbGxpYW1zQGludGVsLmNvbT4NCi0tLQ0K
IGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jICAgfCAgICAyIC0NCiBkcml2ZXJz
L2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5oICAgICAgIHwgICAxMiArKy0tLQ0KIGRyaXZlcnMvZ3B1
L2RybS9pOTE1L2ludGVsX2Jpb3MuYyAgICAgfCAgIDI1ICsrKysrLS0tLS0NCiBkcml2ZXJzL2dw
dS9kcm0vaTkxNS9pbnRlbF9vcHJlZ2lvbi5jIHwgICA4MyArKysrKysrKysrKysrKysrLS0tLS0t
LS0tLS0tLS0tLS0NCiBkcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9wYW5lbC5jICAgIHwgICAg
MiAtDQogNSBmaWxlcyBjaGFuZ2VkLCA2MiBpbnNlcnRpb25zKCspLCA2MiBkZWxldGlvbnMoLSkN
Cg0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jIGIvZHJp
dmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2ZzLmMNCmluZGV4IGUzZWM5MDQ5MDgxZi4uMTU5
ODljYzE2ZTkyIDEwMDY0NA0KLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kZWJ1Z2Zz
LmMNCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZGVidWdmcy5jDQpAQCAtMTg0OSw3
ICsxODQ5LDcgQEAgc3RhdGljIGludCBpOTE1X29wcmVnaW9uKHN0cnVjdCBzZXFfZmlsZSAqbSwg
dm9pZCAqdW51c2VkKQ0KIAkJZ290byBvdXQ7DQogDQogCWlmIChvcHJlZ2lvbi0+aGVhZGVyKSB7
DQotCQltZW1jcHlfZnJvbWlvKGRhdGEsIG9wcmVnaW9uLT5oZWFkZXIsIE9QUkVHSU9OX1NJWkUp
Ow0KKwkJbWVtY3B5KGRhdGEsIG9wcmVnaW9uLT5oZWFkZXIsIE9QUkVHSU9OX1NJWkUpOw0KIAkJ
c2VxX3dyaXRlKG0sIGRhdGEsIE9QUkVHSU9OX1NJWkUpOw0KIAl9DQogDQpkaWZmIC0tZ2l0IGEv
ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5
MTVfZHJ2LmgNCmluZGV4IGUxZGI4ZGU1Mjg1MS4uZDg2ODQ2MzRhMzFkIDEwMDY0NA0KLS0tIGEv
ZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuaA0KKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5
MTUvaTkxNV9kcnYuaA0KQEAgLTQ0NCwxNCArNDQ0LDE0IEBAIHN0cnVjdCBvcHJlZ2lvbl9zd3Nj
aTsNCiBzdHJ1Y3Qgb3ByZWdpb25fYXNsZTsNCiANCiBzdHJ1Y3QgaW50ZWxfb3ByZWdpb24gew0K
LQlzdHJ1Y3Qgb3ByZWdpb25faGVhZGVyIF9faW9tZW0gKmhlYWRlcjsNCi0Jc3RydWN0IG9wcmVn
aW9uX2FjcGkgX19pb21lbSAqYWNwaTsNCi0Jc3RydWN0IG9wcmVnaW9uX3N3c2NpIF9faW9tZW0g
KnN3c2NpOw0KKwlzdHJ1Y3Qgb3ByZWdpb25faGVhZGVyICpoZWFkZXI7DQorCXN0cnVjdCBvcHJl
Z2lvbl9hY3BpICphY3BpOw0KKwlzdHJ1Y3Qgb3ByZWdpb25fc3dzY2kgKnN3c2NpOw0KIAl1MzIg
c3dzY2lfZ2JkYV9zdWJfZnVuY3Rpb25zOw0KIAl1MzIgc3dzY2lfc2JjYl9zdWJfZnVuY3Rpb25z
Ow0KLQlzdHJ1Y3Qgb3ByZWdpb25fYXNsZSBfX2lvbWVtICphc2xlOw0KLQl2b2lkIF9faW9tZW0g
KnZidDsNCi0JdTMyIF9faW9tZW0gKmxpZF9zdGF0ZTsNCisJc3RydWN0IG9wcmVnaW9uX2FzbGUg
KmFzbGU7DQorCXZvaWQgKnZidDsNCisJdTMyICpsaWRfc3RhdGU7DQogCXN0cnVjdCB3b3JrX3N0
cnVjdCBhc2xlX3dvcms7DQogfTsNCiAjZGVmaW5lIE9QUkVHSU9OX1NJWkUgICAgICAgICAgICAo
OCoxMDI0KQ0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuYyBi
L2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuYw0KaW5kZXggYzE5ZTY2OWZmZTUwLi5m
Njc2MmE1ZmFlZTggMTAwNjQ0DQotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9iaW9z
LmMNCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2Jpb3MuYw0KQEAgLTEyMzEsMjAg
KzEyMzEsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkIGludGVsX25vX29w
cmVnaW9uX3ZidFtdID0gew0KIAl7IH0NCiB9Ow0KIA0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgYmRi
X2hlYWRlciAqdmFsaWRhdGVfdmJ0KGNvbnN0IHZvaWQgX19pb21lbSAqX2Jhc2UsDQorc3RhdGlj
IGNvbnN0IHN0cnVjdCBiZGJfaGVhZGVyICp2YWxpZGF0ZV92YnQoY29uc3Qgdm9pZCAqYmFzZSwN
CiAJCQkJCSAgICAgc2l6ZV90IHNpemUsDQotCQkJCQkgICAgIGNvbnN0IHZvaWQgX19pb21lbSAq
X3ZidCwNCisJCQkJCSAgICAgY29uc3Qgdm9pZCAqX3ZidCwNCiAJCQkJCSAgICAgY29uc3QgY2hh
ciAqc291cmNlKQ0KIHsNCi0JLyoNCi0JICogVGhpcyBpcyB0aGUgb25lIHBsYWNlIHdoZXJlIHdl
IGV4cGxpY2l0bHkgZGlzY2FyZCB0aGUgYWRkcmVzcyBzcGFjZQ0KLQkgKiAoX19pb21lbSkgb2Yg
dGhlIEJJT1MvVkJULiAoQW5kIHRoaXMgd2lsbCBjYXVzZSBhIHNwYXJzZSBjb21wbGFpbnQuKQ0K
LQkgKiBGcm9tIG5vdyBvbiBldmVyeXRoaW5nIGlzIGJhc2VkIG9uICdiYXNlJywgYW5kIHRyZWF0
ZWQgYXMgcmVndWxhcg0KLQkgKiBtZW1vcnkuDQotCSAqLw0KLQljb25zdCB2b2lkICpiYXNlID0g
KGNvbnN0IHZvaWQgKikgX2Jhc2U7DQotCXNpemVfdCBvZmZzZXQgPSBfdmJ0IC0gX2Jhc2U7DQot
CWNvbnN0IHN0cnVjdCB2YnRfaGVhZGVyICp2YnQgPSBiYXNlICsgb2Zmc2V0Ow0KKwlzaXplX3Qg
b2Zmc2V0ID0gX3ZidCAtIGJhc2U7DQorCWNvbnN0IHN0cnVjdCB2YnRfaGVhZGVyICp2YnQgPSBf
dmJ0Ow0KIAljb25zdCBzdHJ1Y3QgYmRiX2hlYWRlciAqYmRiOw0KIA0KIAlpZiAob2Zmc2V0ICsg
c2l6ZW9mKHN0cnVjdCB2YnRfaGVhZGVyKSA+IHNpemUpIHsNCkBAIC0xMjgyLDcgKzEyNzUsMTUg
QEAgc3RhdGljIGNvbnN0IHN0cnVjdCBiZGJfaGVhZGVyICpmaW5kX3ZidCh2b2lkIF9faW9tZW0g
KmJpb3MsIHNpemVfdCBzaXplKQ0KIAkvKiBTY291ciBtZW1vcnkgbG9va2luZyBmb3IgdGhlIFZC
VCBzaWduYXR1cmUuICovDQogCWZvciAoaSA9IDA7IGkgKyA0IDwgc2l6ZTsgaSsrKSB7DQogCQlp
ZiAoaW9yZWFkMzIoYmlvcyArIGkpID09ICooKGNvbnN0IHUzMiAqKSAiJFZCVCIpKSB7DQotCQkJ
YmRiID0gdmFsaWRhdGVfdmJ0KGJpb3MsIHNpemUsIGJpb3MgKyBpLCAiUENJIFJPTSIpOw0KKwkJ
CS8qDQorCQkJICogVGhpcyBpcyB0aGUgb25lIHBsYWNlIHdoZXJlIHdlIGV4cGxpY2l0bHkgZGlz
Y2FyZCB0aGUNCisJCQkgKiBhZGRyZXNzIHNwYWNlIChfX2lvbWVtKSBvZiB0aGUgQklPUy9WQlQu
IEZyb20gbm93IG9uDQorCQkJICogZXZlcnl0aGluZyBpcyBiYXNlZCBvbiAnYmFzZScsIGFuZCB0
cmVhdGVkIGFzIHJlZ3VsYXINCisJCQkgKiBtZW1vcnkuDQorCQkJICovDQorCQkJdm9pZCAqX2Jp
b3MgPSAodm9pZCBfX2ZvcmNlICopIGJpb3M7DQorDQorCQkJYmRiID0gdmFsaWRhdGVfdmJ0KF9i
aW9zLCBzaXplLCBfYmlvcyArIGksICJQQ0kgUk9NIik7DQogCQkJYnJlYWs7DQogCQl9DQogCX0N
CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9vcHJlZ2lvbi5jIGIvZHJp
dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfb3ByZWdpb24uYw0KaW5kZXggY2IxYzY1NzM5NDI1Li40
MWQ0NGE1ZWY2MjYgMTAwNjQ0DQotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9vcHJl
Z2lvbi5jDQorKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9vcHJlZ2lvbi5jDQpAQCAt
MjM5LDcgKzIzOSw3IEBAIHN0cnVjdCBvcHJlZ2lvbl9hc2xlIHsNCiBzdGF0aWMgaW50IHN3c2Np
KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBmdW5jdGlvbiwgdTMyIHBhcm0sIHUzMiAqcGFy
bV9vdXQpDQogew0KIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRl
dl9wcml2YXRlOw0KLQlzdHJ1Y3Qgb3ByZWdpb25fc3dzY2kgX19pb21lbSAqc3dzY2kgPSBkZXZf
cHJpdi0+b3ByZWdpb24uc3dzY2k7DQorCXN0cnVjdCBvcHJlZ2lvbl9zd3NjaSAqc3dzY2kgPSBk
ZXZfcHJpdi0+b3ByZWdpb24uc3dzY2k7DQogCXUzMiBtYWluX2Z1bmN0aW9uLCBzdWJfZnVuY3Rp
b24sIHNjaWM7DQogCXUxNiBwY2lfc3dzY2k7DQogCXUzMiBkc2xwOw0KQEAgLTI2NCw3ICsyNjQs
NyBAQCBzdGF0aWMgaW50IHN3c2NpKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBmdW5jdGlv
biwgdTMyIHBhcm0sIHUzMiAqcGFybV9vdXQpDQogCX0NCiANCiAJLyogRHJpdmVyIHNsZWVwIHRp
bWVvdXQgaW4gbXMuICovDQotCWRzbHAgPSBpb3JlYWQzMigmc3dzY2ktPmRzbHApOw0KKwlkc2xw
ID0gc3dzY2ktPmRzbHA7DQogCWlmICghZHNscCkgew0KIAkJLyogVGhlIHNwZWMgc2F5cyAybXMg
c2hvdWxkIGJlIHRoZSBkZWZhdWx0LCBidXQgaXQncyB0b28gc21hbGwNCiAJCSAqIGZvciBzb21l
IG1hY2hpbmVzLiAqLw0KQEAgLTI3Nyw3ICsyNzcsNyBAQCBzdGF0aWMgaW50IHN3c2NpKHN0cnVj
dCBkcm1fZGV2aWNlICpkZXYsIHUzMiBmdW5jdGlvbiwgdTMyIHBhcm0sIHUzMiAqcGFybV9vdXQp
DQogCX0NCiANCiAJLyogVGhlIHNwZWMgdGVsbHMgdXMgdG8gZG8gdGhpcywgYnV0IHdlIGFyZSB0
aGUgb25seSB1c2VyLi4uICovDQotCXNjaWMgPSBpb3JlYWQzMigmc3dzY2ktPnNjaWMpOw0KKwlz
Y2ljID0gc3dzY2ktPnNjaWM7DQogCWlmIChzY2ljICYgU1dTQ0lfU0NJQ19JTkRJQ0FUT1IpIHsN
CiAJCURSTV9ERUJVR19EUklWRVIoIlNXU0NJIHJlcXVlc3QgYWxyZWFkeSBpbiBwcm9ncmVzc1xu
Iik7DQogCQlyZXR1cm4gLUVCVVNZOw0KQEAgLTI4NSw4ICsyODUsOCBAQCBzdGF0aWMgaW50IHN3
c2NpKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHUzMiBmdW5jdGlvbiwgdTMyIHBhcm0sIHUzMiAq
cGFybV9vdXQpDQogDQogCXNjaWMgPSBmdW5jdGlvbiB8IFNXU0NJX1NDSUNfSU5ESUNBVE9SOw0K
IA0KLQlpb3dyaXRlMzIocGFybSwgJnN3c2NpLT5wYXJtKTsNCi0JaW93cml0ZTMyKHNjaWMsICZz
d3NjaS0+c2NpYyk7DQorCXN3c2NpLT5wYXJtID0gcGFybTsNCisJc3dzY2ktPnNjaWMgPSBzY2lj
Ow0KIA0KIAkvKiBFbnN1cmUgU0NJIGV2ZW50IGlzIHNlbGVjdGVkIGFuZCBldmVudCB0cmlnZ2Vy
IGlzIGNsZWFyZWQuICovDQogCXBjaV9yZWFkX2NvbmZpZ193b3JkKGRldi0+cGRldiwgUENJX1NX
U0NJLCAmcGNpX3N3c2NpKTsNCkBAIC0zMDEsNyArMzAxLDcgQEAgc3RhdGljIGludCBzd3NjaShz
dHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgZnVuY3Rpb24sIHUzMiBwYXJtLCB1MzIgKnBhcm1f
b3V0KQ0KIAlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LT5wZGV2LCBQQ0lfU1dTQ0ksIHBjaV9z
d3NjaSk7DQogDQogCS8qIFBvbGwgZm9yIHRoZSByZXN1bHQuICovDQotI2RlZmluZSBDICgoKHNj
aWMgPSBpb3JlYWQzMigmc3dzY2ktPnNjaWMpKSAmIFNXU0NJX1NDSUNfSU5ESUNBVE9SKSA9PSAw
KQ0KKyNkZWZpbmUgQyAoKChzY2ljID0gc3dzY2ktPnNjaWMpICYgU1dTQ0lfU0NJQ19JTkRJQ0FU
T1IpID09IDApDQogCWlmICh3YWl0X2ZvcihDLCBkc2xwKSkgew0KIAkJRFJNX0RFQlVHX0RSSVZF
UigiU1dTQ0kgcmVxdWVzdCB0aW1lZCBvdXRcbiIpOw0KIAkJcmV0dXJuIC1FVElNRURPVVQ7DQpA
QCAtMzE3LDcgKzMxNyw3IEBAIHN0YXRpYyBpbnQgc3dzY2koc3RydWN0IGRybV9kZXZpY2UgKmRl
diwgdTMyIGZ1bmN0aW9uLCB1MzIgcGFybSwgdTMyICpwYXJtX291dCkNCiAJfQ0KIA0KIAlpZiAo
cGFybV9vdXQpDQotCQkqcGFybV9vdXQgPSBpb3JlYWQzMigmc3dzY2ktPnBhcm0pOw0KKwkJKnBh
cm1fb3V0ID0gc3dzY2ktPnBhcm07DQogDQogCXJldHVybiAwOw0KIA0KQEAgLTQwNyw3ICs0MDcs
NyBAQCBzdGF0aWMgdTMyIGFzbGVfc2V0X2JhY2tsaWdodChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2
LCB1MzIgYmNscCkNCiB7DQogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRl
di0+ZGV2X3ByaXZhdGU7DQogCXN0cnVjdCBpbnRlbF9jb25uZWN0b3IgKmludGVsX2Nvbm5lY3Rv
cjsNCi0Jc3RydWN0IG9wcmVnaW9uX2FzbGUgX19pb21lbSAqYXNsZSA9IGRldl9wcml2LT5vcHJl
Z2lvbi5hc2xlOw0KKwlzdHJ1Y3Qgb3ByZWdpb25fYXNsZSAqYXNsZSA9IGRldl9wcml2LT5vcHJl
Z2lvbi5hc2xlOw0KIA0KIAlEUk1fREVCVUdfRFJJVkVSKCJiY2xwID0gMHglMDh4XG4iLCBiY2xw
KTsNCiANCkBAIC00MzIsNyArNDMyLDcgQEAgc3RhdGljIHUzMiBhc2xlX3NldF9iYWNrbGlnaHQo
c3RydWN0IGRybV9kZXZpY2UgKmRldiwgdTMyIGJjbHApDQogCURSTV9ERUJVR19LTVMoInVwZGF0
aW5nIG9wcmVnaW9uIGJhY2tsaWdodCAlZC8yNTVcbiIsIGJjbHApOw0KIAlsaXN0X2Zvcl9lYWNo
X2VudHJ5KGludGVsX2Nvbm5lY3RvciwgJmRldi0+bW9kZV9jb25maWcuY29ubmVjdG9yX2xpc3Qs
IGJhc2UuaGVhZCkNCiAJCWludGVsX3BhbmVsX3NldF9iYWNrbGlnaHRfYWNwaShpbnRlbF9jb25u
ZWN0b3IsIGJjbHAsIDI1NSk7DQotCWlvd3JpdGUzMihESVZfUk9VTkRfVVAoYmNscCAqIDEwMCwg
MjU1KSB8IEFTTEVfQ0JMVl9WQUxJRCwgJmFzbGUtPmNibHYpOw0KKwlhc2xlLT5jYmx2ID0gRElW
X1JPVU5EX1VQKGJjbHAgKiAxMDAsIDI1NSkgfCBBU0xFX0NCTFZfVkFMSUQ7DQogDQogCWRybV9t
b2Rlc2V0X3VubG9jaygmZGV2LT5tb2RlX2NvbmZpZy5jb25uZWN0aW9uX211dGV4KTsNCiANCkBA
IC01MTksMTQgKzUxOSwxNCBAQCBzdGF0aWMgdm9pZCBhc2xlX3dvcmsoc3RydWN0IHdvcmtfc3Ry
dWN0ICp3b3JrKQ0KIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPQ0KIAkJY29u
dGFpbmVyX29mKG9wcmVnaW9uLCBzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSwgb3ByZWdpb24pOw0K
IAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gZGV2X3ByaXYtPmRldjsNCi0Jc3RydWN0IG9wcmVn
aW9uX2FzbGUgX19pb21lbSAqYXNsZSA9IGRldl9wcml2LT5vcHJlZ2lvbi5hc2xlOw0KKwlzdHJ1
Y3Qgb3ByZWdpb25fYXNsZSAqYXNsZSA9IGRldl9wcml2LT5vcHJlZ2lvbi5hc2xlOw0KIAl1MzIg
YXNsY19zdGF0ID0gMDsNCiAJdTMyIGFzbGNfcmVxOw0KIA0KIAlpZiAoIWFzbGUpDQogCQlyZXR1
cm47DQogDQotCWFzbGNfcmVxID0gaW9yZWFkMzIoJmFzbGUtPmFzbGMpOw0KKwlhc2xjX3JlcSA9
IGFzbGUtPmFzbGM7DQogDQogCWlmICghKGFzbGNfcmVxICYgQVNMQ19SRVFfTVNLKSkgew0KIAkJ
RFJNX0RFQlVHX0RSSVZFUigiTm8gcmVxdWVzdCBvbiBBU0xDIGludGVycnVwdCAweCUwOHhcbiIs
DQpAQCAtNTM1LDM0ICs1MzUsMzQgQEAgc3RhdGljIHZvaWQgYXNsZV93b3JrKHN0cnVjdCB3b3Jr
X3N0cnVjdCAqd29yaykNCiAJfQ0KIA0KIAlpZiAoYXNsY19yZXEgJiBBU0xDX1NFVF9BTFNfSUxM
VU0pDQotCQlhc2xjX3N0YXQgfD0gYXNsZV9zZXRfYWxzX2lsbHVtKGRldiwgaW9yZWFkMzIoJmFz
bGUtPmFsc2kpKTsNCisJCWFzbGNfc3RhdCB8PSBhc2xlX3NldF9hbHNfaWxsdW0oZGV2LCBhc2xl
LT5hbHNpKTsNCiANCiAJaWYgKGFzbGNfcmVxICYgQVNMQ19TRVRfQkFDS0xJR0hUKQ0KLQkJYXNs
Y19zdGF0IHw9IGFzbGVfc2V0X2JhY2tsaWdodChkZXYsIGlvcmVhZDMyKCZhc2xlLT5iY2xwKSk7
DQorCQlhc2xjX3N0YXQgfD0gYXNsZV9zZXRfYmFja2xpZ2h0KGRldiwgYXNsZS0+YmNscCk7DQog
DQogCWlmIChhc2xjX3JlcSAmIEFTTENfU0VUX1BGSVQpDQotCQlhc2xjX3N0YXQgfD0gYXNsZV9z
ZXRfcGZpdChkZXYsIGlvcmVhZDMyKCZhc2xlLT5wZml0KSk7DQorCQlhc2xjX3N0YXQgfD0gYXNs
ZV9zZXRfcGZpdChkZXYsIGFzbGUtPnBmaXQpOw0KIA0KIAlpZiAoYXNsY19yZXEgJiBBU0xDX1NF
VF9QV01fRlJFUSkNCi0JCWFzbGNfc3RhdCB8PSBhc2xlX3NldF9wd21fZnJlcShkZXYsIGlvcmVh
ZDMyKCZhc2xlLT5wZm1iKSk7DQorCQlhc2xjX3N0YXQgfD0gYXNsZV9zZXRfcHdtX2ZyZXEoZGV2
LCBhc2xlLT5wZm1iKTsNCiANCiAJaWYgKGFzbGNfcmVxICYgQVNMQ19TVVBQT1JURURfUk9UQVRJ
T05fQU5HTEVTKQ0KIAkJYXNsY19zdGF0IHw9IGFzbGVfc2V0X3N1cHBvcnRlZF9yb3RhdGlvbl9h
bmdsZXMoZGV2LA0KLQkJCQkJCQlpb3JlYWQzMigmYXNsZS0+c3JvdCkpOw0KKwkJCQkJCQlhc2xl
LT5zcm90KTsNCiANCiAJaWYgKGFzbGNfcmVxICYgQVNMQ19CVVRUT05fQVJSQVkpDQotCQlhc2xj
X3N0YXQgfD0gYXNsZV9zZXRfYnV0dG9uX2FycmF5KGRldiwgaW9yZWFkMzIoJmFzbGUtPml1ZXIp
KTsNCisJCWFzbGNfc3RhdCB8PSBhc2xlX3NldF9idXR0b25fYXJyYXkoZGV2LCBhc2xlLT5pdWVy
KTsNCiANCiAJaWYgKGFzbGNfcmVxICYgQVNMQ19DT05WRVJUSUJMRV9JTkRJQ0FUT1IpDQotCQlh
c2xjX3N0YXQgfD0gYXNsZV9zZXRfY29udmVydGlibGUoZGV2LCBpb3JlYWQzMigmYXNsZS0+aXVl
cikpOw0KKwkJYXNsY19zdGF0IHw9IGFzbGVfc2V0X2NvbnZlcnRpYmxlKGRldiwgYXNsZS0+aXVl
cik7DQogDQogCWlmIChhc2xjX3JlcSAmIEFTTENfRE9DS0lOR19JTkRJQ0FUT1IpDQotCQlhc2xj
X3N0YXQgfD0gYXNsZV9zZXRfZG9ja2luZyhkZXYsIGlvcmVhZDMyKCZhc2xlLT5pdWVyKSk7DQor
CQlhc2xjX3N0YXQgfD0gYXNsZV9zZXRfZG9ja2luZyhkZXYsIGFzbGUtPml1ZXIpOw0KIA0KIAlp
ZiAoYXNsY19yZXEgJiBBU0xDX0lTQ1RfU1RBVEVfQ0hBTkdFKQ0KIAkJYXNsY19zdGF0IHw9IGFz
bGVfaXNjdF9zdGF0ZShkZXYpOw0KIA0KLQlpb3dyaXRlMzIoYXNsY19zdGF0LCAmYXNsZS0+YXNs
Yyk7DQorCWFzbGUtPmFzbGMgPSBhc2xjX3N0YXQ7DQogfQ0KIA0KIHZvaWQgaW50ZWxfb3ByZWdp
b25fYXNsZV9pbnRyKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpDQpAQCAtNTg3LDggKzU4Nyw4IEBA
IHN0YXRpYyBpbnQgaW50ZWxfb3ByZWdpb25fdmlkZW9fZXZlbnQoc3RydWN0IG5vdGlmaWVyX2Js
b2NrICpuYiwNCiAJICAgTGludXgsIHRoZXNlIGFyZSBoYW5kbGVkIGJ5IHRoZSBkb2NrLCBidXR0
b24gYW5kIHZpZGVvIGRyaXZlcnMuDQogCSovDQogDQotCXN0cnVjdCBvcHJlZ2lvbl9hY3BpIF9f
aW9tZW0gKmFjcGk7DQogCXN0cnVjdCBhY3BpX2J1c19ldmVudCAqZXZlbnQgPSBkYXRhOw0KKwlz
dHJ1Y3Qgb3ByZWdpb25fYWNwaSAqYWNwaTsNCiAJaW50IHJldCA9IE5PVElGWV9PSzsNCiANCiAJ
aWYgKHN0cmNtcChldmVudC0+ZGV2aWNlX2NsYXNzLCBBQ1BJX1ZJREVPX0NMQVNTKSAhPSAwKQ0K
QEAgLTU5OSwxMSArNTk5LDEwIEBAIHN0YXRpYyBpbnQgaW50ZWxfb3ByZWdpb25fdmlkZW9fZXZl
bnQoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwNCiANCiAJYWNwaSA9IHN5c3RlbV9vcHJlZ2lv
bi0+YWNwaTsNCiANCi0JaWYgKGV2ZW50LT50eXBlID09IDB4ODAgJiYNCi0JICAgIChpb3JlYWQz
MigmYWNwaS0+Y2V2dCkgJiAxKSA9PSAwKQ0KKwlpZiAoZXZlbnQtPnR5cGUgPT0gMHg4MCAmJiAo
KGFjcGktPmNldnQgJiAxKSA9PSAwKSkNCiAJCXJldCA9IE5PVElGWV9CQUQ7DQogDQotCWlvd3Jp
dGUzMigwLCAmYWNwaS0+Y3N0cyk7DQorCWFjcGktPmNzdHMgPSAwOw0KIA0KIAlyZXR1cm4gcmV0
Ow0KIH0NCkBAIC02MjMsMTQgKzYyMiwxNCBAQCBzdGF0aWMgdTMyIGdldF9kaWQoc3RydWN0IGlu
dGVsX29wcmVnaW9uICpvcHJlZ2lvbiwgaW50IGkpDQogCXUzMiBkaWQ7DQogDQogCWlmIChpIDwg
QVJSQVlfU0laRShvcHJlZ2lvbi0+YWNwaS0+ZGlkbCkpIHsNCi0JCWRpZCA9IGlvcmVhZDMyKCZv
cHJlZ2lvbi0+YWNwaS0+ZGlkbFtpXSk7DQorCQlkaWQgPSBvcHJlZ2lvbi0+YWNwaS0+ZGlkbFtp
XTsNCiAJfSBlbHNlIHsNCiAJCWkgLT0gQVJSQVlfU0laRShvcHJlZ2lvbi0+YWNwaS0+ZGlkbCk7
DQogDQogCQlpZiAoV0FSTl9PTihpID49IEFSUkFZX1NJWkUob3ByZWdpb24tPmFjcGktPmRpZDIp
KSkNCiAJCQlyZXR1cm4gMDsNCiANCi0JCWRpZCA9IGlvcmVhZDMyKCZvcHJlZ2lvbi0+YWNwaS0+
ZGlkMltpXSk7DQorCQlkaWQgPSBvcHJlZ2lvbi0+YWNwaS0+ZGlkMltpXTsNCiAJfQ0KIA0KIAly
ZXR1cm4gZGlkOw0KQEAgLTYzOSwxNCArNjM4LDE0IEBAIHN0YXRpYyB1MzIgZ2V0X2RpZChzdHJ1
Y3QgaW50ZWxfb3ByZWdpb24gKm9wcmVnaW9uLCBpbnQgaSkNCiBzdGF0aWMgdm9pZCBzZXRfZGlk
KHN0cnVjdCBpbnRlbF9vcHJlZ2lvbiAqb3ByZWdpb24sIGludCBpLCB1MzIgdmFsKQ0KIHsNCiAJ
aWYgKGkgPCBBUlJBWV9TSVpFKG9wcmVnaW9uLT5hY3BpLT5kaWRsKSkgew0KLQkJaW93cml0ZTMy
KHZhbCwgJm9wcmVnaW9uLT5hY3BpLT5kaWRsW2ldKTsNCisJCW9wcmVnaW9uLT5hY3BpLT5kaWRs
W2ldID0gdmFsOw0KIAl9IGVsc2Ugew0KIAkJaSAtPSBBUlJBWV9TSVpFKG9wcmVnaW9uLT5hY3Bp
LT5kaWRsKTsNCiANCiAJCWlmIChXQVJOX09OKGkgPj0gQVJSQVlfU0laRShvcHJlZ2lvbi0+YWNw
aS0+ZGlkMikpKQ0KIAkJCXJldHVybjsNCiANCi0JCWlvd3JpdGUzMih2YWwsICZvcHJlZ2lvbi0+
YWNwaS0+ZGlkMltpXSk7DQorCQlvcHJlZ2lvbi0+YWNwaS0+ZGlkMltpXSA9IHZhbDsNCiAJfQ0K
IH0NCiANCkBAIC03NjgsNyArNzY3LDcgQEAgc3RhdGljIHZvaWQgaW50ZWxfc2V0dXBfY2FkbHMo
c3RydWN0IGRybV9kZXZpY2UgKmRldikNCiAJICogdGhlcmUgYXJlIGxlc3MgdGhhbiBlaWdodCBk
ZXZpY2VzLiAqLw0KIAlkbyB7DQogCQlkaXNwX2lkID0gZ2V0X2RpZChvcHJlZ2lvbiwgaSk7DQot
CQlpb3dyaXRlMzIoZGlzcF9pZCwgJm9wcmVnaW9uLT5hY3BpLT5jYWRsW2ldKTsNCisJCW9wcmVn
aW9uLT5hY3BpLT5jYWRsW2ldID0gZGlzcF9pZDsNCiAJfSB3aGlsZSAoKytpIDwgOCAmJiBkaXNw
X2lkICE9IDApOw0KIH0NCiANCkBAIC03ODcsMTYgKzc4NiwxNiBAQCB2b2lkIGludGVsX29wcmVn
aW9uX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikNCiAJCS8qIE5vdGlmeSBCSU9TIHdlIGFy
ZSByZWFkeSB0byBoYW5kbGUgQUNQSSB2aWRlbyBleHQgbm90aWZzLg0KIAkJICogUmlnaHQgbm93
LCBhbGwgdGhlIGV2ZW50cyBhcmUgaGFuZGxlZCBieSB0aGUgQUNQSSB2aWRlbyBtb2R1bGUuDQog
CQkgKiBXZSBkb24ndCBhY3R1YWxseSBuZWVkIHRvIGRvIGFueXRoaW5nIHdpdGggdGhlbS4gKi8N
Ci0JCWlvd3JpdGUzMigwLCAmb3ByZWdpb24tPmFjcGktPmNzdHMpOw0KLQkJaW93cml0ZTMyKDEs
ICZvcHJlZ2lvbi0+YWNwaS0+ZHJkeSk7DQorCQlvcHJlZ2lvbi0+YWNwaS0+Y3N0cyA9IDA7DQor
CQlvcHJlZ2lvbi0+YWNwaS0+ZHJkeSA9IDE7DQogDQogCQlzeXN0ZW1fb3ByZWdpb24gPSBvcHJl
Z2lvbjsNCiAJCXJlZ2lzdGVyX2FjcGlfbm90aWZpZXIoJmludGVsX29wcmVnaW9uX25vdGlmaWVy
KTsNCiAJfQ0KIA0KIAlpZiAob3ByZWdpb24tPmFzbGUpIHsNCi0JCWlvd3JpdGUzMihBU0xFX1RD
SEVfQkxDX0VOLCAmb3ByZWdpb24tPmFzbGUtPnRjaGUpOw0KLQkJaW93cml0ZTMyKEFTTEVfQVJE
WV9SRUFEWSwgJm9wcmVnaW9uLT5hc2xlLT5hcmR5KTsNCisJCW9wcmVnaW9uLT5hc2xlLT50Y2hl
ID0gQVNMRV9UQ0hFX0JMQ19FTjsNCisJCW9wcmVnaW9uLT5hc2xlLT5hcmR5ID0gQVNMRV9BUkRZ
X1JFQURZOw0KIAl9DQogfQ0KIA0KQEAgLTgwOSwxOSArODA4LDE5IEBAIHZvaWQgaW50ZWxfb3By
ZWdpb25fZmluaShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQ0KIAkJcmV0dXJuOw0KIA0KIAlpZiAo
b3ByZWdpb24tPmFzbGUpDQotCQlpb3dyaXRlMzIoQVNMRV9BUkRZX05PVF9SRUFEWSwgJm9wcmVn
aW9uLT5hc2xlLT5hcmR5KTsNCisJCW9wcmVnaW9uLT5hc2xlLT5hcmR5ID0gQVNMRV9BUkRZX05P
VF9SRUFEWTsNCiANCiAJY2FuY2VsX3dvcmtfc3luYygmZGV2X3ByaXYtPm9wcmVnaW9uLmFzbGVf
d29yayk7DQogDQogCWlmIChvcHJlZ2lvbi0+YWNwaSkgew0KLQkJaW93cml0ZTMyKDAsICZvcHJl
Z2lvbi0+YWNwaS0+ZHJkeSk7DQorCQlvcHJlZ2lvbi0+YWNwaS0+ZHJkeSA9IDA7DQogDQogCQlz
eXN0ZW1fb3ByZWdpb24gPSBOVUxMOw0KIAkJdW5yZWdpc3Rlcl9hY3BpX25vdGlmaWVyKCZpbnRl
bF9vcHJlZ2lvbl9ub3RpZmllcik7DQogCX0NCiANCiAJLyoganVzdCBjbGVhciBhbGwgb3ByZWdp
b24gbWVtb3J5IHBvaW50ZXJzIG5vdyAqLw0KLQlpb3VubWFwKG9wcmVnaW9uLT5oZWFkZXIpOw0K
KwltZW11bm1hcChvcHJlZ2lvbi0+aGVhZGVyKTsNCiAJb3ByZWdpb24tPmhlYWRlciA9IE5VTEw7
DQogCW9wcmVnaW9uLT5hY3BpID0gTlVMTDsNCiAJb3ByZWdpb24tPnN3c2NpID0gTlVMTDsNCkBA
IC04OTQsMTAgKzg5MywxMCBAQCBpbnQgaW50ZWxfb3ByZWdpb25fc2V0dXAoc3RydWN0IGRybV9k
ZXZpY2UgKmRldikNCiB7DQogCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpkZXZfcHJpdiA9IGRl
di0+ZGV2X3ByaXZhdGU7DQogCXN0cnVjdCBpbnRlbF9vcHJlZ2lvbiAqb3ByZWdpb24gPSAmZGV2
X3ByaXYtPm9wcmVnaW9uOw0KLQl2b2lkIF9faW9tZW0gKmJhc2U7DQogCXUzMiBhc2xzLCBtYm94
ZXM7DQogCWNoYXIgYnVmW3NpemVvZihPUFJFR0lPTl9TSUdOQVRVUkUpXTsNCiAJaW50IGVyciA9
IDA7DQorCXZvaWQgKmJhc2U7DQogDQogCUJVSUxEX0JVR19PTihzaXplb2Yoc3RydWN0IG9wcmVn
aW9uX2hlYWRlcikgIT0gMHgxMDApOw0KIAlCVUlMRF9CVUdfT04oc2l6ZW9mKHN0cnVjdCBvcHJl
Z2lvbl9hY3BpKSAhPSAweDEwMCk7DQpAQCAtOTE1LDExICs5MTQsMTEgQEAgaW50IGludGVsX29w
cmVnaW9uX3NldHVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpDQogCUlOSVRfV09SSygmb3ByZWdp
b24tPmFzbGVfd29yaywgYXNsZV93b3JrKTsNCiAjZW5kaWYNCiANCi0JYmFzZSA9IGFjcGlfb3Nf
aW9yZW1hcChhc2xzLCBPUFJFR0lPTl9TSVpFKTsNCisJYmFzZSA9IG1lbXJlbWFwKGFzbHMsIE9Q
UkVHSU9OX1NJWkUsIE1FTVJFTUFQX1dCKTsNCiAJaWYgKCFiYXNlKQ0KIAkJcmV0dXJuIC1FTk9N
RU07DQogDQotCW1lbWNweV9mcm9taW8oYnVmLCBiYXNlLCBzaXplb2YoYnVmKSk7DQorCW1lbWNw
eShidWYsIGJhc2UsIHNpemVvZihidWYpKTsNCiANCiAJaWYgKG1lbWNtcChidWYsIE9QUkVHSU9O
X1NJR05BVFVSRSwgMTYpKSB7DQogCQlEUk1fREVCVUdfRFJJVkVSKCJvcHJlZ2lvbiBzaWduYXR1
cmUgbWlzbWF0Y2hcbiIpOw0KQEAgLTkzMSw3ICs5MzAsNyBAQCBpbnQgaW50ZWxfb3ByZWdpb25f
c2V0dXAoc3RydWN0IGRybV9kZXZpY2UgKmRldikNCiANCiAJb3ByZWdpb24tPmxpZF9zdGF0ZSA9
IGJhc2UgKyBBQ1BJX0NMSUQ7DQogDQotCW1ib3hlcyA9IGlvcmVhZDMyKCZvcHJlZ2lvbi0+aGVh
ZGVyLT5tYm94ZXMpOw0KKwltYm94ZXMgPSBvcHJlZ2lvbi0+aGVhZGVyLT5tYm94ZXM7DQogCWlm
IChtYm94ZXMgJiBNQk9YX0FDUEkpIHsNCiAJCURSTV9ERUJVR19EUklWRVIoIlB1YmxpYyBBQ1BJ
IG1ldGhvZHMgc3VwcG9ydGVkXG4iKTsNCiAJCW9wcmVnaW9uLT5hY3BpID0gYmFzZSArIE9QUkVH
SU9OX0FDUElfT0ZGU0VUOw0KQEAgLTk0NiwxMiArOTQ1LDEyIEBAIGludCBpbnRlbF9vcHJlZ2lv
bl9zZXR1cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQ0KIAkJRFJNX0RFQlVHX0RSSVZFUigiQVNM
RSBzdXBwb3J0ZWRcbiIpOw0KIAkJb3ByZWdpb24tPmFzbGUgPSBiYXNlICsgT1BSRUdJT05fQVNM
RV9PRkZTRVQ7DQogDQotCQlpb3dyaXRlMzIoQVNMRV9BUkRZX05PVF9SRUFEWSwgJm9wcmVnaW9u
LT5hc2xlLT5hcmR5KTsNCisJCW9wcmVnaW9uLT5hc2xlLT5hcmR5ID0gQVNMRV9BUkRZX05PVF9S
RUFEWTsNCiAJfQ0KIA0KIAlyZXR1cm4gMDsNCiANCiBlcnJfb3V0Og0KLQlpb3VubWFwKGJhc2Up
Ow0KKwltZW11bm1hcChiYXNlKTsNCiAJcmV0dXJuIGVycjsNCiB9DQpkaWZmIC0tZ2l0IGEvZHJp
dmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcGFuZWwuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2lu
dGVsX3BhbmVsLmMNCmluZGV4IGUyYWIzZjZlZDAyMi4uZWZlNTQyNGIyOTBjIDEwMDY0NA0KLS0t
IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfcGFuZWwuYw0KKysrIGIvZHJpdmVycy9ncHUv
ZHJtL2k5MTUvaW50ZWxfcGFuZWwuYw0KQEAgLTM4Nyw3ICszODcsNyBAQCBpbnRlbF9wYW5lbF9k
ZXRlY3Qoc3RydWN0IGRybV9kZXZpY2UgKmRldikNCiANCiAJLyogQXNzdW1lIHRoYXQgdGhlIEJJ
T1MgZG9lcyBub3QgbGllIHRocm91Z2ggdGhlIE9wUmVnaW9uLi4uICovDQogCWlmICghaTkxNS5w
YW5lbF9pZ25vcmVfbGlkICYmIGRldl9wcml2LT5vcHJlZ2lvbi5saWRfc3RhdGUpIHsNCi0JCXJl
dHVybiBpb3JlYWQzMihkZXZfcHJpdi0+b3ByZWdpb24ubGlkX3N0YXRlKSAmIDB4MSA/DQorCQly
ZXR1cm4gKmRldl9wcml2LT5vcHJlZ2lvbi5saWRfc3RhdGUgJiAweDEgPw0KIAkJCWNvbm5lY3Rv
cl9zdGF0dXNfY29ubmVjdGVkIDoNCiAJCQljb25uZWN0b3Jfc3RhdHVzX2Rpc2Nvbm5lY3RlZDsN
CiAJfQ0KDQo=
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1245457 — Re: [Intel-gfx] [PATCH 09/20] i915: switch from acpi_os_ioremap to memremap

FromDaniel Vetter <daniel@ffwll.ch>
Date2015-10-13 10:30 +0200
SubjectRe: [Intel-gfx] [PATCH 09/20] i915: switch from acpi_os_ioremap to memremap
Message-ID<qj386-Y7-15@gated-at.bofh.it>
In reply to#1245144
On Mon, Oct 12, 2015 at 09:12:57PM +0000, Williams, Dan J wrote:
> On Mon, 2015-10-12 at 09:01 +0200, Daniel Vetter wrote:
> > On Fri, Oct 09, 2015 at 06:16:25PM -0400, Dan Williams wrote:
> > > i915 expects the OpRegion to be cached (i.e. not __iomem), so explicitly
> > > map it with memremap rather than the implied cache setting of
> > > acpi_os_ioremap().
> > > 
> > > Cc: Daniel Vetter <daniel.vetter@intel.com>
> > > Cc: Jani Nikula <jani.nikula@linux.intel.com>
> > > Cc: intel-gfx@lists.freedesktop.org
> > > Cc: David Airlie <airlied@linux.ie>
> > > Cc: dri-devel@lists.freedesktop.org
> > > Signed-off-by: Dan Williams <dan.j.williams@intel.com>
> > 
> > Assuming you've run sparse over this to make sure you've caught them all,
> > and with the nit below addressed this is
> > 
> > Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> 
> Indeed, re-running sparse again found a few conversions of ioread* I
> missed as well as moving the force casting out of validate_vbt() to
> find_vbt().
> 
> > Feel free to pull v2 into whatever tree you think it's suitable for (but
> > you can also resend and I'll pick it up).
> 
> Please pick up v2 below.

Queued for -next, thanks for the patch. Aside: Attached or separate mail
seems easier, somehow git apply-mbox can't auto-eat this for of patch.
-Daniel

> 
> > 
> > > diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
> > > index e2ab3f6ed022..c8444d5f549f 100644
> > > --- a/drivers/gpu/drm/i915/intel_panel.c
> > > +++ b/drivers/gpu/drm/i915/intel_panel.c
> > > @@ -387,7 +387,7 @@ intel_panel_detect(struct drm_device *dev)
> > >  
> > >  	/* Assume that the BIOS does not lie through the OpRegion... */
> > >  	if (!i915.panel_ignore_lid && dev_priv->opregion.lid_state) {
> > > -		return ioread32(dev_priv->opregion.lid_state) & 0x1 ?
> > > +		return *(dev_priv->opregion.lid_state) & 0x1 ?
> > 
> > () are redundant now here.
> 
> Yup, fixed.
> 
> 8<----
> Subject: i915: switch from acpi_os_ioremap to memremap
> 
> From: Dan Williams <dan.j.williams@intel.com>
> 
> i915 expects the OpRegion to be cached (i.e. not __iomem), so explicitly
> map it with memremap rather than the implied cache setting of
> acpi_os_ioremap().
> 
> Cc: Daniel Vetter <daniel.vetter@intel.com>
> Cc: Jani Nikula <jani.nikula@linux.intel.com>
> Cc: intel-gfx@lists.freedesktop.org
> Cc: David Airlie <airlied@linux.ie>
> Cc: dri-devel@lists.freedesktop.org
> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
> ---
>  drivers/gpu/drm/i915/i915_debugfs.c   |    2 -
>  drivers/gpu/drm/i915/i915_drv.h       |   12 ++---
>  drivers/gpu/drm/i915/intel_bios.c     |   25 +++++-----
>  drivers/gpu/drm/i915/intel_opregion.c |   83 ++++++++++++++++-----------------
>  drivers/gpu/drm/i915/intel_panel.c    |    2 -
>  5 files changed, 62 insertions(+), 62 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> index e3ec9049081f..15989cc16e92 100644
> --- a/drivers/gpu/drm/i915/i915_debugfs.c
> +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> @@ -1849,7 +1849,7 @@ static int i915_opregion(struct seq_file *m, void *unused)
>  		goto out;
>  
>  	if (opregion->header) {
> -		memcpy_fromio(data, opregion->header, OPREGION_SIZE);
> +		memcpy(data, opregion->header, OPREGION_SIZE);
>  		seq_write(m, data, OPREGION_SIZE);
>  	}
>  
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index e1db8de52851..d8684634a31d 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -444,14 +444,14 @@ struct opregion_swsci;
>  struct opregion_asle;
>  
>  struct intel_opregion {
> -	struct opregion_header __iomem *header;
> -	struct opregion_acpi __iomem *acpi;
> -	struct opregion_swsci __iomem *swsci;
> +	struct opregion_header *header;
> +	struct opregion_acpi *acpi;
> +	struct opregion_swsci *swsci;
>  	u32 swsci_gbda_sub_functions;
>  	u32 swsci_sbcb_sub_functions;
> -	struct opregion_asle __iomem *asle;
> -	void __iomem *vbt;
> -	u32 __iomem *lid_state;
> +	struct opregion_asle *asle;
> +	void *vbt;
> +	u32 *lid_state;
>  	struct work_struct asle_work;
>  };
>  #define OPREGION_SIZE            (8*1024)
> diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
> index c19e669ffe50..f6762a5faee8 100644
> --- a/drivers/gpu/drm/i915/intel_bios.c
> +++ b/drivers/gpu/drm/i915/intel_bios.c
> @@ -1231,20 +1231,13 @@ static const struct dmi_system_id intel_no_opregion_vbt[] = {
>  	{ }
>  };
>  
> -static const struct bdb_header *validate_vbt(const void __iomem *_base,
> +static const struct bdb_header *validate_vbt(const void *base,
>  					     size_t size,
> -					     const void __iomem *_vbt,
> +					     const void *_vbt,
>  					     const char *source)
>  {
> -	/*
> -	 * This is the one place where we explicitly discard the address space
> -	 * (__iomem) of the BIOS/VBT. (And this will cause a sparse complaint.)
> -	 * From now on everything is based on 'base', and treated as regular
> -	 * memory.
> -	 */
> -	const void *base = (const void *) _base;
> -	size_t offset = _vbt - _base;
> -	const struct vbt_header *vbt = base + offset;
> +	size_t offset = _vbt - base;
> +	const struct vbt_header *vbt = _vbt;
>  	const struct bdb_header *bdb;
>  
>  	if (offset + sizeof(struct vbt_header) > size) {
> @@ -1282,7 +1275,15 @@ static const struct bdb_header *find_vbt(void __iomem *bios, size_t size)
>  	/* Scour memory looking for the VBT signature. */
>  	for (i = 0; i + 4 < size; i++) {
>  		if (ioread32(bios + i) == *((const u32 *) "$VBT")) {
> -			bdb = validate_vbt(bios, size, bios + i, "PCI ROM");
> +			/*
> +			 * This is the one place where we explicitly discard the
> +			 * address space (__iomem) of the BIOS/VBT. From now on
> +			 * everything is based on 'base', and treated as regular
> +			 * memory.
> +			 */
> +			void *_bios = (void __force *) bios;
> +
> +			bdb = validate_vbt(_bios, size, _bios + i, "PCI ROM");
>  			break;
>  		}
>  	}
> diff --git a/drivers/gpu/drm/i915/intel_opregion.c b/drivers/gpu/drm/i915/intel_opregion.c
> index cb1c65739425..41d44a5ef626 100644
> --- a/drivers/gpu/drm/i915/intel_opregion.c
> +++ b/drivers/gpu/drm/i915/intel_opregion.c
> @@ -239,7 +239,7 @@ struct opregion_asle {
>  static int swsci(struct drm_device *dev, u32 function, u32 parm, u32 *parm_out)
>  {
>  	struct drm_i915_private *dev_priv = dev->dev_private;
> -	struct opregion_swsci __iomem *swsci = dev_priv->opregion.swsci;
> +	struct opregion_swsci *swsci = dev_priv->opregion.swsci;
>  	u32 main_function, sub_function, scic;
>  	u16 pci_swsci;
>  	u32 dslp;
> @@ -264,7 +264,7 @@ static int swsci(struct drm_device *dev, u32 function, u32 parm, u32 *parm_out)
>  	}
>  
>  	/* Driver sleep timeout in ms. */
> -	dslp = ioread32(&swsci->dslp);
> +	dslp = swsci->dslp;
>  	if (!dslp) {
>  		/* The spec says 2ms should be the default, but it's too small
>  		 * for some machines. */
> @@ -277,7 +277,7 @@ static int swsci(struct drm_device *dev, u32 function, u32 parm, u32 *parm_out)
>  	}
>  
>  	/* The spec tells us to do this, but we are the only user... */
> -	scic = ioread32(&swsci->scic);
> +	scic = swsci->scic;
>  	if (scic & SWSCI_SCIC_INDICATOR) {
>  		DRM_DEBUG_DRIVER("SWSCI request already in progress\n");
>  		return -EBUSY;
> @@ -285,8 +285,8 @@ static int swsci(struct drm_device *dev, u32 function, u32 parm, u32 *parm_out)
>  
>  	scic = function | SWSCI_SCIC_INDICATOR;
>  
> -	iowrite32(parm, &swsci->parm);
> -	iowrite32(scic, &swsci->scic);
> +	swsci->parm = parm;
> +	swsci->scic = scic;
>  
>  	/* Ensure SCI event is selected and event trigger is cleared. */
>  	pci_read_config_word(dev->pdev, PCI_SWSCI, &pci_swsci);
> @@ -301,7 +301,7 @@ static int swsci(struct drm_device *dev, u32 function, u32 parm, u32 *parm_out)
>  	pci_write_config_word(dev->pdev, PCI_SWSCI, pci_swsci);
>  
>  	/* Poll for the result. */
> -#define C (((scic = ioread32(&swsci->scic)) & SWSCI_SCIC_INDICATOR) == 0)
> +#define C (((scic = swsci->scic) & SWSCI_SCIC_INDICATOR) == 0)
>  	if (wait_for(C, dslp)) {
>  		DRM_DEBUG_DRIVER("SWSCI request timed out\n");
>  		return -ETIMEDOUT;
> @@ -317,7 +317,7 @@ static int swsci(struct drm_device *dev, u32 function, u32 parm, u32 *parm_out)
>  	}
>  
>  	if (parm_out)
> -		*parm_out = ioread32(&swsci->parm);
> +		*parm_out = swsci->parm;
>  
>  	return 0;
>  
> @@ -407,7 +407,7 @@ static u32 asle_set_backlight(struct drm_device *dev, u32 bclp)
>  {
>  	struct drm_i915_private *dev_priv = dev->dev_private;
>  	struct intel_connector *intel_connector;
> -	struct opregion_asle __iomem *asle = dev_priv->opregion.asle;
> +	struct opregion_asle *asle = dev_priv->opregion.asle;
>  
>  	DRM_DEBUG_DRIVER("bclp = 0x%08x\n", bclp);
>  
> @@ -432,7 +432,7 @@ static u32 asle_set_backlight(struct drm_device *dev, u32 bclp)
>  	DRM_DEBUG_KMS("updating opregion backlight %d/255\n", bclp);
>  	list_for_each_entry(intel_connector, &dev->mode_config.connector_list, base.head)
>  		intel_panel_set_backlight_acpi(intel_connector, bclp, 255);
> -	iowrite32(DIV_ROUND_UP(bclp * 100, 255) | ASLE_CBLV_VALID, &asle->cblv);
> +	asle->cblv = DIV_ROUND_UP(bclp * 100, 255) | ASLE_CBLV_VALID;
>  
>  	drm_modeset_unlock(&dev->mode_config.connection_mutex);
>  
> @@ -519,14 +519,14 @@ static void asle_work(struct work_struct *work)
>  	struct drm_i915_private *dev_priv =
>  		container_of(opregion, struct drm_i915_private, opregion);
>  	struct drm_device *dev = dev_priv->dev;
> -	struct opregion_asle __iomem *asle = dev_priv->opregion.asle;
> +	struct opregion_asle *asle = dev_priv->opregion.asle;
>  	u32 aslc_stat = 0;
>  	u32 aslc_req;
>  
>  	if (!asle)
>  		return;
>  
> -	aslc_req = ioread32(&asle->aslc);
> +	aslc_req = asle->aslc;
>  
>  	if (!(aslc_req & ASLC_REQ_MSK)) {
>  		DRM_DEBUG_DRIVER("No request on ASLC interrupt 0x%08x\n",
> @@ -535,34 +535,34 @@ static void asle_work(struct work_struct *work)
>  	}
>  
>  	if (aslc_req & ASLC_SET_ALS_ILLUM)
> -		aslc_stat |= asle_set_als_illum(dev, ioread32(&asle->alsi));
> +		aslc_stat |= asle_set_als_illum(dev, asle->alsi);
>  
>  	if (aslc_req & ASLC_SET_BACKLIGHT)
> -		aslc_stat |= asle_set_backlight(dev, ioread32(&asle->bclp));
> +		aslc_stat |= asle_set_backlight(dev, asle->bclp);
>  
>  	if (aslc_req & ASLC_SET_PFIT)
> -		aslc_stat |= asle_set_pfit(dev, ioread32(&asle->pfit));
> +		aslc_stat |= asle_set_pfit(dev, asle->pfit);
>  
>  	if (aslc_req & ASLC_SET_PWM_FREQ)
> -		aslc_stat |= asle_set_pwm_freq(dev, ioread32(&asle->pfmb));
> +		aslc_stat |= asle_set_pwm_freq(dev, asle->pfmb);
>  
>  	if (aslc_req & ASLC_SUPPORTED_ROTATION_ANGLES)
>  		aslc_stat |= asle_set_supported_rotation_angles(dev,
> -							ioread32(&asle->srot));
> +							asle->srot);
>  
>  	if (aslc_req & ASLC_BUTTON_ARRAY)
> -		aslc_stat |= asle_set_button_array(dev, ioread32(&asle->iuer));
> +		aslc_stat |= asle_set_button_array(dev, asle->iuer);
>  
>  	if (aslc_req & ASLC_CONVERTIBLE_INDICATOR)
> -		aslc_stat |= asle_set_convertible(dev, ioread32(&asle->iuer));
> +		aslc_stat |= asle_set_convertible(dev, asle->iuer);
>  
>  	if (aslc_req & ASLC_DOCKING_INDICATOR)
> -		aslc_stat |= asle_set_docking(dev, ioread32(&asle->iuer));
> +		aslc_stat |= asle_set_docking(dev, asle->iuer);
>  
>  	if (aslc_req & ASLC_ISCT_STATE_CHANGE)
>  		aslc_stat |= asle_isct_state(dev);
>  
> -	iowrite32(aslc_stat, &asle->aslc);
> +	asle->aslc = aslc_stat;
>  }
>  
>  void intel_opregion_asle_intr(struct drm_device *dev)
> @@ -587,8 +587,8 @@ static int intel_opregion_video_event(struct notifier_block *nb,
>  	   Linux, these are handled by the dock, button and video drivers.
>  	*/
>  
> -	struct opregion_acpi __iomem *acpi;
>  	struct acpi_bus_event *event = data;
> +	struct opregion_acpi *acpi;
>  	int ret = NOTIFY_OK;
>  
>  	if (strcmp(event->device_class, ACPI_VIDEO_CLASS) != 0)
> @@ -599,11 +599,10 @@ static int intel_opregion_video_event(struct notifier_block *nb,
>  
>  	acpi = system_opregion->acpi;
>  
> -	if (event->type == 0x80 &&
> -	    (ioread32(&acpi->cevt) & 1) == 0)
> +	if (event->type == 0x80 && ((acpi->cevt & 1) == 0))
>  		ret = NOTIFY_BAD;
>  
> -	iowrite32(0, &acpi->csts);
> +	acpi->csts = 0;
>  
>  	return ret;
>  }
> @@ -623,14 +622,14 @@ static u32 get_did(struct intel_opregion *opregion, int i)
>  	u32 did;
>  
>  	if (i < ARRAY_SIZE(opregion->acpi->didl)) {
> -		did = ioread32(&opregion->acpi->didl[i]);
> +		did = opregion->acpi->didl[i];
>  	} else {
>  		i -= ARRAY_SIZE(opregion->acpi->didl);
>  
>  		if (WARN_ON(i >= ARRAY_SIZE(opregion->acpi->did2)))
>  			return 0;
>  
> -		did = ioread32(&opregion->acpi->did2[i]);
> +		did = opregion->acpi->did2[i];
>  	}
>  
>  	return did;
> @@ -639,14 +638,14 @@ static u32 get_did(struct intel_opregion *opregion, int i)
>  static void set_did(struct intel_opregion *opregion, int i, u32 val)
>  {
>  	if (i < ARRAY_SIZE(opregion->acpi->didl)) {
> -		iowrite32(val, &opregion->acpi->didl[i]);
> +		opregion->acpi->didl[i] = val;
>  	} else {
>  		i -= ARRAY_SIZE(opregion->acpi->didl);
>  
>  		if (WARN_ON(i >= ARRAY_SIZE(opregion->acpi->did2)))
>  			return;
>  
> -		iowrite32(val, &opregion->acpi->did2[i]);
> +		opregion->acpi->did2[i] = val;
>  	}
>  }
>  
> @@ -768,7 +767,7 @@ static void intel_setup_cadls(struct drm_device *dev)
>  	 * there are less than eight devices. */
>  	do {
>  		disp_id = get_did(opregion, i);
> -		iowrite32(disp_id, &opregion->acpi->cadl[i]);
> +		opregion->acpi->cadl[i] = disp_id;
>  	} while (++i < 8 && disp_id != 0);
>  }
>  
> @@ -787,16 +786,16 @@ void intel_opregion_init(struct drm_device *dev)
>  		/* Notify BIOS we are ready to handle ACPI video ext notifs.
>  		 * Right now, all the events are handled by the ACPI video module.
>  		 * We don't actually need to do anything with them. */
> -		iowrite32(0, &opregion->acpi->csts);
> -		iowrite32(1, &opregion->acpi->drdy);
> +		opregion->acpi->csts = 0;
> +		opregion->acpi->drdy = 1;
>  
>  		system_opregion = opregion;
>  		register_acpi_notifier(&intel_opregion_notifier);
>  	}
>  
>  	if (opregion->asle) {
> -		iowrite32(ASLE_TCHE_BLC_EN, &opregion->asle->tche);
> -		iowrite32(ASLE_ARDY_READY, &opregion->asle->ardy);
> +		opregion->asle->tche = ASLE_TCHE_BLC_EN;
> +		opregion->asle->ardy = ASLE_ARDY_READY;
>  	}
>  }
>  
> @@ -809,19 +808,19 @@ void intel_opregion_fini(struct drm_device *dev)
>  		return;
>  
>  	if (opregion->asle)
> -		iowrite32(ASLE_ARDY_NOT_READY, &opregion->asle->ardy);
> +		opregion->asle->ardy = ASLE_ARDY_NOT_READY;
>  
>  	cancel_work_sync(&dev_priv->opregion.asle_work);
>  
>  	if (opregion->acpi) {
> -		iowrite32(0, &opregion->acpi->drdy);
> +		opregion->acpi->drdy = 0;
>  
>  		system_opregion = NULL;
>  		unregister_acpi_notifier(&intel_opregion_notifier);
>  	}
>  
>  	/* just clear all opregion memory pointers now */
> -	iounmap(opregion->header);
> +	memunmap(opregion->header);
>  	opregion->header = NULL;
>  	opregion->acpi = NULL;
>  	opregion->swsci = NULL;
> @@ -894,10 +893,10 @@ int intel_opregion_setup(struct drm_device *dev)
>  {
>  	struct drm_i915_private *dev_priv = dev->dev_private;
>  	struct intel_opregion *opregion = &dev_priv->opregion;
> -	void __iomem *base;
>  	u32 asls, mboxes;
>  	char buf[sizeof(OPREGION_SIGNATURE)];
>  	int err = 0;
> +	void *base;
>  
>  	BUILD_BUG_ON(sizeof(struct opregion_header) != 0x100);
>  	BUILD_BUG_ON(sizeof(struct opregion_acpi) != 0x100);
> @@ -915,11 +914,11 @@ int intel_opregion_setup(struct drm_device *dev)
>  	INIT_WORK(&opregion->asle_work, asle_work);
>  #endif
>  
> -	base = acpi_os_ioremap(asls, OPREGION_SIZE);
> +	base = memremap(asls, OPREGION_SIZE, MEMREMAP_WB);
>  	if (!base)
>  		return -ENOMEM;
>  
> -	memcpy_fromio(buf, base, sizeof(buf));
> +	memcpy(buf, base, sizeof(buf));
>  
>  	if (memcmp(buf, OPREGION_SIGNATURE, 16)) {
>  		DRM_DEBUG_DRIVER("opregion signature mismatch\n");
> @@ -931,7 +930,7 @@ int intel_opregion_setup(struct drm_device *dev)
>  
>  	opregion->lid_state = base + ACPI_CLID;
>  
> -	mboxes = ioread32(&opregion->header->mboxes);
> +	mboxes = opregion->header->mboxes;
>  	if (mboxes & MBOX_ACPI) {
>  		DRM_DEBUG_DRIVER("Public ACPI methods supported\n");
>  		opregion->acpi = base + OPREGION_ACPI_OFFSET;
> @@ -946,12 +945,12 @@ int intel_opregion_setup(struct drm_device *dev)
>  		DRM_DEBUG_DRIVER("ASLE supported\n");
>  		opregion->asle = base + OPREGION_ASLE_OFFSET;
>  
> -		iowrite32(ASLE_ARDY_NOT_READY, &opregion->asle->ardy);
> +		opregion->asle->ardy = ASLE_ARDY_NOT_READY;
>  	}
>  
>  	return 0;
>  
>  err_out:
> -	iounmap(base);
> +	memunmap(base);
>  	return err;
>  }
> diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
> index e2ab3f6ed022..efe5424b290c 100644
> --- a/drivers/gpu/drm/i915/intel_panel.c
> +++ b/drivers/gpu/drm/i915/intel_panel.c
> @@ -387,7 +387,7 @@ intel_panel_detect(struct drm_device *dev)
>  
>  	/* Assume that the BIOS does not lie through the OpRegion... */
>  	if (!i915.panel_ignore_lid && dev_priv->opregion.lid_state) {
> -		return ioread32(dev_priv->opregion.lid_state) & 0x1 ?
> +		return *dev_priv->opregion.lid_state & 0x1 ?
>  			connector_status_connected :
>  			connector_status_disconnected;
>  	}
> 

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1245887 — Re: [Intel-gfx] [PATCH 09/20] i915: switch from acpi_os_ioremap to memremap

FromDan Williams <dan.j.williams@intel.com>
Date2015-10-13 18:30 +0200
SubjectRe: [Intel-gfx] [PATCH 09/20] i915: switch from acpi_os_ioremap to memremap
Message-ID<qjaCB-3wU-7@gated-at.bofh.it>
In reply to#1245457
On Tue, Oct 13, 2015 at 1:24 AM, Daniel Vetter <daniel@ffwll.ch> wrote:
> On Mon, Oct 12, 2015 at 09:12:57PM +0000, Williams, Dan J wrote:
>> On Mon, 2015-10-12 at 09:01 +0200, Daniel Vetter wrote:
>> > On Fri, Oct 09, 2015 at 06:16:25PM -0400, Dan Williams wrote:
>> > > i915 expects the OpRegion to be cached (i.e. not __iomem), so explicitly
>> > > map it with memremap rather than the implied cache setting of
>> > > acpi_os_ioremap().
>> > >
>> > > Cc: Daniel Vetter <daniel.vetter@intel.com>
>> > > Cc: Jani Nikula <jani.nikula@linux.intel.com>
>> > > Cc: intel-gfx@lists.freedesktop.org
>> > > Cc: David Airlie <airlied@linux.ie>
>> > > Cc: dri-devel@lists.freedesktop.org
>> > > Signed-off-by: Dan Williams <dan.j.williams@intel.com>
>> >
>> > Assuming you've run sparse over this to make sure you've caught them all,
>> > and with the nit below addressed this is
>> >
>> > Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
>>
>> Indeed, re-running sparse again found a few conversions of ioread* I
>> missed as well as moving the force casting out of validate_vbt() to
>> find_vbt().
>>
>> > Feel free to pull v2 into whatever tree you think it's suitable for (but
>> > you can also resend and I'll pick it up).
>>
>> Please pick up v2 below.
>
> Queued for -next, thanks for the patch. Aside: Attached or separate mail
> seems easier, somehow git apply-mbox can't auto-eat this for of patch.
> -Daniel
>

"git am --scissors" should detect the "8<---" cut line.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1246362 — Re: [Intel-gfx] [PATCH 09/20] i915: switch from acpi_os_ioremap to memremap

FromDaniel Vetter <daniel@ffwll.ch>
Date2015-10-14 09:40 +0200
SubjectRe: [Intel-gfx] [PATCH 09/20] i915: switch from acpi_os_ioremap to memremap
Message-ID<qjoPf-8w0-9@gated-at.bofh.it>
In reply to#1245887
On Tue, Oct 13, 2015 at 09:24:26AM -0700, Dan Williams wrote:
> On Tue, Oct 13, 2015 at 1:24 AM, Daniel Vetter <daniel@ffwll.ch> wrote:
> > On Mon, Oct 12, 2015 at 09:12:57PM +0000, Williams, Dan J wrote:
> >> On Mon, 2015-10-12 at 09:01 +0200, Daniel Vetter wrote:
> >> > On Fri, Oct 09, 2015 at 06:16:25PM -0400, Dan Williams wrote:
> >> > > i915 expects the OpRegion to be cached (i.e. not __iomem), so explicitly
> >> > > map it with memremap rather than the implied cache setting of
> >> > > acpi_os_ioremap().
> >> > >
> >> > > Cc: Daniel Vetter <daniel.vetter@intel.com>
> >> > > Cc: Jani Nikula <jani.nikula@linux.intel.com>
> >> > > Cc: intel-gfx@lists.freedesktop.org
> >> > > Cc: David Airlie <airlied@linux.ie>
> >> > > Cc: dri-devel@lists.freedesktop.org
> >> > > Signed-off-by: Dan Williams <dan.j.williams@intel.com>
> >> >
> >> > Assuming you've run sparse over this to make sure you've caught them all,
> >> > and with the nit below addressed this is
> >> >
> >> > Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> >>
> >> Indeed, re-running sparse again found a few conversions of ioread* I
> >> missed as well as moving the force casting out of validate_vbt() to
> >> find_vbt().
> >>
> >> > Feel free to pull v2 into whatever tree you think it's suitable for (but
> >> > you can also resend and I'll pick it up).
> >>
> >> Please pick up v2 below.
> >
> > Queued for -next, thanks for the patch. Aside: Attached or separate mail
> > seems easier, somehow git apply-mbox can't auto-eat this for of patch.
> > -Daniel
> >
> 
> "git am --scissors" should detect the "8<---" cut line.

TIL, works nice indeed. Thanks for the hint.
-Daniel
-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1243702 — [PATCH 13/20] intel-iommu: switch from ioremap_cache to memremap

FromDan Williams <dan.j.williams@intel.com>
Date2015-10-10 00:30 +0200
Subject[PATCH 13/20] intel-iommu: switch from ioremap_cache to memremap
Message-ID<qhOkO-73l-15@gated-at.bofh.it>
In reply to#1243699
In preparation for deprecating ioremap_cache() convert its usage in
intel-iommu to memremap.  This also eliminates the mishandling of the
__iomem annotation in the implementation.

Cc: David Woodhouse <dwmw2@infradead.org>
Acked-by: Joerg Roedel <jroedel@suse.de>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
---
 drivers/iommu/intel-iommu.c         |   20 +++++++++++---------
 drivers/iommu/intel_irq_remapping.c |    8 ++++----
 2 files changed, 15 insertions(+), 13 deletions(-)

diff --git a/drivers/iommu/intel-iommu.c b/drivers/iommu/intel-iommu.c
index 041bc1810a86..a089177db372 100644
--- a/drivers/iommu/intel-iommu.c
+++ b/drivers/iommu/intel-iommu.c
@@ -34,6 +34,7 @@
 #include <linux/mempool.h>
 #include <linux/memory.h>
 #include <linux/timer.h>
+#include <linux/io.h>
 #include <linux/iova.h>
 #include <linux/iommu.h>
 #include <linux/intel-iommu.h>
@@ -2807,18 +2808,18 @@ static void intel_iommu_init_qi(struct intel_iommu *iommu)
 }
 
 static int copy_context_table(struct intel_iommu *iommu,
-			      struct root_entry __iomem *old_re,
+			      struct root_entry *old_re,
 			      struct context_entry **tbl,
 			      int bus, bool ext)
 {
 	int tbl_idx, pos = 0, idx, devfn, ret = 0, did;
-	struct context_entry __iomem *old_ce = NULL;
 	struct context_entry *new_ce = NULL, ce;
+	struct context_entry *old_ce = NULL;
 	struct root_entry re;
 	phys_addr_t old_ce_phys;
 
 	tbl_idx = ext ? bus * 2 : bus;
-	memcpy_fromio(&re, old_re, sizeof(re));
+	memcpy(&re, old_re, sizeof(re));
 
 	for (devfn = 0; devfn < 256; devfn++) {
 		/* First calculate the correct index */
@@ -2853,7 +2854,8 @@ static int copy_context_table(struct intel_iommu *iommu,
 			}
 
 			ret = -ENOMEM;
-			old_ce = ioremap_cache(old_ce_phys, PAGE_SIZE);
+			old_ce = memremap(old_ce_phys, PAGE_SIZE,
+					MEMREMAP_WB);
 			if (!old_ce)
 				goto out;
 
@@ -2865,7 +2867,7 @@ static int copy_context_table(struct intel_iommu *iommu,
 		}
 
 		/* Now copy the context entry */
-		memcpy_fromio(&ce, old_ce + idx, sizeof(ce));
+		memcpy(&ce, old_ce + idx, sizeof(ce));
 
 		if (!__context_present(&ce))
 			continue;
@@ -2901,7 +2903,7 @@ static int copy_context_table(struct intel_iommu *iommu,
 	__iommu_flush_cache(iommu, new_ce, VTD_PAGE_SIZE);
 
 out_unmap:
-	iounmap(old_ce);
+	memunmap(old_ce);
 
 out:
 	return ret;
@@ -2909,8 +2911,8 @@ out:
 
 static int copy_translation_tables(struct intel_iommu *iommu)
 {
-	struct root_entry __iomem *old_rt;
 	struct context_entry **ctxt_tbls;
+	struct root_entry *old_rt;
 	phys_addr_t old_rt_phys;
 	int ctxt_table_entries;
 	unsigned long flags;
@@ -2935,7 +2937,7 @@ static int copy_translation_tables(struct intel_iommu *iommu)
 	if (!old_rt_phys)
 		return -EINVAL;
 
-	old_rt = ioremap_cache(old_rt_phys, PAGE_SIZE);
+	old_rt = memremap(old_rt_phys, PAGE_SIZE, MEMREMAP_WB);
 	if (!old_rt)
 		return -ENOMEM;
 
@@ -2984,7 +2986,7 @@ static int copy_translation_tables(struct intel_iommu *iommu)
 	ret = 0;
 
 out_unmap:
-	iounmap(old_rt);
+	memunmap(old_rt);
 
 	return ret;
 }
diff --git a/drivers/iommu/intel_irq_remapping.c b/drivers/iommu/intel_irq_remapping.c
index 9ec4e0d94ffd..bdc52cc6ed23 100644
--- a/drivers/iommu/intel_irq_remapping.c
+++ b/drivers/iommu/intel_irq_remapping.c
@@ -384,7 +384,7 @@ static int set_msi_sid(struct irte *irte, struct pci_dev *dev)
 
 static int iommu_load_old_irte(struct intel_iommu *iommu)
 {
-	struct irte __iomem *old_ir_table;
+	struct irte *old_ir_table;
 	phys_addr_t irt_phys;
 	unsigned int i;
 	size_t size;
@@ -408,12 +408,12 @@ static int iommu_load_old_irte(struct intel_iommu *iommu)
 	size     = INTR_REMAP_TABLE_ENTRIES*sizeof(struct irte);
 
 	/* Map the old IR table */
-	old_ir_table = ioremap_cache(irt_phys, size);
+	old_ir_table = memremap(irt_phys, size, MEMREMAP_WB);
 	if (!old_ir_table)
 		return -ENOMEM;
 
 	/* Copy data over */
-	memcpy_fromio(iommu->ir_table->base, old_ir_table, size);
+	memcpy(iommu->ir_table->base, old_ir_table, size);
 
 	__iommu_flush_cache(iommu, iommu->ir_table->base, size);
 
@@ -426,7 +426,7 @@ static int iommu_load_old_irte(struct intel_iommu *iommu)
 			bitmap_set(iommu->ir_table->bitmap, i, 1);
 	}
 
-	iounmap(old_ir_table);
+	memunmap(old_ir_table);
 
 	return 0;
 }

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1245177 — Re: [PATCH 13/20] intel-iommu: switch from ioremap_cache to memremap

FromJoerg Roedel <jroedel@suse.de>
Date2015-10-13 00:00 +0200
SubjectRe: [PATCH 13/20] intel-iommu: switch from ioremap_cache to memremap
Message-ID<qiTiq-3jf-9@gated-at.bofh.it>
In reply to#1243702
Hi Dan,

On Fri, Oct 09, 2015 at 06:16:46PM -0400, Dan Williams wrote:
> In preparation for deprecating ioremap_cache() convert its usage in
> intel-iommu to memremap.  This also eliminates the mishandling of the
> __iomem annotation in the implementation.

I appreciate the change, but in the cover letter you write the API is
only implemented for x86 so far? The VT-d driver is also used on ia64,
will it still work there with this patch?


	Joerg

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1245181 — Re: [PATCH 13/20] intel-iommu: switch from ioremap_cache to memremap

FromDan Williams <dan.j.williams@intel.com>
Date2015-10-13 00:10 +0200
SubjectRe: [PATCH 13/20] intel-iommu: switch from ioremap_cache to memremap
Message-ID<qiTs5-3JD-3@gated-at.bofh.it>
In reply to#1245177
On Mon, Oct 12, 2015 at 2:58 PM, Joerg Roedel <jroedel@suse.de> wrote:
> Hi Dan,
>
> On Fri, Oct 09, 2015 at 06:16:46PM -0400, Dan Williams wrote:
>> In preparation for deprecating ioremap_cache() convert its usage in
>> intel-iommu to memremap.  This also eliminates the mishandling of the
>> __iomem annotation in the implementation.
>
> I appreciate the change, but in the cover letter you write the API is
> only implemented for x86 so far? The VT-d driver is also used on ia64,
> will it still work there with this patch?
>
>

I did convert ia64 in the series [1]  but you're right this patch
can't go in independently of that conversion.  If you ack this one
I'll carry them in order.

[1]: https://lkml.org/lkml/2015/10/9/702
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1245195 — Re: [PATCH 13/20] intel-iommu: switch from ioremap_cache to memremap

FromDan Williams <dan.j.williams@intel.com>
Date2015-10-13 00:30 +0200
SubjectRe: [PATCH 13/20] intel-iommu: switch from ioremap_cache to memremap
Message-ID<qiTLs-45V-27@gated-at.bofh.it>
In reply to#1245181
On Mon, Oct 12, 2015 at 3:05 PM, Dan Williams <dan.j.williams@intel.com> wrote:
> On Mon, Oct 12, 2015 at 2:58 PM, Joerg Roedel <jroedel@suse.de> wrote:
>> Hi Dan,
>>
>> On Fri, Oct 09, 2015 at 06:16:46PM -0400, Dan Williams wrote:
>>> In preparation for deprecating ioremap_cache() convert its usage in
>>> intel-iommu to memremap.  This also eliminates the mishandling of the
>>> __iomem annotation in the implementation.
>>
>> I appreciate the change, but in the cover letter you write the API is
>> only implemented for x86 so far? The VT-d driver is also used on ia64,
>> will it still work there with this patch?
>>
>>
>
> I did convert ia64 in the series [1]  but you're right this patch
> can't go in independently of that conversion.  If you ack this one
> I'll carry them in order.
>
> [1]: https://lkml.org/lkml/2015/10/9/702

Ah sorry, got ahead of myself ;-p.  You can safely take this patch
through your tree.  The ia64 patch can happen asynchronously because
kernel/memremap.c has:

__weak void *arch_memremap(resource_size_t offset, size_t size,
unsigned long flags)

...as a temporary fallback until the conversion is complete.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1246739 — Re: [PATCH 13/20] intel-iommu: switch from ioremap_cache to memremap

FromJoerg Roedel <jroedel@suse.de>
Date2015-10-14 15:30 +0200
SubjectRe: [PATCH 13/20] intel-iommu: switch from ioremap_cache to memremap
Message-ID<qjuhY-8cu-21@gated-at.bofh.it>
In reply to#1245195
On Mon, Oct 12, 2015 at 03:19:24PM -0700, Dan Williams wrote:
> On Mon, Oct 12, 2015 at 3:05 PM, Dan Williams <dan.j.williams@intel.com> wrote:
> > On Mon, Oct 12, 2015 at 2:58 PM, Joerg Roedel <jroedel@suse.de> wrote:
> >> Hi Dan,
> >>
> >> On Fri, Oct 09, 2015 at 06:16:46PM -0400, Dan Williams wrote:
> >>> In preparation for deprecating ioremap_cache() convert its usage in
> >>> intel-iommu to memremap.  This also eliminates the mishandling of the
> >>> __iomem annotation in the implementation.
> >>
> >> I appreciate the change, but in the cover letter you write the API is
> >> only implemented for x86 so far? The VT-d driver is also used on ia64,
> >> will it still work there with this patch?
> >>
> >>
> >
> > I did convert ia64 in the series [1]  but you're right this patch
> > can't go in independently of that conversion.  If you ack this one
> > I'll carry them in order.
> >
> > [1]: https://lkml.org/lkml/2015/10/9/702
> 
> Ah sorry, got ahead of myself ;-p.  You can safely take this patch
> through your tree.  The ia64 patch can happen asynchronously because
> kernel/memremap.c has:
> 
> __weak void *arch_memremap(resource_size_t offset, size_t size,
> unsigned long flags)
> 
> ...as a temporary fallback until the conversion is complete.

Okay, thanks, applied.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1243704 — [PATCH 17/20] arch: kill ioremap_cached()

FromDan Williams <dan.j.williams@intel.com>
Date2015-10-10 00:30 +0200
Subject[PATCH 17/20] arch: kill ioremap_cached()
Message-ID<qhOkO-73l-19@gated-at.bofh.it>
In reply to#1243699
Nothing calls this helper, and now that ioremap_cache() is being
deprecated these can also be removed.

Signed-off-by: Dan Williams <dan.j.williams@intel.com>
---
 arch/arm/mm/mmu.c               |    2 +-
 arch/metag/include/asm/io.h     |    3 ---
 arch/unicore32/include/asm/io.h |    4 +---
 arch/unicore32/mm/ioremap.c     |    8 --------
 4 files changed, 2 insertions(+), 15 deletions(-)

diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c
index 7cd15143a507..da3ce68a89b3 100644
--- a/arch/arm/mm/mmu.c
+++ b/arch/arm/mm/mmu.c
@@ -259,7 +259,7 @@ static struct mem_type mem_types[] = {
 		.prot_sect	= PROT_SECT_DEVICE,
 		.domain		= DOMAIN_IO,
 	},
-	[MT_DEVICE_CACHED] = {	  /* ioremap_cached */
+	[MT_DEVICE_CACHED] = {	  /* memremap(MEMREMAP_WB) */
 		.prot_pte	= PROT_PTE_DEVICE | L_PTE_MT_DEV_CACHED,
 		.prot_l1	= PMD_TYPE_TABLE,
 		.prot_sect	= PROT_SECT_DEVICE | PMD_SECT_WB,
diff --git a/arch/metag/include/asm/io.h b/arch/metag/include/asm/io.h
index 9890f21eadbe..5432949e627e 100644
--- a/arch/metag/include/asm/io.h
+++ b/arch/metag/include/asm/io.h
@@ -154,9 +154,6 @@ extern void __iounmap(void __iomem *addr);
 #define ioremap_nocache(offset, size)           \
 	__ioremap((offset), (size), 0)
 
-#define ioremap_cached(offset, size)            \
-	__ioremap((offset), (size), _PAGE_CACHEABLE)
-
 #define ioremap_wc(offset, size)                \
 	__ioremap((offset), (size), _PAGE_WR_COMBINE)
 
diff --git a/arch/unicore32/include/asm/io.h b/arch/unicore32/include/asm/io.h
index cb1d8fd2b16b..1eea482b3cb9 100644
--- a/arch/unicore32/include/asm/io.h
+++ b/arch/unicore32/include/asm/io.h
@@ -21,10 +21,9 @@
 #include <asm-generic/io.h>
 
 /*
- * __uc32_ioremap and __uc32_ioremap_cached takes CPU physical address.
+ * __uc32_ioremap takes CPU physical address.
  */
 extern void __iomem *__uc32_ioremap(unsigned long, size_t);
-extern void __iomem *__uc32_ioremap_cached(unsigned long, size_t);
 extern void __uc32_iounmap(volatile void __iomem *addr);
 
 /*
@@ -35,7 +34,6 @@ extern void __uc32_iounmap(volatile void __iomem *addr);
  *
  */
 #define ioremap(cookie, size)		__uc32_ioremap(cookie, size)
-#define ioremap_cached(cookie, size)	__uc32_ioremap_cached(cookie, size)
 #define ioremap_nocache(cookie, size)	__uc32_ioremap(cookie, size)
 #define iounmap(cookie)			__uc32_iounmap(cookie)
 
diff --git a/arch/unicore32/mm/ioremap.c b/arch/unicore32/mm/ioremap.c
index bf012b2b71a9..f9b6d918de6f 100644
--- a/arch/unicore32/mm/ioremap.c
+++ b/arch/unicore32/mm/ioremap.c
@@ -224,14 +224,6 @@ __uc32_ioremap(unsigned long phys_addr, size_t size)
 }
 EXPORT_SYMBOL(__uc32_ioremap);
 
-void __iomem *
-__uc32_ioremap_cached(unsigned long phys_addr, size_t size)
-{
-	return __uc32_ioremap_caller(phys_addr, size, MT_DEVICE_CACHED,
-			__builtin_return_address(0));
-}
-EXPORT_SYMBOL(__uc32_ioremap_cached);
-
 void __uc32_iounmap(volatile void __iomem *io_addr)
 {
 	void *addr = (void *)(PAGE_MASK & (unsigned long)io_addr);

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1243705 — [PATCH 14/20] pxa2xx-flash: switch from ioremap_cache to memremap

FromDan Williams <dan.j.williams@intel.com>
Date2015-10-10 00:30 +0200
Subject[PATCH 14/20] pxa2xx-flash: switch from ioremap_cache to memremap
Message-ID<qhOkO-73l-13@gated-at.bofh.it>
In reply to#1243699
In preparation for deprecating ioremap_cache() convert its usage in
pxa2xx-flash to memremap.

Cc: David Woodhouse <dwmw2@infradead.org>
Cc: Brian Norris <computersforpeace@gmail.com>
[brian: also convert iounmap to memunmap]
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
---
 drivers/mtd/maps/pxa2xx-flash.c |    6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/mtd/maps/pxa2xx-flash.c b/drivers/mtd/maps/pxa2xx-flash.c
index 12fa75df5008..5ff6cc5b4844 100644
--- a/drivers/mtd/maps/pxa2xx-flash.c
+++ b/drivers/mtd/maps/pxa2xx-flash.c
@@ -71,8 +71,8 @@ static int pxa2xx_flash_probe(struct platform_device *pdev)
 		       info->map.name);
 		return -ENOMEM;
 	}
-	info->map.cached =
-		ioremap_cache(info->map.phys, info->map.size);
+	info->map.cached = memremap(info->map.phys, info->map.size,
+			MEMREMAP_WB);
 	if (!info->map.cached)
 		printk(KERN_WARNING "Failed to ioremap cached %s\n",
 		       info->map.name);
@@ -111,7 +111,7 @@ static int pxa2xx_flash_remove(struct platform_device *dev)
 	map_destroy(info->mtd);
 	iounmap(info->map.virt);
 	if (info->map.cached)
-		iounmap(info->map.cached);
+		memunmap(info->map.cached);
 	kfree(info);
 	return 0;
 }

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1244966 — Re: [PATCH 14/20] pxa2xx-flash: switch from ioremap_cache to memremap

FromBrian Norris <computersforpeace@gmail.com>
Date2015-10-12 20:00 +0200
SubjectRe: [PATCH 14/20] pxa2xx-flash: switch from ioremap_cache to memremap
Message-ID<qiPyb-6fF-25@gated-at.bofh.it>
In reply to#1243705
You missed linux-mtd again. Please use scripts/get_maintainer.pl next
time to at least get the relevant mailing list(s). (The individual CC's
are not always necessary, but the subsystem lists definitely are.)

Brian

On Fri, Oct 09, 2015 at 06:16:51PM -0400, Dan Williams wrote:
> In preparation for deprecating ioremap_cache() convert its usage in
> pxa2xx-flash to memremap.
> 
> Cc: David Woodhouse <dwmw2@infradead.org>
> Cc: Brian Norris <computersforpeace@gmail.com>
> [brian: also convert iounmap to memunmap]
> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
> ---
>  drivers/mtd/maps/pxa2xx-flash.c |    6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/drivers/mtd/maps/pxa2xx-flash.c b/drivers/mtd/maps/pxa2xx-flash.c
> index 12fa75df5008..5ff6cc5b4844 100644
> --- a/drivers/mtd/maps/pxa2xx-flash.c
> +++ b/drivers/mtd/maps/pxa2xx-flash.c
> @@ -71,8 +71,8 @@ static int pxa2xx_flash_probe(struct platform_device *pdev)
>  		       info->map.name);
>  		return -ENOMEM;
>  	}
> -	info->map.cached =
> -		ioremap_cache(info->map.phys, info->map.size);
> +	info->map.cached = memremap(info->map.phys, info->map.size,
> +			MEMREMAP_WB);
>  	if (!info->map.cached)
>  		printk(KERN_WARNING "Failed to ioremap cached %s\n",
>  		       info->map.name);
> @@ -111,7 +111,7 @@ static int pxa2xx_flash_remove(struct platform_device *dev)
>  	map_destroy(info->mtd);
>  	iounmap(info->map.virt);
>  	if (info->map.cached)
> -		iounmap(info->map.cached);
> +		memunmap(info->map.cached);
>  	kfree(info);
>  	return 0;
>  }
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1245113 — Re: [PATCH 14/20] pxa2xx-flash: switch from ioremap_cache to memremap

FromDan Williams <dan.j.williams@intel.com>
Date2015-10-12 22:40 +0200
SubjectRe: [PATCH 14/20] pxa2xx-flash: switch from ioremap_cache to memremap
Message-ID<qiS2Z-1Am-5@gated-at.bofh.it>
In reply to#1244966
On Mon, Oct 12, 2015 at 1:31 PM, Brian Norris
<computersforpeace@gmail.com> wrote:
> On Mon, Oct 12, 2015 at 10:58:03AM -0700, Brian Norris wrote:
>> You missed linux-mtd again. Please use scripts/get_maintainer.pl next
>> time to at least get the relevant mailing list(s). (The individual CC's
>> are not always necessary, but the subsystem lists definitely are.)
>
> Anyway, pushed to l2-mtd.git.
>

Thanks Brian, I'll watch out for that next time.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1245114 — Re: [PATCH 14/20] pxa2xx-flash: switch from ioremap_cache to memremap

FromBrian Norris <computersforpeace@gmail.com>
Date2015-10-12 22:40 +0200
SubjectRe: [PATCH 14/20] pxa2xx-flash: switch from ioremap_cache to memremap
Message-ID<qiS2Z-1Am-7@gated-at.bofh.it>
In reply to#1244966
On Mon, Oct 12, 2015 at 10:58:03AM -0700, Brian Norris wrote:
> You missed linux-mtd again. Please use scripts/get_maintainer.pl next
> time to at least get the relevant mailing list(s). (The individual CC's
> are not always necessary, but the subsystem lists definitely are.)

Anyway, pushed to l2-mtd.git.

Brian

> On Fri, Oct 09, 2015 at 06:16:51PM -0400, Dan Williams wrote:
> > In preparation for deprecating ioremap_cache() convert its usage in
> > pxa2xx-flash to memremap.
> > 
> > Cc: David Woodhouse <dwmw2@infradead.org>
> > Cc: Brian Norris <computersforpeace@gmail.com>
> > [brian: also convert iounmap to memunmap]
> > Signed-off-by: Dan Williams <dan.j.williams@intel.com>
> > ---
> >  drivers/mtd/maps/pxa2xx-flash.c |    6 +++---
> >  1 file changed, 3 insertions(+), 3 deletions(-)
> > 
> > diff --git a/drivers/mtd/maps/pxa2xx-flash.c b/drivers/mtd/maps/pxa2xx-flash.c
> > index 12fa75df5008..5ff6cc5b4844 100644
> > --- a/drivers/mtd/maps/pxa2xx-flash.c
> > +++ b/drivers/mtd/maps/pxa2xx-flash.c
> > @@ -71,8 +71,8 @@ static int pxa2xx_flash_probe(struct platform_device *pdev)
> >  		       info->map.name);
> >  		return -ENOMEM;
> >  	}
> > -	info->map.cached =
> > -		ioremap_cache(info->map.phys, info->map.size);
> > +	info->map.cached = memremap(info->map.phys, info->map.size,
> > +			MEMREMAP_WB);
> >  	if (!info->map.cached)
> >  		printk(KERN_WARNING "Failed to ioremap cached %s\n",
> >  		       info->map.name);
> > @@ -111,7 +111,7 @@ static int pxa2xx_flash_remove(struct platform_device *dev)
> >  	map_destroy(info->mtd);
> >  	iounmap(info->map.virt);
> >  	if (info->map.cached)
> > -		iounmap(info->map.cached);
> > +		memunmap(info->map.cached);
> >  	kfree(info);
> >  	return 0;
> >  }
> > 
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1243706 — [PATCH 03/20] ia64: introduce arch_memremap()

FromDan Williams <dan.j.williams@intel.com>
Date2015-10-10 00:30 +0200
Subject[PATCH 03/20] ia64: introduce arch_memremap()
Message-ID<qhOkO-73l-23@gated-at.bofh.it>
In reply to#1243699
In preparation for removing ioremap_cache() introduce arch_memremap()
for ia64.  Given that ia64 does not allow external control for caching
types, this simply aliases arch_memremap() with the ia64 ioremap()
implementation.

Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
---
 arch/ia64/Kconfig      |    1 +
 arch/ia64/mm/ioremap.c |   10 ++++++++++
 2 files changed, 11 insertions(+)

diff --git a/arch/ia64/Kconfig b/arch/ia64/Kconfig
index eb0249e37981..b39bab1da7dd 100644
--- a/arch/ia64/Kconfig
+++ b/arch/ia64/Kconfig
@@ -52,6 +52,7 @@ config IA64
 	select HAVE_MOD_ARCH_SPECIFIC
 	select MODULES_USE_ELF_RELA
 	select ARCH_USE_CMPXCHG_LOCKREF
+	select ARCH_HAS_MEMREMAP
 	select HAVE_ARCH_AUDITSYSCALL
 	default y
 	help
diff --git a/arch/ia64/mm/ioremap.c b/arch/ia64/mm/ioremap.c
index 43964cde6214..53a1faa0e5da 100644
--- a/arch/ia64/mm/ioremap.c
+++ b/arch/ia64/mm/ioremap.c
@@ -101,6 +101,16 @@ ioremap (unsigned long phys_addr, unsigned long size)
 }
 EXPORT_SYMBOL(ioremap);
 
+/*
+ * Cache mapping-type is determined internal to ioremap and can't be
+ * externally specified
+ */
+void *arch_memremap(resource_size_t offset, size_t size, unsigned long flags)
+{
+	return (void __force *) ioremap(offset, size);
+}
+EXPORT_SYMBOL(arch_memremap);
+
 void __iomem *
 ioremap_nocache (unsigned long phys_addr, unsigned long size)
 {

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1243707 — [PATCH 19/20] arch: remove ioremap_cache, replace with arch_memremap

FromDan Williams <dan.j.williams@intel.com>
Date2015-10-10 00:30 +0200
Subject[PATCH 19/20] arch: remove ioremap_cache, replace with arch_memremap
Message-ID<qhOkN-73l-9@gated-at.bofh.it>
In reply to#1243699
Now that all call sites for ioremap_cache() have been converted to
memremap(MEMREMAP_WB) we can now proceed with removing the
implementation in the archs.  This amounts to replacing the per-arch
ioremap_cache() implementation with arch_memremap.

Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Russell King <rmk+kernel@arm.linux.org.uk>
Cc: Tony Luck <tony.luck@intel.com>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Borislav Petkov <bp@alien8.de>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
---
 Documentation/x86/pat.txt    |    2 --
 arch/arm/include/asm/io.h    |    4 ----
 arch/arm/mm/ioremap.c        |    7 -------
 arch/arm/mm/nommu.c          |    7 -------
 arch/arm64/include/asm/io.h  |    1 -
 arch/arm64/mm/ioremap.c      |   18 +-----------------
 arch/ia64/include/asm/io.h   |    6 ------
 arch/sh/include/asm/io.h     |    7 -------
 arch/x86/include/asm/io.h    |    2 --
 arch/x86/mm/ioremap.c        |    7 -------
 arch/xtensa/include/asm/io.h |   11 -----------
 kernel/Makefile              |    2 +-
 kernel/memremap.c            |   18 +++++-------------
 lib/Kconfig                  |    1 +
 14 files changed, 8 insertions(+), 85 deletions(-)

diff --git a/Documentation/x86/pat.txt b/Documentation/x86/pat.txt
index 8c908fa5ea26..73d3635f6a3f 100644
--- a/Documentation/x86/pat.txt
+++ b/Documentation/x86/pat.txt
@@ -32,8 +32,6 @@ API                    |    RAM   |  ACPI,...  |  Reserved/Holes  |
                        |          |            |                  |
 ioremap                |    --    |    UC-     |       UC-        |
                        |          |            |                  |
-ioremap_cache          |    --    |    WB      |       WB         |
-                       |          |            |                  |
 ioremap_uc             |    --    |    UC      |       UC         |
                        |          |            |                  |
 ioremap_nocache        |    --    |    UC-     |       UC-        |
diff --git a/arch/arm/include/asm/io.h b/arch/arm/include/asm/io.h
index ca76d59cb6f3..191d0f6eeead 100644
--- a/arch/arm/include/asm/io.h
+++ b/arch/arm/include/asm/io.h
@@ -355,7 +355,6 @@ static inline void memcpy_toio(volatile void __iomem *to, const void *from,
  * Function		Memory type	Cacheability	Cache hint
  * ioremap()		Device		n/a		n/a
  * ioremap_nocache()	Device		n/a		n/a
- * ioremap_cache()	Normal		Writeback	Read allocate
  * memremap(WB)		Normal		Writeback	Read allocate
  * ioremap_wc()		Normal		Non-cacheable	n/a
  * ioremap_wt()		Normal		Non-cacheable	n/a
@@ -393,9 +392,6 @@ void __iomem *ioremap(resource_size_t res_cookie, size_t size);
 #define ioremap ioremap
 #define ioremap_nocache ioremap
 
-void __iomem *ioremap_cache(resource_size_t res_cookie, size_t size);
-#define ioremap_cache ioremap_cache
-
 void __iomem *ioremap_wc(resource_size_t res_cookie, size_t size);
 #define ioremap_wc ioremap_wc
 #define ioremap_wt ioremap_wc
diff --git a/arch/arm/mm/ioremap.c b/arch/arm/mm/ioremap.c
index f6249b98ed16..991146fa0eba 100644
--- a/arch/arm/mm/ioremap.c
+++ b/arch/arm/mm/ioremap.c
@@ -378,13 +378,6 @@ void __iomem *ioremap(resource_size_t res_cookie, size_t size)
 }
 EXPORT_SYMBOL(ioremap);
 
-void __iomem *ioremap_cache(resource_size_t res_cookie, size_t size)
-{
-	return arch_ioremap_caller(res_cookie, size, MT_DEVICE_CACHED,
-				   __builtin_return_address(0));
-}
-EXPORT_SYMBOL(ioremap_cache);
-
 void *arch_memremap(resource_size_t res_cookie, size_t size,
 		unsigned long flags)
 {
diff --git a/arch/arm/mm/nommu.c b/arch/arm/mm/nommu.c
index d88353e1fe80..84d033501553 100644
--- a/arch/arm/mm/nommu.c
+++ b/arch/arm/mm/nommu.c
@@ -366,13 +366,6 @@ void __iomem *ioremap(resource_size_t res_cookie, size_t size)
 }
 EXPORT_SYMBOL(ioremap);
 
-void __iomem *ioremap_cache(resource_size_t res_cookie, size_t size)
-{
-	return __arm_ioremap_caller(res_cookie, size, MT_DEVICE_CACHED,
-				    __builtin_return_address(0));
-}
-EXPORT_SYMBOL(ioremap_cache);
-
 void *arch_memremap(resource_size_t res_cookie, size_t size, unsigned long flags)
 {
 	if ((flags & MEMREMAP_WB) == 0)
diff --git a/arch/arm64/include/asm/io.h b/arch/arm64/include/asm/io.h
index 44be1e03ed65..51376353a722 100644
--- a/arch/arm64/include/asm/io.h
+++ b/arch/arm64/include/asm/io.h
@@ -165,7 +165,6 @@ extern void __memset_io(volatile void __iomem *, int, size_t);
  */
 extern void __iomem *__ioremap(phys_addr_t phys_addr, size_t size, pgprot_t prot);
 extern void __iounmap(volatile void __iomem *addr);
-extern void __iomem *ioremap_cache(phys_addr_t phys_addr, size_t size);
 
 #define ioremap(addr, size)		__ioremap((addr), (size), __pgprot(PROT_DEVICE_nGnRE))
 #define ioremap_nocache(addr, size)	__ioremap((addr), (size), __pgprot(PROT_DEVICE_nGnRE))
diff --git a/arch/arm64/mm/ioremap.c b/arch/arm64/mm/ioremap.c
index 9db5a12654a0..83b9db4672d1 100644
--- a/arch/arm64/mm/ioremap.c
+++ b/arch/arm64/mm/ioremap.c
@@ -84,26 +84,10 @@ void __iounmap(volatile void __iomem *io_addr)
 {
 	unsigned long addr = (unsigned long)io_addr & PAGE_MASK;
 
-	/*
-	 * We could get an address outside vmalloc range in case
-	 * of ioremap_cache() reusing a RAM mapping.
-	 */
-	if (VMALLOC_START <= addr && addr < VMALLOC_END)
-		vunmap((void *)addr);
+	vunmap((void *)addr);
 }
 EXPORT_SYMBOL(__iounmap);
 
-void __iomem *ioremap_cache(phys_addr_t phys_addr, size_t size)
-{
-	/* For normal memory we already have a cacheable mapping. */
-	if (pfn_valid(__phys_to_pfn(phys_addr)))
-		return (void __iomem *)__phys_to_virt(phys_addr);
-
-	return __ioremap_caller(phys_addr, size, __pgprot(PROT_NORMAL),
-				__builtin_return_address(0));
-}
-EXPORT_SYMBOL(ioremap_cache);
-
 void *arch_memremap(phys_addr_t phys_addr, size_t size, unsigned long flags)
 {
 	if ((flags & MEMREMAP_WB) == 0)
diff --git a/arch/ia64/include/asm/io.h b/arch/ia64/include/asm/io.h
index 9041bbe2b7b4..defcd10bbf54 100644
--- a/arch/ia64/include/asm/io.h
+++ b/arch/ia64/include/asm/io.h
@@ -431,12 +431,6 @@ extern void __iomem * early_ioremap (unsigned long phys_addr, unsigned long size
 #define early_memremap(phys_addr, size)        early_ioremap(phys_addr, size)
 extern void early_iounmap (volatile void __iomem *addr, unsigned long size);
 #define early_memunmap(addr, size)             early_iounmap(addr, size)
-static inline void __iomem * ioremap_cache (unsigned long phys_addr, unsigned long size)
-{
-	return ioremap(phys_addr, size);
-}
-#define ioremap_cache ioremap_cache
-
 
 /*
  * String version of IO memory access ops:
diff --git a/arch/sh/include/asm/io.h b/arch/sh/include/asm/io.h
index 3280a6bfa503..0d188164daf8 100644
--- a/arch/sh/include/asm/io.h
+++ b/arch/sh/include/asm/io.h
@@ -337,13 +337,6 @@ static inline void __iomem *ioremap(phys_addr_t offset, unsigned long size)
 	return __ioremap_mode(offset, size, PAGE_KERNEL_NOCACHE);
 }
 
-static inline void __iomem *
-ioremap_cache(phys_addr_t offset, unsigned long size)
-{
-	return __ioremap_mode(offset, size, PAGE_KERNEL);
-}
-#define ioremap_cache ioremap_cache
-
 #ifdef CONFIG_HAVE_IOREMAP_PROT
 static inline void __iomem *
 ioremap_prot(phys_addr_t offset, unsigned long size, unsigned long flags)
diff --git a/arch/x86/include/asm/io.h b/arch/x86/include/asm/io.h
index de25aad07853..e643a96f7c23 100644
--- a/arch/x86/include/asm/io.h
+++ b/arch/x86/include/asm/io.h
@@ -182,10 +182,8 @@ extern void __iomem *ioremap_nocache(resource_size_t offset, unsigned long size)
 extern void __iomem *ioremap_uc(resource_size_t offset, unsigned long size);
 #define ioremap_uc ioremap_uc
 
-extern void __iomem *ioremap_cache(resource_size_t offset, unsigned long size);
 extern void __iomem *ioremap_prot(resource_size_t offset, unsigned long size,
 				unsigned long prot_val);
-
 /*
  * The default ioremap() behavior is non-cached:
  */
diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c
index 3762ad93bd87..4bfe8b490b9a 100644
--- a/arch/x86/mm/ioremap.c
+++ b/arch/x86/mm/ioremap.c
@@ -310,13 +310,6 @@ void __iomem *ioremap_wt(resource_size_t phys_addr, unsigned long size)
 }
 EXPORT_SYMBOL(ioremap_wt);
 
-void __iomem *ioremap_cache(resource_size_t phys_addr, unsigned long size)
-{
-	return __ioremap_caller(phys_addr, size, _PAGE_CACHE_MODE_WB,
-				__builtin_return_address(0));
-}
-EXPORT_SYMBOL(ioremap_cache);
-
 void *arch_memremap(resource_size_t phys_addr, size_t size,
 		unsigned long flags)
 {
diff --git a/arch/xtensa/include/asm/io.h b/arch/xtensa/include/asm/io.h
index 867840f5400f..9bfbecc0fc99 100644
--- a/arch/xtensa/include/asm/io.h
+++ b/arch/xtensa/include/asm/io.h
@@ -48,17 +48,6 @@ static inline void __iomem *ioremap_nocache(unsigned long offset,
 		BUG();
 }
 
-static inline void __iomem *ioremap_cache(unsigned long offset,
-		unsigned long size)
-{
-	if (offset >= XCHAL_KIO_PADDR
-	    && offset - XCHAL_KIO_PADDR < XCHAL_KIO_SIZE)
-		return (void*)(offset-XCHAL_KIO_PADDR+XCHAL_KIO_CACHED_VADDR);
-	else
-		BUG();
-}
-#define ioremap_cache ioremap_cache
-
 #define ioremap_wc ioremap_nocache
 #define ioremap_wt ioremap_nocache
 
diff --git a/kernel/Makefile b/kernel/Makefile
index 53abf008ecb3..323df949d803 100644
--- a/kernel/Makefile
+++ b/kernel/Makefile
@@ -102,7 +102,7 @@ obj-$(CONFIG_CONTEXT_TRACKING) += context_tracking.o
 obj-$(CONFIG_TORTURE_TEST) += torture.o
 obj-$(CONFIG_MEMBARRIER) += membarrier.o
 
-obj-$(CONFIG_HAS_IOMEM) += memremap.o
+obj-$(CONFIG_ARCH_HAS_MEMREMAP) += memremap.o
 
 $(obj)/configs.o: $(obj)/config_data.h
 
diff --git a/kernel/memremap.c b/kernel/memremap.c
index 8bd5fe05d4a4..68b5d54fff01 100644
--- a/kernel/memremap.c
+++ b/kernel/memremap.c
@@ -16,22 +16,14 @@
 #include <linux/mm.h>
 #include <linux/memory_hotplug.h>
 
-#ifndef ioremap_cache
-/* temporary while we convert existing ioremap_cache users to memremap */
-__weak void __iomem *ioremap_cache(resource_size_t offset, unsigned long size)
-{
-	return ioremap(offset, size);
-}
-#endif
-
-/* temporary while we convert arch implementations to arch_memremap */
 __weak void *arch_memremap(resource_size_t offset, size_t size,
 		unsigned long flags)
 {
-	if (flags & MEMREMAP_WB)
-		return (void __force *) ioremap_cache(offset, size);
-	else if (flags & MEMREMAP_WT)
-		return (void __force *) ioremap_wt(offset, size);
+	if (!IS_ENABLED(CONFIG_MMU))
+		return (void *) (unsigned long) offset;
+	WARN_ONCE(1, "%s in %s should only be called in NOMMU configurations\n",
+			__func__, __FILE__);
+	return NULL;
 }
 
 /**
diff --git a/lib/Kconfig b/lib/Kconfig
index 8d99b4e6a45b..672c92e9dfe7 100644
--- a/lib/Kconfig
+++ b/lib/Kconfig
@@ -523,6 +523,7 @@ config ARCH_HAS_SG_CHAIN
 	bool
 
 config ARCH_HAS_MEMREMAP
+	default !MMU
 	bool
 
 config ARCH_HAS_PMEM_API

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


#1243708 — [PATCH 01/20] x86: introduce arch_memremap()

FromDan Williams <dan.j.williams@intel.com>
Date2015-10-10 00:30 +0200
Subject[PATCH 01/20] x86: introduce arch_memremap()
Message-ID<qhOkO-73l-27@gated-at.bofh.it>
In reply to#1243699
In preparation for removing ioremap_cache() introduce arch_memremap()
for x86.  For now, arch_memremap(..., MEMREMAP_WB) and
arch_memremap(..., MEMREMAP_WT) are aliases for ioremap_cache() and
ioremap_wt() respectively.  While the memremap() conversion patches are
filtering through the other sub-systems further development of the
memremap interface may proceed.

This also initiates the guarantee that a successful call to
memremap(..., MEMREMAP_WB) has indeed established a cached mapping and
has not silently fallen back to uncached.

Cc: Arnd Bergmann <arnd@arndb.de>
Cc: Thomas Gleixner <tglx@linutronix.de>
Cc: H. Peter Anvin <hpa@zytor.com>
Cc: Ingo Molnar <mingo@redhat.com>
Cc: Borislav Petkov <bp@alien8.de>
Cc: Ross Zwisler <ross.zwisler@linux.intel.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
---
 Documentation/x86/pat.txt |    2 ++
 arch/x86/Kconfig          |    1 +
 arch/x86/mm/ioremap.c     |   17 +++++++++++++++++
 drivers/nvdimm/Kconfig    |    2 +-
 include/linux/io.h        |    1 +
 kernel/memremap.c         |   25 +++++++++++++------------
 lib/Kconfig               |    5 ++++-
 7 files changed, 39 insertions(+), 14 deletions(-)

diff --git a/Documentation/x86/pat.txt b/Documentation/x86/pat.txt
index 54944c71b819..8c908fa5ea26 100644
--- a/Documentation/x86/pat.txt
+++ b/Documentation/x86/pat.txt
@@ -40,6 +40,8 @@ ioremap_nocache        |    --    |    UC-     |       UC-        |
                        |          |            |                  |
 ioremap_wc             |    --    |    --      |       WC         |
                        |          |            |                  |
+memremap(MEMREMAP_WB)  |    WB    |    WB      |       WB         |
+                       |          |            |                  |
 ioremap_wt             |    --    |    --      |       WT         |
                        |          |            |                  |
 set_memory_uc          |    UC-   |    --      |       --         |
diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 328c8352480c..488cb210d055 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -27,6 +27,7 @@ config X86
 	select ARCH_HAS_ELF_RANDOMIZE
 	select ARCH_HAS_FAST_MULTIPLIER
 	select ARCH_HAS_GCOV_PROFILE_ALL
+	select ARCH_HAS_MEMREMAP
 	select ARCH_HAS_PMEM_API		if X86_64
 	select ARCH_HAS_MMIO_FLUSH
 	select ARCH_HAS_SG_CHAIN
diff --git a/arch/x86/mm/ioremap.c b/arch/x86/mm/ioremap.c
index b9c78f3bcd67..123431ae702f 100644
--- a/arch/x86/mm/ioremap.c
+++ b/arch/x86/mm/ioremap.c
@@ -317,6 +317,23 @@ void __iomem *ioremap_cache(resource_size_t phys_addr, unsigned long size)
 }
 EXPORT_SYMBOL(ioremap_cache);
 
+void *arch_memremap(resource_size_t phys_addr, size_t size,
+		unsigned long flags)
+{
+	int prot;
+
+	if (flags & MEMREMAP_WB)
+		prot = _PAGE_CACHE_MODE_WB;
+	else if (flags & MEMREMAP_WT)
+		prot = _PAGE_CACHE_MODE_WT;
+	else
+		return NULL;
+
+	return (void __force *) __ioremap_caller(phys_addr, size, prot,
+			__builtin_return_address(0));
+}
+EXPORT_SYMBOL(arch_memremap);
+
 void __iomem *ioremap_prot(resource_size_t phys_addr, unsigned long size,
 				unsigned long prot_val)
 {
diff --git a/drivers/nvdimm/Kconfig b/drivers/nvdimm/Kconfig
index 53c11621d5b1..b8e9d8b46f33 100644
--- a/drivers/nvdimm/Kconfig
+++ b/drivers/nvdimm/Kconfig
@@ -1,5 +1,6 @@
 menuconfig LIBNVDIMM
 	tristate "NVDIMM (Non-Volatile Memory Device) Support"
+	depends on ARCH_HAS_MEMREMAP
 	depends on PHYS_ADDR_T_64BIT
 	depends on BLK_DEV
 	help
@@ -19,7 +20,6 @@ if LIBNVDIMM
 config BLK_DEV_PMEM
 	tristate "PMEM: Persistent memory block device support"
 	default LIBNVDIMM
-	depends on HAS_IOMEM
 	select ND_BTT if BTT
 	select ND_PFN if NVDIMM_PFN
 	help
diff --git a/include/linux/io.h b/include/linux/io.h
index de64c1e53612..4f150781735d 100644
--- a/include/linux/io.h
+++ b/include/linux/io.h
@@ -153,5 +153,6 @@ enum {
 
 void *memremap(resource_size_t offset, size_t size, unsigned long flags);
 void memunmap(void *addr);
+void *arch_memremap(resource_size_t offset, size_t size, unsigned long flags);
 
 #endif /* _LINUX_IO_H */
diff --git a/kernel/memremap.c b/kernel/memremap.c
index 72b0c66628b6..8bd5fe05d4a4 100644
--- a/kernel/memremap.c
+++ b/kernel/memremap.c
@@ -24,6 +24,16 @@ __weak void __iomem *ioremap_cache(resource_size_t offset, unsigned long size)
 }
 #endif
 
+/* temporary while we convert arch implementations to arch_memremap */
+__weak void *arch_memremap(resource_size_t offset, size_t size,
+		unsigned long flags)
+{
+	if (flags & MEMREMAP_WB)
+		return (void __force *) ioremap_cache(offset, size);
+	else if (flags & MEMREMAP_WT)
+		return (void __force *) ioremap_wt(offset, size);
+}
+
 /**
  * memremap() - remap an iomem_resource as cacheable memory
  * @offset: iomem resource start address
@@ -48,7 +58,6 @@ __weak void __iomem *ioremap_cache(resource_size_t offset, unsigned long size)
 void *memremap(resource_size_t offset, size_t size, unsigned long flags)
 {
 	int is_ram = region_intersects(offset, size, "System RAM");
-	void *addr = NULL;
 
 	if (is_ram == REGION_MIXED) {
 		WARN_ONCE(1, "memremap attempted on mixed range %pa size: %#lx\n",
@@ -58,7 +67,6 @@ void *memremap(resource_size_t offset, size_t size, unsigned long flags)
 
 	/* Try all mapping types requested until one returns non-NULL */
 	if (flags & MEMREMAP_WB) {
-		flags &= ~MEMREMAP_WB;
 		/*
 		 * MEMREMAP_WB is special in that it can be satisifed
 		 * from the direct map.  Some archs depend on the
@@ -66,9 +74,7 @@ void *memremap(resource_size_t offset, size_t size, unsigned long flags)
 		 * the requested range is potentially in "System RAM"
 		 */
 		if (is_ram == REGION_INTERSECTS)
-			addr = __va(offset);
-		else
-			addr = ioremap_cache(offset, size);
+			return __va(offset);
 	}
 
 	/*
@@ -77,18 +83,13 @@ void *memremap(resource_size_t offset, size_t size, unsigned long flags)
 	 * address mapping.  Enforce that this mapping is not aliasing
 	 * "System RAM"
 	 */
-	if (!addr && is_ram == REGION_INTERSECTS && flags) {
+	if (is_ram == REGION_INTERSECTS) {
 		WARN_ONCE(1, "memremap attempted on ram %pa size: %#lx\n",
 				&offset, (unsigned long) size);
 		return NULL;
 	}
 
-	if (!addr && (flags & MEMREMAP_WT)) {
-		flags &= ~MEMREMAP_WT;
-		addr = ioremap_wt(offset, size);
-	}
-
-	return addr;
+	return arch_memremap(offset, size, flags);
 }
 EXPORT_SYMBOL(memremap);
 
diff --git a/lib/Kconfig b/lib/Kconfig
index 2e491ac15622..8d99b4e6a45b 100644
--- a/lib/Kconfig
+++ b/lib/Kconfig
@@ -520,7 +520,10 @@ config SG_SPLIT
 #
 
 config ARCH_HAS_SG_CHAIN
-	def_bool n
+	bool
+
+config ARCH_HAS_MEMREMAP
+	bool
 
 config ARCH_HAS_PMEM_API
 	bool

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[toc] | [prev] | [next] | [standalone]


Page 1 of 2  [1] 2  Next page →

Back to top | Article view | linux.kernel


csiph-web