nios2: set default cache configuration in start.S
PATCH 1/1 nios2: set default cache configuration in start.S
Set default icache and dcache configuration for start.S. The values are chosen so that it will work for most configurations. During initialization, cpu information will be extracted from device tree. Then cache flush operations will have correct cache configurations.
--- arch/nios2/cpu/start.S | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-)
arch/nios2/cpu/start.S +15 -7
@@ -9,6 +9,15 @@ #include <config.h> #include <version.h> +/* + * icache and dcache configuration used only for start.S. + * the values are chosen so that it will work for all configuration. + */ +#define ICACHE_LINE_SIZE 32 /* fixed 32 */ +#define ICACHE_SIZE_MAX 0x10000 /* 64k max */ +#define DCACHE_LINE_SIZE_MIN 4 /* 4, 16, 32 */ +#define DCACHE_SIZE_MAX 0x10000 /* 64k max */ + /************************************************************************* * RESTART ************************************************************************/
@@ -25,9 +34,9 @@ _start: * just be invalidating the cache a second time. If cache * is not implemented initi behaves as nop. */ - ori r4, r0, %lo(CONFIG_SYS_ICACHELINE_SIZE) - movhi r5, %hi(CONFIG_SYS_ICACHE_SIZE) - ori r5, r5, %lo(CONFIG_SYS_ICACHE_SIZE) + ori r4, r0, %lo(ICACHE_LINE_SIZE) + movhi r5, %hi(ICACHE_SIZE_MAX) + ori r5, r5, %lo(ICACHE_SIZE_MAX) 0: initi r5 sub r5, r5, r4 bgt r5, r0, 0b
@@ -54,10 +63,9 @@ _except_end: * DCACHE INIT -- if dcache not implemented, initd behaves as * nop. */ - movhi r4, %hi(CONFIG_SYS_DCACHELINE_SIZE) - ori r4, r4, %lo(CONFIG_SYS_DCACHELINE_SIZE) - movhi r5, %hi(CONFIG_SYS_DCACHE_SIZE) - ori r5, r5, %lo(CONFIG_SYS_DCACHE_SIZE) + ori r4, r0, %lo(DCACHE_LINE_SIZE_MIN) + movhi r5, %hi(DCACHE_SIZE_MAX) + ori r5, r5, %lo(DCACHE_SIZE_MAX) mov r6, r0 1: initd 0(r6) add r6, r6, r4
Signature · 1 line
2.1.4
PATCH 1/1 nios2: set default cache configuration in start.S
Quoted 48 lines · Thomas Chou
Set default icache and dcache configuration for
start.S. The values are chosen so that it will work for most configurations. During initialization, cpu information will be extracted from device tree. Then cache flush operations will have correct cache configurations.Signed-off-by Thomas Chou <[email protected]>--- arch/nios2/cpu/start.S | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-)arch/nios2/cpu/start.S +12
-3@@ -9,6 +9,15 @@ #include <config.h> #include <version.h> +/* + * icache and dcache configuration used only for start.S. + * the values are chosen so that it will work for all configuration. + */ +#define ICACHE_LINE_SIZE 32 /* fixed 32 */ +#define ICACHE_SIZE_MAX 0x10000 /* 64k max */ +#define DCACHE_LINE_SIZE_MIN 4 /* 4, 16, 32 */ +#define DCACHE_SIZE_MAX 0x10000 /* 64k max */ + /************************************************************************* * RESTART ************************************************************************/@@ -25,9 +34,9 @@ _start: * just be invalidating the cache a second time. If cache * is not implemented initi behaves as nop. */ - ori r4, r0, %lo(CONFIG_SYS_ICACHELINE_SIZE) - movhi r5, %hi(CONFIG_SYS_ICACHE_SIZE) - ori r5, r5, %lo(CONFIG_SYS_ICACHE_SIZE) + ori r4, r0, %lo(ICACHE_LINE_SIZE) + movhi r5, %hi(ICACHE_SIZE_MAX) + ori r5, r5, %lo(ICACHE_SIZE_MAX) 0: initi r5 sub r5, r5, r4 bgt r5, r0, 0b@@ -54,10 +63,9 @@ _except_end: * DCACHE INIT -- if dcache not implemented, initd behaves as * nop. */
arch/nios2/cpu/start.S _except_end: · line 71
Quoted 10 lines
arch/nios2/cpu/start.S +3
-4- movhi r4, %hi(CONFIG_SYS_DCACHELINE_SIZE) - ori r4, r4, %lo(CONFIG_SYS_DCACHELINE_SIZE) - movhi r5, %hi(CONFIG_SYS_DCACHE_SIZE) - ori r5, r5, %lo(CONFIG_SYS_DCACHE_SIZE) + ori r4, r0, %lo(DCACHE_LINE_SIZE_MIN) + movhi r5, %hi(DCACHE_SIZE_MAX) + ori r5, r5, %lo(DCACHE_SIZE_MAX) mov r6, r0 1: initd 0(r6) add r6, r6, r4
Did I miss the DT part somewhere or is that not part of this patch ?
Another question I have is -- why don't we set CONFIG_SYS_{I,D}CACHE_SIZE to maximum value? This should work for all nios2 cache configurations and it should also be correct, no ? Speed might be a bit of an issue here, but I doubt the impact would be that large.
Best regards,
Marek Vasut
PATCH 1/1 nios2: set default cache configuration in start.S
Hi Marek,
Quoted 1 line · Marek Vasut
Did I miss the DT part somewhere or is that not part of this patch ?
As we are just barely starting from reset, there is no luxury of DT. After this, DT will be used with the cache flush patch.
Quoted 4 lines
Another question I have is -- why don't we set CONFIG_SYS_{I,D}CACHE_SIZE to maximum value? This should work for all nios2 cache configurations and it should also be correct, no ? Speed might be a bit of an issue here, but I doubt the impact would be that large.
I am doing all the best to get rid of the CONFIG_SYS_{I,D}CACHE_SIZE... So I avoid to use the same macro names. Here I use the maximum value in this startup only. The speed penalty is only once here. After we get DT initialized, we have the correct values of cache configuration.
It might be awful to use the maximum value all the time. See, we flush cache for every eth packet!
Thanks a lot for your review.
Best regards,
Thomas
PATCH 1/1 nios2: set default cache configuration in start.S
Quoted 1 line · Thomas Chou
Hi Marek,
Hi,
Quoted 5 lines · Marek Vasut
Quoted 1 line
Did I miss the DT part somewhere or is that not part of this patch ?
As we are just barely starting from reset, there is no luxury of DT. After this, DT will be used with the cache flush patch.
That's right.
Quoted 9 lines
Quoted 4 lines
Another question I have is -- why don't we set CONFIG_SYS_{I,D}CACHE_SIZE to maximum value? This should work for all nios2 cache configurations and it should also be correct, no ? Speed might be a bit of an issue here, but I doubt the impact would be that large.
I am doing all the best to get rid of the CONFIG_SYS_{I,D}CACHE_SIZE... So I avoid to use the same macro names. Here I use the maximum value in this startup only. The speed penalty is only once here. After we get DT initialized, we have the correct values of cache configuration.
Ah, right. That's good.
Quoted 2 lines
It might be awful to use the maximum value all the time. See, we flush cache for every eth packet!
You should only flush the part where the packet is located ;-) I finally have the MAX10 kit, so I can check the ethernet at least :)
Quoted 1 line
Thanks a lot for your review.
Thanks for keeping up with my weird questions ;-)
Best regards,
Marek Vasut
PATCH 1/1 nios2: set default cache configuration in start.S
Hi Marek,
Quoted 5 lines · Marek Vasut
Quoted 2 lines
It might be awful to use the maximum value all the time. See, we flush cache for every eth packet!
You should only flush the part where the packet is located ;-) I finally have the MAX10 kit, so I can check the ethernet at least :)
Sure. We shall flush only where the packet is located.
Great to know that you got a MAX10 kit. I received a MAX10 kit, too. I am going to convert altera_tse.c to driver model.
I keep all the pending patches on u-boot-nios/next. You may try out. You will need the fdt address translation patch of Stefan, too.
Best regards,
Thomas
PATCH 1/1 nios2: set default cache configuration in start.S
Quoted 1 line · Thomas Chou
Hi Marek,
Hi!
Quoted 7 lines · Marek Vasut
Quoted 5 lines
Quoted 2 lines
It might be awful to use the maximum value all the time. See, we flush cache for every eth packet!
You should only flush the part where the packet is located ;-) I finally have the MAX10 kit, so I can check the ethernet at least :)
Quoted 7 lines
Sure. We shall flush only where the packet is located.
Great to know that you got a MAX10 kit. I received a MAX10 kit, too. I am going to convert
altera_tse.cto driver model.I keep all the pending patches on u-boot-nios/next. You may try out. You will need the fdt address translation patch of Stefan, too.
I'll do it once I handle my email queue, which exploded during ELCE ;-)
Best regards,
Marek Vasut
PATCH v2 1/1 nios2: set default cache configuration in start.S
In reply to Thomas ChouSet default icache and dcache configuration for start.S.
We want to remove the CONFIG_SYS_{I,D}CACHE_SIZE... configuration macros. As we are just barely starting from reset, there is no luxury of device tree.
We will set some maximum cache configuration so that it will work for most configurations. This is used only in this start.S. The speed penalty is only once here.
After start up, during board initialization, cpu information will be extracted from device tree. Then cache flush operations will have correct cache configurations.
---
v2
change commit message.
arch/nios2/cpu/start.S | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-)
arch/nios2/cpu/start.S +15 -7
@@ -9,6 +9,15 @@ #include <config.h> #include <version.h> +/* + * icache and dcache configuration used only for start.S. + * the values are chosen so that it will work for all configuration. + */ +#define ICACHE_LINE_SIZE 32 /* fixed 32 */ +#define ICACHE_SIZE_MAX 0x10000 /* 64k max */ +#define DCACHE_LINE_SIZE_MIN 4 /* 4, 16, 32 */ +#define DCACHE_SIZE_MAX 0x10000 /* 64k max */ + /* RESTART */ .text .global _start, _except_start, _except_end
@@ -22,9 +31,9 @@ _start: * just be invalidating the cache a second time. If cache * is not implemented initi behaves as nop. */ - ori r4, r0, %lo(CONFIG_SYS_ICACHELINE_SIZE) - movhi r5, %hi(CONFIG_SYS_ICACHE_SIZE) - ori r5, r5, %lo(CONFIG_SYS_ICACHE_SIZE) + ori r4, r0, %lo(ICACHE_LINE_SIZE) + movhi r5, %hi(ICACHE_SIZE_MAX) + ori r5, r5, %lo(ICACHE_SIZE_MAX) 0: initi r5 sub r5, r5, r4 bgt r5, r0, 0b
@@ -51,10 +60,9 @@ _except_end: * DCACHE INIT -- if dcache not implemented, initd behaves as * nop. */ - movhi r4, %hi(CONFIG_SYS_DCACHELINE_SIZE) - ori r4, r4, %lo(CONFIG_SYS_DCACHELINE_SIZE) - movhi r5, %hi(CONFIG_SYS_DCACHE_SIZE) - ori r5, r5, %lo(CONFIG_SYS_DCACHE_SIZE) + ori r4, r0, %lo(DCACHE_LINE_SIZE_MIN) + movhi r5, %hi(DCACHE_SIZE_MAX) + ori r5, r5, %lo(DCACHE_SIZE_MAX) mov r6, r0 1: initd 0(r6) add r6, r6, r4
Signature · 1 line
2.1.4
PATCH v2 1/1 nios2: set default cache configuration in start.S
Quoted 10 lines · Thomas Chou
Set default icache and dcache configuration for
start.S.We want to remove the CONFIG_SYS_{I,D}CACHE_SIZE... configuration macros. As we are just barely starting from reset, there is no luxury of device tree.
We will set some maximum cache configuration so that it will work for most configurations. This is used only in this
start.S. The speed penalty is only once here.
Quoted 5 lines
After start up, during board initialization, cpu information will be extracted from device tree. Then cache flush operations will have correct cache configurations.
Signed-off-by Thomas Chou <[email protected]>
Best regards,
Marek Vasut
PATCH v2 1/1 nios2: set default cache configuration in start.S
In reply to Thomas ChouQuoted 14 lines · Thomas Chou
Set default icache and dcache configuration for
start.S.We want to remove the CONFIG_SYS_{I,D}CACHE_SIZE... configuration macros. As we are just barely starting from reset, there is no luxury of device tree.
We will set some maximum cache configuration so that it will work for most configurations. This is used only in this
start.S. The speed penalty is only once here.After start up, during board initialization, cpu information will be extracted from device tree. Then cache flush operations will have correct cache configurations.
Quoted 8 lines
Signed-off-by Thomas Chou <[email protected]>---
v2
change commit message.arch/nios2/cpu/start.S | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-)
Applied to u-boot-nios.