mirror of
				git://git.openwrt.org/openwrt/openwrt.git
				synced 2025-11-04 06:54:27 -05:00 
			
		
		
		
	All modifications made by update_kernel.sh run in a fresh clone without any existing toolchains. Build system: x86_64 Build-tested: ipq806x/R7800, ath79/generic, bcm27xx/bcm2711 Run-tested: ipq806x/R7800 No dmesg regressions, everything functional Signed-off-by: John Audia <graysky@archlinux.us>
		
			
				
	
	
		
			62 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
			
		
		
	
	
			62 lines
		
	
	
		
			2.4 KiB
		
	
	
	
		
			Diff
		
	
	
	
	
	
From e2b0ebb44e91e3492f26d21218fb7ea5e14190ec Mon Sep 17 00:00:00 2001
 | 
						|
From: Haiying Wang <Haiying.Wang@nxp.com>
 | 
						|
Date: Thu, 20 Apr 2017 11:54:22 -0400
 | 
						|
Subject: [PATCH] soc: fsl: dpio: change CENA regs to be cacheable
 | 
						|
 | 
						|
Change cache enabled regsiter accessed to be cacheable
 | 
						|
plus non-shareable to meet the performance requirement.
 | 
						|
QMan's CENA region contains registers and structures that
 | 
						|
are 64byte in size and are inteneded to be accessed using a
 | 
						|
single 64 byte bus transaction, therefore this portal
 | 
						|
memory should be configured as cache-enabled. Also because
 | 
						|
the write allocate stash transcations of QBMan should be
 | 
						|
issued as cachable and non-coherent(non-sharable), we
 | 
						|
need to configure this region to be non-shareable.
 | 
						|
 | 
						|
Signed-off-by: Haiying Wang <Haiying.Wang@nxp.com>
 | 
						|
---
 | 
						|
 drivers/soc/fsl/dpio/dpio-driver.c | 17 ++++++++++-------
 | 
						|
 1 file changed, 10 insertions(+), 7 deletions(-)
 | 
						|
 | 
						|
--- a/drivers/soc/fsl/dpio/dpio-driver.c
 | 
						|
+++ b/drivers/soc/fsl/dpio/dpio-driver.c
 | 
						|
@@ -27,6 +27,11 @@ MODULE_LICENSE("Dual BSD/GPL");
 | 
						|
 MODULE_AUTHOR("Freescale Semiconductor, Inc");
 | 
						|
 MODULE_DESCRIPTION("DPIO Driver");
 | 
						|
 
 | 
						|
+#define PROT_NORMAL_NS		(PTE_TYPE_PAGE | PTE_AF | PTE_PXN | PTE_UXN | PTE_DIRTY | PTE_WRITE | PTE_ATTRINDX(MT_NORMAL))
 | 
						|
+
 | 
						|
+#define ioremap_cache_ns(addr, size)	__ioremap((addr), (size), __pgprot(PROT_NORMAL_NS))
 | 
						|
+
 | 
						|
+
 | 
						|
 struct dpio_priv {
 | 
						|
 	struct dpaa2_io *io;
 | 
						|
 };
 | 
						|
@@ -197,13 +202,11 @@ static int dpaa2_dpio_probe(struct fsl_m
 | 
						|
 	if (dpio_dev->obj_desc.region_count < 3) {
 | 
						|
 		/* No support for DDR backed portals, use classic mapping */
 | 
						|
 		/*
 | 
						|
-		 * Set the CENA regs to be the cache inhibited area of the
 | 
						|
-		 * portal to avoid coherency issues if a user migrates to
 | 
						|
-		 * another core.
 | 
						|
+		 * Set the CENA regs to be the cache enabled area of the portal to
 | 
						|
+		 * achieve the best performance.
 | 
						|
 		 */
 | 
						|
-		desc.regs_cena = devm_memremap(dev, dpio_dev->regions[1].start,
 | 
						|
-					resource_size(&dpio_dev->regions[1]),
 | 
						|
-					MEMREMAP_WC);
 | 
						|
+		desc.regs_cena = ioremap_cache_ns(dpio_dev->regions[0].start,
 | 
						|
+						resource_size(&dpio_dev->regions[0]));
 | 
						|
 	} else {
 | 
						|
 		desc.regs_cena = devm_memremap(dev, dpio_dev->regions[2].start,
 | 
						|
 					resource_size(&dpio_dev->regions[2]),
 | 
						|
@@ -211,7 +214,7 @@ static int dpaa2_dpio_probe(struct fsl_m
 | 
						|
 	}
 | 
						|
 
 | 
						|
 	if (IS_ERR(desc.regs_cena)) {
 | 
						|
-		dev_err(dev, "devm_memremap failed\n");
 | 
						|
+		dev_err(dev, "ioremap_cache_ns failed\n");
 | 
						|
 		err = PTR_ERR(desc.regs_cena);
 | 
						|
 		goto err_allocate_irqs;
 | 
						|
 	}
 |