All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot] [PATCH v1 0/4] MIPS: optimise cache initialization
@ 2018-09-07 17:02 Daniel Schwierzeck
  2018-09-07 17:02 ` [U-Boot] [PATCH v1 1/4] MIPS: cache: reimplement dcache_[status, enable, disable] Daniel Schwierzeck
                   ` (3 more replies)
  0 siblings, 4 replies; 9+ messages in thread
From: Daniel Schwierzeck @ 2018-09-07 17:02 UTC (permalink / raw)
  To: u-boot


Do some minor cleanups. Improve the code for changing the k0 CCA.
Make the index base address for cache initialisation configurable.

Some changes are insprired by the book "MD0901 Boot-MIPS" [1].

Also this is partly a preparation for the upcoming support for Mediatek
MT76xx platform.

[1] https://training.mips.com/cps_mips/Examples/MD00901_Boot-MIPS_Example_Boot_Code_for_MIPS_Cores.pdf


Daniel Schwierzeck (4):
  MIPS: cache: reimplement dcache_[status,enable,disable]
  MIPS: cache: optimise changing of k0 CCA mode
  MIPS: cache: make index base address configurable
  MIPS: cache: remove config option CONFIG_SYS_MIPS_CACHE_MODE

 README                           |  14 ----
 arch/mips/Kconfig                |  12 ++++
 arch/mips/lib/cache.c            |  20 ++++++
 arch/mips/lib/cache_init.S       | 118 ++++++++++---------------------
 include/configs/imgtec_xilfpga.h |   3 -
 include/configs/pic32mzdask.h    |   3 -
 scripts/config_whitelist.txt     |   1 -
 7 files changed, 70 insertions(+), 101 deletions(-)

-- 
2.18.0

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

* [U-Boot] [PATCH v1 1/4] MIPS: cache: reimplement dcache_[status, enable, disable]
  2018-09-07 17:02 [U-Boot] [PATCH v1 0/4] MIPS: optimise cache initialization Daniel Schwierzeck
@ 2018-09-07 17:02 ` Daniel Schwierzeck
  2018-09-10  5:34   ` Stefan Roese
  2018-09-07 17:02 ` [U-Boot] [PATCH v1 2/4] MIPS: cache: optimise changing of k0 CCA mode Daniel Schwierzeck
                   ` (2 subsequent siblings)
  3 siblings, 1 reply; 9+ messages in thread
From: Daniel Schwierzeck @ 2018-09-07 17:02 UTC (permalink / raw)
  To: u-boot

Those functions are not needed during cache init and can be
implemented in C. Only support the safe disabling of caches when
this is required for booting an OS. Reenabling caches is much
harder to implement if an optional coherency manager must be
supported. As there is no real use-case anyway, dcache_enable
is implemented with an error message.

Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
---

 arch/mips/lib/cache.c      | 20 +++++++++++++++++
 arch/mips/lib/cache_init.S | 46 --------------------------------------
 2 files changed, 20 insertions(+), 46 deletions(-)

diff --git a/arch/mips/lib/cache.c b/arch/mips/lib/cache.c
index 1d14fc487e..d56fd1e0f4 100644
--- a/arch/mips/lib/cache.c
+++ b/arch/mips/lib/cache.c
@@ -175,3 +175,23 @@ void invalidate_dcache_range(ulong start_addr, ulong stop)
 	/* ensure cache ops complete before any further memory accesses */
 	sync();
 }
+
+int dcache_status(void)
+{
+	unsigned int cca = read_c0_config() & CONF_CM_CMASK;
+	return cca != CONF_CM_UNCACHED;
+}
+
+void dcache_enable(void)
+{
+	puts("Not supported!\n");
+}
+
+void dcache_disable(void)
+{
+	/* change CCA to uncached */
+	change_c0_config(CONF_CM_CMASK, CONF_CM_UNCACHED);
+
+	/* ensure the pipeline doesn't contain now-invalid instructions */
+	instruction_hazard_barrier();
+}
diff --git a/arch/mips/lib/cache_init.S b/arch/mips/lib/cache_init.S
index b209f23f0a..395bfffdb8 100644
--- a/arch/mips/lib/cache_init.S
+++ b/arch/mips/lib/cache_init.S
@@ -423,49 +423,3 @@ return:
 	sync
 	jr	ra
 	END(mips_cache_reset)
-
-/*
- * dcache_status - get cache status
- *
- * RETURNS: 0 - cache disabled; 1 - cache enabled
- *
- */
-LEAF(dcache_status)
-	mfc0	t0, CP0_CONFIG
-	li	t1, CONF_CM_UNCACHED
-	andi	t0, t0, CONF_CM_CMASK
-	move	v0, zero
-	beq	t0, t1, 2f
-	li	v0, 1
-2:	jr	ra
-	END(dcache_status)
-
-/*
- * dcache_disable - disable cache
- *
- * RETURNS: N/A
- *
- */
-LEAF(dcache_disable)
-	mfc0	t0, CP0_CONFIG
-	li	t1, -8
-	and	t0, t0, t1
-	ori	t0, t0, CONF_CM_UNCACHED
-	mtc0	t0, CP0_CONFIG
-	jr	ra
-	END(dcache_disable)
-
-/*
- * dcache_enable - enable cache
- *
- * RETURNS: N/A
- *
- */
-LEAF(dcache_enable)
-	mfc0	t0, CP0_CONFIG
-	ori	t0, CONF_CM_CMASK
-	xori	t0, CONF_CM_CMASK
-	ori	t0, CONFIG_SYS_MIPS_CACHE_MODE
-	mtc0	t0, CP0_CONFIG
-	jr	ra
-	END(dcache_enable)
-- 
2.18.0

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

* [U-Boot] [PATCH v1 2/4] MIPS: cache: optimise changing of k0 CCA mode
  2018-09-07 17:02 [U-Boot] [PATCH v1 0/4] MIPS: optimise cache initialization Daniel Schwierzeck
  2018-09-07 17:02 ` [U-Boot] [PATCH v1 1/4] MIPS: cache: reimplement dcache_[status, enable, disable] Daniel Schwierzeck
@ 2018-09-07 17:02 ` Daniel Schwierzeck
  2018-09-07 17:02 ` [U-Boot] [PATCH v1 3/4] MIPS: cache: make index base address configurable Daniel Schwierzeck
  2018-09-07 17:02 ` [U-Boot] [PATCH v1 4/4] MIPS: cache: remove config option CONFIG_SYS_MIPS_CACHE_MODE Daniel Schwierzeck
  3 siblings, 0 replies; 9+ messages in thread
From: Daniel Schwierzeck @ 2018-09-07 17:02 UTC (permalink / raw)
  To: u-boot

Changing the Cache Coherency Algorithm (CCA) for kernel mode
requires executing from KSEG1. Thus do a jump from KSEG0 to KSEG1
before changing the CCA mode. Jump back to KSEG0 afterwards.

Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
---

 arch/mips/lib/cache_init.S | 54 ++++++++++++++++++++++----------------
 1 file changed, 32 insertions(+), 22 deletions(-)

diff --git a/arch/mips/lib/cache_init.S b/arch/mips/lib/cache_init.S
index 395bfffdb8..4e956031b3 100644
--- a/arch/mips/lib/cache_init.S
+++ b/arch/mips/lib/cache_init.S
@@ -84,6 +84,7 @@
 10:
 	.set	pop
 	.endm
+
 /*
  * mips_cache_reset - low level initialisation of the primary caches
  *
@@ -319,19 +320,21 @@ l1_init:
 	PTR_LI		t0, INDEX_BASE
 	cache_loop	t0, t1, R_IC_LINE, INDEX_STORE_TAG_I
 #endif
-
-	/* Enable use of the I-cache by setting Config.K0 */
 	sync
-	mfc0		t0, CP0_CONFIG
-	li		t1, CONFIG_SYS_MIPS_CACHE_MODE
-#if __mips_isa_rev >= 2
-	ins		t0, t1, 0, 3
-#else
-	ori		t0, t0, CONF_CM_CMASK
-	xori		t0, t0, CONF_CM_CMASK
+
+	/*
+	 * Enable use of the I-cache by setting Config.K0. The code for this
+	 * must be executed from KSEG1. Jump from KSEG0 to KSEG1 to do this.
+	 * Jump back to KSEG0 after caches are enabled and insert an
+	 * instruction hazard barrier.
+	 */
+	PTR_LA		t0, change_k0_cca
+	li		t1, CPHYSADDR(~0)
+	and		t0, t0, t1
+	PTR_LI		t1, CKSEG1
 	or		t0, t0, t1
-#endif
-	mtc0		t0, CP0_CONFIG
+	li		a0, CONFIG_SYS_MIPS_CACHE_MODE
+	jalr.hb		t0
 
 	/*
 	 * then initialize D-cache.
@@ -391,16 +394,9 @@ l2_unbypass:
 	beqz		t0, 2f
 
 	/* Change Config.K0 to a coherent CCA */
-	mfc0		t0, CP0_CONFIG
-	li		t1, CONF_CM_CACHABLE_COW
-#if __mips_isa_rev >= 2
-	ins		t0, t1, 0, 3
-#else
-	ori		t0, t0, CONF_CM_CMASK
-	xori		t0, t0, CONF_CM_CMASK
-	or		t0, t0, t1
-#endif
-	mtc0		t0, CP0_CONFIG
+	PTR_LA		t0, change_k0_cca
+	li		a0, CONF_CM_CACHABLE_COW
+	jalr		t0
 
 	/*
 	 * Join the coherent domain such that the caches of this core are kept
@@ -421,5 +417,19 @@ l2_unbypass:
 return:
 	/* Ensure all cache operations complete before returning */
 	sync
-	jr	ra
+	jr	R_RETURN
 	END(mips_cache_reset)
+
+LEAF(change_k0_cca)
+	mfc0		t0, CP0_CONFIG
+#if __mips_isa_rev >= 2
+	ins		t0, a0, 0, 3
+#else
+	xor		a0, a0, t0
+	andi		a0, a0, CONF_CM_CMASK
+	xor		a0, a0, t0
+#endif
+	mtc0		a0, CP0_CONFIG
+
+	jr.hb		ra
+	END(change_k0_cca)
-- 
2.18.0

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

* [U-Boot] [PATCH v1 3/4] MIPS: cache: make index base address configurable
  2018-09-07 17:02 [U-Boot] [PATCH v1 0/4] MIPS: optimise cache initialization Daniel Schwierzeck
  2018-09-07 17:02 ` [U-Boot] [PATCH v1 1/4] MIPS: cache: reimplement dcache_[status, enable, disable] Daniel Schwierzeck
  2018-09-07 17:02 ` [U-Boot] [PATCH v1 2/4] MIPS: cache: optimise changing of k0 CCA mode Daniel Schwierzeck
@ 2018-09-07 17:02 ` Daniel Schwierzeck
  2018-09-07 17:02 ` [U-Boot] [PATCH v1 4/4] MIPS: cache: remove config option CONFIG_SYS_MIPS_CACHE_MODE Daniel Schwierzeck
  3 siblings, 0 replies; 9+ messages in thread
From: Daniel Schwierzeck @ 2018-09-07 17:02 UTC (permalink / raw)
  To: u-boot

The index base address used for the cache initialisation is currently
hard-coded to CKSEG0. Make this value configurable if a MIPS system
needs to have a different address (e.g. in SRAM or ScratchPad RAM).

Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
---

 arch/mips/Kconfig          | 12 ++++++++++++
 arch/mips/lib/cache_init.S | 18 ++++++++----------
 2 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index 6e5e0ffe65..095d81689f 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -218,6 +218,18 @@ config MIPS_CM_BASE
 	  the GCRs occupy a region of the physical address space which is
 	  otherwise unused, or at minimum that software doesn't need to access.
 
+config MIPS_CACHE_INDEX_BASE
+	hex "Index base address for cache initialisation"
+	default 0x80000000 if CPU_MIPS32
+	default 0xffffffff80000000 if CPU_MIPS64
+	help
+	  This is the base address for a memory block, which is used for
+	  initialising the cache lines. This is also the base address of a memory
+	  block which is used for loading and filling cache lines when
+	  SYS_MIPS_CACHE_INIT_RAM_LOAD is selected.
+	  Normally this is CKSEG0. If the MIPS system needs to move this block
+	  to some SRAM or ScratchPad RAM, adapt this option accordingly.
+
 endmenu
 
 menu "OS boot interface"
diff --git a/arch/mips/lib/cache_init.S b/arch/mips/lib/cache_init.S
index 4e956031b3..5616ee6dfd 100644
--- a/arch/mips/lib/cache_init.S
+++ b/arch/mips/lib/cache_init.S
@@ -18,8 +18,6 @@
 #define CONFIG_SYS_MIPS_CACHE_MODE CONF_CM_CACHABLE_NONCOHERENT
 #endif
 
-#define INDEX_BASE	CKSEG0
-
 	.macro	f_fill64 dst, offset, val
 	LONG_S	\val, (\offset +  0 * LONGSIZE)(\dst)
 	LONG_S	\val, (\offset +  1 * LONGSIZE)(\dst)
@@ -256,7 +254,7 @@ l2_probe_done:
 	/*
 	 * Now clear that much memory starting from zero.
 	 */
-	PTR_LI		a0, CKSEG1
+	PTR_LI		a0, CKSEG1ADDR(CONFIG_MIPS_CACHE_INDEX_BASE)
 	PTR_ADDU	a1, a0, v0
 2:	PTR_ADDIU	a0, 64
 	f_fill64	a0, -64, zero
@@ -272,7 +270,7 @@ l2_probe_done:
 	bnez		R_L2_BYPASSED, l1_init
 
 l2_init:
-	PTR_LI		t0, INDEX_BASE
+	PTR_LI		t0, CKSEG0ADDR(CONFIG_MIPS_CACHE_INDEX_BASE)
 	PTR_ADDU	t1, t0, R_L2_SIZE
 1:	cache		INDEX_STORE_TAG_SD, 0(t0)
 	PTR_ADDU	t0, t0, R_L2_LINE
@@ -308,16 +306,16 @@ l1_init:
 	 * Initialize the I-cache first,
 	 */
 	blez		R_IC_SIZE, 1f
-	PTR_LI		t0, INDEX_BASE
+	PTR_LI		t0, CKSEG0ADDR(CONFIG_MIPS_CACHE_INDEX_BASE)
 	PTR_ADDU	t1, t0, R_IC_SIZE
 	/* clear tag to invalidate */
 	cache_loop	t0, t1, R_IC_LINE, INDEX_STORE_TAG_I
 #ifdef CONFIG_SYS_MIPS_CACHE_INIT_RAM_LOAD
 	/* fill once, so data field parity is correct */
-	PTR_LI		t0, INDEX_BASE
+	PTR_LI		t0, CKSEG0ADDR(CONFIG_MIPS_CACHE_INDEX_BASE)
 	cache_loop	t0, t1, R_IC_LINE, FILL
 	/* invalidate again - prudent but not strictly neccessary */
-	PTR_LI		t0, INDEX_BASE
+	PTR_LI		t0, CKSEG0ADDR(CONFIG_MIPS_CACHE_INDEX_BASE)
 	cache_loop	t0, t1, R_IC_LINE, INDEX_STORE_TAG_I
 #endif
 	sync
@@ -340,18 +338,18 @@ l1_init:
 	 * then initialize D-cache.
 	 */
 1:	blez		R_DC_SIZE, 3f
-	PTR_LI		t0, INDEX_BASE
+	PTR_LI		t0, CKSEG0ADDR(CONFIG_MIPS_CACHE_INDEX_BASE)
 	PTR_ADDU	t1, t0, R_DC_SIZE
 	/* clear all tags */
 	cache_loop	t0, t1, R_DC_LINE, INDEX_STORE_TAG_D
 #ifdef CONFIG_SYS_MIPS_CACHE_INIT_RAM_LOAD
 	/* load from each line (in cached space) */
-	PTR_LI		t0, INDEX_BASE
+	PTR_LI		t0, CKSEG0ADDR(CONFIG_MIPS_CACHE_INDEX_BASE)
 2:	LONG_L		zero, 0(t0)
 	PTR_ADDU	t0, R_DC_LINE
 	bne		t0, t1, 2b
 	/* clear all tags */
-	PTR_LI		t0, INDEX_BASE
+	PTR_LI		t0, CKSEG0ADDR(CONFIG_MIPS_CACHE_INDEX_BASE)
 	cache_loop	t0, t1, R_DC_LINE, INDEX_STORE_TAG_D
 #endif
 3:
-- 
2.18.0

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

* [U-Boot] [PATCH v1 4/4] MIPS: cache: remove config option CONFIG_SYS_MIPS_CACHE_MODE
  2018-09-07 17:02 [U-Boot] [PATCH v1 0/4] MIPS: optimise cache initialization Daniel Schwierzeck
                   ` (2 preceding siblings ...)
  2018-09-07 17:02 ` [U-Boot] [PATCH v1 3/4] MIPS: cache: make index base address configurable Daniel Schwierzeck
@ 2018-09-07 17:02 ` Daniel Schwierzeck
  3 siblings, 0 replies; 9+ messages in thread
From: Daniel Schwierzeck @ 2018-09-07 17:02 UTC (permalink / raw)
  To: u-boot

Caches should be configured to mode CONF_CM_CACHABLE_NONCOHERENT
(or CONF_CM_CACHABLE_COW when a CM is available). There is no
need to make this configurable.

Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>

---

 README                           | 14 --------------
 arch/mips/lib/cache_init.S       |  6 +-----
 include/configs/imgtec_xilfpga.h |  3 ---
 include/configs/pic32mzdask.h    |  3 ---
 scripts/config_whitelist.txt     |  1 -
 5 files changed, 1 insertion(+), 26 deletions(-)

diff --git a/README b/README
index a91af2a189..c280b7a95f 100644
--- a/README
+++ b/README
@@ -528,20 +528,6 @@ The following options need to be configured:
 		pointer. This is needed for the temporary stack before
 		relocation.
 
-		CONFIG_SYS_MIPS_CACHE_MODE
-
-		Cache operation mode for the MIPS CPU.
-		See also arch/mips/include/asm/mipsregs.h.
-		Possible values are:
-			CONF_CM_CACHABLE_NO_WA
-			CONF_CM_CACHABLE_WA
-			CONF_CM_UNCACHED
-			CONF_CM_CACHABLE_NONCOHERENT
-			CONF_CM_CACHABLE_CE
-			CONF_CM_CACHABLE_COW
-			CONF_CM_CACHABLE_CUW
-			CONF_CM_CACHABLE_ACCELERATED
-
 		CONFIG_SYS_XWAY_EBU_BOOTCFG
 
 		Special option for Lantiq XWAY SoCs for booting from NOR flash.
diff --git a/arch/mips/lib/cache_init.S b/arch/mips/lib/cache_init.S
index 5616ee6dfd..cfad1d9c8a 100644
--- a/arch/mips/lib/cache_init.S
+++ b/arch/mips/lib/cache_init.S
@@ -14,10 +14,6 @@
 #include <asm/cacheops.h>
 #include <asm/cm.h>
 
-#ifndef CONFIG_SYS_MIPS_CACHE_MODE
-#define CONFIG_SYS_MIPS_CACHE_MODE CONF_CM_CACHABLE_NONCOHERENT
-#endif
-
 	.macro	f_fill64 dst, offset, val
 	LONG_S	\val, (\offset +  0 * LONGSIZE)(\dst)
 	LONG_S	\val, (\offset +  1 * LONGSIZE)(\dst)
@@ -331,7 +327,7 @@ l1_init:
 	and		t0, t0, t1
 	PTR_LI		t1, CKSEG1
 	or		t0, t0, t1
-	li		a0, CONFIG_SYS_MIPS_CACHE_MODE
+	li		a0, CONF_CM_CACHABLE_NONCOHERENT
 	jalr.hb		t0
 
 	/*
diff --git a/include/configs/imgtec_xilfpga.h b/include/configs/imgtec_xilfpga.h
index 29b23fa40e..8e2d72323d 100644
--- a/include/configs/imgtec_xilfpga.h
+++ b/include/configs/imgtec_xilfpga.h
@@ -19,9 +19,6 @@
 /* CPU Timer rate */
 #define CONFIG_SYS_MIPS_TIMER_FREQ	50000000
 
-/* Cache Configuration */
-#define CONFIG_SYS_MIPS_CACHE_MODE	CONF_CM_CACHABLE_NONCOHERENT
-
 /*----------------------------------------------------------------------
  * Memory Layout
  */
diff --git a/include/configs/pic32mzdask.h b/include/configs/pic32mzdask.h
index d3775023d0..ec2e7743d9 100644
--- a/include/configs/pic32mzdask.h
+++ b/include/configs/pic32mzdask.h
@@ -16,9 +16,6 @@
 /* CPU Timer rate */
 #define CONFIG_SYS_MIPS_TIMER_FREQ	100000000
 
-/* Cache Configuration */
-#define CONFIG_SYS_MIPS_CACHE_MODE	CONF_CM_CACHABLE_NONCOHERENT
-
 /*----------------------------------------------------------------------
  * Memory Layout
  */
diff --git a/scripts/config_whitelist.txt b/scripts/config_whitelist.txt
index 1a5606d123..b3cba57843 100644
--- a/scripts/config_whitelist.txt
+++ b/scripts/config_whitelist.txt
@@ -3435,7 +3435,6 @@ CONFIG_SYS_MEM_TOP_HIDE
 CONFIG_SYS_MFD
 CONFIG_SYS_MHZ
 CONFIG_SYS_MII_MODE
-CONFIG_SYS_MIPS_CACHE_MODE
 CONFIG_SYS_MIPS_TIMER_FREQ
 CONFIG_SYS_MMCSD_FS_BOOT_PARTITION
 CONFIG_SYS_MMCSD_RAW_MODE_ARGS_SECTOR
-- 
2.18.0

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

* [U-Boot] [PATCH v1 1/4] MIPS: cache: reimplement dcache_[status, enable, disable]
  2018-09-07 17:02 ` [U-Boot] [PATCH v1 1/4] MIPS: cache: reimplement dcache_[status, enable, disable] Daniel Schwierzeck
@ 2018-09-10  5:34   ` Stefan Roese
  2018-09-11 14:12     ` Daniel Schwierzeck
  0 siblings, 1 reply; 9+ messages in thread
From: Stefan Roese @ 2018-09-10  5:34 UTC (permalink / raw)
  To: u-boot

Hi Daniel,

On 07.09.2018 19:02, Daniel Schwierzeck wrote:
> Those functions are not needed during cache init and can be
> implemented in C. Only support the safe disabling of caches when
> this is required for booting an OS. Reenabling caches is much
> harder to implement if an optional coherency manager must be
> supported. As there is no real use-case anyway, dcache_enable
> is implemented with an error message.
> 
> Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>

Many thanks for working on this. I'll be doing some more test
later this week using this series. One comment though directly:

A few weeks ago I wanted to enable the "cache" cmd (CMD_CACHE)
on my MT7688 MIPS platform. Unfortunately some I-Cache functions
are missing for this:

building ...
cmd/built-in.o: In function `do_icache':
cmd/cache.c:(.text.do_icache+0x48): undefined reference to `icache_disable'
cmd/cache.c:(.text.do_icache+0x68): undefined reference to `icache_enable'
cmd/cache.c:(.text.do_icache+0x88): undefined reference to `icache_status'
Makefile:1350: recipe for target 'u-boot' failed

Would it be possible to add those functions as well to this
series (or some follow-up patch)? Using the cache cmd can be
quite helpful while testing / debugging.

Thanks,
Stefan

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

* [U-Boot] [PATCH v1 1/4] MIPS: cache: reimplement dcache_[status, enable, disable]
  2018-09-10  5:34   ` Stefan Roese
@ 2018-09-11 14:12     ` Daniel Schwierzeck
  2018-09-11 14:30       ` Stefan Roese
  0 siblings, 1 reply; 9+ messages in thread
From: Daniel Schwierzeck @ 2018-09-11 14:12 UTC (permalink / raw)
  To: u-boot

Am Mo., 10. Sep. 2018 um 07:34 Uhr schrieb Stefan Roese <sr@denx.de>:
>
> Hi Daniel,
>
> On 07.09.2018 19:02, Daniel Schwierzeck wrote:
> > Those functions are not needed during cache init and can be
> > implemented in C. Only support the safe disabling of caches when
> > this is required for booting an OS. Reenabling caches is much
> > harder to implement if an optional coherency manager must be
> > supported. As there is no real use-case anyway, dcache_enable
> > is implemented with an error message.
> >
> > Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
>
> Many thanks for working on this. I'll be doing some more test
> later this week using this series. One comment though directly:
>
> A few weeks ago I wanted to enable the "cache" cmd (CMD_CACHE)
> on my MT7688 MIPS platform. Unfortunately some I-Cache functions
> are missing for this:
>
> building ...
> cmd/built-in.o: In function `do_icache':
> cmd/cache.c:(.text.do_icache+0x48): undefined reference to `icache_disable'
> cmd/cache.c:(.text.do_icache+0x68): undefined reference to `icache_enable'
> cmd/cache.c:(.text.do_icache+0x88): undefined reference to `icache_status'
> Makefile:1350: recipe for target 'u-boot' failed
>
> Would it be possible to add those functions as well to this
> series (or some follow-up patch)? Using the cache cmd can be
> quite helpful while testing / debugging.
>

The problem is that you can't independently disable I-Cache and
D-Cache on MIPS. I could add them as dummy functions or with the same
implementation as dcache_*

-- 
- Daniel

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

* [U-Boot] [PATCH v1 1/4] MIPS: cache: reimplement dcache_[status, enable, disable]
  2018-09-11 14:12     ` Daniel Schwierzeck
@ 2018-09-11 14:30       ` Stefan Roese
  2018-09-11 15:53         ` Daniel Schwierzeck
  0 siblings, 1 reply; 9+ messages in thread
From: Stefan Roese @ 2018-09-11 14:30 UTC (permalink / raw)
  To: u-boot

On 11.09.2018 16:12, Daniel Schwierzeck wrote:
> Am Mo., 10. Sep. 2018 um 07:34 Uhr schrieb Stefan Roese <sr@denx.de>:
>>
>> Hi Daniel,
>>
>> On 07.09.2018 19:02, Daniel Schwierzeck wrote:
>>> Those functions are not needed during cache init and can be
>>> implemented in C. Only support the safe disabling of caches when
>>> this is required for booting an OS. Reenabling caches is much
>>> harder to implement if an optional coherency manager must be
>>> supported. As there is no real use-case anyway, dcache_enable
>>> is implemented with an error message.
>>>
>>> Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
>>
>> Many thanks for working on this. I'll be doing some more test
>> later this week using this series. One comment though directly:
>>
>> A few weeks ago I wanted to enable the "cache" cmd (CMD_CACHE)
>> on my MT7688 MIPS platform. Unfortunately some I-Cache functions
>> are missing for this:
>>
>> building ...
>> cmd/built-in.o: In function `do_icache':
>> cmd/cache.c:(.text.do_icache+0x48): undefined reference to `icache_disable'
>> cmd/cache.c:(.text.do_icache+0x68): undefined reference to `icache_enable'
>> cmd/cache.c:(.text.do_icache+0x88): undefined reference to `icache_status'
>> Makefile:1350: recipe for target 'u-boot' failed
>>
>> Would it be possible to add those functions as well to this
>> series (or some follow-up patch)? Using the cache cmd can be
>> quite helpful while testing / debugging.
>>
> 
> The problem is that you can't independently disable I-Cache and
> D-Cache on MIPS.

Why is this the case? Can't the I-Cache be disabled at all? Or
is it just not possible (or complex) while running with I-Cache
enabled?

> I could add them as dummy functions or with the same
> implementation as dcache_*

That's perhaps a pragmatic work-around - if the I-Cache can't be
disabled at all.

Thanks,
Stefan

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

* [U-Boot] [PATCH v1 1/4] MIPS: cache: reimplement dcache_[status, enable, disable]
  2018-09-11 14:30       ` Stefan Roese
@ 2018-09-11 15:53         ` Daniel Schwierzeck
  0 siblings, 0 replies; 9+ messages in thread
From: Daniel Schwierzeck @ 2018-09-11 15:53 UTC (permalink / raw)
  To: u-boot

Am Di., 11. Sep. 2018 um 16:30 Uhr schrieb Stefan Roese <sr@denx.de>:
>
> On 11.09.2018 16:12, Daniel Schwierzeck wrote:
> > Am Mo., 10. Sep. 2018 um 07:34 Uhr schrieb Stefan Roese <sr@denx.de>:
> >>
> >> Hi Daniel,
> >>
> >> On 07.09.2018 19:02, Daniel Schwierzeck wrote:
> >>> Those functions are not needed during cache init and can be
> >>> implemented in C. Only support the safe disabling of caches when
> >>> this is required for booting an OS. Reenabling caches is much
> >>> harder to implement if an optional coherency manager must be
> >>> supported. As there is no real use-case anyway, dcache_enable
> >>> is implemented with an error message.
> >>>
> >>> Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
> >>
> >> Many thanks for working on this. I'll be doing some more test
> >> later this week using this series. One comment though directly:
> >>
> >> A few weeks ago I wanted to enable the "cache" cmd (CMD_CACHE)
> >> on my MT7688 MIPS platform. Unfortunately some I-Cache functions
> >> are missing for this:
> >>
> >> building ...
> >> cmd/built-in.o: In function `do_icache':
> >> cmd/cache.c:(.text.do_icache+0x48): undefined reference to `icache_disable'
> >> cmd/cache.c:(.text.do_icache+0x68): undefined reference to `icache_enable'
> >> cmd/cache.c:(.text.do_icache+0x88): undefined reference to `icache_status'
> >> Makefile:1350: recipe for target 'u-boot' failed
> >>
> >> Would it be possible to add those functions as well to this
> >> series (or some follow-up patch)? Using the cache cmd can be
> >> quite helpful while testing / debugging.
> >>
> >
> > The problem is that you can't independently disable I-Cache and
> > D-Cache on MIPS.
>
> Why is this the case? Can't the I-Cache be disabled at all? Or
> is it just not possible (or complex) while running with I-Cache
> enabled?

you can only configure the "Cache Coherency Algorithm" in Coprocessor
0 Config register. This setting affects I-Cache and D-Cache at once.

Maybe a workaround for icache_[en|dis]able could be to shift the
instruction pointer from KSEG0 to KSEG1. This is the same principle
you had with ddr_calibrate() in your first iteration of MT76xx patch
series.

>
> > I could add them as dummy functions or with the same
> > implementation as dcache_*
>
> That's perhaps a pragmatic work-around - if the I-Cache can't be
> disabled at all.
>
> Thanks,
> Stefan



--
- Daniel

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

end of thread, other threads:[~2018-09-11 15:53 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-09-07 17:02 [U-Boot] [PATCH v1 0/4] MIPS: optimise cache initialization Daniel Schwierzeck
2018-09-07 17:02 ` [U-Boot] [PATCH v1 1/4] MIPS: cache: reimplement dcache_[status, enable, disable] Daniel Schwierzeck
2018-09-10  5:34   ` Stefan Roese
2018-09-11 14:12     ` Daniel Schwierzeck
2018-09-11 14:30       ` Stefan Roese
2018-09-11 15:53         ` Daniel Schwierzeck
2018-09-07 17:02 ` [U-Boot] [PATCH v1 2/4] MIPS: cache: optimise changing of k0 CCA mode Daniel Schwierzeck
2018-09-07 17:02 ` [U-Boot] [PATCH v1 3/4] MIPS: cache: make index base address configurable Daniel Schwierzeck
2018-09-07 17:02 ` [U-Boot] [PATCH v1 4/4] MIPS: cache: remove config option CONFIG_SYS_MIPS_CACHE_MODE Daniel Schwierzeck

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.