Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fel-sdboot: Fix header corruption workaround #52

Merged
merged 1 commit into from
May 28, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ fel-pio.nm: fel-pio.elf
jtag-loop.elf: jtag-loop.c jtag-loop.lds
$(CROSS_COMPILE)gcc -g $(ARM_ELF_FLAGS) $< -nostdlib -o $@ -T jtag-loop.lds -Wl,-N

fel-sdboot.elf: fel-sdboot.c fel-sdboot.lds
fel-sdboot.elf: fel-sdboot.S fel-sdboot.lds
$(CROSS_COMPILE)gcc -g $(ARM_ELF_FLAGS) $< -nostdlib -o $@ -T fel-sdboot.lds -Wl,-N

boot_head_sun3i.elf: boot_head.S boot_head.lds
Expand Down
Binary file modified bin/fel-sdboot.sunxi
Binary file not shown.
69 changes: 69 additions & 0 deletions fel-sdboot.S
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
/*
* Copyright (C) 2016 Bernhard Nortmann <[email protected]>
*
* Based on previous works
* Copyright (C) 2016 Siarhei Siamashka <[email protected]>
* Copyright (C) 2012 Henrik Nordstrom <[email protected]>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*
*/

/*
* This file is a utility stub (bootloader code) to force the device into
* FEL mode, by jumping directly to the corresponding (N-)BROM entry point.
*
* Build instructions:
* make fel-sdboot.sunxi
*
* If needed, adjust CROSS_COMPILE and MKSUNXIBOOT according to your
* toolchain, e.g.
* make fel-sdboot.sunxi CROSS_COMPILE=armv7a-hardfloat-linux-gnueabi- \
* MKSUNXIBOOT=/usr/local/bin/mksunxiboot
*
*
* Install instructions:
* dd if=fel-sdboot.sunxi of=/dev/sdX bs=1024 seek=8
*/

SCTRL .req r0
.equ V_BIT, (1 << 13)

.equ BROM_ENTRY_LOW, 0x00000020
.equ BROM_ENTRY_HIGH, 0xFFFF0020

/*
* In cases where insufficient padding is added by an old mksunxiboot,
* _start may be 0x20, which means that the instruction at 0x28 could get
* corrupted by the BROM - see https://patchwork.ozlabs.org/patch/622173/
*
* Apply a workaround to avoid (= skip over) that memory location.
* _main would be at 0x30 in that particular case. With newer (properly
* fixed) versions of mksunxiboot, this code ends up at higher addresses
* and will be moot, but harmless.
*/
_start:
b _main
nop
nop
nop

_main:
mrc p15, 0, SCTRL, c1, c0, 0
tst SCTRL, #V_BIT @ test SCTRL.V
moveq lr, #BROM_ENTRY_LOW
ldrne lr, =BROM_ENTRY_HIGH
bx lr
59 changes: 0 additions & 59 deletions fel-sdboot.c

This file was deleted.