linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2 0/5] Fix 740t support and remove more unused ARMv3 code
@ 2013-03-25 18:17 Will Deacon
  2013-03-25 18:17 ` [PATCH v2 1/5] ARM: tlbflush: remove ARMv3 support Will Deacon
                   ` (4 more replies)
  0 siblings, 5 replies; 8+ messages in thread
From: Will Deacon @ 2013-03-25 18:17 UTC (permalink / raw)
  To: linux-arm-kernel

Hello,

This is a rebased version of the patches I originally posted here:

  http://lists.infradead.org/pipermail/linux-arm-kernel/2013-January/146095.html

The only changes are that it is now based on 3.9-rc4 and the final patch
has been dropped, having been merged via arm-soc.

I plan to send this via Russell for 3.10.

Cheers,

Will


Will Deacon (5):
  ARM: tlbflush: remove ARMv3 support
  ARM: cache: remove ARMv3 support code
  ARM: mm: fix numerous hideous errors in proc-arm740.S
  ARM: mm: remove broken condition check for v4 flushing
  ARM: modules: don't export cpu_set_pte_ext when !MMU

 arch/arm/include/asm/glue-cache.h |   8 ---
 arch/arm/include/asm/tlbflush.h   |  11 +--
 arch/arm/mm/Kconfig               |   5 +-
 arch/arm/mm/Makefile              |   1 -
 arch/arm/mm/cache-v3.S            | 137 --------------------------------------
 arch/arm/mm/cache-v4.S            |   2 +-
 arch/arm/mm/proc-arm740.S         |  30 +++++----
 arch/arm/mm/proc-syms.c           |   2 +
 8 files changed, 23 insertions(+), 173 deletions(-)
 delete mode 100644 arch/arm/mm/cache-v3.S

-- 
1.8.0

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

* [PATCH v2 1/5] ARM: tlbflush: remove ARMv3 support
  2013-03-25 18:17 [PATCH v2 0/5] Fix 740t support and remove more unused ARMv3 code Will Deacon
@ 2013-03-25 18:17 ` Will Deacon
  2013-03-25 18:17 ` [PATCH v2 2/5] ARM: cache: remove ARMv3 support code Will Deacon
                   ` (3 subsequent siblings)
  4 siblings, 0 replies; 8+ messages in thread
From: Will Deacon @ 2013-03-25 18:17 UTC (permalink / raw)
  To: linux-arm-kernel

We no longer support any ARMv3 platforms, so remove the old tlbflushing
code.

Signed-off-by: Will Deacon <will.deacon@arm.com>
---
 arch/arm/include/asm/tlbflush.h | 11 ++---------
 1 file changed, 2 insertions(+), 9 deletions(-)

diff --git a/arch/arm/include/asm/tlbflush.h b/arch/arm/include/asm/tlbflush.h
index 4db8c88..a223003 100644
--- a/arch/arm/include/asm/tlbflush.h
+++ b/arch/arm/include/asm/tlbflush.h
@@ -14,7 +14,6 @@
 
 #include <asm/glue.h>
 
-#define TLB_V3_PAGE	(1 << 0)
 #define TLB_V4_U_PAGE	(1 << 1)
 #define TLB_V4_D_PAGE	(1 << 2)
 #define TLB_V4_I_PAGE	(1 << 3)
@@ -22,7 +21,6 @@
 #define TLB_V6_D_PAGE	(1 << 5)
 #define TLB_V6_I_PAGE	(1 << 6)
 
-#define TLB_V3_FULL	(1 << 8)
 #define TLB_V4_U_FULL	(1 << 9)
 #define TLB_V4_D_FULL	(1 << 10)
 #define TLB_V4_I_FULL	(1 << 11)
@@ -52,7 +50,6 @@
  *	=============
  *
  *	We have the following to choose from:
- *	  v3    - ARMv3
  *	  v4    - ARMv4 without write buffer
  *	  v4wb  - ARMv4 with write buffer without I TLB flush entry instruction
  *	  v4wbi - ARMv4 with write buffer with I TLB flush entry instruction
@@ -330,7 +327,6 @@ static inline void local_flush_tlb_all(void)
 	if (tlb_flag(TLB_WB))
 		dsb();
 
-	tlb_op(TLB_V3_FULL, "c6, c0, 0", zero);
 	tlb_op(TLB_V4_U_FULL | TLB_V6_U_FULL, "c8, c7, 0", zero);
 	tlb_op(TLB_V4_D_FULL | TLB_V6_D_FULL, "c8, c6, 0", zero);
 	tlb_op(TLB_V4_I_FULL | TLB_V6_I_FULL, "c8, c5, 0", zero);
@@ -351,9 +347,8 @@ static inline void local_flush_tlb_mm(struct mm_struct *mm)
 	if (tlb_flag(TLB_WB))
 		dsb();
 
-	if (possible_tlb_flags & (TLB_V3_FULL|TLB_V4_U_FULL|TLB_V4_D_FULL|TLB_V4_I_FULL)) {
+	if (possible_tlb_flags & (TLB_V4_U_FULL|TLB_V4_D_FULL|TLB_V4_I_FULL)) {
 		if (cpumask_test_cpu(get_cpu(), mm_cpumask(mm))) {
-			tlb_op(TLB_V3_FULL, "c6, c0, 0", zero);
 			tlb_op(TLB_V4_U_FULL, "c8, c7, 0", zero);
 			tlb_op(TLB_V4_D_FULL, "c8, c6, 0", zero);
 			tlb_op(TLB_V4_I_FULL, "c8, c5, 0", zero);
@@ -385,9 +380,8 @@ local_flush_tlb_page(struct vm_area_struct *vma, unsigned long uaddr)
 	if (tlb_flag(TLB_WB))
 		dsb();
 
-	if (possible_tlb_flags & (TLB_V3_PAGE|TLB_V4_U_PAGE|TLB_V4_D_PAGE|TLB_V4_I_PAGE|TLB_V4_I_FULL) &&
+	if (possible_tlb_flags & (TLB_V4_U_PAGE|TLB_V4_D_PAGE|TLB_V4_I_PAGE|TLB_V4_I_FULL) &&
 	    cpumask_test_cpu(smp_processor_id(), mm_cpumask(vma->vm_mm))) {
-		tlb_op(TLB_V3_PAGE, "c6, c0, 0", uaddr);
 		tlb_op(TLB_V4_U_PAGE, "c8, c7, 1", uaddr);
 		tlb_op(TLB_V4_D_PAGE, "c8, c6, 1", uaddr);
 		tlb_op(TLB_V4_I_PAGE, "c8, c5, 1", uaddr);
@@ -418,7 +412,6 @@ static inline void local_flush_tlb_kernel_page(unsigned long kaddr)
 	if (tlb_flag(TLB_WB))
 		dsb();
 
-	tlb_op(TLB_V3_PAGE, "c6, c0, 0", kaddr);
 	tlb_op(TLB_V4_U_PAGE, "c8, c7, 1", kaddr);
 	tlb_op(TLB_V4_D_PAGE, "c8, c6, 1", kaddr);
 	tlb_op(TLB_V4_I_PAGE, "c8, c5, 1", kaddr);
-- 
1.8.0

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

* [PATCH v2 2/5] ARM: cache: remove ARMv3 support code
  2013-03-25 18:17 [PATCH v2 0/5] Fix 740t support and remove more unused ARMv3 code Will Deacon
  2013-03-25 18:17 ` [PATCH v2 1/5] ARM: tlbflush: remove ARMv3 support Will Deacon
@ 2013-03-25 18:17 ` Will Deacon
  2013-03-26  1:57   ` Greg Ungerer
  2013-03-25 18:17 ` [PATCH v2 3/5] ARM: mm: fix numerous hideous errors in proc-arm740.S Will Deacon
                   ` (2 subsequent siblings)
  4 siblings, 1 reply; 8+ messages in thread
From: Will Deacon @ 2013-03-25 18:17 UTC (permalink / raw)
  To: linux-arm-kernel

This is only used by 740t, which is a v4 core and (by my reading of the
datasheet for the CPU) ignores CRm for the cp15 cache flush operation,
making the v4 cache implementation in cache-v4.S sufficient for this
CPU.

Tested with 740T core-tile on Integrator/AP baseboard.

Cc: Hyok S. Choi <hyok.choi@samsung.com>
Cc: Greg Ungerer <gerg@uclinux.org>
Signed-off-by: Will Deacon <will.deacon@arm.com>
---
 arch/arm/include/asm/glue-cache.h |   8 ---
 arch/arm/mm/Kconfig               |   5 +-
 arch/arm/mm/Makefile              |   1 -
 arch/arm/mm/cache-v3.S            | 137 --------------------------------------
 arch/arm/mm/proc-arm740.S         |   2 +-
 5 files changed, 2 insertions(+), 151 deletions(-)
 delete mode 100644 arch/arm/mm/cache-v3.S

diff --git a/arch/arm/include/asm/glue-cache.h b/arch/arm/include/asm/glue-cache.h
index cca9f15..ea289e1 100644
--- a/arch/arm/include/asm/glue-cache.h
+++ b/arch/arm/include/asm/glue-cache.h
@@ -19,14 +19,6 @@
 #undef _CACHE
 #undef MULTI_CACHE
 
-#if defined(CONFIG_CPU_CACHE_V3)
-# ifdef _CACHE
-#  define MULTI_CACHE 1
-# else
-#  define _CACHE v3
-# endif
-#endif
-
 #if defined(CONFIG_CPU_CACHE_V4)
 # ifdef _CACHE
 #  define MULTI_CACHE 1
diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig
index 025d173..4045c49 100644
--- a/arch/arm/mm/Kconfig
+++ b/arch/arm/mm/Kconfig
@@ -43,7 +43,7 @@ config CPU_ARM740T
 	depends on !MMU
 	select CPU_32v4T
 	select CPU_ABRT_LV4T
-	select CPU_CACHE_V3	# although the core is v4t
+	select CPU_CACHE_V4
 	select CPU_CP15_MPU
 	select CPU_PABRT_LEGACY
 	help
@@ -469,9 +469,6 @@ config CPU_PABRT_V7
 	bool
 
 # The cache model
-config CPU_CACHE_V3
-	bool
-
 config CPU_CACHE_V4
 	bool
 
diff --git a/arch/arm/mm/Makefile b/arch/arm/mm/Makefile
index 4e333fa..9e51be9 100644
--- a/arch/arm/mm/Makefile
+++ b/arch/arm/mm/Makefile
@@ -33,7 +33,6 @@ obj-$(CONFIG_CPU_PABRT_LEGACY)	+= pabort-legacy.o
 obj-$(CONFIG_CPU_PABRT_V6)	+= pabort-v6.o
 obj-$(CONFIG_CPU_PABRT_V7)	+= pabort-v7.o
 
-obj-$(CONFIG_CPU_CACHE_V3)	+= cache-v3.o
 obj-$(CONFIG_CPU_CACHE_V4)	+= cache-v4.o
 obj-$(CONFIG_CPU_CACHE_V4WT)	+= cache-v4wt.o
 obj-$(CONFIG_CPU_CACHE_V4WB)	+= cache-v4wb.o
diff --git a/arch/arm/mm/cache-v3.S b/arch/arm/mm/cache-v3.S
deleted file mode 100644
index 8a3fade..0000000
--- a/arch/arm/mm/cache-v3.S
+++ /dev/null
@@ -1,137 +0,0 @@
-/*
- *  linux/arch/arm/mm/cache-v3.S
- *
- *  Copyright (C) 1997-2002 Russell king
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- */
-#include <linux/linkage.h>
-#include <linux/init.h>
-#include <asm/page.h>
-#include "proc-macros.S"
-
-/*
- *	flush_icache_all()
- *
- *	Unconditionally clean and invalidate the entire icache.
- */
-ENTRY(v3_flush_icache_all)
-	mov	pc, lr
-ENDPROC(v3_flush_icache_all)
-
-/*
- *	flush_user_cache_all()
- *
- *	Invalidate all cache entries in a particular address
- *	space.
- *
- *	- mm	- mm_struct describing address space
- */
-ENTRY(v3_flush_user_cache_all)
-	/* FALLTHROUGH */
-/*
- *	flush_kern_cache_all()
- *
- *	Clean and invalidate the entire cache.
- */
-ENTRY(v3_flush_kern_cache_all)
-	/* FALLTHROUGH */
-
-/*
- *	flush_user_cache_range(start, end, flags)
- *
- *	Invalidate a range of cache entries in the specified
- *	address space.
- *
- *	- start - start address (may not be aligned)
- *	- end	- end address (exclusive, may not be aligned)
- *	- flags	- vma_area_struct flags describing address space
- */
-ENTRY(v3_flush_user_cache_range)
-	mov	ip, #0
-	mcreq	p15, 0, ip, c7, c0, 0		@ flush ID cache
-	mov	pc, lr
-
-/*
- *	coherent_kern_range(start, end)
- *
- *	Ensure coherency between the Icache and the Dcache in the
- *	region described by start.  If you have non-snooping
- *	Harvard caches, you need to implement this function.
- *
- *	- start  - virtual start address
- *	- end	 - virtual end address
- */
-ENTRY(v3_coherent_kern_range)
-	/* FALLTHROUGH */
-
-/*
- *	coherent_user_range(start, end)
- *
- *	Ensure coherency between the Icache and the Dcache in the
- *	region described by start.  If you have non-snooping
- *	Harvard caches, you need to implement this function.
- *
- *	- start  - virtual start address
- *	- end	 - virtual end address
- */
-ENTRY(v3_coherent_user_range)
-	mov	r0, #0
-	mov	pc, lr
-
-/*
- *	flush_kern_dcache_area(void *page, size_t size)
- *
- *	Ensure no D cache aliasing occurs, either with itself or
- *	the I cache
- *
- *	- addr	- kernel address
- *	- size	- region size
- */
-ENTRY(v3_flush_kern_dcache_area)
-	/* FALLTHROUGH */
-
-/*
- *	dma_flush_range(start, end)
- *
- *	Clean and invalidate the specified virtual address range.
- *
- *	- start  - virtual start address
- *	- end	 - virtual end address
- */
-ENTRY(v3_dma_flush_range)
-	mov	r0, #0
-	mcr	p15, 0, r0, c7, c0, 0		@ flush ID cache
-	mov	pc, lr
-
-/*
- *	dma_unmap_area(start, size, dir)
- *	- start	- kernel virtual start address
- *	- size	- size of region
- *	- dir	- DMA direction
- */
-ENTRY(v3_dma_unmap_area)
-	teq	r2, #DMA_TO_DEVICE
-	bne	v3_dma_flush_range
-	/* FALLTHROUGH */
-
-/*
- *	dma_map_area(start, size, dir)
- *	- start	- kernel virtual start address
- *	- size	- size of region
- *	- dir	- DMA direction
- */
-ENTRY(v3_dma_map_area)
-	mov	pc, lr
-ENDPROC(v3_dma_unmap_area)
-ENDPROC(v3_dma_map_area)
-
-	.globl	v3_flush_kern_cache_louis
-	.equ	v3_flush_kern_cache_louis, v3_flush_kern_cache_all
-
-	__INITDATA
-
-	@ define struct cpu_cache_fns (see <asm/cacheflush.h> and proc-macros.S)
-	define_cache_functions v3
diff --git a/arch/arm/mm/proc-arm740.S b/arch/arm/mm/proc-arm740.S
index dc5de5d..2088234 100644
--- a/arch/arm/mm/proc-arm740.S
+++ b/arch/arm/mm/proc-arm740.S
@@ -145,5 +145,5 @@ __arm740_proc_info:
 	.long	arm740_processor_functions
 	.long	0
 	.long	0
-	.long	v3_cache_fns			@ cache model
+	.long	v4_cache_fns			@ cache model
 	.size	__arm740_proc_info, . - __arm740_proc_info
-- 
1.8.0

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

* [PATCH v2 3/5] ARM: mm: fix numerous hideous errors in proc-arm740.S
  2013-03-25 18:17 [PATCH v2 0/5] Fix 740t support and remove more unused ARMv3 code Will Deacon
  2013-03-25 18:17 ` [PATCH v2 1/5] ARM: tlbflush: remove ARMv3 support Will Deacon
  2013-03-25 18:17 ` [PATCH v2 2/5] ARM: cache: remove ARMv3 support code Will Deacon
@ 2013-03-25 18:17 ` Will Deacon
  2013-03-25 18:17 ` [PATCH v2 4/5] ARM: mm: remove broken condition check for v4 flushing Will Deacon
  2013-03-25 18:17 ` [PATCH v2 5/5] ARM: modules: don't export cpu_set_pte_ext when !MMU Will Deacon
  4 siblings, 0 replies; 8+ messages in thread
From: Will Deacon @ 2013-03-25 18:17 UTC (permalink / raw)
  To: linux-arm-kernel

The setup code in proc-arm740.S is completely broken and, as far as I
can tell, always has been. I was >this< close to ripping it out, when a
740t core-tile materialised in the office, so I've had a crack at fixing
things up:

	- Fix the ram/flash area calculations so that we actually set
	  the condition flags before testing them...
	- Fix the proc_info structure so that __cpu_io_mmu_flags are
	  defined as 0, placing the __cpu_flush pointer at the correct
	  offset
	- Re-number the registers used during __arm740_setup so that
	  we don't clobber the machine ID et al
	- Advertise Thumb support via the hwcaps, since 740T is the only
	  740 implementation.

Acked-by: Hyok S. Choi <hyok.choi@samsung.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
---
 arch/arm/mm/proc-arm740.S | 28 ++++++++++++++++------------
 1 file changed, 16 insertions(+), 12 deletions(-)

diff --git a/arch/arm/mm/proc-arm740.S b/arch/arm/mm/proc-arm740.S
index 2088234..fde2d2a 100644
--- a/arch/arm/mm/proc-arm740.S
+++ b/arch/arm/mm/proc-arm740.S
@@ -77,24 +77,27 @@ __arm740_setup:
 	mcr	p15, 0, r0, c6,	c0		@ set area 0, default
 
 	ldr	r0, =(CONFIG_DRAM_BASE & 0xFFFFF000) @ base[31:12] of RAM
-	ldr	r1, =(CONFIG_DRAM_SIZE >> 12)	@ size of RAM (must be >= 4KB)
-	mov	r2, #10				@ 11 is the minimum (4KB)
-1:	add	r2, r2, #1			@ area size *= 2
-	mov	r1, r1, lsr #1
+	ldr	r3, =(CONFIG_DRAM_SIZE >> 12)	@ size of RAM (must be >= 4KB)
+	mov	r4, #10				@ 11 is the minimum (4KB)
+1:	add	r4, r4, #1			@ area size *= 2
+	movs	r3, r3, lsr #1
 	bne	1b				@ count not zero r-shift
-	orr	r0, r0, r2, lsl #1		@ the area register value
+	orr	r0, r0, r4, lsl #1		@ the area register value
 	orr	r0, r0, #1			@ set enable bit
 	mcr	p15, 0, r0, c6,	c1		@ set area 1, RAM
 
 	ldr	r0, =(CONFIG_FLASH_MEM_BASE & 0xFFFFF000) @ base[31:12] of FLASH
-	ldr	r1, =(CONFIG_FLASH_SIZE >> 12)	@ size of FLASH (must be >= 4KB)
-	mov	r2, #10				@ 11 is the minimum (4KB)
-1:	add	r2, r2, #1			@ area size *= 2
-	mov	r1, r1, lsr #1
+	ldr	r3, =(CONFIG_FLASH_SIZE >> 12)	@ size of FLASH (must be >= 4KB)
+	cmp	r3, #0
+	moveq	r0, #0
+	beq	2f
+	mov	r4, #10				@ 11 is the minimum (4KB)
+1:	add	r4, r4, #1			@ area size *= 2
+	movs	r3, r3, lsr #1
 	bne	1b				@ count not zero r-shift
-	orr	r0, r0, r2, lsl #1		@ the area register value
+	orr	r0, r0, r4, lsl #1		@ the area register value
 	orr	r0, r0, #1			@ set enable bit
-	mcr	p15, 0, r0, c6,	c2		@ set area 2, ROM/FLASH
+2:	mcr	p15, 0, r0, c6,	c2		@ set area 2, ROM/FLASH
 
 	mov	r0, #0x06
 	mcr	p15, 0, r0, c2, c0		@ Region 1&2 cacheable
@@ -137,10 +140,11 @@ __arm740_proc_info:
 	.long	0x41807400
 	.long	0xfffffff0
 	.long	0
+	.long	0
 	b	__arm740_setup
 	.long	cpu_arch_name
 	.long	cpu_elf_name
-	.long	HWCAP_SWP | HWCAP_HALF | HWCAP_26BIT
+	.long	HWCAP_SWP | HWCAP_HALF | HWCAP_THUMB | HWCAP_26BIT
 	.long	cpu_arm740_name
 	.long	arm740_processor_functions
 	.long	0
-- 
1.8.0

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

* [PATCH v2 4/5] ARM: mm: remove broken condition check for v4 flushing
  2013-03-25 18:17 [PATCH v2 0/5] Fix 740t support and remove more unused ARMv3 code Will Deacon
                   ` (2 preceding siblings ...)
  2013-03-25 18:17 ` [PATCH v2 3/5] ARM: mm: fix numerous hideous errors in proc-arm740.S Will Deacon
@ 2013-03-25 18:17 ` Will Deacon
  2013-03-25 18:17 ` [PATCH v2 5/5] ARM: modules: don't export cpu_set_pte_ext when !MMU Will Deacon
  4 siblings, 0 replies; 8+ messages in thread
From: Will Deacon @ 2013-03-25 18:17 UTC (permalink / raw)
  To: linux-arm-kernel

There's no point having a conditional cache flush if we don't know the
state of the condition beforehand.

This patch makes the cacheflush in v4_flush_user_cache_range
unconditional.

signed-off-by: will deacon <will.deacon@arm.com>
---
 arch/arm/mm/cache-v4.S | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/arch/arm/mm/cache-v4.S b/arch/arm/mm/cache-v4.S
index 43e5d77..a7ba68f 100644
--- a/arch/arm/mm/cache-v4.S
+++ b/arch/arm/mm/cache-v4.S
@@ -58,7 +58,7 @@ ENTRY(v4_flush_kern_cache_all)
 ENTRY(v4_flush_user_cache_range)
 #ifdef CONFIG_CPU_CP15
 	mov	ip, #0
-	mcreq	p15, 0, ip, c7, c7, 0		@ flush ID cache
+	mcr	p15, 0, ip, c7, c7, 0		@ flush ID cache
 	mov	pc, lr
 #else
 	/* FALLTHROUGH */
-- 
1.8.0

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

* [PATCH v2 5/5] ARM: modules: don't export cpu_set_pte_ext when !MMU
  2013-03-25 18:17 [PATCH v2 0/5] Fix 740t support and remove more unused ARMv3 code Will Deacon
                   ` (3 preceding siblings ...)
  2013-03-25 18:17 ` [PATCH v2 4/5] ARM: mm: remove broken condition check for v4 flushing Will Deacon
@ 2013-03-25 18:17 ` Will Deacon
  4 siblings, 0 replies; 8+ messages in thread
From: Will Deacon @ 2013-03-25 18:17 UTC (permalink / raw)
  To: linux-arm-kernel

cpu_set_pte_ext is only guaranteed to be defined when CONFIG_MMU, so
don't export it to modules otherwise.

Signed-off-by: Will Deacon <will.deacon@arm.com>
---
 arch/arm/mm/proc-syms.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/arch/arm/mm/proc-syms.c b/arch/arm/mm/proc-syms.c
index 3e6210b..054b491 100644
--- a/arch/arm/mm/proc-syms.c
+++ b/arch/arm/mm/proc-syms.c
@@ -17,7 +17,9 @@
 
 #ifndef MULTI_CPU
 EXPORT_SYMBOL(cpu_dcache_clean_area);
+#ifdef CONFIG_MMU
 EXPORT_SYMBOL(cpu_set_pte_ext);
+#endif
 #else
 EXPORT_SYMBOL(processor);
 #endif
-- 
1.8.0

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

* [PATCH v2 2/5] ARM: cache: remove ARMv3 support code
  2013-03-25 18:17 ` [PATCH v2 2/5] ARM: cache: remove ARMv3 support code Will Deacon
@ 2013-03-26  1:57   ` Greg Ungerer
  2013-03-26  2:21     ` Hyok S. Choi
  0 siblings, 1 reply; 8+ messages in thread
From: Greg Ungerer @ 2013-03-26  1:57 UTC (permalink / raw)
  To: linux-arm-kernel

Hi Will,

On 26/03/13 04:17, Will Deacon wrote:
> This is only used by 740t, which is a v4 core and (by my reading of the
> datasheet for the CPU) ignores CRm for the cp15 cache flush operation,
> making the v4 cache implementation in cache-v4.S sufficient for this
> CPU.
> 
> Tested with 740T core-tile on Integrator/AP baseboard.
> 
> Cc: Hyok S. Choi <hyok.choi@samsung.com>
> Cc: Greg Ungerer <gerg@uclinux.org>

I have no problem with this:

Acked-by: Greg Ungerer <gerg@uclinux.org>

Regards
Greg


> Signed-off-by: Will Deacon <will.deacon@arm.com>
> ---
>  arch/arm/include/asm/glue-cache.h |   8 ---
>  arch/arm/mm/Kconfig               |   5 +-
>  arch/arm/mm/Makefile              |   1 -
>  arch/arm/mm/cache-v3.S            | 137 --------------------------------------
>  arch/arm/mm/proc-arm740.S         |   2 +-
>  5 files changed, 2 insertions(+), 151 deletions(-)
>  delete mode 100644 arch/arm/mm/cache-v3.S
> 
> diff --git a/arch/arm/include/asm/glue-cache.h b/arch/arm/include/asm/glue-cache.h
> index cca9f15..ea289e1 100644
> --- a/arch/arm/include/asm/glue-cache.h
> +++ b/arch/arm/include/asm/glue-cache.h
> @@ -19,14 +19,6 @@
>  #undef _CACHE
>  #undef MULTI_CACHE
>  
> -#if defined(CONFIG_CPU_CACHE_V3)
> -# ifdef _CACHE
> -#  define MULTI_CACHE 1
> -# else
> -#  define _CACHE v3
> -# endif
> -#endif
> -
>  #if defined(CONFIG_CPU_CACHE_V4)
>  # ifdef _CACHE
>  #  define MULTI_CACHE 1
> diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig
> index 025d173..4045c49 100644
> --- a/arch/arm/mm/Kconfig
> +++ b/arch/arm/mm/Kconfig
> @@ -43,7 +43,7 @@ config CPU_ARM740T
>  	depends on !MMU
>  	select CPU_32v4T
>  	select CPU_ABRT_LV4T
> -	select CPU_CACHE_V3	# although the core is v4t
> +	select CPU_CACHE_V4
>  	select CPU_CP15_MPU
>  	select CPU_PABRT_LEGACY
>  	help
> @@ -469,9 +469,6 @@ config CPU_PABRT_V7
>  	bool
>  
>  # The cache model
> -config CPU_CACHE_V3
> -	bool
> -
>  config CPU_CACHE_V4
>  	bool
>  
> diff --git a/arch/arm/mm/Makefile b/arch/arm/mm/Makefile
> index 4e333fa..9e51be9 100644
> --- a/arch/arm/mm/Makefile
> +++ b/arch/arm/mm/Makefile
> @@ -33,7 +33,6 @@ obj-$(CONFIG_CPU_PABRT_LEGACY)	+= pabort-legacy.o
>  obj-$(CONFIG_CPU_PABRT_V6)	+= pabort-v6.o
>  obj-$(CONFIG_CPU_PABRT_V7)	+= pabort-v7.o
>  
> -obj-$(CONFIG_CPU_CACHE_V3)	+= cache-v3.o
>  obj-$(CONFIG_CPU_CACHE_V4)	+= cache-v4.o
>  obj-$(CONFIG_CPU_CACHE_V4WT)	+= cache-v4wt.o
>  obj-$(CONFIG_CPU_CACHE_V4WB)	+= cache-v4wb.o
> diff --git a/arch/arm/mm/cache-v3.S b/arch/arm/mm/cache-v3.S
> deleted file mode 100644
> index 8a3fade..0000000
> --- a/arch/arm/mm/cache-v3.S
> +++ /dev/null
> @@ -1,137 +0,0 @@
> -/*
> - *  linux/arch/arm/mm/cache-v3.S
> - *
> - *  Copyright (C) 1997-2002 Russell king
> - *
> - * This program is free software; you can redistribute it and/or modify
> - * it under the terms of the GNU General Public License version 2 as
> - * published by the Free Software Foundation.
> - */
> -#include <linux/linkage.h>
> -#include <linux/init.h>
> -#include <asm/page.h>
> -#include "proc-macros.S"
> -
> -/*
> - *	flush_icache_all()
> - *
> - *	Unconditionally clean and invalidate the entire icache.
> - */
> -ENTRY(v3_flush_icache_all)
> -	mov	pc, lr
> -ENDPROC(v3_flush_icache_all)
> -
> -/*
> - *	flush_user_cache_all()
> - *
> - *	Invalidate all cache entries in a particular address
> - *	space.
> - *
> - *	- mm	- mm_struct describing address space
> - */
> -ENTRY(v3_flush_user_cache_all)
> -	/* FALLTHROUGH */
> -/*
> - *	flush_kern_cache_all()
> - *
> - *	Clean and invalidate the entire cache.
> - */
> -ENTRY(v3_flush_kern_cache_all)
> -	/* FALLTHROUGH */
> -
> -/*
> - *	flush_user_cache_range(start, end, flags)
> - *
> - *	Invalidate a range of cache entries in the specified
> - *	address space.
> - *
> - *	- start - start address (may not be aligned)
> - *	- end	- end address (exclusive, may not be aligned)
> - *	- flags	- vma_area_struct flags describing address space
> - */
> -ENTRY(v3_flush_user_cache_range)
> -	mov	ip, #0
> -	mcreq	p15, 0, ip, c7, c0, 0		@ flush ID cache
> -	mov	pc, lr
> -
> -/*
> - *	coherent_kern_range(start, end)
> - *
> - *	Ensure coherency between the Icache and the Dcache in the
> - *	region described by start.  If you have non-snooping
> - *	Harvard caches, you need to implement this function.
> - *
> - *	- start  - virtual start address
> - *	- end	 - virtual end address
> - */
> -ENTRY(v3_coherent_kern_range)
> -	/* FALLTHROUGH */
> -
> -/*
> - *	coherent_user_range(start, end)
> - *
> - *	Ensure coherency between the Icache and the Dcache in the
> - *	region described by start.  If you have non-snooping
> - *	Harvard caches, you need to implement this function.
> - *
> - *	- start  - virtual start address
> - *	- end	 - virtual end address
> - */
> -ENTRY(v3_coherent_user_range)
> -	mov	r0, #0
> -	mov	pc, lr
> -
> -/*
> - *	flush_kern_dcache_area(void *page, size_t size)
> - *
> - *	Ensure no D cache aliasing occurs, either with itself or
> - *	the I cache
> - *
> - *	- addr	- kernel address
> - *	- size	- region size
> - */
> -ENTRY(v3_flush_kern_dcache_area)
> -	/* FALLTHROUGH */
> -
> -/*
> - *	dma_flush_range(start, end)
> - *
> - *	Clean and invalidate the specified virtual address range.
> - *
> - *	- start  - virtual start address
> - *	- end	 - virtual end address
> - */
> -ENTRY(v3_dma_flush_range)
> -	mov	r0, #0
> -	mcr	p15, 0, r0, c7, c0, 0		@ flush ID cache
> -	mov	pc, lr
> -
> -/*
> - *	dma_unmap_area(start, size, dir)
> - *	- start	- kernel virtual start address
> - *	- size	- size of region
> - *	- dir	- DMA direction
> - */
> -ENTRY(v3_dma_unmap_area)
> -	teq	r2, #DMA_TO_DEVICE
> -	bne	v3_dma_flush_range
> -	/* FALLTHROUGH */
> -
> -/*
> - *	dma_map_area(start, size, dir)
> - *	- start	- kernel virtual start address
> - *	- size	- size of region
> - *	- dir	- DMA direction
> - */
> -ENTRY(v3_dma_map_area)
> -	mov	pc, lr
> -ENDPROC(v3_dma_unmap_area)
> -ENDPROC(v3_dma_map_area)
> -
> -	.globl	v3_flush_kern_cache_louis
> -	.equ	v3_flush_kern_cache_louis, v3_flush_kern_cache_all
> -
> -	__INITDATA
> -
> -	@ define struct cpu_cache_fns (see <asm/cacheflush.h> and proc-macros.S)
> -	define_cache_functions v3
> diff --git a/arch/arm/mm/proc-arm740.S b/arch/arm/mm/proc-arm740.S
> index dc5de5d..2088234 100644
> --- a/arch/arm/mm/proc-arm740.S
> +++ b/arch/arm/mm/proc-arm740.S
> @@ -145,5 +145,5 @@ __arm740_proc_info:
>  	.long	arm740_processor_functions
>  	.long	0
>  	.long	0
> -	.long	v3_cache_fns			@ cache model
> +	.long	v4_cache_fns			@ cache model
>  	.size	__arm740_proc_info, . - __arm740_proc_info
> 

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

* [PATCH v2 2/5] ARM: cache: remove ARMv3 support code
  2013-03-26  1:57   ` Greg Ungerer
@ 2013-03-26  2:21     ` Hyok S. Choi
  0 siblings, 0 replies; 8+ messages in thread
From: Hyok S. Choi @ 2013-03-26  2:21 UTC (permalink / raw)
  To: linux-arm-kernel

The ARM7 designs mostly implement the ARMv4T architecture, but some
implement ARMv3 or ARMv5TEJ. (e.g. ARM710) If these architectures are totaly
obsoleted in the tree, there will be no problem.

Acked-by: Hyok S. Choi <hyok.choi@samsung.com>

Best,
Hyok

-----Original Message-----
From: Greg Ungerer [mailto:gerg at uclinux.org] 
Sent: Tuesday, March 26, 2013 10:57 AM
To: Will Deacon
Cc: linux-arm-kernel at lists.infradead.org; Hyok S. Choi
Subject: Re: [PATCH v2 2/5] ARM: cache: remove ARMv3 support code

Hi Will,

On 26/03/13 04:17, Will Deacon wrote:
> This is only used by 740t, which is a v4 core and (by my reading of 
> the datasheet for the CPU) ignores CRm for the cp15 cache flush 
> operation, making the v4 cache implementation in cache-v4.S sufficient 
> for this CPU.
> 
> Tested with 740T core-tile on Integrator/AP baseboard.
> 
> Cc: Hyok S. Choi <hyok.choi@samsung.com>
> Cc: Greg Ungerer <gerg@uclinux.org>

I have no problem with this:

Acked-by: Greg Ungerer <gerg@uclinux.org>

Regards
Greg


> Signed-off-by: Will Deacon <will.deacon@arm.com>
> ---
>  arch/arm/include/asm/glue-cache.h |   8 ---
>  arch/arm/mm/Kconfig               |   5 +-
>  arch/arm/mm/Makefile              |   1 -
>  arch/arm/mm/cache-v3.S            | 137
--------------------------------------
>  arch/arm/mm/proc-arm740.S         |   2 +-
>  5 files changed, 2 insertions(+), 151 deletions(-)  delete mode 
> 100644 arch/arm/mm/cache-v3.S
> 
> diff --git a/arch/arm/include/asm/glue-cache.h 
> b/arch/arm/include/asm/glue-cache.h
> index cca9f15..ea289e1 100644
> --- a/arch/arm/include/asm/glue-cache.h
> +++ b/arch/arm/include/asm/glue-cache.h
> @@ -19,14 +19,6 @@
>  #undef _CACHE
>  #undef MULTI_CACHE
>  
> -#if defined(CONFIG_CPU_CACHE_V3)
> -# ifdef _CACHE
> -#  define MULTI_CACHE 1
> -# else
> -#  define _CACHE v3
> -# endif
> -#endif
> -
>  #if defined(CONFIG_CPU_CACHE_V4)
>  # ifdef _CACHE
>  #  define MULTI_CACHE 1
> diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig index 
> 025d173..4045c49 100644
> --- a/arch/arm/mm/Kconfig
> +++ b/arch/arm/mm/Kconfig
> @@ -43,7 +43,7 @@ config CPU_ARM740T
>  	depends on !MMU
>  	select CPU_32v4T
>  	select CPU_ABRT_LV4T
> -	select CPU_CACHE_V3	# although the core is v4t
> +	select CPU_CACHE_V4
>  	select CPU_CP15_MPU
>  	select CPU_PABRT_LEGACY
>  	help
> @@ -469,9 +469,6 @@ config CPU_PABRT_V7
>  	bool
>  
>  # The cache model
> -config CPU_CACHE_V3
> -	bool
> -
>  config CPU_CACHE_V4
>  	bool
>  
> diff --git a/arch/arm/mm/Makefile b/arch/arm/mm/Makefile index 
> 4e333fa..9e51be9 100644
> --- a/arch/arm/mm/Makefile
> +++ b/arch/arm/mm/Makefile
> @@ -33,7 +33,6 @@ obj-$(CONFIG_CPU_PABRT_LEGACY)	+= pabort-legacy.o
>  obj-$(CONFIG_CPU_PABRT_V6)	+= pabort-v6.o
>  obj-$(CONFIG_CPU_PABRT_V7)	+= pabort-v7.o
>  
> -obj-$(CONFIG_CPU_CACHE_V3)	+= cache-v3.o
>  obj-$(CONFIG_CPU_CACHE_V4)	+= cache-v4.o
>  obj-$(CONFIG_CPU_CACHE_V4WT)	+= cache-v4wt.o
>  obj-$(CONFIG_CPU_CACHE_V4WB)	+= cache-v4wb.o
> diff --git a/arch/arm/mm/cache-v3.S b/arch/arm/mm/cache-v3.S deleted 
> file mode 100644 index 8a3fade..0000000
> --- a/arch/arm/mm/cache-v3.S
> +++ /dev/null
> @@ -1,137 +0,0 @@
> -/*
> - *  linux/arch/arm/mm/cache-v3.S
> - *
> - *  Copyright (C) 1997-2002 Russell king
> - *
> - * This program is free software; you can redistribute it and/or 
> modify
> - * it under the terms of the GNU General Public License version 2 as
> - * published by the Free Software Foundation.
> - */
> -#include <linux/linkage.h>
> -#include <linux/init.h>
> -#include <asm/page.h>
> -#include "proc-macros.S"
> -
> -/*
> - *	flush_icache_all()
> - *
> - *	Unconditionally clean and invalidate the entire icache.
> - */
> -ENTRY(v3_flush_icache_all)
> -	mov	pc, lr
> -ENDPROC(v3_flush_icache_all)
> -
> -/*
> - *	flush_user_cache_all()
> - *
> - *	Invalidate all cache entries in a particular address
> - *	space.
> - *
> - *	- mm	- mm_struct describing address space
> - */
> -ENTRY(v3_flush_user_cache_all)
> -	/* FALLTHROUGH */
> -/*
> - *	flush_kern_cache_all()
> - *
> - *	Clean and invalidate the entire cache.
> - */
> -ENTRY(v3_flush_kern_cache_all)
> -	/* FALLTHROUGH */
> -
> -/*
> - *	flush_user_cache_range(start, end, flags)
> - *
> - *	Invalidate a range of cache entries in the specified
> - *	address space.
> - *
> - *	- start - start address (may not be aligned)
> - *	- end	- end address (exclusive, may not be aligned)
> - *	- flags	- vma_area_struct flags describing address space
> - */
> -ENTRY(v3_flush_user_cache_range)
> -	mov	ip, #0
> -	mcreq	p15, 0, ip, c7, c0, 0		@ flush ID cache
> -	mov	pc, lr
> -
> -/*
> - *	coherent_kern_range(start, end)
> - *
> - *	Ensure coherency between the Icache and the Dcache in the
> - *	region described by start.  If you have non-snooping
> - *	Harvard caches, you need to implement this function.
> - *
> - *	- start  - virtual start address
> - *	- end	 - virtual end address
> - */
> -ENTRY(v3_coherent_kern_range)
> -	/* FALLTHROUGH */
> -
> -/*
> - *	coherent_user_range(start, end)
> - *
> - *	Ensure coherency between the Icache and the Dcache in the
> - *	region described by start.  If you have non-snooping
> - *	Harvard caches, you need to implement this function.
> - *
> - *	- start  - virtual start address
> - *	- end	 - virtual end address
> - */
> -ENTRY(v3_coherent_user_range)
> -	mov	r0, #0
> -	mov	pc, lr
> -
> -/*
> - *	flush_kern_dcache_area(void *page, size_t size)
> - *
> - *	Ensure no D cache aliasing occurs, either with itself or
> - *	the I cache
> - *
> - *	- addr	- kernel address
> - *	- size	- region size
> - */
> -ENTRY(v3_flush_kern_dcache_area)
> -	/* FALLTHROUGH */
> -
> -/*
> - *	dma_flush_range(start, end)
> - *
> - *	Clean and invalidate the specified virtual address range.
> - *
> - *	- start  - virtual start address
> - *	- end	 - virtual end address
> - */
> -ENTRY(v3_dma_flush_range)
> -	mov	r0, #0
> -	mcr	p15, 0, r0, c7, c0, 0		@ flush ID cache
> -	mov	pc, lr
> -
> -/*
> - *	dma_unmap_area(start, size, dir)
> - *	- start	- kernel virtual start address
> - *	- size	- size of region
> - *	- dir	- DMA direction
> - */
> -ENTRY(v3_dma_unmap_area)
> -	teq	r2, #DMA_TO_DEVICE
> -	bne	v3_dma_flush_range
> -	/* FALLTHROUGH */
> -
> -/*
> - *	dma_map_area(start, size, dir)
> - *	- start	- kernel virtual start address
> - *	- size	- size of region
> - *	- dir	- DMA direction
> - */
> -ENTRY(v3_dma_map_area)
> -	mov	pc, lr
> -ENDPROC(v3_dma_unmap_area)
> -ENDPROC(v3_dma_map_area)
> -
> -	.globl	v3_flush_kern_cache_louis
> -	.equ	v3_flush_kern_cache_louis, v3_flush_kern_cache_all
> -
> -	__INITDATA
> -
> -	@ define struct cpu_cache_fns (see <asm/cacheflush.h> and
proc-macros.S)
> -	define_cache_functions v3
> diff --git a/arch/arm/mm/proc-arm740.S b/arch/arm/mm/proc-arm740.S 
> index dc5de5d..2088234 100644
> --- a/arch/arm/mm/proc-arm740.S
> +++ b/arch/arm/mm/proc-arm740.S
> @@ -145,5 +145,5 @@ __arm740_proc_info:
>  	.long	arm740_processor_functions
>  	.long	0
>  	.long	0
> -	.long	v3_cache_fns			@ cache model
> +	.long	v4_cache_fns			@ cache model
>  	.size	__arm740_proc_info, . - __arm740_proc_info
> 

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

end of thread, other threads:[~2013-03-26  2:21 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-03-25 18:17 [PATCH v2 0/5] Fix 740t support and remove more unused ARMv3 code Will Deacon
2013-03-25 18:17 ` [PATCH v2 1/5] ARM: tlbflush: remove ARMv3 support Will Deacon
2013-03-25 18:17 ` [PATCH v2 2/5] ARM: cache: remove ARMv3 support code Will Deacon
2013-03-26  1:57   ` Greg Ungerer
2013-03-26  2:21     ` Hyok S. Choi
2013-03-25 18:17 ` [PATCH v2 3/5] ARM: mm: fix numerous hideous errors in proc-arm740.S Will Deacon
2013-03-25 18:17 ` [PATCH v2 4/5] ARM: mm: remove broken condition check for v4 flushing Will Deacon
2013-03-25 18:17 ` [PATCH v2 5/5] ARM: modules: don't export cpu_set_pte_ext when !MMU Will Deacon

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).