2018-05-06 21:58:06 +00:00
|
|
|
/* SPDX-License-Identifier: GPL-2.0+ */
|
2014-05-05 10:52:26 +00:00
|
|
|
/*
|
2015-09-17 16:52:50 +00:00
|
|
|
* (C) Copyright 2007-2011
|
|
|
|
* Allwinner Technology Co., Ltd. <www.allwinnertech.com>
|
|
|
|
* Tom Cubie <tangliang@allwinnertech.com>
|
2014-05-05 10:52:26 +00:00
|
|
|
*/
|
|
|
|
#ifndef _ASM_ARCH_SPL_H_
|
2014-06-11 20:01:48 +00:00
|
|
|
#define _ASM_ARCH_SPL_H_
|
2014-05-05 10:52:26 +00:00
|
|
|
|
2020-11-17 23:36:05 +00:00
|
|
|
#include <sunxi_image.h>
|
2015-09-17 16:52:50 +00:00
|
|
|
|
2018-07-21 08:20:20 +00:00
|
|
|
#define SPL_ADDR CONFIG_SUNXI_SRAM_ADDRESS
|
2015-09-17 16:52:52 +00:00
|
|
|
|
sunxi: Increase SPL header size to 64 bytes to avoid code corruption
The current SPL header, created by the 'mksunxiboot' tool, has size
32 bytes. But the code in the boot ROM stores the information about
the boot media at the offset 0x28 before passing control to the SPL.
For example, when booting from the SD card, the magic number written
by the boot ROM is 0. And when booting from the SPI flash, the magic
number is 3. NAND and eMMC probably have their own special magic
numbers too.
Currently the corrupted byte is a part of one of the instructions in
the reset vectors table:
b reset
ldr pc, _undefined_instruction
ldr pc, _software_interrupt <- Corruption happens here
ldr pc, _prefetch_abort
ldr pc, _data_abort
ldr pc, _not_used
ldr pc, _irq
ldr pc, _fiq
In practice this does not cause any visible problems, but it's still
better to fix it. As a bonus, the reported boot media type can be
later used in the 'spl_boot_device' function, but this is out of
the scope of this patch.
Signed-off-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
2016-05-14 01:13:26 +00:00
|
|
|
/* The low 8-bits of the 'boot_media' field in the SPL header */
|
|
|
|
#define SUNXI_BOOTED_FROM_MMC0 0
|
2016-06-13 16:13:07 +00:00
|
|
|
#define SUNXI_BOOTED_FROM_NAND 1
|
|
|
|
#define SUNXI_BOOTED_FROM_MMC2 2
|
sunxi: Increase SPL header size to 64 bytes to avoid code corruption
The current SPL header, created by the 'mksunxiboot' tool, has size
32 bytes. But the code in the boot ROM stores the information about
the boot media at the offset 0x28 before passing control to the SPL.
For example, when booting from the SD card, the magic number written
by the boot ROM is 0. And when booting from the SPI flash, the magic
number is 3. NAND and eMMC probably have their own special magic
numbers too.
Currently the corrupted byte is a part of one of the instructions in
the reset vectors table:
b reset
ldr pc, _undefined_instruction
ldr pc, _software_interrupt <- Corruption happens here
ldr pc, _prefetch_abort
ldr pc, _data_abort
ldr pc, _not_used
ldr pc, _irq
ldr pc, _fiq
In practice this does not cause any visible problems, but it's still
better to fix it. As a bonus, the reported boot media type can be
later used in the 'spl_boot_device' function, but this is out of
the scope of this patch.
Signed-off-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
2016-05-14 01:13:26 +00:00
|
|
|
#define SUNXI_BOOTED_FROM_SPI 3
|
2018-12-16 02:04:58 +00:00
|
|
|
#define SUNXI_BOOTED_FROM_MMC0_HIGH 0x10
|
|
|
|
#define SUNXI_BOOTED_FROM_MMC2_HIGH 0x12
|
sunxi: Increase SPL header size to 64 bytes to avoid code corruption
The current SPL header, created by the 'mksunxiboot' tool, has size
32 bytes. But the code in the boot ROM stores the information about
the boot media at the offset 0x28 before passing control to the SPL.
For example, when booting from the SD card, the magic number written
by the boot ROM is 0. And when booting from the SPI flash, the magic
number is 3. NAND and eMMC probably have their own special magic
numbers too.
Currently the corrupted byte is a part of one of the instructions in
the reset vectors table:
b reset
ldr pc, _undefined_instruction
ldr pc, _software_interrupt <- Corruption happens here
ldr pc, _prefetch_abort
ldr pc, _data_abort
ldr pc, _not_used
ldr pc, _irq
ldr pc, _fiq
In practice this does not cause any visible problems, but it's still
better to fix it. As a bonus, the reported boot media type can be
later used in the 'spl_boot_device' function, but this is out of
the scope of this patch.
Signed-off-by: Siarhei Siamashka <siarhei.siamashka@gmail.com>
Reviewed-by: Hans de Goede <hdegoede@redhat.com>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
2016-05-14 01:13:26 +00:00
|
|
|
|
2017-04-26 00:32:49 +00:00
|
|
|
|
2015-09-17 16:52:52 +00:00
|
|
|
#define is_boot0_magic(addr) (memcmp((void *)addr, BOOT0_MAGIC, 8) == 0)
|
|
|
|
|
2017-08-23 08:06:30 +00:00
|
|
|
uint32_t sunxi_get_boot_device(void);
|
|
|
|
|
2014-05-05 10:52:26 +00:00
|
|
|
#endif
|