All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH 0/3] ARM: Clean arm/lib/cache.c, modify ARM1136 and ARM926 accordingly
@ 2011-08-11  2:19 Hong Xu
  2011-08-11  2:19 ` [U-Boot] [PATCH 1/3] ARM: Clean arch/arm/lib/cache.c Hong Xu
                   ` (8 more replies)
  0 siblings, 9 replies; 19+ messages in thread
From: Hong Xu @ 2011-08-11  2:19 UTC (permalink / raw)
  To: u-boot

This series try to clean the code of arch/arm/lib/cache.c
Move ARM1136 cache operations into cpu/arm1136/cache.c
Add ARM926EJS cache operations into cpu/arm926ejs/cache.c

Hong Xu (3):
	ARM: Clean arch/arm/lib/cache.c
	ARM: ARM1136 - Remove flush_cache from arch/arm/lib/cache.c
	ARM: ARM926EJS - Add cache operations

arch/arm/cpu/arm1136/Makefile   |    2 +-
arch/arm/cpu/arm1136/cache.c    |   33 +++++++++
arch/arm/cpu/arm926ejs/Makefile |    2 +-
arch/arm/cpu/arm926ejs/cache.c  |  142 +++++++++++++++++++++++++++++++++++++++
arch/arm/lib/cache.c            |   55 +++++++++-------
5 files changed, 208 insertions(+), 26 deletions(-)
create mode 100644 arch/arm/cpu/arm1136/cache.c
create mode 100644 arch/arm/cpu/arm926ejs/cache.c

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

* [U-Boot] [PATCH 1/3] ARM: Clean arch/arm/lib/cache.c
  2011-08-11  2:19 [U-Boot] [PATCH 0/3] ARM: Clean arm/lib/cache.c, modify ARM1136 and ARM926 accordingly Hong Xu
@ 2011-08-11  2:19 ` Hong Xu
  2011-08-11  2:19 ` Hong Xu
                   ` (7 subsequent siblings)
  8 siblings, 0 replies; 19+ messages in thread
From: Hong Xu @ 2011-08-11  2:19 UTC (permalink / raw)
  To: u-boot

The default cache operations defined in arch/arm/lib/cache.c
do not perform any real cache operation, and instead a WARNING
will be emitted.

Signed-off-by: Hong Xu <hong.xu@atmel.com>
Tested-by: Elen Song <elen.song@atmel.com>
CC: Albert Aribaud <albert.u.boot@aribaud.net>
---
 arch/arm/lib/cache.c |   55 ++++++++++++++++++++++++++++---------------------
 1 files changed, 31 insertions(+), 24 deletions(-)

diff --git a/arch/arm/lib/cache.c b/arch/arm/lib/cache.c
index 92b61a2..6af05ec 100644
--- a/arch/arm/lib/cache.c
+++ b/arch/arm/lib/cache.c
@@ -20,36 +20,43 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  * MA 02111-1307 USA
  */
+#include <linux/compiler.h>
+#include <common.h>
 
-/* for now: just dummy functions to satisfy the linker */
+#define EMIT_WARNING printf("WARNING: %s - CPU cache operation is not " \
+"implemented!\n", __func__)
 
-#include <common.h>
+/*
+ * Default implementations
+ *
+ * Warn user if CPU code does not implement necessary cache functions
+ */
+void __weak flush_cache(unsigned long start, unsigned long size)
+{
+	EMIT_WARNING;
+}
 
-void  __flush_cache(unsigned long start, unsigned long size)
+void __weak flush_dcache_all(void)
 {
-#if defined(CONFIG_OMAP2420) || defined(CONFIG_ARM1136)
-	void arm1136_cache_flush(void);
+	EMIT_WARNING;
+}
 
-	arm1136_cache_flush();
-#endif
-#ifdef CONFIG_ARM926EJS
-	/* test and clean, page 2-23 of arm926ejs manual */
-	asm("0: mrc p15, 0, r15, c7, c10, 3\n\t" "bne 0b\n" : : : "memory");
-	/* disable write buffer as well (page 2-22) */
-	asm("mcr p15, 0, %0, c7, c10, 4" : : "r" (0));
-#endif
-	return;
+void __weak flush_dcache_range(unsigned long start, unsigned long stop)
+{
+	EMIT_WARNING;
 }
-void  flush_cache(unsigned long start, unsigned long size)
-	__attribute__((weak, alias("__flush_cache")));
 
-/*
- * Default implementation:
- * do a range flush for the entire range
- */
-void	__flush_dcache_all(void)
+void __weak invalidate_dcache_range(unsigned long start, unsigned long stop)
+{
+	EMIT_WARNING;
+}
+
+void __weak invalidate_dcache_all(void)
+{
+	EMIT_WARNING;
+}
+
+void __weak invalidate_icache_all(void)
 {
-	flush_cache(0, ~0);
+	EMIT_WARNING;
 }
-void	flush_dcache_all(void)
-	__attribute__((weak, alias("__flush_dcache_all")));
-- 
1.7.6

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

* [U-Boot] [PATCH 1/3] ARM: Clean arch/arm/lib/cache.c
  2011-08-11  2:19 [U-Boot] [PATCH 0/3] ARM: Clean arm/lib/cache.c, modify ARM1136 and ARM926 accordingly Hong Xu
  2011-08-11  2:19 ` [U-Boot] [PATCH 1/3] ARM: Clean arch/arm/lib/cache.c Hong Xu
@ 2011-08-11  2:19 ` Hong Xu
  2011-08-11  4:38   ` Marek Vasut
  2011-08-11  2:19 ` [U-Boot] [PATCH 2/3] ARM: ARM1136 - Remove flush_cache from arch/arm/lib/cache.c Hong Xu
                   ` (6 subsequent siblings)
  8 siblings, 1 reply; 19+ messages in thread
From: Hong Xu @ 2011-08-11  2:19 UTC (permalink / raw)
  To: u-boot

The default cache operations defined in arch/arm/lib/cache.c
do not perform any real cache operation, and instead a WARNING
will be emitted.

Signed-off-by: Hong Xu <hong.xu@atmel.com>
Tested-by: Elen Song <elen.song@atmel.com>
CC: Albert Aribaud <albert.u.boot@aribaud.net>
CC: Aneesh V <aneesh@ti.com>
CC: Marek Vasut <marek.vasut@gmail.com>
CC: Reinhard Meyer <u-boot@emk-elektronik.de>
CC: Heiko Schocher <hs@denx.de>
---
 arch/arm/lib/cache.c |   55 ++++++++++++++++++++++++++++---------------------
 1 files changed, 31 insertions(+), 24 deletions(-)

diff --git a/arch/arm/lib/cache.c b/arch/arm/lib/cache.c
index 92b61a2..6af05ec 100644
--- a/arch/arm/lib/cache.c
+++ b/arch/arm/lib/cache.c
@@ -20,36 +20,43 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
  * MA 02111-1307 USA
  */
+#include <linux/compiler.h>
+#include <common.h>
 
-/* for now: just dummy functions to satisfy the linker */
+#define EMIT_WARNING printf("WARNING: %s - CPU cache operation is not " \
+"implemented!\n", __func__)
 
-#include <common.h>
+/*
+ * Default implementations
+ *
+ * Warn user if CPU code does not implement necessary cache functions
+ */
+void __weak flush_cache(unsigned long start, unsigned long size)
+{
+	EMIT_WARNING;
+}
 
-void  __flush_cache(unsigned long start, unsigned long size)
+void __weak flush_dcache_all(void)
 {
-#if defined(CONFIG_OMAP2420) || defined(CONFIG_ARM1136)
-	void arm1136_cache_flush(void);
+	EMIT_WARNING;
+}
 
-	arm1136_cache_flush();
-#endif
-#ifdef CONFIG_ARM926EJS
-	/* test and clean, page 2-23 of arm926ejs manual */
-	asm("0: mrc p15, 0, r15, c7, c10, 3\n\t" "bne 0b\n" : : : "memory");
-	/* disable write buffer as well (page 2-22) */
-	asm("mcr p15, 0, %0, c7, c10, 4" : : "r" (0));
-#endif
-	return;
+void __weak flush_dcache_range(unsigned long start, unsigned long stop)
+{
+	EMIT_WARNING;
 }
-void  flush_cache(unsigned long start, unsigned long size)
-	__attribute__((weak, alias("__flush_cache")));
 
-/*
- * Default implementation:
- * do a range flush for the entire range
- */
-void	__flush_dcache_all(void)
+void __weak invalidate_dcache_range(unsigned long start, unsigned long stop)
+{
+	EMIT_WARNING;
+}
+
+void __weak invalidate_dcache_all(void)
+{
+	EMIT_WARNING;
+}
+
+void __weak invalidate_icache_all(void)
 {
-	flush_cache(0, ~0);
+	EMIT_WARNING;
 }
-void	flush_dcache_all(void)
-	__attribute__((weak, alias("__flush_dcache_all")));
-- 
1.7.6

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

* [U-Boot] [PATCH 2/3] ARM: ARM1136 - Remove flush_cache from arch/arm/lib/cache.c
  2011-08-11  2:19 [U-Boot] [PATCH 0/3] ARM: Clean arm/lib/cache.c, modify ARM1136 and ARM926 accordingly Hong Xu
  2011-08-11  2:19 ` [U-Boot] [PATCH 1/3] ARM: Clean arch/arm/lib/cache.c Hong Xu
  2011-08-11  2:19 ` Hong Xu
@ 2011-08-11  2:19 ` Hong Xu
  2011-08-11  2:19 ` Hong Xu
                   ` (5 subsequent siblings)
  8 siblings, 0 replies; 19+ messages in thread
From: Hong Xu @ 2011-08-11  2:19 UTC (permalink / raw)
  To: u-boot

arch/arm/lib/cache.c is cleaned and no real cache operation will be
defined in this file. So a new file arch/arm/cpu/arm1136/cache.c is
created. This file will define the real cache operations.

Signed-off-by: Hong Xu <hong.xu@atmel.com>
Tested-by: Elen Song <elen.song@atmel.com>
CC: Albert Aribaud <albert.u.boot@aribaud.net>
---
 arch/arm/cpu/arm1136/Makefile |    2 +-
 arch/arm/cpu/arm1136/cache.c  |   33 +++++++++++++++++++++++++++++++++
 2 files changed, 34 insertions(+), 1 deletions(-)
 create mode 100644 arch/arm/cpu/arm1136/cache.c

diff --git a/arch/arm/cpu/arm1136/Makefile b/arch/arm/cpu/arm1136/Makefile
index 930e0d1..5b5f330 100644
--- a/arch/arm/cpu/arm1136/Makefile
+++ b/arch/arm/cpu/arm1136/Makefile
@@ -26,7 +26,7 @@ include $(TOPDIR)/config.mk
 LIB	= $(obj)lib$(CPU).o
 
 START	= start.o
-COBJS	= cpu.o
+COBJS	= cpu.o cache.o
 
 SRCS	:= $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS	:= $(addprefix $(obj),$(COBJS) $(SOBJS))
diff --git a/arch/arm/cpu/arm1136/cache.c b/arch/arm/cpu/arm1136/cache.c
new file mode 100644
index 0000000..02aa266
--- /dev/null
+++ b/arch/arm/cpu/arm1136/cache.c
@@ -0,0 +1,33 @@
+/*
+ * (C) Copyright 2002
+ * Wolfgang Denk, DENX Software Engineering, wd at denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+
+void flush_cache(unsigned long start, unsigned long size)
+{
+#if defined(CONFIG_OMAP2420) || defined(CONFIG_ARM1136)
+	void arm1136_cache_flush(void);
+
+	arm1136_cache_flush();
+#endif
+}
-- 
1.7.6

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

* [U-Boot] [PATCH 2/3] ARM: ARM1136 - Remove flush_cache from arch/arm/lib/cache.c
  2011-08-11  2:19 [U-Boot] [PATCH 0/3] ARM: Clean arm/lib/cache.c, modify ARM1136 and ARM926 accordingly Hong Xu
                   ` (2 preceding siblings ...)
  2011-08-11  2:19 ` [U-Boot] [PATCH 2/3] ARM: ARM1136 - Remove flush_cache from arch/arm/lib/cache.c Hong Xu
@ 2011-08-11  2:19 ` Hong Xu
  2011-08-11  4:40   ` Marek Vasut
  2011-10-06 22:00   ` Wolfgang Denk
  2011-08-11  2:19 ` [U-Boot] [PATCH 3/3] ARM: ARM926EJS - Add cache operations Hong Xu
                   ` (4 subsequent siblings)
  8 siblings, 2 replies; 19+ messages in thread
From: Hong Xu @ 2011-08-11  2:19 UTC (permalink / raw)
  To: u-boot

arch/arm/lib/cache.c is cleaned and no real cache operation will be
defined in this file. So a new file arch/arm/cpu/arm1136/cache.c is
created. This file will define the real cache operations.

Signed-off-by: Hong Xu <hong.xu@atmel.com>
Tested-by: Elen Song <elen.song@atmel.com>
CC: Albert Aribaud <albert.u.boot@aribaud.net>
CC: Aneesh V <aneesh@ti.com>
CC: Marek Vasut <marek.vasut@gmail.com>
CC: Reinhard Meyer <u-boot@emk-elektronik.de>
CC: Heiko Schocher <hs@denx.de>
---
 arch/arm/cpu/arm1136/Makefile |    2 +-
 arch/arm/cpu/arm1136/cache.c  |   33 +++++++++++++++++++++++++++++++++
 2 files changed, 34 insertions(+), 1 deletions(-)
 create mode 100644 arch/arm/cpu/arm1136/cache.c

diff --git a/arch/arm/cpu/arm1136/Makefile b/arch/arm/cpu/arm1136/Makefile
index 930e0d1..5b5f330 100644
--- a/arch/arm/cpu/arm1136/Makefile
+++ b/arch/arm/cpu/arm1136/Makefile
@@ -26,7 +26,7 @@ include $(TOPDIR)/config.mk
 LIB	= $(obj)lib$(CPU).o
 
 START	= start.o
-COBJS	= cpu.o
+COBJS	= cpu.o cache.o
 
 SRCS	:= $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS	:= $(addprefix $(obj),$(COBJS) $(SOBJS))
diff --git a/arch/arm/cpu/arm1136/cache.c b/arch/arm/cpu/arm1136/cache.c
new file mode 100644
index 0000000..02aa266
--- /dev/null
+++ b/arch/arm/cpu/arm1136/cache.c
@@ -0,0 +1,33 @@
+/*
+ * (C) Copyright 2002
+ * Wolfgang Denk, DENX Software Engineering, wd at denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+
+void flush_cache(unsigned long start, unsigned long size)
+{
+#if defined(CONFIG_OMAP2420) || defined(CONFIG_ARM1136)
+	void arm1136_cache_flush(void);
+
+	arm1136_cache_flush();
+#endif
+}
-- 
1.7.6

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

* [U-Boot] [PATCH 3/3] ARM: ARM926EJS - Add cache operations
  2011-08-11  2:19 [U-Boot] [PATCH 0/3] ARM: Clean arm/lib/cache.c, modify ARM1136 and ARM926 accordingly Hong Xu
                   ` (3 preceding siblings ...)
  2011-08-11  2:19 ` Hong Xu
@ 2011-08-11  2:19 ` Hong Xu
  2011-08-11  2:19 ` Hong Xu
                   ` (3 subsequent siblings)
  8 siblings, 0 replies; 19+ messages in thread
From: Hong Xu @ 2011-08-11  2:19 UTC (permalink / raw)
  To: u-boot

Add a new file arch/arm/cpu/arm926ejs/cache.c and put cache operations
into this file.

Signed-off-by: Hong Xu <hong.xu@atmel.com>
Tested-by: Elen Song <elen.song@atmel.com>
CC: Albert Aribaud <albert.u.boot@aribaud.net>
---
 arch/arm/cpu/arm926ejs/Makefile |    2 +-
 arch/arm/cpu/arm926ejs/cache.c  |  142 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 143 insertions(+), 1 deletions(-)
 create mode 100644 arch/arm/cpu/arm926ejs/cache.c

diff --git a/arch/arm/cpu/arm926ejs/Makefile b/arch/arm/cpu/arm926ejs/Makefile
index 930e0d1..5b5f330 100644
--- a/arch/arm/cpu/arm926ejs/Makefile
+++ b/arch/arm/cpu/arm926ejs/Makefile
@@ -26,7 +26,7 @@ include $(TOPDIR)/config.mk
 LIB	= $(obj)lib$(CPU).o
 
 START	= start.o
-COBJS	= cpu.o
+COBJS	= cpu.o cache.o
 
 SRCS	:= $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS	:= $(addprefix $(obj),$(COBJS) $(SOBJS))
diff --git a/arch/arm/cpu/arm926ejs/cache.c b/arch/arm/cpu/arm926ejs/cache.c
new file mode 100644
index 0000000..99a73c6
--- /dev/null
+++ b/arch/arm/cpu/arm926ejs/cache.c
@@ -0,0 +1,142 @@
+/*
+ * (C) Copyright 2002
+ * Wolfgang Denk, DENX Software Engineering, wd at denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+
+#define FLUSH_CACHE_OP		0
+#define INVALIDATE_CACHE_OP	1
+
+#ifndef CONFIG_SYS_DCACHE_OFF
+/*
+ * Flush or Invalidate DCache respectively
+ */
+static void cache_range_op(unsigned long start, unsigned long stop, int op)
+{
+	int cache_line_len;
+	unsigned long mva;
+	char *func_name;
+
+	if (op == FLUSH_CACHE_OP)
+		func_name = "flush_dcache_range";
+	else if (op == INVALIDATE_CACHE_OP)
+		func_name = "invalidate_dcache_range";
+	else {
+		printf("WARNING: %s - Invalid cache operation!\n", __func__);
+		return;
+	}
+
+#ifdef CONFIG_SYS_CACHELINE_SIZE
+	cache_line_len = CONFIG_SYS_CACHELINE_SIZE;
+#else
+	/*
+	 * ARM926EJ-S Technical Reference Manual, Chap 2.3.1 Table 2-9
+	 * only b'10, aka. 32 bytes cache line len is valid
+	 */
+	cache_line_len = 32;
+#endif
+	mva = start;
+	if ((mva & (cache_line_len - 1)) != 0) {
+		printf("WARNING: %s - start address 0x%08x not aligned to"
+			"cache line size(%d bytes)\n", func_name, start,
+			cache_line_len);
+		/* Round up starting address */
+		mva = (mva | (cache_line_len - 1)) + 1;
+	}
+	if ((stop & (cache_line_len - 1)) != 0) {
+		printf("WARNING: %s - stop address 0x%08x not aligned to"
+			"cache line size(%d bytes)\n", func_name, stop,
+			cache_line_len);
+		/* Round down ending address */
+		stop &= ~(cache_line_len - 1);
+	}
+
+	while (mva < stop) {
+		if (op == FLUSH_CACHE_OP)
+			asm("mcr p15, 0, %0, c7, c14, 1\n" : : "r"(mva));
+		else
+			asm("mcr p15, 0, %0, c7, c6, 1\n" : : "r"(mva));
+
+		mva += cache_line_len;
+	}
+
+	/* Drain WB if necessary */
+	if (op == FLUSH_CACHE_OP)
+		asm("mcr p15, 0, %0, c7, c10, 4\n" : : "r" (0));
+}
+
+/*
+ * The buffer range to be flushed is [start, stop)
+ */
+void flush_dcache_range(unsigned long start, unsigned long stop)
+{
+	cache_range_op(start, stop, FLUSH_CACHE_OP);
+}
+
+void flush_dcache_all(void)
+{
+	/*
+	 * ARM926EJ-S Technical Reference Manual, Chap 2.3.8
+	 * Clean & Invalidate the entire DCache
+	 */
+	asm("0: mrc p15, 0, r15, c7, c14, 3\n\t" "bne 0b\n" : : : "memory");
+	/* Drain WB */
+	asm("mcr p15, 0, %0, c7, c10, 4\n" : : "r" (0));
+}
+
+void flush_cache(unsigned long start, unsigned long size)
+{
+	flush_dcache_range(start, start + size);
+}
+
+/*
+ * The buffer range to be invalidated is [start, stop)
+ */
+void invalidate_dcache_range(unsigned long start, unsigned long stop)
+{
+	cache_range_op(start, stop, INVALIDATE_CACHE_OP);
+}
+
+void invalidate_dcache_all(void)
+{
+	asm("mcr p15, 0, %0, c7, c6, 0\n" : : "r" (0));
+}
+
+#else /* #ifndef CONFIG_SYS_DCACHE_OFF */
+
+void flush_cache(unsigned long, unsigned long) {}
+void flush_dcache_all(void) {}
+void flush_dcache_range(unsigned long start, unsigned long stop) {}
+void invalidate_dcache_range(unsigned long start, unsigned long stop) {}
+void invalidate_dcache_all(void) {}
+#endif
+
+#ifndef CONFIG_SYS_ICACHE_OFF
+void invalidate_icache_all(void)
+{
+	asm("mcr p15, 0, %0, c7, c5, 0\n" : : "r" (0));
+}
+
+#else /* #ifndef CONFIG_SYS_ICACHE_OFF */
+
+void invalidate_icache_all(void) {}
+#endif
-- 
1.7.6

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

* [U-Boot] [PATCH 3/3] ARM: ARM926EJS - Add cache operations
  2011-08-11  2:19 [U-Boot] [PATCH 0/3] ARM: Clean arm/lib/cache.c, modify ARM1136 and ARM926 accordingly Hong Xu
                   ` (4 preceding siblings ...)
  2011-08-11  2:19 ` [U-Boot] [PATCH 3/3] ARM: ARM926EJS - Add cache operations Hong Xu
@ 2011-08-11  2:19 ` Hong Xu
  2011-08-11  4:35 ` [U-Boot] [PATCH 0/3] ARM: Clean arm/lib/cache.c, modify ARM1136 and ARM926 accordingly Marek Vasut
                   ` (2 subsequent siblings)
  8 siblings, 0 replies; 19+ messages in thread
From: Hong Xu @ 2011-08-11  2:19 UTC (permalink / raw)
  To: u-boot

Add a new file arch/arm/cpu/arm926ejs/cache.c and put cache operations
into this file.

Signed-off-by: Hong Xu <hong.xu@atmel.com>
Tested-by: Elen Song <elen.song@atmel.com>
CC: Albert Aribaud <albert.u.boot@aribaud.net>
CC: Aneesh V <aneesh@ti.com>
CC: Marek Vasut <marek.vasut@gmail.com>
CC: Reinhard Meyer <u-boot@emk-elektronik.de>
CC: Heiko Schocher <hs@denx.de>
---
 arch/arm/cpu/arm926ejs/Makefile |    2 +-
 arch/arm/cpu/arm926ejs/cache.c  |  142 +++++++++++++++++++++++++++++++++++++++
 2 files changed, 143 insertions(+), 1 deletions(-)
 create mode 100644 arch/arm/cpu/arm926ejs/cache.c

diff --git a/arch/arm/cpu/arm926ejs/Makefile b/arch/arm/cpu/arm926ejs/Makefile
index 930e0d1..5b5f330 100644
--- a/arch/arm/cpu/arm926ejs/Makefile
+++ b/arch/arm/cpu/arm926ejs/Makefile
@@ -26,7 +26,7 @@ include $(TOPDIR)/config.mk
 LIB	= $(obj)lib$(CPU).o
 
 START	= start.o
-COBJS	= cpu.o
+COBJS	= cpu.o cache.o
 
 SRCS	:= $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c)
 OBJS	:= $(addprefix $(obj),$(COBJS) $(SOBJS))
diff --git a/arch/arm/cpu/arm926ejs/cache.c b/arch/arm/cpu/arm926ejs/cache.c
new file mode 100644
index 0000000..99a73c6
--- /dev/null
+++ b/arch/arm/cpu/arm926ejs/cache.c
@@ -0,0 +1,142 @@
+/*
+ * (C) Copyright 2002
+ * Wolfgang Denk, DENX Software Engineering, wd at denx.de.
+ *
+ * See file CREDITS for list of people who contributed to this
+ * project.
+ *
+ * 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.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
+ * MA 02111-1307 USA
+ */
+
+#include <common.h>
+
+#define FLUSH_CACHE_OP		0
+#define INVALIDATE_CACHE_OP	1
+
+#ifndef CONFIG_SYS_DCACHE_OFF
+/*
+ * Flush or Invalidate DCache respectively
+ */
+static void cache_range_op(unsigned long start, unsigned long stop, int op)
+{
+	int cache_line_len;
+	unsigned long mva;
+	char *func_name;
+
+	if (op == FLUSH_CACHE_OP)
+		func_name = "flush_dcache_range";
+	else if (op == INVALIDATE_CACHE_OP)
+		func_name = "invalidate_dcache_range";
+	else {
+		printf("WARNING: %s - Invalid cache operation!\n", __func__);
+		return;
+	}
+
+#ifdef CONFIG_SYS_CACHELINE_SIZE
+	cache_line_len = CONFIG_SYS_CACHELINE_SIZE;
+#else
+	/*
+	 * ARM926EJ-S Technical Reference Manual, Chap 2.3.1 Table 2-9
+	 * only b'10, aka. 32 bytes cache line len is valid
+	 */
+	cache_line_len = 32;
+#endif
+	mva = start;
+	if ((mva & (cache_line_len - 1)) != 0) {
+		printf("WARNING: %s - start address 0x%08x not aligned to"
+			"cache line size(%d bytes)\n", func_name, start,
+			cache_line_len);
+		/* Round up starting address */
+		mva = (mva | (cache_line_len - 1)) + 1;
+	}
+	if ((stop & (cache_line_len - 1)) != 0) {
+		printf("WARNING: %s - stop address 0x%08x not aligned to"
+			"cache line size(%d bytes)\n", func_name, stop,
+			cache_line_len);
+		/* Round down ending address */
+		stop &= ~(cache_line_len - 1);
+	}
+
+	while (mva < stop) {
+		if (op == FLUSH_CACHE_OP)
+			asm("mcr p15, 0, %0, c7, c14, 1\n" : : "r"(mva));
+		else
+			asm("mcr p15, 0, %0, c7, c6, 1\n" : : "r"(mva));
+
+		mva += cache_line_len;
+	}
+
+	/* Drain WB if necessary */
+	if (op == FLUSH_CACHE_OP)
+		asm("mcr p15, 0, %0, c7, c10, 4\n" : : "r" (0));
+}
+
+/*
+ * The buffer range to be flushed is [start, stop)
+ */
+void flush_dcache_range(unsigned long start, unsigned long stop)
+{
+	cache_range_op(start, stop, FLUSH_CACHE_OP);
+}
+
+void flush_dcache_all(void)
+{
+	/*
+	 * ARM926EJ-S Technical Reference Manual, Chap 2.3.8
+	 * Clean & Invalidate the entire DCache
+	 */
+	asm("0: mrc p15, 0, r15, c7, c14, 3\n\t" "bne 0b\n" : : : "memory");
+	/* Drain WB */
+	asm("mcr p15, 0, %0, c7, c10, 4\n" : : "r" (0));
+}
+
+void flush_cache(unsigned long start, unsigned long size)
+{
+	flush_dcache_range(start, start + size);
+}
+
+/*
+ * The buffer range to be invalidated is [start, stop)
+ */
+void invalidate_dcache_range(unsigned long start, unsigned long stop)
+{
+	cache_range_op(start, stop, INVALIDATE_CACHE_OP);
+}
+
+void invalidate_dcache_all(void)
+{
+	asm("mcr p15, 0, %0, c7, c6, 0\n" : : "r" (0));
+}
+
+#else /* #ifndef CONFIG_SYS_DCACHE_OFF */
+
+void flush_cache(unsigned long, unsigned long) {}
+void flush_dcache_all(void) {}
+void flush_dcache_range(unsigned long start, unsigned long stop) {}
+void invalidate_dcache_range(unsigned long start, unsigned long stop) {}
+void invalidate_dcache_all(void) {}
+#endif
+
+#ifndef CONFIG_SYS_ICACHE_OFF
+void invalidate_icache_all(void)
+{
+	asm("mcr p15, 0, %0, c7, c5, 0\n" : : "r" (0));
+}
+
+#else /* #ifndef CONFIG_SYS_ICACHE_OFF */
+
+void invalidate_icache_all(void) {}
+#endif
-- 
1.7.6

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

* [U-Boot] [PATCH 0/3] ARM: Clean arm/lib/cache.c, modify ARM1136 and ARM926 accordingly
  2011-08-11  2:19 [U-Boot] [PATCH 0/3] ARM: Clean arm/lib/cache.c, modify ARM1136 and ARM926 accordingly Hong Xu
                   ` (5 preceding siblings ...)
  2011-08-11  2:19 ` Hong Xu
@ 2011-08-11  4:35 ` Marek Vasut
  2011-08-18 10:51 ` Marek Vasut
  2011-10-21 20:44 ` Marek Vasut
  8 siblings, 0 replies; 19+ messages in thread
From: Marek Vasut @ 2011-08-11  4:35 UTC (permalink / raw)
  To: u-boot

On Thursday, August 11, 2011 04:19:43 AM Hong Xu wrote:
> This series try to clean the code of arch/arm/lib/cache.c
> Move ARM1136 cache operations into cpu/arm1136/cache.c
> Add ARM926EJS cache operations into cpu/arm926ejs/cache.c
> 
> Hong Xu (3):
> 	ARM: Clean arch/arm/lib/cache.c
> 	ARM: ARM1136 - Remove flush_cache from arch/arm/lib/cache.c
> 	ARM: ARM926EJS - Add cache operations

Hong,

Thanks a lot ! Let me review now :)
> 
> arch/arm/cpu/arm1136/Makefile   |    2 +-
> arch/arm/cpu/arm1136/cache.c    |   33 +++++++++
> arch/arm/cpu/arm926ejs/Makefile |    2 +-
> arch/arm/cpu/arm926ejs/cache.c  |  142
> +++++++++++++++++++++++++++++++++++++++ arch/arm/lib/cache.c            | 
>  55 +++++++++-------
> 5 files changed, 208 insertions(+), 26 deletions(-)
> create mode 100644 arch/arm/cpu/arm1136/cache.c
> create mode 100644 arch/arm/cpu/arm926ejs/cache.c

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

* [U-Boot] [PATCH 1/3] ARM: Clean arch/arm/lib/cache.c
  2011-08-11  2:19 ` Hong Xu
@ 2011-08-11  4:38   ` Marek Vasut
  2011-08-15  7:00     ` Hong Xu
  0 siblings, 1 reply; 19+ messages in thread
From: Marek Vasut @ 2011-08-11  4:38 UTC (permalink / raw)
  To: u-boot

On Thursday, August 11, 2011 04:19:45 AM Hong Xu wrote:
> The default cache operations defined in arch/arm/lib/cache.c
> do not perform any real cache operation, and instead a WARNING
> will be emitted.
> 
> Signed-off-by: Hong Xu <hong.xu@atmel.com>
> Tested-by: Elen Song <elen.song@atmel.com>
> CC: Albert Aribaud <albert.u.boot@aribaud.net>
> CC: Aneesh V <aneesh@ti.com>
> CC: Marek Vasut <marek.vasut@gmail.com>
> CC: Reinhard Meyer <u-boot@emk-elektronik.de>
> CC: Heiko Schocher <hs@denx.de>
> ---
>  arch/arm/lib/cache.c |   55
> ++++++++++++++++++++++++++++--------------------- 1 files changed, 31
> insertions(+), 24 deletions(-)
> 
> diff --git a/arch/arm/lib/cache.c b/arch/arm/lib/cache.c
> index 92b61a2..6af05ec 100644
> --- a/arch/arm/lib/cache.c
> +++ b/arch/arm/lib/cache.c
> @@ -20,36 +20,43 @@
>   * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
>   * MA 02111-1307 USA
>   */
> +#include <linux/compiler.h>
> +#include <common.h>
> 
> -/* for now: just dummy functions to satisfy the linker */
> +#define EMIT_WARNING printf("WARNING: %s - CPU cache operation is not " \
> +"implemented!\n", __func__)

Maybe use debug() ? Or make the emission of warning conditional, somehow I have 
the feeling this will make some people unhappy.

Otherwise looks nice and clean.
> 
> -#include <common.h>
> +/*
> + * Default implementations
> + *
> + * Warn user if CPU code does not implement necessary cache functions
> + */
> +void __weak flush_cache(unsigned long start, unsigned long size)
> +{
> +	EMIT_WARNING;
> +}
> 
> -void  __flush_cache(unsigned long start, unsigned long size)
> +void __weak flush_dcache_all(void)
>  {
> -#if defined(CONFIG_OMAP2420) || defined(CONFIG_ARM1136)
> -	void arm1136_cache_flush(void);
> +	EMIT_WARNING;
> +}
> 
> -	arm1136_cache_flush();
> -#endif
> -#ifdef CONFIG_ARM926EJS
> -	/* test and clean, page 2-23 of arm926ejs manual */
> -	asm("0: mrc p15, 0, r15, c7, c10, 3\n\t" "bne 0b\n" : : : "memory");
> -	/* disable write buffer as well (page 2-22) */
> -	asm("mcr p15, 0, %0, c7, c10, 4" : : "r" (0));
> -#endif
> -	return;
> +void __weak flush_dcache_range(unsigned long start, unsigned long stop)
> +{
> +	EMIT_WARNING;
>  }
> -void  flush_cache(unsigned long start, unsigned long size)
> -	__attribute__((weak, alias("__flush_cache")));
> 
> -/*
> - * Default implementation:
> - * do a range flush for the entire range
> - */
> -void	__flush_dcache_all(void)
> +void __weak invalidate_dcache_range(unsigned long start, unsigned long
> stop) +{
> +	EMIT_WARNING;
> +}
> +
> +void __weak invalidate_dcache_all(void)
> +{
> +	EMIT_WARNING;
> +}
> +
> +void __weak invalidate_icache_all(void)
>  {
> -	flush_cache(0, ~0);
> +	EMIT_WARNING;
>  }
> -void	flush_dcache_all(void)
> -	__attribute__((weak, alias("__flush_dcache_all")));

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

* [U-Boot] [PATCH 2/3] ARM: ARM1136 - Remove flush_cache from arch/arm/lib/cache.c
  2011-08-11  2:19 ` Hong Xu
@ 2011-08-11  4:40   ` Marek Vasut
  2011-08-15  7:04     ` Hong Xu
  2011-10-06 22:00   ` Wolfgang Denk
  1 sibling, 1 reply; 19+ messages in thread
From: Marek Vasut @ 2011-08-11  4:40 UTC (permalink / raw)
  To: u-boot

On Thursday, August 11, 2011 04:19:47 AM Hong Xu wrote:
> arch/arm/lib/cache.c is cleaned and no real cache operation will be
> defined in this file. So a new file arch/arm/cpu/arm1136/cache.c is
> created. This file will define the real cache operations.
> 
> Signed-off-by: Hong Xu <hong.xu@atmel.com>
> Tested-by: Elen Song <elen.song@atmel.com>
> CC: Albert Aribaud <albert.u.boot@aribaud.net>
> CC: Aneesh V <aneesh@ti.com>
> CC: Marek Vasut <marek.vasut@gmail.com>
> CC: Reinhard Meyer <u-boot@emk-elektronik.de>
> CC: Heiko Schocher <hs@denx.de>
> ---
>  arch/arm/cpu/arm1136/Makefile |    2 +-
>  arch/arm/cpu/arm1136/cache.c  |   33 +++++++++++++++++++++++++++++++++
>  2 files changed, 34 insertions(+), 1 deletions(-)
>  create mode 100644 arch/arm/cpu/arm1136/cache.c
> 
> diff --git a/arch/arm/cpu/arm1136/Makefile b/arch/arm/cpu/arm1136/Makefile
> index 930e0d1..5b5f330 100644
> --- a/arch/arm/cpu/arm1136/Makefile
> +++ b/arch/arm/cpu/arm1136/Makefile
> @@ -26,7 +26,7 @@ include $(TOPDIR)/config.mk
>  LIB	= $(obj)lib$(CPU).o
> 
>  START	= start.o
> -COBJS	= cpu.o
> +COBJS	= cpu.o cache.o
> 
>  SRCS	:= $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c)
>  OBJS	:= $(addprefix $(obj),$(COBJS) $(SOBJS))
> diff --git a/arch/arm/cpu/arm1136/cache.c b/arch/arm/cpu/arm1136/cache.c
> new file mode 100644
> index 0000000..02aa266
> --- /dev/null
> +++ b/arch/arm/cpu/arm1136/cache.c
> @@ -0,0 +1,33 @@
> +/*
> + * (C) Copyright 2002
> + * Wolfgang Denk, DENX Software Engineering, wd at denx.de.

Really ?

> + *
> + * See file CREDITS for list of people who contributed to this
> + * project.
> + *
> + * 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.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program; if not, write to the Free Software
> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> + * MA 02111-1307 USA
> + */
> +
> +#include <common.h>
> +
> +void flush_cache(unsigned long start, unsigned long size)
> +{
> +#if defined(CONFIG_OMAP2420) || defined(CONFIG_ARM1136)

Hm, this is in cpu/arm1136/cache.c ... do we need the macro ?

You can test if this breaks anything by MAKEALL script in uboot tree.

> +	void arm1136_cache_flush(void);
> +
> +	arm1136_cache_flush();
> +#endif
> +}

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

* [U-Boot] [PATCH 1/3] ARM: Clean arch/arm/lib/cache.c
  2011-08-11  4:38   ` Marek Vasut
@ 2011-08-15  7:00     ` Hong Xu
  2011-08-15  8:08       ` Marek Vasut
  0 siblings, 1 reply; 19+ messages in thread
From: Hong Xu @ 2011-08-15  7:00 UTC (permalink / raw)
  To: u-boot

Hi Marek,

On 08/11/2011 12:38 PM, Marek Vasut wrote:
> On Thursday, August 11, 2011 04:19:45 AM Hong Xu wrote:
>> The default cache operations defined in arch/arm/lib/cache.c
>> do not perform any real cache operation, and instead a WARNING
>> will be emitted.
>>
>> Signed-off-by: Hong Xu<hong.xu@atmel.com>
>> Tested-by: Elen Song<elen.song@atmel.com>
>> CC: Albert Aribaud<albert.u.boot@aribaud.net>
>> CC: Aneesh V<aneesh@ti.com>
>> CC: Marek Vasut<marek.vasut@gmail.com>
>> CC: Reinhard Meyer<u-boot@emk-elektronik.de>
>> CC: Heiko Schocher<hs@denx.de>
>> ---
>>   arch/arm/lib/cache.c |   55
>> ++++++++++++++++++++++++++++--------------------- 1 files changed, 31
>> insertions(+), 24 deletions(-)
>>
>> diff --git a/arch/arm/lib/cache.c b/arch/arm/lib/cache.c
>> index 92b61a2..6af05ec 100644
>> --- a/arch/arm/lib/cache.c
>> +++ b/arch/arm/lib/cache.c
>> @@ -20,36 +20,43 @@
>>    * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
>>    * MA 02111-1307 USA
>>    */
>> +#include<linux/compiler.h>
>> +#include<common.h>
>>
>> -/* for now: just dummy functions to satisfy the linker */
>> +#define EMIT_WARNING printf("WARNING: %s - CPU cache operation is not " \
>> +"implemented!\n", __func__)
>
> Maybe use debug() ? Or make the emission of warning conditional, somehow I have
> the feeling this will make some people unhappy.

Just my feelings: It's noisy but it'll give strong message to the user 
even if the DEBUG is not opened :-)

BR,
Eric

> Otherwise looks nice and clean.
>>
>> -#include<common.h>
>> +/*

[...]

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

* [U-Boot] [PATCH 2/3] ARM: ARM1136 - Remove flush_cache from arch/arm/lib/cache.c
  2011-08-11  4:40   ` Marek Vasut
@ 2011-08-15  7:04     ` Hong Xu
  2011-08-15  8:09       ` Marek Vasut
  0 siblings, 1 reply; 19+ messages in thread
From: Hong Xu @ 2011-08-15  7:04 UTC (permalink / raw)
  To: u-boot

On 08/11/2011 12:40 PM, Marek Vasut wrote:
> On Thursday, August 11, 2011 04:19:47 AM Hong Xu wrote:
>> arch/arm/lib/cache.c is cleaned and no real cache operation will be
>> defined in this file. So a new file arch/arm/cpu/arm1136/cache.c is
>> created. This file will define the real cache operations.
>>
>> Signed-off-by: Hong Xu<hong.xu@atmel.com>
>> Tested-by: Elen Song<elen.song@atmel.com>
>> CC: Albert Aribaud<albert.u.boot@aribaud.net>
>> CC: Aneesh V<aneesh@ti.com>
>> CC: Marek Vasut<marek.vasut@gmail.com>
>> CC: Reinhard Meyer<u-boot@emk-elektronik.de>
>> CC: Heiko Schocher<hs@denx.de>
>> ---
>>   arch/arm/cpu/arm1136/Makefile |    2 +-
>>   arch/arm/cpu/arm1136/cache.c  |   33 +++++++++++++++++++++++++++++++++
>>   2 files changed, 34 insertions(+), 1 deletions(-)
>>   create mode 100644 arch/arm/cpu/arm1136/cache.c
>>
>> diff --git a/arch/arm/cpu/arm1136/Makefile b/arch/arm/cpu/arm1136/Makefile
>> index 930e0d1..5b5f330 100644
>> --- a/arch/arm/cpu/arm1136/Makefile
>> +++ b/arch/arm/cpu/arm1136/Makefile
>> @@ -26,7 +26,7 @@ include $(TOPDIR)/config.mk
>>   LIB	= $(obj)lib$(CPU).o
>>
>>   START	= start.o
>> -COBJS	= cpu.o
>> +COBJS	= cpu.o cache.o
>>
>>   SRCS	:= $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c)
>>   OBJS	:= $(addprefix $(obj),$(COBJS) $(SOBJS))
>> diff --git a/arch/arm/cpu/arm1136/cache.c b/arch/arm/cpu/arm1136/cache.c
>> new file mode 100644
>> index 0000000..02aa266
>> --- /dev/null
>> +++ b/arch/arm/cpu/arm1136/cache.c
>> @@ -0,0 +1,33 @@
>> +/*
>> + * (C) Copyright 2002
>> + * Wolfgang Denk, DENX Software Engineering, wd at denx.de.
>
> Really ?

not sure...
Maybe add a copyright line on top of it?
>
>> + *
>> + * See file CREDITS for list of people who contributed to this
>> + * project.
>> + *
>> + * 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.
>> + *
>> + * This program is distributed in the hope that it will be useful,
>> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
>> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
>> + * GNU General Public License for more details.
>> + *
>> + * You should have received a copy of the GNU General Public License
>> + * along with this program; if not, write to the Free Software
>> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
>> + * MA 02111-1307 USA
>> + */
>> +
>> +#include<common.h>
>> +
>> +void flush_cache(unsigned long start, unsigned long size)
>> +{
>> +#if defined(CONFIG_OMAP2420) || defined(CONFIG_ARM1136)
>
> Hm, this is in cpu/arm1136/cache.c ... do we need the macro ?
>
> You can test if this breaks anything by MAKEALL script in uboot tree.

Thanks, I'll have a close look at it.

BR,
Eric

>> +	void arm1136_cache_flush(void);
>> +
>> +	arm1136_cache_flush();
>> +#endif
>> +}

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

* [U-Boot] [PATCH 1/3] ARM: Clean arch/arm/lib/cache.c
  2011-08-15  7:00     ` Hong Xu
@ 2011-08-15  8:08       ` Marek Vasut
  0 siblings, 0 replies; 19+ messages in thread
From: Marek Vasut @ 2011-08-15  8:08 UTC (permalink / raw)
  To: u-boot

On Monday, August 15, 2011 09:00:59 AM Hong Xu wrote:
> Hi Marek,
> 
> On 08/11/2011 12:38 PM, Marek Vasut wrote:
> > On Thursday, August 11, 2011 04:19:45 AM Hong Xu wrote:
> >> The default cache operations defined in arch/arm/lib/cache.c
> >> do not perform any real cache operation, and instead a WARNING
> >> will be emitted.
> >> 
> >> Signed-off-by: Hong Xu<hong.xu@atmel.com>
> >> Tested-by: Elen Song<elen.song@atmel.com>
> >> CC: Albert Aribaud<albert.u.boot@aribaud.net>
> >> CC: Aneesh V<aneesh@ti.com>
> >> CC: Marek Vasut<marek.vasut@gmail.com>
> >> CC: Reinhard Meyer<u-boot@emk-elektronik.de>
> >> CC: Heiko Schocher<hs@denx.de>
> >> ---
> >> 
> >>   arch/arm/lib/cache.c |   55
> >> 
> >> ++++++++++++++++++++++++++++--------------------- 1 files changed, 31
> >> insertions(+), 24 deletions(-)
> >> 
> >> diff --git a/arch/arm/lib/cache.c b/arch/arm/lib/cache.c
> >> index 92b61a2..6af05ec 100644
> >> --- a/arch/arm/lib/cache.c
> >> +++ b/arch/arm/lib/cache.c
> >> @@ -20,36 +20,43 @@
> >> 
> >>    * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> >>    * MA 02111-1307 USA
> >>    */
> >> 
> >> +#include<linux/compiler.h>
> >> +#include<common.h>
> >> 
> >> -/* for now: just dummy functions to satisfy the linker */
> >> +#define EMIT_WARNING printf("WARNING: %s - CPU cache operation is not "
> >> \ +"implemented!\n", __func__)
> > 
> > Maybe use debug() ? Or make the emission of warning conditional, somehow
> > I have the feeling this will make some people unhappy.
> 
> Just my feelings: It's noisy but it'll give strong message to the user
> even if the DEBUG is not opened :-)

That's not my point, it'll likely become noisy on many boards where cache 
flushing/invalidating isn't necessary and where is wasn't noisy before and noone 
cared for it not being implemented.

I'd prefer to see other people thoughts on this.

Cheers
> 
> BR,
> Eric
> 
> > Otherwise looks nice and clean.
> > 
> >> -#include<common.h>
> >> +/*
> 
> [...]

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

* [U-Boot] [PATCH 2/3] ARM: ARM1136 - Remove flush_cache from arch/arm/lib/cache.c
  2011-08-15  7:04     ` Hong Xu
@ 2011-08-15  8:09       ` Marek Vasut
  0 siblings, 0 replies; 19+ messages in thread
From: Marek Vasut @ 2011-08-15  8:09 UTC (permalink / raw)
  To: u-boot

On Monday, August 15, 2011 09:04:40 AM Hong Xu wrote:
> On 08/11/2011 12:40 PM, Marek Vasut wrote:
> > On Thursday, August 11, 2011 04:19:47 AM Hong Xu wrote:
> >> arch/arm/lib/cache.c is cleaned and no real cache operation will be
> >> defined in this file. So a new file arch/arm/cpu/arm1136/cache.c is
> >> created. This file will define the real cache operations.
> >> 
> >> Signed-off-by: Hong Xu<hong.xu@atmel.com>
> >> Tested-by: Elen Song<elen.song@atmel.com>
> >> CC: Albert Aribaud<albert.u.boot@aribaud.net>
> >> CC: Aneesh V<aneesh@ti.com>
> >> CC: Marek Vasut<marek.vasut@gmail.com>
> >> CC: Reinhard Meyer<u-boot@emk-elektronik.de>
> >> CC: Heiko Schocher<hs@denx.de>
> >> ---
> >> 
> >>   arch/arm/cpu/arm1136/Makefile |    2 +-
> >>   arch/arm/cpu/arm1136/cache.c  |   33 +++++++++++++++++++++++++++++++++
> >>   2 files changed, 34 insertions(+), 1 deletions(-)
> >>   create mode 100644 arch/arm/cpu/arm1136/cache.c
> >> 
> >> diff --git a/arch/arm/cpu/arm1136/Makefile
> >> b/arch/arm/cpu/arm1136/Makefile index 930e0d1..5b5f330 100644
> >> --- a/arch/arm/cpu/arm1136/Makefile
> >> +++ b/arch/arm/cpu/arm1136/Makefile
> >> @@ -26,7 +26,7 @@ include $(TOPDIR)/config.mk
> >> 
> >>   LIB	= $(obj)lib$(CPU).o
> >>   
> >>   START	= start.o
> >> 
> >> -COBJS	= cpu.o
> >> +COBJS	= cpu.o cache.o
> >> 
> >>   SRCS	:= $(START:.o=.S) $(SOBJS:.o=.S) $(COBJS:.o=.c)
> >>   OBJS	:= $(addprefix $(obj),$(COBJS) $(SOBJS))
> >> 
> >> diff --git a/arch/arm/cpu/arm1136/cache.c b/arch/arm/cpu/arm1136/cache.c
> >> new file mode 100644
> >> index 0000000..02aa266
> >> --- /dev/null
> >> +++ b/arch/arm/cpu/arm1136/cache.c
> >> @@ -0,0 +1,33 @@
> >> +/*
> >> + * (C) Copyright 2002
> >> + * Wolfgang Denk, DENX Software Engineering, wd at denx.de.
> > 
> > Really ?
> 
> not sure...
> Maybe add a copyright line on top of it?

I guess replacing it altogether would be a way to go. It's your code afterall, 
right?

> 
> >> + *
> >> + * See file CREDITS for list of people who contributed to this
> >> + * project.
> >> + *
> >> + * 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.
> >> + *
> >> + * This program is distributed in the hope that it will be useful,
> >> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> >> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> >> + * GNU General Public License for more details.
> >> + *
> >> + * You should have received a copy of the GNU General Public License
> >> + * along with this program; if not, write to the Free Software
> >> + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
> >> + * MA 02111-1307 USA
> >> + */
> >> +
> >> +#include<common.h>
> >> +
> >> +void flush_cache(unsigned long start, unsigned long size)
> >> +{
> >> +#if defined(CONFIG_OMAP2420) || defined(CONFIG_ARM1136)
> > 
> > Hm, this is in cpu/arm1136/cache.c ... do we need the macro ?
> > 
> > You can test if this breaks anything by MAKEALL script in uboot tree.
> 
> Thanks, I'll have a close look at it.

Thanks :)

> 
> BR,
> Eric
> 
> >> +	void arm1136_cache_flush(void);
> >> +
> >> +	arm1136_cache_flush();
> >> +#endif
> >> +}

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

* [U-Boot] [PATCH 0/3] ARM: Clean arm/lib/cache.c, modify ARM1136 and ARM926 accordingly
  2011-08-11  2:19 [U-Boot] [PATCH 0/3] ARM: Clean arm/lib/cache.c, modify ARM1136 and ARM926 accordingly Hong Xu
                   ` (6 preceding siblings ...)
  2011-08-11  4:35 ` [U-Boot] [PATCH 0/3] ARM: Clean arm/lib/cache.c, modify ARM1136 and ARM926 accordingly Marek Vasut
@ 2011-08-18 10:51 ` Marek Vasut
  2011-08-19  8:39   ` Hong Xu
  2011-10-21 20:44 ` Marek Vasut
  8 siblings, 1 reply; 19+ messages in thread
From: Marek Vasut @ 2011-08-18 10:51 UTC (permalink / raw)
  To: u-boot

On Thursday, August 11, 2011 04:19:43 AM Hong Xu wrote:
> This series try to clean the code of arch/arm/lib/cache.c
> Move ARM1136 cache operations into cpu/arm1136/cache.c
> Add ARM926EJS cache operations into cpu/arm926ejs/cache.c

Hi,

any updates?

Thanks, cheers!

> 
> Hong Xu (3):
> 	ARM: Clean arch/arm/lib/cache.c
> 	ARM: ARM1136 - Remove flush_cache from arch/arm/lib/cache.c
> 	ARM: ARM926EJS - Add cache operations
> 
> arch/arm/cpu/arm1136/Makefile   |    2 +-
> arch/arm/cpu/arm1136/cache.c    |   33 +++++++++
> arch/arm/cpu/arm926ejs/Makefile |    2 +-
> arch/arm/cpu/arm926ejs/cache.c  |  142
> +++++++++++++++++++++++++++++++++++++++ arch/arm/lib/cache.c            | 
>  55 +++++++++-------
> 5 files changed, 208 insertions(+), 26 deletions(-)
> create mode 100644 arch/arm/cpu/arm1136/cache.c
> create mode 100644 arch/arm/cpu/arm926ejs/cache.c

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

* [U-Boot] [PATCH 0/3] ARM: Clean arm/lib/cache.c, modify ARM1136 and ARM926 accordingly
  2011-08-18 10:51 ` Marek Vasut
@ 2011-08-19  8:39   ` Hong Xu
  2011-08-19  9:33     ` Marek Vasut
  0 siblings, 1 reply; 19+ messages in thread
From: Hong Xu @ 2011-08-19  8:39 UTC (permalink / raw)
  To: u-boot

Hi Marek,

On 08/18/2011 06:51 PM, Marek Vasut wrote:
> On Thursday, August 11, 2011 04:19:43 AM Hong Xu wrote:
>> This series try to clean the code of arch/arm/lib/cache.c
>> Move ARM1136 cache operations into cpu/arm1136/cache.c
>> Add ARM926EJS cache operations into cpu/arm926ejs/cache.c
>
> Hi,
>
> any updates?

Quite busy in the passed days ;-)
And just turned back. V2 patches are on the way

BR,
Eric
>
> Thanks, cheers!
>
>>
>> Hong Xu (3):
>> 	ARM: Clean arch/arm/lib/cache.c
>> 	ARM: ARM1136 - Remove flush_cache from arch/arm/lib/cache.c
>> 	ARM: ARM926EJS - Add cache operations
>>
>> arch/arm/cpu/arm1136/Makefile   |    2 +-
>> arch/arm/cpu/arm1136/cache.c    |   33 +++++++++
>> arch/arm/cpu/arm926ejs/Makefile |    2 +-
>> arch/arm/cpu/arm926ejs/cache.c  |  142
>> +++++++++++++++++++++++++++++++++++++++ arch/arm/lib/cache.c            |
>>   55 +++++++++-------
>> 5 files changed, 208 insertions(+), 26 deletions(-)
>> create mode 100644 arch/arm/cpu/arm1136/cache.c
>> create mode 100644 arch/arm/cpu/arm926ejs/cache.c

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

* [U-Boot] [PATCH 0/3] ARM: Clean arm/lib/cache.c, modify ARM1136 and ARM926 accordingly
  2011-08-19  8:39   ` Hong Xu
@ 2011-08-19  9:33     ` Marek Vasut
  0 siblings, 0 replies; 19+ messages in thread
From: Marek Vasut @ 2011-08-19  9:33 UTC (permalink / raw)
  To: u-boot

On Friday, August 19, 2011 10:39:14 AM Hong Xu wrote:
> Hi Marek,
> 
> On 08/18/2011 06:51 PM, Marek Vasut wrote:
> > On Thursday, August 11, 2011 04:19:43 AM Hong Xu wrote:
> >> This series try to clean the code of arch/arm/lib/cache.c
> >> Move ARM1136 cache operations into cpu/arm1136/cache.c
> >> Add ARM926EJS cache operations into cpu/arm926ejs/cache.c
> > 
> > Hi,
> > 
> > any updates?
> 
> Quite busy in the passed days ;-)
> And just turned back. V2 patches are on the way

Hi, I just tested your patches yesterday and they seem to work. Just those two 
compile issues, but you're doing great ;-)
> 
> BR,
> Eric
> 
> > Thanks, cheers!

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

* [U-Boot] [PATCH 2/3] ARM: ARM1136 - Remove flush_cache from arch/arm/lib/cache.c
  2011-08-11  2:19 ` Hong Xu
  2011-08-11  4:40   ` Marek Vasut
@ 2011-10-06 22:00   ` Wolfgang Denk
  1 sibling, 0 replies; 19+ messages in thread
From: Wolfgang Denk @ 2011-10-06 22:00 UTC (permalink / raw)
  To: u-boot

Dear Hong Xu,

In message <1313029189-18536-5-git-send-email-hong.xu@atmel.com> you wrote:
> arch/arm/lib/cache.c is cleaned and no real cache operation will be
> defined in this file. So a new file arch/arm/cpu/arm1136/cache.c is
> created. This file will define the real cache operations.
> 
> Signed-off-by: Hong Xu <hong.xu@atmel.com>
> Tested-by: Elen Song <elen.song@atmel.com>
> CC: Albert Aribaud <albert.u.boot@aribaud.net>
> CC: Aneesh V <aneesh@ti.com>
> CC: Marek Vasut <marek.vasut@gmail.com>
> CC: Reinhard Meyer <u-boot@emk-elektronik.de>
> CC: Heiko Schocher <hs@denx.de>
> ---
>  arch/arm/cpu/arm1136/Makefile |    2 +-
>  arch/arm/cpu/arm1136/cache.c  |   33 +++++++++++++++++++++++++++++++++
>  2 files changed, 34 insertions(+), 1 deletions(-)
>  create mode 100644 arch/arm/cpu/arm1136/cache.c

Checkpatch says:

WARNING: externs should be avoided in .c files
#143: FILE: arch/arm/cpu/arm1136/cache.c:29:
+       void arm1136_cache_flush(void);

Please clean up and resubmit.  Thanks.

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Time is fluid ... like a river with currents, eddies, backwash.
	-- Spock, "The City on the Edge of Forever", stardate 3134.0

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

* [U-Boot] [PATCH 0/3] ARM: Clean arm/lib/cache.c, modify ARM1136 and ARM926 accordingly
  2011-08-11  2:19 [U-Boot] [PATCH 0/3] ARM: Clean arm/lib/cache.c, modify ARM1136 and ARM926 accordingly Hong Xu
                   ` (7 preceding siblings ...)
  2011-08-18 10:51 ` Marek Vasut
@ 2011-10-21 20:44 ` Marek Vasut
  8 siblings, 0 replies; 19+ messages in thread
From: Marek Vasut @ 2011-10-21 20:44 UTC (permalink / raw)
  To: u-boot

On Thursday, August 11, 2011 04:19:43 AM Hong Xu wrote:
> This series try to clean the code of arch/arm/lib/cache.c
> Move ARM1136 cache operations into cpu/arm1136/cache.c
> Add ARM926EJS cache operations into cpu/arm926ejs/cache.c
> 
> Hong Xu (3):
> 	ARM: Clean arch/arm/lib/cache.c
> 	ARM: ARM1136 - Remove flush_cache from arch/arm/lib/cache.c
> 	ARM: ARM926EJS - Add cache operations
> 
> arch/arm/cpu/arm1136/Makefile   |    2 +-
> arch/arm/cpu/arm1136/cache.c    |   33 +++++++++
> arch/arm/cpu/arm926ejs/Makefile |    2 +-
> arch/arm/cpu/arm926ejs/cache.c  |  142
> +++++++++++++++++++++++++++++++++++++++ arch/arm/lib/cache.c            | 
>  55 +++++++++-------
> 5 files changed, 208 insertions(+), 26 deletions(-)
> create mode 100644 arch/arm/cpu/arm1136/cache.c
> create mode 100644 arch/arm/cpu/arm926ejs/cache.c

Hi Hong,

any updates on thius please?

Cheers

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

end of thread, other threads:[~2011-10-21 20:44 UTC | newest]

Thread overview: 19+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-08-11  2:19 [U-Boot] [PATCH 0/3] ARM: Clean arm/lib/cache.c, modify ARM1136 and ARM926 accordingly Hong Xu
2011-08-11  2:19 ` [U-Boot] [PATCH 1/3] ARM: Clean arch/arm/lib/cache.c Hong Xu
2011-08-11  2:19 ` Hong Xu
2011-08-11  4:38   ` Marek Vasut
2011-08-15  7:00     ` Hong Xu
2011-08-15  8:08       ` Marek Vasut
2011-08-11  2:19 ` [U-Boot] [PATCH 2/3] ARM: ARM1136 - Remove flush_cache from arch/arm/lib/cache.c Hong Xu
2011-08-11  2:19 ` Hong Xu
2011-08-11  4:40   ` Marek Vasut
2011-08-15  7:04     ` Hong Xu
2011-08-15  8:09       ` Marek Vasut
2011-10-06 22:00   ` Wolfgang Denk
2011-08-11  2:19 ` [U-Boot] [PATCH 3/3] ARM: ARM926EJS - Add cache operations Hong Xu
2011-08-11  2:19 ` Hong Xu
2011-08-11  4:35 ` [U-Boot] [PATCH 0/3] ARM: Clean arm/lib/cache.c, modify ARM1136 and ARM926 accordingly Marek Vasut
2011-08-18 10:51 ` Marek Vasut
2011-08-19  8:39   ` Hong Xu
2011-08-19  9:33     ` Marek Vasut
2011-10-21 20:44 ` Marek Vasut

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.