1
0
mirror of git://projects.qi-hardware.com/xburst-tools.git synced 2024-11-26 01:26:14 +02:00

add-jtag-detection.patch

This adds capability to use single qi image for JTAG load action as well
as execution from NAND.  It requires JTAG script to load the image at
0x0 and 0x33000000 addresses, then set data at 0x04 address to 0xffffffff.

This eliminates the lowlevel_foo stuff from U-Boot world.

Signed-off-by: Andy Green <andy@openmoko.com>
This commit is contained in:
Andy Green 2008-11-28 10:16:37 +00:00 committed by Andy Green
parent ec8ea0c281
commit a560858377
2 changed files with 33 additions and 12 deletions

View File

@ -24,6 +24,9 @@
.globl _start .globl _start
_start: b start_code _start: b start_code
/* if we are injected by JTAG, the script sets _istag content to nonzero */
_is_jtag:
.word 0
_TEXT_BASE: _TEXT_BASE:
.word TEXT_BASE .word TEXT_BASE

View File

@ -47,20 +47,38 @@ void start_qi(void)
int n = 0; int n = 0;
int board = 0; int board = 0;
const struct board_variant * board_variant; const struct board_variant * board_variant;
const u32 * p_is_jtag = (const u32 *)4;
/*
* well, we can be running on this CPU two different ways.
*
* 1) We were copied into steppingstone and TEXT_BASE already
* by JTAG. We don't have to do anything else. JTAG script
* then sets data at address 0x4 to 0xffffffff as a signal we
* are running by JTAG.
*
* 2) We only got our first 4K into steppingstone, we need to copy
* the rest of ourselves into TEXT_BASE.
*
* So we do the copy out of NAND only if we see we did not come up
* under control of JTAG.
*/
if (!*p_is_jtag)
/* /*
* We got the first 4KBytes of the bootloader pulled into the * We got the first 4KBytes of the bootloader pulled into the
* steppingstone SRAM for free. Now we pull the whole bootloader * steppingstone SRAM for free. Now we pull the whole bootloader
* image into SDRAM. * image into SDRAM.
* *
* This code and the .S files are arranged by the linker script to * This code and the .S files are arranged by the linker script
* expect to run from 0x0. But the linker script has told everything * to expect to run from 0x0. But the linker script has told
* else to expect to run from 0x33000000+. That's why we are going to * everything else to expect to run from 0x33000000+. That's
* be able to copy this code and not have it crash when we run it from * why we are going to be able to copy this code and not have it
* there. * crash when we run it from there.
*/ */
/* We randomly pull 24KBytes of bootloader */ /* We randomly pull 32KBytes of bootloader */
if (nand_read_ll((unsigned char *)TEXT_BASE, 0, 24 * 1024 / 512) < 0) if (nand_read_ll((u8 *)TEXT_BASE, 0, 32 * 1024 / 512) < 0)
goto unhappy; goto unhappy;
/* ask all the boards we support in turn if they recognize this /* ask all the boards we support in turn if they recognize this
@ -69,7 +87,7 @@ void start_qi(void)
this_board = boards[board]; this_board = boards[board];
while (!n) { while (!n) {
if (board >= ARRAY_SIZE(boards)) if (board > ARRAY_SIZE(boards))
/* can't put diagnostic on serial... too early */ /* can't put diagnostic on serial... too early */
goto unhappy; goto unhappy;