Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0b9b0200 authored by Michal Simek's avatar Michal Simek
Browse files

microblaze: Do not copy reset vectors/manual reset vector setup



Reset vector can be setup by bootloader and kernel doens't need
to touch it. If you require to setup reset vector, please use
CONFIG_MANUAL_RESET_VECTOR throught menuconfig.
It is not possible to setup address 0x0 as reset address because
make no sense to set it up at all.

Signed-off-by: default avatarMichal Simek <monstr@monstr.eu>
Signed-off-by: default avatarJohn Williams <john.williams@petalogix.com>
parent 7574349c
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -184,6 +184,17 @@ config LOWMEM_SIZE
	hex "Maximum low memory size (in bytes)" if LOWMEM_SIZE_BOOL
	default "0x30000000"

config MANUAL_RESET_VECTOR
	hex "Microblaze reset vector address setup"
	default "0x0"
	help
	  Set this option to have the kernel override the CPU Reset vector.
	  If zero, no change will be made to the MicroBlaze reset vector at
	  address 0x0.
	  If non-zero, a jump instruction to this address, will be written
	  to the reset vector at address 0x0.
	  If you are unsure, set it to default value 0x0.

config KERNEL_START_BOOL
	bool "Set custom kernel base address"
	depends on ADVANCED_OPTIONS
+3 −4
Original line number Diff line number Diff line
@@ -993,11 +993,10 @@ ENTRY(_reset)
	/* These are compiled and loaded into high memory, then
	 * copied into place in mach_early_setup */
	.section	.init.ivt, "ax"
#if CONFIG_MANUAL_RESET_VECTOR
	.org	0x0
	/* this is very important - here is the reset vector */
	/* in current MMU branch you don't care what is here - it is
	 * used from bootloader site - but this is correct for FS-BOOT */
	brai	0x70
	brai	CONFIG_MANUAL_RESET_VECTOR
#endif
	.org	0x8
	brai	TOPHYS(_user_exception); /* syscall handler */
	.org	0x10
+10 −2
Original line number Diff line number Diff line
@@ -95,7 +95,8 @@ inline unsigned get_romfs_len(unsigned *addr)
void __init machine_early_init(const char *cmdline, unsigned int ram,
		unsigned int fdt, unsigned int msr)
{
	unsigned long *src, *dst = (unsigned long *)0x0;
	unsigned long *src, *dst;
	unsigned int offset = 0;

	/* If CONFIG_MTD_UCLINUX is defined, assume ROMFS is at the
	 * end of kernel. There are two position which we want to check.
@@ -168,7 +169,14 @@ void __init machine_early_init(const char *cmdline, unsigned int ram,
				"CPU have it %x\n", msr);
#endif

	for (src = __ivt_start; src < __ivt_end; src++, dst++)
	/* Do not copy reset vectors. offset = 0x2 means skip the first
	 * two instructions. dst is pointer to MB vectors which are placed
	 * in block ram. If you want to copy reset vector setup offset to 0x0 */
#if !CONFIG_MANUAL_RESET_VECTOR
	offset = 0x2;
#endif
	dst = (unsigned long *) (offset * sizeof(u32));
	for (src = __ivt_start + offset; src < __ivt_end; src++, dst++)
		*dst = *src;

	/* Initialize global data */