* [U-Boot] [PATCH 0/5] MIPS Release 6 Support
@ 2016-05-16 9:52 Paul Burton
2016-05-16 9:52 ` [U-Boot] [PATCH 1/5] MIPS: Use unchecked immediate addition/subtraction Paul Burton
` (5 more replies)
0 siblings, 6 replies; 7+ messages in thread
From: Paul Burton @ 2016-05-16 9:52 UTC (permalink / raw)
To: u-boot
This series introduces support for building U-Boot for release 6 of the
MIPS architecture. This is supported by CPUs such as the M62xx, I6400 &
P6600 as well as by emulators such as QEMU.
Paul Burton (5):
MIPS: Use unchecked immediate addition/subtraction
MIPS: Simplify CONFIG_SYS_CPU values
MIPS: Support for targetting MIPSr6
malta: Remove ".set mips32" directive
malta: Support MIPS32r6 configurations
arch/mips/Kconfig | 39 ++++++++++++++++++++++++++++++--------
arch/mips/Makefile | 2 ++
arch/mips/cpu/start.S | 22 +++++++++++----------
arch/mips/lib/cache_init.S | 2 +-
board/imgtec/malta/lowlevel_init.S | 1 -
5 files changed, 46 insertions(+), 20 deletions(-)
--
2.8.2
^ permalink raw reply [flat|nested] 7+ messages in thread
* [U-Boot] [PATCH 1/5] MIPS: Use unchecked immediate addition/subtraction
2016-05-16 9:52 [U-Boot] [PATCH 0/5] MIPS Release 6 Support Paul Burton
@ 2016-05-16 9:52 ` Paul Burton
2016-05-16 9:52 ` [U-Boot] [PATCH 2/5] MIPS: Simplify CONFIG_SYS_CPU values Paul Burton
` (4 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Paul Burton @ 2016-05-16 9:52 UTC (permalink / raw)
To: u-boot
In MIPS assembly there have historically been 2 variants of immediate
addition - the standard "addi" which traps if an overflow occurs, and
the unchecked "addiu" which does not trap on overflow. In release 6 of
the MIPS architecture the trapping variants of immediate addition &
subtraction have been removed. In preparation for supporting MIPSr6,
stop using the trapping instructions from assembly & switch to their
unchecked variants.
Signed-off-by: Paul Burton <paul.burton@imgtec.com>
---
arch/mips/cpu/start.S | 22 ++++++++++++----------
arch/mips/lib/cache_init.S | 2 +-
2 files changed, 13 insertions(+), 11 deletions(-)
diff --git a/arch/mips/cpu/start.S b/arch/mips/cpu/start.S
index 1b56ca3..fc6dd66 100644
--- a/arch/mips/cpu/start.S
+++ b/arch/mips/cpu/start.S
@@ -164,12 +164,14 @@ reset:
li t0, -16
PTR_LI t1, CONFIG_SYS_INIT_SP_ADDR
and sp, t1, t0 # force 16 byte alignment
- PTR_SUB sp, sp, GD_SIZE # reserve space for gd
+ PTR_SUBU \
+ sp, sp, GD_SIZE # reserve space for gd
and sp, sp, t0 # force 16 byte alignment
move k0, sp # save gd pointer
#ifdef CONFIG_SYS_MALLOC_F_LEN
li t2, CONFIG_SYS_MALLOC_F_LEN
- PTR_SUB sp, sp, t2 # reserve space for early malloc
+ PTR_SUBU \
+ sp, sp, t2 # reserve space for early malloc
and sp, sp, t0 # force 16 byte alignment
#endif
move fp, sp
@@ -179,7 +181,7 @@ reset:
1:
PTR_S zero, 0(t0)
blt t0, t1, 1b
- PTR_ADDI t0, PTRSIZE
+ PTR_ADDIU t0, PTRSIZE
#ifdef CONFIG_SYS_MALLOC_F_LEN
PTR_S sp, GD_MALLOC_BASE(k0) # gd->malloc_base offset
@@ -237,7 +239,7 @@ ENTRY(relocate_code)
move a0, s2 # a0 <-- destination address
/* Jump to where we've relocated ourselves */
- PTR_ADDI t0, s2, in_ram - _start
+ PTR_ADDIU t0, s2, in_ram - _start
jr t0
nop
@@ -257,7 +259,7 @@ in_ram:
PTR_L t3, -(1 * PTRSIZE)(t0) # t3 <-- num_got_entries
PTR_L t8, -(2 * PTRSIZE)(t0) # t8 <-- _GLOBAL_OFFSET_TABLE_
PTR_ADD t8, s1 # t8 now holds relocated _G_O_T_
- PTR_ADDI t8, t8, 2 * PTRSIZE # skipping first two entries
+ PTR_ADDIU t8, t8, 2 * PTRSIZE # skipping first two entries
PTR_LI t2, 2
1:
PTR_L t1, 0(t8)
@@ -265,16 +267,16 @@ in_ram:
PTR_ADD t1, s1
PTR_S t1, 0(t8)
2:
- PTR_ADDI t2, 1
+ PTR_ADDIU t2, 1
blt t2, t3, 1b
- PTR_ADDI t8, PTRSIZE
+ PTR_ADDIU t8, PTRSIZE
/* Update dynamic relocations */
PTR_L t1, -(4 * PTRSIZE)(t0) # t1 <-- __rel_dyn_start
PTR_L t2, -(5 * PTRSIZE)(t0) # t2 <-- __rel_dyn_end
b 2f # skip first reserved entry
- PTR_ADDI t1, 2 * PTRSIZE
+ PTR_ADDIU t1, 2 * PTRSIZE
1:
lw t8, -4(t1) # t8 <-- relocation info
@@ -293,7 +295,7 @@ in_ram:
2:
blt t1, t2, 1b
- PTR_ADDI t1, 2 * PTRSIZE # each rel.dyn entry is 2*PTRSIZE bytes
+ PTR_ADDIU t1, 2 * PTRSIZE # each rel.dyn entry is 2*PTRSIZE bytes
/*
* Clear BSS
@@ -307,7 +309,7 @@ in_ram:
1:
PTR_S zero, 0(t1)
blt t1, t2, 1b
- PTR_ADDI t1, PTRSIZE
+ PTR_ADDIU t1, PTRSIZE
move a0, s0 # a0 <-- gd
move a1, s2
diff --git a/arch/mips/lib/cache_init.S b/arch/mips/lib/cache_init.S
index 14cc2c4..08b7c3a 100644
--- a/arch/mips/lib/cache_init.S
+++ b/arch/mips/lib/cache_init.S
@@ -64,7 +64,7 @@
/* detect associativity */
srl \sz, $1, \off + MIPS_CONF1_DA_SHF - MIPS_CONF1_DA_SHF
andi \sz, \sz, (MIPS_CONF1_DA >> MIPS_CONF1_DA_SHF)
- addi \sz, \sz, 1
+ addiu \sz, \sz, 1
/* sz *= line_sz */
mul \sz, \sz, \line_sz
--
2.8.2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [U-Boot] [PATCH 2/5] MIPS: Simplify CONFIG_SYS_CPU values
2016-05-16 9:52 [U-Boot] [PATCH 0/5] MIPS Release 6 Support Paul Burton
2016-05-16 9:52 ` [U-Boot] [PATCH 1/5] MIPS: Use unchecked immediate addition/subtraction Paul Burton
@ 2016-05-16 9:52 ` Paul Burton
2016-05-16 9:52 ` [U-Boot] [PATCH 3/5] MIPS: Support for targetting MIPSr6 Paul Burton
` (3 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Paul Burton @ 2016-05-16 9:52 UTC (permalink / raw)
To: u-boot
Rather than having the values for CONFIG_SYS_CPU depend upon each
architecture revision, have them depend upon the more general
CONFIG_CPU_MIPS32 & CONFIG_CPU_MIPS64 which in turn depend upon the
architecture revisions.
This is done in preparation for adding MIPSr6 support, which would
otherwise need to introduce new cases here.
Signed-off-by: Paul Burton <paul.burton@imgtec.com>
---
arch/mips/Kconfig | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index fe37d1f..0520b30 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -5,8 +5,8 @@ config SYS_ARCH
default "mips"
config SYS_CPU
- default "mips32" if CPU_MIPS32_R1 || CPU_MIPS32_R2
- default "mips64" if CPU_MIPS64_R1 || CPU_MIPS64_R2
+ default "mips32" if CPU_MIPS32
+ default "mips64" if CPU_MIPS64
choice
prompt "Target select"
--
2.8.2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [U-Boot] [PATCH 3/5] MIPS: Support for targetting MIPSr6
2016-05-16 9:52 [U-Boot] [PATCH 0/5] MIPS Release 6 Support Paul Burton
2016-05-16 9:52 ` [U-Boot] [PATCH 1/5] MIPS: Use unchecked immediate addition/subtraction Paul Burton
2016-05-16 9:52 ` [U-Boot] [PATCH 2/5] MIPS: Simplify CONFIG_SYS_CPU values Paul Burton
@ 2016-05-16 9:52 ` Paul Burton
2016-05-16 9:52 ` [U-Boot] [PATCH 4/5] malta: Remove ".set mips32" directive Paul Burton
` (2 subsequent siblings)
5 siblings, 0 replies; 7+ messages in thread
From: Paul Burton @ 2016-05-16 9:52 UTC (permalink / raw)
To: u-boot
Add support for targetting MIPS32r6 & MIPS64r6 systems, in the same way
that we currently select release 1 or release 2 targets. MIPSr6 is not
entirely backwards compatible with earlier releases of the architecture.
Some instructions are encoded differently, some are removed, some are
reused, so it is not practical to run U-Boot built for earlier revisions
on a MIPSr6 system. Update their Kconfig help text to reflect that.
Signed-off-by: Paul Burton <paul.burton@imgtec.com>
---
arch/mips/Kconfig | 34 ++++++++++++++++++++++++++++------
arch/mips/Makefile | 2 ++
2 files changed, 30 insertions(+), 6 deletions(-)
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index 0520b30..e53fa83 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -98,7 +98,7 @@ config CPU_MIPS32_R1
depends on SUPPORTS_CPU_MIPS32_R1
select 32BIT
help
- Choose this option to build an U-Boot for release 1 or later of the
+ Choose this option to build an U-Boot for release 1 through 5 of the
MIPS32 architecture.
config CPU_MIPS32_R2
@@ -106,7 +106,15 @@ config CPU_MIPS32_R2
depends on SUPPORTS_CPU_MIPS32_R2
select 32BIT
help
- Choose this option to build an U-Boot for release 2 or later of the
+ Choose this option to build an U-Boot for release 2 through 5 of the
+ MIPS32 architecture.
+
+config CPU_MIPS32_R6
+ bool "MIPS32 Release 6"
+ depends on SUPPORTS_CPU_MIPS32_R6
+ select 32BIT
+ help
+ Choose this option to build an U-Boot for release 6 or later of the
MIPS32 architecture.
config CPU_MIPS64_R1
@@ -114,7 +122,7 @@ config CPU_MIPS64_R1
depends on SUPPORTS_CPU_MIPS64_R1
select 64BIT
help
- Choose this option to build a kernel for release 1 or later of the
+ Choose this option to build a kernel for release 1 through 5 of the
MIPS64 architecture.
config CPU_MIPS64_R2
@@ -122,7 +130,15 @@ config CPU_MIPS64_R2
depends on SUPPORTS_CPU_MIPS64_R2
select 64BIT
help
- Choose this option to build a kernel for release 2 or later of the
+ Choose this option to build a kernel for release 2 through 5 of the
+ MIPS64 architecture.
+
+config CPU_MIPS64_R6
+ bool "MIPS64 Release 6"
+ depends on SUPPORTS_CPU_MIPS64_R6
+ select 64BIT
+ help
+ Choose this option to build a kernel for release 6 or later of the
MIPS64 architecture.
endchoice
@@ -169,19 +185,25 @@ config SUPPORTS_CPU_MIPS32_R1
config SUPPORTS_CPU_MIPS32_R2
bool
+config SUPPORTS_CPU_MIPS32_R6
+ bool
+
config SUPPORTS_CPU_MIPS64_R1
bool
config SUPPORTS_CPU_MIPS64_R2
bool
+config SUPPORTS_CPU_MIPS64_R6
+ bool
+
config CPU_MIPS32
bool
- default y if CPU_MIPS32_R1 || CPU_MIPS32_R2
+ default y if CPU_MIPS32_R1 || CPU_MIPS32_R2 || CPU_MIPS32_R6
config CPU_MIPS64
bool
- default y if CPU_MIPS64_R1 || CPU_MIPS64_R2
+ default y if CPU_MIPS64_R1 || CPU_MIPS64_R2 || CPU_MIPS64_R6
config MIPS_TUNE_4KC
bool
diff --git a/arch/mips/Makefile b/arch/mips/Makefile
index aec5a15..c822178 100644
--- a/arch/mips/Makefile
+++ b/arch/mips/Makefile
@@ -18,8 +18,10 @@ PLATFORM_CPPFLAGS += $(patsubst %,-I$(srctree)/%include,$(machdirs))
# Optimize for MIPS architectures
arch-$(CONFIG_CPU_MIPS32_R1) += -march=mips32 -Wa,-mips32
arch-$(CONFIG_CPU_MIPS32_R2) += -march=mips32r2 -Wa,-mips32r2
+arch-$(CONFIG_CPU_MIPS32_R6) += -march=mips32r6 -Wa,-mips32r6
arch-$(CONFIG_CPU_MIPS64_R1) += -march=mips64 -Wa,-mips64
arch-$(CONFIG_CPU_MIPS64_R2) += -march=mips64r2 -Wa,-mips64r2
+arch-$(CONFIG_CPU_MIPS64_R6) += -march=mips64r6 -Wa,-mips64r6
# Allow extra optimization for specific CPUs/SoCs
tune-$(CONFIG_MIPS_TUNE_4KC) += -mtune=4kc
--
2.8.2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [U-Boot] [PATCH 4/5] malta: Remove ".set mips32" directive
2016-05-16 9:52 [U-Boot] [PATCH 0/5] MIPS Release 6 Support Paul Burton
` (2 preceding siblings ...)
2016-05-16 9:52 ` [U-Boot] [PATCH 3/5] MIPS: Support for targetting MIPSr6 Paul Burton
@ 2016-05-16 9:52 ` Paul Burton
2016-05-16 9:52 ` [U-Boot] [PATCH 5/5] malta: Support MIPS32r6 configurations Paul Burton
2016-05-16 13:23 ` [U-Boot] [PATCH 0/5] MIPS Release 6 Support Daniel Schwierzeck
5 siblings, 0 replies; 7+ messages in thread
From: Paul Burton @ 2016-05-16 9:52 UTC (permalink / raw)
To: u-boot
We always build for a mips32 or higher ISA, so this ".set mips32"
directive is redundant. Once MIPSr6 support is added it will become
harmful since some instruction encodings change & this directive will
cause the older encodings to be incorrectly emitted instead of the
appropriate ones for the build.
In preparation for supporting MIPSr6, remove this redundant directive.
Signed-off-by: Paul Burton <paul.burton@imgtec.com>
---
board/imgtec/malta/lowlevel_init.S | 1 -
1 file changed, 1 deletion(-)
diff --git a/board/imgtec/malta/lowlevel_init.S b/board/imgtec/malta/lowlevel_init.S
index ae09c27..534db1d 100644
--- a/board/imgtec/malta/lowlevel_init.S
+++ b/board/imgtec/malta/lowlevel_init.S
@@ -24,7 +24,6 @@
.text
.set noreorder
- .set mips32
.globl lowlevel_init
lowlevel_init:
--
2.8.2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [U-Boot] [PATCH 5/5] malta: Support MIPS32r6 configurations
2016-05-16 9:52 [U-Boot] [PATCH 0/5] MIPS Release 6 Support Paul Burton
` (3 preceding siblings ...)
2016-05-16 9:52 ` [U-Boot] [PATCH 4/5] malta: Remove ".set mips32" directive Paul Burton
@ 2016-05-16 9:52 ` Paul Burton
2016-05-16 13:23 ` [U-Boot] [PATCH 0/5] MIPS Release 6 Support Daniel Schwierzeck
5 siblings, 0 replies; 7+ messages in thread
From: Paul Burton @ 2016-05-16 9:52 UTC (permalink / raw)
To: u-boot
Both real Malta boards & QEMU's Malta emulation can feature MIPS32r6
CPUs. Allow building U-Boot for such systems by selecting
CONFIG_SUPPORTS_CPU_MIPS32_R6 for Malta.
Signed-off-by: Paul Burton <paul.burton@imgtec.com>
---
arch/mips/Kconfig | 1 +
1 file changed, 1 insertion(+)
diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
index e53fa83..fbf3e4c 100644
--- a/arch/mips/Kconfig
+++ b/arch/mips/Kconfig
@@ -28,6 +28,7 @@ config TARGET_MALTA
select SUPPORTS_LITTLE_ENDIAN
select SUPPORTS_CPU_MIPS32_R1
select SUPPORTS_CPU_MIPS32_R2
+ select SUPPORTS_CPU_MIPS32_R6
select SWAP_IO_SPACE
select MIPS_L1_CACHE_SHIFT_6
--
2.8.2
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [U-Boot] [PATCH 0/5] MIPS Release 6 Support
2016-05-16 9:52 [U-Boot] [PATCH 0/5] MIPS Release 6 Support Paul Burton
` (4 preceding siblings ...)
2016-05-16 9:52 ` [U-Boot] [PATCH 5/5] malta: Support MIPS32r6 configurations Paul Burton
@ 2016-05-16 13:23 ` Daniel Schwierzeck
5 siblings, 0 replies; 7+ messages in thread
From: Daniel Schwierzeck @ 2016-05-16 13:23 UTC (permalink / raw)
To: u-boot
Am 16.05.2016 um 11:52 schrieb Paul Burton:
> This series introduces support for building U-Boot for release 6 of the
> MIPS architecture. This is supported by CPUs such as the M62xx, I6400 &
> P6600 as well as by emulators such as QEMU.
>
> Paul Burton (5):
> MIPS: Use unchecked immediate addition/subtraction
> MIPS: Simplify CONFIG_SYS_CPU values
> MIPS: Support for targetting MIPSr6
> malta: Remove ".set mips32" directive
> malta: Support MIPS32r6 configurations
>
> arch/mips/Kconfig | 39 ++++++++++++++++++++++++++++++--------
> arch/mips/Makefile | 2 ++
> arch/mips/cpu/start.S | 22 +++++++++++----------
> arch/mips/lib/cache_init.S | 2 +-
> board/imgtec/malta/lowlevel_init.S | 1 -
> 5 files changed, 46 insertions(+), 20 deletions(-)
>
all patches applied to u-boot-mips/next, thanks
--
- Daniel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: OpenPGP digital signature
URL: <http://lists.denx.de/pipermail/u-boot/attachments/20160516/9f507c76/attachment.sig>
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2016-05-16 13:23 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2016-05-16 9:52 [U-Boot] [PATCH 0/5] MIPS Release 6 Support Paul Burton
2016-05-16 9:52 ` [U-Boot] [PATCH 1/5] MIPS: Use unchecked immediate addition/subtraction Paul Burton
2016-05-16 9:52 ` [U-Boot] [PATCH 2/5] MIPS: Simplify CONFIG_SYS_CPU values Paul Burton
2016-05-16 9:52 ` [U-Boot] [PATCH 3/5] MIPS: Support for targetting MIPSr6 Paul Burton
2016-05-16 9:52 ` [U-Boot] [PATCH 4/5] malta: Remove ".set mips32" directive Paul Burton
2016-05-16 9:52 ` [U-Boot] [PATCH 5/5] malta: Support MIPS32r6 configurations Paul Burton
2016-05-16 13:23 ` [U-Boot] [PATCH 0/5] MIPS Release 6 Support Daniel Schwierzeck
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox