|
@@ -95,7 +95,8 @@ inline unsigned get_romfs_len(unsigned *addr)
|
|
void __init machine_early_init(const char *cmdline, unsigned int ram,
|
|
void __init machine_early_init(const char *cmdline, unsigned int ram,
|
|
unsigned int fdt, unsigned int msr)
|
|
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
|
|
/* If CONFIG_MTD_UCLINUX is defined, assume ROMFS is at the
|
|
* end of kernel. There are two position which we want to check.
|
|
* 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);
|
|
"CPU have it %x\n", msr);
|
|
#endif
|
|
#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;
|
|
*dst = *src;
|
|
|
|
|
|
/* Initialize global data */
|
|
/* Initialize global data */
|