linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v10 1/5] genalloc:support memory-allocation with bytes-alignment to genalloc
@ 2015-09-18  7:15 Zhao Qiang
  2015-09-18  7:15 ` [PATCH v10 2/5] genalloc:support allocating specific region Zhao Qiang
                   ` (3 more replies)
  0 siblings, 4 replies; 27+ messages in thread
From: Zhao Qiang @ 2015-09-18  7:15 UTC (permalink / raw)
  To: scottwood
  Cc: linux-kernel, linuxppc-dev, lauraa, X.xie, benh, leoli, paulus,
	Zhao Qiang

Bytes alignment is required to manage some special RAM,
so add gen_pool_first_fit_align to genalloc,
meanwhile add gen_pool_alloc_data to pass data to
gen_pool_first_fit_align(modify gen_pool_alloc as a wrapper)

Signed-off-by: Zhao Qiang <qiang.zhao@freescale.com>
---
Changes for v6:
	- patches set v6 include a new patch because of using 
	- genalloc to manage QE MURAM, patch 0001 is the new 
	- patch, adding bytes alignment for allocation for use.
Changes for v7:
	- cpm muram also need to use genalloc to manage, it has 
	  a function to reserve a specific region of muram,
	  add offset to genpool_data for start addr to be allocated.
Changes for v8:
	- remove supporting reserving a specific region from this patch
	  add a new patch to support it.
Changes for v9:
	- Nil 
Changes for v10:
	- Nil 

 include/linux/genalloc.h | 24 ++++++++++++++++----
 lib/genalloc.c           | 58 +++++++++++++++++++++++++++++++++++++++++++-----
 2 files changed, 73 insertions(+), 9 deletions(-)

diff --git a/include/linux/genalloc.h b/include/linux/genalloc.h
index 1ccaab4..aaf3dc2 100644
--- a/include/linux/genalloc.h
+++ b/include/linux/genalloc.h
@@ -30,10 +30,12 @@
 #ifndef __GENALLOC_H__
 #define __GENALLOC_H__
 
+#include <linux/types.h>
 #include <linux/spinlock_types.h>
 
 struct device;
 struct device_node;
+struct gen_pool;
 
 /**
  * Allocation callback function type definition
@@ -47,7 +49,7 @@ typedef unsigned long (*genpool_algo_t)(unsigned long *map,
 			unsigned long size,
 			unsigned long start,
 			unsigned int nr,
-			void *data);
+			void *data, struct gen_pool *pool);
 
 /*
  *  General purpose special memory pool descriptor.
@@ -73,6 +75,13 @@ struct gen_pool_chunk {
 	unsigned long bits[0];		/* bitmap for allocating memory chunk */
 };
 
+/*
+ *  gen_pool data descriptor for gen_pool_first_fit_align.
+ */
+struct genpool_data_align {
+	int align;		/* alignment by bytes for starting address */
+};
+
 extern struct gen_pool *gen_pool_create(int, int);
 extern phys_addr_t gen_pool_virt_to_phys(struct gen_pool *pool, unsigned long);
 extern int gen_pool_add_virt(struct gen_pool *, unsigned long, phys_addr_t,
@@ -96,6 +105,7 @@ static inline int gen_pool_add(struct gen_pool *pool, unsigned long addr,
 }
 extern void gen_pool_destroy(struct gen_pool *);
 extern unsigned long gen_pool_alloc(struct gen_pool *, size_t);
+extern unsigned long gen_pool_alloc_data(struct gen_pool *, size_t, void *data);
 extern void *gen_pool_dma_alloc(struct gen_pool *pool, size_t size,
 		dma_addr_t *dma);
 extern void gen_pool_free(struct gen_pool *, unsigned long, size_t);
@@ -108,14 +118,20 @@ extern void gen_pool_set_algo(struct gen_pool *pool, genpool_algo_t algo,
 		void *data);
 
 extern unsigned long gen_pool_first_fit(unsigned long *map, unsigned long size,
-		unsigned long start, unsigned int nr, void *data);
+		unsigned long start, unsigned int nr, void *data,
+		struct gen_pool *pool);
+
+extern unsigned long gen_pool_first_fit_align(unsigned long *map,
+		unsigned long size, unsigned long start, unsigned int nr,
+		void *data, struct gen_pool *pool);
 
 extern unsigned long gen_pool_first_fit_order_align(unsigned long *map,
 		unsigned long size, unsigned long start, unsigned int nr,
-		void *data);
+		void *data, struct gen_pool *pool);
 
 extern unsigned long gen_pool_best_fit(unsigned long *map, unsigned long size,
-		unsigned long start, unsigned int nr, void *data);
+		unsigned long start, unsigned int nr, void *data,
+		struct gen_pool *pool);
 
 extern struct gen_pool *devm_gen_pool_create(struct device *dev,
 		int min_alloc_order, int nid);
diff --git a/lib/genalloc.c b/lib/genalloc.c
index d214866..b8762b1 100644
--- a/lib/genalloc.c
+++ b/lib/genalloc.c
@@ -269,6 +269,24 @@ EXPORT_SYMBOL(gen_pool_destroy);
  */
 unsigned long gen_pool_alloc(struct gen_pool *pool, size_t size)
 {
+	return gen_pool_alloc_data(pool, size, pool->data);
+}
+EXPORT_SYMBOL(gen_pool_alloc);
+
+/**
+ * gen_pool_alloc_data - allocate special memory from the pool
+ * @pool: pool to allocate from
+ * @size: number of bytes to allocate from the pool
+ * @data: data passed to algorithm
+ *
+ * Allocate the requested number of bytes from the specified pool.
+ * Uses the pool allocation function (with first-fit algorithm by default).
+ * Can not be used in NMI handler on architectures without
+ * NMI-safe cmpxchg implementation.
+ */
+unsigned long gen_pool_alloc_data(struct gen_pool *pool, size_t size,
+		void *data)
+{
 	struct gen_pool_chunk *chunk;
 	unsigned long addr = 0;
 	int order = pool->min_alloc_order;
@@ -290,7 +308,7 @@ unsigned long gen_pool_alloc(struct gen_pool *pool, size_t size)
 		end_bit = chunk_size(chunk) >> order;
 retry:
 		start_bit = pool->algo(chunk->bits, end_bit, start_bit, nbits,
-				pool->data);
+				data, pool);
 		if (start_bit >= end_bit)
 			continue;
 		remain = bitmap_set_ll(chunk->bits, start_bit, nbits);
@@ -309,7 +327,7 @@ retry:
 	rcu_read_unlock();
 	return addr;
 }
-EXPORT_SYMBOL(gen_pool_alloc);
+EXPORT_SYMBOL(gen_pool_alloc_data);
 
 /**
  * gen_pool_dma_alloc - allocate special memory from the pool for DMA usage
@@ -500,15 +518,42 @@ EXPORT_SYMBOL(gen_pool_set_algo);
  * @start: The bitnumber to start searching at
  * @nr: The number of zeroed bits we're looking for
  * @data: additional data - unused
+ * @pool: pool to find the fit region memory from
  */
 unsigned long gen_pool_first_fit(unsigned long *map, unsigned long size,
-		unsigned long start, unsigned int nr, void *data)
+		unsigned long start, unsigned int nr, void *data,
+		struct gen_pool *pool)
 {
 	return bitmap_find_next_zero_area(map, size, start, nr, 0);
 }
 EXPORT_SYMBOL(gen_pool_first_fit);
 
 /**
+ * gen_pool_first_fit_align - find the first available region
+ * of memory matching the size requirement (alignment constraint)
+ * @map: The address to base the search on
+ * @size: The bitmap size in bits
+ * @start: The bitnumber to start searching at
+ * @nr: The number of zeroed bits we're looking for
+ * @data: data for alignment
+ * @pool: pool to get order from
+ */
+unsigned long gen_pool_first_fit_align(unsigned long *map, unsigned long size,
+		unsigned long start, unsigned int nr, void *data,
+		struct gen_pool *pool)
+{
+	struct genpool_data_align *alignment;
+	unsigned long align_mask;
+	int order;
+
+	alignment = data;
+	order = pool->min_alloc_order;
+	align_mask = ((alignment->align + (1UL << order) - 1) >> order) - 1;
+	return bitmap_find_next_zero_area(map, size, start, nr, align_mask);
+}
+EXPORT_SYMBOL(gen_pool_first_fit_align);
+
+/**
  * gen_pool_first_fit_order_align - find the first available region
  * of memory matching the size requirement. The region will be aligned
  * to the order of the size specified.
@@ -517,10 +562,11 @@ EXPORT_SYMBOL(gen_pool_first_fit);
  * @start: The bitnumber to start searching at
  * @nr: The number of zeroed bits we're looking for
  * @data: additional data - unused
+ * @pool: pool to find the fit region memory from
  */
 unsigned long gen_pool_first_fit_order_align(unsigned long *map,
 		unsigned long size, unsigned long start,
-		unsigned int nr, void *data)
+		unsigned int nr, void *data, struct gen_pool *pool)
 {
 	unsigned long align_mask = roundup_pow_of_two(nr) - 1;
 
@@ -536,12 +582,14 @@ EXPORT_SYMBOL(gen_pool_first_fit_order_align);
  * @start: The bitnumber to start searching at
  * @nr: The number of zeroed bits we're looking for
  * @data: additional data - unused
+ * @pool: pool to find the fit region memory from
  *
  * Iterate over the bitmap to find the smallest free region
  * which we can allocate the memory.
  */
 unsigned long gen_pool_best_fit(unsigned long *map, unsigned long size,
-		unsigned long start, unsigned int nr, void *data)
+		unsigned long start, unsigned int nr, void *data,
+		struct gen_pool *pool)
 {
 	unsigned long start_bit = size;
 	unsigned long len = size + 1;
-- 
2.1.0.27.g96db324

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v10 2/5] genalloc:support allocating specific region
  2015-09-18  7:15 [PATCH v10 1/5] genalloc:support memory-allocation with bytes-alignment to genalloc Zhao Qiang
@ 2015-09-18  7:15 ` Zhao Qiang
  2015-09-18  7:15 ` [PATCH v10 3/5] CPM/QE: use genalloc to manage CPM/QE muram Zhao Qiang
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 27+ messages in thread
From: Zhao Qiang @ 2015-09-18  7:15 UTC (permalink / raw)
  To: scottwood
  Cc: linux-kernel, linuxppc-dev, lauraa, X.xie, benh, leoli, paulus,
	Zhao Qiang

Add new algo for genalloc, it reserve a specific region of
memory matching the size requirement (no alignment constraint)

Signed-off-by: Zhao Qiang <qiang.zhao@freescale.com>
---
Changes for v9:
	- reserve a specific region, if the return region
	- is not during the specific region, return fail.
Changes for v10:
	- rename gen_pool_fixed_fit to gen_pool_fixed_alloc

 include/linux/genalloc.h | 11 +++++++++++
 lib/genalloc.c           | 30 ++++++++++++++++++++++++++++++
 2 files changed, 41 insertions(+)

diff --git a/include/linux/genalloc.h b/include/linux/genalloc.h
index aaf3dc2..56d5d96 100644
--- a/include/linux/genalloc.h
+++ b/include/linux/genalloc.h
@@ -82,6 +82,13 @@ struct genpool_data_align {
 	int align;		/* alignment by bytes for starting address */
 };
 
+/*
+ *  gen_pool data descriptor for gen_pool_fixed_alloc.
+ */
+struct genpool_data_fixed {
+	unsigned long offset;		/* The offset of the specific region */
+};
+
 extern struct gen_pool *gen_pool_create(int, int);
 extern phys_addr_t gen_pool_virt_to_phys(struct gen_pool *pool, unsigned long);
 extern int gen_pool_add_virt(struct gen_pool *, unsigned long, phys_addr_t,
@@ -121,6 +128,10 @@ extern unsigned long gen_pool_first_fit(unsigned long *map, unsigned long size,
 		unsigned long start, unsigned int nr, void *data,
 		struct gen_pool *pool);
 
+extern unsigned long gen_pool_fixed_alloc(unsigned long *map,
+		unsigned long size, unsigned long start, unsigned int nr,
+		void *data, struct gen_pool *pool);
+
 extern unsigned long gen_pool_first_fit_align(unsigned long *map,
 		unsigned long size, unsigned long start, unsigned int nr,
 		void *data, struct gen_pool *pool);
diff --git a/lib/genalloc.c b/lib/genalloc.c
index b8762b1..1e6fde8 100644
--- a/lib/genalloc.c
+++ b/lib/genalloc.c
@@ -554,6 +554,36 @@ unsigned long gen_pool_first_fit_align(unsigned long *map, unsigned long size,
 EXPORT_SYMBOL(gen_pool_first_fit_align);
 
 /**
+ * gen_pool_fixed_alloc - reserve a specific region of
+ * matching the size requirement (no alignment constraint)
+ * @map: The address to base the search on
+ * @size: The bitmap size in bits
+ * @start: The bitnumber to start searching at
+ * @nr: The number of zeroed bits we're looking for
+ * @data: data for alignment
+ * @pool: pool to get order from
+ */
+unsigned long gen_pool_fixed_alloc(unsigned long *map, unsigned long size,
+		unsigned long start, unsigned int nr, void *data,
+		struct gen_pool *pool)
+{
+	struct genpool_data_fixed *fixed_data;
+	int order;
+	unsigned long offset_bit;
+	unsigned long start_bit;
+
+	fixed_data = data;
+	order = pool->min_alloc_order;
+	offset_bit = fixed_data->offset >> order;
+	start_bit = bitmap_find_next_zero_area(map, size,
+			start + offset_bit, nr, 0);
+	if (start_bit != offset_bit)
+		start_bit = size;
+	return start_bit;
+}
+EXPORT_SYMBOL(gen_pool_fixed_alloc);
+
+/**
  * gen_pool_first_fit_order_align - find the first available region
  * of memory matching the size requirement. The region will be aligned
  * to the order of the size specified.
-- 
2.1.0.27.g96db324

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v10 3/5] CPM/QE: use genalloc to manage CPM/QE muram
  2015-09-18  7:15 [PATCH v10 1/5] genalloc:support memory-allocation with bytes-alignment to genalloc Zhao Qiang
  2015-09-18  7:15 ` [PATCH v10 2/5] genalloc:support allocating specific region Zhao Qiang
@ 2015-09-18  7:15 ` Zhao Qiang
  2015-09-21 22:47   ` Scott Wood
  2015-09-18  7:15 ` [PATCH v10 4/5] QE/CPM: move muram management functions to qe_common Zhao Qiang
  2015-09-18  7:15 ` [PATCH v10 5/5] QE: Move QE from arch/powerpc to drivers/soc Zhao Qiang
  3 siblings, 1 reply; 27+ messages in thread
From: Zhao Qiang @ 2015-09-18  7:15 UTC (permalink / raw)
  To: scottwood
  Cc: linux-kernel, linuxppc-dev, lauraa, X.xie, benh, leoli, paulus,
	Zhao Qiang

Use genalloc to manage CPM/QE muram instead of rheap.

Signed-off-by: Zhao Qiang <qiang.zhao@freescale.com>
---
Changes for v9:
	- splitted from patch 3/5, modify cpm muram management functions.
Changes for v10:
	- modify cpm muram first, then move to qe_common
	- modify commit.

 arch/powerpc/platforms/Kconfig   |   1 +
 arch/powerpc/sysdev/cpm_common.c | 150 +++++++++++++++++++++++++++------------
 2 files changed, 107 insertions(+), 44 deletions(-)

diff --git a/arch/powerpc/platforms/Kconfig b/arch/powerpc/platforms/Kconfig
index b7f9c40..01f98a2 100644
--- a/arch/powerpc/platforms/Kconfig
+++ b/arch/powerpc/platforms/Kconfig
@@ -276,6 +276,7 @@ config QUICC_ENGINE
 	bool "Freescale QUICC Engine (QE) Support"
 	depends on FSL_SOC && PPC32
 	select PPC_LIB_RHEAP
+	select GENERIC_ALLOCATOR
 	select CRC32
 	help
 	  The QUICC Engine (QE) is a new generation of communications
diff --git a/arch/powerpc/sysdev/cpm_common.c b/arch/powerpc/sysdev/cpm_common.c
index 4f78695..453d18c 100644
--- a/arch/powerpc/sysdev/cpm_common.c
+++ b/arch/powerpc/sysdev/cpm_common.c
@@ -17,6 +17,7 @@
  * published by the Free Software Foundation.
  */
 
+#include <linux/genalloc.h>
 #include <linux/init.h>
 #include <linux/of_device.h>
 #include <linux/spinlock.h>
@@ -27,7 +28,6 @@
 
 #include <asm/udbg.h>
 #include <asm/io.h>
-#include <asm/rheap.h>
 #include <asm/cpm.h>
 
 #include <mm/mmu_decl.h>
@@ -65,14 +65,24 @@ void __init udbg_init_cpm(void)
 }
 #endif
 
+static struct gen_pool *muram_pool;
+static struct genpool_data_align muram_pool_data;
+static struct genpool_data_fixed muram_pool_data_fixed;
 static spinlock_t cpm_muram_lock;
-static rh_block_t cpm_boot_muram_rh_block[16];
-static rh_info_t cpm_muram_info;
 static u8 __iomem *muram_vbase;
 static phys_addr_t muram_pbase;
 
-/* Max address size we deal with */
+struct muram_block {
+	struct list_head head;
+	unsigned long start;
+	int size;
+};
+
+static LIST_HEAD(muram_block_list);
+
+/* max address size we deal with */
 #define OF_MAX_ADDR_CELLS	4
+#define GENPOOL_OFFSET		4096
 
 int cpm_muram_init(void)
 {
@@ -86,113 +96,165 @@ int cpm_muram_init(void)
 	if (muram_pbase)
 		return 0;
 
-	spin_lock_init(&cpm_muram_lock);
-	/* initialize the info header */
-	rh_init(&cpm_muram_info, 1,
-	        sizeof(cpm_boot_muram_rh_block) /
-	        sizeof(cpm_boot_muram_rh_block[0]),
-	        cpm_boot_muram_rh_block);
-
 	np = of_find_compatible_node(NULL, NULL, "fsl,cpm-muram-data");
 	if (!np) {
 		/* try legacy bindings */
 		np = of_find_node_by_name(NULL, "data-only");
 		if (!np) {
-			printk(KERN_ERR "Cannot find CPM muram data node");
+			pr_err("Cannot find CPM muram data node");
 			ret = -ENODEV;
 			goto out;
 		}
 	}
 
+	muram_pool = gen_pool_create(1, -1);
 	muram_pbase = of_translate_address(np, zero);
 	if (muram_pbase == (phys_addr_t)OF_BAD_ADDR) {
-		printk(KERN_ERR "Cannot translate zero through CPM muram node");
+		pr_err("Cannot translate zero through CPM muram node");
 		ret = -ENODEV;
-		goto out;
+		goto err;
 	}
 
 	while (of_address_to_resource(np, i++, &r) == 0) {
 		if (r.end > max)
 			max = r.end;
+		ret = gen_pool_add(muram_pool, r.start - muram_pbase +
+				   GENPOOL_OFFSET, resource_size(&r), -1);
+		if (ret) {
+				pr_err("QE: couldn't add muram to pool!\n");
+				goto err;
+			}
 
-		rh_attach_region(&cpm_muram_info, r.start - muram_pbase,
-				 resource_size(&r));
 	}
 
 	muram_vbase = ioremap(muram_pbase, max - muram_pbase + 1);
 	if (!muram_vbase) {
-		printk(KERN_ERR "Cannot map CPM muram");
+		pr_err("Cannot map QE muram");
 		ret = -ENOMEM;
+		goto err;
 	}
-
+	goto out;
+err:
+	gen_pool_destroy(muram_pool);
 out:
 	of_node_put(np);
 	return ret;
 }
 
-/**
+/*
  * cpm_muram_alloc - allocate the requested size worth of multi-user ram
  * @size: number of bytes to allocate
  * @align: requested alignment, in bytes
  *
  * This function returns an offset into the muram area.
- * Use cpm_dpram_addr() to get the virtual address of the area.
- * Use cpm_muram_free() to free the allocation.
  */
 unsigned long cpm_muram_alloc(unsigned long size, unsigned long align)
 {
 	unsigned long start;
 	unsigned long flags;
+	struct muram_block *entry;
 
 	spin_lock_irqsave(&cpm_muram_lock, flags);
-	cpm_muram_info.alignment = align;
-	start = rh_alloc(&cpm_muram_info, size, "commproc");
+	muram_pool_data.align = align;
+	gen_pool_set_algo(muram_pool, gen_pool_first_fit_align,
+			  &muram_pool_data);
+	start = gen_pool_alloc(muram_pool, size);
+	if (!start)
+		goto out2;
+	start = start - GENPOOL_OFFSET;
 	memset(cpm_muram_addr(start), 0, size);
+	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+	if (!entry)
+		goto out1;
+	entry->start = start;
+	entry->size = size;
+	list_add(&entry->head, &muram_block_list);
 	spin_unlock_irqrestore(&cpm_muram_lock, flags);
 
 	return start;
+out1:
+	gen_pool_free(muram_pool, start, size);
+out2:
+	spin_unlock_irqrestore(&cpm_muram_lock, flags);
+	return (unsigned long) -ENOMEM;
 }
 EXPORT_SYMBOL(cpm_muram_alloc);
 
-/**
- * cpm_muram_free - free a chunk of multi-user ram
- * @offset: The beginning of the chunk as returned by cpm_muram_alloc().
+/*
+ * cpm_muram_alloc_fixed - reserve a specific region of multi-user ram
+ * @size: number of bytes to allocate
+ * @offset: offset of allocation start address
+ *
+ * This function returns an offset into the muram area.
  */
-int cpm_muram_free(unsigned long offset)
+unsigned long cpm_muram_alloc_fixed(unsigned long offset, unsigned long size)
 {
-	int ret;
+
+	unsigned long start;
 	unsigned long flags;
+	unsigned long size_alloc = size;
+	struct muram_block *entry;
+	int end_bit;
+	int order = muram_pool->min_alloc_order;
 
 	spin_lock_irqsave(&cpm_muram_lock, flags);
-	ret = rh_free(&cpm_muram_info, offset);
+	end_bit = (offset >> order) + ((size + (1UL << order) - 1) >> order);
+	if ((offset + size) > (end_bit << order))
+		size_alloc = size + (1UL << order);
+
+	muram_pool_data_fixed.offset = offset + GENPOOL_OFFSET;
+	gen_pool_set_algo(muram_pool, gen_pool_fixed_alloc,
+			  &muram_pool_data_fixed);
+	start = gen_pool_alloc(muram_pool, size_alloc);
+	if (!start)
+		goto out2;
+	start = start - GENPOOL_OFFSET;
+	memset(cpm_muram_addr(start), 0, size_alloc);
+	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+	if (!entry)
+		goto out1;
+	entry->start = start;
+	entry->size = size_alloc;
+	list_add(&entry->head, &muram_block_list);
 	spin_unlock_irqrestore(&cpm_muram_lock, flags);
 
-	return ret;
+	return start;
+out1:
+	gen_pool_free(muram_pool, start, size_alloc);
+out2:
+	spin_unlock_irqrestore(&cpm_muram_lock, flags);
+	return (unsigned long) -ENOMEM;
+
+
 }
-EXPORT_SYMBOL(cpm_muram_free);
+EXPORT_SYMBOL(cpm_muram_alloc_fixed);
 
 /**
- * cpm_muram_alloc_fixed - reserve a specific region of multi-user ram
- * @offset: the offset into the muram area to reserve
- * @size: the number of bytes to reserve
- *
- * This function returns "start" on success, -ENOMEM on failure.
- * Use cpm_dpram_addr() to get the virtual address of the area.
- * Use cpm_muram_free() to free the allocation.
+ * cpm_muram_free - free a chunk of multi-user ram
+ * @offset: The beginning of the chunk as returned by cpm_muram_alloc().
  */
-unsigned long cpm_muram_alloc_fixed(unsigned long offset, unsigned long size)
+int cpm_muram_free(unsigned long offset)
 {
-	unsigned long start;
 	unsigned long flags;
+	int size;
+	struct muram_block *tmp;
 
+	size = 0;
 	spin_lock_irqsave(&cpm_muram_lock, flags);
-	cpm_muram_info.alignment = 1;
-	start = rh_alloc_fixed(&cpm_muram_info, offset, size, "commproc");
+	list_for_each_entry(tmp, &muram_block_list, head) {
+		if (tmp->start == offset) {
+			size = tmp->size;
+			list_del(&tmp->head);
+			kfree(tmp);
+			break;
+		}
+	}
+	gen_pool_free(muram_pool, offset + GENPOOL_OFFSET, size);
 	spin_unlock_irqrestore(&cpm_muram_lock, flags);
 
-	return start;
+	return size;
 }
-EXPORT_SYMBOL(cpm_muram_alloc_fixed);
+EXPORT_SYMBOL(cpm_muram_free);
 
 /**
  * cpm_muram_addr - turn a muram offset into a virtual address
-- 
2.1.0.27.g96db324

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v10 4/5] QE/CPM: move muram management functions to qe_common
  2015-09-18  7:15 [PATCH v10 1/5] genalloc:support memory-allocation with bytes-alignment to genalloc Zhao Qiang
  2015-09-18  7:15 ` [PATCH v10 2/5] genalloc:support allocating specific region Zhao Qiang
  2015-09-18  7:15 ` [PATCH v10 3/5] CPM/QE: use genalloc to manage CPM/QE muram Zhao Qiang
@ 2015-09-18  7:15 ` Zhao Qiang
  2015-09-21 22:54   ` Scott Wood
  2015-09-18  7:15 ` [PATCH v10 5/5] QE: Move QE from arch/powerpc to drivers/soc Zhao Qiang
  3 siblings, 1 reply; 27+ messages in thread
From: Zhao Qiang @ 2015-09-18  7:15 UTC (permalink / raw)
  To: scottwood
  Cc: linux-kernel, linuxppc-dev, lauraa, X.xie, benh, leoli, paulus,
	Zhao Qiang

QE and CPM have the same muram, they use the same management
functions. Now QE support both ARM and PowerPC, it is necessary
to move QE to "driver/soc", so move the muram management functions
from cpm_common to qe_common for preparing to move QE code to "driver/soc"

Signed-off-by: Zhao Qiang <qiang.zhao@freescale.com>
---
Changes for v2:
	- no changes
Changes for v3:
	- no changes
Changes for v4:
	- no changes
Changes for v5:
	- no changes
Changes for v6:
	- using genalloc instead rheap to manage QE MURAM
	- remove qe_reset from platform file, using 
	- subsys_initcall to call qe_init function.
Changes for v7:
	- move this patch from 3/3 to 2/3
	- convert cpm with genalloc
	- check for gen_pool allocation failure
Changes for v8:
	- rebase
	- move BD_SC_* macro instead of copy
Changes for v9:
	- doesn't modify CPM, add a new patch to modify.
	- rebase
Changes for v10:
	- rebase

 arch/powerpc/include/asm/cpm.h            |  59 --------
 arch/powerpc/include/asm/qe.h             |  51 ++++++-
 arch/powerpc/platforms/83xx/km83xx.c      |   2 -
 arch/powerpc/platforms/83xx/mpc832x_mds.c |   2 -
 arch/powerpc/platforms/83xx/mpc832x_rdb.c |   2 -
 arch/powerpc/platforms/83xx/mpc836x_mds.c |   2 -
 arch/powerpc/platforms/83xx/mpc836x_rdk.c |   3 -
 arch/powerpc/platforms/85xx/common.c      |   1 -
 arch/powerpc/sysdev/cpm_common.c          | 206 +------------------------
 arch/powerpc/sysdev/qe_lib/Makefile       |   2 +-
 arch/powerpc/sysdev/qe_lib/qe.c           |  15 ++
 arch/powerpc/sysdev/qe_lib/qe_common.c    | 242 ++++++++++++++++++++++++++++++
 12 files changed, 302 insertions(+), 285 deletions(-)
 create mode 100644 arch/powerpc/sysdev/qe_lib/qe_common.c

diff --git a/arch/powerpc/include/asm/cpm.h b/arch/powerpc/include/asm/cpm.h
index 4398a6c..003a736 100644
--- a/arch/powerpc/include/asm/cpm.h
+++ b/arch/powerpc/include/asm/cpm.h
@@ -93,22 +93,6 @@ typedef struct cpm_buf_desc {
  */
 
 #define BD_SC_EMPTY	(0x8000)	/* Receive is empty */
-#define BD_SC_READY	(0x8000)	/* Transmit is ready */
-#define BD_SC_WRAP	(0x2000)	/* Last buffer descriptor */
-#define BD_SC_INTRPT	(0x1000)	/* Interrupt on change */
-#define BD_SC_LAST	(0x0800)	/* Last buffer in frame */
-#define BD_SC_TC	(0x0400)	/* Transmit CRC */
-#define BD_SC_CM	(0x0200)	/* Continuous mode */
-#define BD_SC_ID	(0x0100)	/* Rec'd too many idles */
-#define BD_SC_P		(0x0100)	/* xmt preamble */
-#define BD_SC_BR	(0x0020)	/* Break received */
-#define BD_SC_FR	(0x0010)	/* Framing error */
-#define BD_SC_PR	(0x0008)	/* Parity error */
-#define BD_SC_NAK	(0x0004)	/* NAK - did not respond */
-#define BD_SC_OV	(0x0002)	/* Overrun */
-#define BD_SC_UN	(0x0002)	/* Underrun */
-#define BD_SC_CD	(0x0001)	/* */
-#define BD_SC_CL	(0x0001)	/* Collision */
 
 /* Buffer descriptor control/status used by Ethernet receive.
  * Common to SCC and FCC.
@@ -155,49 +139,6 @@ typedef struct cpm_buf_desc {
  */
 #define BD_I2C_START		(0x0400)
 
-int cpm_muram_init(void);
-
-#if defined(CONFIG_CPM) || defined(CONFIG_QUICC_ENGINE)
-unsigned long cpm_muram_alloc(unsigned long size, unsigned long align);
-int cpm_muram_free(unsigned long offset);
-unsigned long cpm_muram_alloc_fixed(unsigned long offset, unsigned long size);
-void __iomem *cpm_muram_addr(unsigned long offset);
-unsigned long cpm_muram_offset(void __iomem *addr);
-dma_addr_t cpm_muram_dma(void __iomem *addr);
-#else
-static inline unsigned long cpm_muram_alloc(unsigned long size,
-					    unsigned long align)
-{
-	return -ENOSYS;
-}
-
-static inline int cpm_muram_free(unsigned long offset)
-{
-	return -ENOSYS;
-}
-
-static inline unsigned long cpm_muram_alloc_fixed(unsigned long offset,
-						  unsigned long size)
-{
-	return -ENOSYS;
-}
-
-static inline void __iomem *cpm_muram_addr(unsigned long offset)
-{
-	return NULL;
-}
-
-static inline unsigned long cpm_muram_offset(void __iomem *addr)
-{
-	return -ENOSYS;
-}
-
-static inline dma_addr_t cpm_muram_dma(void __iomem *addr)
-{
-	return 0;
-}
-#endif /* defined(CONFIG_CPM) || defined(CONFIG_QUICC_ENGINE) */
-
 #ifdef CONFIG_CPM
 int cpm_command(u32 command, u8 opcode);
 #else
diff --git a/arch/powerpc/include/asm/qe.h b/arch/powerpc/include/asm/qe.h
index 32b9bfa..aee968f 100644
--- a/arch/powerpc/include/asm/qe.h
+++ b/arch/powerpc/include/asm/qe.h
@@ -16,10 +16,13 @@
 #define _ASM_POWERPC_QE_H
 #ifdef __KERNEL__
 
+#include <linux/compiler.h>
 #include <linux/spinlock.h>
 #include <linux/errno.h>
 #include <linux/err.h>
-#include <asm/cpm.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/types.h>
 #include <asm/immap_qe.h>
 
 #define QE_NUM_OF_SNUM	256	/* There are 256 serial number in QE */
@@ -186,13 +189,24 @@ static inline int qe_alive_during_sleep(void)
 #endif
 }
 
-/* we actually use cpm_muram implementation, define this for convenience */
-#define qe_muram_init cpm_muram_init
-#define qe_muram_alloc cpm_muram_alloc
-#define qe_muram_alloc_fixed cpm_muram_alloc_fixed
-#define qe_muram_free cpm_muram_free
-#define qe_muram_addr cpm_muram_addr
-#define qe_muram_offset cpm_muram_offset
+/* we actually use qe_muram implementation, define this for convenience */
+#define cpm_muram_init qe_muram_init
+#define cpm_muram_alloc qe_muram_alloc
+#define cpm_muram_alloc_fixed qe_muram_alloc_fixed
+#define cpm_muram_free qe_muram_free
+#define cpm_muram_addr qe_muram_addr
+#define cpm_muram_offset qe_muram_offset
+
+int qe_muram_init(void);
+
+#if defined(CONFIG_QUICC_ENGINE)
+unsigned long qe_muram_alloc(unsigned long size, unsigned long align);
+unsigned long qe_muram_alloc_fixed(unsigned long offset, unsigned long size);
+int qe_muram_free(unsigned long offset);
+void __iomem *qe_muram_addr(unsigned long offset);
+unsigned long qe_muram_offset(void __iomem *addr);
+dma_addr_t qe_muram_dma(void __iomem *addr);
+#endif /* defined(CONFIG_QUICC_ENGINE) */
 
 /* Structure that defines QE firmware binary files.
  *
@@ -266,6 +280,27 @@ struct qe_bd {
 #define BD_STATUS_MASK	0xffff0000
 #define BD_LENGTH_MASK	0x0000ffff
 
+/* Buffer descriptor control/status used by serial
+ */
+
+#define BD_SC_EMPTY	(0x8000)	/* Receive is empty */
+#define BD_SC_READY	(0x8000)	/* Transmit is ready */
+#define BD_SC_WRAP	(0x2000)	/* Last buffer descriptor */
+#define BD_SC_INTRPT	(0x1000)	/* Interrupt on change */
+#define BD_SC_LAST	(0x0800)	/* Last buffer in frame */
+#define BD_SC_TC	(0x0400)	/* Transmit CRC */
+#define BD_SC_CM	(0x0200)	/* Continuous mode */
+#define BD_SC_ID	(0x0100)	/* Rec'd too many idles */
+#define BD_SC_P		(0x0100)	/* xmt preamble */
+#define BD_SC_BR	(0x0020)	/* Break received */
+#define BD_SC_FR	(0x0010)	/* Framing error */
+#define BD_SC_PR	(0x0008)	/* Parity error */
+#define BD_SC_NAK	(0x0004)	/* NAK - did not respond */
+#define BD_SC_OV	(0x0002)	/* Overrun */
+#define BD_SC_UN	(0x0002)	/* Underrun */
+#define BD_SC_CD	(0x0001)	/* */
+#define BD_SC_CL	(0x0001)	/* Collision */
+
 /* Alignment */
 #define QE_INTR_TABLE_ALIGN	16	/* ??? */
 #define QE_ALIGNMENT_OF_BD	8
diff --git a/arch/powerpc/platforms/83xx/km83xx.c b/arch/powerpc/platforms/83xx/km83xx.c
index bf4c447..ae111581 100644
--- a/arch/powerpc/platforms/83xx/km83xx.c
+++ b/arch/powerpc/platforms/83xx/km83xx.c
@@ -136,8 +136,6 @@ static void __init mpc83xx_km_setup_arch(void)
 	mpc83xx_setup_pci();
 
 #ifdef CONFIG_QUICC_ENGINE
-	qe_reset();
-
 	np = of_find_node_by_name(NULL, "par_io");
 	if (np != NULL) {
 		par_io_init(np);
diff --git a/arch/powerpc/platforms/83xx/mpc832x_mds.c b/arch/powerpc/platforms/83xx/mpc832x_mds.c
index 8d76220..aacc43f 100644
--- a/arch/powerpc/platforms/83xx/mpc832x_mds.c
+++ b/arch/powerpc/platforms/83xx/mpc832x_mds.c
@@ -74,8 +74,6 @@ static void __init mpc832x_sys_setup_arch(void)
 	mpc83xx_setup_pci();
 
 #ifdef CONFIG_QUICC_ENGINE
-	qe_reset();
-
 	if ((np = of_find_node_by_name(NULL, "par_io")) != NULL) {
 		par_io_init(np);
 		of_node_put(np);
diff --git a/arch/powerpc/platforms/83xx/mpc832x_rdb.c b/arch/powerpc/platforms/83xx/mpc832x_rdb.c
index eff5baa..0c7a43e 100644
--- a/arch/powerpc/platforms/83xx/mpc832x_rdb.c
+++ b/arch/powerpc/platforms/83xx/mpc832x_rdb.c
@@ -203,8 +203,6 @@ static void __init mpc832x_rdb_setup_arch(void)
 	mpc83xx_setup_pci();
 
 #ifdef CONFIG_QUICC_ENGINE
-	qe_reset();
-
 	if ((np = of_find_node_by_name(NULL, "par_io")) != NULL) {
 		par_io_init(np);
 		of_node_put(np);
diff --git a/arch/powerpc/platforms/83xx/mpc836x_mds.c b/arch/powerpc/platforms/83xx/mpc836x_mds.c
index 1a26d2f..eb24abd 100644
--- a/arch/powerpc/platforms/83xx/mpc836x_mds.c
+++ b/arch/powerpc/platforms/83xx/mpc836x_mds.c
@@ -82,8 +82,6 @@ static void __init mpc836x_mds_setup_arch(void)
 	mpc83xx_setup_pci();
 
 #ifdef CONFIG_QUICC_ENGINE
-	qe_reset();
-
 	if ((np = of_find_node_by_name(NULL, "par_io")) != NULL) {
 		par_io_init(np);
 		of_node_put(np);
diff --git a/arch/powerpc/platforms/83xx/mpc836x_rdk.c b/arch/powerpc/platforms/83xx/mpc836x_rdk.c
index b63b42d..823e370 100644
--- a/arch/powerpc/platforms/83xx/mpc836x_rdk.c
+++ b/arch/powerpc/platforms/83xx/mpc836x_rdk.c
@@ -35,9 +35,6 @@ static void __init mpc836x_rdk_setup_arch(void)
 		ppc_md.progress("mpc836x_rdk_setup_arch()", 0);
 
 	mpc83xx_setup_pci();
-#ifdef CONFIG_QUICC_ENGINE
-	qe_reset();
-#endif
 }
 
 /*
diff --git a/arch/powerpc/platforms/85xx/common.c b/arch/powerpc/platforms/85xx/common.c
index 7bfb9b1..0f91edc 100644
--- a/arch/powerpc/platforms/85xx/common.c
+++ b/arch/powerpc/platforms/85xx/common.c
@@ -105,7 +105,6 @@ void __init mpc85xx_qe_init(void)
 		return;
 	}
 
-	qe_reset();
 	of_node_put(np);
 
 }
diff --git a/arch/powerpc/sysdev/cpm_common.c b/arch/powerpc/sysdev/cpm_common.c
index 453d18c..22a50ac 100644
--- a/arch/powerpc/sysdev/cpm_common.c
+++ b/arch/powerpc/sysdev/cpm_common.c
@@ -17,7 +17,6 @@
  * published by the Free Software Foundation.
  */
 
-#include <linux/genalloc.h>
 #include <linux/init.h>
 #include <linux/of_device.h>
 #include <linux/spinlock.h>
@@ -29,6 +28,7 @@
 #include <asm/udbg.h>
 #include <asm/io.h>
 #include <asm/cpm.h>
+#include <asm/qe.h>
 
 #include <mm/mmu_decl.h>
 
@@ -65,213 +65,9 @@ void __init udbg_init_cpm(void)
 }
 #endif
 
-static struct gen_pool *muram_pool;
-static struct genpool_data_align muram_pool_data;
-static struct genpool_data_fixed muram_pool_data_fixed;
-static spinlock_t cpm_muram_lock;
 static u8 __iomem *muram_vbase;
 static phys_addr_t muram_pbase;
 
-struct muram_block {
-	struct list_head head;
-	unsigned long start;
-	int size;
-};
-
-static LIST_HEAD(muram_block_list);
-
-/* max address size we deal with */
-#define OF_MAX_ADDR_CELLS	4
-#define GENPOOL_OFFSET		4096
-
-int cpm_muram_init(void)
-{
-	struct device_node *np;
-	struct resource r;
-	u32 zero[OF_MAX_ADDR_CELLS] = {};
-	resource_size_t max = 0;
-	int i = 0;
-	int ret = 0;
-
-	if (muram_pbase)
-		return 0;
-
-	np = of_find_compatible_node(NULL, NULL, "fsl,cpm-muram-data");
-	if (!np) {
-		/* try legacy bindings */
-		np = of_find_node_by_name(NULL, "data-only");
-		if (!np) {
-			pr_err("Cannot find CPM muram data node");
-			ret = -ENODEV;
-			goto out;
-		}
-	}
-
-	muram_pool = gen_pool_create(1, -1);
-	muram_pbase = of_translate_address(np, zero);
-	if (muram_pbase == (phys_addr_t)OF_BAD_ADDR) {
-		pr_err("Cannot translate zero through CPM muram node");
-		ret = -ENODEV;
-		goto err;
-	}
-
-	while (of_address_to_resource(np, i++, &r) == 0) {
-		if (r.end > max)
-			max = r.end;
-		ret = gen_pool_add(muram_pool, r.start - muram_pbase +
-				   GENPOOL_OFFSET, resource_size(&r), -1);
-		if (ret) {
-				pr_err("QE: couldn't add muram to pool!\n");
-				goto err;
-			}
-
-	}
-
-	muram_vbase = ioremap(muram_pbase, max - muram_pbase + 1);
-	if (!muram_vbase) {
-		pr_err("Cannot map QE muram");
-		ret = -ENOMEM;
-		goto err;
-	}
-	goto out;
-err:
-	gen_pool_destroy(muram_pool);
-out:
-	of_node_put(np);
-	return ret;
-}
-
-/*
- * cpm_muram_alloc - allocate the requested size worth of multi-user ram
- * @size: number of bytes to allocate
- * @align: requested alignment, in bytes
- *
- * This function returns an offset into the muram area.
- */
-unsigned long cpm_muram_alloc(unsigned long size, unsigned long align)
-{
-	unsigned long start;
-	unsigned long flags;
-	struct muram_block *entry;
-
-	spin_lock_irqsave(&cpm_muram_lock, flags);
-	muram_pool_data.align = align;
-	gen_pool_set_algo(muram_pool, gen_pool_first_fit_align,
-			  &muram_pool_data);
-	start = gen_pool_alloc(muram_pool, size);
-	if (!start)
-		goto out2;
-	start = start - GENPOOL_OFFSET;
-	memset(cpm_muram_addr(start), 0, size);
-	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
-	if (!entry)
-		goto out1;
-	entry->start = start;
-	entry->size = size;
-	list_add(&entry->head, &muram_block_list);
-	spin_unlock_irqrestore(&cpm_muram_lock, flags);
-
-	return start;
-out1:
-	gen_pool_free(muram_pool, start, size);
-out2:
-	spin_unlock_irqrestore(&cpm_muram_lock, flags);
-	return (unsigned long) -ENOMEM;
-}
-EXPORT_SYMBOL(cpm_muram_alloc);
-
-/*
- * cpm_muram_alloc_fixed - reserve a specific region of multi-user ram
- * @size: number of bytes to allocate
- * @offset: offset of allocation start address
- *
- * This function returns an offset into the muram area.
- */
-unsigned long cpm_muram_alloc_fixed(unsigned long offset, unsigned long size)
-{
-
-	unsigned long start;
-	unsigned long flags;
-	unsigned long size_alloc = size;
-	struct muram_block *entry;
-	int end_bit;
-	int order = muram_pool->min_alloc_order;
-
-	spin_lock_irqsave(&cpm_muram_lock, flags);
-	end_bit = (offset >> order) + ((size + (1UL << order) - 1) >> order);
-	if ((offset + size) > (end_bit << order))
-		size_alloc = size + (1UL << order);
-
-	muram_pool_data_fixed.offset = offset + GENPOOL_OFFSET;
-	gen_pool_set_algo(muram_pool, gen_pool_fixed_alloc,
-			  &muram_pool_data_fixed);
-	start = gen_pool_alloc(muram_pool, size_alloc);
-	if (!start)
-		goto out2;
-	start = start - GENPOOL_OFFSET;
-	memset(cpm_muram_addr(start), 0, size_alloc);
-	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
-	if (!entry)
-		goto out1;
-	entry->start = start;
-	entry->size = size_alloc;
-	list_add(&entry->head, &muram_block_list);
-	spin_unlock_irqrestore(&cpm_muram_lock, flags);
-
-	return start;
-out1:
-	gen_pool_free(muram_pool, start, size_alloc);
-out2:
-	spin_unlock_irqrestore(&cpm_muram_lock, flags);
-	return (unsigned long) -ENOMEM;
-
-
-}
-EXPORT_SYMBOL(cpm_muram_alloc_fixed);
-
-/**
- * cpm_muram_free - free a chunk of multi-user ram
- * @offset: The beginning of the chunk as returned by cpm_muram_alloc().
- */
-int cpm_muram_free(unsigned long offset)
-{
-	unsigned long flags;
-	int size;
-	struct muram_block *tmp;
-
-	size = 0;
-	spin_lock_irqsave(&cpm_muram_lock, flags);
-	list_for_each_entry(tmp, &muram_block_list, head) {
-		if (tmp->start == offset) {
-			size = tmp->size;
-			list_del(&tmp->head);
-			kfree(tmp);
-			break;
-		}
-	}
-	gen_pool_free(muram_pool, offset + GENPOOL_OFFSET, size);
-	spin_unlock_irqrestore(&cpm_muram_lock, flags);
-
-	return size;
-}
-EXPORT_SYMBOL(cpm_muram_free);
-
-/**
- * cpm_muram_addr - turn a muram offset into a virtual address
- * @offset: muram offset to convert
- */
-void __iomem *cpm_muram_addr(unsigned long offset)
-{
-	return muram_vbase + offset;
-}
-EXPORT_SYMBOL(cpm_muram_addr);
-
-unsigned long cpm_muram_offset(void __iomem *addr)
-{
-	return addr - (void __iomem *)muram_vbase;
-}
-EXPORT_SYMBOL(cpm_muram_offset);
-
 /**
  * cpm_muram_dma - turn a muram virtual address into a DMA address
  * @offset: virtual address from cpm_muram_addr() to convert
diff --git a/arch/powerpc/sysdev/qe_lib/Makefile b/arch/powerpc/sysdev/qe_lib/Makefile
index f1855c1..9507a27 100644
--- a/arch/powerpc/sysdev/qe_lib/Makefile
+++ b/arch/powerpc/sysdev/qe_lib/Makefile
@@ -1,7 +1,7 @@
 #
 # Makefile for the linux ppc-specific parts of QE
 #
-obj-$(CONFIG_QUICC_ENGINE)+= qe.o qe_ic.o qe_io.o
+obj-$(CONFIG_QUICC_ENGINE)+= qe.o qe_common.o qe_ic.o qe_io.o
 
 obj-$(CONFIG_UCC)	+= ucc.o
 obj-$(CONFIG_UCC_SLOW)	+= ucc_slow.o
diff --git a/arch/powerpc/sysdev/qe_lib/qe.c b/arch/powerpc/sysdev/qe_lib/qe.c
index c2518cd..3f9f596 100644
--- a/arch/powerpc/sysdev/qe_lib/qe.c
+++ b/arch/powerpc/sysdev/qe_lib/qe.c
@@ -671,6 +671,21 @@ unsigned int qe_get_num_of_snums(void)
 }
 EXPORT_SYMBOL(qe_get_num_of_snums);
 
+static int __init qe_init(void)
+{
+	struct device_node *np;
+
+	np = of_find_compatible_node(NULL, NULL, "fsl,qe");
+	if (!np) {
+		pr_err("%s: Could not find Quicc Engine node\n", __func__);
+		return -ENODEV;
+	}
+	qe_reset();
+	of_node_put(np);
+	return 0;
+}
+subsys_initcall(qe_init);
+
 #if defined(CONFIG_SUSPEND) && defined(CONFIG_PPC_85xx)
 static int qe_resume(struct platform_device *ofdev)
 {
diff --git a/arch/powerpc/sysdev/qe_lib/qe_common.c b/arch/powerpc/sysdev/qe_lib/qe_common.c
new file mode 100644
index 0000000..a0b229f
--- /dev/null
+++ b/arch/powerpc/sysdev/qe_lib/qe_common.c
@@ -0,0 +1,242 @@
+/*
+ * Freescale QE common code
+ *
+ * Author: Zhao Qiang  <qiang.zhao@freescale.com>
+ *
+ * Copyright 2015 Freescale Semiconductor, Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ */
+
+#include <linux/genalloc.h>
+#include <linux/list.h>
+#include <linux/init.h>
+#include <linux/of_device.h>
+#include <linux/spinlock.h>
+#include <linux/export.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/slab.h>
+
+#include <linux/io.h>
+#include <asm/qe.h>
+
+static struct gen_pool *muram_pool;
+static struct genpool_data_align muram_pool_data;
+static struct genpool_data_fixed muram_pool_data_fixed;
+static spinlock_t qe_muram_lock;
+static u8 __iomem *muram_vbase;
+static phys_addr_t muram_pbase;
+
+struct muram_block {
+	struct list_head head;
+	unsigned long start;
+	int size;
+};
+
+static LIST_HEAD(muram_block_list);
+
+/* max address size we deal with */
+#define OF_MAX_ADDR_CELLS	4
+#define GENPOOL_OFFSET		4096
+
+int qe_muram_init(void)
+{
+	struct device_node *np;
+	struct resource r;
+	u32 zero[OF_MAX_ADDR_CELLS] = {};
+	resource_size_t max = 0;
+	int i = 0;
+	int ret = 0;
+
+	if (muram_pbase)
+		return 0;
+
+	np = of_find_compatible_node(NULL, NULL, "fsl,qe-muram-data");
+	if (!np) {
+		/* try legacy bindings */
+		np = of_find_node_by_name(NULL, "data-only");
+		if (!np) {
+			pr_err("Cannot find CPM muram data node");
+			ret = -ENODEV;
+			goto out;
+		}
+	}
+
+	muram_pool = gen_pool_create(1, -1);
+	muram_pbase = of_translate_address(np, zero);
+	if (muram_pbase == (phys_addr_t)OF_BAD_ADDR) {
+		pr_err("Cannot translate zero through CPM muram node");
+		ret = -ENODEV;
+		goto err;
+	}
+
+	while (of_address_to_resource(np, i++, &r) == 0) {
+		if (r.end > max)
+			max = r.end;
+		ret = gen_pool_add(muram_pool, r.start - muram_pbase +
+				   GENPOOL_OFFSET, resource_size(&r), -1);
+		if (ret) {
+				pr_err("QE: couldn't add muram to pool!\n");
+				goto err;
+			}
+
+	}
+
+	muram_vbase = ioremap(muram_pbase, max - muram_pbase + 1);
+	if (!muram_vbase) {
+		pr_err("Cannot map QE muram");
+		ret = -ENOMEM;
+		goto err;
+	}
+	goto out;
+err:
+	gen_pool_destroy(muram_pool);
+out:
+	of_node_put(np);
+	return ret;
+}
+
+/*
+ * qe_muram_alloc - allocate the requested size worth of multi-user ram
+ * @size: number of bytes to allocate
+ * @align: requested alignment, in bytes
+ *
+ * This function returns an offset into the muram area.
+ */
+unsigned long qe_muram_alloc(unsigned long size, unsigned long align)
+{
+	unsigned long start;
+	unsigned long flags;
+	struct muram_block *entry;
+
+	spin_lock_irqsave(&qe_muram_lock, flags);
+	muram_pool_data.align = align;
+	gen_pool_set_algo(muram_pool, gen_pool_first_fit_align,
+			  &muram_pool_data);
+	start = gen_pool_alloc(muram_pool, size);
+	if (!start)
+		goto out2;
+	start = start - GENPOOL_OFFSET;
+	memset(qe_muram_addr(start), 0, size);
+	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+	if (!entry)
+		goto out1;
+	entry->start = start;
+	entry->size = size;
+	list_add(&entry->head, &muram_block_list);
+	spin_unlock_irqrestore(&qe_muram_lock, flags);
+
+	return start;
+out1:
+	gen_pool_free(muram_pool, start, size);
+out2:
+	spin_unlock_irqrestore(&qe_muram_lock, flags);
+	return (unsigned long) -ENOMEM;
+}
+EXPORT_SYMBOL(qe_muram_alloc);
+
+/*
+ * qe_muram_alloc_fixed - reserve a specific region of multi-user ram
+ * @size: number of bytes to allocate
+ * @offset: offset of allocation start address
+ *
+ * This function returns an offset into the muram area.
+ */
+unsigned long qe_muram_alloc_fixed(unsigned long offset, unsigned long size)
+{
+
+	unsigned long start;
+	unsigned long flags;
+	unsigned long size_alloc = size;
+	struct muram_block *entry;
+	int end_bit;
+	int order = muram_pool->min_alloc_order;
+
+	spin_lock_irqsave(&qe_muram_lock, flags);
+	end_bit = (offset >> order) + ((size + (1UL << order) - 1) >> order);
+	if ((offset + size) > (end_bit << order))
+		size_alloc = size + (1UL << order);
+
+	muram_pool_data_fixed.offset = offset + GENPOOL_OFFSET;
+	gen_pool_set_algo(muram_pool, gen_pool_fixed_alloc,
+			  &muram_pool_data_fixed);
+	start = gen_pool_alloc(muram_pool, size_alloc);
+	if (!start)
+		goto out2;
+	start = start - GENPOOL_OFFSET;
+	memset(qe_muram_addr(start), 0, size_alloc);
+	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
+	if (!entry)
+		goto out1;
+	entry->start = start;
+	entry->size = size_alloc;
+	list_add(&entry->head, &muram_block_list);
+	spin_unlock_irqrestore(&qe_muram_lock, flags);
+
+	return start;
+out1:
+	gen_pool_free(muram_pool, start, size_alloc);
+out2:
+	spin_unlock_irqrestore(&qe_muram_lock, flags);
+	return (unsigned long) -ENOMEM;
+
+
+}
+EXPORT_SYMBOL(qe_muram_alloc_fixed);
+
+/**
+ * qe_muram_free - free a chunk of multi-user ram
+ * @offset: The beginning of the chunk as returned by qe_muram_alloc().
+ */
+int qe_muram_free(unsigned long offset)
+{
+	unsigned long flags;
+	int size;
+	struct muram_block *tmp;
+
+	size = 0;
+	spin_lock_irqsave(&qe_muram_lock, flags);
+	list_for_each_entry(tmp, &muram_block_list, head) {
+		if (tmp->start == offset) {
+			size = tmp->size;
+			list_del(&tmp->head);
+			kfree(tmp);
+			break;
+		}
+	}
+	gen_pool_free(muram_pool, offset + GENPOOL_OFFSET, size);
+	spin_unlock_irqrestore(&qe_muram_lock, flags);
+
+	return size;
+}
+EXPORT_SYMBOL(qe_muram_free);
+
+/**
+ * qe_muram_addr - turn a muram offset into a virtual address
+ * @offset: muram offset to convert
+ */
+void __iomem *qe_muram_addr(unsigned long offset)
+{
+	return muram_vbase + offset;
+}
+EXPORT_SYMBOL(qe_muram_addr);
+
+unsigned long qe_muram_offset(void __iomem *addr)
+{
+	return addr - (void __iomem *)muram_vbase;
+}
+EXPORT_SYMBOL(qe_muram_offset);
+
+/**
+ * qe_muram_dma - turn a muram virtual address into a DMA address
+ * @offset: virtual address from qe_muram_addr() to convert
+ */
+dma_addr_t qe_muram_dma(void __iomem *addr)
+{
+	return muram_pbase + ((u8 __iomem *)addr - muram_vbase);
+}
+EXPORT_SYMBOL(qe_muram_dma);
-- 
2.1.0.27.g96db324

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v10 5/5] QE: Move QE from arch/powerpc to drivers/soc
  2015-09-18  7:15 [PATCH v10 1/5] genalloc:support memory-allocation with bytes-alignment to genalloc Zhao Qiang
                   ` (2 preceding siblings ...)
  2015-09-18  7:15 ` [PATCH v10 4/5] QE/CPM: move muram management functions to qe_common Zhao Qiang
@ 2015-09-18  7:15 ` Zhao Qiang
  2015-09-21 22:56   ` Scott Wood
  3 siblings, 1 reply; 27+ messages in thread
From: Zhao Qiang @ 2015-09-18  7:15 UTC (permalink / raw)
  To: scottwood
  Cc: linux-kernel, linuxppc-dev, lauraa, X.xie, benh, leoli, paulus,
	Zhao Qiang

ls1 has qe and ls1 has arm cpu.
move qe from arch/powerpc to drivers/soc/fsl
to adapt to powerpc and arm

Signed-off-by: Zhao Qiang <qiang.zhao@freescale.com>
---
Changes for v2:
	- move code to driver/soc
Changes for v3:
	- change drivers/soc/qe to drivers/soc/fsl-qe
Changes for v4:
	- move drivers/soc/fsl-qe to drivers/soc/fsl/qe
	- move head files for qe from include/linux/fsl to include/soc/fsl
	- move qe_ic.c to drivers/irqchip/
Changes for v5:
	- update MAINTAINERS
Changes for v6:
	- rebase
Changes for v7:
	- move this patch from 2/3 to 3/3
Changes for v8:
	- Nil 
Changes for v9:
	- Nil 
Changes for v10:
	- Nil 

 MAINTAINERS                                        |  5 ++--
 arch/powerpc/platforms/83xx/km83xx.c               |  4 +--
 arch/powerpc/platforms/83xx/misc.c                 |  2 +-
 arch/powerpc/platforms/83xx/mpc832x_mds.c          |  4 +--
 arch/powerpc/platforms/83xx/mpc832x_rdb.c          |  4 +--
 arch/powerpc/platforms/83xx/mpc836x_mds.c          |  4 +--
 arch/powerpc/platforms/83xx/mpc836x_rdk.c          |  4 +--
 arch/powerpc/platforms/85xx/common.c               |  2 +-
 arch/powerpc/platforms/85xx/corenet_generic.c      |  2 +-
 arch/powerpc/platforms/85xx/mpc85xx_mds.c          |  4 +--
 arch/powerpc/platforms/85xx/mpc85xx_rdb.c          |  4 +--
 arch/powerpc/platforms/85xx/twr_p102x.c            |  4 +--
 arch/powerpc/platforms/Kconfig                     | 20 -------------
 arch/powerpc/sysdev/cpm_common.c                   |  2 +-
 arch/powerpc/sysdev/qe_lib/Kconfig                 | 22 ++++-----------
 arch/powerpc/sysdev/qe_lib/Makefile                |  6 +---
 arch/powerpc/sysdev/qe_lib/gpio.c                  |  2 +-
 arch/powerpc/sysdev/qe_lib/qe_io.c                 |  2 +-
 arch/powerpc/sysdev/qe_lib/usb.c                   |  4 +--
 drivers/irqchip/Makefile                           |  1 +
 .../sysdev/qe_lib => drivers/irqchip}/qe_ic.c      |  2 +-
 .../sysdev/qe_lib => drivers/irqchip}/qe_ic.h      |  4 +--
 drivers/net/ethernet/freescale/fsl_pq_mdio.c       |  2 +-
 drivers/net/ethernet/freescale/ucc_geth.c          |  8 +++---
 drivers/net/ethernet/freescale/ucc_geth.h          |  8 +++---
 drivers/soc/Kconfig                                |  1 +
 drivers/soc/Makefile                               |  1 +
 drivers/soc/fsl/Makefile                           |  5 ++++
 drivers/soc/fsl/qe/Kconfig                         | 33 ++++++++++++++++++++++
 drivers/soc/fsl/qe/Makefile                        |  9 ++++++
 .../sysdev/qe_lib => drivers/soc/fsl/qe}/qe.c      |  4 +--
 .../qe_lib => drivers/soc/fsl/qe}/qe_common.c      |  2 +-
 .../sysdev/qe_lib => drivers/soc/fsl/qe}/ucc.c     |  6 ++--
 .../qe_lib => drivers/soc/fsl/qe}/ucc_fast.c       |  8 +++---
 .../qe_lib => drivers/soc/fsl/qe}/ucc_slow.c       |  8 +++---
 drivers/spi/spi-fsl-cpm.c                          |  2 +-
 drivers/tty/serial/ucc_uart.c                      |  2 +-
 drivers/usb/gadget/udc/fsl_qe_udc.c                |  2 +-
 drivers/usb/host/fhci-hcd.c                        |  2 +-
 drivers/usb/host/fhci-hub.c                        |  2 +-
 drivers/usb/host/fhci-sched.c                      |  2 +-
 drivers/usb/host/fhci.h                            |  4 +--
 .../include/asm => include/linux/fsl/qe}/qe_ic.h   |  0
 .../include/asm => include/soc/fsl/qe}/immap_qe.h  |  0
 .../include/asm => include/soc/fsl/qe}/qe.h        |  2 +-
 .../include/asm => include/soc/fsl/qe}/ucc.h       |  4 +--
 .../include/asm => include/soc/fsl/qe}/ucc_fast.h  |  6 ++--
 .../include/asm => include/soc/fsl/qe}/ucc_slow.h  |  6 ++--
 48 files changed, 127 insertions(+), 110 deletions(-)
 rename {arch/powerpc/sysdev/qe_lib => drivers/irqchip}/qe_ic.c (99%)
 rename {arch/powerpc/sysdev/qe_lib => drivers/irqchip}/qe_ic.h (97%)
 create mode 100644 drivers/soc/fsl/Makefile
 create mode 100644 drivers/soc/fsl/qe/Kconfig
 create mode 100644 drivers/soc/fsl/qe/Makefile
 rename {arch/powerpc/sysdev/qe_lib => drivers/soc/fsl/qe}/qe.c (99%)
 rename {arch/powerpc/sysdev/qe_lib => drivers/soc/fsl/qe}/qe_common.c (99%)
 rename {arch/powerpc/sysdev/qe_lib => drivers/soc/fsl/qe}/ucc.c (98%)
 rename {arch/powerpc/sysdev/qe_lib => drivers/soc/fsl/qe}/ucc_fast.c (98%)
 rename {arch/powerpc/sysdev/qe_lib => drivers/soc/fsl/qe}/ucc_slow.c (98%)
 rename {arch/powerpc/include/asm => include/linux/fsl/qe}/qe_ic.h (100%)
 rename {arch/powerpc/include/asm => include/soc/fsl/qe}/immap_qe.h (100%)
 rename {arch/powerpc/include/asm => include/soc/fsl/qe}/qe.h (99%)
 rename {arch/powerpc/include/asm => include/soc/fsl/qe}/ucc.h (96%)
 rename {arch/powerpc/include/asm => include/soc/fsl/qe}/ucc_fast.h (98%)
 rename {arch/powerpc/include/asm => include/soc/fsl/qe}/ucc_slow.h (99%)

diff --git a/MAINTAINERS b/MAINTAINERS
index 562ae4e..c688e61 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -4155,8 +4155,9 @@ F:	include/linux/fs_enet_pd.h
 FREESCALE QUICC ENGINE LIBRARY
 L:	linuxppc-dev@lists.ozlabs.org
 S:	Orphan
-F:	arch/powerpc/sysdev/qe_lib/
-F:	arch/powerpc/include/asm/*qe.h
+F:	drivers/soc/fsl/qe/
+F:	include/soc/fsl/*qe*.h
+F:	include/soc/fsl/*ucc*.h
 
 FREESCALE USB PERIPHERAL DRIVERS
 M:	Li Yang <leoli@freescale.com>
diff --git a/arch/powerpc/platforms/83xx/km83xx.c b/arch/powerpc/platforms/83xx/km83xx.c
index ae111581..7ecd758 100644
--- a/arch/powerpc/platforms/83xx/km83xx.c
+++ b/arch/powerpc/platforms/83xx/km83xx.c
@@ -37,8 +37,8 @@
 #include <asm/udbg.h>
 #include <sysdev/fsl_soc.h>
 #include <sysdev/fsl_pci.h>
-#include <asm/qe.h>
-#include <asm/qe_ic.h>
+#include <soc/fsl/qe/qe.h>
+#include <linux/fsl/qe/qe_ic.h>
 
 #include "mpc83xx.h"
 
diff --git a/arch/powerpc/platforms/83xx/misc.c b/arch/powerpc/platforms/83xx/misc.c
index ef9d01a..eacf34b 100644
--- a/arch/powerpc/platforms/83xx/misc.c
+++ b/arch/powerpc/platforms/83xx/misc.c
@@ -17,7 +17,7 @@
 #include <asm/io.h>
 #include <asm/hw_irq.h>
 #include <asm/ipic.h>
-#include <asm/qe_ic.h>
+#include <linux/fsl/qe/qe_ic.h>
 #include <sysdev/fsl_soc.h>
 #include <sysdev/fsl_pci.h>
 
diff --git a/arch/powerpc/platforms/83xx/mpc832x_mds.c b/arch/powerpc/platforms/83xx/mpc832x_mds.c
index aacc43f..20dce79 100644
--- a/arch/powerpc/platforms/83xx/mpc832x_mds.c
+++ b/arch/powerpc/platforms/83xx/mpc832x_mds.c
@@ -36,8 +36,8 @@
 #include <asm/udbg.h>
 #include <sysdev/fsl_soc.h>
 #include <sysdev/fsl_pci.h>
-#include <asm/qe.h>
-#include <asm/qe_ic.h>
+#include <soc/fsl/qe/qe.h>
+#include <linux/fsl/qe/qe_ic.h>
 
 #include "mpc83xx.h"
 
diff --git a/arch/powerpc/platforms/83xx/mpc832x_rdb.c b/arch/powerpc/platforms/83xx/mpc832x_rdb.c
index 0c7a43e..2e6a6a4 100644
--- a/arch/powerpc/platforms/83xx/mpc832x_rdb.c
+++ b/arch/powerpc/platforms/83xx/mpc832x_rdb.c
@@ -25,8 +25,8 @@
 #include <asm/time.h>
 #include <asm/ipic.h>
 #include <asm/udbg.h>
-#include <asm/qe.h>
-#include <asm/qe_ic.h>
+#include <soc/fsl/qe/qe.h>
+#include <linux/fsl/qe/qe_ic.h>
 #include <sysdev/fsl_soc.h>
 #include <sysdev/fsl_pci.h>
 
diff --git a/arch/powerpc/platforms/83xx/mpc836x_mds.c b/arch/powerpc/platforms/83xx/mpc836x_mds.c
index eb24abd..b1b8ab8 100644
--- a/arch/powerpc/platforms/83xx/mpc836x_mds.c
+++ b/arch/powerpc/platforms/83xx/mpc836x_mds.c
@@ -44,8 +44,8 @@
 #include <sysdev/fsl_soc.h>
 #include <sysdev/fsl_pci.h>
 #include <sysdev/simple_gpio.h>
-#include <asm/qe.h>
-#include <asm/qe_ic.h>
+#include <soc/fsl/qe/qe.h>
+#include <linux/fsl/qe/qe_ic.h>
 
 #include "mpc83xx.h"
 
diff --git a/arch/powerpc/platforms/83xx/mpc836x_rdk.c b/arch/powerpc/platforms/83xx/mpc836x_rdk.c
index 823e370..9a5a00d 100644
--- a/arch/powerpc/platforms/83xx/mpc836x_rdk.c
+++ b/arch/powerpc/platforms/83xx/mpc836x_rdk.c
@@ -20,8 +20,8 @@
 #include <asm/time.h>
 #include <asm/ipic.h>
 #include <asm/udbg.h>
-#include <asm/qe.h>
-#include <asm/qe_ic.h>
+#include <soc/fsl/qe/qe.h>
+#include <linux/fsl/qe/qe_ic.h>
 #include <sysdev/fsl_soc.h>
 #include <sysdev/fsl_pci.h>
 
diff --git a/arch/powerpc/platforms/85xx/common.c b/arch/powerpc/platforms/85xx/common.c
index 0f91edc..d81ea0c 100644
--- a/arch/powerpc/platforms/85xx/common.c
+++ b/arch/powerpc/platforms/85xx/common.c
@@ -9,7 +9,7 @@
 #include <linux/of_irq.h>
 #include <linux/of_platform.h>
 
-#include <asm/qe.h>
+#include <soc/fsl/qe/qe.h>
 #include <sysdev/cpm2_pic.h>
 
 #include "mpc85xx.h"
diff --git a/arch/powerpc/platforms/85xx/corenet_generic.c b/arch/powerpc/platforms/85xx/corenet_generic.c
index bd839dc..1ecbf7f 100644
--- a/arch/powerpc/platforms/85xx/corenet_generic.c
+++ b/arch/powerpc/platforms/85xx/corenet_generic.c
@@ -27,7 +27,7 @@
 #include <asm/udbg.h>
 #include <asm/mpic.h>
 #include <asm/ehv_pic.h>
-#include <asm/qe_ic.h>
+#include <linux/fsl/qe/qe_ic.h>
 
 #include <linux/of_platform.h>
 #include <sysdev/fsl_soc.h>
diff --git a/arch/powerpc/platforms/85xx/mpc85xx_mds.c b/arch/powerpc/platforms/85xx/mpc85xx_mds.c
index a392e94..ea4d4f3 100644
--- a/arch/powerpc/platforms/85xx/mpc85xx_mds.c
+++ b/arch/powerpc/platforms/85xx/mpc85xx_mds.c
@@ -47,8 +47,8 @@
 #include <sysdev/fsl_soc.h>
 #include <sysdev/fsl_pci.h>
 #include <sysdev/simple_gpio.h>
-#include <asm/qe.h>
-#include <asm/qe_ic.h>
+#include <soc/fsl/qe/qe.h>
+#include <linux/fsl/qe/qe_ic.h>
 #include <asm/mpic.h>
 #include <asm/swiotlb.h>
 #include <asm/fsl_guts.h>
diff --git a/arch/powerpc/platforms/85xx/mpc85xx_rdb.c b/arch/powerpc/platforms/85xx/mpc85xx_rdb.c
index e358bed..0c5e313 100644
--- a/arch/powerpc/platforms/85xx/mpc85xx_rdb.c
+++ b/arch/powerpc/platforms/85xx/mpc85xx_rdb.c
@@ -25,8 +25,8 @@
 #include <asm/prom.h>
 #include <asm/udbg.h>
 #include <asm/mpic.h>
-#include <asm/qe.h>
-#include <asm/qe_ic.h>
+#include <soc/fsl/qe/qe.h>
+#include <linux/fsl/qe/qe_ic.h>
 #include <asm/fsl_guts.h>
 
 #include <sysdev/fsl_soc.h>
diff --git a/arch/powerpc/platforms/85xx/twr_p102x.c b/arch/powerpc/platforms/85xx/twr_p102x.c
index 30e002f..a47654e 100644
--- a/arch/powerpc/platforms/85xx/twr_p102x.c
+++ b/arch/powerpc/platforms/85xx/twr_p102x.c
@@ -21,8 +21,8 @@
 #include <asm/pci-bridge.h>
 #include <asm/udbg.h>
 #include <asm/mpic.h>
-#include <asm/qe.h>
-#include <asm/qe_ic.h>
+#include <soc/fsl/qe/qe.h>
+#include <linux/fsl/qe/qe_ic.h>
 #include <asm/fsl_guts.h>
 
 #include <sysdev/fsl_soc.h>
diff --git a/arch/powerpc/platforms/Kconfig b/arch/powerpc/platforms/Kconfig
index 01f98a2..c9541a5 100644
--- a/arch/powerpc/platforms/Kconfig
+++ b/arch/powerpc/platforms/Kconfig
@@ -272,26 +272,6 @@ config TAU_AVERAGE
 
 	  If in doubt, say N here.
 
-config QUICC_ENGINE
-	bool "Freescale QUICC Engine (QE) Support"
-	depends on FSL_SOC && PPC32
-	select PPC_LIB_RHEAP
-	select GENERIC_ALLOCATOR
-	select CRC32
-	help
-	  The QUICC Engine (QE) is a new generation of communications
-	  coprocessors on Freescale embedded CPUs (akin to CPM in older chips).
-	  Selecting this option means that you wish to build a kernel
-	  for a machine with a QE coprocessor.
-
-config QE_GPIO
-	bool "QE GPIO support"
-	depends on QUICC_ENGINE
-	select ARCH_REQUIRE_GPIOLIB
-	help
-	  Say Y here if you're going to use hardware that connects to the
-	  QE GPIOs.
-
 config CPM2
 	bool "Enable support for the CPM2 (Communications Processor Module)"
 	depends on (FSL_SOC_BOOKE && PPC32) || 8260
diff --git a/arch/powerpc/sysdev/cpm_common.c b/arch/powerpc/sysdev/cpm_common.c
index 22a50ac..1809ffd 100644
--- a/arch/powerpc/sysdev/cpm_common.c
+++ b/arch/powerpc/sysdev/cpm_common.c
@@ -28,7 +28,7 @@
 #include <asm/udbg.h>
 #include <asm/io.h>
 #include <asm/cpm.h>
-#include <asm/qe.h>
+#include <soc/fsl/qe/qe.h>
 
 #include <mm/mmu_decl.h>
 
diff --git a/arch/powerpc/sysdev/qe_lib/Kconfig b/arch/powerpc/sysdev/qe_lib/Kconfig
index 3c25199..2f80075 100644
--- a/arch/powerpc/sysdev/qe_lib/Kconfig
+++ b/arch/powerpc/sysdev/qe_lib/Kconfig
@@ -1,24 +1,14 @@
 #
 # QE Communication options
 #
-
-config UCC_SLOW
-	bool
-	default y if SERIAL_QE
-	help
-	  This option provides qe_lib support to UCC slow
-	  protocols: UART, BISYNC, QMC
-
-config UCC_FAST
-	bool
-	default y if UCC_GETH
+config QE_GPIO
+	bool "QE GPIO support"
+	depends on QUICC_ENGINE
+	select ARCH_REQUIRE_GPIOLIB
 	help
-	  This option provides qe_lib support to UCC fast
-	  protocols: HDLC, Ethernet, ATM, transparent
+	  Say Y here if you're going to use hardware that connects to the
+	  QE GPIOs.
 
-config UCC
-	bool
-	default y if UCC_FAST || UCC_SLOW
 
 config QE_USB
 	bool
diff --git a/arch/powerpc/sysdev/qe_lib/Makefile b/arch/powerpc/sysdev/qe_lib/Makefile
index 9507a27..1b123df 100644
--- a/arch/powerpc/sysdev/qe_lib/Makefile
+++ b/arch/powerpc/sysdev/qe_lib/Makefile
@@ -1,10 +1,6 @@
 #
 # Makefile for the linux ppc-specific parts of QE
 #
-obj-$(CONFIG_QUICC_ENGINE)+= qe.o qe_common.o qe_ic.o qe_io.o
-
-obj-$(CONFIG_UCC)	+= ucc.o
-obj-$(CONFIG_UCC_SLOW)	+= ucc_slow.o
-obj-$(CONFIG_UCC_FAST)	+= ucc_fast.o
+obj-$(CONFIG_QUICC_ENGINE)+= qe_io.o
 obj-$(CONFIG_QE_USB)	+= usb.o
 obj-$(CONFIG_QE_GPIO)	+= gpio.o
diff --git a/arch/powerpc/sysdev/qe_lib/gpio.c b/arch/powerpc/sysdev/qe_lib/gpio.c
index 521e67a..aa5c11ac 100644
--- a/arch/powerpc/sysdev/qe_lib/gpio.c
+++ b/arch/powerpc/sysdev/qe_lib/gpio.c
@@ -21,7 +21,7 @@
 #include <linux/gpio.h>
 #include <linux/slab.h>
 #include <linux/export.h>
-#include <asm/qe.h>
+#include <soc/fsl/qe/qe.h>
 
 struct qe_gpio_chip {
 	struct of_mm_gpio_chip mm_gc;
diff --git a/arch/powerpc/sysdev/qe_lib/qe_io.c b/arch/powerpc/sysdev/qe_lib/qe_io.c
index 7ea0174..7ae59ab 100644
--- a/arch/powerpc/sysdev/qe_lib/qe_io.c
+++ b/arch/powerpc/sysdev/qe_lib/qe_io.c
@@ -21,7 +21,7 @@
 #include <linux/ioport.h>
 
 #include <asm/io.h>
-#include <asm/qe.h>
+#include <soc/fsl/qe/qe.h>
 #include <asm/prom.h>
 #include <sysdev/fsl_soc.h>
 
diff --git a/arch/powerpc/sysdev/qe_lib/usb.c b/arch/powerpc/sysdev/qe_lib/usb.c
index 27f23bd..111f7ab 100644
--- a/arch/powerpc/sysdev/qe_lib/usb.c
+++ b/arch/powerpc/sysdev/qe_lib/usb.c
@@ -17,8 +17,8 @@
 #include <linux/errno.h>
 #include <linux/export.h>
 #include <linux/io.h>
-#include <asm/immap_qe.h>
-#include <asm/qe.h>
+#include <soc/fsl/qe/immap_qe.h>
+#include <soc/fsl/qe/qe.h>
 
 int qe_usb_clock_set(enum qe_clock clk, int rate)
 {
diff --git a/drivers/irqchip/Makefile b/drivers/irqchip/Makefile
index dda4927..9ff5932 100644
--- a/drivers/irqchip/Makefile
+++ b/drivers/irqchip/Makefile
@@ -47,3 +47,4 @@ obj-$(CONFIG_KEYSTONE_IRQ)		+= irq-keystone.o
 obj-$(CONFIG_MIPS_GIC)			+= irq-mips-gic.o
 obj-$(CONFIG_ARCH_MEDIATEK)		+= irq-mtk-sysirq.o
 obj-$(CONFIG_ARCH_DIGICOLOR)		+= irq-digicolor.o
+obj-$(CONFIG_QUICC_ENGINE)		+= qe_ic.o
diff --git a/arch/powerpc/sysdev/qe_lib/qe_ic.c b/drivers/irqchip/qe_ic.c
similarity index 99%
rename from arch/powerpc/sysdev/qe_lib/qe_ic.c
rename to drivers/irqchip/qe_ic.c
index 6512cd8..e31d95b 100644
--- a/arch/powerpc/sysdev/qe_lib/qe_ic.c
+++ b/drivers/irqchip/qe_ic.c
@@ -27,7 +27,7 @@
 #include <asm/irq.h>
 #include <asm/io.h>
 #include <asm/prom.h>
-#include <asm/qe_ic.h>
+#include <linux/fsl/qe/qe_ic.h>
 
 #include "qe_ic.h"
 
diff --git a/arch/powerpc/sysdev/qe_lib/qe_ic.h b/drivers/irqchip/qe_ic.h
similarity index 97%
rename from arch/powerpc/sysdev/qe_lib/qe_ic.h
rename to drivers/irqchip/qe_ic.h
index efef7ab..9f15cc4 100644
--- a/arch/powerpc/sysdev/qe_lib/qe_ic.h
+++ b/drivers/irqchip/qe_ic.h
@@ -1,5 +1,5 @@
 /*
- * arch/powerpc/sysdev/qe_lib/qe_ic.h
+ * drivers/irqchip/qe_ic.h
  *
  * QUICC ENGINE Interrupt Controller Header
  *
@@ -16,7 +16,7 @@
 #ifndef _POWERPC_SYSDEV_QE_IC_H
 #define _POWERPC_SYSDEV_QE_IC_H
 
-#include <asm/qe_ic.h>
+#include <linux/fsl/qe/qe_ic.h>
 
 #define NR_QE_IC_INTS		64
 
diff --git a/drivers/net/ethernet/freescale/fsl_pq_mdio.c b/drivers/net/ethernet/freescale/fsl_pq_mdio.c
index 3c40f6b..21bdf55 100644
--- a/drivers/net/ethernet/freescale/fsl_pq_mdio.c
+++ b/drivers/net/ethernet/freescale/fsl_pq_mdio.c
@@ -29,7 +29,7 @@
 
 #include <asm/io.h>
 #if IS_ENABLED(CONFIG_UCC_GETH)
-#include <asm/ucc.h>	/* for ucc_set_qe_mux_mii_mng() */
+#include <soc/fsl/qe/ucc.h>
 #endif
 
 #include "gianfar.h"
diff --git a/drivers/net/ethernet/freescale/ucc_geth.c b/drivers/net/ethernet/freescale/ucc_geth.c
index 4dd40e0..7d24664 100644
--- a/drivers/net/ethernet/freescale/ucc_geth.c
+++ b/drivers/net/ethernet/freescale/ucc_geth.c
@@ -40,10 +40,10 @@
 #include <asm/uaccess.h>
 #include <asm/irq.h>
 #include <asm/io.h>
-#include <asm/immap_qe.h>
-#include <asm/qe.h>
-#include <asm/ucc.h>
-#include <asm/ucc_fast.h>
+#include <soc/fsl/qe/immap_qe.h>
+#include <soc/fsl/qe/qe.h>
+#include <soc/fsl/qe/ucc.h>
+#include <soc/fsl/qe/ucc_fast.h>
 #include <asm/machdep.h>
 
 #include "ucc_geth.h"
diff --git a/drivers/net/ethernet/freescale/ucc_geth.h b/drivers/net/ethernet/freescale/ucc_geth.h
index 75f3371..5da19b4 100644
--- a/drivers/net/ethernet/freescale/ucc_geth.h
+++ b/drivers/net/ethernet/freescale/ucc_geth.h
@@ -22,11 +22,11 @@
 #include <linux/list.h>
 #include <linux/if_ether.h>
 
-#include <asm/immap_qe.h>
-#include <asm/qe.h>
+#include <soc/fsl/qe/immap_qe.h>
+#include <soc/fsl/qe/qe.h>
 
-#include <asm/ucc.h>
-#include <asm/ucc_fast.h>
+#include <soc/fsl/qe/ucc.h>
+#include <soc/fsl/qe/ucc_fast.h>
 
 #define DRV_DESC "QE UCC Gigabit Ethernet Controller"
 #define DRV_NAME "ucc_geth"
diff --git a/drivers/soc/Kconfig b/drivers/soc/Kconfig
index d8bde82..676737a 100644
--- a/drivers/soc/Kconfig
+++ b/drivers/soc/Kconfig
@@ -1,5 +1,6 @@
 menu "SOC (System On Chip) specific Drivers"
 
+source "drivers/soc/fsl/qe/Kconfig"
 source "drivers/soc/mediatek/Kconfig"
 source "drivers/soc/qcom/Kconfig"
 source "drivers/soc/ti/Kconfig"
diff --git a/drivers/soc/Makefile b/drivers/soc/Makefile
index 70042b2..0259e23 100644
--- a/drivers/soc/Makefile
+++ b/drivers/soc/Makefile
@@ -2,6 +2,7 @@
 # Makefile for the Linux Kernel SOC specific device drivers.
 #
 
+obj-y				+= fsl/
 obj-$(CONFIG_ARCH_MEDIATEK)	+= mediatek/
 obj-$(CONFIG_ARCH_QCOM)		+= qcom/
 obj-$(CONFIG_ARCH_TEGRA)	+= tegra/
diff --git a/drivers/soc/fsl/Makefile b/drivers/soc/fsl/Makefile
new file mode 100644
index 0000000..7c7d045
--- /dev/null
+++ b/drivers/soc/fsl/Makefile
@@ -0,0 +1,5 @@
+#
+# Makefile for the Linux Kernel SOC fsl specific device drivers
+#
+
+obj-$(CONFIG_QUICC_ENGINE)		+= qe/
diff --git a/drivers/soc/fsl/qe/Kconfig b/drivers/soc/fsl/qe/Kconfig
new file mode 100644
index 0000000..3012571
--- /dev/null
+++ b/drivers/soc/fsl/qe/Kconfig
@@ -0,0 +1,33 @@
+#
+# QE Communication options
+#
+
+config QUICC_ENGINE
+	bool "Freescale QUICC Engine (QE) Support"
+	depends on FSL_SOC && PPC32
+	select PPC_LIB_RHEAP
+	select GENERIC_ALLOCATOR
+	select CRC32
+	help
+	  The QUICC Engine (QE) is a new generation of communications
+	  coprocessors on Freescale embedded CPUs (akin to CPM in older chips).
+	  Selecting this option means that you wish to build a kernel
+	  for a machine with a QE coprocessor.
+
+config UCC_SLOW
+	bool
+	default y if SERIAL_QE
+	help
+	  This option provides qe_lib support to UCC slow
+	  protocols: UART, BISYNC, QMC
+
+config UCC_FAST
+	bool
+	default y if UCC_GETH
+	help
+	  This option provides qe_lib support to UCC fast
+	  protocols: HDLC, Ethernet, ATM, transparent
+
+config UCC
+	bool
+	default y if UCC_FAST || UCC_SLOW
diff --git a/drivers/soc/fsl/qe/Makefile b/drivers/soc/fsl/qe/Makefile
new file mode 100644
index 0000000..51c9dce
--- /dev/null
+++ b/drivers/soc/fsl/qe/Makefile
@@ -0,0 +1,9 @@
+#
+#Makefile for the Linux fsl parts of QE
+#
+
+
+obj-$(CONFIG_QUICC_ENGINE)+= qe.o qe_common.o
+obj-$(CONFIG_UCC)	+= ucc.o
+obj-$(CONFIG_UCC_SLOW)	+= ucc_slow.o
+obj-$(CONFIG_UCC_FAST)	+= ucc_fast.o
diff --git a/arch/powerpc/sysdev/qe_lib/qe.c b/drivers/soc/fsl/qe/qe.c
similarity index 99%
rename from arch/powerpc/sysdev/qe_lib/qe.c
rename to drivers/soc/fsl/qe/qe.c
index 3f9f596..d8fd4cd 100644
--- a/arch/powerpc/sysdev/qe_lib/qe.c
+++ b/drivers/soc/fsl/qe/qe.c
@@ -31,8 +31,8 @@
 #include <asm/irq.h>
 #include <asm/page.h>
 #include <asm/pgtable.h>
-#include <asm/immap_qe.h>
-#include <asm/qe.h>
+#include <soc/fsl/qe/immap_qe.h>
+#include <soc/fsl/qe/qe.h>
 #include <asm/prom.h>
 #include <asm/rheap.h>
 
diff --git a/arch/powerpc/sysdev/qe_lib/qe_common.c b/drivers/soc/fsl/qe/qe_common.c
similarity index 99%
rename from arch/powerpc/sysdev/qe_lib/qe_common.c
rename to drivers/soc/fsl/qe/qe_common.c
index a0b229f..b1225cd 100644
--- a/arch/powerpc/sysdev/qe_lib/qe_common.c
+++ b/drivers/soc/fsl/qe/qe_common.c
@@ -22,7 +22,7 @@
 #include <linux/slab.h>
 
 #include <linux/io.h>
-#include <asm/qe.h>
+#include <soc/fsl/qe/qe.h>
 
 static struct gen_pool *muram_pool;
 static struct genpool_data_align muram_pool_data;
diff --git a/arch/powerpc/sysdev/qe_lib/ucc.c b/drivers/soc/fsl/qe/ucc.c
similarity index 98%
rename from arch/powerpc/sysdev/qe_lib/ucc.c
rename to drivers/soc/fsl/qe/ucc.c
index 621575b..b59d335 100644
--- a/arch/powerpc/sysdev/qe_lib/ucc.c
+++ b/drivers/soc/fsl/qe/ucc.c
@@ -21,9 +21,9 @@
 
 #include <asm/irq.h>
 #include <asm/io.h>
-#include <asm/immap_qe.h>
-#include <asm/qe.h>
-#include <asm/ucc.h>
+#include <soc/fsl/qe/immap_qe.h>
+#include <soc/fsl/qe/qe.h>
+#include <soc/fsl/qe/ucc.h>
 
 int ucc_set_qe_mux_mii_mng(unsigned int ucc_num)
 {
diff --git a/arch/powerpc/sysdev/qe_lib/ucc_fast.c b/drivers/soc/fsl/qe/ucc_fast.c
similarity index 98%
rename from arch/powerpc/sysdev/qe_lib/ucc_fast.c
rename to drivers/soc/fsl/qe/ucc_fast.c
index 65aaf15..a768931 100644
--- a/arch/powerpc/sysdev/qe_lib/ucc_fast.c
+++ b/drivers/soc/fsl/qe/ucc_fast.c
@@ -21,11 +21,11 @@
 #include <linux/export.h>
 
 #include <asm/io.h>
-#include <asm/immap_qe.h>
-#include <asm/qe.h>
+#include <soc/fsl/qe/immap_qe.h>
+#include <soc/fsl/qe/qe.h>
 
-#include <asm/ucc.h>
-#include <asm/ucc_fast.h>
+#include <soc/fsl/qe/ucc.h>
+#include <soc/fsl/qe/ucc_fast.h>
 
 void ucc_fast_dump_regs(struct ucc_fast_private * uccf)
 {
diff --git a/arch/powerpc/sysdev/qe_lib/ucc_slow.c b/drivers/soc/fsl/qe/ucc_slow.c
similarity index 98%
rename from arch/powerpc/sysdev/qe_lib/ucc_slow.c
rename to drivers/soc/fsl/qe/ucc_slow.c
index 5f91628..9334bdb 100644
--- a/arch/powerpc/sysdev/qe_lib/ucc_slow.c
+++ b/drivers/soc/fsl/qe/ucc_slow.c
@@ -21,11 +21,11 @@
 #include <linux/export.h>
 
 #include <asm/io.h>
-#include <asm/immap_qe.h>
-#include <asm/qe.h>
+#include <soc/fsl/qe/immap_qe.h>
+#include <soc/fsl/qe/qe.h>
 
-#include <asm/ucc.h>
-#include <asm/ucc_slow.h>
+#include <soc/fsl/qe/ucc.h>
+#include <soc/fsl/qe/ucc_slow.h>
 
 u32 ucc_slow_get_qe_cr_subblock(int uccs_num)
 {
diff --git a/drivers/spi/spi-fsl-cpm.c b/drivers/spi/spi-fsl-cpm.c
index 9c46a30..bcb26bb 100644
--- a/drivers/spi/spi-fsl-cpm.c
+++ b/drivers/spi/spi-fsl-cpm.c
@@ -16,7 +16,7 @@
  * option) any later version.
  */
 #include <asm/cpm.h>
-#include <asm/qe.h>
+#include <soc/fsl/qe/qe.h>
 #include <linux/dma-mapping.h>
 #include <linux/fsl_devices.h>
 #include <linux/kernel.h>
diff --git a/drivers/tty/serial/ucc_uart.c b/drivers/tty/serial/ucc_uart.c
index 7d2532b..0b2cccd 100644
--- a/drivers/tty/serial/ucc_uart.c
+++ b/drivers/tty/serial/ucc_uart.c
@@ -31,7 +31,7 @@
 #include <linux/dma-mapping.h>
 
 #include <linux/fs_uart_pd.h>
-#include <asm/ucc_slow.h>
+#include <soc/fsl/qe/ucc_slow.h>
 
 #include <linux/firmware.h>
 #include <asm/reg.h>
diff --git a/drivers/usb/gadget/udc/fsl_qe_udc.c b/drivers/usb/gadget/udc/fsl_qe_udc.c
index e0822f1..f44659e 100644
--- a/drivers/usb/gadget/udc/fsl_qe_udc.c
+++ b/drivers/usb/gadget/udc/fsl_qe_udc.c
@@ -38,7 +38,7 @@
 #include <linux/usb/ch9.h>
 #include <linux/usb/gadget.h>
 #include <linux/usb/otg.h>
-#include <asm/qe.h>
+#include <soc/fsl/qe/qe.h>
 #include <asm/cpm.h>
 #include <asm/dma.h>
 #include <asm/reg.h>
diff --git a/drivers/usb/host/fhci-hcd.c b/drivers/usb/host/fhci-hcd.c
index c6cebb9..0960f41 100644
--- a/drivers/usb/host/fhci-hcd.c
+++ b/drivers/usb/host/fhci-hcd.c
@@ -31,7 +31,7 @@
 #include <linux/of_platform.h>
 #include <linux/of_gpio.h>
 #include <linux/slab.h>
-#include <asm/qe.h>
+#include <soc/fsl/qe/qe.h>
 #include <asm/fsl_gtm.h>
 #include "fhci.h"
 
diff --git a/drivers/usb/host/fhci-hub.c b/drivers/usb/host/fhci-hub.c
index 3bacdd7..60d55eb 100644
--- a/drivers/usb/host/fhci-hub.c
+++ b/drivers/usb/host/fhci-hub.c
@@ -24,7 +24,7 @@
 #include <linux/usb.h>
 #include <linux/usb/hcd.h>
 #include <linux/gpio.h>
-#include <asm/qe.h>
+#include <soc/fsl/qe/qe.h>
 #include "fhci.h"
 
 /* virtual root hub specific descriptor */
diff --git a/drivers/usb/host/fhci-sched.c b/drivers/usb/host/fhci-sched.c
index 95ca598..a9609a3 100644
--- a/drivers/usb/host/fhci-sched.c
+++ b/drivers/usb/host/fhci-sched.c
@@ -25,7 +25,7 @@
 #include <linux/io.h>
 #include <linux/usb.h>
 #include <linux/usb/hcd.h>
-#include <asm/qe.h>
+#include <soc/fsl/qe/qe.h>
 #include <asm/fsl_gtm.h>
 #include "fhci.h"
 
diff --git a/drivers/usb/host/fhci.h b/drivers/usb/host/fhci.h
index 154e6a0..3fc82c1 100644
--- a/drivers/usb/host/fhci.h
+++ b/drivers/usb/host/fhci.h
@@ -27,8 +27,8 @@
 #include <linux/io.h>
 #include <linux/usb.h>
 #include <linux/usb/hcd.h>
-#include <asm/qe.h>
-#include <asm/immap_qe.h>
+#include <soc/fsl/qe/qe.h>
+#include <soc/fsl/qe/immap_qe.h>
 
 #define USB_CLOCK	48000000
 
diff --git a/arch/powerpc/include/asm/qe_ic.h b/include/linux/fsl/qe/qe_ic.h
similarity index 100%
rename from arch/powerpc/include/asm/qe_ic.h
rename to include/linux/fsl/qe/qe_ic.h
diff --git a/arch/powerpc/include/asm/immap_qe.h b/include/soc/fsl/qe/immap_qe.h
similarity index 100%
rename from arch/powerpc/include/asm/immap_qe.h
rename to include/soc/fsl/qe/immap_qe.h
diff --git a/arch/powerpc/include/asm/qe.h b/include/soc/fsl/qe/qe.h
similarity index 99%
rename from arch/powerpc/include/asm/qe.h
rename to include/soc/fsl/qe/qe.h
index aee968f..7210b2b 100644
--- a/arch/powerpc/include/asm/qe.h
+++ b/include/soc/fsl/qe/qe.h
@@ -23,7 +23,7 @@
 #include <linux/of.h>
 #include <linux/of_address.h>
 #include <linux/types.h>
-#include <asm/immap_qe.h>
+#include <soc/fsl/qe/immap_qe.h>
 
 #define QE_NUM_OF_SNUM	256	/* There are 256 serial number in QE */
 #define QE_NUM_OF_BRGS	16
diff --git a/arch/powerpc/include/asm/ucc.h b/include/soc/fsl/qe/ucc.h
similarity index 96%
rename from arch/powerpc/include/asm/ucc.h
rename to include/soc/fsl/qe/ucc.h
index 6927ac2..894f14c 100644
--- a/arch/powerpc/include/asm/ucc.h
+++ b/include/soc/fsl/qe/ucc.h
@@ -15,8 +15,8 @@
 #ifndef __UCC_H__
 #define __UCC_H__
 
-#include <asm/immap_qe.h>
-#include <asm/qe.h>
+#include <soc/fsl/qe/immap_qe.h>
+#include <soc/fsl/qe/qe.h>
 
 #define STATISTICS
 
diff --git a/arch/powerpc/include/asm/ucc_fast.h b/include/soc/fsl/qe/ucc_fast.h
similarity index 98%
rename from arch/powerpc/include/asm/ucc_fast.h
rename to include/soc/fsl/qe/ucc_fast.h
index 72ea9ba..df8ea79 100644
--- a/arch/powerpc/include/asm/ucc_fast.h
+++ b/include/soc/fsl/qe/ucc_fast.h
@@ -16,10 +16,10 @@
 
 #include <linux/kernel.h>
 
-#include <asm/immap_qe.h>
-#include <asm/qe.h>
+#include <soc/fsl/qe/immap_qe.h>
+#include <soc/fsl/qe/qe.h>
 
-#include <asm/ucc.h>
+#include <soc/fsl/qe/ucc.h>
 
 /* Receive BD's status */
 #define R_E	0x80000000	/* buffer empty */
diff --git a/arch/powerpc/include/asm/ucc_slow.h b/include/soc/fsl/qe/ucc_slow.h
similarity index 99%
rename from arch/powerpc/include/asm/ucc_slow.h
rename to include/soc/fsl/qe/ucc_slow.h
index 233ef5f..6c0573a 100644
--- a/arch/powerpc/include/asm/ucc_slow.h
+++ b/include/soc/fsl/qe/ucc_slow.h
@@ -17,10 +17,10 @@
 
 #include <linux/kernel.h>
 
-#include <asm/immap_qe.h>
-#include <asm/qe.h>
+#include <soc/fsl/qe/immap_qe.h>
+#include <soc/fsl/qe/qe.h>
 
-#include <asm/ucc.h>
+#include <soc/fsl/qe/ucc.h>
 
 /* transmit BD's status */
 #define T_R	0x80000000	/* ready bit */
-- 
2.1.0.27.g96db324

^ permalink raw reply related	[flat|nested] 27+ messages in thread

* Re: [PATCH v10 3/5] CPM/QE: use genalloc to manage CPM/QE muram
  2015-09-18  7:15 ` [PATCH v10 3/5] CPM/QE: use genalloc to manage CPM/QE muram Zhao Qiang
@ 2015-09-21 22:47   ` Scott Wood
  2015-09-22  8:10     ` Zhao Qiang
  0 siblings, 1 reply; 27+ messages in thread
From: Scott Wood @ 2015-09-21 22:47 UTC (permalink / raw)
  To: Zhao Qiang; +Cc: linux-kernel, linuxppc-dev, lauraa, X.xie, benh, leoli, paulus

On Fri, Sep 18, 2015 at 03:15:19PM +0800, Zhao Qiang wrote:
> Use genalloc to manage CPM/QE muram instead of rheap.
> 
> Signed-off-by: Zhao Qiang <qiang.zhao@freescale.com>
> ---
> Changes for v9:
> 	- splitted from patch 3/5, modify cpm muram management functions.
> Changes for v10:
> 	- modify cpm muram first, then move to qe_common
> 	- modify commit.
> 
>  arch/powerpc/platforms/Kconfig   |   1 +
>  arch/powerpc/sysdev/cpm_common.c | 150 +++++++++++++++++++++++++++------------
>  2 files changed, 107 insertions(+), 44 deletions(-)
> 
> diff --git a/arch/powerpc/platforms/Kconfig b/arch/powerpc/platforms/Kconfig
> index b7f9c40..01f98a2 100644
> --- a/arch/powerpc/platforms/Kconfig
> +++ b/arch/powerpc/platforms/Kconfig
> @@ -276,6 +276,7 @@ config QUICC_ENGINE
>  	bool "Freescale QUICC Engine (QE) Support"
>  	depends on FSL_SOC && PPC32
>  	select PPC_LIB_RHEAP
> +	select GENERIC_ALLOCATOR
>  	select CRC32
>  	help
>  	  The QUICC Engine (QE) is a new generation of communications
> diff --git a/arch/powerpc/sysdev/cpm_common.c b/arch/powerpc/sysdev/cpm_common.c
> index 4f78695..453d18c 100644
> --- a/arch/powerpc/sysdev/cpm_common.c
> +++ b/arch/powerpc/sysdev/cpm_common.c
> @@ -17,6 +17,7 @@
>   * published by the Free Software Foundation.
>   */
>  
> +#include <linux/genalloc.h>
>  #include <linux/init.h>
>  #include <linux/of_device.h>
>  #include <linux/spinlock.h>
> @@ -27,7 +28,6 @@
>  
>  #include <asm/udbg.h>
>  #include <asm/io.h>
> -#include <asm/rheap.h>
>  #include <asm/cpm.h>
>  
>  #include <mm/mmu_decl.h>
> @@ -65,14 +65,24 @@ void __init udbg_init_cpm(void)
>  }
>  #endif
>  
> +static struct gen_pool *muram_pool;
> +static struct genpool_data_align muram_pool_data;
> +static struct genpool_data_fixed muram_pool_data_fixed;

Why are these global?  If you keep the data local to the caller (and use
gen_pool_alloc_data()) then you probably don't need cpm_muram_lock.

>  static spinlock_t cpm_muram_lock;
> -static rh_block_t cpm_boot_muram_rh_block[16];
> -static rh_info_t cpm_muram_info;
>  static u8 __iomem *muram_vbase;
>  static phys_addr_t muram_pbase;
>  
> -/* Max address size we deal with */
> +struct muram_block {
> +	struct list_head head;
> +	unsigned long start;
> +	int size;
> +};
> +
> +static LIST_HEAD(muram_block_list);
> +
> +/* max address size we deal with */
>  #define OF_MAX_ADDR_CELLS	4
> +#define GENPOOL_OFFSET		4096

Is 4096 bytes the maximum alignment you'll ever need?  Wouldn't it be
safer to use a much larger offset?

>  int cpm_muram_init(void)
>  {
> @@ -86,113 +96,165 @@ int cpm_muram_init(void)
>  	if (muram_pbase)
>  		return 0;
>  
> -	spin_lock_init(&cpm_muram_lock);

Why are you eliminating the lock init, given that you're not getting rid
of the lock?

> -	/* initialize the info header */
> -	rh_init(&cpm_muram_info, 1,
> -	        sizeof(cpm_boot_muram_rh_block) /
> -	        sizeof(cpm_boot_muram_rh_block[0]),
> -	        cpm_boot_muram_rh_block);
> -
>  	np = of_find_compatible_node(NULL, NULL, "fsl,cpm-muram-data");
>  	if (!np) {
>  		/* try legacy bindings */
>  		np = of_find_node_by_name(NULL, "data-only");
>  		if (!np) {
> -			printk(KERN_ERR "Cannot find CPM muram data node");
> +			pr_err("Cannot find CPM muram data node");
>  			ret = -ENODEV;
>  			goto out;
>  		}
>  	}
>  
> +	muram_pool = gen_pool_create(1, -1);

Do we really need byte-granularity?

>  	muram_pbase = of_translate_address(np, zero);
>  	if (muram_pbase == (phys_addr_t)OF_BAD_ADDR) {
> -		printk(KERN_ERR "Cannot translate zero through CPM muram node");
> +		pr_err("Cannot translate zero through CPM muram node");
>  		ret = -ENODEV;
> -		goto out;
> +		goto err;
>  	}
>  
>  	while (of_address_to_resource(np, i++, &r) == 0) {
>  		if (r.end > max)
>  			max = r.end;
> +		ret = gen_pool_add(muram_pool, r.start - muram_pbase +
> +				   GENPOOL_OFFSET, resource_size(&r), -1);
> +		if (ret) {
> +				pr_err("QE: couldn't add muram to pool!\n");
> +				goto err;
> +			}
>  
> -		rh_attach_region(&cpm_muram_info, r.start - muram_pbase,
> -				 resource_size(&r));
>  	}
>  
>  	muram_vbase = ioremap(muram_pbase, max - muram_pbase + 1);
>  	if (!muram_vbase) {
> -		printk(KERN_ERR "Cannot map CPM muram");
> +		pr_err("Cannot map QE muram");
>  		ret = -ENOMEM;
> +		goto err;
>  	}
> -
> +	goto out;
> +err:
> +	gen_pool_destroy(muram_pool);
>  out:
>  	of_node_put(np);
>  	return ret;

Having both "err" and "out" is confusing.  Instead call it "out_pool" or
similar.

>  }
>  
> -/**
> +/*
>   * cpm_muram_alloc - allocate the requested size worth of multi-user ram
>   * @size: number of bytes to allocate
>   * @align: requested alignment, in bytes
>   *
>   * This function returns an offset into the muram area.
> - * Use cpm_dpram_addr() to get the virtual address of the area.
> - * Use cpm_muram_free() to free the allocation.

Why did you remove the comments about how to get a virtual address and
free the allocation?

>   */
>  unsigned long cpm_muram_alloc(unsigned long size, unsigned long align)
>  {
>  	unsigned long start;
>  	unsigned long flags;
> +	struct muram_block *entry;
>  
>  	spin_lock_irqsave(&cpm_muram_lock, flags);
> -	cpm_muram_info.alignment = align;
> -	start = rh_alloc(&cpm_muram_info, size, "commproc");
> +	muram_pool_data.align = align;
> +	gen_pool_set_algo(muram_pool, gen_pool_first_fit_align,
> +			  &muram_pool_data);
> +	start = gen_pool_alloc(muram_pool, size);

Why did you add gen_pool_alloc_data() if you're not going to use it?

>  EXPORT_SYMBOL(cpm_muram_alloc);
>  
> -/**
> - * cpm_muram_free - free a chunk of multi-user ram
> - * @offset: The beginning of the chunk as returned by cpm_muram_alloc().
> +/*
> + * cpm_muram_alloc_fixed - reserve a specific region of multi-user ram
> + * @size: number of bytes to allocate
> + * @offset: offset of allocation start address
> + *
> + * This function returns an offset into the muram area.
>   */
> -int cpm_muram_free(unsigned long offset)
> +unsigned long cpm_muram_alloc_fixed(unsigned long offset, unsigned long size)

Why did you reorder these functions, making the diff harder to read?

>  {
> -	int ret;
> +
> +	unsigned long start;
>  	unsigned long flags;
> +	unsigned long size_alloc = size;
> +	struct muram_block *entry;
> +	int end_bit;
> +	int order = muram_pool->min_alloc_order;
>  
>  	spin_lock_irqsave(&cpm_muram_lock, flags);
> -	ret = rh_free(&cpm_muram_info, offset);
> +	end_bit = (offset >> order) + ((size + (1UL << order) - 1) >> order);
> +	if ((offset + size) > (end_bit << order))
> +		size_alloc = size + (1UL << order);

Why do you need to do all these calculations here?

> +	muram_pool_data_fixed.offset = offset + GENPOOL_OFFSET;
> +	gen_pool_set_algo(muram_pool, gen_pool_fixed_alloc,
> +			  &muram_pool_data_fixed);
> +	start = gen_pool_alloc(muram_pool, size_alloc);
> +	if (!start)
> +		goto out2;
> +	start = start - GENPOOL_OFFSET;
> +	memset(cpm_muram_addr(start), 0, size_alloc);
> +	entry = kmalloc(sizeof(*entry), GFP_KERNEL);
> +	if (!entry)
> +		goto out1;
> +	entry->start = start;
> +	entry->size = size_alloc;
> +	list_add(&entry->head, &muram_block_list);
>  	spin_unlock_irqrestore(&cpm_muram_lock, flags);

Please factor out the common alloc code.

-Scott

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v10 4/5] QE/CPM: move muram management functions to qe_common
  2015-09-18  7:15 ` [PATCH v10 4/5] QE/CPM: move muram management functions to qe_common Zhao Qiang
@ 2015-09-21 22:54   ` Scott Wood
  2015-09-22  2:23     ` Zhao Qiang
  0 siblings, 1 reply; 27+ messages in thread
From: Scott Wood @ 2015-09-21 22:54 UTC (permalink / raw)
  To: Zhao Qiang; +Cc: linux-kernel, linuxppc-dev, lauraa, X.xie, benh, leoli, paulus

On Fri, Sep 18, 2015 at 03:15:20PM +0800, Zhao Qiang wrote:
> QE and CPM have the same muram, they use the same management
> functions. Now QE support both ARM and PowerPC, it is necessary
> to move QE to "driver/soc", so move the muram management functions
> from cpm_common to qe_common for preparing to move QE code to "driver/soc"
> 
> Signed-off-by: Zhao Qiang <qiang.zhao@freescale.com>
> ---
> Changes for v2:
> 	- no changes
> Changes for v3:
> 	- no changes
> Changes for v4:
> 	- no changes
> Changes for v5:
> 	- no changes
> Changes for v6:
> 	- using genalloc instead rheap to manage QE MURAM
> 	- remove qe_reset from platform file, using 
> 	- subsys_initcall to call qe_init function.

Why is the init change in the same patch as moving the muram code?

> Changes for v7:
> 	- move this patch from 3/3 to 2/3
> 	- convert cpm with genalloc
> 	- check for gen_pool allocation failure
> Changes for v8:
> 	- rebase
> 	- move BD_SC_* macro instead of copy
> Changes for v9:
> 	- doesn't modify CPM, add a new patch to modify.
> 	- rebase
> Changes for v10:
> 	- rebase
> 
>  arch/powerpc/include/asm/cpm.h            |  59 --------
>  arch/powerpc/include/asm/qe.h             |  51 ++++++-
>  arch/powerpc/platforms/83xx/km83xx.c      |   2 -
>  arch/powerpc/platforms/83xx/mpc832x_mds.c |   2 -
>  arch/powerpc/platforms/83xx/mpc832x_rdb.c |   2 -
>  arch/powerpc/platforms/83xx/mpc836x_mds.c |   2 -
>  arch/powerpc/platforms/83xx/mpc836x_rdk.c |   3 -
>  arch/powerpc/platforms/85xx/common.c      |   1 -
>  arch/powerpc/sysdev/cpm_common.c          | 206 +------------------------
>  arch/powerpc/sysdev/qe_lib/Makefile       |   2 +-
>  arch/powerpc/sysdev/qe_lib/qe.c           |  15 ++
>  arch/powerpc/sysdev/qe_lib/qe_common.c    | 242 ++++++++++++++++++++++++++++++
>  12 files changed, 302 insertions(+), 285 deletions(-)
>  create mode 100644 arch/powerpc/sysdev/qe_lib/qe_common.c
> 
> diff --git a/arch/powerpc/include/asm/cpm.h b/arch/powerpc/include/asm/cpm.h
> index 4398a6c..003a736 100644
> --- a/arch/powerpc/include/asm/cpm.h
> +++ b/arch/powerpc/include/asm/cpm.h
> @@ -93,22 +93,6 @@ typedef struct cpm_buf_desc {
>   */
>  
>  #define BD_SC_EMPTY	(0x8000)	/* Receive is empty */
> -#define BD_SC_READY	(0x8000)	/* Transmit is ready */
> -#define BD_SC_WRAP	(0x2000)	/* Last buffer descriptor */
> -#define BD_SC_INTRPT	(0x1000)	/* Interrupt on change */
> -#define BD_SC_LAST	(0x0800)	/* Last buffer in frame */
> -#define BD_SC_TC	(0x0400)	/* Transmit CRC */
> -#define BD_SC_CM	(0x0200)	/* Continuous mode */
> -#define BD_SC_ID	(0x0100)	/* Rec'd too many idles */
> -#define BD_SC_P		(0x0100)	/* xmt preamble */
> -#define BD_SC_BR	(0x0020)	/* Break received */
> -#define BD_SC_FR	(0x0010)	/* Framing error */
> -#define BD_SC_PR	(0x0008)	/* Parity error */
> -#define BD_SC_NAK	(0x0004)	/* NAK - did not respond */
> -#define BD_SC_OV	(0x0002)	/* Overrun */
> -#define BD_SC_UN	(0x0002)	/* Underrun */
> -#define BD_SC_CD	(0x0001)	/* */
> -#define BD_SC_CL	(0x0001)	/* Collision */

What does this have to do with muram?

> -/* we actually use cpm_muram implementation, define this for convenience */
> -#define qe_muram_init cpm_muram_init
> -#define qe_muram_alloc cpm_muram_alloc
> -#define qe_muram_alloc_fixed cpm_muram_alloc_fixed
> -#define qe_muram_free cpm_muram_free
> -#define qe_muram_addr cpm_muram_addr
> -#define qe_muram_offset cpm_muram_offset
> +/* we actually use qe_muram implementation, define this for convenience */
> +#define cpm_muram_init qe_muram_init
> +#define cpm_muram_alloc qe_muram_alloc
> +#define cpm_muram_alloc_fixed qe_muram_alloc_fixed
> +#define cpm_muram_free qe_muram_free
> +#define cpm_muram_addr qe_muram_addr
> +#define cpm_muram_offset qe_muram_offset

I've said many times now that any changes to the code, including renaming
functions, needs to be a separate patch from moving the code.

-Scott

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v10 5/5] QE: Move QE from arch/powerpc to drivers/soc
  2015-09-18  7:15 ` [PATCH v10 5/5] QE: Move QE from arch/powerpc to drivers/soc Zhao Qiang
@ 2015-09-21 22:56   ` Scott Wood
  2015-09-22  8:24     ` Zhao Qiang
  0 siblings, 1 reply; 27+ messages in thread
From: Scott Wood @ 2015-09-21 22:56 UTC (permalink / raw)
  To: Zhao Qiang; +Cc: linux-kernel, linuxppc-dev, lauraa, X.xie, benh, leoli, paulus

On Fri, Sep 18, 2015 at 03:15:21PM +0800, Zhao Qiang wrote:
> diff --git a/drivers/soc/fsl/qe/Kconfig b/drivers/soc/fsl/qe/Kconfig
> new file mode 100644
> index 0000000..3012571
> --- /dev/null
> +++ b/drivers/soc/fsl/qe/Kconfig
> @@ -0,0 +1,33 @@
> +#
> +# QE Communication options
> +#
> +
> +config QUICC_ENGINE
> +	bool "Freescale QUICC Engine (QE) Support"
> +	depends on FSL_SOC && PPC32
> +	select PPC_LIB_RHEAP
> +	select GENERIC_ALLOCATOR
> +	select CRC32

Why is "select PPC_LIB_RHEAP" still here?

> +	help
> +	  The QUICC Engine (QE) is a new generation of communications
> +	  coprocessors on Freescale embedded CPUs (akin to CPM in older chips).
> +	  Selecting this option means that you wish to build a kernel
> +	  for a machine with a QE coprocessor.
> +
> +config UCC_SLOW
> +	bool
> +	default y if SERIAL_QE
> +	help
> +	  This option provides qe_lib support to UCC slow
> +	  protocols: UART, BISYNC, QMC
> +
> +config UCC_FAST
> +	bool
> +	default y if UCC_GETH
> +	help
> +	  This option provides qe_lib support to UCC fast
> +	  protocols: HDLC, Ethernet, ATM, transparent

What does "qe_lib" mean to the end user, or to anyone after the code is
moved to drivers/soc/fsl/qe?

-Scott

^ permalink raw reply	[flat|nested] 27+ messages in thread

* RE: [PATCH v10 4/5] QE/CPM: move muram management functions to qe_common
  2015-09-21 22:54   ` Scott Wood
@ 2015-09-22  2:23     ` Zhao Qiang
  2015-09-22  2:25       ` Scott Wood
  0 siblings, 1 reply; 27+ messages in thread
From: Zhao Qiang @ 2015-09-22  2:23 UTC (permalink / raw)
  To: Scott Wood
  Cc: linux-kernel, linuxppc-dev, lauraa, Xiaobo Xie, benh, Li Leo, paulus

On Tue, Sep 22, 2015 at 06:54AM +0800, Wood Scott-B07421 wrote:
> -----Original Message-----
> From: Wood Scott-B07421
> Sent: Tuesday, September 22, 2015 6:54 AM
> To: Zhao Qiang-B45475
> Cc: linux-kernel@vger.kernel.org; linuxppc-dev@lists.ozlabs.org;
> lauraa@codeaurora.org; Xie Xiaobo-R63061; benh@kernel.crashing.org; Li
> Yang-Leo-R58472; paulus@samba.org
> Subject: Re: [PATCH v10 4/5] QE/CPM: move muram management functions to
> qe_common
>=20
> On Fri, Sep 18, 2015 at 03:15:20PM +0800, Zhao Qiang wrote:
> > QE and CPM have the same muram, they use the same management
> > functions. Now QE support both ARM and PowerPC, it is necessary to
> > move QE to "driver/soc", so move the muram management functions from
> > cpm_common to qe_common for preparing to move QE code to "driver/soc"
> >
> > Signed-off-by: Zhao Qiang <qiang.zhao@freescale.com>
> > ---
> > Changes for v2:
> > 	- no changes
> > Changes for v3:
> > 	- no changes
> > Changes for v4:
> > 	- no changes
> > Changes for v5:
> > 	- no changes
> > Changes for v6:
> > 	- using genalloc instead rheap to manage QE MURAM
> > 	- remove qe_reset from platform file, using
> > 	- subsys_initcall to call qe_init function.
>=20
> Why is the init change in the same patch as moving the muram code?
>=20
> > Changes for v7:
> > 	- move this patch from 3/3 to 2/3
> > 	- convert cpm with genalloc
> > 	- check for gen_pool allocation failure Changes for v8:
> > 	- rebase
> > 	- move BD_SC_* macro instead of copy
> > Changes for v9:
> > 	- doesn't modify CPM, add a new patch to modify.
> > 	- rebase
> > Changes for v10:
> > 	- rebase
> >
> >  arch/powerpc/include/asm/cpm.h            |  59 --------
> >  arch/powerpc/include/asm/qe.h             |  51 ++++++-
> >  arch/powerpc/platforms/83xx/km83xx.c      |   2 -
> >  arch/powerpc/platforms/83xx/mpc832x_mds.c |   2 -
> >  arch/powerpc/platforms/83xx/mpc832x_rdb.c |   2 -
> >  arch/powerpc/platforms/83xx/mpc836x_mds.c |   2 -
> >  arch/powerpc/platforms/83xx/mpc836x_rdk.c |   3 -
> >  arch/powerpc/platforms/85xx/common.c      |   1 -
> >  arch/powerpc/sysdev/cpm_common.c          | 206 +---------------------
> ---
> >  arch/powerpc/sysdev/qe_lib/Makefile       |   2 +-
> >  arch/powerpc/sysdev/qe_lib/qe.c           |  15 ++
> >  arch/powerpc/sysdev/qe_lib/qe_common.c    | 242
> ++++++++++++++++++++++++++++++
> >  12 files changed, 302 insertions(+), 285 deletions(-)  create mode
> > 100644 arch/powerpc/sysdev/qe_lib/qe_common.c
> >
> > diff --git a/arch/powerpc/include/asm/cpm.h
> > b/arch/powerpc/include/asm/cpm.h index 4398a6c..003a736 100644
> > --- a/arch/powerpc/include/asm/cpm.h
> > +++ b/arch/powerpc/include/asm/cpm.h
> > @@ -93,22 +93,6 @@ typedef struct cpm_buf_desc {
> >   */
> >
> >  #define BD_SC_EMPTY	(0x8000)	/* Receive is empty */
> > -#define BD_SC_READY	(0x8000)	/* Transmit is ready */
> > -#define BD_SC_WRAP	(0x2000)	/* Last buffer descriptor */
> > -#define BD_SC_INTRPT	(0x1000)	/* Interrupt on change */
> > -#define BD_SC_LAST	(0x0800)	/* Last buffer in frame */
> > -#define BD_SC_TC	(0x0400)	/* Transmit CRC */
> > -#define BD_SC_CM	(0x0200)	/* Continuous mode */
> > -#define BD_SC_ID	(0x0100)	/* Rec'd too many idles */
> > -#define BD_SC_P		(0x0100)	/* xmt preamble */
> > -#define BD_SC_BR	(0x0020)	/* Break received */
> > -#define BD_SC_FR	(0x0010)	/* Framing error */
> > -#define BD_SC_PR	(0x0008)	/* Parity error */
> > -#define BD_SC_NAK	(0x0004)	/* NAK - did not respond */
> > -#define BD_SC_OV	(0x0002)	/* Overrun */
> > -#define BD_SC_UN	(0x0002)	/* Underrun */
> > -#define BD_SC_CD	(0x0001)	/* */
> > -#define BD_SC_CL	(0x0001)	/* Collision */
>=20
> What does this have to do with muram?

BD is Buffer Descriptors, it is in muram.

>=20
> > -/* we actually use cpm_muram implementation, define this for
> > convenience */ -#define qe_muram_init cpm_muram_init -#define
> > qe_muram_alloc cpm_muram_alloc -#define qe_muram_alloc_fixed
> > cpm_muram_alloc_fixed -#define qe_muram_free cpm_muram_free -#define
> > qe_muram_addr cpm_muram_addr -#define qe_muram_offset cpm_muram_offset
> > +/* we actually use qe_muram implementation, define this for
> > +convenience */ #define cpm_muram_init qe_muram_init #define
> > +cpm_muram_alloc qe_muram_alloc #define cpm_muram_alloc_fixed
> > +qe_muram_alloc_fixed #define cpm_muram_free qe_muram_free #define
> > +cpm_muram_addr qe_muram_addr #define cpm_muram_offset qe_muram_offset
>=20
> I've said many times now that any changes to the code, including renaming
> functions, needs to be a separate patch from moving the code.

I have split a patch to two patches, However, Maybe I misunderstand your me=
ans.
So if the patch just do the renaming and moving cpm_muram function to qe_mu=
ram function,
Does it ok?

>=20
> -Scott

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v10 4/5] QE/CPM: move muram management functions to qe_common
  2015-09-22  2:23     ` Zhao Qiang
@ 2015-09-22  2:25       ` Scott Wood
  2015-09-22  3:06         ` Zhao Qiang
  0 siblings, 1 reply; 27+ messages in thread
From: Scott Wood @ 2015-09-22  2:25 UTC (permalink / raw)
  To: Zhao Qiang-B45475
  Cc: linux-kernel, linuxppc-dev, lauraa, Xie Xiaobo-R63061, benh,
	Li Yang-Leo-R58472, paulus

On Mon, 2015-09-21 at 21:23 -0500, Zhao Qiang-B45475 wrote:
> On Tue, Sep 22, 2015 at 06:54AM +0800, Wood Scott-B07421 wrote:
> > -----Original Message-----
> > From: Wood Scott-B07421
> > Sent: Tuesday, September 22, 2015 6:54 AM
> > To: Zhao Qiang-B45475
> > Cc: linux-kernel@vger.kernel.org; linuxppc-dev@lists.ozlabs.org;
> > lauraa@codeaurora.org; Xie Xiaobo-R63061; benh@kernel.crashing.org; Li
> > Yang-Leo-R58472; paulus@samba.org
> > Subject: Re: [PATCH v10 4/5] QE/CPM: move muram management functions to
> > qe_common
> > 
> > On Fri, Sep 18, 2015 at 03:15:20PM +0800, Zhao Qiang wrote:
> > > QE and CPM have the same muram, they use the same management
> > > functions. Now QE support both ARM and PowerPC, it is necessary to
> > > move QE to "driver/soc", so move the muram management functions from
> > > cpm_common to qe_common for preparing to move QE code to "driver/soc"
> > > 
> > > Signed-off-by: Zhao Qiang <qiang.zhao@freescale.com>
> > > ---
> > > Changes for v2:
> > >   - no changes
> > > Changes for v3:
> > >   - no changes
> > > Changes for v4:
> > >   - no changes
> > > Changes for v5:
> > >   - no changes
> > > Changes for v6:
> > >   - using genalloc instead rheap to manage QE MURAM
> > >   - remove qe_reset from platform file, using
> > >   - subsys_initcall to call qe_init function.
> > 
> > Why is the init change in the same patch as moving the muram code?
> > 
> > > Changes for v7:
> > >   - move this patch from 3/3 to 2/3
> > >   - convert cpm with genalloc
> > >   - check for gen_pool allocation failure Changes for v8:
> > >   - rebase
> > >   - move BD_SC_* macro instead of copy
> > > Changes for v9:
> > >   - doesn't modify CPM, add a new patch to modify.
> > >   - rebase
> > > Changes for v10:
> > >   - rebase
> > > 
> > >  arch/powerpc/include/asm/cpm.h            |  59 --------
> > >  arch/powerpc/include/asm/qe.h             |  51 ++++++-
> > >  arch/powerpc/platforms/83xx/km83xx.c      |   2 -
> > >  arch/powerpc/platforms/83xx/mpc832x_mds.c |   2 -
> > >  arch/powerpc/platforms/83xx/mpc832x_rdb.c |   2 -
> > >  arch/powerpc/platforms/83xx/mpc836x_mds.c |   2 -
> > >  arch/powerpc/platforms/83xx/mpc836x_rdk.c |   3 -
> > >  arch/powerpc/platforms/85xx/common.c      |   1 -
> > >  arch/powerpc/sysdev/cpm_common.c          | 206 +---------------------
> > ---
> > >  arch/powerpc/sysdev/qe_lib/Makefile       |   2 +-
> > >  arch/powerpc/sysdev/qe_lib/qe.c           |  15 ++
> > >  arch/powerpc/sysdev/qe_lib/qe_common.c    | 242
> > ++++++++++++++++++++++++++++++
> > >  12 files changed, 302 insertions(+), 285 deletions(-)  create mode
> > > 100644 arch/powerpc/sysdev/qe_lib/qe_common.c
> > > 
> > > diff --git a/arch/powerpc/include/asm/cpm.h
> > > b/arch/powerpc/include/asm/cpm.h index 4398a6c..003a736 100644
> > > --- a/arch/powerpc/include/asm/cpm.h
> > > +++ b/arch/powerpc/include/asm/cpm.h
> > > @@ -93,22 +93,6 @@ typedef struct cpm_buf_desc {
> > >   */
> > > 
> > >  #define BD_SC_EMPTY      (0x8000)        /* Receive is empty */
> > > -#define BD_SC_READY      (0x8000)        /* Transmit is ready */
> > > -#define BD_SC_WRAP       (0x2000)        /* Last buffer descriptor */
> > > -#define BD_SC_INTRPT     (0x1000)        /* Interrupt on change */
> > > -#define BD_SC_LAST       (0x0800)        /* Last buffer in frame */
> > > -#define BD_SC_TC (0x0400)        /* Transmit CRC */
> > > -#define BD_SC_CM (0x0200)        /* Continuous mode */
> > > -#define BD_SC_ID (0x0100)        /* Rec'd too many idles */
> > > -#define BD_SC_P          (0x0100)        /* xmt preamble */
> > > -#define BD_SC_BR (0x0020)        /* Break received */
> > > -#define BD_SC_FR (0x0010)        /* Framing error */
> > > -#define BD_SC_PR (0x0008)        /* Parity error */
> > > -#define BD_SC_NAK        (0x0004)        /* NAK - did not respond */
> > > -#define BD_SC_OV (0x0002)        /* Overrun */
> > > -#define BD_SC_UN (0x0002)        /* Underrun */
> > > -#define BD_SC_CD (0x0001)        /* */
> > > -#define BD_SC_CL (0x0001)        /* Collision */
> > 
> > What does this have to do with muram?
> 
> BD is Buffer Descriptors, it is in muram.

What does it have to do with the muram *allocator*?

> > 
> > I've said many times now that any changes to the code, including renaming
> > functions, needs to be a separate patch from moving the code.
> 
> I have split a patch to two patches, However, Maybe I misunderstand your 
> means.

I didn't say "split it into two patches, however you like".  I said to have 
all changes in one patch, and the other patch be nothing but a move.  
Renaming the functions counts as a change.

> So if the patch just do the renaming and moving cpm_muram function to 
> qe_muram function,
> Does it ok?

No.

-Scott

^ permalink raw reply	[flat|nested] 27+ messages in thread

* RE: [PATCH v10 4/5] QE/CPM: move muram management functions to qe_common
  2015-09-22  2:25       ` Scott Wood
@ 2015-09-22  3:06         ` Zhao Qiang
  2015-09-22  3:07           ` Scott Wood
  0 siblings, 1 reply; 27+ messages in thread
From: Zhao Qiang @ 2015-09-22  3:06 UTC (permalink / raw)
  To: Scott Wood
  Cc: linux-kernel, linuxppc-dev, lauraa, Xiaobo Xie, benh, Li Leo, paulus

T24gVHVlLCBTZXAgMjIsIDIwMTUgYXQgMTA6MjZBTSArMDgwMCwgV29vZCBTY290dC1CMDc0MjEg
d3JvdGU6DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogV29vZCBTY290
dC1CMDc0MjENCj4gU2VudDogVHVlc2RheSwgU2VwdGVtYmVyIDIyLCAyMDE1IDEwOjI2IEFNDQo+
IFRvOiBaaGFvIFFpYW5nLUI0NTQ3NQ0KPiBDYzogbGludXgta2VybmVsQHZnZXIua2VybmVsLm9y
ZzsgbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmc7DQo+IGxhdXJhYUBjb2RlYXVyb3JhLm9y
ZzsgWGllIFhpYW9iby1SNjMwNjE7IGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZzsgTGkNCj4gWWFu
Zy1MZW8tUjU4NDcyOyBwYXVsdXNAc2FtYmEub3JnDQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjEw
IDQvNV0gUUUvQ1BNOiBtb3ZlIG11cmFtIG1hbmFnZW1lbnQgZnVuY3Rpb25zIHRvDQo+IHFlX2Nv
bW1vbg0KPiANCj4gT24gTW9uLCAyMDE1LTA5LTIxIGF0IDIxOjIzIC0wNTAwLCBaaGFvIFFpYW5n
LUI0NTQ3NSB3cm90ZToNCj4gPiBPbiBUdWUsIFNlcCAyMiwgMjAxNSBhdCAwNjo1NEFNICswODAw
LCBXb29kIFNjb3R0LUIwNzQyMSB3cm90ZToNCj4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0t
LS0tDQo+ID4gPiBGcm9tOiBXb29kIFNjb3R0LUIwNzQyMQ0KPiA+ID4gU2VudDogVHVlc2RheSwg
U2VwdGVtYmVyIDIyLCAyMDE1IDY6NTQgQU0NCj4gPiA+IFRvOiBaaGFvIFFpYW5nLUI0NTQ3NQ0K
PiA+ID4gQ2M6IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4cHBjLWRldkBsaXN0
cy5vemxhYnMub3JnOw0KPiA+ID4gbGF1cmFhQGNvZGVhdXJvcmEub3JnOyBYaWUgWGlhb2JvLVI2
MzA2MTsgYmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnOw0KPiA+ID4gTGkgWWFuZy1MZW8tUjU4NDcy
OyBwYXVsdXNAc2FtYmEub3JnDQo+ID4gPiBTdWJqZWN0OiBSZTogW1BBVENIIHYxMCA0LzVdIFFF
L0NQTTogbW92ZSBtdXJhbSBtYW5hZ2VtZW50IGZ1bmN0aW9ucw0KPiA+ID4gdG8gcWVfY29tbW9u
DQo+ID4gPg0KPiA+ID4gT24gRnJpLCBTZXAgMTgsIDIwMTUgYXQgMDM6MTU6MjBQTSArMDgwMCwg
WmhhbyBRaWFuZyB3cm90ZToNCj4gPiA+ID4gUUUgYW5kIENQTSBoYXZlIHRoZSBzYW1lIG11cmFt
LCB0aGV5IHVzZSB0aGUgc2FtZSBtYW5hZ2VtZW50DQo+ID4gPiA+IGZ1bmN0aW9ucy4gTm93IFFF
IHN1cHBvcnQgYm90aCBBUk0gYW5kIFBvd2VyUEMsIGl0IGlzIG5lY2Vzc2FyeSB0bw0KPiA+ID4g
PiBtb3ZlIFFFIHRvICJkcml2ZXIvc29jIiwgc28gbW92ZSB0aGUgbXVyYW0gbWFuYWdlbWVudCBm
dW5jdGlvbnMNCj4gPiA+ID4gZnJvbSBjcG1fY29tbW9uIHRvIHFlX2NvbW1vbiBmb3IgcHJlcGFy
aW5nIHRvIG1vdmUgUUUgY29kZSB0bw0KPiAiZHJpdmVyL3NvYyINCj4gPiA+ID4NCj4gPiA+ID4g
U2lnbmVkLW9mZi1ieTogWmhhbyBRaWFuZyA8cWlhbmcuemhhb0BmcmVlc2NhbGUuY29tPg0KPiA+
ID4gPiAtLS0NCj4gPiA+ID4gQ2hhbmdlcyBmb3IgdjI6DQo+ID4gPiA+ICAgLSBubyBjaGFuZ2Vz
DQo+ID4gPiA+IENoYW5nZXMgZm9yIHYzOg0KPiA+ID4gPiAgIC0gbm8gY2hhbmdlcw0KPiA+ID4g
PiBDaGFuZ2VzIGZvciB2NDoNCj4gPiA+ID4gICAtIG5vIGNoYW5nZXMNCj4gPiA+ID4gQ2hhbmdl
cyBmb3IgdjU6DQo+ID4gPiA+ICAgLSBubyBjaGFuZ2VzDQo+ID4gPiA+IENoYW5nZXMgZm9yIHY2
Og0KPiA+ID4gPiAgIC0gdXNpbmcgZ2VuYWxsb2MgaW5zdGVhZCByaGVhcCB0byBtYW5hZ2UgUUUg
TVVSQU0NCj4gPiA+ID4gICAtIHJlbW92ZSBxZV9yZXNldCBmcm9tIHBsYXRmb3JtIGZpbGUsIHVz
aW5nDQo+ID4gPiA+ICAgLSBzdWJzeXNfaW5pdGNhbGwgdG8gY2FsbCBxZV9pbml0IGZ1bmN0aW9u
Lg0KPiA+ID4NCj4gPiA+IFdoeSBpcyB0aGUgaW5pdCBjaGFuZ2UgaW4gdGhlIHNhbWUgcGF0Y2gg
YXMgbW92aW5nIHRoZSBtdXJhbSBjb2RlPw0KPiA+ID4NCj4gPiA+ID4gQ2hhbmdlcyBmb3Igdjc6
DQo+ID4gPiA+ICAgLSBtb3ZlIHRoaXMgcGF0Y2ggZnJvbSAzLzMgdG8gMi8zDQo+ID4gPiA+ICAg
LSBjb252ZXJ0IGNwbSB3aXRoIGdlbmFsbG9jDQo+ID4gPiA+ICAgLSBjaGVjayBmb3IgZ2VuX3Bv
b2wgYWxsb2NhdGlvbiBmYWlsdXJlIENoYW5nZXMgZm9yIHY4Og0KPiA+ID4gPiAgIC0gcmViYXNl
DQo+ID4gPiA+ICAgLSBtb3ZlIEJEX1NDXyogbWFjcm8gaW5zdGVhZCBvZiBjb3B5IENoYW5nZXMg
Zm9yIHY5Og0KPiA+ID4gPiAgIC0gZG9lc24ndCBtb2RpZnkgQ1BNLCBhZGQgYSBuZXcgcGF0Y2gg
dG8gbW9kaWZ5Lg0KPiA+ID4gPiAgIC0gcmViYXNlDQo+ID4gPiA+IENoYW5nZXMgZm9yIHYxMDoN
Cj4gPiA+ID4gICAtIHJlYmFzZQ0KPiA+ID4gPg0KPiA+ID4gPiAgYXJjaC9wb3dlcnBjL2luY2x1
ZGUvYXNtL2NwbS5oICAgICAgICAgICAgfCAgNTkgLS0tLS0tLS0NCj4gPiA+ID4gIGFyY2gvcG93
ZXJwYy9pbmNsdWRlL2FzbS9xZS5oICAgICAgICAgICAgIHwgIDUxICsrKysrKy0NCj4gPiA+ID4g
IGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9rbTgzeHguYyAgICAgIHwgICAyIC0NCj4gPiA+
ID4gIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzJ4X21kcy5jIHwgICAyIC0NCj4g
PiA+ID4gIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzJ4X3JkYi5jIHwgICAyIC0N
Cj4gPiA+ID4gIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzZ4X21kcy5jIHwgICAy
IC0NCj4gPiA+ID4gIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzZ4X3Jkay5jIHwg
ICAzIC0NCj4gPiA+ID4gIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9jb21tb24uYyAgICAg
IHwgICAxIC0NCj4gPiA+ID4gIGFyY2gvcG93ZXJwYy9zeXNkZXYvY3BtX2NvbW1vbi5jICAgICAg
ICAgIHwgMjA2ICstLS0tLS0tLS0tLS0tLS0tLQ0KPiAtLS0tDQo+ID4gPiAtLS0NCj4gPiA+ID4g
IGFyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL01ha2VmaWxlICAgICAgIHwgICAyICstDQo+ID4g
PiA+ICBhcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZS5jICAgICAgICAgICB8ICAxNSArKw0K
PiA+ID4gPiAgYXJjaC9wb3dlcnBjL3N5c2Rldi9xZV9saWIvcWVfY29tbW9uLmMgICAgfCAyNDIN
Cj4gPiA+ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKw0KPiA+ID4gPiAgMTIgZmlsZXMg
Y2hhbmdlZCwgMzAyIGluc2VydGlvbnMoKyksIDI4NSBkZWxldGlvbnMoLSkgIGNyZWF0ZQ0KPiA+
ID4gPiBtb2RlDQo+ID4gPiA+IDEwMDY0NCBhcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZV9j
b21tb24uYw0KPiA+ID4gPg0KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1
ZGUvYXNtL2NwbS5oDQo+ID4gPiA+IGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwbS5oIGlu
ZGV4IDQzOThhNmMuLjAwM2E3MzYgMTAwNjQ0DQo+ID4gPiA+IC0tLSBhL2FyY2gvcG93ZXJwYy9p
bmNsdWRlL2FzbS9jcG0uaA0KPiA+ID4gPiArKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20v
Y3BtLmgNCj4gPiA+ID4gQEAgLTkzLDIyICs5Myw2IEBAIHR5cGVkZWYgc3RydWN0IGNwbV9idWZf
ZGVzYyB7DQo+ID4gPiA+ICAgKi8NCj4gPiA+ID4NCj4gPiA+ID4gICNkZWZpbmUgQkRfU0NfRU1Q
VFkgICAgICAoMHg4MDAwKSAgICAgICAgLyogUmVjZWl2ZSBpcyBlbXB0eSAqLw0KPiA+ID4gPiAt
I2RlZmluZSBCRF9TQ19SRUFEWSAgICAgICgweDgwMDApICAgICAgICAvKiBUcmFuc21pdCBpcyBy
ZWFkeSAqLw0KPiA+ID4gPiAtI2RlZmluZSBCRF9TQ19XUkFQICAgICAgICgweDIwMDApICAgICAg
ICAvKiBMYXN0IGJ1ZmZlciBkZXNjcmlwdG9yDQo+ICovDQo+ID4gPiA+IC0jZGVmaW5lIEJEX1ND
X0lOVFJQVCAgICAgKDB4MTAwMCkgICAgICAgIC8qIEludGVycnVwdCBvbiBjaGFuZ2UgKi8NCj4g
PiA+ID4gLSNkZWZpbmUgQkRfU0NfTEFTVCAgICAgICAoMHgwODAwKSAgICAgICAgLyogTGFzdCBi
dWZmZXIgaW4gZnJhbWUNCj4gKi8NCj4gPiA+ID4gLSNkZWZpbmUgQkRfU0NfVEMgKDB4MDQwMCkg
ICAgICAgIC8qIFRyYW5zbWl0IENSQyAqLw0KPiA+ID4gPiAtI2RlZmluZSBCRF9TQ19DTSAoMHgw
MjAwKSAgICAgICAgLyogQ29udGludW91cyBtb2RlICovDQo+ID4gPiA+IC0jZGVmaW5lIEJEX1ND
X0lEICgweDAxMDApICAgICAgICAvKiBSZWMnZCB0b28gbWFueSBpZGxlcyAqLw0KPiA+ID4gPiAt
I2RlZmluZSBCRF9TQ19QICAgICAgICAgICgweDAxMDApICAgICAgICAvKiB4bXQgcHJlYW1ibGUg
Ki8NCj4gPiA+ID4gLSNkZWZpbmUgQkRfU0NfQlIgKDB4MDAyMCkgICAgICAgIC8qIEJyZWFrIHJl
Y2VpdmVkICovDQo+ID4gPiA+IC0jZGVmaW5lIEJEX1NDX0ZSICgweDAwMTApICAgICAgICAvKiBG
cmFtaW5nIGVycm9yICovDQo+ID4gPiA+IC0jZGVmaW5lIEJEX1NDX1BSICgweDAwMDgpICAgICAg
ICAvKiBQYXJpdHkgZXJyb3IgKi8NCj4gPiA+ID4gLSNkZWZpbmUgQkRfU0NfTkFLICAgICAgICAo
MHgwMDA0KSAgICAgICAgLyogTkFLIC0gZGlkIG5vdCByZXNwb25kDQo+ICovDQo+ID4gPiA+IC0j
ZGVmaW5lIEJEX1NDX09WICgweDAwMDIpICAgICAgICAvKiBPdmVycnVuICovDQo+ID4gPiA+IC0j
ZGVmaW5lIEJEX1NDX1VOICgweDAwMDIpICAgICAgICAvKiBVbmRlcnJ1biAqLw0KPiA+ID4gPiAt
I2RlZmluZSBCRF9TQ19DRCAoMHgwMDAxKSAgICAgICAgLyogKi8NCj4gPiA+ID4gLSNkZWZpbmUg
QkRfU0NfQ0wgKDB4MDAwMSkgICAgICAgIC8qIENvbGxpc2lvbiAqLw0KPiA+ID4NCj4gPiA+IFdo
YXQgZG9lcyB0aGlzIGhhdmUgdG8gZG8gd2l0aCBtdXJhbT8NCj4gPg0KPiA+IEJEIGlzIEJ1ZmZl
ciBEZXNjcmlwdG9ycywgaXQgaXMgaW4gbXVyYW0uDQo+IA0KPiBXaGF0IGRvZXMgaXQgaGF2ZSB0
byBkbyB3aXRoIHRoZSBtdXJhbSAqYWxsb2NhdG9yKj8NCj4gDQo+ID4gPg0KPiA+ID4gSSd2ZSBz
YWlkIG1hbnkgdGltZXMgbm93IHRoYXQgYW55IGNoYW5nZXMgdG8gdGhlIGNvZGUsIGluY2x1ZGlu
Zw0KPiA+ID4gcmVuYW1pbmcgZnVuY3Rpb25zLCBuZWVkcyB0byBiZSBhIHNlcGFyYXRlIHBhdGNo
IGZyb20gbW92aW5nIHRoZSBjb2RlLg0KPiA+DQo+ID4gSSBoYXZlIHNwbGl0IGEgcGF0Y2ggdG8g
dHdvIHBhdGNoZXMsIEhvd2V2ZXIsIE1heWJlIEkgbWlzdW5kZXJzdGFuZA0KPiA+IHlvdXIgbWVh
bnMuDQo+IA0KPiBJIGRpZG4ndCBzYXkgInNwbGl0IGl0IGludG8gdHdvIHBhdGNoZXMsIGhvd2V2
ZXIgeW91IGxpa2UiLiAgSSBzYWlkIHRvDQo+IGhhdmUgYWxsIGNoYW5nZXMgaW4gb25lIHBhdGNo
LCBhbmQgdGhlIG90aGVyIHBhdGNoIGJlIG5vdGhpbmcgYnV0IGEgbW92ZS4NCj4gUmVuYW1pbmcg
dGhlIGZ1bmN0aW9ucyBjb3VudHMgYXMgYSBjaGFuZ2UuDQo+IA0KPiA+IFNvIGlmIHRoZSBwYXRj
aCBqdXN0IGRvIHRoZSByZW5hbWluZyBhbmQgbW92aW5nIGNwbV9tdXJhbSBmdW5jdGlvbiB0bw0K
PiA+IHFlX211cmFtIGZ1bmN0aW9uLCBEb2VzIGl0IG9rPw0KPiANCj4gTm8uDQoNCldoeT8gTW92
aW5nIGNwbS9xZV9tdXJhbSBmdW5jdGlvbnMgYW5kIHJlbmFtaW5nIGNhbid0IGJlIHNwbGl0Lg0K
DQo+IA0KPiAtU2NvdHQNCg0K

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v10 4/5] QE/CPM: move muram management functions to qe_common
  2015-09-22  3:06         ` Zhao Qiang
@ 2015-09-22  3:07           ` Scott Wood
  2015-09-22  3:22             ` Zhao Qiang
  0 siblings, 1 reply; 27+ messages in thread
From: Scott Wood @ 2015-09-22  3:07 UTC (permalink / raw)
  To: Zhao Qiang-B45475
  Cc: linux-kernel, linuxppc-dev, lauraa, Xie Xiaobo-R63061, benh,
	Li Yang-Leo-R58472, paulus

On Mon, 2015-09-21 at 22:06 -0500, Zhao Qiang-B45475 wrote:
> On Tue, Sep 22, 2015 at 10:26AM +0800, Wood Scott-B07421 wrote:
> 
> > -----Original Message-----
> > From: Wood Scott-B07421
> > Sent: Tuesday, September 22, 2015 10:26 AM
> > To: Zhao Qiang-B45475
> > Cc: linux-kernel@vger.kernel.org; linuxppc-dev@lists.ozlabs.org;
> > lauraa@codeaurora.org; Xie Xiaobo-R63061; benh@kernel.crashing.org; Li
> > Yang-Leo-R58472; paulus@samba.org
> > Subject: Re: [PATCH v10 4/5] QE/CPM: move muram management functions to
> > qe_common
> > 
> > On Mon, 2015-09-21 at 21:23 -0500, Zhao Qiang-B45475 wrote:
> > > On Tue, Sep 22, 2015 at 06:54AM +0800, Wood Scott-B07421 wrote:
> > > > -----Original Message-----
> > > > From: Wood Scott-B07421
> > > > Sent: Tuesday, September 22, 2015 6:54 AM
> > > > To: Zhao Qiang-B45475
> > > > Cc: linux-kernel@vger.kernel.org; linuxppc-dev@lists.ozlabs.org;
> > > > lauraa@codeaurora.org; Xie Xiaobo-R63061; benh@kernel.crashing.org;
> > > > Li Yang-Leo-R58472; paulus@samba.org
> > > > Subject: Re: [PATCH v10 4/5] QE/CPM: move muram management functions
> > > > to qe_common
> > > > 
> > > > On Fri, Sep 18, 2015 at 03:15:20PM +0800, Zhao Qiang wrote:
> > > > > QE and CPM have the same muram, they use the same management
> > > > > functions. Now QE support both ARM and PowerPC, it is necessary to
> > > > > move QE to "driver/soc", so move the muram management functions
> > > > > from cpm_common to qe_common for preparing to move QE code to
> > "driver/soc"
> > > > > 
> > > > > Signed-off-by: Zhao Qiang <qiang.zhao@freescale.com>
> > > > > ---
> > > > > Changes for v2:
> > > > >   - no changes
> > > > > Changes for v3:
> > > > >   - no changes
> > > > > Changes for v4:
> > > > >   - no changes
> > > > > Changes for v5:
> > > > >   - no changes
> > > > > Changes for v6:
> > > > >   - using genalloc instead rheap to manage QE MURAM
> > > > >   - remove qe_reset from platform file, using
> > > > >   - subsys_initcall to call qe_init function.
> > > > 
> > > > Why is the init change in the same patch as moving the muram code?
> > > > 
> > > > > Changes for v7:
> > > > >   - move this patch from 3/3 to 2/3
> > > > >   - convert cpm with genalloc
> > > > >   - check for gen_pool allocation failure Changes for v8:
> > > > >   - rebase
> > > > >   - move BD_SC_* macro instead of copy Changes for v9:
> > > > >   - doesn't modify CPM, add a new patch to modify.
> > > > >   - rebase
> > > > > Changes for v10:
> > > > >   - rebase
> > > > > 
> > > > >  arch/powerpc/include/asm/cpm.h            |  59 --------
> > > > >  arch/powerpc/include/asm/qe.h             |  51 ++++++-
> > > > >  arch/powerpc/platforms/83xx/km83xx.c      |   2 -
> > > > >  arch/powerpc/platforms/83xx/mpc832x_mds.c |   2 -
> > > > >  arch/powerpc/platforms/83xx/mpc832x_rdb.c |   2 -
> > > > >  arch/powerpc/platforms/83xx/mpc836x_mds.c |   2 -
> > > > >  arch/powerpc/platforms/83xx/mpc836x_rdk.c |   3 -
> > > > >  arch/powerpc/platforms/85xx/common.c      |   1 -
> > > > >  arch/powerpc/sysdev/cpm_common.c          | 206 +-----------------
> > ----
> > > > ---
> > > > >  arch/powerpc/sysdev/qe_lib/Makefile       |   2 +-
> > > > >  arch/powerpc/sysdev/qe_lib/qe.c           |  15 ++
> > > > >  arch/powerpc/sysdev/qe_lib/qe_common.c    | 242
> > > > ++++++++++++++++++++++++++++++
> > > > >  12 files changed, 302 insertions(+), 285 deletions(-)  create
> > > > > mode
> > > > > 100644 arch/powerpc/sysdev/qe_lib/qe_common.c
> > > > > 
> > > > > diff --git a/arch/powerpc/include/asm/cpm.h
> > > > > b/arch/powerpc/include/asm/cpm.h index 4398a6c..003a736 100644
> > > > > --- a/arch/powerpc/include/asm/cpm.h
> > > > > +++ b/arch/powerpc/include/asm/cpm.h
> > > > > @@ -93,22 +93,6 @@ typedef struct cpm_buf_desc {
> > > > >   */
> > > > > 
> > > > >  #define BD_SC_EMPTY      (0x8000)        /* Receive is empty */
> > > > > -#define BD_SC_READY      (0x8000)        /* Transmit is ready */
> > > > > -#define BD_SC_WRAP       (0x2000)        /* Last buffer descriptor
> > */
> > > > > -#define BD_SC_INTRPT     (0x1000)        /* Interrupt on change */
> > > > > -#define BD_SC_LAST       (0x0800)        /* Last buffer in frame
> > */
> > > > > -#define BD_SC_TC (0x0400)        /* Transmit CRC */
> > > > > -#define BD_SC_CM (0x0200)        /* Continuous mode */
> > > > > -#define BD_SC_ID (0x0100)        /* Rec'd too many idles */
> > > > > -#define BD_SC_P          (0x0100)        /* xmt preamble */
> > > > > -#define BD_SC_BR (0x0020)        /* Break received */
> > > > > -#define BD_SC_FR (0x0010)        /* Framing error */
> > > > > -#define BD_SC_PR (0x0008)        /* Parity error */
> > > > > -#define BD_SC_NAK        (0x0004)        /* NAK - did not respond
> > */
> > > > > -#define BD_SC_OV (0x0002)        /* Overrun */
> > > > > -#define BD_SC_UN (0x0002)        /* Underrun */
> > > > > -#define BD_SC_CD (0x0001)        /* */
> > > > > -#define BD_SC_CL (0x0001)        /* Collision */
> > > > 
> > > > What does this have to do with muram?
> > > 
> > > BD is Buffer Descriptors, it is in muram.
> > 
> > What does it have to do with the muram *allocator*?
> > 
> > > > 
> > > > I've said many times now that any changes to the code, including
> > > > renaming functions, needs to be a separate patch from moving the code.
> > > 
> > > I have split a patch to two patches, However, Maybe I misunderstand
> > > your means.
> > 
> > I didn't say "split it into two patches, however you like".  I said to
> > have all changes in one patch, and the other patch be nothing but a move.
> > Renaming the functions counts as a change.
> > 
> > > So if the patch just do the renaming and moving cpm_muram function to
> > > qe_muram function, Does it ok?
> > 
> > No.
> 
> Why? 

So that I can see the changes as a diff.

> Moving cpm/qe_muram functions and renaming can't be split.

Why not?

-Scott

^ permalink raw reply	[flat|nested] 27+ messages in thread

* RE: [PATCH v10 4/5] QE/CPM: move muram management functions to qe_common
  2015-09-22  3:07           ` Scott Wood
@ 2015-09-22  3:22             ` Zhao Qiang
  2015-09-22  3:24               ` Scott Wood
  0 siblings, 1 reply; 27+ messages in thread
From: Zhao Qiang @ 2015-09-22  3:22 UTC (permalink / raw)
  To: Scott Wood
  Cc: linux-kernel, linuxppc-dev, lauraa, Xiaobo Xie, benh, Li Leo, paulus

T24gVHVlLCBTZXAgMjIsIDIwMTUgYXQgMTE6MDhBTSArMDgwMCwgV29vZCBTY290dC1CMDc0MjEg
d3JvdGU6DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogV29vZCBTY290
dC1CMDc0MjENCj4gU2VudDogVHVlc2RheSwgU2VwdGVtYmVyIDIyLCAyMDE1IDExOjA4IEFNDQo+
IFRvOiBaaGFvIFFpYW5nLUI0NTQ3NQ0KPiBDYzogbGludXgta2VybmVsQHZnZXIua2VybmVsLm9y
ZzsgbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmc7DQo+IGxhdXJhYUBjb2RlYXVyb3JhLm9y
ZzsgWGllIFhpYW9iby1SNjMwNjE7IGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZzsgTGkNCj4gWWFu
Zy1MZW8tUjU4NDcyOyBwYXVsdXNAc2FtYmEub3JnDQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjEw
IDQvNV0gUUUvQ1BNOiBtb3ZlIG11cmFtIG1hbmFnZW1lbnQgZnVuY3Rpb25zIHRvDQo+IHFlX2Nv
bW1vbg0KPiANCj4gT24gTW9uLCAyMDE1LTA5LTIxIGF0IDIyOjA2IC0wNTAwLCBaaGFvIFFpYW5n
LUI0NTQ3NSB3cm90ZToNCj4gPiBPbiBUdWUsIFNlcCAyMiwgMjAxNSBhdCAxMDoyNkFNICswODAw
LCBXb29kIFNjb3R0LUIwNzQyMSB3cm90ZToNCj4gPg0KPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNz
YWdlLS0tLS0NCj4gPiA+IEZyb206IFdvb2QgU2NvdHQtQjA3NDIxDQo+ID4gPiBTZW50OiBUdWVz
ZGF5LCBTZXB0ZW1iZXIgMjIsIDIwMTUgMTA6MjYgQU0NCj4gPiA+IFRvOiBaaGFvIFFpYW5nLUI0
NTQ3NQ0KPiA+ID4gQ2M6IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4cHBjLWRl
dkBsaXN0cy5vemxhYnMub3JnOw0KPiA+ID4gbGF1cmFhQGNvZGVhdXJvcmEub3JnOyBYaWUgWGlh
b2JvLVI2MzA2MTsgYmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnOw0KPiA+ID4gTGkgWWFuZy1MZW8t
UjU4NDcyOyBwYXVsdXNAc2FtYmEub3JnDQo+ID4gPiBTdWJqZWN0OiBSZTogW1BBVENIIHYxMCA0
LzVdIFFFL0NQTTogbW92ZSBtdXJhbSBtYW5hZ2VtZW50IGZ1bmN0aW9ucw0KPiA+ID4gdG8gcWVf
Y29tbW9uDQo+ID4gPg0KPiA+ID4gT24gTW9uLCAyMDE1LTA5LTIxIGF0IDIxOjIzIC0wNTAwLCBa
aGFvIFFpYW5nLUI0NTQ3NSB3cm90ZToNCj4gPiA+ID4gT24gVHVlLCBTZXAgMjIsIDIwMTUgYXQg
MDY6NTRBTSArMDgwMCwgV29vZCBTY290dC1CMDc0MjEgd3JvdGU6DQo+ID4gPiA+ID4gLS0tLS1P
cmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+ID4gPiBGcm9tOiBXb29kIFNjb3R0LUIwNzQyMQ0K
PiA+ID4gPiA+IFNlbnQ6IFR1ZXNkYXksIFNlcHRlbWJlciAyMiwgMjAxNSA2OjU0IEFNDQo+ID4g
PiA+ID4gVG86IFpoYW8gUWlhbmctQjQ1NDc1DQo+ID4gPiA+ID4gQ2M6IGxpbnV4LWtlcm5lbEB2
Z2VyLmtlcm5lbC5vcmc7IGxpbnV4cHBjLWRldkBsaXN0cy5vemxhYnMub3JnOw0KPiA+ID4gPiA+
IGxhdXJhYUBjb2RlYXVyb3JhLm9yZzsgWGllIFhpYW9iby1SNjMwNjE7DQo+ID4gPiA+ID4gYmVu
aEBrZXJuZWwuY3Jhc2hpbmcub3JnOyBMaSBZYW5nLUxlby1SNTg0NzI7IHBhdWx1c0BzYW1iYS5v
cmcNCj4gPiA+ID4gPiBTdWJqZWN0OiBSZTogW1BBVENIIHYxMCA0LzVdIFFFL0NQTTogbW92ZSBt
dXJhbSBtYW5hZ2VtZW50DQo+ID4gPiA+ID4gZnVuY3Rpb25zIHRvIHFlX2NvbW1vbg0KPiA+ID4g
PiA+DQo+ID4gPiA+ID4gT24gRnJpLCBTZXAgMTgsIDIwMTUgYXQgMDM6MTU6MjBQTSArMDgwMCwg
WmhhbyBRaWFuZyB3cm90ZToNCj4gPiA+ID4gPiA+IFFFIGFuZCBDUE0gaGF2ZSB0aGUgc2FtZSBt
dXJhbSwgdGhleSB1c2UgdGhlIHNhbWUgbWFuYWdlbWVudA0KPiA+ID4gPiA+ID4gZnVuY3Rpb25z
LiBOb3cgUUUgc3VwcG9ydCBib3RoIEFSTSBhbmQgUG93ZXJQQywgaXQgaXMNCj4gPiA+ID4gPiA+
IG5lY2Vzc2FyeSB0byBtb3ZlIFFFIHRvICJkcml2ZXIvc29jIiwgc28gbW92ZSB0aGUgbXVyYW0N
Cj4gPiA+ID4gPiA+IG1hbmFnZW1lbnQgZnVuY3Rpb25zIGZyb20gY3BtX2NvbW1vbiB0byBxZV9j
b21tb24gZm9yDQo+ID4gPiA+ID4gPiBwcmVwYXJpbmcgdG8gbW92ZSBRRSBjb2RlIHRvDQo+ID4g
PiAiZHJpdmVyL3NvYyINCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBa
aGFvIFFpYW5nIDxxaWFuZy56aGFvQGZyZWVzY2FsZS5jb20+DQo+ID4gPiA+ID4gPiAtLS0NCj4g
PiA+ID4gPiA+IENoYW5nZXMgZm9yIHYyOg0KPiA+ID4gPiA+ID4gICAtIG5vIGNoYW5nZXMNCj4g
PiA+ID4gPiA+IENoYW5nZXMgZm9yIHYzOg0KPiA+ID4gPiA+ID4gICAtIG5vIGNoYW5nZXMNCj4g
PiA+ID4gPiA+IENoYW5nZXMgZm9yIHY0Og0KPiA+ID4gPiA+ID4gICAtIG5vIGNoYW5nZXMNCj4g
PiA+ID4gPiA+IENoYW5nZXMgZm9yIHY1Og0KPiA+ID4gPiA+ID4gICAtIG5vIGNoYW5nZXMNCj4g
PiA+ID4gPiA+IENoYW5nZXMgZm9yIHY2Og0KPiA+ID4gPiA+ID4gICAtIHVzaW5nIGdlbmFsbG9j
IGluc3RlYWQgcmhlYXAgdG8gbWFuYWdlIFFFIE1VUkFNDQo+ID4gPiA+ID4gPiAgIC0gcmVtb3Zl
IHFlX3Jlc2V0IGZyb20gcGxhdGZvcm0gZmlsZSwgdXNpbmcNCj4gPiA+ID4gPiA+ICAgLSBzdWJz
eXNfaW5pdGNhbGwgdG8gY2FsbCBxZV9pbml0IGZ1bmN0aW9uLg0KPiA+ID4gPiA+DQo+ID4gPiA+
ID4gV2h5IGlzIHRoZSBpbml0IGNoYW5nZSBpbiB0aGUgc2FtZSBwYXRjaCBhcyBtb3ZpbmcgdGhl
IG11cmFtIGNvZGU/DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiA+IENoYW5nZXMgZm9yIHY3Og0KPiA+
ID4gPiA+ID4gICAtIG1vdmUgdGhpcyBwYXRjaCBmcm9tIDMvMyB0byAyLzMNCj4gPiA+ID4gPiA+
ICAgLSBjb252ZXJ0IGNwbSB3aXRoIGdlbmFsbG9jDQo+ID4gPiA+ID4gPiAgIC0gY2hlY2sgZm9y
IGdlbl9wb29sIGFsbG9jYXRpb24gZmFpbHVyZSBDaGFuZ2VzIGZvciB2ODoNCj4gPiA+ID4gPiA+
ICAgLSByZWJhc2UNCj4gPiA+ID4gPiA+ICAgLSBtb3ZlIEJEX1NDXyogbWFjcm8gaW5zdGVhZCBv
ZiBjb3B5IENoYW5nZXMgZm9yIHY5Og0KPiA+ID4gPiA+ID4gICAtIGRvZXNuJ3QgbW9kaWZ5IENQ
TSwgYWRkIGEgbmV3IHBhdGNoIHRvIG1vZGlmeS4NCj4gPiA+ID4gPiA+ICAgLSByZWJhc2UNCj4g
PiA+ID4gPiA+IENoYW5nZXMgZm9yIHYxMDoNCj4gPiA+ID4gPiA+ICAgLSByZWJhc2UNCj4gPiA+
ID4gPiA+DQo+ID4gPiA+ID4gPiAgYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NwbS5oICAgICAg
ICAgICAgfCAgNTkgLS0tLS0tLS0NCj4gPiA+ID4gPiA+ICBhcmNoL3Bvd2VycGMvaW5jbHVkZS9h
c20vcWUuaCAgICAgICAgICAgICB8ICA1MSArKysrKystDQo+ID4gPiA+ID4gPiAgYXJjaC9wb3dl
cnBjL3BsYXRmb3Jtcy84M3h4L2ttODN4eC5jICAgICAgfCAgIDIgLQ0KPiA+ID4gPiA+ID4gIGFy
Y2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzJ4X21kcy5jIHwgICAyIC0NCj4gPiA+ID4g
PiA+ICBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODMyeF9yZGIuYyB8ICAgMiAtDQo+
ID4gPiA+ID4gPiAgYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNnhfbWRzLmMgfCAg
IDIgLQ0KPiA+ID4gPiA+ID4gIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzZ4X3Jk
ay5jIHwgICAzIC0NCj4gPiA+ID4gPiA+ICBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvY29t
bW9uLmMgICAgICB8ICAgMSAtDQo+ID4gPiA+ID4gPiAgYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG1f
Y29tbW9uLmMgICAgICAgICAgfCAyMDYgKy0tLS0tLS0tLS0tLS0NCj4gLS0tLQ0KPiA+ID4gLS0t
LQ0KPiA+ID4gPiA+IC0tLQ0KPiA+ID4gPiA+ID4gIGFyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGli
L01ha2VmaWxlICAgICAgIHwgICAyICstDQo+ID4gPiA+ID4gPiAgYXJjaC9wb3dlcnBjL3N5c2Rl
di9xZV9saWIvcWUuYyAgICAgICAgICAgfCAgMTUgKysNCj4gPiA+ID4gPiA+ICBhcmNoL3Bvd2Vy
cGMvc3lzZGV2L3FlX2xpYi9xZV9jb21tb24uYyAgICB8IDI0Mg0KPiA+ID4gPiA+ICsrKysrKysr
KysrKysrKysrKysrKysrKysrKysrKw0KPiA+ID4gPiA+ID4gIDEyIGZpbGVzIGNoYW5nZWQsIDMw
MiBpbnNlcnRpb25zKCspLCAyODUgZGVsZXRpb25zKC0pICBjcmVhdGUNCj4gPiA+ID4gPiA+IG1v
ZGUNCj4gPiA+ID4gPiA+IDEwMDY0NCBhcmNoL3Bvd2VycGMvc3lzZGV2L3FlX2xpYi9xZV9jb21t
b24uYw0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+IGRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMv
aW5jbHVkZS9hc20vY3BtLmgNCj4gPiA+ID4gPiA+IGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNt
L2NwbS5oIGluZGV4IDQzOThhNmMuLjAwM2E3MzYgMTAwNjQ0DQo+ID4gPiA+ID4gPiAtLS0gYS9h
cmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3BtLmgNCj4gPiA+ID4gPiA+ICsrKyBiL2FyY2gvcG93
ZXJwYy9pbmNsdWRlL2FzbS9jcG0uaA0KPiA+ID4gPiA+ID4gQEAgLTkzLDIyICs5Myw2IEBAIHR5
cGVkZWYgc3RydWN0IGNwbV9idWZfZGVzYyB7DQo+ID4gPiA+ID4gPiAgICovDQo+ID4gPiA+ID4g
Pg0KPiA+ID4gPiA+ID4gICNkZWZpbmUgQkRfU0NfRU1QVFkgICAgICAoMHg4MDAwKSAgICAgICAg
LyogUmVjZWl2ZSBpcyBlbXB0eQ0KPiAqLw0KPiA+ID4gPiA+ID4gLSNkZWZpbmUgQkRfU0NfUkVB
RFkgICAgICAoMHg4MDAwKSAgICAgICAgLyogVHJhbnNtaXQgaXMgcmVhZHkNCj4gKi8NCj4gPiA+
ID4gPiA+IC0jZGVmaW5lIEJEX1NDX1dSQVAgICAgICAgKDB4MjAwMCkgICAgICAgIC8qIExhc3Qg
YnVmZmVyDQo+IGRlc2NyaXB0b3INCj4gPiA+ICovDQo+ID4gPiA+ID4gPiAtI2RlZmluZSBCRF9T
Q19JTlRSUFQgICAgICgweDEwMDApICAgICAgICAvKiBJbnRlcnJ1cHQgb24NCj4gY2hhbmdlICov
DQo+ID4gPiA+ID4gPiAtI2RlZmluZSBCRF9TQ19MQVNUICAgICAgICgweDA4MDApICAgICAgICAv
KiBMYXN0IGJ1ZmZlciBpbg0KPiBmcmFtZQ0KPiA+ID4gKi8NCj4gPiA+ID4gPiA+IC0jZGVmaW5l
IEJEX1NDX1RDICgweDA0MDApICAgICAgICAvKiBUcmFuc21pdCBDUkMgKi8NCj4gPiA+ID4gPiA+
IC0jZGVmaW5lIEJEX1NDX0NNICgweDAyMDApICAgICAgICAvKiBDb250aW51b3VzIG1vZGUgKi8N
Cj4gPiA+ID4gPiA+IC0jZGVmaW5lIEJEX1NDX0lEICgweDAxMDApICAgICAgICAvKiBSZWMnZCB0
b28gbWFueSBpZGxlcyAqLw0KPiA+ID4gPiA+ID4gLSNkZWZpbmUgQkRfU0NfUCAgICAgICAgICAo
MHgwMTAwKSAgICAgICAgLyogeG10IHByZWFtYmxlICovDQo+ID4gPiA+ID4gPiAtI2RlZmluZSBC
RF9TQ19CUiAoMHgwMDIwKSAgICAgICAgLyogQnJlYWsgcmVjZWl2ZWQgKi8NCj4gPiA+ID4gPiA+
IC0jZGVmaW5lIEJEX1NDX0ZSICgweDAwMTApICAgICAgICAvKiBGcmFtaW5nIGVycm9yICovDQo+
ID4gPiA+ID4gPiAtI2RlZmluZSBCRF9TQ19QUiAoMHgwMDA4KSAgICAgICAgLyogUGFyaXR5IGVy
cm9yICovDQo+ID4gPiA+ID4gPiAtI2RlZmluZSBCRF9TQ19OQUsgICAgICAgICgweDAwMDQpICAg
ICAgICAvKiBOQUsgLSBkaWQgbm90DQo+IHJlc3BvbmQNCj4gPiA+ICovDQo+ID4gPiA+ID4gPiAt
I2RlZmluZSBCRF9TQ19PViAoMHgwMDAyKSAgICAgICAgLyogT3ZlcnJ1biAqLw0KPiA+ID4gPiA+
ID4gLSNkZWZpbmUgQkRfU0NfVU4gKDB4MDAwMikgICAgICAgIC8qIFVuZGVycnVuICovDQo+ID4g
PiA+ID4gPiAtI2RlZmluZSBCRF9TQ19DRCAoMHgwMDAxKSAgICAgICAgLyogKi8NCj4gPiA+ID4g
PiA+IC0jZGVmaW5lIEJEX1NDX0NMICgweDAwMDEpICAgICAgICAvKiBDb2xsaXNpb24gKi8NCj4g
PiA+ID4gPg0KPiA+ID4gPiA+IFdoYXQgZG9lcyB0aGlzIGhhdmUgdG8gZG8gd2l0aCBtdXJhbT8N
Cj4gPiA+ID4NCj4gPiA+ID4gQkQgaXMgQnVmZmVyIERlc2NyaXB0b3JzLCBpdCBpcyBpbiBtdXJh
bS4NCj4gPiA+DQo+ID4gPiBXaGF0IGRvZXMgaXQgaGF2ZSB0byBkbyB3aXRoIHRoZSBtdXJhbSAq
YWxsb2NhdG9yKj8NCj4gPiA+DQo+ID4gPiA+ID4NCj4gPiA+ID4gPiBJJ3ZlIHNhaWQgbWFueSB0
aW1lcyBub3cgdGhhdCBhbnkgY2hhbmdlcyB0byB0aGUgY29kZSwgaW5jbHVkaW5nDQo+ID4gPiA+
ID4gcmVuYW1pbmcgZnVuY3Rpb25zLCBuZWVkcyB0byBiZSBhIHNlcGFyYXRlIHBhdGNoIGZyb20g
bW92aW5nIHRoZQ0KPiBjb2RlLg0KPiA+ID4gPg0KPiA+ID4gPiBJIGhhdmUgc3BsaXQgYSBwYXRj
aCB0byB0d28gcGF0Y2hlcywgSG93ZXZlciwgTWF5YmUgSQ0KPiA+ID4gPiBtaXN1bmRlcnN0YW5k
IHlvdXIgbWVhbnMuDQo+ID4gPg0KPiA+ID4gSSBkaWRuJ3Qgc2F5ICJzcGxpdCBpdCBpbnRvIHR3
byBwYXRjaGVzLCBob3dldmVyIHlvdSBsaWtlIi4gIEkgc2FpZA0KPiA+ID4gdG8gaGF2ZSBhbGwg
Y2hhbmdlcyBpbiBvbmUgcGF0Y2gsIGFuZCB0aGUgb3RoZXIgcGF0Y2ggYmUgbm90aGluZyBidXQN
Cj4gYSBtb3ZlLg0KPiA+ID4gUmVuYW1pbmcgdGhlIGZ1bmN0aW9ucyBjb3VudHMgYXMgYSBjaGFu
Z2UuDQo+ID4gPg0KPiA+ID4gPiBTbyBpZiB0aGUgcGF0Y2gganVzdCBkbyB0aGUgcmVuYW1pbmcg
YW5kIG1vdmluZyBjcG1fbXVyYW0gZnVuY3Rpb24NCj4gPiA+ID4gdG8gcWVfbXVyYW0gZnVuY3Rp
b24sIERvZXMgaXQgb2s/DQo+ID4gPg0KPiA+ID4gTm8uDQo+ID4NCj4gPiBXaHk/DQo+IA0KPiBT
byB0aGF0IEkgY2FuIHNlZSB0aGUgY2hhbmdlcyBhcyBhIGRpZmYuDQo+IA0KPiA+IE1vdmluZyBj
cG0vcWVfbXVyYW0gZnVuY3Rpb25zIGFuZCByZW5hbWluZyBjYW4ndCBiZSBzcGxpdC4NCj4gDQo+
IFdoeSBub3Q/DQoNCklmIG1vdmluZyBjcG1fbXVyYW1fKiB0byBxZV9tdXJhbV8qIHdpdGhvdXQg
cmVuYW1pbmcsIA0KSXQgc3RpbGwgaXMgIiNkZWZpbmUgcWVfbXVyYW1faW5pdCBjcG1fbXVyYW1f
aW5pdCIsDQpXaGVyZSB0byBmaW5kIGNwbV9tdXJhbV8qPyANCg0KPiANCj4gLVNjb3R0DQo+IA0K
DQo=

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v10 4/5] QE/CPM: move muram management functions to qe_common
  2015-09-22  3:22             ` Zhao Qiang
@ 2015-09-22  3:24               ` Scott Wood
  2015-09-22  4:07                 ` Zhao Qiang
  0 siblings, 1 reply; 27+ messages in thread
From: Scott Wood @ 2015-09-22  3:24 UTC (permalink / raw)
  To: Zhao Qiang-B45475
  Cc: linux-kernel, linuxppc-dev, lauraa, Xie Xiaobo-R63061, benh,
	Li Yang-Leo-R58472, paulus

On Mon, 2015-09-21 at 22:22 -0500, Zhao Qiang-B45475 wrote:
> On Tue, Sep 22, 2015 at 11:08AM +0800, Wood Scott-B07421 wrote:
> 
> > -----Original Message-----
> > From: Wood Scott-B07421
> > Sent: Tuesday, September 22, 2015 11:08 AM
> > To: Zhao Qiang-B45475
> > Cc: linux-kernel@vger.kernel.org; linuxppc-dev@lists.ozlabs.org;
> > lauraa@codeaurora.org; Xie Xiaobo-R63061; benh@kernel.crashing.org; Li
> > Yang-Leo-R58472; paulus@samba.org
> > Subject: Re: [PATCH v10 4/5] QE/CPM: move muram management functions to
> > qe_common
> > 
> > On Mon, 2015-09-21 at 22:06 -0500, Zhao Qiang-B45475 wrote:
> > > On Tue, Sep 22, 2015 at 10:26AM +0800, Wood Scott-B07421 wrote:
> > > 
> > > > -----Original Message-----
> > > > From: Wood Scott-B07421
> > > > Sent: Tuesday, September 22, 2015 10:26 AM
> > > > To: Zhao Qiang-B45475
> > > > Cc: linux-kernel@vger.kernel.org; linuxppc-dev@lists.ozlabs.org;
> > > > lauraa@codeaurora.org; Xie Xiaobo-R63061; benh@kernel.crashing.org;
> > > > Li Yang-Leo-R58472; paulus@samba.org
> > > > Subject: Re: [PATCH v10 4/5] QE/CPM: move muram management functions
> > > > to qe_common
> > > > 
> > > > On Mon, 2015-09-21 at 21:23 -0500, Zhao Qiang-B45475 wrote:
> > > > > On Tue, Sep 22, 2015 at 06:54AM +0800, Wood Scott-B07421 wrote:
> > > > > > -----Original Message-----
> > > > > > From: Wood Scott-B07421
> > > > > > Sent: Tuesday, September 22, 2015 6:54 AM
> > > > > > To: Zhao Qiang-B45475
> > > > > > Cc: linux-kernel@vger.kernel.org; linuxppc-dev@lists.ozlabs.org;
> > > > > > lauraa@codeaurora.org; Xie Xiaobo-R63061;
> > > > > > benh@kernel.crashing.org; Li Yang-Leo-R58472; paulus@samba.org
> > > > > > Subject: Re: [PATCH v10 4/5] QE/CPM: move muram management
> > > > > > functions to qe_common
> > > > > > 
> > > > > > On Fri, Sep 18, 2015 at 03:15:20PM +0800, Zhao Qiang wrote:
> > > > > > > QE and CPM have the same muram, they use the same management
> > > > > > > functions. Now QE support both ARM and PowerPC, it is
> > > > > > > necessary to move QE to "driver/soc", so move the muram
> > > > > > > management functions from cpm_common to qe_common for
> > > > > > > preparing to move QE code to
> > > > "driver/soc"
> > > > > > > 
> > > > > > > Signed-off-by: Zhao Qiang <qiang.zhao@freescale.com>
> > > > > > > ---
> > > > > > > Changes for v2:
> > > > > > >   - no changes
> > > > > > > Changes for v3:
> > > > > > >   - no changes
> > > > > > > Changes for v4:
> > > > > > >   - no changes
> > > > > > > Changes for v5:
> > > > > > >   - no changes
> > > > > > > Changes for v6:
> > > > > > >   - using genalloc instead rheap to manage QE MURAM
> > > > > > >   - remove qe_reset from platform file, using
> > > > > > >   - subsys_initcall to call qe_init function.
> > > > > > 
> > > > > > Why is the init change in the same patch as moving the muram code?
> > > > > > 
> > > > > > > Changes for v7:
> > > > > > >   - move this patch from 3/3 to 2/3
> > > > > > >   - convert cpm with genalloc
> > > > > > >   - check for gen_pool allocation failure Changes for v8:
> > > > > > >   - rebase
> > > > > > >   - move BD_SC_* macro instead of copy Changes for v9:
> > > > > > >   - doesn't modify CPM, add a new patch to modify.
> > > > > > >   - rebase
> > > > > > > Changes for v10:
> > > > > > >   - rebase
> > > > > > > 
> > > > > > >  arch/powerpc/include/asm/cpm.h            |  59 --------
> > > > > > >  arch/powerpc/include/asm/qe.h             |  51 ++++++-
> > > > > > >  arch/powerpc/platforms/83xx/km83xx.c      |   2 -
> > > > > > >  arch/powerpc/platforms/83xx/mpc832x_mds.c |   2 -
> > > > > > >  arch/powerpc/platforms/83xx/mpc832x_rdb.c |   2 -
> > > > > > >  arch/powerpc/platforms/83xx/mpc836x_mds.c |   2 -
> > > > > > >  arch/powerpc/platforms/83xx/mpc836x_rdk.c |   3 -
> > > > > > >  arch/powerpc/platforms/85xx/common.c      |   1 -
> > > > > > >  arch/powerpc/sysdev/cpm_common.c          | 206 +-------------
> > ----
> > > > ----
> > > > > > ---
> > > > > > >  arch/powerpc/sysdev/qe_lib/Makefile       |   2 +-
> > > > > > >  arch/powerpc/sysdev/qe_lib/qe.c           |  15 ++
> > > > > > >  arch/powerpc/sysdev/qe_lib/qe_common.c    | 242
> > > > > > ++++++++++++++++++++++++++++++
> > > > > > >  12 files changed, 302 insertions(+), 285 deletions(-)  create
> > > > > > > mode
> > > > > > > 100644 arch/powerpc/sysdev/qe_lib/qe_common.c
> > > > > > > 
> > > > > > > diff --git a/arch/powerpc/include/asm/cpm.h
> > > > > > > b/arch/powerpc/include/asm/cpm.h index 4398a6c..003a736 100644
> > > > > > > --- a/arch/powerpc/include/asm/cpm.h
> > > > > > > +++ b/arch/powerpc/include/asm/cpm.h
> > > > > > > @@ -93,22 +93,6 @@ typedef struct cpm_buf_desc {
> > > > > > >   */
> > > > > > > 
> > > > > > >  #define BD_SC_EMPTY      (0x8000)        /* Receive is empty
> > */
> > > > > > > -#define BD_SC_READY      (0x8000)        /* Transmit is ready
> > */
> > > > > > > -#define BD_SC_WRAP       (0x2000)        /* Last buffer
> > descriptor
> > > > */
> > > > > > > -#define BD_SC_INTRPT     (0x1000)        /* Interrupt on
> > change */
> > > > > > > -#define BD_SC_LAST       (0x0800)        /* Last buffer in
> > frame
> > > > */
> > > > > > > -#define BD_SC_TC (0x0400)        /* Transmit CRC */
> > > > > > > -#define BD_SC_CM (0x0200)        /* Continuous mode */
> > > > > > > -#define BD_SC_ID (0x0100)        /* Rec'd too many idles */
> > > > > > > -#define BD_SC_P          (0x0100)        /* xmt preamble */
> > > > > > > -#define BD_SC_BR (0x0020)        /* Break received */
> > > > > > > -#define BD_SC_FR (0x0010)        /* Framing error */
> > > > > > > -#define BD_SC_PR (0x0008)        /* Parity error */
> > > > > > > -#define BD_SC_NAK        (0x0004)        /* NAK - did not
> > respond
> > > > */
> > > > > > > -#define BD_SC_OV (0x0002)        /* Overrun */
> > > > > > > -#define BD_SC_UN (0x0002)        /* Underrun */
> > > > > > > -#define BD_SC_CD (0x0001)        /* */
> > > > > > > -#define BD_SC_CL (0x0001)        /* Collision */
> > > > > > 
> > > > > > What does this have to do with muram?
> > > > > 
> > > > > BD is Buffer Descriptors, it is in muram.
> > > > 
> > > > What does it have to do with the muram *allocator*?
> > > > 
> > > > > > 
> > > > > > I've said many times now that any changes to the code, including
> > > > > > renaming functions, needs to be a separate patch from moving the
> > code.
> > > > > 
> > > > > I have split a patch to two patches, However, Maybe I
> > > > > misunderstand your means.
> > > > 
> > > > I didn't say "split it into two patches, however you like".  I said
> > > > to have all changes in one patch, and the other patch be nothing but
> > a move.
> > > > Renaming the functions counts as a change.
> > > > 
> > > > > So if the patch just do the renaming and moving cpm_muram function
> > > > > to qe_muram function, Does it ok?
> > > > 
> > > > No.
> > > 
> > > Why?
> > 
> > So that I can see the changes as a diff.
> > 
> > > Moving cpm/qe_muram functions and renaming can't be split.
> > 
> > Why not?
> 
> If moving cpm_muram_* to qe_muram_* without renaming, 
> It still is "#define qe_muram_init cpm_muram_init",
> Where to find cpm_muram_*? 

Could you be more specific about what the actual problem is?  If you're 
talking about the fact that, for just one commit in the history, there will 
be a file with "qe" in the name that has functions with "cpm" in the name, 
who cares?

-Scott

^ permalink raw reply	[flat|nested] 27+ messages in thread

* RE: [PATCH v10 4/5] QE/CPM: move muram management functions to qe_common
  2015-09-22  3:24               ` Scott Wood
@ 2015-09-22  4:07                 ` Zhao Qiang
  0 siblings, 0 replies; 27+ messages in thread
From: Zhao Qiang @ 2015-09-22  4:07 UTC (permalink / raw)
  To: Scott Wood
  Cc: linux-kernel, linuxppc-dev, lauraa, Xiaobo Xie, benh, Li Leo, paulus

DQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IFdvb2QgU2NvdHQtQjA3NDIx
DQo+IFNlbnQ6IFR1ZXNkYXksIFNlcHRlbWJlciAyMiwgMjAxNSAxMToyNSBBTQ0KPiBUbzogWmhh
byBRaWFuZy1CNDU0NzUNCj4gQ2M6IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4
cHBjLWRldkBsaXN0cy5vemxhYnMub3JnOw0KPiBsYXVyYWFAY29kZWF1cm9yYS5vcmc7IFhpZSBY
aWFvYm8tUjYzMDYxOyBiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmc7IExpDQo+IFlhbmctTGVvLVI1
ODQ3MjsgcGF1bHVzQHNhbWJhLm9yZw0KPiBTdWJqZWN0OiBSZTogW1BBVENIIHYxMCA0LzVdIFFF
L0NQTTogbW92ZSBtdXJhbSBtYW5hZ2VtZW50IGZ1bmN0aW9ucyB0bw0KPiBxZV9jb21tb24NCj4g
DQo+IE9uIE1vbiwgMjAxNS0wOS0yMSBhdCAyMjoyMiAtMDUwMCwgWmhhbyBRaWFuZy1CNDU0NzUg
d3JvdGU6DQo+ID4gT24gVHVlLCBTZXAgMjIsIDIwMTUgYXQgMTE6MDhBTSArMDgwMCwgV29vZCBT
Y290dC1CMDc0MjEgd3JvdGU6DQo+ID4NCj4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0t
DQo+ID4gPiBGcm9tOiBXb29kIFNjb3R0LUIwNzQyMQ0KPiA+ID4gU2VudDogVHVlc2RheSwgU2Vw
dGVtYmVyIDIyLCAyMDE1IDExOjA4IEFNDQo+ID4gPiBUbzogWmhhbyBRaWFuZy1CNDU0NzUNCj4g
PiA+IENjOiBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnOyBsaW51eHBwYy1kZXZAbGlzdHMu
b3psYWJzLm9yZzsNCj4gPiA+IGxhdXJhYUBjb2RlYXVyb3JhLm9yZzsgWGllIFhpYW9iby1SNjMw
NjE7IGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZzsNCj4gPiA+IExpIFlhbmctTGVvLVI1ODQ3Mjsg
cGF1bHVzQHNhbWJhLm9yZw0KPiA+ID4gU3ViamVjdDogUmU6IFtQQVRDSCB2MTAgNC81XSBRRS9D
UE06IG1vdmUgbXVyYW0gbWFuYWdlbWVudCBmdW5jdGlvbnMNCj4gPiA+IHRvIHFlX2NvbW1vbg0K
PiA+ID4NCj4gPiA+IE9uIE1vbiwgMjAxNS0wOS0yMSBhdCAyMjowNiAtMDUwMCwgWmhhbyBRaWFu
Zy1CNDU0NzUgd3JvdGU6DQo+ID4gPiA+IE9uIFR1ZSwgU2VwIDIyLCAyMDE1IGF0IDEwOjI2QU0g
KzA4MDAsIFdvb2QgU2NvdHQtQjA3NDIxIHdyb3RlOg0KPiA+ID4gPg0KPiA+ID4gPiA+IC0tLS0t
T3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiA+ID4gRnJvbTogV29vZCBTY290dC1CMDc0MjEN
Cj4gPiA+ID4gPiBTZW50OiBUdWVzZGF5LCBTZXB0ZW1iZXIgMjIsIDIwMTUgMTA6MjYgQU0NCj4g
PiA+ID4gPiBUbzogWmhhbyBRaWFuZy1CNDU0NzUNCj4gPiA+ID4gPiBDYzogbGludXgta2VybmVs
QHZnZXIua2VybmVsLm9yZzsgbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmc7DQo+ID4gPiA+
ID4gbGF1cmFhQGNvZGVhdXJvcmEub3JnOyBYaWUgWGlhb2JvLVI2MzA2MTsNCj4gPiA+ID4gPiBi
ZW5oQGtlcm5lbC5jcmFzaGluZy5vcmc7IExpIFlhbmctTGVvLVI1ODQ3MjsgcGF1bHVzQHNhbWJh
Lm9yZw0KPiA+ID4gPiA+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjEwIDQvNV0gUUUvQ1BNOiBtb3Zl
IG11cmFtIG1hbmFnZW1lbnQNCj4gPiA+ID4gPiBmdW5jdGlvbnMgdG8gcWVfY29tbW9uDQo+ID4g
PiA+ID4NCj4gPiA+ID4gPiBPbiBNb24sIDIwMTUtMDktMjEgYXQgMjE6MjMgLTA1MDAsIFpoYW8g
UWlhbmctQjQ1NDc1IHdyb3RlOg0KPiA+ID4gPiA+ID4gT24gVHVlLCBTZXAgMjIsIDIwMTUgYXQg
MDY6NTRBTSArMDgwMCwgV29vZCBTY290dC1CMDc0MjEgd3JvdGU6DQo+ID4gPiA+ID4gPiA+IC0t
LS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+ID4gPiA+ID4gPiA+IEZyb206IFdvb2QgU2NvdHQt
QjA3NDIxDQo+ID4gPiA+ID4gPiA+IFNlbnQ6IFR1ZXNkYXksIFNlcHRlbWJlciAyMiwgMjAxNSA2
OjU0IEFNDQo+ID4gPiA+ID4gPiA+IFRvOiBaaGFvIFFpYW5nLUI0NTQ3NQ0KPiA+ID4gPiA+ID4g
PiBDYzogbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsNCj4gPiA+ID4gPiA+ID4gbGludXhw
cGMtZGV2QGxpc3RzLm96bGFicy5vcmc7IGxhdXJhYUBjb2RlYXVyb3JhLm9yZzsgWGllDQo+ID4g
PiA+ID4gPiA+IFhpYW9iby1SNjMwNjE7IGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZzsgTGkgWWFu
Zy1MZW8tUjU4NDcyOw0KPiA+ID4gPiA+ID4gPiBwYXVsdXNAc2FtYmEub3JnDQo+ID4gPiA+ID4g
PiA+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjEwIDQvNV0gUUUvQ1BNOiBtb3ZlIG11cmFtIG1hbmFn
ZW1lbnQNCj4gPiA+ID4gPiA+ID4gZnVuY3Rpb25zIHRvIHFlX2NvbW1vbg0KPiA+ID4gPiA+ID4g
Pg0KPiA+ID4gPiA+ID4gPiBPbiBGcmksIFNlcCAxOCwgMjAxNSBhdCAwMzoxNToyMFBNICswODAw
LCBaaGFvIFFpYW5nIHdyb3RlOg0KPiA+ID4gPiA+ID4gPiA+IFFFIGFuZCBDUE0gaGF2ZSB0aGUg
c2FtZSBtdXJhbSwgdGhleSB1c2UgdGhlIHNhbWUNCj4gPiA+ID4gPiA+ID4gPiBtYW5hZ2VtZW50
IGZ1bmN0aW9ucy4gTm93IFFFIHN1cHBvcnQgYm90aCBBUk0gYW5kIFBvd2VyUEMsDQo+ID4gPiA+
ID4gPiA+ID4gaXQgaXMgbmVjZXNzYXJ5IHRvIG1vdmUgUUUgdG8gImRyaXZlci9zb2MiLCBzbyBt
b3ZlIHRoZQ0KPiA+ID4gPiA+ID4gPiA+IG11cmFtIG1hbmFnZW1lbnQgZnVuY3Rpb25zIGZyb20g
Y3BtX2NvbW1vbiB0byBxZV9jb21tb24NCj4gPiA+ID4gPiA+ID4gPiBmb3IgcHJlcGFyaW5nIHRv
IG1vdmUgUUUgY29kZSB0bw0KPiA+ID4gPiA+ICJkcml2ZXIvc29jIg0KPiA+ID4gPiA+ID4gPiA+
DQo+ID4gPiA+ID4gPiA+ID4gU2lnbmVkLW9mZi1ieTogWmhhbyBRaWFuZyA8cWlhbmcuemhhb0Bm
cmVlc2NhbGUuY29tPg0KPiA+ID4gPiA+ID4gPiA+IC0tLQ0KPiA+ID4gPiA+ID4gPiA+IENoYW5n
ZXMgZm9yIHYyOg0KPiA+ID4gPiA+ID4gPiA+ICAgLSBubyBjaGFuZ2VzDQo+ID4gPiA+ID4gPiA+
ID4gQ2hhbmdlcyBmb3IgdjM6DQo+ID4gPiA+ID4gPiA+ID4gICAtIG5vIGNoYW5nZXMNCj4gPiA+
ID4gPiA+ID4gPiBDaGFuZ2VzIGZvciB2NDoNCj4gPiA+ID4gPiA+ID4gPiAgIC0gbm8gY2hhbmdl
cw0KPiA+ID4gPiA+ID4gPiA+IENoYW5nZXMgZm9yIHY1Og0KPiA+ID4gPiA+ID4gPiA+ICAgLSBu
byBjaGFuZ2VzDQo+ID4gPiA+ID4gPiA+ID4gQ2hhbmdlcyBmb3IgdjY6DQo+ID4gPiA+ID4gPiA+
ID4gICAtIHVzaW5nIGdlbmFsbG9jIGluc3RlYWQgcmhlYXAgdG8gbWFuYWdlIFFFIE1VUkFNDQo+
ID4gPiA+ID4gPiA+ID4gICAtIHJlbW92ZSBxZV9yZXNldCBmcm9tIHBsYXRmb3JtIGZpbGUsIHVz
aW5nDQo+ID4gPiA+ID4gPiA+ID4gICAtIHN1YnN5c19pbml0Y2FsbCB0byBjYWxsIHFlX2luaXQg
ZnVuY3Rpb24uDQo+ID4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+IFdoeSBpcyB0aGUgaW5pdCBj
aGFuZ2UgaW4gdGhlIHNhbWUgcGF0Y2ggYXMgbW92aW5nIHRoZSBtdXJhbQ0KPiBjb2RlPw0KPiA+
ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+IENoYW5nZXMgZm9yIHY3Og0KPiA+ID4gPiA+ID4g
PiA+ICAgLSBtb3ZlIHRoaXMgcGF0Y2ggZnJvbSAzLzMgdG8gMi8zDQo+ID4gPiA+ID4gPiA+ID4g
ICAtIGNvbnZlcnQgY3BtIHdpdGggZ2VuYWxsb2MNCj4gPiA+ID4gPiA+ID4gPiAgIC0gY2hlY2sg
Zm9yIGdlbl9wb29sIGFsbG9jYXRpb24gZmFpbHVyZSBDaGFuZ2VzIGZvciB2ODoNCj4gPiA+ID4g
PiA+ID4gPiAgIC0gcmViYXNlDQo+ID4gPiA+ID4gPiA+ID4gICAtIG1vdmUgQkRfU0NfKiBtYWNy
byBpbnN0ZWFkIG9mIGNvcHkgQ2hhbmdlcyBmb3Igdjk6DQo+ID4gPiA+ID4gPiA+ID4gICAtIGRv
ZXNuJ3QgbW9kaWZ5IENQTSwgYWRkIGEgbmV3IHBhdGNoIHRvIG1vZGlmeS4NCj4gPiA+ID4gPiA+
ID4gPiAgIC0gcmViYXNlDQo+ID4gPiA+ID4gPiA+ID4gQ2hhbmdlcyBmb3IgdjEwOg0KPiA+ID4g
PiA+ID4gPiA+ICAgLSByZWJhc2UNCj4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ICBh
cmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3BtLmggICAgICAgICAgICB8ICA1OSAtLS0tLS0tLQ0K
PiA+ID4gPiA+ID4gPiA+ICBhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcWUuaCAgICAgICAgICAg
ICB8ICA1MSArKysrKystDQo+ID4gPiA+ID4gPiA+ID4gIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMv
ODN4eC9rbTgzeHguYyAgICAgIHwgICAyIC0NCj4gPiA+ID4gPiA+ID4gPiAgYXJjaC9wb3dlcnBj
L3BsYXRmb3Jtcy84M3h4L21wYzgzMnhfbWRzLmMgfCAgIDIgLQ0KPiA+ID4gPiA+ID4gPiA+ICBh
cmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODMyeF9yZGIuYyB8ICAgMiAtDQo+ID4gPiA+
ID4gPiA+ID4gIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzZ4X21kcy5jIHwgICAy
IC0NCj4gPiA+ID4gPiA+ID4gPiAgYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNnhf
cmRrLmMgfCAgIDMgLQ0KPiA+ID4gPiA+ID4gPiA+ICBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1
eHgvY29tbW9uLmMgICAgICB8ICAgMSAtDQo+ID4gPiA+ID4gPiA+ID4gIGFyY2gvcG93ZXJwYy9z
eXNkZXYvY3BtX2NvbW1vbi5jICAgICAgICAgIHwgMjA2ICstLS0tLS0tLS0NCj4gLS0tLQ0KPiA+
ID4gLS0tLQ0KPiA+ID4gPiA+IC0tLS0NCj4gPiA+ID4gPiA+ID4gLS0tDQo+ID4gPiA+ID4gPiA+
ID4gIGFyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL01ha2VmaWxlICAgICAgIHwgICAyICstDQo+
ID4gPiA+ID4gPiA+ID4gIGFyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlLmMgICAgICAgICAg
IHwgIDE1ICsrDQo+ID4gPiA+ID4gPiA+ID4gIGFyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3Fl
X2NvbW1vbi5jICAgIHwgMjQyDQo+ID4gPiA+ID4gPiA+ICsrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKw0KPiA+ID4gPiA+ID4gPiA+ICAxMiBmaWxlcyBjaGFuZ2VkLCAzMDIgaW5zZXJ0aW9u
cygrKSwgMjg1IGRlbGV0aW9ucygtKQ0KPiA+ID4gPiA+ID4gPiA+IGNyZWF0ZSBtb2RlDQo+ID4g
PiA+ID4gPiA+ID4gMTAwNjQ0IGFyY2gvcG93ZXJwYy9zeXNkZXYvcWVfbGliL3FlX2NvbW1vbi5j
DQo+ID4gPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiBkaWZmIC0tZ2l0IGEvYXJjaC9wb3dl
cnBjL2luY2x1ZGUvYXNtL2NwbS5oDQo+ID4gPiA+ID4gPiA+ID4gYi9hcmNoL3Bvd2VycGMvaW5j
bHVkZS9hc20vY3BtLmggaW5kZXggNDM5OGE2Yy4uMDAzYTczNg0KPiA+ID4gPiA+ID4gPiA+IDEw
MDY0NA0KPiA+ID4gPiA+ID4gPiA+IC0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcG0u
aA0KPiA+ID4gPiA+ID4gPiA+ICsrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcG0uaA0K
PiA+ID4gPiA+ID4gPiA+IEBAIC05MywyMiArOTMsNiBAQCB0eXBlZGVmIHN0cnVjdCBjcG1fYnVm
X2Rlc2Mgew0KPiA+ID4gPiA+ID4gPiA+ICAgKi8NCj4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+
ID4gPiA+ICAjZGVmaW5lIEJEX1NDX0VNUFRZICAgICAgKDB4ODAwMCkgICAgICAgIC8qIFJlY2Vp
dmUgaXMNCj4gZW1wdHkNCj4gPiA+ICovDQo+ID4gPiA+ID4gPiA+ID4gLSNkZWZpbmUgQkRfU0Nf
UkVBRFkgICAgICAoMHg4MDAwKSAgICAgICAgLyogVHJhbnNtaXQgaXMNCj4gcmVhZHkNCj4gPiA+
ICovDQo+ID4gPiA+ID4gPiA+ID4gLSNkZWZpbmUgQkRfU0NfV1JBUCAgICAgICAoMHgyMDAwKSAg
ICAgICAgLyogTGFzdCBidWZmZXINCj4gPiA+IGRlc2NyaXB0b3INCj4gPiA+ID4gPiAqLw0KPiA+
ID4gPiA+ID4gPiA+IC0jZGVmaW5lIEJEX1NDX0lOVFJQVCAgICAgKDB4MTAwMCkgICAgICAgIC8q
IEludGVycnVwdCBvbg0KPiA+ID4gY2hhbmdlICovDQo+ID4gPiA+ID4gPiA+ID4gLSNkZWZpbmUg
QkRfU0NfTEFTVCAgICAgICAoMHgwODAwKSAgICAgICAgLyogTGFzdCBidWZmZXIgaW4NCj4gPiA+
IGZyYW1lDQo+ID4gPiA+ID4gKi8NCj4gPiA+ID4gPiA+ID4gPiAtI2RlZmluZSBCRF9TQ19UQyAo
MHgwNDAwKSAgICAgICAgLyogVHJhbnNtaXQgQ1JDICovDQo+ID4gPiA+ID4gPiA+ID4gLSNkZWZp
bmUgQkRfU0NfQ00gKDB4MDIwMCkgICAgICAgIC8qIENvbnRpbnVvdXMgbW9kZSAqLw0KPiA+ID4g
PiA+ID4gPiA+IC0jZGVmaW5lIEJEX1NDX0lEICgweDAxMDApICAgICAgICAvKiBSZWMnZCB0b28g
bWFueSBpZGxlcw0KPiAqLw0KPiA+ID4gPiA+ID4gPiA+IC0jZGVmaW5lIEJEX1NDX1AgICAgICAg
ICAgKDB4MDEwMCkgICAgICAgIC8qIHhtdCBwcmVhbWJsZQ0KPiAqLw0KPiA+ID4gPiA+ID4gPiA+
IC0jZGVmaW5lIEJEX1NDX0JSICgweDAwMjApICAgICAgICAvKiBCcmVhayByZWNlaXZlZCAqLw0K
PiA+ID4gPiA+ID4gPiA+IC0jZGVmaW5lIEJEX1NDX0ZSICgweDAwMTApICAgICAgICAvKiBGcmFt
aW5nIGVycm9yICovDQo+ID4gPiA+ID4gPiA+ID4gLSNkZWZpbmUgQkRfU0NfUFIgKDB4MDAwOCkg
ICAgICAgIC8qIFBhcml0eSBlcnJvciAqLw0KPiA+ID4gPiA+ID4gPiA+IC0jZGVmaW5lIEJEX1ND
X05BSyAgICAgICAgKDB4MDAwNCkgICAgICAgIC8qIE5BSyAtIGRpZCBub3QNCj4gPiA+IHJlc3Bv
bmQNCj4gPiA+ID4gPiAqLw0KPiA+ID4gPiA+ID4gPiA+IC0jZGVmaW5lIEJEX1NDX09WICgweDAw
MDIpICAgICAgICAvKiBPdmVycnVuICovDQo+ID4gPiA+ID4gPiA+ID4gLSNkZWZpbmUgQkRfU0Nf
VU4gKDB4MDAwMikgICAgICAgIC8qIFVuZGVycnVuICovDQo+ID4gPiA+ID4gPiA+ID4gLSNkZWZp
bmUgQkRfU0NfQ0QgKDB4MDAwMSkgICAgICAgIC8qICovDQo+ID4gPiA+ID4gPiA+ID4gLSNkZWZp
bmUgQkRfU0NfQ0wgKDB4MDAwMSkgICAgICAgIC8qIENvbGxpc2lvbiAqLw0KPiA+ID4gPiA+ID4g
Pg0KPiA+ID4gPiA+ID4gPiBXaGF0IGRvZXMgdGhpcyBoYXZlIHRvIGRvIHdpdGggbXVyYW0/DQo+
ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gQkQgaXMgQnVmZmVyIERlc2NyaXB0b3JzLCBpdCBpcyBp
biBtdXJhbS4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IFdoYXQgZG9lcyBpdCBoYXZlIHRvIGRvIHdp
dGggdGhlIG11cmFtICphbGxvY2F0b3IqPw0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+DQo+ID4g
PiA+ID4gPiA+IEkndmUgc2FpZCBtYW55IHRpbWVzIG5vdyB0aGF0IGFueSBjaGFuZ2VzIHRvIHRo
ZSBjb2RlLA0KPiA+ID4gPiA+ID4gPiBpbmNsdWRpbmcgcmVuYW1pbmcgZnVuY3Rpb25zLCBuZWVk
cyB0byBiZSBhIHNlcGFyYXRlIHBhdGNoDQo+ID4gPiA+ID4gPiA+IGZyb20gbW92aW5nIHRoZQ0K
PiA+ID4gY29kZS4NCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiBJIGhhdmUgc3BsaXQgYSBwYXRj
aCB0byB0d28gcGF0Y2hlcywgSG93ZXZlciwgTWF5YmUgSQ0KPiA+ID4gPiA+ID4gbWlzdW5kZXJz
dGFuZCB5b3VyIG1lYW5zLg0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gSSBkaWRuJ3Qgc2F5ICJzcGxp
dCBpdCBpbnRvIHR3byBwYXRjaGVzLCBob3dldmVyIHlvdSBsaWtlIi4gIEkNCj4gPiA+ID4gPiBz
YWlkIHRvIGhhdmUgYWxsIGNoYW5nZXMgaW4gb25lIHBhdGNoLCBhbmQgdGhlIG90aGVyIHBhdGNo
IGJlDQo+ID4gPiA+ID4gbm90aGluZyBidXQNCj4gPiA+IGEgbW92ZS4NCj4gPiA+ID4gPiBSZW5h
bWluZyB0aGUgZnVuY3Rpb25zIGNvdW50cyBhcyBhIGNoYW5nZS4NCj4gPiA+ID4gPg0KPiA+ID4g
PiA+ID4gU28gaWYgdGhlIHBhdGNoIGp1c3QgZG8gdGhlIHJlbmFtaW5nIGFuZCBtb3ZpbmcgY3Bt
X211cmFtDQo+ID4gPiA+ID4gPiBmdW5jdGlvbiB0byBxZV9tdXJhbSBmdW5jdGlvbiwgRG9lcyBp
dCBvaz8NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IE5vLg0KPiA+ID4gPg0KPiA+ID4gPiBXaHk/DQo+
ID4gPg0KPiA+ID4gU28gdGhhdCBJIGNhbiBzZWUgdGhlIGNoYW5nZXMgYXMgYSBkaWZmLg0KPiA+
ID4NCj4gPiA+ID4gTW92aW5nIGNwbS9xZV9tdXJhbSBmdW5jdGlvbnMgYW5kIHJlbmFtaW5nIGNh
bid0IGJlIHNwbGl0Lg0KPiA+ID4NCj4gPiA+IFdoeSBub3Q/DQo+ID4NCj4gPiBJZiBtb3Zpbmcg
Y3BtX211cmFtXyogdG8gcWVfbXVyYW1fKiB3aXRob3V0IHJlbmFtaW5nLCBJdCBzdGlsbCBpcw0K
PiA+ICIjZGVmaW5lIHFlX211cmFtX2luaXQgY3BtX211cmFtX2luaXQiLCBXaGVyZSB0byBmaW5k
IGNwbV9tdXJhbV8qPw0KPiANCj4gQ291bGQgeW91IGJlIG1vcmUgc3BlY2lmaWMgYWJvdXQgd2hh
dCB0aGUgYWN0dWFsIHByb2JsZW0gaXM/ICBJZiB5b3UncmUNCj4gdGFsa2luZyBhYm91dCB0aGUg
ZmFjdCB0aGF0LCBmb3IganVzdCBvbmUgY29tbWl0IGluIHRoZSBoaXN0b3J5LCB0aGVyZQ0KPiB3
aWxsIGJlIGEgZmlsZSB3aXRoICJxZSIgaW4gdGhlIG5hbWUgdGhhdCBoYXMgZnVuY3Rpb25zIHdp
dGggImNwbSIgaW4gdGhlDQo+IG5hbWUsIHdobyBjYXJlcz8NCg0KRG9lcyBpdCBsb29rIHN0cmFu
Z2U/DQpJZiB5b3UgdGhpbmsgaXQgaXMgb2ssIHRoZSBzYW1lIG9rIGZvciBtZS4NCg0KLVpoYW8N
Cg==

^ permalink raw reply	[flat|nested] 27+ messages in thread

* RE: [PATCH v10 3/5] CPM/QE: use genalloc to manage CPM/QE muram
  2015-09-21 22:47   ` Scott Wood
@ 2015-09-22  8:10     ` Zhao Qiang
  2015-09-23  0:19       ` Scott Wood
  0 siblings, 1 reply; 27+ messages in thread
From: Zhao Qiang @ 2015-09-22  8:10 UTC (permalink / raw)
  To: Scott Wood
  Cc: linux-kernel, linuxppc-dev, lauraa, Xiaobo Xie, benh, Li Leo, paulus

On Tue, Sep 22, 2015 at 06:47 AM +0800, Wood Scott-B07421 wrote:
> -----Original Message-----
> From: Wood Scott-B07421
> Sent: Tuesday, September 22, 2015 6:47 AM
> To: Zhao Qiang-B45475
> Cc: linux-kernel@vger.kernel.org; linuxppc-dev@lists.ozlabs.org;
> lauraa@codeaurora.org; Xie Xiaobo-R63061; benh@kernel.crashing.org; Li
> Yang-Leo-R58472; paulus@samba.org
> Subject: Re: [PATCH v10 3/5] CPM/QE: use genalloc to manage CPM/QE muram
>=20
> On Fri, Sep 18, 2015 at 03:15:19PM +0800, Zhao Qiang wrote:
> > Use genalloc to manage CPM/QE muram instead of rheap.
> >
> > Signed-off-by: Zhao Qiang <qiang.zhao@freescale.com>
> > ---
> > Changes for v9:
> > 	- splitted from patch 3/5, modify cpm muram management functions.
> > Changes for v10:
> > 	- modify cpm muram first, then move to qe_common
> > 	- modify commit.
> >
> >  arch/powerpc/platforms/Kconfig   |   1 +
> >  arch/powerpc/sysdev/cpm_common.c | 150
> > +++++++++++++++++++++++++++------------
> >  2 files changed, 107 insertions(+), 44 deletions(-)
> >
> > diff --git a/arch/powerpc/platforms/Kconfig
> > b/arch/powerpc/platforms/Kconfig index b7f9c40..01f98a2 100644
> > --- a/arch/powerpc/platforms/Kconfig
> > +++ b/arch/powerpc/platforms/Kconfig
> > @@ -276,6 +276,7 @@ config QUICC_ENGINE
> >  	bool "Freescale QUICC Engine (QE) Support"
> >  	depends on FSL_SOC && PPC32
> >  	select PPC_LIB_RHEAP
> > +	select GENERIC_ALLOCATOR
> >  	select CRC32
> >  	help
> >  	  The QUICC Engine (QE) is a new generation of communications diff
> > --git a/arch/powerpc/sysdev/cpm_common.c
> > b/arch/powerpc/sysdev/cpm_common.c
> > index 4f78695..453d18c 100644
> > --- a/arch/powerpc/sysdev/cpm_common.c
> > +++ b/arch/powerpc/sysdev/cpm_common.c
> > @@ -17,6 +17,7 @@
> >   * published by the Free Software Foundation.
> >   */
> >
> > +#include <linux/genalloc.h>
> >  #include <linux/init.h>
> >  #include <linux/of_device.h>
> >  #include <linux/spinlock.h>
> > @@ -27,7 +28,6 @@
> >
> >  #include <asm/udbg.h>
> >  #include <asm/io.h>
> > -#include <asm/rheap.h>
> >  #include <asm/cpm.h>
> >
> >  #include <mm/mmu_decl.h>
> > @@ -65,14 +65,24 @@ void __init udbg_init_cpm(void)  }  #endif
> >
> > +static struct gen_pool *muram_pool;
> > +static struct genpool_data_align muram_pool_data; static struct
> > +genpool_data_fixed muram_pool_data_fixed;
>=20
> Why are these global?  If you keep the data local to the caller (and use
> gen_pool_alloc_data()) then you probably don't need cpm_muram_lock.

Ok

>=20
> >  static spinlock_t cpm_muram_lock;
> > -static rh_block_t cpm_boot_muram_rh_block[16]; -static rh_info_t
> > cpm_muram_info;  static u8 __iomem *muram_vbase;  static phys_addr_t
> > muram_pbase;
> >
> > -/* Max address size we deal with */
> > +struct muram_block {
> > +	struct list_head head;
> > +	unsigned long start;
> > +	int size;
> > +};
> > +
> > +static LIST_HEAD(muram_block_list);
> > +
> > +/* max address size we deal with */
> >  #define OF_MAX_ADDR_CELLS	4
> > +#define GENPOOL_OFFSET		4096
>=20
> Is 4096 bytes the maximum alignment you'll ever need?  Wouldn't it be
> safer to use a much larger offset?

Yes, 4096 is the maximum alignment I ever need.=20

>=20
> >  int cpm_muram_init(void)
> >  {
> > @@ -86,113 +96,165 @@ int cpm_muram_init(void)
> >  	if (muram_pbase)
> >  		return 0;
> >
> > -	spin_lock_init(&cpm_muram_lock);
>=20
> Why are you eliminating the lock init, given that you're not getting rid
> of the lock?
>=20
> > -	/* initialize the info header */
> > -	rh_init(&cpm_muram_info, 1,
> > -	        sizeof(cpm_boot_muram_rh_block) /
> > -	        sizeof(cpm_boot_muram_rh_block[0]),
> > -	        cpm_boot_muram_rh_block);
> > -
> >  	np =3D of_find_compatible_node(NULL, NULL, "fsl,cpm-muram-data");
> >  	if (!np) {
> >  		/* try legacy bindings */
> >  		np =3D of_find_node_by_name(NULL, "data-only");
> >  		if (!np) {
> > -			printk(KERN_ERR "Cannot find CPM muram data node");
> > +			pr_err("Cannot find CPM muram data node");
> >  			ret =3D -ENODEV;
> >  			goto out;
> >  		}
> >  	}
> >
> > +	muram_pool =3D gen_pool_create(1, -1);
>=20
> Do we really need byte-granularity?

It is 2byte-granularity, 4byte-granularity is needed=20

>=20
> >  	muram_pbase =3D of_translate_address(np, zero);
> >  	if (muram_pbase =3D=3D (phys_addr_t)OF_BAD_ADDR) {
> > -		printk(KERN_ERR "Cannot translate zero through CPM muram
> node");
> > +		pr_err("Cannot translate zero through CPM muram node");
> >  		ret =3D -ENODEV;
> > -		goto out;
> > +		goto err;
> >  	}
> >
> >  	while (of_address_to_resource(np, i++, &r) =3D=3D 0) {
> >  		if (r.end > max)
> >  			max =3D r.end;
> > +		ret =3D gen_pool_add(muram_pool, r.start - muram_pbase +
> > +				   GENPOOL_OFFSET, resource_size(&r), -1);
> > +		if (ret) {
> > +				pr_err("QE: couldn't add muram to pool!\n");
> > +				goto err;
> > +			}
> >
> > -		rh_attach_region(&cpm_muram_info, r.start - muram_pbase,
> > -				 resource_size(&r));
> >  	}
> >
> >  	muram_vbase =3D ioremap(muram_pbase, max - muram_pbase + 1);
> >  	if (!muram_vbase) {
> > -		printk(KERN_ERR "Cannot map CPM muram");
> > +		pr_err("Cannot map QE muram");
> >  		ret =3D -ENOMEM;
> > +		goto err;
> >  	}
> > -
> > +	goto out;
> > +err:
> > +	gen_pool_destroy(muram_pool);
> >  out:
> >  	of_node_put(np);
> >  	return ret;
>=20
> Having both "err" and "out" is confusing.  Instead call it "out_pool" or
> similar.

Ok

> >  {
> > -	int ret;
> > +
> > +	unsigned long start;
> >  	unsigned long flags;
> > +	unsigned long size_alloc =3D size;
> > +	struct muram_block *entry;
> > +	int end_bit;
> > +	int order =3D muram_pool->min_alloc_order;
> >
> >  	spin_lock_irqsave(&cpm_muram_lock, flags);
> > -	ret =3D rh_free(&cpm_muram_info, offset);
> > +	end_bit =3D (offset >> order) + ((size + (1UL << order) - 1) >>
> order);
> > +	if ((offset + size) > (end_bit << order))
> > +		size_alloc =3D size + (1UL << order);
>=20
> Why do you need to do all these calculations here?

So do it in gen_pool_fixed_alloc? gen_pool_fixed_alloc just=20
Can see numbers of blocks. It can't do calculations in gen_pool_fixed_alloc=
.

>=20
> > +	muram_pool_data_fixed.offset =3D offset + GENPOOL_OFFSET;
> > +	gen_pool_set_algo(muram_pool, gen_pool_fixed_alloc,
> > +			  &muram_pool_data_fixed);
> > +	start =3D gen_pool_alloc(muram_pool, size_alloc);
> > +	if (!start)
> > +		goto out2;
> > +	start =3D start - GENPOOL_OFFSET;
> > +	memset(cpm_muram_addr(start), 0, size_alloc);
> > +	entry =3D kmalloc(sizeof(*entry), GFP_KERNEL);
> > +	if (!entry)
> > +		goto out1;
> > +	entry->start =3D start;
> > +	entry->size =3D size_alloc;
> > +	list_add(&entry->head, &muram_block_list);
> >  	spin_unlock_irqrestore(&cpm_muram_lock, flags);
>=20
> Please factor out the common alloc code.

The common code is as below, what's the function name of this common code, =
cpm_muram_alloc_common?
        gen_pool_set_algo(muram_pool, gen_pool_fixed_alloc,
                          &muram_pool_data_fixed);
        start =3D gen_pool_alloc(muram_pool, size_alloc);
        if (!start)
                goto out2;
        start =3D start - GENPOOL_OFFSET;
        memset(cpm_muram_addr(start), 0, size_alloc);
        entry =3D kmalloc(sizeof(*entry), GFP_KERNEL);
        if (!entry)
                goto out1;
        entry->start =3D start;
        entry->size =3D size_alloc;
        list_add(&entry->head, &muram_block_list);
        spin_unlock_irqrestore(&cpm_muram_lock, flags);

        return start;
out1:
        gen_pool_free(muram_pool, start, size_alloc);
out2:
        spin_unlock_irqrestore(&cpm_muram_lock, flags);
        return (unsigned long) -ENOMEM;

-Zhao

^ permalink raw reply	[flat|nested] 27+ messages in thread

* RE: [PATCH v10 5/5] QE: Move QE from arch/powerpc to drivers/soc
  2015-09-21 22:56   ` Scott Wood
@ 2015-09-22  8:24     ` Zhao Qiang
  2015-09-22 16:39       ` Scott Wood
  0 siblings, 1 reply; 27+ messages in thread
From: Zhao Qiang @ 2015-09-22  8:24 UTC (permalink / raw)
  To: Scott Wood
  Cc: linux-kernel, linuxppc-dev, lauraa, Xiaobo Xie, benh, Li Leo, paulus

On Tue, Sep 22, 2015 at 06:56 AM +0800, Wood Scott-B07421 wrote:

> -----Original Message-----
> From: Wood Scott-B07421
> Sent: Tuesday, September 22, 2015 6:56 AM
> To: Zhao Qiang-B45475
> Cc: linux-kernel@vger.kernel.org; linuxppc-dev@lists.ozlabs.org;
> lauraa@codeaurora.org; Xie Xiaobo-R63061; benh@kernel.crashing.org; Li
> Yang-Leo-R58472; paulus@samba.org
> Subject: Re: [PATCH v10 5/5] QE: Move QE from arch/powerpc to drivers/soc
>=20
> On Fri, Sep 18, 2015 at 03:15:21PM +0800, Zhao Qiang wrote:
> > diff --git a/drivers/soc/fsl/qe/Kconfig b/drivers/soc/fsl/qe/Kconfig
> > new file mode 100644 index 0000000..3012571
> > --- /dev/null
> > +++ b/drivers/soc/fsl/qe/Kconfig
> > @@ -0,0 +1,33 @@=20
> > +	help
> > +	  The QUICC Engine (QE) is a new generation of communications
> > +	  coprocessors on Freescale embedded CPUs (akin to CPM in older
> chips).
> > +	  Selecting this option means that you wish to build a kernel
> > +	  for a machine with a QE coprocessor.
> > +
> > +config UCC_SLOW
> > +	bool
> > +	default y if SERIAL_QE
> > +	help
> > +	  This option provides qe_lib support to UCC slow
> > +	  protocols: UART, BISYNC, QMC
> > +
> > +config UCC_FAST
> > +	bool
> > +	default y if UCC_GETH
> > +	help
> > +	  This option provides qe_lib support to UCC fast
> > +	  protocols: HDLC, Ethernet, ATM, transparent
>=20
> What does "qe_lib" mean to the end user, or to anyone after the code is
> moved to drivers/soc/fsl/qe?

Qe_lib has functions configuring ucc, managing muram and so on.
It is the common functions to end user.

>=20
> -Scott

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v10 5/5] QE: Move QE from arch/powerpc to drivers/soc
  2015-09-22  8:24     ` Zhao Qiang
@ 2015-09-22 16:39       ` Scott Wood
  2015-09-23  2:01         ` Zhao Qiang
  0 siblings, 1 reply; 27+ messages in thread
From: Scott Wood @ 2015-09-22 16:39 UTC (permalink / raw)
  To: Zhao Qiang-B45475
  Cc: linux-kernel, linuxppc-dev, lauraa, Xie Xiaobo-R63061, benh,
	Li Yang-Leo-R58472, paulus

On Tue, 2015-09-22 at 03:24 -0500, Zhao Qiang-B45475 wrote:
> On Tue, Sep 22, 2015 at 06:56 AM +0800, Wood Scott-B07421 wrote:
> 
> > -----Original Message-----
> > From: Wood Scott-B07421
> > Sent: Tuesday, September 22, 2015 6:56 AM
> > To: Zhao Qiang-B45475
> > Cc: linux-kernel@vger.kernel.org; linuxppc-dev@lists.ozlabs.org;
> > lauraa@codeaurora.org; Xie Xiaobo-R63061; benh@kernel.crashing.org; Li
> > Yang-Leo-R58472; paulus@samba.org
> > Subject: Re: [PATCH v10 5/5] QE: Move QE from arch/powerpc to drivers/soc
> > 
> > On Fri, Sep 18, 2015 at 03:15:21PM +0800, Zhao Qiang wrote:
> > > diff --git a/drivers/soc/fsl/qe/Kconfig b/drivers/soc/fsl/qe/Kconfig
> > > new file mode 100644 index 0000000..3012571
> > > --- /dev/null
> > > +++ b/drivers/soc/fsl/qe/Kconfig
> > > @@ -0,0 +1,33 @@ 
> > > + help
> > > +   The QUICC Engine (QE) is a new generation of communications
> > > +   coprocessors on Freescale embedded CPUs (akin to CPM in older
> > chips).
> > > +   Selecting this option means that you wish to build a kernel
> > > +   for a machine with a QE coprocessor.
> > > +
> > > +config UCC_SLOW
> > > + bool
> > > + default y if SERIAL_QE
> > > + help
> > > +   This option provides qe_lib support to UCC slow
> > > +   protocols: UART, BISYNC, QMC
> > > +
> > > +config UCC_FAST
> > > + bool
> > > + default y if UCC_GETH
> > > + help
> > > +   This option provides qe_lib support to UCC fast
> > > +   protocols: HDLC, Ethernet, ATM, transparent
> > 
> > What does "qe_lib" mean to the end user, or to anyone after the code is
> > moved to drivers/soc/fsl/qe?
> 
> Qe_lib has functions configuring ucc, managing muram and so on.
> It is the common functions to end user.

It's not going to be called qe_lib anymore.  s/provides qe_lib support to UCC 
/provides support for QE UCC/

-Scott

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v10 3/5] CPM/QE: use genalloc to manage CPM/QE muram
  2015-09-22  8:10     ` Zhao Qiang
@ 2015-09-23  0:19       ` Scott Wood
  2015-09-23  2:20         ` Zhao Qiang
  0 siblings, 1 reply; 27+ messages in thread
From: Scott Wood @ 2015-09-23  0:19 UTC (permalink / raw)
  To: Zhao Qiang-B45475
  Cc: linux-kernel, linuxppc-dev, lauraa, Xie Xiaobo-R63061, benh,
	Li Yang-Leo-R58472, paulus

On Tue, 2015-09-22 at 03:10 -0500, Zhao Qiang-B45475 wrote:
> On Tue, Sep 22, 2015 at 06:47 AM +0800, Wood Scott-B07421 wrote:
> > -----Original Message-----
> > From: Wood Scott-B07421
> > Sent: Tuesday, September 22, 2015 6:47 AM
> > To: Zhao Qiang-B45475
> > Cc: linux-kernel@vger.kernel.org; linuxppc-dev@lists.ozlabs.org;
> > lauraa@codeaurora.org; Xie Xiaobo-R63061; benh@kernel.crashing.org; Li
> > Yang-Leo-R58472; paulus@samba.org
> > Subject: Re: [PATCH v10 3/5] CPM/QE: use genalloc to manage CPM/QE muram
> > 
> > On Fri, Sep 18, 2015 at 03:15:19PM +0800, Zhao Qiang wrote:
> > > Use genalloc to manage CPM/QE muram instead of rheap.
> > > 
> > > Signed-off-by: Zhao Qiang <qiang.zhao@freescale.com>
> > > ---
> > > Changes for v9:
> > >   - splitted from patch 3/5, modify cpm muram management functions.
> > > Changes for v10:
> > >   - modify cpm muram first, then move to qe_common
> > >   - modify commit.
> > > 
> > >  arch/powerpc/platforms/Kconfig   |   1 +
> > >  arch/powerpc/sysdev/cpm_common.c | 150
> > > +++++++++++++++++++++++++++------------
> > >  2 files changed, 107 insertions(+), 44 deletions(-)
> > > 
> > > diff --git a/arch/powerpc/platforms/Kconfig
> > > b/arch/powerpc/platforms/Kconfig index b7f9c40..01f98a2 100644
> > > --- a/arch/powerpc/platforms/Kconfig
> > > +++ b/arch/powerpc/platforms/Kconfig
> > > @@ -276,6 +276,7 @@ config QUICC_ENGINE
> > >   bool "Freescale QUICC Engine (QE) Support"
> > >   depends on FSL_SOC && PPC32
> > >   select PPC_LIB_RHEAP
> > > + select GENERIC_ALLOCATOR
> > >   select CRC32
> > >   help
> > >     The QUICC Engine (QE) is a new generation of communications diff
> > > --git a/arch/powerpc/sysdev/cpm_common.c
> > > b/arch/powerpc/sysdev/cpm_common.c
> > > index 4f78695..453d18c 100644
> > > --- a/arch/powerpc/sysdev/cpm_common.c
> > > +++ b/arch/powerpc/sysdev/cpm_common.c
> > > @@ -17,6 +17,7 @@
> > >   * published by the Free Software Foundation.
> > >   */
> > > 
> > > +#include <linux/genalloc.h>
> > >  #include <linux/init.h>
> > >  #include <linux/of_device.h>
> > >  #include <linux/spinlock.h>
> > > @@ -27,7 +28,6 @@
> > > 
> > >  #include <asm/udbg.h>
> > >  #include <asm/io.h>
> > > -#include <asm/rheap.h>
> > >  #include <asm/cpm.h>
> > > 
> > >  #include <mm/mmu_decl.h>
> > > @@ -65,14 +65,24 @@ void __init udbg_init_cpm(void)  }  #endif
> > > 
> > > +static struct gen_pool *muram_pool;
> > > +static struct genpool_data_align muram_pool_data; static struct
> > > +genpool_data_fixed muram_pool_data_fixed;
> > 
> > Why are these global?  If you keep the data local to the caller (and use
> > gen_pool_alloc_data()) then you probably don't need cpm_muram_lock.
> 
> Ok
> 
> > 
> > >  static spinlock_t cpm_muram_lock;
> > > -static rh_block_t cpm_boot_muram_rh_block[16]; -static rh_info_t
> > > cpm_muram_info;  static u8 __iomem *muram_vbase;  static phys_addr_t
> > > muram_pbase;
> > > 
> > > -/* Max address size we deal with */
> > > +struct muram_block {
> > > + struct list_head head;
> > > + unsigned long start;
> > > + int size;
> > > +};
> > > +
> > > +static LIST_HEAD(muram_block_list);
> > > +
> > > +/* max address size we deal with */
> > >  #define OF_MAX_ADDR_CELLS        4
> > > +#define GENPOOL_OFFSET           4096
> > 
> > Is 4096 bytes the maximum alignment you'll ever need?  Wouldn't it be
> > safer to use a much larger offset?
> 
> Yes, 4096 is the maximum alignment I ever need. 

Still, I'd be more comfortable with a larger offset.

Better yet would be using gen_pool_add_virt() and using virtual addresses for 
the allocations, similar to http://patchwork.ozlabs.org/patch/504000/

> > > int cpm_muram_init(void)
> > >  {
> > > @@ -86,113 +96,165 @@ int cpm_muram_init(void)
> > >   if (muram_pbase)
> > >           return 0;
> > > 
> > > - spin_lock_init(&cpm_muram_lock);
> > 
> > Why are you eliminating the lock init, given that you're not getting rid
> > of the lock?
> > 
> > > - /* initialize the info header */
> > > - rh_init(&cpm_muram_info, 1,
> > > -         sizeof(cpm_boot_muram_rh_block) /
> > > -         sizeof(cpm_boot_muram_rh_block[0]),
> > > -         cpm_boot_muram_rh_block);
> > > -
> > >   np = of_find_compatible_node(NULL, NULL, "fsl,cpm-muram-data");
> > >   if (!np) {
> > >           /* try legacy bindings */
> > >           np = of_find_node_by_name(NULL, "data-only");
> > >           if (!np) {
> > > -                 printk(KERN_ERR "Cannot find CPM muram data node");
> > > +                 pr_err("Cannot find CPM muram data node");
> > >                   ret = -ENODEV;
> > >                   goto out;
> > >           }
> > >   }
> > > 
> > > + muram_pool = gen_pool_create(1, -1);
> > 
> > Do we really need byte-granularity?
> 
> It is 2byte-granularity, 4byte-granularity is needed 
> 
> > 
> > >   muram_pbase = of_translate_address(np, zero);
> > >   if (muram_pbase == (phys_addr_t)OF_BAD_ADDR) {
> > > -         printk(KERN_ERR "Cannot translate zero through CPM muram
> > node");
> > > +         pr_err("Cannot translate zero through CPM muram node");
> > >           ret = -ENODEV;
> > > -         goto out;
> > > +         goto err;
> > >   }
> > > 
> > >   while (of_address_to_resource(np, i++, &r) == 0) {
> > >           if (r.end > max)
> > >                   max = r.end;
> > > +         ret = gen_pool_add(muram_pool, r.start - muram_pbase +
> > > +                            GENPOOL_OFFSET, resource_size(&r), -1);
> > > +         if (ret) {
> > > +                         pr_err("QE: couldn't add muram to pool!\n");
> > > +                         goto err;
> > > +                 }
> > > 
> > > -         rh_attach_region(&cpm_muram_info, r.start - muram_pbase,
> > > -                          resource_size(&r));
> > >   }
> > > 
> > >   muram_vbase = ioremap(muram_pbase, max - muram_pbase + 1);
> > >   if (!muram_vbase) {
> > > -         printk(KERN_ERR "Cannot map CPM muram");
> > > +         pr_err("Cannot map QE muram");
> > >           ret = -ENOMEM;
> > > +         goto err;
> > >   }
> > > -
> > > + goto out;
> > > +err:
> > > + gen_pool_destroy(muram_pool);
> > >  out:
> > >   of_node_put(np);
> > >   return ret;
> > 
> > Having both "err" and "out" is confusing.  Instead call it "out_pool" or
> > similar.
> 
> Ok
> 
> > >  {
> > > - int ret;
> > > +
> > > + unsigned long start;
> > >   unsigned long flags;
> > > + unsigned long size_alloc = size;
> > > + struct muram_block *entry;
> > > + int end_bit;
> > > + int order = muram_pool->min_alloc_order;
> > > 
> > >   spin_lock_irqsave(&cpm_muram_lock, flags);
> > > - ret = rh_free(&cpm_muram_info, offset);
> > > + end_bit = (offset >> order) + ((size + (1UL << order) - 1) >>
> > order);
> > > + if ((offset + size) > (end_bit << order))
> > > +         size_alloc = size + (1UL << order);
> > 
> > Why do you need to do all these calculations here?
> 
> So do it in gen_pool_fixed_alloc? 

Could you explain why they're needed at all?

> gen_pool_fixed_alloc just
> Can see numbers of blocks. It can't do calculations in gen_pool_fixed_alloc.

Are you saying that this:

struct genpool_data_fixed {
       unsigned long offset;           /* The offset of the specific region */
};

refers to blocks and not bytes?  And you didn't even mention that in the 
comment?

It should be bytes.  Actually, it should be an address, not an offset.  It 
should be the same value that you receive back from the allocator.  And I'm 
not sure how this is going to work with genalloc chunks that don't start at 
zero.  I think it really does need to be a separate toplevel function, and 
not just an allocation algorithm (or else the allocation algorithm is going 
to need more context on what chunk it's working on).

Speaking of chunks and the allocation function, I wonder what happens if you 
hit "if (start_bit >= end_bit) continue;" and then enter the loop with a new 
chunk and start_bit != 0...

-Scott

^ permalink raw reply	[flat|nested] 27+ messages in thread

* RE: [PATCH v10 5/5] QE: Move QE from arch/powerpc to drivers/soc
  2015-09-22 16:39       ` Scott Wood
@ 2015-09-23  2:01         ` Zhao Qiang
  0 siblings, 0 replies; 27+ messages in thread
From: Zhao Qiang @ 2015-09-23  2:01 UTC (permalink / raw)
  To: Scott Wood
  Cc: linux-kernel, linuxppc-dev, lauraa, Xiaobo Xie, benh, Li Leo, paulus

T24gV2VuLCBTZXAgMjMsIDIwMTUgYXQgMTI6NDAgQU0gKzA4MDAsIFdvb2QgU2NvdHQtQjA3NDIx
IHdyb3RlOg0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IFdvb2QgU2Nv
dHQtQjA3NDIxDQo+IFNlbnQ6IFdlZG5lc2RheSwgU2VwdGVtYmVyIDIzLCAyMDE1IDEyOjQwIEFN
DQo+IFRvOiBaaGFvIFFpYW5nLUI0NTQ3NQ0KPiBDYzogbGludXgta2VybmVsQHZnZXIua2VybmVs
Lm9yZzsgbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmc7DQo+IGxhdXJhYUBjb2RlYXVyb3Jh
Lm9yZzsgWGllIFhpYW9iby1SNjMwNjE7IGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZzsgTGkNCj4g
WWFuZy1MZW8tUjU4NDcyOyBwYXVsdXNAc2FtYmEub3JnDQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0gg
djEwIDUvNV0gUUU6IE1vdmUgUUUgZnJvbSBhcmNoL3Bvd2VycGMgdG8gZHJpdmVycy9zb2MNCj4g
DQo+IE9uIFR1ZSwgMjAxNS0wOS0yMiBhdCAwMzoyNCAtMDUwMCwgWmhhbyBRaWFuZy1CNDU0NzUg
d3JvdGU6DQo+ID4gT24gVHVlLCBTZXAgMjIsIDIwMTUgYXQgMDY6NTYgQU0gKzA4MDAsIFdvb2Qg
U2NvdHQtQjA3NDIxIHdyb3RlOg0KPiA+DQo+ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0t
LQ0KPiA+ID4gRnJvbTogV29vZCBTY290dC1CMDc0MjENCj4gPiA+IFNlbnQ6IFR1ZXNkYXksIFNl
cHRlbWJlciAyMiwgMjAxNSA2OjU2IEFNDQo+ID4gPiBUbzogWmhhbyBRaWFuZy1CNDU0NzUNCj4g
PiA+IENjOiBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnOyBsaW51eHBwYy1kZXZAbGlzdHMu
b3psYWJzLm9yZzsNCj4gPiA+IGxhdXJhYUBjb2RlYXVyb3JhLm9yZzsgWGllIFhpYW9iby1SNjMw
NjE7IGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZzsNCj4gPiA+IExpIFlhbmctTGVvLVI1ODQ3Mjsg
cGF1bHVzQHNhbWJhLm9yZw0KPiA+ID4gU3ViamVjdDogUmU6IFtQQVRDSCB2MTAgNS81XSBRRTog
TW92ZSBRRSBmcm9tIGFyY2gvcG93ZXJwYyB0bw0KPiA+ID4gZHJpdmVycy9zb2MNCj4gPiA+DQo+
ID4gPiBPbiBGcmksIFNlcCAxOCwgMjAxNSBhdCAwMzoxNToyMVBNICswODAwLCBaaGFvIFFpYW5n
IHdyb3RlOg0KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9zb2MvZnNsL3FlL0tjb25maWcN
Cj4gPiA+ID4gYi9kcml2ZXJzL3NvYy9mc2wvcWUvS2NvbmZpZyBuZXcgZmlsZSBtb2RlIDEwMDY0
NCBpbmRleA0KPiA+ID4gPiAwMDAwMDAwLi4zMDEyNTcxDQo+ID4gPiA+IC0tLSAvZGV2L251bGwN
Cj4gPiA+ID4gKysrIGIvZHJpdmVycy9zb2MvZnNsL3FlL0tjb25maWcNCj4gPiA+ID4gQEAgLTAs
MCArMSwzMyBAQA0KPiA+ID4gPiArIGhlbHANCj4gPiA+ID4gKyAgIFRoZSBRVUlDQyBFbmdpbmUg
KFFFKSBpcyBhIG5ldyBnZW5lcmF0aW9uIG9mIGNvbW11bmljYXRpb25zDQo+ID4gPiA+ICsgICBj
b3Byb2Nlc3NvcnMgb24gRnJlZXNjYWxlIGVtYmVkZGVkIENQVXMgKGFraW4gdG8gQ1BNIGluIG9s
ZGVyDQo+ID4gPiBjaGlwcykuDQo+ID4gPiA+ICsgICBTZWxlY3RpbmcgdGhpcyBvcHRpb24gbWVh
bnMgdGhhdCB5b3Ugd2lzaCB0byBidWlsZCBhIGtlcm5lbA0KPiA+ID4gPiArICAgZm9yIGEgbWFj
aGluZSB3aXRoIGEgUUUgY29wcm9jZXNzb3IuDQo+ID4gPiA+ICsNCj4gPiA+ID4gK2NvbmZpZyBV
Q0NfU0xPVw0KPiA+ID4gPiArIGJvb2wNCj4gPiA+ID4gKyBkZWZhdWx0IHkgaWYgU0VSSUFMX1FF
DQo+ID4gPiA+ICsgaGVscA0KPiA+ID4gPiArICAgVGhpcyBvcHRpb24gcHJvdmlkZXMgcWVfbGli
IHN1cHBvcnQgdG8gVUNDIHNsb3cNCj4gPiA+ID4gKyAgIHByb3RvY29sczogVUFSVCwgQklTWU5D
LCBRTUMNCj4gPiA+ID4gKw0KPiA+ID4gPiArY29uZmlnIFVDQ19GQVNUDQo+ID4gPiA+ICsgYm9v
bA0KPiA+ID4gPiArIGRlZmF1bHQgeSBpZiBVQ0NfR0VUSA0KPiA+ID4gPiArIGhlbHANCj4gPiA+
ID4gKyAgIFRoaXMgb3B0aW9uIHByb3ZpZGVzIHFlX2xpYiBzdXBwb3J0IHRvIFVDQyBmYXN0DQo+
ID4gPiA+ICsgICBwcm90b2NvbHM6IEhETEMsIEV0aGVybmV0LCBBVE0sIHRyYW5zcGFyZW50DQo+
ID4gPg0KPiA+ID4gV2hhdCBkb2VzICJxZV9saWIiIG1lYW4gdG8gdGhlIGVuZCB1c2VyLCBvciB0
byBhbnlvbmUgYWZ0ZXIgdGhlIGNvZGUNCj4gPiA+IGlzIG1vdmVkIHRvIGRyaXZlcnMvc29jL2Zz
bC9xZT8NCj4gPg0KPiA+IFFlX2xpYiBoYXMgZnVuY3Rpb25zIGNvbmZpZ3VyaW5nIHVjYywgbWFu
YWdpbmcgbXVyYW0gYW5kIHNvIG9uLg0KPiA+IEl0IGlzIHRoZSBjb21tb24gZnVuY3Rpb25zIHRv
IGVuZCB1c2VyLg0KPiANCj4gSXQncyBub3QgZ29pbmcgdG8gYmUgY2FsbGVkIHFlX2xpYiBhbnlt
b3JlLiAgcy9wcm92aWRlcyBxZV9saWIgc3VwcG9ydCB0bw0KPiBVQ0MgL3Byb3ZpZGVzIHN1cHBv
cnQgZm9yIFFFIFVDQy8NCg0KT2sNCi1aaGFvDQo=

^ permalink raw reply	[flat|nested] 27+ messages in thread

* RE: [PATCH v10 3/5] CPM/QE: use genalloc to manage CPM/QE muram
  2015-09-23  0:19       ` Scott Wood
@ 2015-09-23  2:20         ` Zhao Qiang
  2015-09-23  4:02           ` Scott Wood
  0 siblings, 1 reply; 27+ messages in thread
From: Zhao Qiang @ 2015-09-23  2:20 UTC (permalink / raw)
  To: Scott Wood
  Cc: linux-kernel, linuxppc-dev, lauraa, Xiaobo Xie, benh, Li Leo, paulus

T24gV2VuLCBTZXAgMjMsIDIwMTUgYXQgODoxOSBBTSArMDgwMCwgV29vZCBTY290dC1CMDc0MjEg
d3JvdGU6DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogV29vZCBTY290
dC1CMDc0MjENCj4gU2VudDogV2VkbmVzZGF5LCBTZXB0ZW1iZXIgMjMsIDIwMTUgODoxOSBBTQ0K
PiBUbzogWmhhbyBRaWFuZy1CNDU0NzUNCj4gQ2M6IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5v
cmc7IGxpbnV4cHBjLWRldkBsaXN0cy5vemxhYnMub3JnOw0KPiBsYXVyYWFAY29kZWF1cm9yYS5v
cmc7IFhpZSBYaWFvYm8tUjYzMDYxOyBiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmc7IExpDQo+IFlh
bmctTGVvLVI1ODQ3MjsgcGF1bHVzQHNhbWJhLm9yZw0KPiBTdWJqZWN0OiBSZTogW1BBVENIIHYx
MCAzLzVdIENQTS9RRTogdXNlIGdlbmFsbG9jIHRvIG1hbmFnZSBDUE0vUUUgbXVyYW0NCj4gDQo+
IE9uIFR1ZSwgMjAxNS0wOS0yMiBhdCAwMzoxMCAtMDUwMCwgWmhhbyBRaWFuZy1CNDU0NzUgd3Jv
dGU6DQo+ID4gT24gVHVlLCBTZXAgMjIsIDIwMTUgYXQgMDY6NDcgQU0gKzA4MDAsIFdvb2QgU2Nv
dHQtQjA3NDIxIHdyb3RlOg0KPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+
IEZyb206IFdvb2QgU2NvdHQtQjA3NDIxDQo+ID4gPiBTZW50OiBUdWVzZGF5LCBTZXB0ZW1iZXIg
MjIsIDIwMTUgNjo0NyBBTQ0KPiA+ID4gVG86IFpoYW8gUWlhbmctQjQ1NDc1DQo+ID4gPiBDYzog
bGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsgbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5v
cmc7DQo+ID4gPiBsYXVyYWFAY29kZWF1cm9yYS5vcmc7IFhpZSBYaWFvYm8tUjYzMDYxOyBiZW5o
QGtlcm5lbC5jcmFzaGluZy5vcmc7DQo+ID4gPiBMaSBZYW5nLUxlby1SNTg0NzI7IHBhdWx1c0Bz
YW1iYS5vcmcNCj4gPiA+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjEwIDMvNV0gQ1BNL1FFOiB1c2Ug
Z2VuYWxsb2MgdG8gbWFuYWdlIENQTS9RRQ0KPiA+ID4gbXVyYW0NCj4gPiA+DQo+ID4gPiBPbiBG
cmksIFNlcCAxOCwgMjAxNSBhdCAwMzoxNToxOVBNICswODAwLCBaaGFvIFFpYW5nIHdyb3RlOg0K
PiA+ID4gPiBVc2UgZ2VuYWxsb2MgdG8gbWFuYWdlIENQTS9RRSBtdXJhbSBpbnN0ZWFkIG9mIHJo
ZWFwLg0KPiA+ID4gPg0KPiA+ID4gPiBTaWduZWQtb2ZmLWJ5OiBaaGFvIFFpYW5nIDxxaWFuZy56
aGFvQGZyZWVzY2FsZS5jb20+DQo+ID4gPiA+IC0tLQ0KPiA+ID4gPiBDaGFuZ2VzIGZvciB2OToN
Cj4gPiA+ID4gICAtIHNwbGl0dGVkIGZyb20gcGF0Y2ggMy81LCBtb2RpZnkgY3BtIG11cmFtIG1h
bmFnZW1lbnQgZnVuY3Rpb25zLg0KPiA+ID4gPiBDaGFuZ2VzIGZvciB2MTA6DQo+ID4gPiA+ICAg
LSBtb2RpZnkgY3BtIG11cmFtIGZpcnN0LCB0aGVuIG1vdmUgdG8gcWVfY29tbW9uDQo+ID4gPiA+
ICAgLSBtb2RpZnkgY29tbWl0Lg0KPiA+ID4gPg0KPiA+ID4gPiAgYXJjaC9wb3dlcnBjL3BsYXRm
b3Jtcy9LY29uZmlnICAgfCAgIDEgKw0KPiA+ID4gPiAgYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG1f
Y29tbW9uLmMgfCAxNTANCj4gPiA+ID4gKysrKysrKysrKysrKysrKysrKysrKysrKysrLS0tLS0t
LS0tLS0tDQo+ID4gPiA+ICAyIGZpbGVzIGNoYW5nZWQsIDEwNyBpbnNlcnRpb25zKCspLCA0NCBk
ZWxldGlvbnMoLSkNCj4gPiA+ID4NCj4gPiA+ID4gZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9w
bGF0Zm9ybXMvS2NvbmZpZw0KPiA+ID4gPiBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZp
ZyBpbmRleCBiN2Y5YzQwLi4wMWY5OGEyIDEwMDY0NA0KPiA+ID4gPiAtLS0gYS9hcmNoL3Bvd2Vy
cGMvcGxhdGZvcm1zL0tjb25maWcNCj4gPiA+ID4gKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jt
cy9LY29uZmlnDQo+ID4gPiA+IEBAIC0yNzYsNiArMjc2LDcgQEAgY29uZmlnIFFVSUNDX0VOR0lO
RQ0KPiA+ID4gPiAgIGJvb2wgIkZyZWVzY2FsZSBRVUlDQyBFbmdpbmUgKFFFKSBTdXBwb3J0Ig0K
PiA+ID4gPiAgIGRlcGVuZHMgb24gRlNMX1NPQyAmJiBQUEMzMg0KPiA+ID4gPiAgIHNlbGVjdCBQ
UENfTElCX1JIRUFQDQo+ID4gPiA+ICsgc2VsZWN0IEdFTkVSSUNfQUxMT0NBVE9SDQo+ID4gPiA+
ICAgc2VsZWN0IENSQzMyDQo+ID4gPiA+ICAgaGVscA0KPiA+ID4gPiAgICAgVGhlIFFVSUNDIEVu
Z2luZSAoUUUpIGlzIGEgbmV3IGdlbmVyYXRpb24gb2YgY29tbXVuaWNhdGlvbnMNCj4gPiA+ID4g
ZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtX2NvbW1vbi5jDQo+ID4gPiA+IGIv
YXJjaC9wb3dlcnBjL3N5c2Rldi9jcG1fY29tbW9uLmMNCj4gPiA+ID4gaW5kZXggNGY3ODY5NS4u
NDUzZDE4YyAxMDA2NDQNCj4gPiA+ID4gLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG1fY29t
bW9uLmMNCj4gPiA+ID4gKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9jcG1fY29tbW9uLmMNCj4g
PiA+ID4gQEAgLTE3LDYgKzE3LDcgQEANCj4gPiA+ID4gICAqIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLg0KPiA+ID4gPiAgICovDQo+ID4gPiA+DQo+ID4gPiA+ICsj
aW5jbHVkZSA8bGludXgvZ2VuYWxsb2MuaD4NCj4gPiA+ID4gICNpbmNsdWRlIDxsaW51eC9pbml0
Lmg+DQo+ID4gPiA+ICAjaW5jbHVkZSA8bGludXgvb2ZfZGV2aWNlLmg+DQo+ID4gPiA+ICAjaW5j
bHVkZSA8bGludXgvc3BpbmxvY2suaD4NCj4gPiA+ID4gQEAgLTI3LDcgKzI4LDYgQEANCj4gPiA+
ID4NCj4gPiA+ID4gICNpbmNsdWRlIDxhc20vdWRiZy5oPg0KPiA+ID4gPiAgI2luY2x1ZGUgPGFz
bS9pby5oPg0KPiA+ID4gPiAtI2luY2x1ZGUgPGFzbS9yaGVhcC5oPg0KPiA+ID4gPiAgI2luY2x1
ZGUgPGFzbS9jcG0uaD4NCj4gPiA+ID4NCj4gPiA+ID4gICNpbmNsdWRlIDxtbS9tbXVfZGVjbC5o
Pg0KPiA+ID4gPiBAQCAtNjUsMTQgKzY1LDI0IEBAIHZvaWQgX19pbml0IHVkYmdfaW5pdF9jcG0o
dm9pZCkgIH0gICNlbmRpZg0KPiA+ID4gPg0KPiA+ID4gPiArc3RhdGljIHN0cnVjdCBnZW5fcG9v
bCAqbXVyYW1fcG9vbDsgc3RhdGljIHN0cnVjdA0KPiA+ID4gPiArZ2VucG9vbF9kYXRhX2FsaWdu
IG11cmFtX3Bvb2xfZGF0YTsgc3RhdGljIHN0cnVjdA0KPiA+ID4gPiArZ2VucG9vbF9kYXRhX2Zp
eGVkIG11cmFtX3Bvb2xfZGF0YV9maXhlZDsNCj4gPiA+DQo+ID4gPiBXaHkgYXJlIHRoZXNlIGds
b2JhbD8gIElmIHlvdSBrZWVwIHRoZSBkYXRhIGxvY2FsIHRvIHRoZSBjYWxsZXIgKGFuZA0KPiA+
ID4gdXNlDQo+ID4gPiBnZW5fcG9vbF9hbGxvY19kYXRhKCkpIHRoZW4geW91IHByb2JhYmx5IGRv
bid0IG5lZWQgY3BtX211cmFtX2xvY2suDQo+ID4NCj4gPiBPaw0KPiA+DQo+ID4gPg0KPiA+ID4g
PiAgc3RhdGljIHNwaW5sb2NrX3QgY3BtX211cmFtX2xvY2s7IC1zdGF0aWMgcmhfYmxvY2tfdA0K
PiA+ID4gPiBjcG1fYm9vdF9tdXJhbV9yaF9ibG9ja1sxNl07IC1zdGF0aWMgcmhfaW5mb190IGNw
bV9tdXJhbV9pbmZvOw0KPiA+ID4gPiBzdGF0aWMgdTggX19pb21lbSAqbXVyYW1fdmJhc2U7ICBz
dGF0aWMgcGh5c19hZGRyX3QgbXVyYW1fcGJhc2U7DQo+ID4gPiA+DQo+ID4gPiA+IC0vKiBNYXgg
YWRkcmVzcyBzaXplIHdlIGRlYWwgd2l0aCAqLw0KPiA+ID4gPiArc3RydWN0IG11cmFtX2Jsb2Nr
IHsNCj4gPiA+ID4gKyBzdHJ1Y3QgbGlzdF9oZWFkIGhlYWQ7DQo+ID4gPiA+ICsgdW5zaWduZWQg
bG9uZyBzdGFydDsNCj4gPiA+ID4gKyBpbnQgc2l6ZTsNCj4gPiA+ID4gK307DQo+ID4gPiA+ICsN
Cj4gPiA+ID4gK3N0YXRpYyBMSVNUX0hFQUQobXVyYW1fYmxvY2tfbGlzdCk7DQo+ID4gPiA+ICsN
Cj4gPiA+ID4gKy8qIG1heCBhZGRyZXNzIHNpemUgd2UgZGVhbCB3aXRoICovDQo+ID4gPiA+ICAj
ZGVmaW5lIE9GX01BWF9BRERSX0NFTExTICAgICAgICA0DQo+ID4gPiA+ICsjZGVmaW5lIEdFTlBP
T0xfT0ZGU0VUICAgICAgICAgICA0MDk2DQo+ID4gPg0KPiA+ID4gSXMgNDA5NiBieXRlcyB0aGUg
bWF4aW11bSBhbGlnbm1lbnQgeW91J2xsIGV2ZXIgbmVlZD8gIFdvdWxkbid0IGl0DQo+ID4gPiBi
ZSBzYWZlciB0byB1c2UgYSBtdWNoIGxhcmdlciBvZmZzZXQ/DQo+ID4NCj4gPiBZZXMsIDQwOTYg
aXMgdGhlIG1heGltdW0gYWxpZ25tZW50IEkgZXZlciBuZWVkLg0KPiANCj4gU3RpbGwsIEknZCBi
ZSBtb3JlIGNvbWZvcnRhYmxlIHdpdGggYSBsYXJnZXIgb2Zmc2V0Lg0KDQpMYXJnZXIgb2Zmc2V0
IGlzIGdvb2QuDQoNCj4gDQo+IEJldHRlciB5ZXQgd291bGQgYmUgdXNpbmcgZ2VuX3Bvb2xfYWRk
X3ZpcnQoKSBhbmQgdXNpbmcgdmlydHVhbCBhZGRyZXNzZXMNCj4gZm9yIHRoZSBhbGxvY2F0aW9u
cywgc2ltaWxhciB0byBodHRwOi8vcGF0Y2h3b3JrLm96bGFicy5vcmcvcGF0Y2gvNTA0MDAwLw0K
PiANCj4gPiA+ID4gaW50IGNwbV9tdXJhbV9pbml0KHZvaWQpDQo+ID4gPiA+ICB7DQo+ID4gPiA+
IEBAIC04NiwxMTMgKzk2LDE2NSBAQCBpbnQgY3BtX211cmFtX2luaXQodm9pZCkNCj4gPiA+ID4g
ICBpZiAobXVyYW1fcGJhc2UpDQo+ID4gPiA+ICAgICAgICAgICByZXR1cm4gMDsNCj4gPiA+ID4N
Cj4gPiA+ID4gLSBzcGluX2xvY2tfaW5pdCgmY3BtX211cmFtX2xvY2spOw0KPiA+ID4NCj4gPiA+
IFdoeSBhcmUgeW91IGVsaW1pbmF0aW5nIHRoZSBsb2NrIGluaXQsIGdpdmVuIHRoYXQgeW91J3Jl
IG5vdCBnZXR0aW5nDQo+ID4gPiByaWQgb2YgdGhlIGxvY2s/DQo+ID4gPg0KPiA+ID4gPiAtIC8q
IGluaXRpYWxpemUgdGhlIGluZm8gaGVhZGVyICovDQo+ID4gPiA+IC0gcmhfaW5pdCgmY3BtX211
cmFtX2luZm8sIDEsDQo+ID4gPiA+IC0gICAgICAgICBzaXplb2YoY3BtX2Jvb3RfbXVyYW1fcmhf
YmxvY2spIC8NCj4gPiA+ID4gLSAgICAgICAgIHNpemVvZihjcG1fYm9vdF9tdXJhbV9yaF9ibG9j
a1swXSksDQo+ID4gPiA+IC0gICAgICAgICBjcG1fYm9vdF9tdXJhbV9yaF9ibG9jayk7DQo+ID4g
PiA+IC0NCj4gPiA+ID4gICBucCA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEws
ICJmc2wsY3BtLW11cmFtLWRhdGEiKTsNCj4gPiA+ID4gICBpZiAoIW5wKSB7DQo+ID4gPiA+ICAg
ICAgICAgICAvKiB0cnkgbGVnYWN5IGJpbmRpbmdzICovDQo+ID4gPiA+ICAgICAgICAgICBucCA9
IG9mX2ZpbmRfbm9kZV9ieV9uYW1lKE5VTEwsICJkYXRhLW9ubHkiKTsNCj4gPiA+ID4gICAgICAg
ICAgIGlmICghbnApIHsNCj4gPiA+ID4gLSAgICAgICAgICAgICAgICAgcHJpbnRrKEtFUk5fRVJS
ICJDYW5ub3QgZmluZCBDUE0gbXVyYW0gZGF0YQ0KPiBub2RlIik7DQo+ID4gPiA+ICsgICAgICAg
ICAgICAgICAgIHByX2VycigiQ2Fubm90IGZpbmQgQ1BNIG11cmFtIGRhdGEgbm9kZSIpOw0KPiA+
ID4gPiAgICAgICAgICAgICAgICAgICByZXQgPSAtRU5PREVWOw0KPiA+ID4gPiAgICAgICAgICAg
ICAgICAgICBnb3RvIG91dDsNCj4gPiA+ID4gICAgICAgICAgIH0NCj4gPiA+ID4gICB9DQo+ID4g
PiA+DQo+ID4gPiA+ICsgbXVyYW1fcG9vbCA9IGdlbl9wb29sX2NyZWF0ZSgxLCAtMSk7DQo+ID4g
Pg0KPiA+ID4gRG8gd2UgcmVhbGx5IG5lZWQgYnl0ZS1ncmFudWxhcml0eT8NCj4gPg0KPiA+IEl0
IGlzIDJieXRlLWdyYW51bGFyaXR5LCA0Ynl0ZS1ncmFudWxhcml0eSBpcyBuZWVkZWQNCj4gPg0K
PiA+ID4NCj4gPiA+ID4gICBtdXJhbV9wYmFzZSA9IG9mX3RyYW5zbGF0ZV9hZGRyZXNzKG5wLCB6
ZXJvKTsNCj4gPiA+ID4gICBpZiAobXVyYW1fcGJhc2UgPT0gKHBoeXNfYWRkcl90KU9GX0JBRF9B
RERSKSB7DQo+ID4gPiA+IC0gICAgICAgICBwcmludGsoS0VSTl9FUlIgIkNhbm5vdCB0cmFuc2xh
dGUgemVybyB0aHJvdWdoIENQTSBtdXJhbQ0KPiA+ID4gbm9kZSIpOw0KPiA+ID4gPiArICAgICAg
ICAgcHJfZXJyKCJDYW5ub3QgdHJhbnNsYXRlIHplcm8gdGhyb3VnaCBDUE0gbXVyYW0gbm9kZSIp
Ow0KPiA+ID4gPiAgICAgICAgICAgcmV0ID0gLUVOT0RFVjsNCj4gPiA+ID4gLSAgICAgICAgIGdv
dG8gb3V0Ow0KPiA+ID4gPiArICAgICAgICAgZ290byBlcnI7DQo+ID4gPiA+ICAgfQ0KPiA+ID4g
Pg0KPiA+ID4gPiAgIHdoaWxlIChvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG5wLCBpKyssICZyKSA9
PSAwKSB7DQo+ID4gPiA+ICAgICAgICAgICBpZiAoci5lbmQgPiBtYXgpDQo+ID4gPiA+ICAgICAg
ICAgICAgICAgICAgIG1heCA9IHIuZW5kOw0KPiA+ID4gPiArICAgICAgICAgcmV0ID0gZ2VuX3Bv
b2xfYWRkKG11cmFtX3Bvb2wsIHIuc3RhcnQgLSBtdXJhbV9wYmFzZSArDQo+ID4gPiA+ICsgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgR0VOUE9PTF9PRkZTRVQsIHJlc291cmNlX3NpemUoJnIp
LCAtMSk7DQo+ID4gPiA+ICsgICAgICAgICBpZiAocmV0KSB7DQo+ID4gPiA+ICsgICAgICAgICAg
ICAgICAgICAgICAgICAgcHJfZXJyKCJRRTogY291bGRuJ3QgYWRkIG11cmFtIHRvDQo+IHBvb2wh
XG4iKTsNCj4gPiA+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVycjsNCj4gPiA+
ID4gKyAgICAgICAgICAgICAgICAgfQ0KPiA+ID4gPg0KPiA+ID4gPiAtICAgICAgICAgcmhfYXR0
YWNoX3JlZ2lvbigmY3BtX211cmFtX2luZm8sIHIuc3RhcnQgLSBtdXJhbV9wYmFzZSwNCj4gPiA+
ID4gLSAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb3VyY2Vfc2l6ZSgmcikpOw0KPiA+ID4g
PiAgIH0NCj4gPiA+ID4NCj4gPiA+ID4gICBtdXJhbV92YmFzZSA9IGlvcmVtYXAobXVyYW1fcGJh
c2UsIG1heCAtIG11cmFtX3BiYXNlICsgMSk7DQo+ID4gPiA+ICAgaWYgKCFtdXJhbV92YmFzZSkg
ew0KPiA+ID4gPiAtICAgICAgICAgcHJpbnRrKEtFUk5fRVJSICJDYW5ub3QgbWFwIENQTSBtdXJh
bSIpOw0KPiA+ID4gPiArICAgICAgICAgcHJfZXJyKCJDYW5ub3QgbWFwIFFFIG11cmFtIik7DQo+
ID4gPiA+ICAgICAgICAgICByZXQgPSAtRU5PTUVNOw0KPiA+ID4gPiArICAgICAgICAgZ290byBl
cnI7DQo+ID4gPiA+ICAgfQ0KPiA+ID4gPiAtDQo+ID4gPiA+ICsgZ290byBvdXQ7DQo+ID4gPiA+
ICtlcnI6DQo+ID4gPiA+ICsgZ2VuX3Bvb2xfZGVzdHJveShtdXJhbV9wb29sKTsNCj4gPiA+ID4g
IG91dDoNCj4gPiA+ID4gICBvZl9ub2RlX3B1dChucCk7DQo+ID4gPiA+ICAgcmV0dXJuIHJldDsN
Cj4gPiA+DQo+ID4gPiBIYXZpbmcgYm90aCAiZXJyIiBhbmQgIm91dCIgaXMgY29uZnVzaW5nLiAg
SW5zdGVhZCBjYWxsIGl0DQo+ID4gPiAib3V0X3Bvb2wiIG9yIHNpbWlsYXIuDQo+ID4NCj4gPiBP
aw0KPiA+DQo+ID4gPiA+ICB7DQo+ID4gPiA+IC0gaW50IHJldDsNCj4gPiA+ID4gKw0KPiA+ID4g
PiArIHVuc2lnbmVkIGxvbmcgc3RhcnQ7DQo+ID4gPiA+ICAgdW5zaWduZWQgbG9uZyBmbGFnczsN
Cj4gPiA+ID4gKyB1bnNpZ25lZCBsb25nIHNpemVfYWxsb2MgPSBzaXplOyBzdHJ1Y3QgbXVyYW1f
YmxvY2sgKmVudHJ5OyBpbnQNCj4gPiA+ID4gKyBlbmRfYml0OyBpbnQgb3JkZXIgPSBtdXJhbV9w
b29sLT5taW5fYWxsb2Nfb3JkZXI7DQo+ID4gPiA+DQo+ID4gPiA+ICAgc3Bpbl9sb2NrX2lycXNh
dmUoJmNwbV9tdXJhbV9sb2NrLCBmbGFncyk7DQo+ID4gPiA+IC0gcmV0ID0gcmhfZnJlZSgmY3Bt
X211cmFtX2luZm8sIG9mZnNldCk7DQo+ID4gPiA+ICsgZW5kX2JpdCA9IChvZmZzZXQgPj4gb3Jk
ZXIpICsgKChzaXplICsgKDFVTCA8PCBvcmRlcikgLSAxKSA+Pg0KPiA+ID4gb3JkZXIpOw0KPiA+
ID4gPiArIGlmICgob2Zmc2V0ICsgc2l6ZSkgPiAoZW5kX2JpdCA8PCBvcmRlcikpDQo+ID4gPiA+
ICsgICAgICAgICBzaXplX2FsbG9jID0gc2l6ZSArICgxVUwgPDwgb3JkZXIpOw0KPiA+ID4NCj4g
PiA+IFdoeSBkbyB5b3UgbmVlZCB0byBkbyBhbGwgdGhlc2UgY2FsY3VsYXRpb25zIGhlcmU/DQo+
ID4NCj4gPiBTbyBkbyBpdCBpbiBnZW5fcG9vbF9maXhlZF9hbGxvYz8NCj4gDQo+IENvdWxkIHlv
dSBleHBsYWluIHdoeSB0aGV5J3JlIG5lZWRlZCBhdCBhbGw/DQoNCldoeSBpdCBkb2VzIHRoZSBj
YWxjdWxhdGlvbnM/IA0KSWYgdGhlIG1pbiBibG9jayBvZiBnZW5fcG9vbCBpcyA4IGJ5dGVzLCBh
bmQgSSB3YW50IHRvIGFsbG9jYXRlIGEgDQpSZWdpb24gd2l0aCBvZmZzZXQ9Nywgc2l6ZT04Ynl0
ZXMsIEkgYWN0dWFsbHkgbmVlZCBibG9jayAwIGFuZCBibG9jayAxLA0KQW5kIHRoZSBhbGxvY2F0
aW9uIHdpbGwgZ2l2ZSBtZSBibG9jayAwLiAgDQoNCj4gDQo+ID4gZ2VuX3Bvb2xfZml4ZWRfYWxs
b2MganVzdA0KPiA+IENhbiBzZWUgbnVtYmVycyBvZiBibG9ja3MuIEl0IGNhbid0IGRvIGNhbGN1
bGF0aW9ucyBpbg0KPiBnZW5fcG9vbF9maXhlZF9hbGxvYy4NCj4gDQo+IEFyZSB5b3Ugc2F5aW5n
IHRoYXQgdGhpczoNCj4gDQo+IHN0cnVjdCBnZW5wb29sX2RhdGFfZml4ZWQgew0KPiAgICAgICAg
dW5zaWduZWQgbG9uZyBvZmZzZXQ7ICAgICAgICAgICAvKiBUaGUgb2Zmc2V0IG9mIHRoZSBzcGVj
aWZpYw0KPiByZWdpb24gKi8NCj4gfTsNCj4gDQo+IHJlZmVycyB0byBibG9ja3MgYW5kIG5vdCBi
eXRlcz8gIEFuZCB5b3UgZGlkbid0IGV2ZW4gbWVudGlvbiB0aGF0IGluIHRoZQ0KPiBjb21tZW50
Pw0KDQpPZmZzZXQgaXMgYnl0ZXMuIA0KDQo+IA0KPiBJdCBzaG91bGQgYmUgYnl0ZXMuICBBY3R1
YWxseSwgaXQgc2hvdWxkIGJlIGFuIGFkZHJlc3MsIG5vdCBhbiBvZmZzZXQuDQo+IEl0IHNob3Vs
ZCBiZSB0aGUgc2FtZSB2YWx1ZSB0aGF0IHlvdSByZWNlaXZlIGJhY2sgZnJvbSB0aGUgYWxsb2Nh
dG9yLg0KPiBBbmQgSSdtIG5vdCBzdXJlIGhvdyB0aGlzIGlzIGdvaW5nIHRvIHdvcmsgd2l0aCBn
ZW5hbGxvYyBjaHVua3MgdGhhdA0KPiBkb24ndCBzdGFydCBhdCB6ZXJvLiAgSSB0aGluayBpdCBy
ZWFsbHkgZG9lcyBuZWVkIHRvIGJlIGEgc2VwYXJhdGUNCj4gdG9wbGV2ZWwgZnVuY3Rpb24sIGFu
ZCBub3QganVzdCBhbiBhbGxvY2F0aW9uIGFsZ29yaXRobSAob3IgZWxzZSB0aGUNCj4gYWxsb2Nh
dGlvbiBhbGdvcml0aG0gaXMgZ29pbmcgdG8gbmVlZCBtb3JlIGNvbnRleHQgb24gd2hhdCBjaHVu
ayBpdCdzDQo+IHdvcmtpbmcgb24pLg0KPiANCj4gU3BlYWtpbmcgb2YgY2h1bmtzIGFuZCB0aGUg
YWxsb2NhdGlvbiBmdW5jdGlvbiwgSSB3b25kZXIgd2hhdCBoYXBwZW5zIGlmDQo+IHlvdSBoaXQg
ImlmIChzdGFydF9iaXQgPj0gZW5kX2JpdCkgY29udGludWU7IiBhbmQgdGhlbiBlbnRlciB0aGUg
bG9vcA0KPiB3aXRoIGEgbmV3IGNodW5rIGFuZCBzdGFydF9iaXQgIT0gMC4uLg0KPiANCj4gLVNj
b3R0DQoNCg==

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v10 3/5] CPM/QE: use genalloc to manage CPM/QE muram
  2015-09-23  2:20         ` Zhao Qiang
@ 2015-09-23  4:02           ` Scott Wood
  2015-09-23  5:28             ` Zhao Qiang
  0 siblings, 1 reply; 27+ messages in thread
From: Scott Wood @ 2015-09-23  4:02 UTC (permalink / raw)
  To: Zhao Qiang-B45475
  Cc: linux-kernel, linuxppc-dev, lauraa, Xie Xiaobo-R63061, benh,
	Li Yang-Leo-R58472, paulus

On Tue, 2015-09-22 at 21:20 -0500, Zhao Qiang-B45475 wrote:
> On Wen, Sep 23, 2015 at 8:19 AM +0800, Wood Scott-B07421 wrote:
> 
> > > > >  {
> > > > > - int ret;
> > > > > +
> > > > > + unsigned long start;
> > > > >   unsigned long flags;
> > > > > + unsigned long size_alloc = size; struct muram_block *entry; int
> > > > > + end_bit; int order = muram_pool->min_alloc_order;
> > > > > 
> > > > >   spin_lock_irqsave(&cpm_muram_lock, flags);
> > > > > - ret = rh_free(&cpm_muram_info, offset);
> > > > > + end_bit = (offset >> order) + ((size + (1UL << order) - 1) >>
> > > > order);
> > > > > + if ((offset + size) > (end_bit << order))
> > > > > +         size_alloc = size + (1UL << order);
> > > > 
> > > > Why do you need to do all these calculations here?
> > > 
> > > So do it in gen_pool_fixed_alloc?
> > 
> > Could you explain why they're needed at all?
> 
> Why it does the calculations? 
> If the min block of gen_pool is 8 bytes, and I want to allocate a 
> Region with offset=7, size=8bytes, I actually need block 0 and block 1,
> And the allocation will give me block 0.  

How can you have offset 7 if the minimum order is 2 bytes?

-Scott

^ permalink raw reply	[flat|nested] 27+ messages in thread

* RE: [PATCH v10 3/5] CPM/QE: use genalloc to manage CPM/QE muram
  2015-09-23  4:02           ` Scott Wood
@ 2015-09-23  5:28             ` Zhao Qiang
  2015-09-24 23:30               ` Scott Wood
  0 siblings, 1 reply; 27+ messages in thread
From: Zhao Qiang @ 2015-09-23  5:28 UTC (permalink / raw)
  To: Scott Wood
  Cc: linux-kernel, linuxppc-dev, lauraa, Xiaobo Xie, benh, Li Leo, paulus

T24gV2VuLCBTZXAgMjMsIDIwMTUgYXQgMTI6MDMgQU0gKzA4MDAsIFdvb2QgU2NvdHQtQjA3NDIx
IHdyb3RlOg0KDQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IFdvb2QgU2Nv
dHQtQjA3NDIxDQo+IFNlbnQ6IFdlZG5lc2RheSwgU2VwdGVtYmVyIDIzLCAyMDE1IDEyOjAzIFBN
DQo+IFRvOiBaaGFvIFFpYW5nLUI0NTQ3NQ0KPiBDYzogbGludXgta2VybmVsQHZnZXIua2VybmVs
Lm9yZzsgbGludXhwcGMtZGV2QGxpc3RzLm96bGFicy5vcmc7DQo+IGxhdXJhYUBjb2RlYXVyb3Jh
Lm9yZzsgWGllIFhpYW9iby1SNjMwNjE7IGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZzsgTGkNCj4g
WWFuZy1MZW8tUjU4NDcyOyBwYXVsdXNAc2FtYmEub3JnDQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0gg
djEwIDMvNV0gQ1BNL1FFOiB1c2UgZ2VuYWxsb2MgdG8gbWFuYWdlIENQTS9RRSBtdXJhbQ0KPiAN
Cj4gT24gVHVlLCAyMDE1LTA5LTIyIGF0IDIxOjIwIC0wNTAwLCBaaGFvIFFpYW5nLUI0NTQ3NSB3
cm90ZToNCj4gPiBPbiBXZW4sIFNlcCAyMywgMjAxNSBhdCA4OjE5IEFNICswODAwLCBXb29kIFNj
b3R0LUIwNzQyMSB3cm90ZToNCj4gPg0KPiA+ID4gPiA+ID4gIHsNCj4gPiA+ID4gPiA+IC0gaW50
IHJldDsNCj4gPiA+ID4gPiA+ICsNCj4gPiA+ID4gPiA+ICsgdW5zaWduZWQgbG9uZyBzdGFydDsN
Cj4gPiA+ID4gPiA+ICAgdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gPiA+ID4gPiA+ICsgdW5zaWdu
ZWQgbG9uZyBzaXplX2FsbG9jID0gc2l6ZTsgc3RydWN0IG11cmFtX2Jsb2NrICplbnRyeTsNCj4g
PiA+ID4gPiA+ICsgaW50IGVuZF9iaXQ7IGludCBvcmRlciA9IG11cmFtX3Bvb2wtPm1pbl9hbGxv
Y19vcmRlcjsNCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiAgIHNwaW5fbG9ja19pcnFzYXZlKCZj
cG1fbXVyYW1fbG9jaywgZmxhZ3MpOw0KPiA+ID4gPiA+ID4gLSByZXQgPSByaF9mcmVlKCZjcG1f
bXVyYW1faW5mbywgb2Zmc2V0KTsNCj4gPiA+ID4gPiA+ICsgZW5kX2JpdCA9IChvZmZzZXQgPj4g
b3JkZXIpICsgKChzaXplICsgKDFVTCA8PCBvcmRlcikgLSAxKQ0KPiA+ID4gPiA+ID4gKyA+Pg0K
PiA+ID4gPiA+IG9yZGVyKTsNCj4gPiA+ID4gPiA+ICsgaWYgKChvZmZzZXQgKyBzaXplKSA+IChl
bmRfYml0IDw8IG9yZGVyKSkNCj4gPiA+ID4gPiA+ICsgICAgICAgICBzaXplX2FsbG9jID0gc2l6
ZSArICgxVUwgPDwgb3JkZXIpOw0KPiA+ID4gPiA+DQo+ID4gPiA+ID4gV2h5IGRvIHlvdSBuZWVk
IHRvIGRvIGFsbCB0aGVzZSBjYWxjdWxhdGlvbnMgaGVyZT8NCj4gPiA+ID4NCj4gPiA+ID4gU28g
ZG8gaXQgaW4gZ2VuX3Bvb2xfZml4ZWRfYWxsb2M/DQo+ID4gPg0KPiA+ID4gQ291bGQgeW91IGV4
cGxhaW4gd2h5IHRoZXkncmUgbmVlZGVkIGF0IGFsbD8NCj4gPg0KPiA+IFdoeSBpdCBkb2VzIHRo
ZSBjYWxjdWxhdGlvbnM/DQo+ID4gSWYgdGhlIG1pbiBibG9jayBvZiBnZW5fcG9vbCBpcyA4IGJ5
dGVzLCBhbmQgSSB3YW50IHRvIGFsbG9jYXRlIGENCj4gPiBSZWdpb24gd2l0aCBvZmZzZXQ9Nywg
c2l6ZT04Ynl0ZXMsIEkgYWN0dWFsbHkgbmVlZCBibG9jayAwIGFuZCBibG9jaw0KPiA+IDEsIEFu
ZCB0aGUgYWxsb2NhdGlvbiB3aWxsIGdpdmUgbWUgYmxvY2sgMC4NCj4gDQo+IEhvdyBjYW4geW91
IGhhdmUgb2Zmc2V0IDcgaWYgdGhlIG1pbmltdW0gb3JkZXIgaXMgMiBieXRlcz8NCg0KT2Zmc2V0
IGhhcyBubyByZWxhdGlvbnNoaXAgd2l0aCBtaW5pbXVtIG9yZGVyLCBpdCBpcyBub3QgZGVjaWRl
ZCBieSBtaW5pbXVtIG9yZGVyLg0KSSB3YW50IHRvIGFsbG9jYXRlIGEgc3BlY2lmaWMgcmVnaW9u
IHdpdGggb2Zmc2V0PTcsIHRoZW4gYWxnbyB0byBjYWxjdWxhdGUgdGhlIGJsb2NrIGJpdC4NCkFu
ZCBJIGp1c3QgdGFrZSBpdCBmb3IgZXhhbXBsZSwgaXQgaXMgbm90IEkgcmVhbGx5IG5lZWQgdG8g
cmVnaW9uIG9mZnNldD03Lg0KDQpTbywgbm93IG1pbmltdW0gb3JkZXIgaXMgMiBieXRlcy4gSWYg
b2Zmc2V0PTcsIHNpemU9NGJ5dGVzIG5lZWRlZCwgaXQgYWN0dWFsbHkgYWxsb2NhdGUgNi0xMiB0
byBtZS4NCnNvIEkgbmVlZCB0byBjaGVjayBpZiBpdCBpcyBuZWNlc3NhcnkgdG8gcGx1cyBhIGJs
b2NrKDJieXRlcykgdG8gc2l6ZSBiZWZvcmUgYWxsb2NhdGlvbi4gIA0KDQotWmhhbw0K

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v10 3/5] CPM/QE: use genalloc to manage CPM/QE muram
  2015-09-23  5:28             ` Zhao Qiang
@ 2015-09-24 23:30               ` Scott Wood
  2015-09-25  2:50                 ` Zhao Qiang
  0 siblings, 1 reply; 27+ messages in thread
From: Scott Wood @ 2015-09-24 23:30 UTC (permalink / raw)
  To: Zhao Qiang-B45475
  Cc: linux-kernel, linuxppc-dev, lauraa, Xie Xiaobo-R63061, benh,
	Li Yang-Leo-R58472, paulus

On Wed, 2015-09-23 at 00:28 -0500, Zhao Qiang-B45475 wrote:
> On Wen, Sep 23, 2015 at 12:03 AM +0800, Wood Scott-B07421 wrote:
> 
> > -----Original Message-----
> > From: Wood Scott-B07421
> > Sent: Wednesday, September 23, 2015 12:03 PM
> > To: Zhao Qiang-B45475
> > Cc: linux-kernel@vger.kernel.org; linuxppc-dev@lists.ozlabs.org;
> > lauraa@codeaurora.org; Xie Xiaobo-R63061; benh@kernel.crashing.org; Li
> > Yang-Leo-R58472; paulus@samba.org
> > Subject: Re: [PATCH v10 3/5] CPM/QE: use genalloc to manage CPM/QE muram
> > 
> > On Tue, 2015-09-22 at 21:20 -0500, Zhao Qiang-B45475 wrote:
> > > On Wen, Sep 23, 2015 at 8:19 AM +0800, Wood Scott-B07421 wrote:
> > > 
> > > > > > >  {
> > > > > > > - int ret;
> > > > > > > +
> > > > > > > + unsigned long start;
> > > > > > >   unsigned long flags;
> > > > > > > + unsigned long size_alloc = size; struct muram_block *entry;
> > > > > > > + int end_bit; int order = muram_pool->min_alloc_order;
> > > > > > > 
> > > > > > >   spin_lock_irqsave(&cpm_muram_lock, flags);
> > > > > > > - ret = rh_free(&cpm_muram_info, offset);
> > > > > > > + end_bit = (offset >> order) + ((size + (1UL << order) - 1)
> > > > > > > + >>
> > > > > > order);
> > > > > > > + if ((offset + size) > (end_bit << order))
> > > > > > > +         size_alloc = size + (1UL << order);
> > > > > > 
> > > > > > Why do you need to do all these calculations here?
> > > > > 
> > > > > So do it in gen_pool_fixed_alloc?
> > > > 
> > > > Could you explain why they're needed at all?
> > > 
> > > Why it does the calculations?
> > > If the min block of gen_pool is 8 bytes, and I want to allocate a
> > > Region with offset=7, size=8bytes, I actually need block 0 and block
> > > 1, And the allocation will give me block 0.
> > 
> > How can you have offset 7 if the minimum order is 2 bytes?
> 
> Offset has no relationship with minimum order, it is not decided by minimum 
> order.

All allocations begin and end on a multiple of the minimum order.

> I want to allocate a specific region with offset=7, then algo to calculate 
> the block bit.
> And I just take it for example, it is not I really need to region offset=7.

Do you really need any fixed allocations that begin on an odd address?

> So, now minimum order is 2 bytes. If offset=7, size=4bytes needed, it 
> actually allocate 6-12 to me.

Why 6-12 and not 6-10?

-Scott

^ permalink raw reply	[flat|nested] 27+ messages in thread

* RE: [PATCH v10 3/5] CPM/QE: use genalloc to manage CPM/QE muram
  2015-09-24 23:30               ` Scott Wood
@ 2015-09-25  2:50                 ` Zhao Qiang
  2015-09-25  5:08                   ` Scott Wood
  0 siblings, 1 reply; 27+ messages in thread
From: Zhao Qiang @ 2015-09-25  2:50 UTC (permalink / raw)
  To: Scott Wood
  Cc: linux-kernel, linuxppc-dev, lauraa, Xiaobo Xie, benh, Li Leo, paulus

T24gRnJpLCBTZXAgMjUsIDIwMTUgYXQgNzozMCBBTSArMDgwMCwgV29vZCBTY290dC1CMDc0MjEg
d3JvdGU6DQo+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IFdvb2QgU2NvdHQt
QjA3NDIxDQo+IFNlbnQ6IEZyaWRheSwgU2VwdGVtYmVyIDI1LCAyMDE1IDc6MzAgQU0NCj4gVG86
IFpoYW8gUWlhbmctQjQ1NDc1DQo+IENjOiBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnOyBs
aW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZzsNCj4gbGF1cmFhQGNvZGVhdXJvcmEub3JnOyBY
aWUgWGlhb2JvLVI2MzA2MTsgYmVuaEBrZXJuZWwuY3Jhc2hpbmcub3JnOyBMaQ0KPiBZYW5nLUxl
by1SNTg0NzI7IHBhdWx1c0BzYW1iYS5vcmcNCj4gU3ViamVjdDogUmU6IFtQQVRDSCB2MTAgMy81
XSBDUE0vUUU6IHVzZSBnZW5hbGxvYyB0byBtYW5hZ2UgQ1BNL1FFIG11cmFtDQo+IA0KPiBPbiBX
ZWQsIDIwMTUtMDktMjMgYXQgMDA6MjggLTA1MDAsIFpoYW8gUWlhbmctQjQ1NDc1IHdyb3RlOg0K
PiA+IE9uIFdlbiwgU2VwIDIzLCAyMDE1IGF0IDEyOjAzIEFNICswODAwLCBXb29kIFNjb3R0LUIw
NzQyMSB3cm90ZToNCj4gPg0KPiA+ID4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gPiA+
IEZyb206IFdvb2QgU2NvdHQtQjA3NDIxDQo+ID4gPiBTZW50OiBXZWRuZXNkYXksIFNlcHRlbWJl
ciAyMywgMjAxNSAxMjowMyBQTQ0KPiA+ID4gVG86IFpoYW8gUWlhbmctQjQ1NDc1DQo+ID4gPiBD
YzogbGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsgbGludXhwcGMtZGV2QGxpc3RzLm96bGFi
cy5vcmc7DQo+ID4gPiBsYXVyYWFAY29kZWF1cm9yYS5vcmc7IFhpZSBYaWFvYm8tUjYzMDYxOyBi
ZW5oQGtlcm5lbC5jcmFzaGluZy5vcmc7DQo+ID4gPiBMaSBZYW5nLUxlby1SNTg0NzI7IHBhdWx1
c0BzYW1iYS5vcmcNCj4gPiA+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjEwIDMvNV0gQ1BNL1FFOiB1
c2UgZ2VuYWxsb2MgdG8gbWFuYWdlIENQTS9RRQ0KPiA+ID4gbXVyYW0NCj4gPiA+DQo+ID4gPiBP
biBUdWUsIDIwMTUtMDktMjIgYXQgMjE6MjAgLTA1MDAsIFpoYW8gUWlhbmctQjQ1NDc1IHdyb3Rl
Og0KPiA+ID4gPiBPbiBXZW4sIFNlcCAyMywgMjAxNSBhdCA4OjE5IEFNICswODAwLCBXb29kIFNj
b3R0LUIwNzQyMSB3cm90ZToNCj4gPiA+ID4NCj4gPiA+ID4gPiA+ID4gPiAgew0KPiA+ID4gPiA+
ID4gPiA+IC0gaW50IHJldDsNCj4gPiA+ID4gPiA+ID4gPiArDQo+ID4gPiA+ID4gPiA+ID4gKyB1
bnNpZ25lZCBsb25nIHN0YXJ0Ow0KPiA+ID4gPiA+ID4gPiA+ICAgdW5zaWduZWQgbG9uZyBmbGFn
czsNCj4gPiA+ID4gPiA+ID4gPiArIHVuc2lnbmVkIGxvbmcgc2l6ZV9hbGxvYyA9IHNpemU7IHN0
cnVjdCBtdXJhbV9ibG9jaw0KPiA+ID4gPiA+ID4gPiA+ICsgKmVudHJ5OyBpbnQgZW5kX2JpdDsg
aW50IG9yZGVyID0NCj4gPiA+ID4gPiA+ID4gPiArIG11cmFtX3Bvb2wtPm1pbl9hbGxvY19vcmRl
cjsNCj4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+ICAgc3Bpbl9sb2NrX2lycXNhdmUo
JmNwbV9tdXJhbV9sb2NrLCBmbGFncyk7DQo+ID4gPiA+ID4gPiA+ID4gLSByZXQgPSByaF9mcmVl
KCZjcG1fbXVyYW1faW5mbywgb2Zmc2V0KTsNCj4gPiA+ID4gPiA+ID4gPiArIGVuZF9iaXQgPSAo
b2Zmc2V0ID4+IG9yZGVyKSArICgoc2l6ZSArICgxVUwgPDwgb3JkZXIpIC0NCj4gPiA+ID4gPiA+
ID4gPiArIDEpDQo+ID4gPiA+ID4gPiA+ID4gKyA+Pg0KPiA+ID4gPiA+ID4gPiBvcmRlcik7DQo+
ID4gPiA+ID4gPiA+ID4gKyBpZiAoKG9mZnNldCArIHNpemUpID4gKGVuZF9iaXQgPDwgb3JkZXIp
KQ0KPiA+ID4gPiA+ID4gPiA+ICsgICAgICAgICBzaXplX2FsbG9jID0gc2l6ZSArICgxVUwgPDwg
b3JkZXIpOw0KPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiBXaHkgZG8geW91IG5lZWQgdG8g
ZG8gYWxsIHRoZXNlIGNhbGN1bGF0aW9ucyBoZXJlPw0KPiA+ID4gPiA+ID4NCj4gPiA+ID4gPiA+
IFNvIGRvIGl0IGluIGdlbl9wb29sX2ZpeGVkX2FsbG9jPw0KPiA+ID4gPiA+DQo+ID4gPiA+ID4g
Q291bGQgeW91IGV4cGxhaW4gd2h5IHRoZXkncmUgbmVlZGVkIGF0IGFsbD8NCj4gPiA+ID4NCj4g
PiA+ID4gV2h5IGl0IGRvZXMgdGhlIGNhbGN1bGF0aW9ucz8NCj4gPiA+ID4gSWYgdGhlIG1pbiBi
bG9jayBvZiBnZW5fcG9vbCBpcyA4IGJ5dGVzLCBhbmQgSSB3YW50IHRvIGFsbG9jYXRlIGENCj4g
PiA+ID4gUmVnaW9uIHdpdGggb2Zmc2V0PTcsIHNpemU9OGJ5dGVzLCBJIGFjdHVhbGx5IG5lZWQg
YmxvY2sgMCBhbmQNCj4gPiA+ID4gYmxvY2sgMSwgQW5kIHRoZSBhbGxvY2F0aW9uIHdpbGwgZ2l2
ZSBtZSBibG9jayAwLg0KPiA+ID4NCj4gPiA+IEhvdyBjYW4geW91IGhhdmUgb2Zmc2V0IDcgaWYg
dGhlIG1pbmltdW0gb3JkZXIgaXMgMiBieXRlcz8NCj4gPg0KPiA+IE9mZnNldCBoYXMgbm8gcmVs
YXRpb25zaGlwIHdpdGggbWluaW11bSBvcmRlciwgaXQgaXMgbm90IGRlY2lkZWQgYnkNCj4gPiBt
aW5pbXVtIG9yZGVyLg0KPiANCj4gQWxsIGFsbG9jYXRpb25zIGJlZ2luIGFuZCBlbmQgb24gYSBt
dWx0aXBsZSBvZiB0aGUgbWluaW11bSBvcmRlci4NCg0KU28gaXQgaXMgdGhlIHByb2JsZW0uIENQ
TSByZXF1aXJlIHRvIGFsbG9jYXRlIGEgc3BlY2lmaWMgcmVnaW9uLA0Kd2hvIGNhbiBlbnN1cmUg
dGhhdCB0aGUgc3BlY2lmaWMgaXMganVzdCB0aGUgYmVnaW4gb2YgbWluaW11bSBvcmRlci4NClNv
IHRoZSBhbGdvIHdpbGwgZmluZCB0aGUgZmlyc3QgYmxvY2sgY292ZXJpbmcgdGhlIHNwZWNpZmlj
IHJlZ2lvbidzIA0KU3RhcnQgYWRkcmVzcywgdGhlbiBiZWNhdXNlIG15IHNwZWNpZmljIHJlZ2lv
bidzIHN0YXJ0IGFkZHJlc3MgaXMgbm90IGVxdWFsDQpUbyB0aGUgYWRkcmVzcyByZXR1cm5lZCBi
eSBhbGdvLCB0aGUgZW5kIGFkZHJlc3MgaXMgbm90IGVxdWFsIHRvIG15IA0Kc3BlY2lmaWMgcmVn
aW9uJ3MgZW5kIGFkZHJlc3MsIHNvIHRoZSBjYWxjdWxhdGlvbiBpcyB0byBrZWVwIHRoZSBlbmQg
DQphZGRyZXNzIGxhcmdlciB0aGFuIHNwZWNpZmljIHJlZ2lvbidzIGVuZCBhZGRyZXNzLg0KDQo+
IA0KPiA+IEkgd2FudCB0byBhbGxvY2F0ZSBhIHNwZWNpZmljIHJlZ2lvbiB3aXRoIG9mZnNldD03
LCB0aGVuIGFsZ28gdG8NCj4gPiBjYWxjdWxhdGUgdGhlIGJsb2NrIGJpdC4NCj4gPiBBbmQgSSBq
dXN0IHRha2UgaXQgZm9yIGV4YW1wbGUsIGl0IGlzIG5vdCBJIHJlYWxseSBuZWVkIHRvIHJlZ2lv
bg0KPiBvZmZzZXQ9Ny4NCj4gDQo+IERvIHlvdSByZWFsbHkgbmVlZCBhbnkgZml4ZWQgYWxsb2Nh
dGlvbnMgdGhhdCBiZWdpbiBvbiBhbiBvZGQgYWRkcmVzcz8NCg0KTWF5YmUgSSBkb27igJl0IG5l
ZWQgYW4gb2RkIGFkZHJlc3MsIGJ1dCB0aGUgY2FsY3VsYXRpb24gaXMgbmVlZGVkIGluIGNhc2Uu
DQoNCj4gDQo+ID4gU28sIG5vdyBtaW5pbXVtIG9yZGVyIGlzIDIgYnl0ZXMuIElmIG9mZnNldD03
LCBzaXplPTRieXRlcyBuZWVkZWQsIGl0DQo+ID4gYWN0dWFsbHkgYWxsb2NhdGUgNi0xMiB0byBt
ZS4NCj4gDQo+IFdoeSA2LTEyIGFuZCBub3QgNi0xMD8NCg0KSXQgaXMganVzdCBhIGV4YW1wbGUN
Cg0KLVpoYW8gDQoNCg==

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v10 3/5] CPM/QE: use genalloc to manage CPM/QE muram
  2015-09-25  2:50                 ` Zhao Qiang
@ 2015-09-25  5:08                   ` Scott Wood
  2015-09-25  5:33                     ` Zhao Qiang
  0 siblings, 1 reply; 27+ messages in thread
From: Scott Wood @ 2015-09-25  5:08 UTC (permalink / raw)
  To: Zhao Qiang-B45475
  Cc: linux-kernel, linuxppc-dev, lauraa, Xie Xiaobo-R63061, benh,
	Li Yang-Leo-R58472, paulus

On Thu, 2015-09-24 at 21:50 -0500, Zhao Qiang-B45475 wrote:
> On Fri, Sep 25, 2015 at 7:30 AM +0800, Wood Scott-B07421 wrote:
> > -----Original Message-----
> > From: Wood Scott-B07421
> > Sent: Friday, September 25, 2015 7:30 AM
> > To: Zhao Qiang-B45475
> > Cc: linux-kernel@vger.kernel.org; linuxppc-dev@lists.ozlabs.org;
> > lauraa@codeaurora.org; Xie Xiaobo-R63061; benh@kernel.crashing.org; Li
> > Yang-Leo-R58472; paulus@samba.org
> > Subject: Re: [PATCH v10 3/5] CPM/QE: use genalloc to manage CPM/QE muram
> > 
> > On Wed, 2015-09-23 at 00:28 -0500, Zhao Qiang-B45475 wrote:
> > > On Wen, Sep 23, 2015 at 12:03 AM +0800, Wood Scott-B07421 wrote:
> > > 
> > > > -----Original Message-----
> > > > From: Wood Scott-B07421
> > > > Sent: Wednesday, September 23, 2015 12:03 PM
> > > > To: Zhao Qiang-B45475
> > > > Cc: linux-kernel@vger.kernel.org; linuxppc-dev@lists.ozlabs.org;
> > > > lauraa@codeaurora.org; Xie Xiaobo-R63061; benh@kernel.crashing.org;
> > > > Li Yang-Leo-R58472; paulus@samba.org
> > > > Subject: Re: [PATCH v10 3/5] CPM/QE: use genalloc to manage CPM/QE
> > > > muram
> > > > 
> > > > On Tue, 2015-09-22 at 21:20 -0500, Zhao Qiang-B45475 wrote:
> > > > > On Wen, Sep 23, 2015 at 8:19 AM +0800, Wood Scott-B07421 wrote:
> > > > > 
> > > > > > > > >  {
> > > > > > > > > - int ret;
> > > > > > > > > +
> > > > > > > > > + unsigned long start;
> > > > > > > > >   unsigned long flags;
> > > > > > > > > + unsigned long size_alloc = size; struct muram_block
> > > > > > > > > + *entry; int end_bit; int order =
> > > > > > > > > + muram_pool->min_alloc_order;
> > > > > > > > > 
> > > > > > > > >   spin_lock_irqsave(&cpm_muram_lock, flags);
> > > > > > > > > - ret = rh_free(&cpm_muram_info, offset);
> > > > > > > > > + end_bit = (offset >> order) + ((size + (1UL << order) -
> > > > > > > > > + 1)
> > > > > > > > > + >>
> > > > > > > > order);
> > > > > > > > > + if ((offset + size) > (end_bit << order))
> > > > > > > > > +         size_alloc = size + (1UL << order);
> > > > > > > > 
> > > > > > > > Why do you need to do all these calculations here?
> > > > > > > 
> > > > > > > So do it in gen_pool_fixed_alloc?
> > > > > > 
> > > > > > Could you explain why they're needed at all?
> > > > > 
> > > > > Why it does the calculations?
> > > > > If the min block of gen_pool is 8 bytes, and I want to allocate a
> > > > > Region with offset=7, size=8bytes, I actually need block 0 and
> > > > > block 1, And the allocation will give me block 0.
> > > > 
> > > > How can you have offset 7 if the minimum order is 2 bytes?
> > > 
> > > Offset has no relationship with minimum order, it is not decided by
> > > minimum order.
> > 
> > All allocations begin and end on a multiple of the minimum order.
> 
> So it is the problem. CPM require to allocate a specific region,
> who can ensure that the specific is just the begin of minimum order.

Do you have any reason to believe that there is any caller of this function 
with an odd address?

If so, set the minimum order to zero.  If not, what is the problem?

> So the algo will find the first block covering the specific region's 
> Start address, then because my specific region's start address is not equal
> To the address returned by algo, the end address is not equal to my 
> specific region's end address, so the calculation is to keep the end 
> address larger than specific region's end address.
> 
> > 
> > > I want to allocate a specific region with offset=7, then algo to
> > > calculate the block bit.
> > > And I just take it for example, it is not I really need to region
> > offset=7.
> > 
> > Do you really need any fixed allocations that begin on an odd address?
> 
> Maybe I don’t need an odd address, but the calculation is needed in case.

No.  "In case" the caller does something that is not allowed, the allocation 
should fail.

-Scott

^ permalink raw reply	[flat|nested] 27+ messages in thread

* RE: [PATCH v10 3/5] CPM/QE: use genalloc to manage CPM/QE muram
  2015-09-25  5:08                   ` Scott Wood
@ 2015-09-25  5:33                     ` Zhao Qiang
  0 siblings, 0 replies; 27+ messages in thread
From: Zhao Qiang @ 2015-09-25  5:33 UTC (permalink / raw)
  To: Scott Wood
  Cc: linux-kernel, linuxppc-dev, lauraa, Xiaobo Xie, benh, Li Leo, paulus

T24gRnJpLCBTZXAgMjUsIDIwMTUgYXQgMTowOCBQTSArMDgwMCwgV29vZCBTY290dC1CMDc0MjEg
d3JvdGU6DQoNCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogV29vZCBTY290
dC1CMDc0MjENCj4gU2VudDogRnJpZGF5LCBTZXB0ZW1iZXIgMjUsIDIwMTUgMTowOCBQTQ0KPiBU
bzogWmhhbyBRaWFuZy1CNDU0NzUNCj4gQ2M6IGxpbnV4LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7
IGxpbnV4cHBjLWRldkBsaXN0cy5vemxhYnMub3JnOw0KPiBsYXVyYWFAY29kZWF1cm9yYS5vcmc7
IFhpZSBYaWFvYm8tUjYzMDYxOyBiZW5oQGtlcm5lbC5jcmFzaGluZy5vcmc7IExpDQo+IFlhbmct
TGVvLVI1ODQ3MjsgcGF1bHVzQHNhbWJhLm9yZw0KPiBTdWJqZWN0OiBSZTogW1BBVENIIHYxMCAz
LzVdIENQTS9RRTogdXNlIGdlbmFsbG9jIHRvIG1hbmFnZSBDUE0vUUUgbXVyYW0NCj4gDQo+IE9u
IFRodSwgMjAxNS0wOS0yNCBhdCAyMTo1MCAtMDUwMCwgWmhhbyBRaWFuZy1CNDU0NzUgd3JvdGU6
DQo+ID4gT24gRnJpLCBTZXAgMjUsIDIwMTUgYXQgNzozMCBBTSArMDgwMCwgV29vZCBTY290dC1C
MDc0MjEgd3JvdGU6DQo+ID4gPiAtLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPiA+ID4gRnJv
bTogV29vZCBTY290dC1CMDc0MjENCj4gPiA+IFNlbnQ6IEZyaWRheSwgU2VwdGVtYmVyIDI1LCAy
MDE1IDc6MzAgQU0NCj4gPiA+IFRvOiBaaGFvIFFpYW5nLUI0NTQ3NQ0KPiA+ID4gQ2M6IGxpbnV4
LWtlcm5lbEB2Z2VyLmtlcm5lbC5vcmc7IGxpbnV4cHBjLWRldkBsaXN0cy5vemxhYnMub3JnOw0K
PiA+ID4gbGF1cmFhQGNvZGVhdXJvcmEub3JnOyBYaWUgWGlhb2JvLVI2MzA2MTsgYmVuaEBrZXJu
ZWwuY3Jhc2hpbmcub3JnOw0KPiA+ID4gTGkgWWFuZy1MZW8tUjU4NDcyOyBwYXVsdXNAc2FtYmEu
b3JnDQo+ID4gPiBTdWJqZWN0OiBSZTogW1BBVENIIHYxMCAzLzVdIENQTS9RRTogdXNlIGdlbmFs
bG9jIHRvIG1hbmFnZSBDUE0vUUUNCj4gPiA+IG11cmFtDQo+ID4gPg0KPiA+ID4gT24gV2VkLCAy
MDE1LTA5LTIzIGF0IDAwOjI4IC0wNTAwLCBaaGFvIFFpYW5nLUI0NTQ3NSB3cm90ZToNCj4gPiA+
ID4gT24gV2VuLCBTZXAgMjMsIDIwMTUgYXQgMTI6MDMgQU0gKzA4MDAsIFdvb2QgU2NvdHQtQjA3
NDIxIHdyb3RlOg0KPiA+ID4gPg0KPiA+ID4gPiA+IC0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0t
DQo+ID4gPiA+ID4gRnJvbTogV29vZCBTY290dC1CMDc0MjENCj4gPiA+ID4gPiBTZW50OiBXZWRu
ZXNkYXksIFNlcHRlbWJlciAyMywgMjAxNSAxMjowMyBQTQ0KPiA+ID4gPiA+IFRvOiBaaGFvIFFp
YW5nLUI0NTQ3NQ0KPiA+ID4gPiA+IENjOiBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnOyBs
aW51eHBwYy1kZXZAbGlzdHMub3psYWJzLm9yZzsNCj4gPiA+ID4gPiBsYXVyYWFAY29kZWF1cm9y
YS5vcmc7IFhpZSBYaWFvYm8tUjYzMDYxOw0KPiA+ID4gPiA+IGJlbmhAa2VybmVsLmNyYXNoaW5n
Lm9yZzsgTGkgWWFuZy1MZW8tUjU4NDcyOyBwYXVsdXNAc2FtYmEub3JnDQo+ID4gPiA+ID4gU3Vi
amVjdDogUmU6IFtQQVRDSCB2MTAgMy81XSBDUE0vUUU6IHVzZSBnZW5hbGxvYyB0byBtYW5hZ2UN
Cj4gPiA+ID4gPiBDUE0vUUUgbXVyYW0NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IE9uIFR1ZSwgMjAx
NS0wOS0yMiBhdCAyMToyMCAtMDUwMCwgWmhhbyBRaWFuZy1CNDU0NzUgd3JvdGU6DQo+ID4gPiA+
ID4gPiBPbiBXZW4sIFNlcCAyMywgMjAxNSBhdCA4OjE5IEFNICswODAwLCBXb29kIFNjb3R0LUIw
NzQyMSB3cm90ZToNCj4gPiA+ID4gPiA+DQo+ID4gPiA+ID4gPiA+ID4gPiA+ICB7DQo+ID4gPiA+
ID4gPiA+ID4gPiA+IC0gaW50IHJldDsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gKw0KPiA+ID4gPiA+
ID4gPiA+ID4gPiArIHVuc2lnbmVkIGxvbmcgc3RhcnQ7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ICAg
dW5zaWduZWQgbG9uZyBmbGFnczsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gKyB1bnNpZ25lZCBsb25n
IHNpemVfYWxsb2MgPSBzaXplOyBzdHJ1Y3QgbXVyYW1fYmxvY2sNCj4gPiA+ID4gPiA+ID4gPiA+
ID4gKyAqZW50cnk7IGludCBlbmRfYml0OyBpbnQgb3JkZXIgPQ0KPiA+ID4gPiA+ID4gPiA+ID4g
PiArIG11cmFtX3Bvb2wtPm1pbl9hbGxvY19vcmRlcjsNCj4gPiA+ID4gPiA+ID4gPiA+ID4NCj4g
PiA+ID4gPiA+ID4gPiA+ID4gICBzcGluX2xvY2tfaXJxc2F2ZSgmY3BtX211cmFtX2xvY2ssIGZs
YWdzKTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gLSByZXQgPSByaF9mcmVlKCZjcG1fbXVyYW1faW5m
bywgb2Zmc2V0KTsNCj4gPiA+ID4gPiA+ID4gPiA+ID4gKyBlbmRfYml0ID0gKG9mZnNldCA+PiBv
cmRlcikgKyAoKHNpemUgKyAoMVVMIDw8DQo+ID4gPiA+ID4gPiA+ID4gPiA+ICsgb3JkZXIpIC0N
Cj4gPiA+ID4gPiA+ID4gPiA+ID4gKyAxKQ0KPiA+ID4gPiA+ID4gPiA+ID4gPiArID4+DQo+ID4g
PiA+ID4gPiA+ID4gPiBvcmRlcik7DQo+ID4gPiA+ID4gPiA+ID4gPiA+ICsgaWYgKChvZmZzZXQg
KyBzaXplKSA+IChlbmRfYml0IDw8IG9yZGVyKSkNCj4gPiA+ID4gPiA+ID4gPiA+ID4gKyAgICAg
ICAgIHNpemVfYWxsb2MgPSBzaXplICsgKDFVTCA8PCBvcmRlcik7DQo+ID4gPiA+ID4gPiA+ID4g
Pg0KPiA+ID4gPiA+ID4gPiA+ID4gV2h5IGRvIHlvdSBuZWVkIHRvIGRvIGFsbCB0aGVzZSBjYWxj
dWxhdGlvbnMgaGVyZT8NCj4gPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiA+IFNvIGRvIGl0
IGluIGdlbl9wb29sX2ZpeGVkX2FsbG9jPw0KPiA+ID4gPiA+ID4gPg0KPiA+ID4gPiA+ID4gPiBD
b3VsZCB5b3UgZXhwbGFpbiB3aHkgdGhleSdyZSBuZWVkZWQgYXQgYWxsPw0KPiA+ID4gPiA+ID4N
Cj4gPiA+ID4gPiA+IFdoeSBpdCBkb2VzIHRoZSBjYWxjdWxhdGlvbnM/DQo+ID4gPiA+ID4gPiBJ
ZiB0aGUgbWluIGJsb2NrIG9mIGdlbl9wb29sIGlzIDggYnl0ZXMsIGFuZCBJIHdhbnQgdG8NCj4g
PiA+ID4gPiA+IGFsbG9jYXRlIGEgUmVnaW9uIHdpdGggb2Zmc2V0PTcsIHNpemU9OGJ5dGVzLCBJ
IGFjdHVhbGx5IG5lZWQNCj4gPiA+ID4gPiA+IGJsb2NrIDAgYW5kIGJsb2NrIDEsIEFuZCB0aGUg
YWxsb2NhdGlvbiB3aWxsIGdpdmUgbWUgYmxvY2sgMC4NCj4gPiA+ID4gPg0KPiA+ID4gPiA+IEhv
dyBjYW4geW91IGhhdmUgb2Zmc2V0IDcgaWYgdGhlIG1pbmltdW0gb3JkZXIgaXMgMiBieXRlcz8N
Cj4gPiA+ID4NCj4gPiA+ID4gT2Zmc2V0IGhhcyBubyByZWxhdGlvbnNoaXAgd2l0aCBtaW5pbXVt
IG9yZGVyLCBpdCBpcyBub3QgZGVjaWRlZA0KPiA+ID4gPiBieSBtaW5pbXVtIG9yZGVyLg0KPiA+
ID4NCj4gPiA+IEFsbCBhbGxvY2F0aW9ucyBiZWdpbiBhbmQgZW5kIG9uIGEgbXVsdGlwbGUgb2Yg
dGhlIG1pbmltdW0gb3JkZXIuDQo+ID4NCj4gPiBTbyBpdCBpcyB0aGUgcHJvYmxlbS4gQ1BNIHJl
cXVpcmUgdG8gYWxsb2NhdGUgYSBzcGVjaWZpYyByZWdpb24sIHdobw0KPiA+IGNhbiBlbnN1cmUg
dGhhdCB0aGUgc3BlY2lmaWMgaXMganVzdCB0aGUgYmVnaW4gb2YgbWluaW11bSBvcmRlci4NCj4g
DQo+IERvIHlvdSBoYXZlIGFueSByZWFzb24gdG8gYmVsaWV2ZSB0aGF0IHRoZXJlIGlzIGFueSBj
YWxsZXIgb2YgdGhpcw0KPiBmdW5jdGlvbiB3aXRoIGFuIG9kZCBhZGRyZXNzPw0KPiANCj4gSWYg
c28sIHNldCB0aGUgbWluaW11bSBvcmRlciB0byB6ZXJvLiAgSWYgbm90LCB3aGF0IGlzIHRoZSBw
cm9ibGVtPw0KDQpTZXR0aW5nIG1pbmltdW0gb3JkZXIgdG8gemVybyBpcyBvay4NCg0KLVpoYW8N
Cg==

^ permalink raw reply	[flat|nested] 27+ messages in thread

end of thread, other threads:[~2015-09-25  5:33 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-09-18  7:15 [PATCH v10 1/5] genalloc:support memory-allocation with bytes-alignment to genalloc Zhao Qiang
2015-09-18  7:15 ` [PATCH v10 2/5] genalloc:support allocating specific region Zhao Qiang
2015-09-18  7:15 ` [PATCH v10 3/5] CPM/QE: use genalloc to manage CPM/QE muram Zhao Qiang
2015-09-21 22:47   ` Scott Wood
2015-09-22  8:10     ` Zhao Qiang
2015-09-23  0:19       ` Scott Wood
2015-09-23  2:20         ` Zhao Qiang
2015-09-23  4:02           ` Scott Wood
2015-09-23  5:28             ` Zhao Qiang
2015-09-24 23:30               ` Scott Wood
2015-09-25  2:50                 ` Zhao Qiang
2015-09-25  5:08                   ` Scott Wood
2015-09-25  5:33                     ` Zhao Qiang
2015-09-18  7:15 ` [PATCH v10 4/5] QE/CPM: move muram management functions to qe_common Zhao Qiang
2015-09-21 22:54   ` Scott Wood
2015-09-22  2:23     ` Zhao Qiang
2015-09-22  2:25       ` Scott Wood
2015-09-22  3:06         ` Zhao Qiang
2015-09-22  3:07           ` Scott Wood
2015-09-22  3:22             ` Zhao Qiang
2015-09-22  3:24               ` Scott Wood
2015-09-22  4:07                 ` Zhao Qiang
2015-09-18  7:15 ` [PATCH v10 5/5] QE: Move QE from arch/powerpc to drivers/soc Zhao Qiang
2015-09-21 22:56   ` Scott Wood
2015-09-22  8:24     ` Zhao Qiang
2015-09-22 16:39       ` Scott Wood
2015-09-23  2:01         ` Zhao Qiang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).