All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 01/10] xilinx: Kconfig: add XILINX_OF_BOARD_DTB_ADDR default value for microblaze
@ 2021-11-30 16:33 Ovidiu Panait
  2021-11-30 16:33 ` [PATCH v2 02/10] microblaze: u-boot.lds: replace __end symbol with _end Ovidiu Panait
                   ` (9 more replies)
  0 siblings, 10 replies; 12+ messages in thread
From: Ovidiu Panait @ 2021-11-30 16:33 UTC (permalink / raw)
  To: u-boot; +Cc: monstr, Ovidiu Panait, Masahiro Yamada

Xilinx board_fdt_blob_setup() implementation makes use of
XILINX_OF_BOARD_DTB_ADDR Kconfig option, but no default value is currently
defined for microblaze. Add one so that microblaze could also be configured
with CONFIG_OF_SEPARATE.

Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
---

(no changes since v1)

 board/xilinx/Kconfig | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/board/xilinx/Kconfig b/board/xilinx/Kconfig
index 64507b5d84..9e69166903 100644
--- a/board/xilinx/Kconfig
+++ b/board/xilinx/Kconfig
@@ -43,7 +43,7 @@ endif
 config XILINX_OF_BOARD_DTB_ADDR
 	hex "Default DTB pickup address"
 	default 0x1000 if ARCH_VERSAL
-	default 0x100000 if ARCH_ZYNQ || ARCH_ZYNQMP
+	default 0x100000 if ARCH_ZYNQ || ARCH_ZYNQMP || MICROBLAZE
 	depends on OF_BOARD || OF_SEPARATE
 	help
 	  Offset in the memory where the board configuration DTB is placed.
-- 
2.25.1


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

* [PATCH v2 02/10] microblaze: u-boot.lds: replace __end symbol with _end
  2021-11-30 16:33 [PATCH v2 01/10] xilinx: Kconfig: add XILINX_OF_BOARD_DTB_ADDR default value for microblaze Ovidiu Panait
@ 2021-11-30 16:33 ` Ovidiu Panait
  2021-11-30 16:33 ` [PATCH v2 03/10] microblaze: spl: add board_boot_order() implementation Ovidiu Panait
                   ` (8 subsequent siblings)
  9 siblings, 0 replies; 12+ messages in thread
From: Ovidiu Panait @ 2021-11-30 16:33 UTC (permalink / raw)
  To: u-boot; +Cc: monstr, Ovidiu Panait

board_fdt_blob_setup() uses the _end symbol to find the dtb in the non-spl
case. In order to allow microblaze builds to compile successfully with
CONFIG_OF_SEPARATE, the _end symbol must be defined. Align microblaze with
the other architectures and use _end symbol rather than __end to mark the
end of the u-boot binary.

Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
---

(no changes since v1)

 arch/microblaze/cpu/start.S             | 4 ++--
 arch/microblaze/cpu/u-boot-spl.lds      | 4 ++--
 arch/microblaze/cpu/u-boot.lds          | 2 +-
 arch/microblaze/include/asm/processor.h | 2 +-
 4 files changed, 6 insertions(+), 6 deletions(-)

diff --git a/arch/microblaze/cpu/start.S b/arch/microblaze/cpu/start.S
index 9479737aa2..463e0feba4 100644
--- a/arch/microblaze/cpu/start.S
+++ b/arch/microblaze/cpu/start.S
@@ -15,7 +15,7 @@
 _start:
 	mts	rmsr, r0	/* disable cache */
 
-	addi	r8, r0, __end
+	addi	r8, r0, _end
 	mts	rslr, r8
 
 #if defined(CONFIG_SPL_BUILD)
@@ -270,7 +270,7 @@ relocate_code:
 	add	r23, r0, r7 /* Move reloc addr to r23 */
 	/* Relocate text and data - r12 temp value */
 	addi	r21, r0, _start
-	addi	r22, r0, __end - 4 /* Include BSS too */
+	addi	r22, r0, _end - 4 /* Include BSS too */
 
 	rsub	r6, r21, r22
 	or	r5, r0, r0
diff --git a/arch/microblaze/cpu/u-boot-spl.lds b/arch/microblaze/cpu/u-boot-spl.lds
index 3387eb7189..7883a64b15 100644
--- a/arch/microblaze/cpu/u-boot-spl.lds
+++ b/arch/microblaze/cpu/u-boot-spl.lds
@@ -53,10 +53,10 @@ SECTIONS
 		. = ALIGN(4);
 		__bss_end = .;
 	}
-	__end = . ;
+	_end = . ;
 }
 
 #if defined(CONFIG_SPL_MAX_FOOTPRINT)
-ASSERT(__end - _start <= (CONFIG_SPL_MAX_FOOTPRINT), \
+ASSERT(_end - _start <= (CONFIG_SPL_MAX_FOOTPRINT), \
         "SPL image plus BSS too big");
 #endif
diff --git a/arch/microblaze/cpu/u-boot.lds b/arch/microblaze/cpu/u-boot.lds
index 5dc09dbad2..2b316cc7f5 100644
--- a/arch/microblaze/cpu/u-boot.lds
+++ b/arch/microblaze/cpu/u-boot.lds
@@ -56,5 +56,5 @@ SECTIONS
 		. = ALIGN(4);
 		__bss_end = .;
 	}
-	__end = . ;
+	_end = . ;
 }
diff --git a/arch/microblaze/include/asm/processor.h b/arch/microblaze/include/asm/processor.h
index 16e0d0ef0a..958018c190 100644
--- a/arch/microblaze/include/asm/processor.h
+++ b/arch/microblaze/include/asm/processor.h
@@ -8,7 +8,7 @@
 
 /* References to section boundaries */
 
-extern char __end[];
+extern char _end[];
 extern char __text_start[];
 
 /* Microblaze board initialization function */
-- 
2.25.1


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

* [PATCH v2 03/10] microblaze: spl: add board_boot_order() implementation
  2021-11-30 16:33 [PATCH v2 01/10] xilinx: Kconfig: add XILINX_OF_BOARD_DTB_ADDR default value for microblaze Ovidiu Panait
  2021-11-30 16:33 ` [PATCH v2 02/10] microblaze: u-boot.lds: replace __end symbol with _end Ovidiu Panait
@ 2021-11-30 16:33 ` Ovidiu Panait
  2021-11-30 16:33 ` [PATCH v2 04/10] microblaze: Kconfig: SPL dependencies fixup Ovidiu Panait
                   ` (7 subsequent siblings)
  9 siblings, 0 replies; 12+ messages in thread
From: Ovidiu Panait @ 2021-11-30 16:33 UTC (permalink / raw)
  To: u-boot; +Cc: monstr, Ovidiu Panait

Microblaze has three boot modes defined in microblaze/include/asm/spl.h,
but only booting from NOR flash is currently useable. Add a custom
board_boot_order() implementation so that RAM and SPI boot modes can also
be selected if the corresponding load-image support is present.

Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
---

(no changes since v1)

 arch/microblaze/cpu/spl.c | 6 ++++--
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/arch/microblaze/cpu/spl.c b/arch/microblaze/cpu/spl.c
index 86522f8447..06d4af99b2 100644
--- a/arch/microblaze/cpu/spl.c
+++ b/arch/microblaze/cpu/spl.c
@@ -15,9 +15,11 @@
 
 bool boot_linux;
 
-u32 spl_boot_device(void)
+void board_boot_order(u32 *spl_boot_list)
 {
-	return BOOT_DEVICE_NOR;
+	spl_boot_list[0] = BOOT_DEVICE_NOR;
+	spl_boot_list[1] = BOOT_DEVICE_RAM;
+	spl_boot_list[2] = BOOT_DEVICE_SPI;
 }
 
 /* Board initialization after bss clearance */
-- 
2.25.1


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

* [PATCH v2 04/10] microblaze: Kconfig: SPL dependencies fixup
  2021-11-30 16:33 [PATCH v2 01/10] xilinx: Kconfig: add XILINX_OF_BOARD_DTB_ADDR default value for microblaze Ovidiu Panait
  2021-11-30 16:33 ` [PATCH v2 02/10] microblaze: u-boot.lds: replace __end symbol with _end Ovidiu Panait
  2021-11-30 16:33 ` [PATCH v2 03/10] microblaze: spl: add board_boot_order() implementation Ovidiu Panait
@ 2021-11-30 16:33 ` Ovidiu Panait
  2021-11-30 16:33 ` [PATCH v2 05/10] microblaze: start.S: use stack space as scratch memory for endian offset Ovidiu Panait
                   ` (6 subsequent siblings)
  9 siblings, 0 replies; 12+ messages in thread
From: Ovidiu Panait @ 2021-11-30 16:33 UTC (permalink / raw)
  To: u-boot; +Cc: monstr, Ovidiu Panait, Masahiro Yamada

Enable SPL_LIBCOMMON_SUPPORT and SPL_LIBGENERIC_SUPPORT if CONFIG_SPL=y, in
order to fix the following link failures:
common/spl/spl.o: in function `board_init_r':
common/spl/spl.c:755: undefined reference to `puts'
...
common/spl/spl.o: in function `board_init_r':
common/spl/spl.c:756: undefined reference to `hang'
common/spl/spl.c:740: undefined reference to `memset'

Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
---

(no changes since v1)

 arch/microblaze/Kconfig | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/arch/microblaze/Kconfig b/arch/microblaze/Kconfig
index 99a17bccb3..a25a95a013 100644
--- a/arch/microblaze/Kconfig
+++ b/arch/microblaze/Kconfig
@@ -15,6 +15,8 @@ config TARGET_MICROBLAZE_GENERIC
 	select DM_SERIAL
 	select OF_CONTROL
 	select SUPPORT_SPL
+	select SPL_LIBCOMMON_SUPPORT if SPL
+	select SPL_LIBGENERIC_SUPPORT if SPL
 	select SYSRESET
 	select DM_SPI
 	select DM_SPI_FLASH
-- 
2.25.1


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

* [PATCH v2 05/10] microblaze: start.S: use stack space as scratch memory for endian offset
  2021-11-30 16:33 [PATCH v2 01/10] xilinx: Kconfig: add XILINX_OF_BOARD_DTB_ADDR default value for microblaze Ovidiu Panait
                   ` (2 preceding siblings ...)
  2021-11-30 16:33 ` [PATCH v2 04/10] microblaze: Kconfig: SPL dependencies fixup Ovidiu Panait
@ 2021-11-30 16:33 ` Ovidiu Panait
  2021-11-30 16:33 ` [PATCH v2 06/10] microblaze: drop CONFIG_SYS_RESET_ADDRESS macro Ovidiu Panait
                   ` (5 subsequent siblings)
  9 siblings, 0 replies; 12+ messages in thread
From: Ovidiu Panait @ 2021-11-30 16:33 UTC (permalink / raw)
  To: u-boot; +Cc: monstr, Ovidiu Panait

To simpify the code, use stack space as scratch memory for endian offset
calculation, rather than saving/restoring the first unused MB vector.

Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
---

(no changes since v1)

 arch/microblaze/cpu/start.S | 6 ++----
 1 file changed, 2 insertions(+), 4 deletions(-)

diff --git a/arch/microblaze/cpu/start.S b/arch/microblaze/cpu/start.S
index 463e0feba4..a1c06108d7 100644
--- a/arch/microblaze/cpu/start.S
+++ b/arch/microblaze/cpu/start.S
@@ -125,10 +125,8 @@ __setup_exceptions:
 	 * 4b) BIG endian - r10 contains 0x0 because 0x2 offset is on addr 0x3
 	 */
 	addik	r6, r0, 0x2 /* BIG/LITTLE endian offset */
-	lwi	r7, r0, 0x28
-	swi	r6, r0, 0x28 /* used first unused MB vector */
-	lbui	r10, r0, 0x28 /* used first unused MB vector */
-	swi	r7, r0, 0x28
+	sw	r6, r1, r0
+	lbu	r10, r1, r0
 
 	/* add opcode instruction for 32bit jump - 2 instruction imm & brai */
 	addi	r2, r0, 0xb0000000	/* hex b000 opcode imm */
-- 
2.25.1


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

* [PATCH v2 06/10] microblaze: drop CONFIG_SYS_RESET_ADDRESS macro
  2021-11-30 16:33 [PATCH v2 01/10] xilinx: Kconfig: add XILINX_OF_BOARD_DTB_ADDR default value for microblaze Ovidiu Panait
                   ` (3 preceding siblings ...)
  2021-11-30 16:33 ` [PATCH v2 05/10] microblaze: start.S: use stack space as scratch memory for endian offset Ovidiu Panait
@ 2021-11-30 16:33 ` Ovidiu Panait
  2021-11-30 16:33 ` [PATCH v2 07/10] microblaze: migrate CONFIG_SYS_USR_EXCEP to Kconfig Ovidiu Panait
                   ` (4 subsequent siblings)
  9 siblings, 0 replies; 12+ messages in thread
From: Ovidiu Panait @ 2021-11-30 16:33 UTC (permalink / raw)
  To: u-boot; +Cc: monstr, Ovidiu Panait

Microblaze is one the last two users of the CONFIG_SYS_RESET_ADDRESS
macro (the other is arch/powerpc/cpu/mpc8xx/cpu.c, but the macro is not
defined anywhere in powerpc code, so it should be removed there too).

Replace CONFIG_SYS_RESET_ADDRESS usage in start.S with
CONFIG_SYS_TEXT_BASE. If the reset address should really be
user-configurable, a new Kconfig option could be added.

Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
---

(no changes since v1)

 arch/microblaze/cpu/start.S          | 4 +---
 include/configs/microblaze-generic.h | 3 ---
 2 files changed, 1 insertion(+), 6 deletions(-)

diff --git a/arch/microblaze/cpu/start.S b/arch/microblaze/cpu/start.S
index a1c06108d7..74ed998c55 100644
--- a/arch/microblaze/cpu/start.S
+++ b/arch/microblaze/cpu/start.S
@@ -132,19 +132,17 @@ __setup_exceptions:
 	addi	r2, r0, 0xb0000000	/* hex b000 opcode imm */
 	addi	r3, r0, 0xb8080000	/* hew b808 opcode brai */
 
-#ifdef CONFIG_SYS_RESET_ADDRESS
 	/* reset address */
 	swi	r2, r0, 0x0	/* reset address - imm opcode */
 	swi	r3, r0, 0x4	/* reset address - brai opcode */
 
-	addik	r6, r0, CONFIG_SYS_RESET_ADDRESS
+	addik	r6, r0, CONFIG_SYS_TEXT_BASE
 	sw	r6, r1, r0
 	lhu	r7, r1, r10
 	rsubi	r8, r10, 0x2
 	sh	r7, r0, r8
 	rsubi	r8, r10, 0x6
 	sh	r6, r0, r8
-#endif
 
 #ifdef CONFIG_SYS_USR_EXCEP
 	/* user_vector_exception */
diff --git a/include/configs/microblaze-generic.h b/include/configs/microblaze-generic.h
index e7882fb607..975580e4d4 100644
--- a/include/configs/microblaze-generic.h
+++ b/include/configs/microblaze-generic.h
@@ -21,9 +21,6 @@
 # define CONFIG_SYS_BAUDRATE_TABLE \
 	{300, 600, 1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200, 230400}
 
-/* setting reset address */
-/*#define	CONFIG_SYS_RESET_ADDRESS	CONFIG_SYS_TEXT_BASE*/
-
 /* Stack location before relocation */
 #define CONFIG_SYS_INIT_SP_OFFSET	(CONFIG_SYS_TEXT_BASE - \
 					 CONFIG_SYS_MALLOC_F_LEN)
-- 
2.25.1


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

* [PATCH v2 07/10] microblaze: migrate CONFIG_SYS_USR_EXCEP to Kconfig
  2021-11-30 16:33 [PATCH v2 01/10] xilinx: Kconfig: add XILINX_OF_BOARD_DTB_ADDR default value for microblaze Ovidiu Panait
                   ` (4 preceding siblings ...)
  2021-11-30 16:33 ` [PATCH v2 06/10] microblaze: drop CONFIG_SYS_RESET_ADDRESS macro Ovidiu Panait
@ 2021-11-30 16:33 ` Ovidiu Panait
  2021-11-30 16:33 ` [PATCH v2 08/10] microblaze: add Kconfig symbol for the vector base address Ovidiu Panait
                   ` (3 subsequent siblings)
  9 siblings, 0 replies; 12+ messages in thread
From: Ovidiu Panait @ 2021-11-30 16:33 UTC (permalink / raw)
  To: u-boot
  Cc: monstr, Ovidiu Panait, Marek Behún, Patrick Delaunay,
	Priyanka Jain, Simon Glass, Stefan Roese

Migrate CONFIG_SYS_USR_EXCEP to Kconfig. Also, rename it to
XILINX_MICROBLAZE0_USR_EXCEP in order to match the naming convention of
microblaze-generic Kconfig options.

Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
---

Changes in v2:
Added Kconfig option description.

 arch/microblaze/cpu/exception.c         | 2 +-
 arch/microblaze/cpu/start.S             | 2 +-
 board/xilinx/microblaze-generic/Kconfig | 9 +++++++++
 include/configs/microblaze-generic.h    | 2 --
 scripts/config_whitelist.txt            | 1 -
 5 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/arch/microblaze/cpu/exception.c b/arch/microblaze/cpu/exception.c
index b8dedc4e19..e9476abedb 100644
--- a/arch/microblaze/cpu/exception.c
+++ b/arch/microblaze/cpu/exception.c
@@ -55,7 +55,7 @@ void _hw_exception_handler (void)
 	hang();
 }
 
-#ifdef CONFIG_SYS_USR_EXCEP
+#if CONFIG_IS_ENABLED(XILINX_MICROBLAZE0_USR_EXCEP)
 void _exception_handler (void)
 {
 	puts("User vector_exception\n");
diff --git a/arch/microblaze/cpu/start.S b/arch/microblaze/cpu/start.S
index 74ed998c55..68f97f426c 100644
--- a/arch/microblaze/cpu/start.S
+++ b/arch/microblaze/cpu/start.S
@@ -144,7 +144,7 @@ __setup_exceptions:
 	rsubi	r8, r10, 0x6
 	sh	r6, r0, r8
 
-#ifdef CONFIG_SYS_USR_EXCEP
+#if CONFIG_IS_ENABLED(XILINX_MICROBLAZE0_USR_EXCEP)
 	/* user_vector_exception */
 	swi	r2, r0, 0x8	/* user vector exception - imm opcode */
 	swi	r3, r0, 0xC	/* user vector exception - brai opcode */
diff --git a/board/xilinx/microblaze-generic/Kconfig b/board/xilinx/microblaze-generic/Kconfig
index f2fa0f72b1..3e3eca0e80 100644
--- a/board/xilinx/microblaze-generic/Kconfig
+++ b/board/xilinx/microblaze-generic/Kconfig
@@ -38,4 +38,13 @@ config XILINX_MICROBLAZE0_HW_VER
 	string "Core version number"
 	default "7.10.d"
 
+config XILINX_MICROBLAZE0_USR_EXCEP
+	bool "MicroBlaze user exception support"
+	default y
+	help
+	  Enable this option in order to install the user exception handler
+	  (_exception_handler routine from arch/microblaze/cpu/exception.c) in
+	  the exception vector table. The user exception vector is located at
+	  C_BASE_VECTORS + 0x8 address.
+
 endif
diff --git a/include/configs/microblaze-generic.h b/include/configs/microblaze-generic.h
index 975580e4d4..28f67e30d5 100644
--- a/include/configs/microblaze-generic.h
+++ b/include/configs/microblaze-generic.h
@@ -54,8 +54,6 @@
 #define	CONFIG_HOSTNAME		"microblaze-generic"
 
 /* architecture dependent code */
-#define	CONFIG_SYS_USR_EXCEP	/* user exception */
-
 #if defined(CONFIG_CMD_PXE) && defined(CONFIG_CMD_DHCP)
 #define BOOT_TARGET_DEVICES_PXE(func)	func(PXE, pxe, na)
 #else
diff --git a/scripts/config_whitelist.txt b/scripts/config_whitelist.txt
index b9c1c61e13..c53c2c3801 100644
--- a/scripts/config_whitelist.txt
+++ b/scripts/config_whitelist.txt
@@ -2870,7 +2870,6 @@ CONFIG_SYS_USE_MMC
 CONFIG_SYS_USE_NAND
 CONFIG_SYS_USE_NANDFLASH
 CONFIG_SYS_USE_NORFLASH
-CONFIG_SYS_USR_EXCEP
 CONFIG_SYS_VCXK_ACKNOWLEDGE_DDR
 CONFIG_SYS_VCXK_ACKNOWLEDGE_PIN
 CONFIG_SYS_VCXK_ACKNOWLEDGE_PORT
-- 
2.25.1


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

* [PATCH v2 08/10] microblaze: add Kconfig symbol for the vector base address
  2021-11-30 16:33 [PATCH v2 01/10] xilinx: Kconfig: add XILINX_OF_BOARD_DTB_ADDR default value for microblaze Ovidiu Panait
                   ` (5 preceding siblings ...)
  2021-11-30 16:33 ` [PATCH v2 07/10] microblaze: migrate CONFIG_SYS_USR_EXCEP to Kconfig Ovidiu Panait
@ 2021-11-30 16:33 ` Ovidiu Panait
  2021-11-30 16:33 ` [PATCH v2 09/10] microblaze: start.S: add support for configurable " Ovidiu Panait
                   ` (2 subsequent siblings)
  9 siblings, 0 replies; 12+ messages in thread
From: Ovidiu Panait @ 2021-11-30 16:33 UTC (permalink / raw)
  To: u-boot; +Cc: monstr, Ovidiu Panait

MicroBlaze vector base address is configurable (hdl C_BASE_VECTORS
configuration parameter). Current code assumes that the reset vector
location is always 0x0.

Add the XILINX_MICROBLAZE0_VECTOR_BASE_ADDR Kconfig option so the user
can adjust the reset vector address.

Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
---

Changes in v2:
Added Kconfig option description.

 board/xilinx/microblaze-generic/Kconfig | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/board/xilinx/microblaze-generic/Kconfig b/board/xilinx/microblaze-generic/Kconfig
index 3e3eca0e80..e31257d335 100644
--- a/board/xilinx/microblaze-generic/Kconfig
+++ b/board/xilinx/microblaze-generic/Kconfig
@@ -47,4 +47,11 @@ config XILINX_MICROBLAZE0_USR_EXCEP
 	  the exception vector table. The user exception vector is located at
 	  C_BASE_VECTORS + 0x8 address.
 
+config XILINX_MICROBLAZE0_VECTOR_BASE_ADDR
+	hex "Location of MicroBlaze vectors"
+	default 0x0
+	help
+	  Memory address location of the exception vector table. It is
+	  configurable via the C_BASE_VECTORS hdl parameter.
+
 endif
-- 
2.25.1


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

* [PATCH v2 09/10] microblaze: start.S: add support for configurable vector base address
  2021-11-30 16:33 [PATCH v2 01/10] xilinx: Kconfig: add XILINX_OF_BOARD_DTB_ADDR default value for microblaze Ovidiu Panait
                   ` (6 preceding siblings ...)
  2021-11-30 16:33 ` [PATCH v2 08/10] microblaze: add Kconfig symbol for the vector base address Ovidiu Panait
@ 2021-11-30 16:33 ` Ovidiu Panait
  2021-11-30 16:33 ` [PATCH v2 10/10] microblaze: branch to base vector address on reset Ovidiu Panait
  2021-12-01 10:10 ` [PATCH v2 01/10] xilinx: Kconfig: add XILINX_OF_BOARD_DTB_ADDR default value for microblaze Michal Simek
  9 siblings, 0 replies; 12+ messages in thread
From: Ovidiu Panait @ 2021-11-30 16:33 UTC (permalink / raw)
  To: u-boot; +Cc: monstr, Ovidiu Panait

Current code assumes that the vector base address is always at 0x0.
However, this value is configurable for MicroBlaze, so update the
__setup_exceptions routine to work with any vector base address.

The r4 register is reserved for the vector base address inside
__setup_exceptions and the function prologe/epilogue are also updated to
save and restore r4.

Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
---

(no changes since v1)

 arch/microblaze/cpu/start.S | 58 ++++++++++++++++++++-----------------
 1 file changed, 32 insertions(+), 26 deletions(-)

diff --git a/arch/microblaze/cpu/start.S b/arch/microblaze/cpu/start.S
index 68f97f426c..645f7cb038 100644
--- a/arch/microblaze/cpu/start.S
+++ b/arch/microblaze/cpu/start.S
@@ -105,15 +105,17 @@ clear_bss:
  * r10: Stores little/big endian offset for vectors
  * r2: Stores imm opcode
  * r3: Stores brai opcode
+ * r4: Stores the vector base address
  */
 __setup_exceptions:
-	addik	r1, r1, -28
+	addik	r1, r1, -32
 	swi	r2, r1, 4
 	swi	r3, r1, 8
-	swi	r6, r1, 12
-	swi	r7, r1, 16
-	swi	r8, r1, 20
-	swi	r10, r1, 24
+	swi	r4, r1, 12
+	swi	r6, r1, 16
+	swi	r7, r1, 20
+	swi	r8, r1, 24
+	swi	r10, r1, 28
 
 	/* Find-out if u-boot is running on BIG/LITTLE endian platform
 	 * There are some steps which is necessary to keep in mind:
@@ -132,22 +134,25 @@ __setup_exceptions:
 	addi	r2, r0, 0xb0000000	/* hex b000 opcode imm */
 	addi	r3, r0, 0xb8080000	/* hew b808 opcode brai */
 
+	/* Store the vector base address in r4 */
+	addi	r4, r0, CONFIG_XILINX_MICROBLAZE0_VECTOR_BASE_ADDR
+
 	/* reset address */
-	swi	r2, r0, 0x0	/* reset address - imm opcode */
-	swi	r3, r0, 0x4	/* reset address - brai opcode */
+	swi	r2, r4, 0x0	/* reset address - imm opcode */
+	swi	r3, r4, 0x4	/* reset address - brai opcode */
 
 	addik	r6, r0, CONFIG_SYS_TEXT_BASE
 	sw	r6, r1, r0
 	lhu	r7, r1, r10
 	rsubi	r8, r10, 0x2
-	sh	r7, r0, r8
+	sh	r7, r4, r8
 	rsubi	r8, r10, 0x6
-	sh	r6, r0, r8
+	sh	r6, r4, r8
 
 #if CONFIG_IS_ENABLED(XILINX_MICROBLAZE0_USR_EXCEP)
 	/* user_vector_exception */
-	swi	r2, r0, 0x8	/* user vector exception - imm opcode */
-	swi	r3, r0, 0xC	/* user vector exception - brai opcode */
+	swi	r2, r4, 0x8	/* user vector exception - imm opcode */
+	swi	r3, r4, 0xC	/* user vector exception - brai opcode */
 
 	addik	r6, r5, _exception_handler
 	sw	r6, r1, r0
@@ -173,42 +178,43 @@ __setup_exceptions:
 	 */
 	lhu	r7, r1, r10
 	rsubi	r8, r10, 0xa
-	sh	r7, r0, r8
+	sh	r7, r4, r8
 	rsubi	r8, r10, 0xe
-	sh	r6, r0, r8
+	sh	r6, r4, r8
 #endif
 
 	/* interrupt_handler */
-	swi	r2, r0, 0x10	/* interrupt - imm opcode */
-	swi	r3, r0, 0x14	/* interrupt - brai opcode */
+	swi	r2, r4, 0x10	/* interrupt - imm opcode */
+	swi	r3, r4, 0x14	/* interrupt - brai opcode */
 
 	addik	r6, r5, _interrupt_handler
 	sw	r6, r1, r0
 	lhu	r7, r1, r10
 	rsubi	r8, r10, 0x12
-	sh	r7, r0, r8
+	sh	r7, r4, r8
 	rsubi	r8, r10, 0x16
-	sh	r6, r0, r8
+	sh	r6, r4, r8
 
 	/* hardware exception */
-	swi	r2, r0, 0x20	/* hardware exception - imm opcode */
-	swi	r3, r0, 0x24	/* hardware exception - brai opcode */
+	swi	r2, r4, 0x20	/* hardware exception - imm opcode */
+	swi	r3, r4, 0x24	/* hardware exception - brai opcode */
 
 	addik	r6, r5, _hw_exception_handler
 	sw	r6, r1, r0
 	lhu	r7, r1, r10
 	rsubi	r8, r10, 0x22
-	sh	r7, r0, r8
+	sh	r7, r4, r8
 	rsubi	r8, r10, 0x26
-	sh	r6, r0, r8
+	sh	r6, r4, r8
 
-	lwi	r10, r1, 24
-	lwi	r8, r1, 20
-	lwi	r7, r1, 16
-	lwi	r6, r1, 12
+	lwi	r10, r1, 28
+	lwi	r8, r1, 24
+	lwi	r7, r1, 20
+	lwi	r6, r1, 16
+	lwi	r4, r1, 12
 	lwi	r3, r1, 8
 	lwi	r2, r1, 4
-	addik	r1, r1, 28
+	addik	r1, r1, 32
 
 	rtsd	r15, 8
 	or	r0, r0, r0
-- 
2.25.1


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

* [PATCH v2 10/10] microblaze: branch to base vector address on reset
  2021-11-30 16:33 [PATCH v2 01/10] xilinx: Kconfig: add XILINX_OF_BOARD_DTB_ADDR default value for microblaze Ovidiu Panait
                   ` (7 preceding siblings ...)
  2021-11-30 16:33 ` [PATCH v2 09/10] microblaze: start.S: add support for configurable " Ovidiu Panait
@ 2021-11-30 16:33 ` Ovidiu Panait
  2021-12-01 10:10 ` [PATCH v2 01/10] xilinx: Kconfig: add XILINX_OF_BOARD_DTB_ADDR default value for microblaze Michal Simek
  9 siblings, 0 replies; 12+ messages in thread
From: Ovidiu Panait @ 2021-11-30 16:33 UTC (permalink / raw)
  To: u-boot; +Cc: monstr, Ovidiu Panait

Current code assumes that the vector base address is always at 0x0.
However, this value is configurable for MicroBlaze using the
CONFIG_XILINX_MICROBLAZE0_VECTOR_BASE_ADDR Kconfig option. Update the
reset routines to branch to this location instead.

Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
---

(no changes since v1)

 arch/microblaze/cpu/spl.c              | 6 ++++--
 drivers/sysreset/sysreset_microblaze.c | 6 ++++--
 2 files changed, 8 insertions(+), 4 deletions(-)

diff --git a/arch/microblaze/cpu/spl.c b/arch/microblaze/cpu/spl.c
index 06d4af99b2..cea6d56f16 100644
--- a/arch/microblaze/cpu/spl.c
+++ b/arch/microblaze/cpu/spl.c
@@ -12,6 +12,7 @@
 #include <spl.h>
 #include <asm/io.h>
 #include <asm/u-boot.h>
+#include <linux/stringify.h>
 
 bool boot_linux;
 
@@ -54,8 +55,9 @@ int spl_start_uboot(void)
 
 int do_reset(struct cmd_tbl *cmdtp, int flag, int argc, char *const argv[])
 {
-	__asm__ __volatile__ ("mts rmsr, r0;" \
-			      "bra r0");
+	__asm__ __volatile__ (
+	    "mts rmsr, r0;" \
+	    "brai " __stringify(CONFIG_XILINX_MICROBLAZE0_VECTOR_BASE_ADDR));
 
 	return 0;
 }
diff --git a/drivers/sysreset/sysreset_microblaze.c b/drivers/sysreset/sysreset_microblaze.c
index 514c95817f..83a7f77ac4 100644
--- a/drivers/sysreset/sysreset_microblaze.c
+++ b/drivers/sysreset/sysreset_microblaze.c
@@ -8,13 +8,15 @@
 #include <errno.h>
 #include <sysreset.h>
 #include <linux/err.h>
+#include <linux/stringify.h>
 
 static int microblaze_sysreset_request(struct udevice *dev,
 				       enum sysreset_t type)
 {
 	puts("Microblaze soft reset sysreset\n");
-	__asm__ __volatile__ ("	mts rmsr, r0;" \
-				"bra r0");
+	__asm__ __volatile__ (
+	    "mts rmsr, r0;" \
+	    "brai " __stringify(CONFIG_XILINX_MICROBLAZE0_VECTOR_BASE_ADDR));
 
 	return -EINPROGRESS;
 }
-- 
2.25.1


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

* Re: [PATCH v2 01/10] xilinx: Kconfig: add XILINX_OF_BOARD_DTB_ADDR default value for microblaze
  2021-11-30 16:33 [PATCH v2 01/10] xilinx: Kconfig: add XILINX_OF_BOARD_DTB_ADDR default value for microblaze Ovidiu Panait
                   ` (8 preceding siblings ...)
  2021-11-30 16:33 ` [PATCH v2 10/10] microblaze: branch to base vector address on reset Ovidiu Panait
@ 2021-12-01 10:10 ` Michal Simek
  2021-12-01 17:49   ` Ovidiu Panait
  9 siblings, 1 reply; 12+ messages in thread
From: Michal Simek @ 2021-12-01 10:10 UTC (permalink / raw)
  To: Ovidiu Panait, u-boot, Michal Simek; +Cc: Masahiro Yamada



On 11/30/21 17:33, Ovidiu Panait wrote:
> Xilinx board_fdt_blob_setup() implementation makes use of
> XILINX_OF_BOARD_DTB_ADDR Kconfig option, but no default value is currently
> defined for microblaze. Add one so that microblaze could also be configured
> with CONFIG_OF_SEPARATE.
> 
> Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
> ---
> 
> (no changes since v1)
> 
>   board/xilinx/Kconfig | 2 +-
>   1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/board/xilinx/Kconfig b/board/xilinx/Kconfig
> index 64507b5d84..9e69166903 100644
> --- a/board/xilinx/Kconfig
> +++ b/board/xilinx/Kconfig
> @@ -43,7 +43,7 @@ endif
>   config XILINX_OF_BOARD_DTB_ADDR
>   	hex "Default DTB pickup address"
>   	default 0x1000 if ARCH_VERSAL
> -	default 0x100000 if ARCH_ZYNQ || ARCH_ZYNQMP
> +	default 0x100000 if ARCH_ZYNQ || ARCH_ZYNQMP || MICROBLAZE
>   	depends on OF_BOARD || OF_SEPARATE
>   	help
>   	  Offset in the memory where the board configuration DTB is placed.
> 

First of all I applied patches 2-10.

And let's have short discussion about this default address. 1MB is quite 
high for DTB. In standard system when you have brams you likely don't 
have more 1MB. That's why this default is not the best.
I didn't use microblaze spl for a while but from build it has ~30kB. Not 
sure where I did setup stack, early malloc area but I think having place 
around 32kB/64kB would be more reasonable default because you will have 
brams there.
And having dtb in bram is likely better because it can be the part of 
bitstream.
Can you please elaborate a little bit why you choose 1M for microblaze?

Thanks,
Michal

-- 
Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91
w: www.monstr.eu p: +42-0-721842854
Maintainer of Linux kernel - Xilinx Microblaze
Maintainer of Linux kernel - Xilinx Zynq ARM and ZynqMP ARM64 SoCs
U-Boot custodian - Xilinx Microblaze/Zynq/ZynqMP/Versal SoCs


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

* Re: [PATCH v2 01/10] xilinx: Kconfig: add XILINX_OF_BOARD_DTB_ADDR default value for microblaze
  2021-12-01 10:10 ` [PATCH v2 01/10] xilinx: Kconfig: add XILINX_OF_BOARD_DTB_ADDR default value for microblaze Michal Simek
@ 2021-12-01 17:49   ` Ovidiu Panait
  0 siblings, 0 replies; 12+ messages in thread
From: Ovidiu Panait @ 2021-12-01 17:49 UTC (permalink / raw)
  To: Michal Simek, u-boot, Michal Simek; +Cc: Masahiro Yamada

Hi Michal,

On 12/1/21 12:10 PM, Michal Simek wrote:
> [Please note: This e-mail is from an EXTERNAL e-mail address]
>
> On 11/30/21 17:33, Ovidiu Panait wrote:
>> Xilinx board_fdt_blob_setup() implementation makes use of
>> XILINX_OF_BOARD_DTB_ADDR Kconfig option, but no default value is 
>> currently
>> defined for microblaze. Add one so that microblaze could also be 
>> configured
>> with CONFIG_OF_SEPARATE.
>>
>> Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
>> ---
>>
>> (no changes since v1)
>>
>>   board/xilinx/Kconfig | 2 +-
>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>
>> diff --git a/board/xilinx/Kconfig b/board/xilinx/Kconfig
>> index 64507b5d84..9e69166903 100644
>> --- a/board/xilinx/Kconfig
>> +++ b/board/xilinx/Kconfig
>> @@ -43,7 +43,7 @@ endif
>>   config XILINX_OF_BOARD_DTB_ADDR
>>       hex "Default DTB pickup address"
>>       default 0x1000 if ARCH_VERSAL
>> -     default 0x100000 if ARCH_ZYNQ || ARCH_ZYNQMP
>> +     default 0x100000 if ARCH_ZYNQ || ARCH_ZYNQMP || MICROBLAZE
>>       depends on OF_BOARD || OF_SEPARATE
>>       help
>>         Offset in the memory where the board configuration DTB is 
>> placed.
>>
>
> First of all I applied patches 2-10.
>
> And let's have short discussion about this default address. 1MB is quite
> high for DTB. In standard system when you have brams you likely don't
> have more 1MB. That's why this default is not the best.
> I didn't use microblaze spl for a while but from build it has ~30kB. Not
> sure where I did setup stack, early malloc area but I think having place
> around 32kB/64kB would be more reasonable default because you will have
> brams there.
> And having dtb in bram is likely better because it can be the part of
> bitstream.
> Can you please elaborate a little bit why you choose 1M for microblaze?
>
You're right, 1MB is not appropriate for microblaze. I can respin this 
patch
and change it to 32kB.

My initial intention with patches 1/10 and 2/10 was to switch microblaze 
from
CONFIG_OF_EMBEDDED -> CONFIG_OF_SEPARATE, but then I realized that the
updatemem utility used to bundle spl and bitstream together can only 
operate on
ELF files. Since for CONFIG_OF_SEPARATE the generated u-boot-spl ELF 
does not
contain the dtb, I abandoned the idea, but I still included the patches 
to at
least fix the compilation errors. So I haven't really put much thought into
what default address would be appropriate for microblaze.


Ovidiu

> Thanks,
> Michal
>
> -- 
> Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91
> w: www.monstr.eu p: +42-0-721842854
> Maintainer of Linux kernel - Xilinx Microblaze
> Maintainer of Linux kernel - Xilinx Zynq ARM and ZynqMP ARM64 SoCs
> U-Boot custodian - Xilinx Microblaze/Zynq/ZynqMP/Versal SoCs
>

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

end of thread, other threads:[~2021-12-01 17:49 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-11-30 16:33 [PATCH v2 01/10] xilinx: Kconfig: add XILINX_OF_BOARD_DTB_ADDR default value for microblaze Ovidiu Panait
2021-11-30 16:33 ` [PATCH v2 02/10] microblaze: u-boot.lds: replace __end symbol with _end Ovidiu Panait
2021-11-30 16:33 ` [PATCH v2 03/10] microblaze: spl: add board_boot_order() implementation Ovidiu Panait
2021-11-30 16:33 ` [PATCH v2 04/10] microblaze: Kconfig: SPL dependencies fixup Ovidiu Panait
2021-11-30 16:33 ` [PATCH v2 05/10] microblaze: start.S: use stack space as scratch memory for endian offset Ovidiu Panait
2021-11-30 16:33 ` [PATCH v2 06/10] microblaze: drop CONFIG_SYS_RESET_ADDRESS macro Ovidiu Panait
2021-11-30 16:33 ` [PATCH v2 07/10] microblaze: migrate CONFIG_SYS_USR_EXCEP to Kconfig Ovidiu Panait
2021-11-30 16:33 ` [PATCH v2 08/10] microblaze: add Kconfig symbol for the vector base address Ovidiu Panait
2021-11-30 16:33 ` [PATCH v2 09/10] microblaze: start.S: add support for configurable " Ovidiu Panait
2021-11-30 16:33 ` [PATCH v2 10/10] microblaze: branch to base vector address on reset Ovidiu Panait
2021-12-01 10:10 ` [PATCH v2 01/10] xilinx: Kconfig: add XILINX_OF_BOARD_DTB_ADDR default value for microblaze Michal Simek
2021-12-01 17:49   ` Ovidiu Panait

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.