diff mbox

[U-Boot,3/6] arm, at91: add icache support

Message ID 1471418009-12660-4-git-send-email-hs@denx.de
State Accepted
Commit 6ed67659b93f9b3190558845c20faea1447ae4ce
Delegated to: Andreas Bießmann
Headers show

Commit Message

Heiko Schocher Aug. 17, 2016, 7:13 a.m. UTC
add at least icache support for at91 based boards.
This speeds up NOR flash access on an at91sam9g15
based board from 15.2 seconds reading 8 MiB from
a SPI NOR flash to 5.7 seconds.

Signed-off-by: Heiko Schocher <hs@denx.de>

---
removed the dcache enable in the gurnard board. Comment
says that enabling dcache breaks Ethernet MAC ... why
is it then enabled?

@Simon: If you need dache enabled for the gurnard board,
arch/arm/mach-at91/arm926ejs/cache.c is the correct place
for doing this, I think. Please add there the common functions
needed for dcache support on at91 plattforms and undef in
the gurnard board configuration CONFIG_SYS_DCACHE_OFF.

 arch/arm/mach-at91/arm926ejs/Makefile |  1 +
 arch/arm/mach-at91/arm926ejs/cache.c  | 29 +++++++++++++++++++++++++++++
 board/bluewater/gurnard/gurnard.c     |  6 ------
 3 files changed, 30 insertions(+), 6 deletions(-)
 create mode 100644 arch/arm/mach-at91/arm926ejs/cache.c

Comments

Simon Glass Aug. 18, 2016, 3:45 a.m. UTC | #1
On 17 August 2016 at 01:13, Heiko Schocher <hs@denx.de> wrote:
> add at least icache support for at91 based boards.
> This speeds up NOR flash access on an at91sam9g15
> based board from 15.2 seconds reading 8 MiB from
> a SPI NOR flash to 5.7 seconds.
>
> Signed-off-by: Heiko Schocher <hs@denx.de>
>
> ---
> removed the dcache enable in the gurnard board. Comment
> says that enabling dcache breaks Ethernet MAC ... why
> is it then enabled?
>
> @Simon: If you need dache enabled for the gurnard board,
> arch/arm/mach-at91/arm926ejs/cache.c is the correct place
> for doing this, I think. Please add there the common functions
> needed for dcache support on at91 plattforms and undef in
> the gurnard board configuration CONFIG_SYS_DCACHE_OFF.
>
>  arch/arm/mach-at91/arm926ejs/Makefile |  1 +
>  arch/arm/mach-at91/arm926ejs/cache.c  | 29 +++++++++++++++++++++++++++++
>  board/bluewater/gurnard/gurnard.c     |  6 ------
>  3 files changed, 30 insertions(+), 6 deletions(-)
>  create mode 100644 arch/arm/mach-at91/arm926ejs/cache.c

Reviewed-by: Simon Glass <sjg@chromium.org>
Andreas Bießmann Oct. 6, 2016, 9:58 p.m. UTC | #2
On 17.08.16 09:13, Heiko Schocher wrote:
> add at least icache support for at91 based boards.
> This speeds up NOR flash access on an at91sam9g15
> based board from 15.2 seconds reading 8 MiB from
> a SPI NOR flash to 5.7 seconds.
> 
> Signed-off-by: Heiko Schocher <hs@denx.de>

Reviewed-by: Andreas Bießmann <andreas@biessmann.org>
Andreas Bießmann Oct. 28, 2016, 4:49 p.m. UTC | #3
Dear Heiko Schocher,

Heiko Schocher <hs@denx.de> writes:
>add at least icache support for at91 based boards.
>This speeds up NOR flash access on an at91sam9g15
>based board from 15.2 seconds reading 8 MiB from
>a SPI NOR flash to 5.7 seconds.
>
>Signed-off-by: Heiko Schocher <hs@denx.de>
>Reviewed-by: Simon Glass <sjg@chromium.org>
>Reviewed-by: Andreas Bießmann <andreas@biessmann.org>
>---
>removed the dcache enable in the gurnard board. Comment
>says that enabling dcache breaks Ethernet MAC ... why
>is it then enabled?
>
>@Simon: If you need dache enabled for the gurnard board,
>arch/arm/mach-at91/arm926ejs/cache.c is the correct place
>for doing this, I think. Please add there the common functions
>needed for dcache support on at91 plattforms and undef in
>the gurnard board configuration CONFIG_SYS_DCACHE_OFF.
>
> arch/arm/mach-at91/arm926ejs/Makefile |  1 +
> arch/arm/mach-at91/arm926ejs/cache.c  | 29 +++++++++++++++++++++++++++++
> board/bluewater/gurnard/gurnard.c     |  6 ------
> 3 files changed, 30 insertions(+), 6 deletions(-)
> create mode 100644 arch/arm/mach-at91/arm926ejs/cache.c

applied to u-boot-atmel/master, thanks!

Best regards,
Andreas Bießmann
diff mbox

Patch

diff --git a/arch/arm/mach-at91/arm926ejs/Makefile b/arch/arm/mach-at91/arm926ejs/Makefile
index ddc323f..d36e15a 100644
--- a/arch/arm/mach-at91/arm926ejs/Makefile
+++ b/arch/arm/mach-at91/arm926ejs/Makefile
@@ -18,6 +18,7 @@  obj-$(CONFIG_AT91SAM9N12)	+= at91sam9n12_devices.o
 obj-$(CONFIG_AT91SAM9X5)	+= at91sam9x5_devices.o
 obj-$(CONFIG_AT91_EFLASH)	+= eflash.o
 obj-$(CONFIG_AT91_LED)	+= led.o
+obj-y += cache.o
 obj-y += clock.o
 obj-y += cpu.o
 obj-y	+= reset.o
diff --git a/arch/arm/mach-at91/arm926ejs/cache.c b/arch/arm/mach-at91/arm926ejs/cache.c
new file mode 100644
index 0000000..8813706
--- /dev/null
+++ b/arch/arm/mach-at91/arm926ejs/cache.c
@@ -0,0 +1,29 @@ 
+/*
+ * (C) Copyright 2016
+ * Heiko Schocher, DENX Software Engineering, hs@denx.de.
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+#include <linux/types.h>
+#include <common.h>
+
+void enable_caches(void)
+{
+#ifndef CONFIG_SYS_ICACHE_OFF
+	icache_enable();
+#endif
+}
+
+#ifndef CONFIG_SYS_ICACHE_OFF
+/* Invalidate entire I-cache and branch predictor array */
+void invalidate_icache_all(void)
+{
+	unsigned long i = 0;
+
+	asm ("mcr p15, 0, %0, c7, c5, 0" : : "r" (i));
+}
+#else
+void invalidate_icache_all(void)
+{
+}
+#endif
diff --git a/board/bluewater/gurnard/gurnard.c b/board/bluewater/gurnard/gurnard.c
index 2a36d29..08b1401 100644
--- a/board/bluewater/gurnard/gurnard.c
+++ b/board/bluewater/gurnard/gurnard.c
@@ -414,12 +414,6 @@  void reset_phy(void)
 {
 }
 
-/* This breaks the Ethernet MAC at present */
-void enable_caches(void)
-{
-	dcache_enable();
-}
-
 /* SPI chip select control - only used for FPGA programming */
 #ifdef CONFIG_ATMEL_SPI