You can subscribe to this list here.
2008 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
(75) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2009 |
Jan
(70) |
Feb
(20) |
Mar
(52) |
Apr
(149) |
May
(387) |
Jun
(466) |
Jul
(133) |
Aug
(87) |
Sep
(122) |
Oct
(140) |
Nov
(185) |
Dec
(105) |
2010 |
Jan
(85) |
Feb
(45) |
Mar
(75) |
Apr
(17) |
May
(41) |
Jun
(52) |
Jul
(33) |
Aug
(29) |
Sep
(36) |
Oct
(15) |
Nov
(26) |
Dec
(34) |
2011 |
Jan
(26) |
Feb
(25) |
Mar
(26) |
Apr
(29) |
May
(20) |
Jun
(27) |
Jul
(15) |
Aug
(32) |
Sep
(13) |
Oct
(64) |
Nov
(60) |
Dec
(10) |
2012 |
Jan
(64) |
Feb
(63) |
Mar
(39) |
Apr
(43) |
May
(54) |
Jun
(11) |
Jul
(30) |
Aug
(45) |
Sep
(11) |
Oct
(70) |
Nov
(24) |
Dec
(23) |
2013 |
Jan
(17) |
Feb
(8) |
Mar
(35) |
Apr
(40) |
May
(20) |
Jun
(24) |
Jul
(36) |
Aug
(25) |
Sep
(42) |
Oct
(40) |
Nov
(9) |
Dec
(21) |
2014 |
Jan
(29) |
Feb
(24) |
Mar
(60) |
Apr
(22) |
May
(22) |
Jun
(46) |
Jul
(11) |
Aug
(23) |
Sep
(26) |
Oct
(10) |
Nov
(14) |
Dec
(2) |
2015 |
Jan
(28) |
Feb
(47) |
Mar
(33) |
Apr
(58) |
May
(5) |
Jun
(1) |
Jul
|
Aug
(8) |
Sep
(12) |
Oct
(25) |
Nov
(58) |
Dec
(21) |
2016 |
Jan
(12) |
Feb
(40) |
Mar
(2) |
Apr
(1) |
May
(67) |
Jun
(2) |
Jul
(5) |
Aug
(36) |
Sep
|
Oct
(24) |
Nov
(17) |
Dec
(50) |
2017 |
Jan
(14) |
Feb
(16) |
Mar
(2) |
Apr
(35) |
May
(14) |
Jun
(16) |
Jul
(3) |
Aug
(3) |
Sep
|
Oct
(19) |
Nov
|
Dec
(16) |
2018 |
Jan
(55) |
Feb
(11) |
Mar
(34) |
Apr
(14) |
May
(4) |
Jun
(20) |
Jul
(39) |
Aug
(16) |
Sep
(17) |
Oct
(16) |
Nov
(20) |
Dec
(30) |
2019 |
Jan
(29) |
Feb
(24) |
Mar
(37) |
Apr
(26) |
May
(19) |
Jun
(21) |
Jul
(2) |
Aug
(3) |
Sep
(9) |
Oct
(12) |
Nov
(12) |
Dec
(12) |
2020 |
Jan
(47) |
Feb
(36) |
Mar
(54) |
Apr
(44) |
May
(37) |
Jun
(19) |
Jul
(32) |
Aug
(13) |
Sep
(16) |
Oct
(24) |
Nov
(32) |
Dec
(11) |
2021 |
Jan
(14) |
Feb
(5) |
Mar
(40) |
Apr
(32) |
May
(42) |
Jun
(31) |
Jul
(29) |
Aug
(47) |
Sep
(38) |
Oct
(17) |
Nov
(74) |
Dec
(33) |
2022 |
Jan
(11) |
Feb
(15) |
Mar
(40) |
Apr
(21) |
May
(39) |
Jun
(44) |
Jul
(19) |
Aug
(46) |
Sep
(79) |
Oct
(35) |
Nov
(21) |
Dec
(15) |
2023 |
Jan
(56) |
Feb
(13) |
Mar
(43) |
Apr
(28) |
May
(60) |
Jun
(15) |
Jul
(29) |
Aug
(28) |
Sep
(32) |
Oct
(21) |
Nov
(42) |
Dec
(39) |
2024 |
Jan
(35) |
Feb
(17) |
Mar
(28) |
Apr
(7) |
May
(14) |
Jun
(35) |
Jul
(30) |
Aug
(35) |
Sep
(30) |
Oct
(28) |
Nov
(38) |
Dec
(18) |
2025 |
Jan
(21) |
Feb
(28) |
Mar
(36) |
Apr
(35) |
May
(34) |
Jun
(58) |
Jul
(9) |
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
From: <kc...@ma...> - 2009-01-20 04:49:38
|
Author: kc8apf Date: 2009-01-20 04:49:31 +0100 (Tue, 20 Jan 2009) New Revision: 1343 Modified: trunk/doc/openocd.texi trunk/src/flash/aduc702x.c trunk/src/target/target/aduc702x.cfg Log: Fix support for ADuC702x flash. Courtesy of Michael Ashton <da...@gt...> Modified: trunk/doc/openocd.texi =================================================================== --- trunk/doc/openocd.texi 2009-01-20 03:42:24 UTC (rev 1342) +++ trunk/doc/openocd.texi 2009-01-20 03:49:31 UTC (rev 1343) @@ -2240,8 +2240,8 @@ @subsubsection aduc702x options @cindex aduc702x options -@b{flash bank aduc702x} <@var{base}> <@var{size}> 0 0 <@var{target#}> -@*aduc702x flash plugin require the flash @var{base}, @var{size} and @var{target#}. +@b{flash bank aduc702x} 0 0 0 0 <@var{target#}> +@*The aduc702x flash plugin works with Analog Devices model numbers ADUC7019 through ADUC7028. The setup command only requires the @var{target#} argument (all devices in this family have the same memory layout). @subsection mFlash configuration @cindex mFlash configuration Modified: trunk/src/flash/aduc702x.c =================================================================== --- trunk/src/flash/aduc702x.c 2009-01-20 03:42:24 UTC (rev 1342) +++ trunk/src/flash/aduc702x.c 2009-01-20 03:49:31 UTC (rev 1343) @@ -1,6 +1,7 @@ /*************************************************************************** * Copyright (C) 2008 by Kevin McGuire * * Copyright (C) 2008 by Marcel Wijlaars * + * Copyright (C) 2009 by Michael Ashton * * * * 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 * @@ -23,7 +24,7 @@ #endif #include "replacements.h" - +#include "time_support.h" #include "flash.h" #include "target.h" #include "log.h" @@ -40,9 +41,14 @@ int aduc702x_erase(struct flash_bank_s *bank, int first, int last); int aduc702x_protect(struct flash_bank_s *bank, int set, int first, int last); int aduc702x_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 count); +int aduc702x_write_single(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 count); +int aduc702x_write_block(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 count); int aduc702x_probe(struct flash_bank_s *bank); int aduc702x_info(struct flash_bank_s *bank, char *buf, int buf_size); int aduc702x_protect_check(struct flash_bank_s *bank); +int aduc702x_build_sector_list(struct flash_bank_s *bank); +int aduc702x_check_flash_completion(target_t* target, unsigned int timeout_ms); +int aduc702x_set_write_enable(target_t *target, int enable); #define ADUC702x_FLASH 0xfffff800 #define ADUC702x_FLASH_FEESTA (0*4) @@ -67,8 +73,8 @@ typedef struct { - unsigned char tmp; -} aduc702x_bank; + working_area_t *write_algorithm; +} aduc702x_flash_bank_t; flash_driver_t aduc702x_flash = { @@ -90,26 +96,42 @@ return ERROR_OK; } -/* flash bank aduc702x <base> <size> 0 0 <target#> */ +/* flash bank aduc702x 0 0 0 0 <target#> + * The ADC7019-28 devices all have the same flash layout */ int aduc702x_flash_bank_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc, struct flash_bank_s *bank) { - aduc702x_bank *nbank; + aduc702x_flash_bank_t *nbank; - if (argc < 6) - { - LOG_WARNING("incomplete flash_bank aduc702x configuration"); - return ERROR_FLASH_BANK_INVALID; - } + nbank = malloc(sizeof(aduc702x_flash_bank_t)); - nbank = malloc(sizeof(aduc702x_bank)); - /* just warn that we are used to normally using 0x80000 */ - if (bank->base != 0x80000) - { - LOG_WARNING("Default base address is 0x80000 on the ADuC7026!"); - } + bank->base = 0x80000; + bank->size = 0xF800; // top 4k not accessible + bank->driver_priv = nbank; + + aduc702x_build_sector_list(bank); + + return ERROR_OK; +} + +int aduc702x_build_sector_list(struct flash_bank_s *bank) +{ + //aduc7026_flash_bank_t *aduc7026_info = bank->driver_priv; - nbank->tmp = 1; - bank->driver_priv = nbank; + int i = 0; + u32 offset = 0; + + // sector size is 512 + bank->num_sectors = bank->size / 512; + bank->sectors = malloc(sizeof(flash_sector_t) * bank->num_sectors); + for (i = 0; i < bank->num_sectors; ++i) + { + bank->sectors[i].offset = offset; + bank->sectors[i].size = 512; + offset += bank->sectors[i].size; + bank->sectors[i].is_erased = -1; + bank->sectors[i].is_protected = 0; + } + return ERROR_OK; } @@ -121,45 +143,54 @@ int aduc702x_erase(struct flash_bank_s *bank, int first, int last) { + //int res; int x; int count; - u32 v; + //u32 v; target_t *target = bank->target; + aduc702x_set_write_enable(target, 1); + /* mass erase */ - if ((first | last) == 0) - { + if (((first | last) == 0) || ((first == 0) && (last >= bank->num_sectors))) { LOG_DEBUG("performing mass erase.\n"); - target_write_u32(target, ADUC702x_FLASH + ADUC702x_FLASH_FEEDAT, 0x3cff); - target_write_u32(target, ADUC702x_FLASH + ADUC702x_FLASH_FEEADR, 0xffc3); - target_read_u32(target, ADUC702x_FLASH + ADUC702x_FLASH_FEEMOD, &v); - target_write_u32(target, ADUC702x_FLASH + ADUC702x_FLASH_FEEMOD, v | 0x8); - target_write_u32(target, ADUC702x_FLASH + ADUC702x_FLASH_FEECON, 0x06); - for (v = 0x4; v & 0x4; - target_read_u32(target, ADUC702x_FLASH + ADUC702x_FLASH_FEESTA, &v)); + target_write_u16(target, ADUC702x_FLASH + ADUC702x_FLASH_FEEDAT, 0x3cff); + target_write_u16(target, ADUC702x_FLASH + ADUC702x_FLASH_FEEADR, 0xffc3); + target_write_u8(target, ADUC702x_FLASH + ADUC702x_FLASH_FEECON, 0x06); - if (!(v & 0x1)) + if (aduc702x_check_flash_completion(target, 3500) != ERROR_OK) { - LOG_ERROR("mass erase failed.\n"); - return ERROR_FLASH_SECTOR_NOT_ERASED; + LOG_ERROR("mass erase failed\n"); + aduc702x_set_write_enable(target, 0); + return ERROR_FLASH_OPERATION_FAILED; } + LOG_DEBUG("mass erase successful.\n"); return ERROR_OK; - } + } else { + unsigned long adr; - count = last - first; - for (x = 0; x < count; ++x) - { - target_write_u32(target, ADUC702x_FLASH + ADUC702x_FLASH_FEEADR, bank->base + first * 512 + x * 512); - target_write_u32(target, ADUC702x_FLASH + ADUC702x_FLASH_FEECON, 0x05); - for (v = 0x4; v & 0x4; target_read_u32(target, ADUC702x_FLASH + ADUC702x_FLASH_FEESTA, &v)); - if (!(v & 0x1)) - { - LOG_ERROR("erase failed for page address %x\n", bank->base + first * 512 + x * 512); - return ERROR_FLASH_SECTOR_NOT_ERASED; - } - LOG_DEBUG("erased page address %x\n", bank->base + first * 512 + x * 512); - } + count = last - first + 1; + for (x = 0; x < count; ++x) + { + adr = bank->base + ((first + x) * 512); + + target_write_u16(target, ADUC702x_FLASH + ADUC702x_FLASH_FEEADR, adr); + target_write_u8(target, ADUC702x_FLASH + ADUC702x_FLASH_FEECON, 0x05); + + if (aduc702x_check_flash_completion(target, 50) != ERROR_OK) + { + LOG_ERROR("failed to erase sector at address 0x%08lX\n", adr); + aduc702x_set_write_enable(target, 0); + return ERROR_FLASH_SECTOR_NOT_ERASED; + } + + LOG_DEBUG("erased sector at address 0x%08lX\n", adr); + } + } + + aduc702x_set_write_enable(target, 0); + return ERROR_OK; } @@ -169,34 +200,205 @@ return ERROR_FLASH_OPERATION_FAILED; } -int aduc702x_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 count) +int aduc702x_write_block(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 count) { - int x; - u32 v; + aduc702x_flash_bank_t *aduc702x_info = bank->driver_priv; target_t *target = bank->target; + u32 buffer_size = 7000; + working_area_t *source; + u32 address = bank->base + offset; + reg_param_t reg_params[6]; + armv4_5_algorithm_t armv4_5_info; + int retval = ERROR_OK; - for (x = 0; x < count; x += 2) + /* parameters: + + r0 - address of source data (absolute) + r1 - number of halfwords to be copied + r2 - start address in flash (offset from beginning of flash memory) + r3 - exit code + r4 - base address of flash controller (0xFFFFF800) + + registers: + + r5 - scratch + r6 - set to 2, used to write flash command + + */ + u32 aduc702x_flash_write_code[] = { + //<_start>: + 0xe3a05008, // mov r5, #8 ; 0x8 + 0xe5845004, // str r5, [r4, #4] + 0xe3a06002, // mov r6, #2 ; 0x2 + //<next>: + 0xe1c421b0, // strh r2, [r4, #16] + 0xe0d050b2, // ldrh r5, [r0], #2 + 0xe1c450bc, // strh r5, [r4, #12] + 0xe5c46008, // strb r6, [r4, #8] + //<wait_complete>: + 0xe1d430b0, // ldrh r3, [r4] + 0xe3130004, // tst r3, #4 ; 0x4 + 0x1afffffc, // bne 1001c <wait_complete> + 0xe2822002, // add r2, r2, #2 ; 0x2 + 0xe2511001, // subs r1, r1, #1 ; 0x1 + 0x0a000001, // beq 1003c <done> + 0xe3130001, // tst r3, #1 ; 0x1 + 0x1afffff3, // bne 1000c <next> + //<done>: + 0xeafffffe // b 1003c <done> + }; + + /* flash write code */ + if (target_alloc_working_area(target, sizeof(aduc702x_flash_write_code), + &aduc702x_info->write_algorithm) != ERROR_OK) { - target_write_u32(target, ADUC702x_FLASH + ADUC702x_FLASH_FEEADR, offset + x); - /* if we able to encounter a single byte instead of a word */ - if ((x + 1) == count) { - target_write_u32(target, ADUC702x_FLASH + ADUC702x_FLASH_FEEDAT, buffer[x]); + LOG_WARNING("no working area available, can't do block memory writes"); + return ERROR_TARGET_RESOURCE_NOT_AVAILABLE; + }; + + target_write_buffer(target, aduc702x_info->write_algorithm->address, + sizeof(aduc702x_flash_write_code), (u8*)aduc702x_flash_write_code); + + /* memory buffer */ + while (target_alloc_working_area(target, buffer_size, &source) != ERROR_OK) + { + buffer_size /= 2; + if (buffer_size <= 256) + { + /* if we already allocated the writing code, but failed to get a buffer, free the algorithm */ + if (aduc702x_info->write_algorithm) + target_free_working_area(target, aduc702x_info->write_algorithm); + + LOG_WARNING("no large enough working area available, can't do block memory writes"); + return ERROR_TARGET_RESOURCE_NOT_AVAILABLE; } - else { - target_write_u32(target, ADUC702x_FLASH + ADUC702x_FLASH_FEEDAT, buffer[x] | (buffer[x+1] << 8)); + } + + armv4_5_info.common_magic = ARMV4_5_COMMON_MAGIC; + armv4_5_info.core_mode = ARMV4_5_MODE_SVC; + armv4_5_info.core_state = ARMV4_5_STATE_ARM; + + init_reg_param(®_params[0], "r0", 32, PARAM_OUT); + init_reg_param(®_params[1], "r1", 32, PARAM_OUT); + init_reg_param(®_params[2], "r2", 32, PARAM_OUT); + init_reg_param(®_params[3], "r3", 32, PARAM_IN); + init_reg_param(®_params[4], "r4", 32, PARAM_OUT); + + while (count > 0) + { + u32 thisrun_count = (count > (buffer_size / 2)) ? (buffer_size / 2) : count; + + target_write_buffer(target, source->address, thisrun_count * 2, buffer); + + buf_set_u32(reg_params[0].value, 0, 32, source->address); + buf_set_u32(reg_params[1].value, 0, 32, thisrun_count); + buf_set_u32(reg_params[2].value, 0, 32, address); + buf_set_u32(reg_params[4].value, 0, 32, 0xFFFFF800); + + if ((retval = target->type->run_algorithm(target, 0, NULL, 5, + reg_params, aduc702x_info->write_algorithm->address, + aduc702x_info->write_algorithm->address + sizeof(aduc702x_flash_write_code) - 4, + 10000, &armv4_5_info)) != ERROR_OK) + { + LOG_ERROR("error executing aduc702x flash write algorithm"); + retval = ERROR_FLASH_OPERATION_FAILED; + break; } - target_write_u32(target, ADUC702x_FLASH + ADUC702x_FLASH_FEECON, 0x02); - for (v = 0x4; v & 0x4; target_read_u32(target, ADUC702x_FLASH + ADUC702x_FLASH_FEESTA, &v)); - if (!(v & 0x1)) - { - LOG_ERROR("single write failed for address %x.\n", offset + x); + + if ((buf_get_u32(reg_params[3].value, 0, 32) & 1) != 1) { + retval = ERROR_FLASH_OPERATION_FAILED; + break; + } + + buffer += thisrun_count * 2; + address += thisrun_count * 2; + count -= thisrun_count; + } + + target_free_working_area(target, source); + target_free_working_area(target, aduc702x_info->write_algorithm); + + destroy_reg_param(®_params[0]); + destroy_reg_param(®_params[1]); + destroy_reg_param(®_params[2]); + destroy_reg_param(®_params[3]); + destroy_reg_param(®_params[4]); + + return retval; +} + +/* All-JTAG, single-access method. Very slow. Used only if there is no + * working area available. */ +int aduc702x_write_single(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 count) +{ + int x; + u8 b; + target_t *target = bank->target; + + aduc702x_set_write_enable(target, 1); + + for (x = 0; x < count; x += 2) { + // FEEADR = address + target_write_u16(target, ADUC702x_FLASH + ADUC702x_FLASH_FEEADR, offset + x); + + // set up data + if ((x + 1) == count) + { + // last byte + target_read_u8(target, offset + x + 1, &b); + } + else + b = buffer[x + 1]; + + target_write_u16(target, ADUC702x_FLASH + ADUC702x_FLASH_FEEDAT, buffer[x] | (b << 8)); + + // do single-write command + target_write_u8(target, ADUC702x_FLASH + ADUC702x_FLASH_FEECON, 0x02); + + if (aduc702x_check_flash_completion(target, 1) != ERROR_OK) + { + LOG_ERROR("single write failed for address 0x%08lX\n", (unsigned long)(offset + x)); + aduc702x_set_write_enable(target, 0); return ERROR_FLASH_OPERATION_FAILED; } - LOG_DEBUG("single write for address %x.\n", offset + x); + } + LOG_DEBUG("wrote %d bytes at address 0x%08lX\n", (int)count, (unsigned long)(offset + x)); + + aduc702x_set_write_enable(target, 0); + return ERROR_OK; } +int aduc702x_write(struct flash_bank_s *bank, u8 *buffer, u32 offset, u32 count) +{ + int retval; + + /* try using a block write */ + if ((retval = aduc702x_write_block(bank, buffer, offset, count)) != ERROR_OK) + { + if (retval == ERROR_TARGET_RESOURCE_NOT_AVAILABLE) + { + /* if block write failed (no sufficient working area), + * use normal (slow) JTAG method */ + LOG_WARNING("couldn't use block writes, falling back to single memory accesses"); + + if ((retval = aduc702x_write_single(bank, buffer, offset, count)) != ERROR_OK) + { + LOG_ERROR("slow write failed"); + return ERROR_FLASH_OPERATION_FAILED; + } + } + else if (retval == ERROR_FLASH_OPERATION_FAILED) + { + LOG_ERROR("flash block writing failed"); + return ERROR_FLASH_OPERATION_FAILED; + } + } + + return ERROR_OK; +} + int aduc702x_probe(struct flash_bank_s *bank) { return ERROR_OK; @@ -207,3 +409,37 @@ snprintf(buf, buf_size, "aduc702x flash driver info" ); return ERROR_OK; } + +/* sets FEEMOD bit 3 + * enable = 1 enables writes & erases, 0 disables them */ +int aduc702x_set_write_enable(target_t *target, int enable) +{ + // don't bother to preserve int enable bit here + target_write_u16(target, ADUC702x_FLASH + ADUC702x_FLASH_FEEMOD, enable ? 8 : 0); + + return ERROR_OK; +} + +/* wait up to timeout_ms for controller to not be busy, + * then check whether the command passed or failed. + * + * this function sleeps 1ms between checks (after the first one), + * so in some cases may slow things down without a usleep after the first read */ +int aduc702x_check_flash_completion(target_t* target, unsigned int timeout_ms) +{ + u8 v = 4; + + long long endtime = timeval_ms() + timeout_ms; + while (1) { + target_read_u8(target, ADUC702x_FLASH + ADUC702x_FLASH_FEESTA, &v); + if ((v & 4) == 0) break; + alive_sleep(1); + if (timeval_ms() >= endtime) break; + } + + if (v & 2) return ERROR_FAIL; + // if a command is ignored, both the success and fail bits may be 0 + else if ((v & 3) == 0) return ERROR_FAIL; + else return ERROR_OK; +} + Modified: trunk/src/target/target/aduc702x.cfg =================================================================== --- trunk/src/target/target/aduc702x.cfg 2009-01-20 03:42:24 UTC (rev 1342) +++ trunk/src/target/target/aduc702x.cfg 2009-01-20 03:49:31 UTC (rev 1343) @@ -39,8 +39,12 @@ set _TARGETNAME [format "%s.cpu" $_CHIPNAME] target create $_TARGETNAME arm7tdmi -endian $_ENDIAN -chain-position $_TARGETNAME +# allocate the entire SRAM as working area +$_TARGETNAME configure -work-area-phys 0x10000 -work-area-size 0x2000 + ## flash configuration -flash bank aduc702x 0x80000 0x10000 2 2 0 +# only target number is needed +flash bank aduc702x 0 0 0 0 0 ## If you use the watchdog, the following code makes sure that the board ## doesn't reboot when halted via JTAG. Yes, on the older generation |
From: <kc...@ma...> - 2009-01-20 04:42:29
|
Author: kc8apf Date: 2009-01-20 04:42:24 +0100 (Tue, 20 Jan 2009) New Revision: 1342 Added: trunk/src/target/target/imx21.cfg Log: imx21 config provided by Alan Carvalho de Assis <ac...@gm...> Added: trunk/src/target/target/imx21.cfg =================================================================== --- trunk/src/target/target/imx21.cfg 2009-01-19 19:54:44 UTC (rev 1341) +++ trunk/src/target/target/imx21.cfg 2009-01-20 03:42:24 UTC (rev 1342) @@ -0,0 +1,32 @@ +#use combined on interfaces or targets that can't set TRST/SRST separately +reset_config trst_and_srst + +if { [info exists CHIPNAME] } { + set _CHIPNAME $CHIPNAME +} else { + set _CHIPNAME imx21 +} + +if { [info exists ENDIAN] } { + set _ENDIAN $ENDIAN +} else { + set _ENDIAN little +} + + +# Note above there is 1 tap + +# The CPU tap +if { [info exists CPUTAPID ] } { + set _CPUTAPID $CPUTAPID +} else { + set _CPUTAPID 0x0792611f +} +jtag newtap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID + + +# Create the GDB Target. +set _TARGETNAME [format "%s.cpu" $_CHIPNAME] +target create $_TARGETNAME arm926ejs -endian $_ENDIAN -chain-position $_TARGETNAME -variant arm926ejs + +arm7_9 dcc_downloads enable Property changes on: trunk/src/target/target/imx21.cfg ___________________________________________________________________ Name: svn:eol-style + native |
From: ntfreak at B. <nt...@ma...> - 2009-01-19 20:54:45
|
Author: ntfreak Date: 2009-01-19 20:54:44 +0100 (Mon, 19 Jan 2009) New Revision: 1341 Modified: trunk/src/openocd.c Log: - remove unused includes, fixes build issues under FreeBSD Modified: trunk/src/openocd.c =================================================================== --- trunk/src/openocd.c 2009-01-19 09:41:59 UTC (rev 1340) +++ trunk/src/openocd.c 2009-01-19 19:54:44 UTC (rev 1341) @@ -57,14 +57,6 @@ #include <unistd.h> #include <errno.h> -#ifdef _WIN32 -#include <malloc.h> -#else -#include <alloca.h> -#endif - -#include "replacements.h" - void print_version(void) { /* DANGER!!! make sure that the line below does not appear in a patch, do not remove */ |
From: ntfreak at B. <nt...@ma...> - 2009-01-19 10:41:59
|
Author: ntfreak Date: 2009-01-19 10:41:59 +0100 (Mon, 19 Jan 2009) New Revision: 1340 Removed: trunk/src/svf/Makefile.in Modified: trunk/guess-rev.sh trunk/src/svf/Makefile.am Log: - revert guess-rev.sh to using bash - remove generated files from svn Modified: trunk/guess-rev.sh =================================================================== --- trunk/guess-rev.sh 2009-01-19 07:13:02 UTC (rev 1339) +++ trunk/guess-rev.sh 2009-01-19 09:41:59 UTC (rev 1340) @@ -1,9 +1,9 @@ -#!/bin/sh +#!/bin/bash # REV=unknown which svnversion > /dev/null 2>&1 && REV=`svnversion -n` -`which echo` -n $REV +echo -n $REV Property changes on: trunk/src/svf/Makefile.am ___________________________________________________________________ Name: svn:eol-style + native Deleted: trunk/src/svf/Makefile.in =================================================================== --- trunk/src/svf/Makefile.in 2009-01-19 07:13:02 UTC (rev 1339) +++ trunk/src/svf/Makefile.in 2009-01-19 09:41:59 UTC (rev 1340) @@ -1,406 +0,0 @@ -# Makefile.in generated by automake 1.10 from Makefile.am. -# @configure_input@ - -# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, -# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. -# This Makefile.in is free software; the Free Software Foundation -# gives unlimited permission to copy and/or distribute it, -# with or without modifications, as long as this notice is preserved. - -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY, to the extent permitted by law; without -# even the implied warranty of MERCHANTABILITY or FITNESS FOR A -# PARTICULAR PURPOSE. - -@SET_MAKE@ - - -VPATH = @srcdir@ -pkgdatadir = $(datadir)/@PACKAGE@ -pkglibdir = $(libdir)/@PACKAGE@ -pkgincludedir = $(includedir)/@PACKAGE@ -am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd -install_sh_DATA = $(install_sh) -c -m 644 -install_sh_PROGRAM = $(install_sh) -c -install_sh_SCRIPT = $(install_sh) -c -INSTALL_HEADER = $(INSTALL_DATA) -transform = $(program_transform_name) -NORMAL_INSTALL = : -PRE_INSTALL = : -POST_INSTALL = : -NORMAL_UNINSTALL = : -PRE_UNINSTALL = : -POST_UNINSTALL = : -build_triplet = @build@ -host_triplet = @host@ -subdir = src/svf -DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ - $(srcdir)/Makefile.in -ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 -am__aclocal_m4_deps = $(top_srcdir)/configure.in -am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ - $(ACLOCAL_M4) -mkinstalldirs = $(install_sh) -d -CONFIG_HEADER = $(top_builddir)/config.h -CONFIG_CLEAN_FILES = -LIBRARIES = $(noinst_LIBRARIES) -AR = ar -ARFLAGS = cru -libsvf_a_AR = $(AR) $(ARFLAGS) -libsvf_a_LIBADD = -am_libsvf_a_OBJECTS = svf.$(OBJEXT) -libsvf_a_OBJECTS = $(am_libsvf_a_OBJECTS) -DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@ -depcomp = $(SHELL) $(top_srcdir)/depcomp -am__depfiles_maybe = depfiles -COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ - $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -CCLD = $(CC) -LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ -SOURCES = $(libsvf_a_SOURCES) -DIST_SOURCES = $(libsvf_a_SOURCES) -HEADERS = $(noinst_HEADERS) -ETAGS = etags -CTAGS = ctags -DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) -ACLOCAL = @ACLOCAL@ -AMTAR = @AMTAR@ -AUTOCONF = @AUTOCONF@ -AUTOHEADER = @AUTOHEADER@ -AUTOMAKE = @AUTOMAKE@ -AWK = @AWK@ -CC = @CC@ -CCDEPMODE = @CCDEPMODE@ -CC_FOR_BUILD = @CC_FOR_BUILD@ -CFLAGS = @CFLAGS@ -CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ -CPP = @CPP@ -CPPFLAGS = @CPPFLAGS@ -CYGPATH_W = @CYGPATH_W@ -DEFS = @DEFS@ -DEPDIR = @DEPDIR@ -ECHO_C = @ECHO_C@ -ECHO_N = @ECHO_N@ -ECHO_T = @ECHO_T@ -EGREP = @EGREP@ -EXEEXT = @EXEEXT@ -EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@ -GREP = @GREP@ -INSTALL = @INSTALL@ -INSTALL_DATA = @INSTALL_DATA@ -INSTALL_PROGRAM = @INSTALL_PROGRAM@ -INSTALL_SCRIPT = @INSTALL_SCRIPT@ -INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ -LDFLAGS = @LDFLAGS@ -LIBOBJS = @LIBOBJS@ -LIBS = @LIBS@ -LTLIBOBJS = @LTLIBOBJS@ -MAKEINFO = @MAKEINFO@ -MKDIR_P = @MKDIR_P@ -OBJEXT = @OBJEXT@ -PACKAGE = @PACKAGE@ -PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ -PACKAGE_NAME = @PACKAGE_NAME@ -PACKAGE_STRING = @PACKAGE_STRING@ -PACKAGE_TARNAME = @PACKAGE_TARNAME@ -PACKAGE_VERSION = @PACKAGE_VERSION@ -PATH_SEPARATOR = @PATH_SEPARATOR@ -RANLIB = @RANLIB@ -SET_MAKE = @SET_MAKE@ -SHELL = @SHELL@ -STRIP = @STRIP@ -VERSION = @VERSION@ -abs_builddir = @abs_builddir@ -abs_srcdir = @abs_srcdir@ -abs_top_builddir = @abs_top_builddir@ -abs_top_srcdir = @abs_top_srcdir@ -ac_ct_CC = @ac_ct_CC@ -am__include = @am__include@ -am__leading_dot = @am__leading_dot@ -am__quote = @am__quote@ -am__tar = @am__tar@ -am__untar = @am__untar@ -bindir = @bindir@ -build = @build@ -build_alias = @build_alias@ -build_cpu = @build_cpu@ -build_os = @build_os@ -build_vendor = @build_vendor@ -builddir = @builddir@ -datadir = @datadir@ -datarootdir = @datarootdir@ -docdir = @docdir@ -dvidir = @dvidir@ -exec_prefix = @exec_prefix@ -host = @host@ -host_alias = @host_alias@ -host_cpu = @host_cpu@ -host_os = @host_os@ -host_vendor = @host_vendor@ -htmldir = @htmldir@ -includedir = @includedir@ -infodir = @infodir@ -install_sh = @install_sh@ -libdir = @libdir@ -libexecdir = @libexecdir@ -localedir = @localedir@ -localstatedir = @localstatedir@ -mandir = @mandir@ -mkdir_p = @mkdir_p@ -oldincludedir = @oldincludedir@ -pdfdir = @pdfdir@ -prefix = @prefix@ -program_transform_name = @program_transform_name@ -psdir = @psdir@ -sbindir = @sbindir@ -sharedstatedir = @sharedstatedir@ -srcdir = @srcdir@ -sysconfdir = @sysconfdir@ -target_alias = @target_alias@ -top_builddir = @top_builddir@ -top_srcdir = @top_srcdir@ -INCLUDES = -I$(top_srcdir)/src/server -I$(top_srcdir)/src/helper -I$(top_srcdir)/src/jtag $(all_includes) -METASOURCES = AUTO -noinst_LIBRARIES = libsvf.a -noinst_HEADERS = svf.h -libsvf_a_SOURCES = svf.c -all: all-am - -.SUFFIXES: -.SUFFIXES: .c .o .obj -$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) - @for dep in $?; do \ - case '$(am__configure_deps)' in \ - *$$dep*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ - && exit 0; \ - exit 1;; \ - esac; \ - done; \ - echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/svf/Makefile'; \ - cd $(top_srcdir) && \ - $(AUTOMAKE) --foreign src/svf/Makefile -.PRECIOUS: Makefile -Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status - @case '$?' in \ - *config.status*) \ - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ - *) \ - echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ - cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ - esac; - -$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -$(top_srcdir)/configure: $(am__configure_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh -$(ACLOCAL_M4): $(am__aclocal_m4_deps) - cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh - -clean-noinstLIBRARIES: - -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) -libsvf.a: $(libsvf_a_OBJECTS) $(libsvf_a_DEPENDENCIES) - -rm -f libsvf.a - $(libsvf_a_AR) libsvf.a $(libsvf_a_OBJECTS) $(libsvf_a_LIBADD) - $(RANLIB) libsvf.a - -mostlyclean-compile: - -rm -f *.$(OBJEXT) - -distclean-compile: - -rm -f *.tab.c - -@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/svf.Po@am__quote@ - -.c.o: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c $< - -.c.obj: -@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` -@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po -@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ -@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ -@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` - -ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - mkid -fID $$unique -tags: TAGS - -TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ - test -n "$$unique" || unique=$$empty_fix; \ - $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ - $$tags $$unique; \ - fi -ctags: CTAGS -CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ - $(TAGS_FILES) $(LISP) - tags=; \ - here=`pwd`; \ - list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ - unique=`for i in $$list; do \ - if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ - done | \ - $(AWK) ' { files[$$0] = 1; } \ - END { for (i in files) print i; }'`; \ - test -z "$(CTAGS_ARGS)$$tags$$unique" \ - || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ - $$tags $$unique - -GTAGS: - here=`$(am__cd) $(top_builddir) && pwd` \ - && cd $(top_srcdir) \ - && gtags -i $(GTAGS_ARGS) $$here - -distclean-tags: - -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags - -distdir: $(DISTFILES) - @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ - list='$(DISTFILES)'; \ - dist_files=`for file in $$list; do echo $$file; done | \ - sed -e "s|^$$srcdirstrip/||;t" \ - -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ - case $$dist_files in \ - */*) $(MKDIR_P) `echo "$$dist_files" | \ - sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ - sort -u` ;; \ - esac; \ - for file in $$dist_files; do \ - if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ - if test -d $$d/$$file; then \ - dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ - if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ - cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ - fi; \ - cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ - else \ - test -f $(distdir)/$$file \ - || cp -p $$d/$$file $(distdir)/$$file \ - || exit 1; \ - fi; \ - done -check-am: all-am -check: check-am -all-am: Makefile $(LIBRARIES) $(HEADERS) -installdirs: -install: install-am -install-exec: install-exec-am -install-data: install-data-am -uninstall: uninstall-am - -install-am: all-am - @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am - -installcheck: installcheck-am -install-strip: - $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ - install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ - `test -z '$(STRIP)' || \ - echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install -mostlyclean-generic: - -clean-generic: - -distclean-generic: - -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) - -maintainer-clean-generic: - @echo "This command is intended for maintainers to use" - @echo "it deletes files that may require special tools to rebuild." -clean: clean-am - -clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am - -distclean: distclean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -distclean-am: clean-am distclean-compile distclean-generic \ - distclean-tags - -dvi: dvi-am - -dvi-am: - -html: html-am - -info: info-am - -info-am: - -install-data-am: - -install-dvi: install-dvi-am - -install-exec-am: - -install-html: install-html-am - -install-info: install-info-am - -install-man: - -install-pdf: install-pdf-am - -install-ps: install-ps-am - -installcheck-am: - -maintainer-clean: maintainer-clean-am - -rm -rf ./$(DEPDIR) - -rm -f Makefile -maintainer-clean-am: distclean-am maintainer-clean-generic - -mostlyclean: mostlyclean-am - -mostlyclean-am: mostlyclean-compile mostlyclean-generic - -pdf: pdf-am - -pdf-am: - -ps: ps-am - -ps-am: - -uninstall-am: - -.MAKE: install-am install-strip - -.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ - clean-noinstLIBRARIES ctags distclean distclean-compile \ - distclean-generic distclean-tags distdir dvi dvi-am html \ - html-am info info-am install install-am install-data \ - install-data-am install-dvi install-dvi-am install-exec \ - install-exec-am install-html install-html-am install-info \ - install-info-am install-man install-pdf install-pdf-am \ - install-ps install-ps-am install-strip installcheck \ - installcheck-am installdirs maintainer-clean \ - maintainer-clean-generic mostlyclean mostlyclean-compile \ - mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ - uninstall-am - -# Tell versions [3.59,3.63) of GNU make to not export all variables. -# Otherwise a system limit (for SysV at least) may be exceeded. -.NOEXPORT: |
From: <kc...@ma...> - 2009-01-19 08:13:14
|
Author: kc8apf Date: 2009-01-19 08:13:02 +0100 (Mon, 19 Jan 2009) New Revision: 1339 Added: trunk/src/svf/ trunk/src/svf/Makefile.am trunk/src/svf/Makefile.in trunk/src/svf/svf.c trunk/src/svf/svf.h Modified: trunk/configure.in trunk/src/Makefile.am trunk/src/ecosboard.c trunk/src/jtag/vsllink.c trunk/src/openocd.c Log: SVF player courtesy of Simon Qian <sim...@Si...> Modified: trunk/configure.in =================================================================== --- trunk/configure.in 2009-01-19 07:08:28 UTC (rev 1338) +++ trunk/configure.in 2009-01-19 07:13:02 UTC (rev 1339) @@ -705,4 +705,4 @@ AC_MSG_RESULT([$EXEEXT_FOR_BUILD]) AC_SUBST(EXEEXT_FOR_BUILD) -AC_OUTPUT(Makefile src/Makefile src/helper/Makefile src/jtag/Makefile src/xsvf/Makefile src/target/Makefile src/server/Makefile src/flash/Makefile src/pld/Makefile doc/Makefile) +AC_OUTPUT(Makefile src/Makefile src/helper/Makefile src/jtag/Makefile src/xsvf/Makefile src/svf/Makefile src/target/Makefile src/server/Makefile src/flash/Makefile src/pld/Makefile doc/Makefile) Modified: trunk/src/Makefile.am =================================================================== --- trunk/src/Makefile.am 2009-01-19 07:08:28 UTC (rev 1338) +++ trunk/src/Makefile.am 2009-01-19 07:13:02 UTC (rev 1339) @@ -11,8 +11,8 @@ # set the include path found by configure INCLUDES = -I$(top_srcdir)/src -I$(top_srcdir)/src/helper \ - -I$(top_srcdir)/src/jtag -I$(top_srcdir)/src/target -I$(top_srcdir)/src/xsvf -I$(top_srcdir)/src/server \ - -I$(top_srcdir)/src/flash -I$(top_srcdir)/src/pld $(all_includes) + -I$(top_srcdir)/src/jtag -I$(top_srcdir)/src/target -I$(top_srcdir)/src/xsvf -I$(top_srcdir)/src/svf \ + -I$(top_srcdir)/src/server -I$(top_srcdir)/src/flash -I$(top_srcdir)/src/pld $(all_includes) # pass path to prefix path openocd_CPPFLAGS = \ @@ -23,7 +23,7 @@ # the library search path. openocd_LDFLAGS = $(all_libraries) -SUBDIRS = helper jtag xsvf target server flash pld +SUBDIRS = helper jtag xsvf svf target server flash pld if IS_MINGW MINGWLDADD = -lwsock32 @@ -61,7 +61,7 @@ -openocd_LDADD = $(top_builddir)/src/xsvf/libxsvf.a \ +openocd_LDADD = $(top_builddir)/src/xsvf/libxsvf.a $(top_builddir)/src/svf/libsvf.a \ $(top_builddir)/src/target/libtarget.a $(top_builddir)/src/jtag/libjtag.a \ $(top_builddir)/src/helper/libhelper.a \ $(top_builddir)/src/server/libserver.a $(top_builddir)/src/helper/libhelper.a \ Modified: trunk/src/ecosboard.c =================================================================== --- trunk/src/ecosboard.c 2009-01-19 07:08:28 UTC (rev 1338) +++ trunk/src/ecosboard.c 2009-01-19 07:13:02 UTC (rev 1339) @@ -26,6 +26,7 @@ #include "jtag.h" #include "configuration.h" #include "xsvf.h" +#include "svf.h" #include "target.h" #include "flash.h" #include "nand.h" Modified: trunk/src/jtag/vsllink.c =================================================================== --- trunk/src/jtag/vsllink.c 2009-01-19 07:08:28 UTC (rev 1338) +++ trunk/src/jtag/vsllink.c 2009-01-19 07:13:02 UTC (rev 1339) @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2007 by Simon Qian <Sim...@Si...> * + * Copyright (C) 2009 by Simon Qian <Sim...@Si...> * * * * 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 * @@ -49,18 +49,13 @@ #define DEBUG_JTAG_IO(expr ...) #endif -#define VID 0x03EB -#define PID 0x2103 -#define VSLLINK_WRITE_ENDPOINT 0x02 -#define VSLLINK_READ_ENDPOINT 0x82 +u16 vsllink_vid; +u16 vsllink_pid; +u8 vsllink_bulkout; +u8 vsllink_bulkin; -u16 vsllink_vid = VID; -u16 vsllink_pid = PID; -u8 vsllink_bulkout = VSLLINK_WRITE_ENDPOINT; -u8 vsllink_bulkin = VSLLINK_READ_ENDPOINT; +#define VSLLINK_USB_TIMEOUT 5000 -#define VSLLINK_USB_TIMEOUT 1000 - static int VSLLINK_BufferSize = 1024; /* Global USB buffers */ @@ -77,8 +72,11 @@ #define VSLLINK_CMD_GET_PORT 0x91 #define VSLLINK_CMD_SET_PORTDIR 0x92 #define VSLLINK_CMD_HW_JTAGSEQCMD 0xA0 +#define VSLLINK_CMD_HW_JTAGHLCMD 0xA1 +#define VSLLINK_CMD_HW_SWDCMD 0xA2 #define VSLLINK_CMDJTAGSEQ_TMSBYTE 0x00 +#define VSLLINK_CMDJTAGSEQ_TMS0BYTE 0x40 #define VSLLINK_CMDJTAGSEQ_SCAN 0x80 #define VSLLINK_CMDJTAGSEQ_CMDMSK 0xC0 @@ -109,21 +107,21 @@ u8 VSLLINK_tap_move[6][6] = { /* TLR RTI SD PD SI PI */ - {0xff, 0x00, 0x2f, 0x0a, 0x37, 0x16}, /* TLR */ + {0xff, 0x7f, 0x2f, 0x0a, 0x37, 0x16}, /* TLR */ {0xff, 0x00, 0x45, 0x05, 0x4b, 0x0b}, /* RTI */ {0xff, 0x61, 0x00, 0x01, 0x0f, 0x2f}, /* SD */ - {0xff, 0x60, 0x40, 0x17, 0x3c, 0x2f}, /* PD */ + {0xff, 0x60, 0x40, 0x5c, 0x3c, 0x5e}, /* PD */ {0xff, 0x61, 0x07, 0x17, 0x00, 0x01}, /* SI */ - {0xff, 0x60, 0x38, 0x17, 0x40, 0x2f} /* PI */ + {0xff, 0x60, 0x38, 0x5c, 0x40, 0x5e} /* PI */ }; -u8 VSLLINK_TAP_MOVE_FROM_E1[6] = +typedef struct insert_insignificant_operation { -// TLR RTI SD PD SI PI - 0xff, 0x60, 0x38, 0x5c, 0x3c, 0x5E -}; + unsigned char insert_value; + unsigned char insert_position; +}insert_insignificant_operation_t; -u8 VSLLINK_TAP_MOVE_INSERT_INSIGNIFICANT[7][6][2] = +insert_insignificant_operation_t VSLLINK_TAP_MOVE_INSERT_INSIGNIFICANT[6][6] = { /* stuff offset */ {/* TLR */ @@ -175,6 +173,19 @@ 0x00, 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f }; +typedef struct +{ + int length; /* Number of bits to read */ + int offset; + scan_command_t *command; /* Corresponding scan command */ + u8 *buffer; +} pending_scan_result_t; + +#define MAX_PENDING_SCAN_RESULTS 256 + +static int pending_scan_results_length; +static pending_scan_result_t pending_scan_results_buffer[MAX_PENDING_SCAN_RESULTS]; + /* External interface functions */ int vsllink_execute_queue(void); int vsllink_speed(int speed); @@ -219,8 +230,8 @@ void vsllink_debug_buffer(u8 *buffer, int length); -int vsllink_tms_data_len = 0; -u8* vsllink_tms_cmd_pos; +static int vsllink_tms_data_len = 0; +static u8* vsllink_tms_cmd_pos; vsllink_jtag_t* vsllink_jtag_handle; @@ -255,7 +266,7 @@ switch (cmd->type) { case JTAG_END_STATE: - DEBUG_JTAG_IO("end_state: %i", cmd->cmd.end_state->end_state); + DEBUG_JTAG_IO("end_state: %s", jtag_state_name(cmd->cmd.end_state->end_state)); if (cmd->cmd.end_state->end_state != -1) { @@ -264,9 +275,9 @@ break; case JTAG_RUNTEST: - DEBUG_JTAG_IO( "runtest %i cycles, end in %i", cmd->cmd.runtest->num_cycles, \ - cmd->cmd.runtest->end_state); - + DEBUG_JTAG_IO( "runtest %i cycles, end in %s", cmd->cmd.runtest->num_cycles, \ + jtag_state_name(cmd->cmd.runtest->end_state)); + if (cmd->cmd.runtest->end_state != -1) { vsllink_end_state(cmd->cmd.runtest->end_state); @@ -275,7 +286,7 @@ break; case JTAG_STATEMOVE: - DEBUG_JTAG_IO("statemove end in %i", cmd->cmd.statemove->end_state); + DEBUG_JTAG_IO("statemove end in %s", jtag_state_name(cmd->cmd.statemove->end_state)); if (cmd->cmd.statemove->end_state != -1) { @@ -285,9 +296,9 @@ break; case JTAG_PATHMOVE: - DEBUG_JTAG_IO("pathmove: %i states, end in %i", \ + DEBUG_JTAG_IO("pathmove: %i states, end in %s", \ cmd->cmd.pathmove->num_states, \ - cmd->cmd.pathmove->path[cmd->cmd.pathmove->num_states - 1]); + jtag_state_name(cmd->cmd.pathmove->path[cmd->cmd.pathmove->num_states - 1])); vsllink_path_move(cmd->cmd.pathmove->num_states, cmd->cmd.pathmove->path); break; @@ -301,11 +312,11 @@ scan_size = jtag_build_buffer(cmd->cmd.scan, &buffer); if (cmd->cmd.scan->ir_scan) { - DEBUG_JTAG_IO("JTAG Scan write IR(%d bits), end in %d:", scan_size, cmd->cmd.scan->end_state); + DEBUG_JTAG_IO("JTAG Scan write IR(%d bits), end in %s:", scan_size, jtag_state_name(cmd->cmd.scan->end_state)); } else { - DEBUG_JTAG_IO("JTAG Scan write DR(%d bits), end in %d:", scan_size, cmd->cmd.scan->end_state); + DEBUG_JTAG_IO("JTAG Scan write DR(%d bits), end in %s:", scan_size, jtag_state_name(cmd->cmd.scan->end_state)); } #ifdef _DEBUG_JTAG_IO_ @@ -470,8 +481,7 @@ vsllink_usb_out_buffer[0] = VSLLINK_CMD_SET_PORTDIR; vsllink_usb_out_buffer[1] = JTAG_PINMSK_SRST | JTAG_PINMSK_TRST | JTAG_PINMSK_USR1 | JTAG_PINMSK_USR2; vsllink_usb_out_buffer[2] = JTAG_PINMSK_SRST | JTAG_PINMSK_TRST; - result = vsllink_usb_write(vsllink_jtag_handle, 3); - if (result != 3) + if (vsllink_usb_write(vsllink_jtag_handle, 3) != 3) { LOG_ERROR("VSLLink USB send data error"); exit(-1); @@ -490,6 +500,17 @@ { if ((vsllink_usb_in_buffer != NULL) && (vsllink_usb_out_buffer != NULL)) { + // Set all pins to input + vsllink_usb_out_buffer[0] = VSLLINK_CMD_SET_PORTDIR; + vsllink_usb_out_buffer[1] = JTAG_PINMSK_SRST | JTAG_PINMSK_TRST | JTAG_PINMSK_USR1 | JTAG_PINMSK_USR2; + vsllink_usb_out_buffer[2] = 0; + if (vsllink_usb_write(vsllink_jtag_handle, 3) != 3) + { + LOG_ERROR("VSLLink USB send data error"); + exit(-1); + } + + // disconnect vsllink_simple_command(VSLLINK_CMD_DISCONN); vsllink_usb_close(vsllink_jtag_handle); } @@ -506,24 +527,29 @@ } // when vsllink_tms_data_len > 0, vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx] is the byte that need to be appended. -// length of VSLLINK_CMDJTAGSEQ_TMSBYTE has been set. -void VSLLINK_add_tms_from_RTI(enum tap_state state) +// length of VSLLINK_CMDJTAGSEQ_TMSBYTE has been set, no need to set it here. +void vsllink_append_tms(void) { - u8 tms_scan = VSLLINK_TAP_MOVE(TAP_IDLE, state); + u8 tms_scan = VSLLINK_TAP_MOVE(cur_state, end_state); u16 tms2; - if ((cur_state != TAP_IDLE) || (state == TAP_IDLE) || (vsllink_tms_data_len <= 0) || (vsllink_tms_data_len >= 8) || (vsllink_tms_cmd_pos == NULL)) + if (((cur_state != TAP_RESET) && (cur_state != TAP_IDLE) && (cur_state != TAP_DRPAUSE) && (cur_state != TAP_IRPAUSE)) || \ + (vsllink_tms_data_len <= 0) || (vsllink_tms_data_len >= 8) || \ + (vsllink_tms_cmd_pos == NULL)) { LOG_ERROR("There MUST be some bugs in the driver"); exit(-1); } - tms2 = (tms_scan & VSLLINK_BIT_MSK[VSLLINK_TAP_MOVE_INSERT_INSIGNIFICANT[1][tap_move_map[state]][1]]) << vsllink_tms_data_len; - if (VSLLINK_TAP_MOVE_INSERT_INSIGNIFICANT[1][tap_move_map[state]][0] == 1) + tms2 = (tms_scan & VSLLINK_BIT_MSK[VSLLINK_TAP_MOVE_INSERT_INSIGNIFICANT[tap_move_map[cur_state]][tap_move_map[end_state]].insert_position]) << \ + vsllink_tms_data_len; + if (VSLLINK_TAP_MOVE_INSERT_INSIGNIFICANT[tap_move_map[cur_state]][tap_move_map[end_state]].insert_value == 1) { - tms2 |= VSLLINK_BIT_MSK[8 - vsllink_tms_data_len] << (vsllink_tms_data_len + VSLLINK_TAP_MOVE_INSERT_INSIGNIFICANT[1][tap_move_map[state]][1]); + tms2 |= VSLLINK_BIT_MSK[8 - vsllink_tms_data_len] << \ + (vsllink_tms_data_len + VSLLINK_TAP_MOVE_INSERT_INSIGNIFICANT[tap_move_map[cur_state]][tap_move_map[end_state]].insert_position); } - tms2 |= (tms_scan >> VSLLINK_TAP_MOVE_INSERT_INSIGNIFICANT[1][tap_move_map[state]][1]) << (8 + VSLLINK_TAP_MOVE_INSERT_INSIGNIFICANT[1][tap_move_map[state]][1]); + tms2 |= (tms_scan >> VSLLINK_TAP_MOVE_INSERT_INSIGNIFICANT[tap_move_map[cur_state]][tap_move_map[end_state]].insert_position) << \ + (8 + VSLLINK_TAP_MOVE_INSERT_INSIGNIFICANT[tap_move_map[cur_state]][tap_move_map[end_state]].insert_position); vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] |= (tms2 >> 0) & 0xff; vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = (tms2 >> 8) & 0xff; @@ -553,7 +579,7 @@ { if (vsllink_tms_data_len > 0) { - VSLLINK_add_tms_from_RTI(end_state); + vsllink_append_tms(); } else { @@ -577,26 +603,32 @@ { if (i > 0) { - vsllink_usb_out_buffer[++vsllink_usb_out_buffer_idx] = 0; + vsllink_usb_out_buffer_idx++; } - else - { - vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx] = 0; - } + vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx] = 0; } if (path[i - start] == tap_transitions[cur_state].high) { vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx] |= 1 << (i & 7); } + else if (path[i - start] == tap_transitions[cur_state].low) + { + // nothing to do + } else { - LOG_ERROR("BUG: %d -> %d isn't a valid TAP transition", cur_state, path[i]); + LOG_ERROR("BUG: %s -> %s isn't a valid TAP transition", jtag_state_name(cur_state), jtag_state_name(path[i])); exit(-1); } + cur_state = path[i - start]; + } + if ((i > 0) && ((i & 7) == 0)) + { + vsllink_usb_out_buffer_idx++; + vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx] = 0; + } - cur_state = path[i]; - } end_state = cur_state; } @@ -606,42 +638,68 @@ if (vsllink_tms_data_len > 0) { - if ((vsllink_tms_data_len + num_states) < 8) + // there are vsllink_tms_data_len more tms bits to be shifted + // so there are vsllink_tms_data_len + num_states tms bits in all + tms_len = vsllink_tms_data_len + num_states; + if (tms_len <= 16) { - vsllink_add_path(vsllink_tms_data_len, num_states, path); - num_states = 0; - } - else if ((vsllink_tms_data_len + num_states) < 16) - { - if ((*vsllink_tms_cmd_pos & VSLLINK_CMDJTAGSEQ_LENMSK) \ - < VSLLINK_CMDJTAGSEQ_LENMSK) + // merge into last tms shift + if (tms_len < 8) { - *vsllink_tms_cmd_pos++; + // just append tms data to the last tms byte vsllink_add_path(vsllink_tms_data_len, num_states, path); } - else + else if (tms_len == 8) { - // need a new VSLLINK_CMDJTAGSEQ_TMSBYTE command - // if vsllink_tms_data_len > 0, length of VSLLINK_CMDJTAGSEQ_TMSBYTE MUST be > 1(tms_len > 2) - *vsllink_tms_cmd_pos--; - vsllink_add_path(vsllink_tms_data_len, 8 - vsllink_tms_data_len, path); - vsllink_usb_out_buffer_idx++; - vsllink_tap_ensure_space(0, 3); - vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = VSLLINK_CMDJTAGSEQ_TMSBYTE | 1; - vsllink_tms_cmd_pos = vsllink_usb_out_buffer + vsllink_usb_out_buffer_idx; - vsllink_add_path(vsllink_tms_data_len, num_states + vsllink_tms_data_len - 8, path + 8 - vsllink_tms_data_len); + // end last tms shift command + (*vsllink_tms_cmd_pos)--; + vsllink_add_path(vsllink_tms_data_len, num_states, path); } + else if (tms_len < 16) + { + if ((*vsllink_tms_cmd_pos & VSLLINK_CMDJTAGSEQ_LENMSK) < VSLLINK_CMDJTAGSEQ_LENMSK) + { + // every tms shift command can contain VSLLINK_CMDJTAGSEQ_LENMSK + 1 bytes in most + // there is enought tms length in the current tms shift command + (*vsllink_tms_cmd_pos)++; + vsllink_add_path(vsllink_tms_data_len, num_states, path); + } + else + { + // every tms shift command can contain VSLLINK_CMDJTAGSEQ_LENMSK + 1 bytes in most + // not enough tms length in the current tms shift command + // so a new command should be added + // first decrease byte length of last tms shift command + (*vsllink_tms_cmd_pos)--; + // append tms data to the last tms byte + vsllink_add_path(vsllink_tms_data_len, 8 - vsllink_tms_data_len, path); + path += 8 - vsllink_tms_data_len; + // add new command(3 bytes) + vsllink_tap_ensure_space(0, 3); + vsllink_tms_cmd_pos = &vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx]; + vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = VSLLINK_CMDJTAGSEQ_TMSBYTE | 1; + vsllink_add_path(0, num_states - (8 - vsllink_tms_data_len), path); + } + } + else if (tms_len == 16) + { + // end last tms shift command + vsllink_add_path(vsllink_tms_data_len, num_states, path); + } + vsllink_tms_data_len = (vsllink_tms_data_len + num_states) & 7; + if (vsllink_tms_data_len == 0) + { + vsllink_tms_cmd_pos = NULL; + } num_states = 0; } else { vsllink_add_path(vsllink_tms_data_len, 16 - vsllink_tms_data_len, path); - path_idx = 16 - vsllink_tms_data_len; - vsllink_usb_out_buffer_idx++; + path += 16 - vsllink_tms_data_len; num_states -= 16 - vsllink_tms_data_len; - path += 16 - vsllink_tms_data_len; vsllink_tms_data_len = 0; vsllink_tms_cmd_pos = NULL; } @@ -677,14 +735,16 @@ { if (tms_len < (VSLLINK_CMDJTAGSEQ_LENMSK + 1)) { - vsllink_usb_out_buffer[tms_cmd_pos]++; - vsllink_usb_out_buffer = vsllink_usb_out_buffer + tms_cmd_pos; + vsllink_tms_cmd_pos = &vsllink_usb_out_buffer[tms_cmd_pos]; + (*vsllink_tms_cmd_pos)++; } else { vsllink_usb_out_buffer[tms_cmd_pos]--; + tms_len = vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx]; vsllink_tap_ensure_space(0, 3); + vsllink_tms_cmd_pos = &vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx]; vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = VSLLINK_CMDJTAGSEQ_TMSBYTE | 1; vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx] = tms_len; } @@ -694,164 +754,147 @@ void vsllink_runtest(int num_cycles) { - int i = 0, j; - int tms_len, first_tms = 0, tms_cmd_pos = 0; + int tms_len; enum tap_state saved_end_state = end_state; if (cur_state != TAP_IDLE) { + // enter into IDLE state vsllink_end_state(TAP_IDLE); - - if (vsllink_tms_data_len > 0) - { - VSLLINK_add_tms_from_RTI(end_state); - } - else - { - first_tms = 1; - } + vsllink_state_move(); } - - if (vsllink_tms_data_len > 0) + else { // cur_state == TAP_IDLE - if ((vsllink_tms_data_len + num_cycles) < 8) + if (vsllink_tms_data_len > 0) { - vsllink_tms_data_len += num_cycles; - num_cycles = 0; - } - else if ((vsllink_tms_data_len + num_cycles) < 16) - { - if ((*vsllink_tms_cmd_pos & VSLLINK_CMDJTAGSEQ_LENMSK) \ - < VSLLINK_CMDJTAGSEQ_LENMSK) + // there are vsllink_tms_data_len more tms bits to be shifted + // so there are vsllink_tms_data_len + num_cycles tms bits in all + tms_len = vsllink_tms_data_len + num_cycles; + if (tms_len <= 16) { - *vsllink_tms_cmd_pos++; - vsllink_usb_out_buffer[++vsllink_usb_out_buffer_idx] = 0; + // merge into last tms shift + if (tms_len < 8) + { + // just add to vsllink_tms_data_len + // same result if tun through + //vsllink_tms_data_len += num_cycles; + } + else if (tms_len == 8) + { + // end last tms shift command + // just reduce it, no need to append_tms + (*vsllink_tms_cmd_pos)--; + vsllink_usb_out_buffer_idx++; + } + else if (tms_len < 16) + { + if ((*vsllink_tms_cmd_pos & VSLLINK_CMDJTAGSEQ_LENMSK) < VSLLINK_CMDJTAGSEQ_LENMSK) + { + // every tms shift command can contain VSLLINK_CMDJTAGSEQ_LENMSK + 1 bytes in most + // there is enought tms length in the current tms shift command + // increase the tms byte length by 1 and set the last byte to 0 + (*vsllink_tms_cmd_pos)++; + vsllink_usb_out_buffer_idx++; + vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx] = 0; + } + else + { + // every tms shift command can contain VSLLINK_CMDJTAGSEQ_LENMSK + 1 bytes in most + // not enough tms length in the current tms shift command + // so a new command should be added + // first decrease byte length of last tms shift command + (*vsllink_tms_cmd_pos)--; + // move the command pointer to the next empty position + vsllink_usb_out_buffer_idx++; + // add new command(3 bytes) + vsllink_tap_ensure_space(0, 3); + vsllink_tms_cmd_pos = &vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx]; + vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = VSLLINK_CMDJTAGSEQ_TMSBYTE | 1; + vsllink_usb_out_buffer[++vsllink_usb_out_buffer_idx] = 0; + } + } + else if (tms_len == 16) + { + // end last tms shift command + vsllink_usb_out_buffer_idx++; + vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = 0; + } + + vsllink_tms_data_len = (vsllink_tms_data_len + num_cycles) & 7; + if (vsllink_tms_data_len == 0) + { + vsllink_tms_cmd_pos = NULL; + } + num_cycles = 0; } else { - // need a new VSLLINK_CMDJTAGSEQ_TMSBYTE command - // if vsllink_tms_data_len > 0, length of VSLLINK_CMDJTAGSEQ_TMSBYTE MUST be > 1(tms_len > 2) - *vsllink_tms_cmd_pos--; - vsllink_tap_ensure_space(0, 3); - vsllink_usb_out_buffer[++vsllink_usb_out_buffer_idx] = VSLLINK_CMDJTAGSEQ_TMSBYTE | 1; - vsllink_tms_cmd_pos = vsllink_usb_out_buffer + vsllink_usb_out_buffer_idx; - vsllink_usb_out_buffer[++vsllink_usb_out_buffer_idx] = 0; + vsllink_usb_out_buffer_idx++; + vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = 0; + + num_cycles -= 16 - vsllink_tms_data_len; + vsllink_tms_data_len = 0; + vsllink_tms_cmd_pos = NULL; } - vsllink_tms_data_len = (vsllink_tms_data_len + num_cycles) & 7; - num_cycles = 0; } - else - { - vsllink_usb_out_buffer[++vsllink_usb_out_buffer_idx] = 0; - vsllink_usb_out_buffer_idx++; - - num_cycles -= 16 - vsllink_tms_data_len; - vsllink_tms_data_len = 0; - vsllink_tms_cmd_pos = NULL; - } } + // from here vsllink_tms_data_len == 0 or num_cycles == 0 - tms_len = ((num_cycles + 7) >> 3) + first_tms; - if (tms_len > 0) + if (vsllink_tms_data_len > 0) { - // Normal operation, don't need to append tms data - vsllink_tms_data_len = num_cycles & 7; - - if (vsllink_tms_data_len > 0) + // num_cycles == 0 + // no need to shift + if (num_cycles > 0) { - tms_len += 1; + LOG_ERROR("There MUST be some bugs in the driver"); + exit(-1); } - // tms_len includes the length of tms byte to append - - // Make sure there is enough space - // 1 more byte maybe needed for the last tms move - vsllink_tap_ensure_space(0, (tms_len / VSLLINK_CMDJTAGSEQ_LENMSK) + tms_len + 1); - - while(tms_len > 0) + } + else + { + // get number of bytes left to be sent + tms_len = num_cycles >> 3; + if (tms_len > 0) { - if (tms_len > (VSLLINK_CMDJTAGSEQ_LENMSK + 1)) - { - i = VSLLINK_CMDJTAGSEQ_LENMSK + 1; - } - else - { - i = tms_len; - } + vsllink_tap_ensure_space(1, 5); + // if tms_len > 0, vsllink_tms_data_len == 0 + // so just add new command + vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = VSLLINK_CMDJTAGSEQ_TMS0BYTE; + vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = (tms_len >> 0) & 0xff; + vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = (tms_len >> 8) & 0xff; + vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = (tms_len >> 16) & 0xff; + vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = (tms_len >> 24) & 0xff; - tms_cmd_pos = vsllink_usb_out_buffer_idx; + vsllink_usb_in_want_length += 1; + pending_scan_results_buffer[pending_scan_results_length].buffer = NULL; + pending_scan_results_length++; - vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = VSLLINK_CMDJTAGSEQ_TMSBYTE | (i - 1); - - if (first_tms) + if (tms_len > 0xFFFF) { - vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = VSLLINK_TAP_MOVE(cur_state, end_state); - first_tms = 0; - j = i - 1; + vsllink_tap_execute(); + vsllink_usb_out_buffer[0] = VSLLINK_CMD_HW_JTAGSEQCMD; + vsllink_usb_out_buffer_idx = 3; } - else - { - j = i; - } - - while (j-- > 0) - { - vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = 0; - } - - tms_len -= i; } - // post process vsllink_usb_out_buffer_idx + vsllink_tms_data_len = num_cycles & 7; if (vsllink_tms_data_len > 0) { - vsllink_usb_out_buffer_idx -= 2; + vsllink_tap_ensure_space(0, 3); + vsllink_tms_cmd_pos = &vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx]; + vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = VSLLINK_CMDJTAGSEQ_TMSBYTE | 1; + vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx] = 0; } + } - // Set end_state - vsllink_end_state(saved_end_state); - cur_state = TAP_IDLE; - if (saved_end_state != TAP_IDLE) - { - if (vsllink_tms_data_len > 0) - { - VSLLINK_add_tms_from_RTI(end_state); - } - else - { - if (i < (VSLLINK_CMDJTAGSEQ_LENMSK + 1)) - { - vsllink_usb_out_buffer[tms_cmd_pos]++; - vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = VSLLINK_TAP_MOVE(TAP_IDLE, end_state); - } - else - { - vsllink_tap_ensure_space(0, 2); - vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = VSLLINK_CMDJTAGSEQ_TMSBYTE; - vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = VSLLINK_TAP_MOVE(TAP_IDLE, end_state); - } - } - cur_state = saved_end_state; - } - - if (vsllink_tms_data_len > 0) - { - vsllink_tms_cmd_pos = vsllink_usb_out_buffer + tms_cmd_pos; - } - } - else + // post-process + // set end_state + vsllink_end_state(saved_end_state); + cur_state = TAP_IDLE; + if (end_state != TAP_IDLE) { - // Set end_state if no RTI shifts - vsllink_end_state(saved_end_state); - cur_state = TAP_IDLE; - if (saved_end_state != TAP_IDLE) - { - vsllink_tap_ensure_space(0, 2); - vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = VSLLINK_CMDJTAGSEQ_TMSBYTE; - vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = VSLLINK_TAP_MOVE(TAP_IDLE, end_state); - - cur_state = saved_end_state; - } + vsllink_state_move(); } } @@ -861,6 +904,11 @@ u8 bits_left, tms_tmp, tdi_len; int i; + if (0 == scan_size ) + { + return; + } + tdi_len = ((scan_size + 7) >> 3); if ((tdi_len + 7) > VSLLINK_BufferSize) { @@ -877,10 +925,27 @@ { if (cur_state == end_state) { - *vsllink_tms_cmd_pos--; - tms_tmp = vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx]; + // already in IRSHIFT or DRSHIFT state + // merge tms data in the last tms shift command into next scan command + if(*vsllink_tms_cmd_pos < 1) + { + LOG_ERROR("There MUST be some bugs in the driver"); + exit(-1); + } + else if(*vsllink_tms_cmd_pos < 2) + { + tms_tmp = vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx]; + vsllink_usb_out_buffer_idx--; + } + else + { + tms_tmp = vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx]; + *vsllink_tms_cmd_pos -= 2; + } + vsllink_tap_ensure_space(1, tdi_len + 7); - + // VSLLINK_CMDJTAGSEQ_SCAN ored by 1 means that tms_before is valid + // which is merged from the last tms shift command vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = VSLLINK_CMDJTAGSEQ_SCAN | 1; vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = ((tdi_len + 1) >> 0) & 0xff; vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = ((tdi_len + 1)>> 8) & 0xff; @@ -898,10 +963,11 @@ vsllink_tap_append_scan(scan_size - vsllink_tms_data_len, buffer, command, vsllink_tms_data_len); scan_size -= 8 - vsllink_tms_data_len; + vsllink_tms_data_len = 0; } else { - VSLLINK_add_tms_from_RTI(end_state); + vsllink_append_tms(); vsllink_tap_ensure_space(1, tdi_len + 5); vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = VSLLINK_CMDJTAGSEQ_SCAN; @@ -939,7 +1005,7 @@ if (cur_state != end_state) { - vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = VSLLINK_TAP_MOVE_FROM_E1[tap_move_map[end_state]]; + vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = VSLLINK_TAP_MOVE(cur_state, end_state); } else { @@ -1041,19 +1107,6 @@ /***************************************************************************/ /* VSLLink tap functions */ -typedef struct -{ - int length; /* Number of bits to read */ - int offset; - scan_command_t *command; /* Corresponding scan command */ - u8 *buffer; -} pending_scan_result_t; - -#define MAX_PENDING_SCAN_RESULTS 256 - -static int pending_scan_results_length; -static pending_scan_result_t pending_scan_results_buffer[MAX_PENDING_SCAN_RESULTS]; - void vsllink_tap_init(void) { vsllink_usb_out_buffer_idx = 0; @@ -1101,7 +1154,7 @@ } /* Pad and send a tap sequence to the device, and receive the answer. - * For the purpose of padding we assume that we are in idle or pause state. */ + * For the purpose of padding we assume that we are in reset or idle or pause state. */ int vsllink_tap_execute(void) { int i; @@ -1110,13 +1163,17 @@ if (vsllink_tms_data_len > 0) { + if((cur_state != TAP_RESET) && (cur_state != TAP_IDLE) && (cur_state != TAP_IRPAUSE) && (cur_state != TAP_DRPAUSE)) + { + LOG_WARNING("%s is not in RESET or IDLE or PAUSR state", jtag_state_name(cur_state)); + } + if (vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx] & (1 << (vsllink_tms_data_len - 1))) { // last tms bit is '1' - // the only possible state is TLR, no need to control the number of shifts in RLT - // There MUST be some errors in the code - LOG_ERROR("last tms bit is '1'"); - exit(-1); + vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] |= 0xFF << vsllink_tms_data_len; + vsllink_usb_out_buffer[vsllink_usb_out_buffer_idx++] = 0xFF; + vsllink_tms_data_len = 0; } else { @@ -1146,27 +1203,31 @@ int length = pending_scan_result->length; int offset = pending_scan_result->offset; scan_command_t *command = pending_scan_result->command; + + if (buffer != NULL) + { + // IRSHIFT or DRSHIFT + buf_set_buf(vsllink_usb_in_buffer, first * 8 + offset, buffer, 0, length); + first += (length + offset + 7) >> 3; - /* Copy to buffer */ - buf_set_buf(vsllink_usb_in_buffer, first * 8 + offset, buffer, 0, length); - first += (length + offset + 7) >> 3; - - DEBUG_JTAG_IO("JTAG scan read(%d bits):", length); + DEBUG_JTAG_IO("JTAG scan read(%d bits):", length); #ifdef _DEBUG_JTAG_IO_ - vsllink_debug_buffer(buffer, (length + 7) >> 3); + vsllink_debug_buffer(buffer, (length + 7) >> 3); #endif - if (jtag_read_buffer(buffer, command) != ERROR_OK) - { - vsllink_tap_init(); - return ERROR_JTAG_QUEUE_FAILED; - } - - if (pending_scan_result->buffer != NULL) - { + if (jtag_read_buffer(buffer, command) != ERROR_OK) + { + vsllink_tap_init(); + return ERROR_JTAG_QUEUE_FAILED; + } + free(pending_scan_result->buffer); pending_scan_result->buffer = NULL; } + else + { + first++; + } } } else Modified: trunk/src/openocd.c =================================================================== --- trunk/src/openocd.c 2009-01-19 07:08:28 UTC (rev 1338) +++ trunk/src/openocd.c 2009-01-19 07:13:02 UTC (rev 1339) @@ -35,6 +35,7 @@ #include "jtag.h" #include "configuration.h" #include "xsvf.h" +#include "svf.h" #include "target.h" #include "flash.h" #include "nand.h" @@ -209,6 +210,7 @@ log_register_commands(cmd_ctx); jtag_register_commands(cmd_ctx); xsvf_register_commands(cmd_ctx); + svf_register_commands(cmd_ctx); target_register_commands(cmd_ctx); flash_register_commands(cmd_ctx); nand_register_commands(cmd_ctx); Added: trunk/src/svf/Makefile.am =================================================================== --- trunk/src/svf/Makefile.am 2009-01-19 07:08:28 UTC (rev 1338) +++ trunk/src/svf/Makefile.am 2009-01-19 07:13:02 UTC (rev 1339) @@ -0,0 +1,5 @@ +INCLUDES = -I$(top_srcdir)/src/server -I$(top_srcdir)/src/helper -I$(top_srcdir)/src/jtag $(all_includes) +METASOURCES = AUTO +noinst_LIBRARIES = libsvf.a +noinst_HEADERS = svf.h +libsvf_a_SOURCES = svf.c Added: trunk/src/svf/Makefile.in =================================================================== --- trunk/src/svf/Makefile.in 2009-01-19 07:08:28 UTC (rev 1338) +++ trunk/src/svf/Makefile.in 2009-01-19 07:13:02 UTC (rev 1339) @@ -0,0 +1,406 @@ +# Makefile.in generated by automake 1.10 from Makefile.am. +# @configure_input@ + +# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, +# 2003, 2004, 2005, 2006 Free Software Foundation, Inc. +# This Makefile.in is free software; the Free Software Foundation +# gives unlimited permission to copy and/or distribute it, +# with or without modifications, as long as this notice is preserved. + +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY, to the extent permitted by law; without +# even the implied warranty of MERCHANTABILITY or FITNESS FOR A +# PARTICULAR PURPOSE. + +@SET_MAKE@ + + +VPATH = @srcdir@ +pkgdatadir = $(datadir)/@PACKAGE@ +pkglibdir = $(libdir)/@PACKAGE@ +pkgincludedir = $(includedir)/@PACKAGE@ +am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd +install_sh_DATA = $(install_sh) -c -m 644 +install_sh_PROGRAM = $(install_sh) -c +install_sh_SCRIPT = $(install_sh) -c +INSTALL_HEADER = $(INSTALL_DATA) +transform = $(program_transform_name) +NORMAL_INSTALL = : +PRE_INSTALL = : +POST_INSTALL = : +NORMAL_UNINSTALL = : +PRE_UNINSTALL = : +POST_UNINSTALL = : +build_triplet = @build@ +host_triplet = @host@ +subdir = src/svf +DIST_COMMON = $(noinst_HEADERS) $(srcdir)/Makefile.am \ + $(srcdir)/Makefile.in +ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 +am__aclocal_m4_deps = $(top_srcdir)/configure.in +am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ + $(ACLOCAL_M4) +mkinstalldirs = $(install_sh) -d +CONFIG_HEADER = $(top_builddir)/config.h +CONFIG_CLEAN_FILES = +LIBRARIES = $(noinst_LIBRARIES) +AR = ar +ARFLAGS = cru +libsvf_a_AR = $(AR) $(ARFLAGS) +libsvf_a_LIBADD = +am_libsvf_a_OBJECTS = svf.$(OBJEXT) +libsvf_a_OBJECTS = $(am_libsvf_a_OBJECTS) +DEFAULT_INCLUDES = -I. -I$(top_builddir)@am__isrc@ +depcomp = $(SHELL) $(top_srcdir)/depcomp +am__depfiles_maybe = depfiles +COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ + $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) +CCLD = $(CC) +LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ +SOURCES = $(libsvf_a_SOURCES) +DIST_SOURCES = $(libsvf_a_SOURCES) +HEADERS = $(noinst_HEADERS) +ETAGS = etags +CTAGS = ctags +DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) +ACLOCAL = @ACLOCAL@ +AMTAR = @AMTAR@ +AUTOCONF = @AUTOCONF@ +AUTOHEADER = @AUTOHEADER@ +AUTOMAKE = @AUTOMAKE@ +AWK = @AWK@ +CC = @CC@ +CCDEPMODE = @CCDEPMODE@ +CC_FOR_BUILD = @CC_FOR_BUILD@ +CFLAGS = @CFLAGS@ +CFLAGS_FOR_BUILD = @CFLAGS_FOR_BUILD@ +CPP = @CPP@ +CPPFLAGS = @CPPFLAGS@ +CYGPATH_W = @CYGPATH_W@ +DEFS = @DEFS@ +DEPDIR = @DEPDIR@ +ECHO_C = @ECHO_C@ +ECHO_N = @ECHO_N@ +ECHO_T = @ECHO_T@ +EGREP = @EGREP@ +EXEEXT = @EXEEXT@ +EXEEXT_FOR_BUILD = @EXEEXT_FOR_BUILD@ +GREP = @GREP@ +INSTALL = @INSTALL@ +INSTALL_DATA = @INSTALL_DATA@ +INSTALL_PROGRAM = @INSTALL_PROGRAM@ +INSTALL_SCRIPT = @INSTALL_SCRIPT@ +INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ +LDFLAGS = @LDFLAGS@ +LIBOBJS = @LIBOBJS@ +LIBS = @LIBS@ +LTLIBOBJS = @LTLIBOBJS@ +MAKEINFO = @MAKEINFO@ +MKDIR_P = @MKDIR_P@ +OBJEXT = @OBJEXT@ +PACKAGE = @PACKAGE@ +PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ +PACKAGE_NAME = @PACKAGE_NAME@ +PACKAGE_STRING = @PACKAGE_STRING@ +PACKAGE_TARNAME = @PACKAGE_TARNAME@ +PACKAGE_VERSION = @PACKAGE_VERSION@ +PATH_SEPARATOR = @PATH_SEPARATOR@ +RANLIB = @RANLIB@ +SET_MAKE = @SET_MAKE@ +SHELL = @SHELL@ +STRIP = @STRIP@ +VERSION = @VERSION@ +abs_builddir = @abs_builddir@ +abs_srcdir = @abs_srcdir@ +abs_top_builddir = @abs_top_builddir@ +abs_top_srcdir = @abs_top_srcdir@ +ac_ct_CC = @ac_ct_CC@ +am__include = @am__include@ +am__leading_dot = @am__leading_dot@ +am__quote = @am__quote@ +am__tar = @am__tar@ +am__untar = @am__untar@ +bindir = @bindir@ +build = @build@ +build_alias = @build_alias@ +build_cpu = @build_cpu@ +build_os = @build_os@ +build_vendor = @build_vendor@ +builddir = @builddir@ +datadir = @datadir@ +datarootdir = @datarootdir@ +docdir = @docdir@ +dvidir = @dvidir@ +exec_prefix = @exec_prefix@ +host = @host@ +host_alias = @host_alias@ +host_cpu = @host_cpu@ +host_os = @host_os@ +host_vendor = @host_vendor@ +htmldir = @htmldir@ +includedir = @includedir@ +infodir = @infodir@ +install_sh = @install_sh@ +libdir = @libdir@ +libexecdir = @libexecdir@ +localedir = @localedir@ +localstatedir = @localstatedir@ +mandir = @mandir@ +mkdir_p = @mkdir_p@ +oldincludedir = @oldincludedir@ +pdfdir = @pdfdir@ +prefix = @prefix@ +program_transform_name = @program_transform_name@ +psdir = @psdir@ +sbindir = @sbindir@ +sharedstatedir = @sharedstatedir@ +srcdir = @srcdir@ +sysconfdir = @sysconfdir@ +target_alias = @target_alias@ +top_builddir = @top_builddir@ +top_srcdir = @top_srcdir@ +INCLUDES = -I$(top_srcdir)/src/server -I$(top_srcdir)/src/helper -I$(top_srcdir)/src/jtag $(all_includes) +METASOURCES = AUTO +noinst_LIBRARIES = libsvf.a +noinst_HEADERS = svf.h +libsvf_a_SOURCES = svf.c +all: all-am + +.SUFFIXES: +.SUFFIXES: .c .o .obj +$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) + @for dep in $?; do \ + case '$(am__configure_deps)' in \ + *$$dep*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \ + && exit 0; \ + exit 1;; \ + esac; \ + done; \ + echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign src/svf/Makefile'; \ + cd $(top_srcdir) && \ + $(AUTOMAKE) --foreign src/svf/Makefile +.PRECIOUS: Makefile +Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status + @case '$?' in \ + *config.status*) \ + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ + *) \ + echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ + cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ + esac; + +$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +$(top_srcdir)/configure: $(am__configure_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh +$(ACLOCAL_M4): $(am__aclocal_m4_deps) + cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh + +clean-noinstLIBRARIES: + -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) +libsvf.a: $(libsvf_a_OBJECTS) $(libsvf_a_DEPENDENCIES) + -rm -f libsvf.a + $(libsvf_a_AR) libsvf.a $(libsvf_a_OBJECTS) $(libsvf_a_LIBADD) + $(RANLIB) libsvf.a + +mostlyclean-compile: + -rm -f *.$(OBJEXT) + +distclean-compile: + -rm -f *.tab.c + +@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/svf.Po@am__quote@ + +.c.o: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c $< + +.c.obj: +@am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` +@am__fastdepCC_TRUE@ mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po +@AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ +@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ +@am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` + +ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + mkid -fID $$unique +tags: TAGS + +TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \ + test -n "$$unique" || unique=$$empty_fix; \ + $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ + $$tags $$unique; \ + fi +ctags: CTAGS +CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ + $(TAGS_FILES) $(LISP) + tags=; \ + here=`pwd`; \ + list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ + unique=`for i in $$list; do \ + if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ + done | \ + $(AWK) ' { files[$$0] = 1; } \ + END { for (i in files) print i; }'`; \ + test -z "$(CTAGS_ARGS)$$tags$$unique" \ + || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ + $$tags $$unique + +GTAGS: + here=`$(am__cd) $(top_builddir) && pwd` \ + && cd $(top_srcdir) \ + && gtags -i $(GTAGS_ARGS) $$here + +distclean-tags: + -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags + +distdir: $(DISTFILES) + @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ + list='$(DISTFILES)'; \ + dist_files=`for file in $$list; do echo $$file; done | \ + sed -e "s|^$$srcdirstrip/||;t" \ + -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ + case $$dist_files in \ + */*) $(MKDIR_P) `echo "$$dist_files" | \ + sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ + sort -u` ;; \ + esac; \ + for file in $$dist_files; do \ + if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ + if test -d $$d/$$file; then \ + dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ + if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ + cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \ + fi; \ + cp -pR $$d/$$file $(distdir)$$dir || exit 1; \ + else \ + test -f $(distdir)/$$file \ + || cp -p $$d/$$file $(distdir)/$$file \ + || exit 1; \ + fi; \ + done +check-am: all-am +check: check-am +all-am: Makefile $(LIBRARIES) $(HEADERS) +installdirs: +install: install-am +install-exec: install-exec-am +install-data: install-data-am +uninstall: uninstall-am + +install-am: all-am + @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am + +installcheck: installcheck-am +install-strip: + $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ + install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ + `test -z '$(STRIP)' || \ + echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install +mostlyclean-generic: + +clean-generic: + +distclean-generic: + -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) + +maintainer-clean-generic: + @echo "This command is intended for maintainers to use" + @echo "it deletes files that may require special tools to rebuild." +clean: clean-am + +clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am + +distclean: distclean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +distclean-am: clean-am distclean-compile distclean-generic \ + distclean-tags + +dvi: dvi-am + +dvi-am: + +html: html-am + +info: info-am + +info-am: + +install-data-am: + +install-dvi: install-dvi-am + +install-exec-am: + +install-html: install-html-am + +install-info: install-info-am + +install-man: + +install-pdf: install-pdf-am + +install-ps: install-ps-am + +installcheck-am: + +maintainer-clean: maintainer-clean-am + -rm -rf ./$(DEPDIR) + -rm -f Makefile +maintainer-clean-am: distclean-am maintainer-clean-generic + +mostlyclean: mostlyclean-am + +mostlyclean-am: mostlyclean-compile mostlyclean-generic + +pdf: pdf-am + +pdf-am: + +ps: ps-am + +ps-am: + +uninstall-am: + +.MAKE: install-am install-strip + +.PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ + clean-noinstLIBRARIES ctags distclean distclean-compile \ + distclean-generic distclean-tags distdir dvi dvi-am html \ + html-am info info-am install install-am install-data \ + install-data-am install-dvi install-dvi-am install-exec \ + install-exec-am install-html install-html-am install-info \ + install-info-am install-man install-pdf install-pdf-am \ + install-ps install-ps-am install-strip installcheck \ + installcheck-am installdirs maintainer-clean \ + maintainer-clean-generic mostlyclean mostlyclean-compile \ + mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ + uninstall-am + +# Tell versions [3.59,3.63) of GNU make to not export all variables. +# Otherwise a system limit (for SysV at least) may be exceeded. +.NOEXPORT: Added: trunk/src/svf/svf.c =================================================================== --- trunk/src/svf/svf.c 2009-01-19 07:08:28 UTC (rev 1338) +++ trunk/src/svf/svf.c 2009-01-19 07:13:02 UTC (rev 1339) @@ -0,0 +1,1305 @@ +/*************************************************************************** + * Copyright (C) 2009 by Simon Qian * + * Sim...@Si... * + * * + * 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. * + ***************************************************************************/ + + +/* The specification for SVF is available here: + * http://www.asset-intertech.com/support/svf.pdf + * Below, this document is refered to as the "SVF spec". + * + * The specification for XSVF is available here: + * http://www.xilinx.com/support/documentation/application_notes/xapp503.pdf + * Below, this document is refered to as the "XSVF spec". + */ + +#ifdef HAVE_CONFIG_H +#include "config.h" +#endif + +#include "svf.h" + +#include "jtag.h" +#include "command.h" +#include "log.h" + +#include <ctype.h> +#include <stdlib.h> +#include <unistd.h> +#include <sys/types.h> +#include <sys/stat.h> +#include <fcntl.h> +#include <string.h> + +#include <sys/time.h> +#include <time.h> + +// SVF command +typedef enum +{ + ENDDR, + ENDIR, + FREQUENCY, + HDR, + HIR, + PIO, + PIOMAP, + RUNTEST, + SDR, + SIR, + STATE, + TDR, + TIR, + TRST, +}svf_command_t; + +const char *svf_command_name[14] = +{ + "ENDDR", + "ENDIR", + "FREQUENCY", + "HDR", + "HIR", + "PIO", + "PIOMAP", + "RUNTEST", + "SDR", + "SIR", + "STATE", + "TDR", + "TIR", + "TRST" +}; + +typedef enum +{ + TRST_ON, + TRST_OFF, + TRST_Z, + TRST_ABSENT +}trst_mode_t; + +const char *svf_trst_mode_name[4] = +{ + "ON", + "OFF", + "Z", + "ABSENT" +}; + +char *svf_tap_state_name[16]; + +#define XXR_TDI (1 << 0) +#define XXR_TDO (1 << 1) +#define XXR_MASK (1 << 2) +#define XXR_SMASK (1 << 3) +typedef struct +{ + int len; + int data_mask; + u8 *tdi; + u8 *tdo; + u8 *mask; + u8 *smask; +}svf_xxr_para_t; + +typedef struct +{ + float frequency; + tap_state_t ir_end_state; + tap_state_t dr_end_state; + tap_state_t runtest_run_state; + tap_state_t runtest_end_state; + trst_mode_t trst_mode; + + svf_xxr_para_t hir_para; + svf_xxr_para_t hdr_para; + svf_xxr_para_t tir_para; + svf_xxr_para_t tdr_para; + svf_xxr_para_t sir_para; + svf_xxr_para_t sdr_para; +}svf_para_t; + +svf_para_t svf_para; +const svf_para_t svf_para_init = +{ +// frequency, ir_end_state, dr_end_state, runtest_run_state, runtest_end_state, trst_mode + 0, TAP_IDLE, TAP_IDLE, TAP_IDLE, TAP_IDLE, TRST_Z, +// hir_para +// {len, data_mask, tdi, tdo, mask, smask}, + {0, 0, NULL, NULL, NULL, NULL}, +// hdr_para +// {len, data_mask, tdi, tdo, mask, smask}, + {0, 0, NULL, NULL, NULL, NULL}, +// tir_para +// {len, data_mask, tdi, tdo, mask, smask}, + {0, 0, NULL, NULL, NULL, NULL}, +// tdr_para +// {len, data_mask, tdi, tdo, mask, smask}, + {0, 0, NULL, NULL, NULL, NULL}, +// sir_para +// {len, data_mask, tdi, tdo, mask, smask}, + {0, 0, NULL, NULL, NULL, NULL}, +// sdr_para +// {len, data_mask, tdi, tdo, mask, smask}, + {0, 0, NULL, NULL, NULL, NULL}, +}; + +typedef struct +{ + int line_num; // used to record line number of the check operation + // so more information could be printed + int enabled; // check is enabled or not + int buffer_offset; // buffer_offset to buffers + int bit_len; // bit length to check +}svf_check_tdo_para_t; + +#define SVF_CHECK_TDO_PARA_SIZE 1024 +static svf_check_tdo_para_t *svf_check_tdo_para = NULL; +static int svf_check_tdo_para_index = 0; + +#define dimof(a) (sizeof(a) / sizeof((a)[0])) + +static int svf_read_command_from_file(int fd); +static int svf_check_tdo(void); +static int svf_add_check_para(u8 enabled, int buffer_offset, int bit_len); +static int svf_run_command(struct command_context_s *cmd_ctx, char *cmd_str); +static int handle_svf_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc); + +static int svf_fd = 0; +static char *svf_command_buffer = NULL; +static int svf_command_buffer_size = 0; +static int svf_line_number = 1; + +static jtag_tap_t *tap = NULL; + +#define SVF_MAX_BUFFER_SIZE_TO_COMMIT (4 * 1024) +static u8 *svf_tdi_buffer = NULL, *svf_tdo_buffer = NULL, *svf_mask_buffer = NULL; +static int svf_buffer_index = 0, svf_buffer_size = 0; + + +int svf_register_commands(struct command_context_s *cmd_ctx) +{ + register_command(cmd_ctx, NULL, "svf", handle_svf_command, + COMMAND_EXEC, "run svf <file>"); + + return ERROR_OK; +} + +void svf_free_xxd_para(svf_xxr_para_t *para) +{ + if (NULL != para) + { + if (para->tdi != NULL) + { + free(para->tdi); + para->tdi = NULL; + } + if (para->tdo != NULL) + { + free(para->tdo); + para->tdo = NULL; + } + if (para->mask != NULL) + { + free(para->mask); + para->mask = NULL; + } + if (para->smask != NULL) + { + free(para->smask); + para->smask = NULL; + } + } +} + +static int handle_svf_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc) +{ + int command_num = 0, i; + int ret = ERROR_OK; + + if (argc < 1) + { + command_print(cmd_ctx, "usage: svf <file>"); + return ERROR_FAIL; + } + + if ((svf_fd = open(args[0], O_RDONLY)) < 0) + { + command_print(cmd_ctx, "file \"%s\" not found", args[0]); + return ERROR_FAIL; + } + + LOG_USER("svf processing file: \"%s\"", args[0]); + + // init + svf_line_number = 1; + svf_command_buffer_size = 0; + + svf_check_tdo_para_index = 0; + svf_check_tdo_para = malloc(sizeof(svf_check_tdo_para_t) * SVF_CHECK_TDO_PARA_SIZE); + if (NULL == svf_check_tdo_para) + { + LOG_ERROR("not enough memory"); + ret = ERROR_FAIL; + goto free_all; + } + + svf_buffer_index = 0; + // double the buffer size + // in case current command cannot be commited, and next command is a bit scan command + // here is 32K bits for this big scan command, it should be enough + // buffer will be reallocated if buffer size is not enough + svf_tdi_buffer = (u8 *)malloc(2 * SVF_MAX_BUFFER_SIZE_TO_COMMIT); + if (NULL == svf_tdi_buffer) + { + LOG_ERROR("not enough memory"); + ret = ERROR_FAIL; + goto free_all; + } + svf_tdo_buffer = (u8 *)malloc(2 * SVF_MAX_BUFFER_SIZE_TO_COMMIT); + if (NULL == svf_tdo_buffer) + { + LOG_ERROR("not enough memory"); + ret = ERROR_FAIL; + goto free_all; + } + svf_mask_buffer = (u8 *)malloc(2 * SVF_MAX_BUFFER_SIZE_TO_COMMIT); + if (NULL == svf_mask_buffer) + { + LOG_ERROR("not enough memory"); + ret = ERROR_FAIL; + goto free_all; + } + svf_buffer_size = 2 * SVF_MAX_BUFFER_SIZE_TO_COMMIT; + + memcpy(&svf_para, &svf_para_init, sizeof(svf_para)); + for (i = 0; i < dimof(svf_tap_state_name); i++) + { + svf_tap_state_name[i] = (char *)jtag_state_name(i); + } + // TAP_RESET + jtag_add_tlr(); + + while ( ERROR_OK == svf_read_command_from_file(svf_fd) ) + { + if (ERROR_OK != svf_run_command(cmd_ctx, svf_command_buffer)) + { + LOG_ERROR("fail to run command at line %d", svf_line_number); + ret = ERROR_FAIL; + break; + } + command_num++; + } + if (ERROR_OK != jtag_execute_queue()) + { + ret = ERROR_FAIL; + } + else if (ERROR_OK != svf_check_tdo()) + { + ret = ERROR_FAIL; + } + +free_all: + + close(svf_fd); + svf_fd = 0; + + // free buffers + if (svf_command_buffer) + { + free(svf_command_buffer); + svf_command_buffer = NULL; + svf_command_buffer_size = 0; + } + if (svf_check_tdo_para) + { + free(svf_check_tdo_para); + svf_check_tdo_para = NULL; + svf_check_tdo_para_index = 0; + } + if (svf_tdi_buffer) + { + free(svf_tdi_buffer); + svf_tdi_buffer = NULL; + } + if (svf_tdo_buffer) + { + free(svf_tdo_buffer); + svf_tdo_buffer = NULL; + } + if (svf_mask_buffer) + { + free(svf_mask_buffer); + svf_mask_buffer = NULL; + } + svf_buffer_index = 0; + svf_buffer_size = 0; + + svf_free_xxd_para(&svf_para.hdr_para); + svf_free_xxd_para(&svf_para.hir_para); + svf_free_xxd_para(&svf_para.tdr_para); + svf_free_xxd_para(&svf_para.tir_para); + svf_free_xxd_para(&svf_para.sdr_para); + svf_free_xxd_para(&svf_para.sir_para); + + if (ERROR_OK == ret) + { + command_print(cmd_ctx, "svf file programmed successfully for %d commands", command_num); + } + else + { + command_print(cmd_ctx, "svf file programmed failed"); + } + + return ret; +} + +#define SVFP_CMD_INC_CNT 1024 +static int svf_read_command_from_file(int fd) +{ + char ch, *tmp_buffer = NULL; + int cmd_pos = 0, cmd_ok = 0, slash = 0, comment = 0; + + while (!cmd_ok && (read(fd, &ch, 1) > 0) ) + { + switch(ch) + { + case '!': + slash = 0; + comment = 1; + break; + case '/': + if (++slash == 2) + { + comment = 1; + } + break; + case ';': + slash = 0; + if (!comment) + { + cmd_ok = 1; + } + break; + case '\n': + svf_line_number++; + case '\r': + slash = 0; + comment = 0; + break; + default: + if (!comment) + { + if (cmd_pos >= svf_command_buffer_size - 1) + { + tmp_buffer = (char*)malloc(svf_command_buffer_size + SVFP_CMD_INC_CNT); // 1 more byte for '\0' + if (NULL == tmp_buffer) + { + LOG_ERROR("not enough memory"); + return ERROR_FAIL; + } + if (svf_command_buffer_size > 0) + { + memcpy(tmp_buffer, svf_command_buffer, svf_command_buffer_size); + } + if (svf_command_buffer != NULL) + { + free(svf_command_buffer); + } + svf_command_buffer = tmp_buffer; + svf_command_buffer_size += SVFP_CMD_INC_CNT; + tmp_buffer = NULL; + } + svf_command_buffer[cmd_pos++] = (char)toupper(ch); + } + break; + } + } + + if (cmd_ok) + { + svf_command_buffer[cmd_pos] = '\0'; + return ERROR_OK; + } + else + { + return ERROR_FAIL; + } +} + +static int svf_parse_cmd_string(char *str, int len, char **argus, int *num_of_argu) +{ + int pos = 0, num = 0, space_found = 1; + + while (pos < len) + { + switch(str[pos]) + { + case '\n': + case '\r': + case '!': + case '/': + LOG_ERROR("fail to parse svf command"); + return ERROR_FAIL; + break; + case ' ': + space_found = 1; + str[pos] = '\0'; + break; + default: + if (space_found) + { + argus[num++] = &str[pos]; + space_found = 0; + } + break; + } + pos++; + } + + *num_of_argu = num; + + return ERROR_OK; +} + +static int svf_tap_state_is_stable(tap_state_t state) +{ + return ((TAP_RESET == state) || (TAP_IDLE == state) || (TAP_DRPAUSE == state) || (TAP_IRPAUSE == state)); +} + +static int svf_tap_state_is_valid(tap_state_t state) +{ + return ((state >= 0) && (state < sizeof(svf_tap_state_name))); +} + +static int svf_find_string_in_array(char *str, char **strs, int num_of_element) +{ + int i; + + for (i = 0; i < num_of_element; i++) + { + if (!strcmp(str, strs[i])) + { + return i; + } + } + return 0xFF; +} + +static int svf_adjust_array_length(u8 **arr, int orig_bit_len, int new_bit_len) +{ + int new_byte_len = (new_bit_len + 7) >> 3; + + if ((NULL == *arr) || (((orig_bit_len + 7) >> 3) < ((new_bit_len + 7) >> 3))) + { + if (*arr != NULL) + { + free(*arr); + *arr = NULL; + } + *arr = (u8*)malloc(new_byte_len); + if (NULL == *arr) + { + LOG_ERROR("not enough memory"); + return ERROR_FAIL; + } + memset(*arr, 0, new_byte_len); + } + return ERROR_OK; +} + +static int svf_copy_hexstring_to_binary(char *str, u8 **bin, int orig_bit_len, int bit_len) +{ + int i, str_len = strlen(str), str_byte_len = (bit_len + 3) >> 2, loop_cnt; + u8 ch, need_write = 1; + + if (ERROR_OK != svf_adjust_array_length(bin, orig_bit_len, bit_len)) + { + LOG_ERROR("fail to adjust length of array"); + return ERROR_FAIL; + } + + if (str_byte_len > str_len) + { + loop_cnt = str_byte_len; + } + else + { + loop_cnt = str_len; + } + + for (i = 0; i < loop_cnt; i++) + { + if (i < str_len) + { + ch = str[str_len - i - 1]; + if ((ch >= '0') && (ch <= '9')) + { + ch = ch - '0'; + } + else if ((ch >= 'A') && (ch <= 'F')) + { + ch = ch - 'A' + 10; + } + else + { + LOG_ERROR("invalid hex string"); + return ERROR_FAIL; + } + } + else + { + ch = 0; + } + + // check valid + if (i >= str_byte_len) + { + // all data written, other data should be all '0's and needn't to be written + need_write = 0; + if (ch != 0) + { + LOG_ERROR("value execede length"); + return ERROR_FAIL; + } + } + else if (i == (str_byte_len - 1)) + { + // last data byte, written if valid + if ((ch & ~((1 << (bit_len - 4 * i)) - 1)) != 0) + { + LOG_ERROR("value execede length"); + return ERROR_FAIL; + } + } + + if (need_write) + { + // write bin + if (i % 2) + { + // MSB + (*bin)[i / 2] |= ch << 4; + } + else + { + // LSB + (*bin)[i / 2] = 0; + (*bin)[i / 2] |= ch; + } + } + } + + return ERROR_OK; +} + +static int svf_check_tdo(void) +{ + int i, j, byte_len, index; + + for (i = 0; i < svf_check_tdo_para_index; i++) + { + if (svf_check_tdo_para[i].enabled) + { + byte_len = (svf_check_tdo_para[i].bit_len + 7) >> 3; + index = svf_check_tdo_para[i].buffer_offset; + for (j = 0; j < byte_len; j++) + { + if ((svf_tdi_buffer[index + j] & svf_mask_buffer[index + j]) != svf_tdo_buffer[index + j]) + { + LOG_ERROR("tdo check error at line %d, read = 0x%X, want = 0x%X, mask = 0x%X", + svf_check_tdo_para[i].line_num, + (*(int*)(svf_tdi_buffer + index)) & ((1 << svf_check_tdo_para[i].bit_len) - 1), + (*(int*)(svf_tdo_buffer + index)) & ((1 << svf_check_tdo_para[i].bit_len) - 1), + (*(int*)(svf_mask_buffer + index)) & ((1 << svf_check_tdo_para[i].bit_len) - 1)); + return ERROR_FAIL; + } + } + } + } + svf_check_tdo_para_index = 0; + + return ERROR_OK; +} + +static int svf_add_check_para(u8 enabled, int buffer_offset, int bit_len) +{ + if (svf_check_tdo_para_index >= SVF_CHECK_TDO_PARA_SIZE) + { + LOG_ERROR("toooooo many operation undone"); + return ERROR_FAIL; + } + + svf_check_tdo_para[svf_check_tdo_para_index].line_num = svf_line_number; + svf_check_tdo_para[svf_check_tdo_para_index].bit_len = bit_len; + svf_check_tdo_para[svf_check_tdo_para_index].enabled = enabled; + svf_check_tdo_para[svf_check_tdo_para_index].buffer_offset = buffer_offset; + svf_check_tdo_para_index++; + + return ERROR_OK; +} + +// not good to use this +extern jtag_command_t** jtag_get_last_command_p(void); +extern void* cmd_queue_alloc(size_t size); +extern jtag_command_t **last_comand_pointer; + +static int svf_run_command(struct command_context_s *cmd_ctx, char *cmd_str) +{ + char *argus[256], command; + int num_of_argu = 0, i; + + // tmp variable + int i_tmp; + + // not good to use this + jtag_command_t **last_cmd; + + // for RUNTEST + int run_count; + float min_time, max_time; + // for XXR + svf_xxr_para_t *xxr_para_tmp; + u8 **pbuffer_tmp; + scan_field_t field; + // for STATE + tap_state_t *path = NULL, state; + + LOG_DEBUG("%s", cmd_str); + + if (ERROR_OK != svf_parse_cmd_string(cmd_str, strlen(cmd_str), argus, &num_of_argu)) + { + return ERROR_FAIL; + } + + command = svf_find_string_in_array(argus[0], (char **)svf_command_name, dimof(svf_command_name)); + switch(command) + { + case ENDDR: + case ENDIR: + if (num_of_argu != 2) + { + LOG_ERROR("invalid parameter of %s", argus[0]); + return ERROR_FAIL; + } + i_tmp = svf_find_string_in_array(argus[1], (char **)svf_tap_state_name, dimof(svf_tap_state_name)); + if (svf_tap_state_is_stable(i_tmp)) + { + if (command == ENDIR) + { + svf_para.ir_end_state = i_tmp; + LOG_DEBUG("\tir_end_state = %s", svf_tap_state_name[svf_para.ir_end_state]); + } + else + { + svf_para.dr_end_state = i_tmp; + LOG_DEBUG("\tdr_end_state = %s", svf_tap_state_name[svf_para.dr_end_state]); + } + } + else + { + LOG_ERROR("%s is not valid state", argus[1]); + return ERROR_FAIL; + } + break; + case FREQUENCY: + if ((num_of_argu != 1) && (num_of_argu != 3)) + { + LOG_ERROR("invalid parameter of %s", argus[0]); + return ERROR_FAIL; + } + if (1 == num_of_argu) + { + // TODO: se... [truncated message content] |
From: <kc...@ma...> - 2009-01-19 08:08:36
|
Author: kc8apf Date: 2009-01-19 08:08:28 +0100 (Mon, 19 Jan 2009) New Revision: 1338 Modified: trunk/src/target/armv4_5.c Log: Fix handling of thumb disassembly in armv4_5 disassemble. Courtesy of Adam Dybkowski <ady...@wp...> Modified: trunk/src/target/armv4_5.c =================================================================== --- trunk/src/target/armv4_5.c 2009-01-17 23:16:59 UTC (rev 1337) +++ trunk/src/target/armv4_5.c 2009-01-19 07:08:28 UTC (rev 1338) @@ -404,6 +404,7 @@ int i; arm_instruction_t cur_instruction; u32 opcode; + u16 thumb_opcode; int thumb = 0; if (armv4_5->common_magic != ARMV4_5_COMMON_MAGIC) @@ -427,13 +428,26 @@ for (i = 0; i < count; i++) { - if((retval = target_read_u32(target, address, &opcode)) != ERROR_OK) + if(thumb) { - return retval; + if((retval = target_read_u16(target, address, &thumb_opcode)) != ERROR_OK) + { + return retval; + } + if((retval = thumb_evaluate_opcode(thumb_opcode, address, &cur_instruction)) != ERROR_OK) + { + return retval; + } } - if((retval = arm_evaluate_opcode(opcode, address, &cur_instruction)) != ERROR_OK) - { - return retval; + else { + if((retval = target_read_u32(target, address, &opcode)) != ERROR_OK) + { + return retval; + } + if((retval = arm_evaluate_opcode(opcode, address, &cur_instruction)) != ERROR_OK) + { + return retval; + } } command_print(cmd_ctx, "%s", cur_instruction.text); address += (thumb) ? 2 : 4; |
From: <kc...@ma...> - 2009-01-18 00:17:08
|
Author: kc8apf Date: 2009-01-18 00:16:59 +0100 (Sun, 18 Jan 2009) New Revision: 1337 Modified: branches/openocd-0.1/guess-rev.sh tags/openocd-0.1.0/guess-rev.sh trunk/guess-rev.sh Log: Fix guess-rev.sh where the builtin echo doesn't support -n Modified: branches/openocd-0.1/guess-rev.sh =================================================================== --- branches/openocd-0.1/guess-rev.sh 2009-01-17 23:14:49 UTC (rev 1336) +++ branches/openocd-0.1/guess-rev.sh 2009-01-17 23:16:59 UTC (rev 1337) @@ -5,5 +5,5 @@ which svnversion > /dev/null 2>&1 && REV=`svnversion -n` -echo -n $REV +`which echo` -n $REV Modified: tags/openocd-0.1.0/guess-rev.sh =================================================================== --- tags/openocd-0.1.0/guess-rev.sh 2009-01-17 23:14:49 UTC (rev 1336) +++ tags/openocd-0.1.0/guess-rev.sh 2009-01-17 23:16:59 UTC (rev 1337) @@ -5,5 +5,5 @@ which svnversion > /dev/null 2>&1 && REV=`svnversion -n` -echo -n $REV +`which echo` -n $REV Modified: trunk/guess-rev.sh =================================================================== --- trunk/guess-rev.sh 2009-01-17 23:14:49 UTC (rev 1336) +++ trunk/guess-rev.sh 2009-01-17 23:16:59 UTC (rev 1337) @@ -5,5 +5,5 @@ which svnversion > /dev/null 2>&1 && REV=`svnversion -n` -echo -n $REV +`which echo` -n $REV |
From: <kc...@ma...> - 2009-01-18 00:15:01
|
Author: kc8apf Date: 2009-01-18 00:14:49 +0100 (Sun, 18 Jan 2009) New Revision: 1336 Modified: branches/openocd-0.1/doc/Makefile.am tags/openocd-0.1.0/doc/Makefile.am Log: Merge r1335 into 0.1.x and 0.1.0 Modified: branches/openocd-0.1/doc/Makefile.am =================================================================== --- branches/openocd-0.1/doc/Makefile.am 2009-01-17 23:13:02 UTC (rev 1335) +++ branches/openocd-0.1/doc/Makefile.am 2009-01-17 23:14:49 UTC (rev 1336) @@ -1,3 +1,5 @@ info_TEXINFOS = openocd.texi openocd_TEXINFOS = fdl.texi +man_MANS = openocd.1 +EXTRA_DIST = openocd.1 Modified: tags/openocd-0.1.0/doc/Makefile.am =================================================================== --- tags/openocd-0.1.0/doc/Makefile.am 2009-01-17 23:13:02 UTC (rev 1335) +++ tags/openocd-0.1.0/doc/Makefile.am 2009-01-17 23:14:49 UTC (rev 1336) @@ -1,3 +1,5 @@ info_TEXINFOS = openocd.texi openocd_TEXINFOS = fdl.texi +man_MANS = openocd.1 +EXTRA_DIST = openocd.1 |
From: <kc...@ma...> - 2009-01-18 00:13:08
|
Author: kc8apf Date: 2009-01-18 00:13:02 +0100 (Sun, 18 Jan 2009) New Revision: 1335 Modified: trunk/doc/Makefile.am Log: Fix to install manpage as part of 'make install' by Uwe Hermann <uw...@he...> Modified: trunk/doc/Makefile.am =================================================================== --- trunk/doc/Makefile.am 2009-01-17 05:40:16 UTC (rev 1334) +++ trunk/doc/Makefile.am 2009-01-17 23:13:02 UTC (rev 1335) @@ -1,3 +1,5 @@ info_TEXINFOS = openocd.texi openocd_TEXINFOS = fdl.texi +man_MANS = openocd.1 +EXTRA_DIST = openocd.1 |
From: <kc...@ma...> - 2009-01-17 06:40:37
|
Author: kc8apf Date: 2009-01-17 06:40:16 +0100 (Sat, 17 Jan 2009) New Revision: 1334 Modified: branches/openocd-0.1/Makefile.am branches/openocd-0.1/guess-rev.sh branches/openocd-0.1/src/jtag/Makefile.am tags/openocd-0.1.0/Makefile.am tags/openocd-0.1.0/guess-rev.sh tags/openocd-0.1.0/src/jtag/Makefile.am Log: Merge r1331-1333 into 0.1.x and 0.1.0 Modified: branches/openocd-0.1/Makefile.am =================================================================== --- branches/openocd-0.1/Makefile.am 2009-01-16 13:28:32 UTC (rev 1333) +++ branches/openocd-0.1/Makefile.am 2009-01-17 05:40:16 UTC (rev 1334) @@ -2,4 +2,12 @@ # have all needed files, that a GNU package needs AUTOMAKE_OPTIONS = foreign 1.4 +EXTRA_DIST = guess-rev.sh + +nobase_dist_pkgdata_DATA = \ + contrib/libdcc/dcc_stdio.c \ + contrib/libdcc/dcc_stdio.h \ + contrib/libdcc/example.c \ + contrib/libdcc/README + SUBDIRS = src doc Modified: branches/openocd-0.1/guess-rev.sh =================================================================== --- branches/openocd-0.1/guess-rev.sh 2009-01-16 13:28:32 UTC (rev 1333) +++ branches/openocd-0.1/guess-rev.sh 2009-01-17 05:40:16 UTC (rev 1334) @@ -1,4 +1,5 @@ -#!/bin/bash +#!/bin/sh +# REV=unknown Modified: branches/openocd-0.1/src/jtag/Makefile.am =================================================================== --- branches/openocd-0.1/src/jtag/Makefile.am 2009-01-16 13:28:32 UTC (rev 1333) +++ branches/openocd-0.1/src/jtag/Makefile.am 2009-01-17 05:40:16 UTC (rev 1334) @@ -105,4 +105,4 @@ libjtag_a_SOURCES = jtag.c $(BITBANGFILES) $(PARPORTFILES) $(DUMMYFILES) $(FT2232FILES) $(AMTJTAGACCELFILES) $(EP93XXFILES) \ $(AT91RM9200FILES) $(GW16012FILES) $(BITQFILES) $(PRESTOFILES) $(USBPROGFILES) $(ECOSBOARDFILES) $(JLINKFILES) $(RLINKFILES) $(VSLLINKFILES) -noinst_HEADERS = bitbang.h jtag.h +noinst_HEADERS = bitbang.h jtag.h bitq.h rlink/dtc_cmd.h rlink/ep1_cmd.h rlink/rlink.h rlink/st7.h Modified: tags/openocd-0.1.0/Makefile.am =================================================================== --- tags/openocd-0.1.0/Makefile.am 2009-01-16 13:28:32 UTC (rev 1333) +++ tags/openocd-0.1.0/Makefile.am 2009-01-17 05:40:16 UTC (rev 1334) @@ -2,4 +2,12 @@ # have all needed files, that a GNU package needs AUTOMAKE_OPTIONS = foreign 1.4 +EXTRA_DIST = guess-rev.sh + +nobase_dist_pkgdata_DATA = \ + contrib/libdcc/dcc_stdio.c \ + contrib/libdcc/dcc_stdio.h \ + contrib/libdcc/example.c \ + contrib/libdcc/README + SUBDIRS = src doc Modified: tags/openocd-0.1.0/guess-rev.sh =================================================================== --- tags/openocd-0.1.0/guess-rev.sh 2009-01-16 13:28:32 UTC (rev 1333) +++ tags/openocd-0.1.0/guess-rev.sh 2009-01-17 05:40:16 UTC (rev 1334) @@ -1,4 +1,5 @@ -#!/bin/bash +#!/bin/sh +# REV=unknown Modified: tags/openocd-0.1.0/src/jtag/Makefile.am =================================================================== --- tags/openocd-0.1.0/src/jtag/Makefile.am 2009-01-16 13:28:32 UTC (rev 1333) +++ tags/openocd-0.1.0/src/jtag/Makefile.am 2009-01-17 05:40:16 UTC (rev 1334) @@ -105,4 +105,4 @@ libjtag_a_SOURCES = jtag.c $(BITBANGFILES) $(PARPORTFILES) $(DUMMYFILES) $(FT2232FILES) $(AMTJTAGACCELFILES) $(EP93XXFILES) \ $(AT91RM9200FILES) $(GW16012FILES) $(BITQFILES) $(PRESTOFILES) $(USBPROGFILES) $(ECOSBOARDFILES) $(JLINKFILES) $(RLINKFILES) $(VSLLINKFILES) -noinst_HEADERS = bitbang.h jtag.h +noinst_HEADERS = bitbang.h jtag.h bitq.h rlink/dtc_cmd.h rlink/ep1_cmd.h rlink/rlink.h rlink/st7.h |
From: ntfreak at B. <nt...@ma...> - 2009-01-16 14:28:33
|
Author: ntfreak Date: 2009-01-16 14:28:32 +0100 (Fri, 16 Jan 2009) New Revision: 1333 Modified: trunk/guess-rev.sh Log: - make guess-rev.sh work with msys Modified: trunk/guess-rev.sh =================================================================== --- trunk/guess-rev.sh 2009-01-16 12:48:00 UTC (rev 1332) +++ trunk/guess-rev.sh 2009-01-16 13:28:32 UTC (rev 1333) @@ -1,4 +1,5 @@ -#!/bin/bash +#!/bin/sh +# REV=unknown |
From: ntfreak at B. <nt...@ma...> - 2009-01-16 13:48:01
|
Author: ntfreak Date: 2009-01-16 13:48:00 +0100 (Fri, 16 Jan 2009) New Revision: 1332 Modified: trunk/Makefile.am Log: - add guess-rev.sh and contrib/libdcc to dist Modified: trunk/Makefile.am =================================================================== --- trunk/Makefile.am 2009-01-16 10:48:55 UTC (rev 1331) +++ trunk/Makefile.am 2009-01-16 12:48:00 UTC (rev 1332) @@ -2,4 +2,12 @@ # have all needed files, that a GNU package needs AUTOMAKE_OPTIONS = foreign 1.4 +EXTRA_DIST = guess-rev.sh + +nobase_dist_pkgdata_DATA = \ + contrib/libdcc/dcc_stdio.c \ + contrib/libdcc/dcc_stdio.h \ + contrib/libdcc/example.c \ + contrib/libdcc/README + SUBDIRS = src doc |
From: ntfreak at B. <nt...@ma...> - 2009-01-16 11:48:56
|
Author: ntfreak Date: 2009-01-16 11:48:55 +0100 (Fri, 16 Jan 2009) New Revision: 1331 Modified: trunk/src/jtag/Makefile.am Log: - add missing bitq and rlink files to distribution Modified: trunk/src/jtag/Makefile.am =================================================================== --- trunk/src/jtag/Makefile.am 2009-01-16 07:33:12 UTC (rev 1330) +++ trunk/src/jtag/Makefile.am 2009-01-16 10:48:55 UTC (rev 1331) @@ -105,4 +105,4 @@ libjtag_a_SOURCES = jtag.c $(BITBANGFILES) $(PARPORTFILES) $(DUMMYFILES) $(FT2232FILES) $(AMTJTAGACCELFILES) $(EP93XXFILES) \ $(AT91RM9200FILES) $(GW16012FILES) $(BITQFILES) $(PRESTOFILES) $(USBPROGFILES) $(ECOSBOARDFILES) $(JLINKFILES) $(RLINKFILES) $(VSLLINKFILES) -noinst_HEADERS = bitbang.h jtag.h +noinst_HEADERS = bitbang.h jtag.h bitq.h rlink/dtc_cmd.h rlink/ep1_cmd.h rlink/rlink.h rlink/st7.h |
From: <kc...@ma...> - 2009-01-16 08:33:19
|
Author: kc8apf Date: 2009-01-16 08:33:12 +0100 (Fri, 16 Jan 2009) New Revision: 1330 Modified: branches/openocd-0.1/src/server/Makefile.am tags/openocd-0.1.0/src/server/Makefile.am Log: Merge distcheck fix into 0.1 branch and 0.1.0 tag Modified: branches/openocd-0.1/src/server/Makefile.am =================================================================== --- branches/openocd-0.1/src/server/Makefile.am 2009-01-16 07:31:55 UTC (rev 1329) +++ branches/openocd-0.1/src/server/Makefile.am 2009-01-16 07:33:12 UTC (rev 1330) @@ -14,8 +14,6 @@ libserver_a_SOURCES += tcl_server.c if HTTPD -nobase_dist_pkglib_DATA = $(wildcard $(srcdir)/httpd/*.tcl) -nobase_dist_pkglib_DATA += $(wildcard $(srcdir)/httpd/*.css) -nobase_dist_pkglib_DATA += $(wildcard $(srcdir)/httpd/menu_cuts/*.png) +nobase_dist_pkglib_DATA = $(wildcard $(srcdir)/httpd/*.tcl $(srcdir)/httpd/*.css $(srcdir)/httpd/menu_cuts/*.png) endif -AM_CPPFLAGS = -DPKGLIBDIR=\"$(pkglibdir)\" @CPPFLAGS@ \ No newline at end of file +AM_CPPFLAGS = -DPKGLIBDIR=\"$(pkglibdir)\" @CPPFLAGS@ Modified: tags/openocd-0.1.0/src/server/Makefile.am =================================================================== --- tags/openocd-0.1.0/src/server/Makefile.am 2009-01-16 07:31:55 UTC (rev 1329) +++ tags/openocd-0.1.0/src/server/Makefile.am 2009-01-16 07:33:12 UTC (rev 1330) @@ -14,8 +14,6 @@ libserver_a_SOURCES += tcl_server.c if HTTPD -nobase_dist_pkglib_DATA = $(wildcard $(srcdir)/httpd/*.tcl) -nobase_dist_pkglib_DATA += $(wildcard $(srcdir)/httpd/*.css) -nobase_dist_pkglib_DATA += $(wildcard $(srcdir)/httpd/menu_cuts/*.png) +nobase_dist_pkglib_DATA = $(wildcard $(srcdir)/httpd/*.tcl $(srcdir)/httpd/*.css $(srcdir)/httpd/menu_cuts/*.png) endif -AM_CPPFLAGS = -DPKGLIBDIR=\"$(pkglibdir)\" @CPPFLAGS@ \ No newline at end of file +AM_CPPFLAGS = -DPKGLIBDIR=\"$(pkglibdir)\" @CPPFLAGS@ |
From: <kc...@ma...> - 2009-01-16 08:32:05
|
Author: kc8apf Date: 2009-01-16 08:31:55 +0100 (Fri, 16 Jan 2009) New Revision: 1329 Modified: trunk/src/server/Makefile.am Log: Fix distcheck failure Modified: trunk/src/server/Makefile.am =================================================================== --- trunk/src/server/Makefile.am 2009-01-16 07:02:54 UTC (rev 1328) +++ trunk/src/server/Makefile.am 2009-01-16 07:31:55 UTC (rev 1329) @@ -14,8 +14,6 @@ libserver_a_SOURCES += tcl_server.c if HTTPD -nobase_dist_pkglib_DATA = $(wildcard $(srcdir)/httpd/*.tcl) -nobase_dist_pkglib_DATA += $(wildcard $(srcdir)/httpd/*.css) -nobase_dist_pkglib_DATA += $(wildcard $(srcdir)/httpd/menu_cuts/*.png) +nobase_dist_pkglib_DATA = $(wildcard $(srcdir)/httpd/*.tcl $(srcdir)/httpd/*.css $(srcdir)/httpd/menu_cuts/*.png) endif -AM_CPPFLAGS = -DPKGLIBDIR=\"$(pkglibdir)\" @CPPFLAGS@ \ No newline at end of file +AM_CPPFLAGS = -DPKGLIBDIR=\"$(pkglibdir)\" @CPPFLAGS@ |
From: <kc...@ma...> - 2009-01-16 08:02:59
|
Author: kc8apf Date: 2009-01-16 08:02:54 +0100 (Fri, 16 Jan 2009) New Revision: 1328 Added: tags/openocd-0.1.0/ Modified: tags/openocd-0.1.0/configure.in Log: Tag openocd-0.1.0 Copied: tags/openocd-0.1.0 (from rev 1327, branches/openocd-0.1) Modified: tags/openocd-0.1.0/configure.in =================================================================== --- branches/openocd-0.1/configure.in 2009-01-16 07:02:04 UTC (rev 1327) +++ tags/openocd-0.1.0/configure.in 2009-01-16 07:02:54 UTC (rev 1328) @@ -625,7 +625,7 @@ fi AM_CONFIG_HEADER(config.h) -AM_INIT_AUTOMAKE(openocd, 0.1.x) +AM_INIT_AUTOMAKE(openocd, 0.1.0) AM_CONDITIONAL(PARPORT, test $build_parport = yes) AM_CONDITIONAL(DUMMY, test $build_dummy = yes) |
From: <kc...@ma...> - 2009-01-16 08:02:09
|
Author: kc8apf Date: 2009-01-16 08:02:04 +0100 (Fri, 16 Jan 2009) New Revision: 1327 Added: branches/openocd-0.1/ Modified: branches/openocd-0.1/configure.in Log: Second stage of syncing 0.1.x branch with ToT Copied: branches/openocd-0.1 (from rev 1326, trunk) Modified: branches/openocd-0.1/configure.in =================================================================== --- trunk/configure.in 2009-01-16 06:51:29 UTC (rev 1326) +++ branches/openocd-0.1/configure.in 2009-01-16 07:02:04 UTC (rev 1327) @@ -625,7 +625,7 @@ fi AM_CONFIG_HEADER(config.h) -AM_INIT_AUTOMAKE(openocd, 1.0) +AM_INIT_AUTOMAKE(openocd, 0.1.x) AM_CONDITIONAL(PARPORT, test $build_parport = yes) AM_CONDITIONAL(DUMMY, test $build_dummy = yes) |
From: <kc...@ma...> - 2009-01-16 07:51:34
|
Author: kc8apf Date: 2009-01-16 07:51:29 +0100 (Fri, 16 Jan 2009) New Revision: 1326 Removed: branches/openocd-0.1/ branches/openocd_1_0_branch/ Log: First of two-stages to _really_ bring 0.1 in sync with ToT |
Author: kc8apf Date: 2009-01-16 07:43:11 +0100 (Fri, 16 Jan 2009) New Revision: 1325 Added: branches/openocd-0.1/ branches/openocd-0.1/src/flash/pic32mx.c branches/openocd-0.1/src/flash/pic32mx.h branches/openocd-0.1/src/helper/ioutil.c branches/openocd-0.1/src/jtag/rlink/ branches/openocd-0.1/src/jtag/rlink/Makefile branches/openocd-0.1/src/jtag/rlink/call.m4 branches/openocd-0.1/src/jtag/rlink/dtc_cmd.h branches/openocd-0.1/src/jtag/rlink/ep1_cmd.h branches/openocd-0.1/src/jtag/rlink/init.m4 branches/openocd-0.1/src/jtag/rlink/rlink.c branches/openocd-0.1/src/jtag/rlink/rlink.h branches/openocd-0.1/src/jtag/rlink/rlink_speed_table.c branches/openocd-0.1/src/jtag/rlink/st7.h branches/openocd-0.1/src/jtag/vsllink.c branches/openocd-0.1/src/server/httpd.c branches/openocd-0.1/src/server/httpd/ branches/openocd-0.1/src/server/httpd/Stylizer.class branches/openocd-0.1/src/server/httpd/Stylizer.java branches/openocd-0.1/src/server/httpd/browsemem.tcl branches/openocd-0.1/src/server/httpd/build.sh branches/openocd-0.1/src/server/httpd/downloadmem.tcl branches/openocd-0.1/src/server/httpd/editconfigs.tcl branches/openocd-0.1/src/server/httpd/editfile.tcl branches/openocd-0.1/src/server/httpd/erase.tcl branches/openocd-0.1/src/server/httpd/flash.tcl branches/openocd-0.1/src/server/httpd/flashinfo.tcl branches/openocd-0.1/src/server/httpd/guiupload.tcl branches/openocd-0.1/src/server/httpd/html2tcl.sh branches/openocd-0.1/src/server/httpd/httpd.tcl branches/openocd-0.1/src/server/httpd/index.tcl branches/openocd-0.1/src/server/httpd/log.tcl branches/openocd-0.1/src/server/httpd/menu.xml branches/openocd-0.1/src/server/httpd/menu.xsl branches/openocd-0.1/src/server/httpd/menu_cuts/ branches/openocd-0.1/src/server/httpd/menu_cuts/center_bottom.png branches/openocd-0.1/src/server/httpd/menu_cuts/center_top.png branches/openocd-0.1/src/server/httpd/menu_cuts/h_tab1.png branches/openocd-0.1/src/server/httpd/menu_cuts/h_tab1_selected.png branches/openocd-0.1/src/server/httpd/menu_cuts/h_tab2.png branches/openocd-0.1/src/server/httpd/menu_cuts/h_tab2_selected.png branches/openocd-0.1/src/server/httpd/menu_cuts/h_tab_free.png branches/openocd-0.1/src/server/httpd/menu_cuts/logo_bottom.png branches/openocd-0.1/src/server/httpd/menu_cuts/logo_top.png branches/openocd-0.1/src/server/httpd/menu_cuts/right_bottom.png branches/openocd-0.1/src/server/httpd/menu_cuts/right_top.png branches/openocd-0.1/src/server/httpd/menu_cuts/right_top_small.png branches/openocd-0.1/src/server/httpd/menu_cuts/top_right.png branches/openocd-0.1/src/server/httpd/menu_cuts/v_1.png branches/openocd-0.1/src/server/httpd/menu_cuts/v_2_tile.png branches/openocd-0.1/src/server/httpd/menu_cuts/v_3.png branches/openocd-0.1/src/server/httpd/menu_cuts/v_tab.png branches/openocd-0.1/src/server/httpd/menu_cuts/v_tab_selected.png branches/openocd-0.1/src/server/httpd/menuweb.css branches/openocd-0.1/src/server/httpd/openocd.tcl branches/openocd-0.1/src/server/httpd/preconfig.tcl branches/openocd-0.1/src/server/httpd/production.tcl branches/openocd-0.1/src/server/httpd/readme.txt branches/openocd-0.1/src/server/httpd/reload.tcl branches/openocd-0.1/src/server/httpd/run.tcl branches/openocd-0.1/src/server/httpd/support.tcl branches/openocd-0.1/src/server/httpd/targets.tcl branches/openocd-0.1/src/server/httpd/terminal.tcl branches/openocd-0.1/src/server/httpd/upgrade.tcl branches/openocd-0.1/src/target/board/imx27ads.cfg branches/openocd-0.1/src/target/board/imx31pdk.cfg branches/openocd-0.1/src/target/board/pic-p32mx.cfg branches/openocd-0.1/src/target/board/x300t.cfg branches/openocd-0.1/src/target/interface/parport_dlc5.cfg branches/openocd-0.1/src/target/interface/rlink.cfg branches/openocd-0.1/src/target/target/samsung_s3c2440.cfg branches/openocd-0.1/src/target/target/smp8634.cfg branches/openocd-0.1/testing/build.test1/ branches/openocd-0.1/testing/build.test1/Makefile branches/openocd-0.1/testing/build.test1/Makefile.confuse branches/openocd-0.1/testing/build.test1/Makefile.ftd2xx branches/openocd-0.1/testing/build.test1/Makefile.libftdi branches/openocd-0.1/testing/build.test1/Makefile.libusb branches/openocd-0.1/testing/build.test1/Makefile.openocd branches/openocd-0.1/testing/build.test1/README.TXT branches/openocd-0.1/testing/build.test1/local.uses branches/openocd-0.1/testing/build.test1/mingw32_help/ branches/openocd-0.1/testing/build.test1/mingw32_help/include/ branches/openocd-0.1/testing/build.test1/mingw32_help/include/elf.h branches/openocd-0.1/testing/build.test1/mingw32_help/include/sys/ branches/openocd-0.1/testing/build.test1/mingw32_help/include/sys/cdefs.h branches/openocd-0.1/testing/build.test1/mingw32_help/include/sys/elf32.h branches/openocd-0.1/testing/build.test1/mingw32_help/include/sys/elf64.h branches/openocd-0.1/testing/build.test1/mingw32_help/include/sys/elf_common.h branches/openocd-0.1/testing/build.test1/mingw32_help/include/sys/elf_generic.h branches/openocd-0.1/testing/build.test2/ branches/openocd-0.1/testing/build.test2/Makefile branches/openocd-0.1/testing/build.test2/README.txt branches/openocd-0.1/testing/build.test2/local.uses branches/openocd-0.1/testing/examples/ledtest-imx27ads/ branches/openocd-0.1/testing/examples/ledtest-imx27ads/Makefile branches/openocd-0.1/testing/examples/ledtest-imx27ads/crt0.S branches/openocd-0.1/testing/examples/ledtest-imx27ads/gdbinit-imx27ads branches/openocd-0.1/testing/examples/ledtest-imx27ads/ldscript branches/openocd-0.1/testing/examples/ledtest-imx27ads/test.c branches/openocd-0.1/testing/examples/ledtest-imx27ads/test.elf branches/openocd-0.1/testing/examples/ledtest-imx31pdk/ branches/openocd-0.1/testing/examples/ledtest-imx31pdk/Makefile branches/openocd-0.1/testing/examples/ledtest-imx31pdk/crt0.S branches/openocd-0.1/testing/examples/ledtest-imx31pdk/gdbinit-imx31pdk branches/openocd-0.1/testing/examples/ledtest-imx31pdk/ldscript branches/openocd-0.1/testing/examples/ledtest-imx31pdk/test.c branches/openocd-0.1/testing/examples/ledtest-imx31pdk/test.elf branches/openocd-0.1/tools/ branches/openocd-0.1/tools/rlink_make_speed_table/ branches/openocd-0.1/tools/rlink_make_speed_table/rlink_make_speed_table branches/openocd-0.1/tools/rlink_make_speed_table/rlink_make_speed_table.pl branches/openocd-0.1/tools/st7_dtc_as/ branches/openocd-0.1/tools/st7_dtc_as/st7_dtc_as branches/openocd-0.1/tools/st7_dtc_as/st7_dtc_as.pl branches/openocd-0.1/tools/xsvf_tools/ branches/openocd-0.1/tools/xsvf_tools/svf2xsvf.py branches/openocd-0.1/tools/xsvf_tools/xsvfdump.py Removed: branches/openocd-0.1/src/jtag/rlink/Makefile branches/openocd-0.1/src/jtag/rlink/call.m4 branches/openocd-0.1/src/jtag/rlink/dtc_cmd.h branches/openocd-0.1/src/jtag/rlink/ep1_cmd.h branches/openocd-0.1/src/jtag/rlink/init.m4 branches/openocd-0.1/src/jtag/rlink/rlink.c branches/openocd-0.1/src/jtag/rlink/rlink.h branches/openocd-0.1/src/jtag/rlink/rlink_speed_table.c branches/openocd-0.1/src/jtag/rlink/st7.h branches/openocd-0.1/src/server/httpd/Stylizer.class branches/openocd-0.1/src/server/httpd/Stylizer.java branches/openocd-0.1/src/server/httpd/browsemem.tcl branches/openocd-0.1/src/server/httpd/build.sh branches/openocd-0.1/src/server/httpd/downloadmem.tcl branches/openocd-0.1/src/server/httpd/editconfigs.tcl branches/openocd-0.1/src/server/httpd/editfile.tcl branches/openocd-0.1/src/server/httpd/erase.tcl branches/openocd-0.1/src/server/httpd/flash.tcl branches/openocd-0.1/src/server/httpd/flashinfo.tcl branches/openocd-0.1/src/server/httpd/guiupload.tcl branches/openocd-0.1/src/server/httpd/html2tcl.sh branches/openocd-0.1/src/server/httpd/httpd.tcl branches/openocd-0.1/src/server/httpd/index.tcl branches/openocd-0.1/src/server/httpd/log.tcl branches/openocd-0.1/src/server/httpd/menu.xml branches/openocd-0.1/src/server/httpd/menu.xsl branches/openocd-0.1/src/server/httpd/menu_cuts/ branches/openocd-0.1/src/server/httpd/menu_cuts/center_bottom.png branches/openocd-0.1/src/server/httpd/menu_cuts/center_top.png branches/openocd-0.1/src/server/httpd/menu_cuts/h_tab1.png branches/openocd-0.1/src/server/httpd/menu_cuts/h_tab1_selected.png branches/openocd-0.1/src/server/httpd/menu_cuts/h_tab2.png branches/openocd-0.1/src/server/httpd/menu_cuts/h_tab2_selected.png branches/openocd-0.1/src/server/httpd/menu_cuts/h_tab_free.png branches/openocd-0.1/src/server/httpd/menu_cuts/logo_bottom.png branches/openocd-0.1/src/server/httpd/menu_cuts/logo_top.png branches/openocd-0.1/src/server/httpd/menu_cuts/right_bottom.png branches/openocd-0.1/src/server/httpd/menu_cuts/right_top.png branches/openocd-0.1/src/server/httpd/menu_cuts/right_top_small.png branches/openocd-0.1/src/server/httpd/menu_cuts/top_right.png branches/openocd-0.1/src/server/httpd/menu_cuts/v_1.png branches/openocd-0.1/src/server/httpd/menu_cuts/v_2_tile.png branches/openocd-0.1/src/server/httpd/menu_cuts/v_3.png branches/openocd-0.1/src/server/httpd/menu_cuts/v_tab.png branches/openocd-0.1/src/server/httpd/menu_cuts/v_tab_selected.png branches/openocd-0.1/src/server/httpd/menuweb.css branches/openocd-0.1/src/server/httpd/openocd.tcl branches/openocd-0.1/src/server/httpd/preconfig.tcl branches/openocd-0.1/src/server/httpd/production.tcl branches/openocd-0.1/src/server/httpd/readme.txt branches/openocd-0.1/src/server/httpd/reload.tcl branches/openocd-0.1/src/server/httpd/run.tcl branches/openocd-0.1/src/server/httpd/support.tcl branches/openocd-0.1/src/server/httpd/targets.tcl branches/openocd-0.1/src/server/httpd/terminal.tcl branches/openocd-0.1/src/server/httpd/upgrade.tcl branches/openocd-0.1/src/target/target/s3c2440.cfg branches/openocd-0.1/testing/build.test1/Makefile branches/openocd-0.1/testing/build.test1/Makefile.confuse branches/openocd-0.1/testing/build.test1/Makefile.ftd2xx branches/openocd-0.1/testing/build.test1/Makefile.libftdi branches/openocd-0.1/testing/build.test1/Makefile.libusb branches/openocd-0.1/testing/build.test1/Makefile.openocd branches/openocd-0.1/testing/build.test1/README.TXT branches/openocd-0.1/testing/build.test1/local.uses branches/openocd-0.1/testing/build.test1/mingw32_help/ branches/openocd-0.1/testing/build.test1/mingw32_help/include/ branches/openocd-0.1/testing/build.test1/mingw32_help/include/elf.h branches/openocd-0.1/testing/build.test1/mingw32_help/include/sys/ branches/openocd-0.1/testing/build.test1/mingw32_help/include/sys/cdefs.h branches/openocd-0.1/testing/build.test1/mingw32_help/include/sys/elf32.h branches/openocd-0.1/testing/build.test1/mingw32_help/include/sys/elf64.h branches/openocd-0.1/testing/build.test1/mingw32_help/include/sys/elf_common.h branches/openocd-0.1/testing/build.test1/mingw32_help/include/sys/elf_generic.h branches/openocd-0.1/testing/build.test2/Makefile branches/openocd-0.1/testing/build.test2/README.txt branches/openocd-0.1/testing/build.test2/local.uses branches/openocd-0.1/testing/examples/ledtest-imx27ads/Makefile branches/openocd-0.1/testing/examples/ledtest-imx27ads/crt0.S branches/openocd-0.1/testing/examples/ledtest-imx27ads/gdbinit-imx27ads branches/openocd-0.1/testing/examples/ledtest-imx27ads/ldscript branches/openocd-0.1/testing/examples/ledtest-imx27ads/test.c branches/openocd-0.1/testing/examples/ledtest-imx27ads/test.elf branches/openocd-0.1/testing/examples/ledtest-imx31pdk/Makefile branches/openocd-0.1/testing/examples/ledtest-imx31pdk/crt0.S branches/openocd-0.1/testing/examples/ledtest-imx31pdk/gdbinit-imx31pdk branches/openocd-0.1/testing/examples/ledtest-imx31pdk/ldscript branches/openocd-0.1/testing/examples/ledtest-imx31pdk/test.c branches/openocd-0.1/testing/examples/ledtest-imx31pdk/test.elf branches/openocd-0.1/tools/rlink_make_speed_table/ branches/openocd-0.1/tools/rlink_make_speed_table/rlink_make_speed_table branches/openocd-0.1/tools/rlink_make_speed_table/rlink_make_speed_table.pl branches/openocd-0.1/tools/st7_dtc_as/ branches/openocd-0.1/tools/st7_dtc_as/st7_dtc_as branches/openocd-0.1/tools/st7_dtc_as/st7_dtc_as.pl branches/openocd-0.1/tools/xsvf_tools/ branches/openocd-0.1/tools/xsvf_tools/svf2xsvf.py branches/openocd-0.1/tools/xsvf_tools/xsvfdump.py Modified: branches/openocd-0.1/configure.in branches/openocd-0.1/doc/openocd.1 branches/openocd-0.1/doc/openocd.texi branches/openocd-0.1/src/Makefile.am branches/openocd-0.1/src/ecosboard.c branches/openocd-0.1/src/flash/Makefile.am branches/openocd-0.1/src/flash/cfi.h branches/openocd-0.1/src/flash/ecos.c branches/openocd-0.1/src/flash/flash.c branches/openocd-0.1/src/flash/lpc2000.c branches/openocd-0.1/src/flash/lpc288x.c branches/openocd-0.1/src/flash/lpc3180_nand_controller.c branches/openocd-0.1/src/flash/mflash.c branches/openocd-0.1/src/flash/mflash.h branches/openocd-0.1/src/flash/nand.c branches/openocd-0.1/src/flash/s3c24xx_regs_nand.h branches/openocd-0.1/src/flash/stellaris.h branches/openocd-0.1/src/flash/stm32x.h branches/openocd-0.1/src/flash/str7x.c branches/openocd-0.1/src/flash/str7x.h branches/openocd-0.1/src/flash/str9x.h branches/openocd-0.1/src/flash/tms470.c branches/openocd-0.1/src/helper/Makefile.am branches/openocd-0.1/src/helper/bin2char.c branches/openocd-0.1/src/helper/binarybuffer.c branches/openocd-0.1/src/helper/command.c branches/openocd-0.1/src/helper/configuration.c branches/openocd-0.1/src/helper/fileio.h branches/openocd-0.1/src/helper/jim.c branches/openocd-0.1/src/helper/jim.h branches/openocd-0.1/src/helper/log.c branches/openocd-0.1/src/helper/log.h branches/openocd-0.1/src/helper/options.c branches/openocd-0.1/src/helper/replacements.c branches/openocd-0.1/src/helper/replacements.h branches/openocd-0.1/src/helper/tclapi.c branches/openocd-0.1/src/helper/types.h branches/openocd-0.1/src/jtag/Makefile.am branches/openocd-0.1/src/jtag/bitbang.c branches/openocd-0.1/src/jtag/bitq.c branches/openocd-0.1/src/jtag/dummy.c branches/openocd-0.1/src/jtag/ep93xx.c branches/openocd-0.1/src/jtag/ft2232.c branches/openocd-0.1/src/jtag/gw16012.c branches/openocd-0.1/src/jtag/jlink.c branches/openocd-0.1/src/jtag/jtag.c branches/openocd-0.1/src/jtag/jtag.h branches/openocd-0.1/src/jtag/presto.c branches/openocd-0.1/src/jtag/usbprog.c branches/openocd-0.1/src/jtag/zy1000.c branches/openocd-0.1/src/main.c branches/openocd-0.1/src/openocd.c branches/openocd-0.1/src/server/Makefile.am branches/openocd-0.1/src/server/gdb_server.c branches/openocd-0.1/src/server/server.c branches/openocd-0.1/src/server/server.h branches/openocd-0.1/src/server/tcl_server.c branches/openocd-0.1/src/server/telnet_server.c branches/openocd-0.1/src/target/arm720t.c branches/openocd-0.1/src/target/arm7_9_common.c branches/openocd-0.1/src/target/arm7_9_common.h branches/openocd-0.1/src/target/arm7tdmi.c branches/openocd-0.1/src/target/arm7tdmi.h branches/openocd-0.1/src/target/arm920t.c branches/openocd-0.1/src/target/arm926ejs.c branches/openocd-0.1/src/target/arm926ejs.h branches/openocd-0.1/src/target/arm966e.c branches/openocd-0.1/src/target/arm9tdmi.c branches/openocd-0.1/src/target/arm9tdmi.h branches/openocd-0.1/src/target/armv4_5.c branches/openocd-0.1/src/target/armv4_5.h branches/openocd-0.1/src/target/breakpoints.c branches/openocd-0.1/src/target/breakpoints.h branches/openocd-0.1/src/target/cortex_m3.c branches/openocd-0.1/src/target/cortex_m3.h branches/openocd-0.1/src/target/cortex_swjdp.h branches/openocd-0.1/src/target/embeddedice.h branches/openocd-0.1/src/target/etb.h branches/openocd-0.1/src/target/feroceon.c branches/openocd-0.1/src/target/image.c branches/openocd-0.1/src/target/image.h branches/openocd-0.1/src/target/mips32.c branches/openocd-0.1/src/target/mips32.h branches/openocd-0.1/src/target/mips32_dmaacc.c branches/openocd-0.1/src/target/mips32_dmaacc.h branches/openocd-0.1/src/target/mips32_pracc.c branches/openocd-0.1/src/target/mips32_pracc.h branches/openocd-0.1/src/target/mips_ejtag.c branches/openocd-0.1/src/target/mips_ejtag.h branches/openocd-0.1/src/target/mips_m4k.c branches/openocd-0.1/src/target/mips_m4k.h branches/openocd-0.1/src/target/oocd_trace.c branches/openocd-0.1/src/target/oocd_trace.h branches/openocd-0.1/src/target/register.c branches/openocd-0.1/src/target/register.h branches/openocd-0.1/src/target/target.c branches/openocd-0.1/src/target/target.h branches/openocd-0.1/src/target/target/imx31.cfg branches/openocd-0.1/src/target/target/pic32mx.cfg branches/openocd-0.1/src/target/target/str710.cfg branches/openocd-0.1/src/target/target/str730.cfg branches/openocd-0.1/src/target/target/str750.cfg branches/openocd-0.1/src/target/xscale.c branches/openocd-0.1/src/xsvf/xsvf.c Log: Sync 0.1.x branch with ToT Copied: branches/openocd-0.1 (from rev 1324, branches/openocd_1_0_branch) Modified: branches/openocd-0.1/configure.in =================================================================== --- branches/openocd_1_0_branch/configure.in 2009-01-15 20:58:17 UTC (rev 1324) +++ branches/openocd-0.1/configure.in 2009-01-16 06:43:11 UTC (rev 1325) @@ -28,9 +28,145 @@ is_mingw=no is_win32=no +# We are not *ALWAYS* being installed in the standard place. +# We may be installed in a "tool-build" specific location. +# Normally with other packages - as part of a tool distro. +# Thus - we should search that 'libdir' also. +# +# And - if we are being installed there - the odds are +# The libraries unique to what we are are there too. +# + +# Expand nd deal with NONE - just like configure will do later +OCDprefix=$prefix +OCDxprefix=$exec_prefix +test x"$OCDprefix" = xNONE && OCDprefix=$ac_default_prefix +# Let make expand exec_prefix. +test x"$OCDxprefix" = xNONE && OCDxprefix="$OCDprefix" + +# what matters is the "exec-prefix" +if test "$OCDxprefix" != "$ac_default_prefix" +then + # We are installing in a non-standard place + # Nonstandard --prefix and/or --exec-prefix + # We have an override of some sort. + # use build specific install library dir + + LDFLAGS="$LDFLAGS -L$OCDxprefix/lib" + # RPATH becomes an issue on Linux only + if test $host_os = linux-gnu || test $host_os = linux ; then + LDFLAGS="$LDFLAGS -Wl,-rpath,$OCDxprefix/lib" + fi + # The "INCDIR" is also usable + CFLAGS="$CFLAGS -I$includedir" +fi + +AC_ARG_WITH(ftd2xx, + AS_HELP_STRING([--with-ftd2xx=<PATH>],[This option has been removed.]), +[ +# Option Given. +cat << __EOF__ + +The option: --with-ftd2xx=<PATH> has been removed replaced. +On Linux, the new option is: + + --with-ftd2xx-linux-tardir=/path/to/files + +Where <path> is the path the the directory where the "tar.gz" file +from FTDICHIP.COM was unpacked, for example: + + --with-ftd2xx-linux-tardir=/home/duane/libftd2xx-linux-tardir=/home/duane/libftd2xx0.4.16 + +On Cygwin/MingW32, the new option is: + + --with-ftd2xx-win32-zipdir=/path/to/files + +Where <path> is the path to the directory where the "zip" file from +FTDICHIP.COM was unpacked, for example: + + --with-ftd2xx-win32-zipdir=/home/duane/ftd2xx.cdm.files + +__EOF__ + + AC_MSG_ERROR([Sorry Cannot continue]) +], +[ +# Option not given +true +] +) + +#======================================== +# FTD2XXX support comes in 3 forms. +# (1) win32 - via a zip file +# (2) linux - via a tar file +# (3) linux/cygwin/mingw - via libftdi +# +# In case (1) and (2) we need to know where the package was unpacked. + +AC_ARG_WITH(ftd2xx-win32-zipdir, + AS_HELP_STRING([--with-ftd2xx-win32-zipdir],[Where (CYGWIN/MINGW) the zip file from ftdichip.com was unpacked <default=search>]), + [ + # option present + if test -d $with_ftd2xx_win32_zipdir + then + with_ftd2xx_win32_zipdir=`cd $with_ftd2xx_win32_zipdir && pwd` + AC_MSG_NOTICE([Using: ftdichip.com library: $with_ftd2xx_win32_zipdir]) + else + AC_MSG_ERROR([Parameter to --with-ftd2xx-win32-zipdir is not a dir: $with_ftd2xx_win32_zipdir]) + fi + ], + [ + # not given + true + ] +) + +AC_ARG_WITH(ftd2xx-linux-tardir, + AS_HELP_STRING([--with-ftd2xx-linux-tardir], [Where (Linux/Unix) the tar file from ftdichip.com was unpacked <default=search>]), + [ + # Option present + if test $is_win32 = yes ; then + AC_MSG_ERROR([The option: --with-ftd2xx-linux-tardir is only usable on linux]) + fi + if test -d $with_ftd2xx_linux_tardir + then + with_ftd2xx_linux_tardir=`cd $with_ftd2xx_linux_tardir && pwd` + AC_MSG_NOTICE([Using: ftdichip.com library: $with_ftd2xx_linux_tardir]) + else + AC_MSG_ERROR([Parameter to --with-ftd2xx-linux-tardir is not a dir: $with_ftd2xx_linux_tardir]) + fi + ], + [ + # Not given + true + ] +) + +AC_ARG_WITH(ftd2xx-lib, + AS_HELP_STRING([--with-ftd2xx-lib], [Use static or shared ftd2xx libs on default static]), +[ +case "$withval" in +static) + with_ftd2xx_lib=$withval + ;; +shared) + with_ftd2xx_lib=$withval + ;; +*) + AC_MSG_ERROR([Option: --with-ftd2xx-lib=static or --with-ftd2xx-lib=shared not, $withval]) + ;; +esac +], +[ + # Default is static - it is simpler :-( + with_ftd2xx_lib=static +] +) + AC_ARG_ENABLE(gccwarnings, - AS_HELP_STRING([--enable-gccwarnings], [Enable compiler warnings, default no]), - [gcc_warnings=$enableval], [gcc_warnings=no]) + AS_HELP_STRING([--enable-gccwarnings], [Enable compiler warnings, default yes]), + [gcc_warnings=$enableval], [gcc_warnings=yes]) AC_ARG_ENABLE(parport, AS_HELP_STRING([--enable-parport], [Enable building the pc parallel port driver]), @@ -52,11 +188,11 @@ esac AC_ARG_ENABLE(ft2232_libftdi, - AS_HELP_STRING([--enable-ft2232_libftdi], [Enable building support for FT2232 based devices using the libftdi driver]), + AS_HELP_STRING([--enable-ft2232_libftdi], [Enable building support for FT2232 based devices using the libftdi driver, opensource alternate of FTD2XX]), [build_ft2232_libftdi=$enableval], [build_ft2232_libftdi=no]) AC_ARG_ENABLE(ft2232_ftd2xx, - AS_HELP_STRING([--enable-ft2232_ftd2xx], [Enable building support for FT2232 based devices using the FTD2XX driver]), + AS_HELP_STRING([--enable-ft2232_ftd2xx], [Enable building support for FT2232 based devices using the FTD2XX driver from ftdichip.com]), [build_ft2232_ftd2xx=$enableval], [build_ft2232_ftd2xx=no]) AC_ARG_ENABLE(amtjtagaccel, @@ -67,6 +203,14 @@ AS_HELP_STRING([--enable-ecosboard], [Enable building support for eCosBoard based JTAG debugger]), [build_ecosboard=$enableval], [build_ecosboard=no]) +AC_ARG_ENABLE(ioutil, + AS_HELP_STRING([--enable-ioutil], [Enable ioutil functions - useful for standalone OpenOCD implementations]), + [build_ioutil=$enableval], [build_ioutil=no]) + +AC_ARG_ENABLE(httpd, + AS_HELP_STRING([--enable-httpd], [Enable builtin httpd server - useful for standalone OpenOCD implementations]), + [build_httpd=$enableval], [build_httpd=no]) + case "${host_cpu}" in arm*) AC_ARG_ENABLE(ep93xx, @@ -108,12 +252,14 @@ AS_HELP_STRING([--enable-jlink], [Enable building support for the Segger J-Link JTAG Programmer]), [build_jlink=$enableval], [build_jlink=no]) -AC_ARG_WITH(ftd2xx, - [AS_HELP_STRING(--with-ftd2xx, - [Where libftd2xx can be found <default=search>])], - [], - with_ftd2xx=search) +AC_ARG_ENABLE(vsllink, + AS_HELP_STRING([--enable-vsllink], [Enable building support for the Versaloon-Link JTAG Programmer]), + [build_vsllink=$enableval], [build_vsllink=no]) +AC_ARG_ENABLE(rlink, + AS_HELP_STRING([--enable-rlink], [Enable building support for the Raisonance RLink JTAG Programmer]), + [build_rlink=$enableval], [build_rlink=no]) + case $host in *-cygwin*) is_win32=yes @@ -164,7 +310,6 @@ AC_DEFINE(BUILD_DUMMY, 0, [0 if you don't want dummy driver.]) fi - if test $build_ep93xx = yes; then build_bitbang=yes AC_DEFINE(BUILD_EP93XX, 1, [1 if you want ep93xx.]) @@ -179,6 +324,18 @@ AC_DEFINE(BUILD_ECOSBOARD, 0, [0 if you don't want eCosBoard.]) fi +if test $build_ioutil = yes; then + AC_DEFINE(BUILD_IOUTIL, 1, [1 if you want ioutils.]) +else + AC_DEFINE(BUILD_IOUTIL, 0, [0 if you don't want ioutils.]) +fi + +if test $build_httpd = yes; then + AC_DEFINE(BUILD_HTTPD, 1, [1 if you want httpd.]) +else + AC_DEFINE(BUILD_HTTPD, 0, [0 if you don't want httpd.]) +fi + if test $build_at91rm9200 = yes; then build_bitbang=yes AC_DEFINE(BUILD_AT91RM9200, 1, [1 if you want at91rm9200.]) @@ -266,6 +423,207 @@ AC_DEFINE(BUILD_JLINK, 0, [0 if you don't want the J-Link JTAG driver.]) fi +if test $build_vsllink = yes; then + AC_DEFINE(BUILD_VSLLINK, 1, [1 if you want the Versaloon-Link JTAG driver.]) +else + AC_DEFINE(BUILD_VSLLINK, 0, [0 if you don't want the Versaloon-Link JTAG driver.]) +fi + +if test $build_rlink = yes; then + AC_DEFINE(BUILD_RLINK, 1, [1 if you want the RLink JTAG driver.]) +else + AC_DEFINE(BUILD_RLINK, 0, [0 if you don't want the RLink JTAG driver.]) +fi + +#-- Deal with MingW/Cygwin FTD2XX issues + +if test $is_win32 = yes; then +if test "${with_ftd2xx_linux_tardir+set}" = set +then + AC_MSG_ERROR([The option: with_ftd2xx_linux_tardir is for LINUX only.]) +fi + +if test $build_ft2232_ftd2xx = yes ; then +AC_MSG_CHECKING([for ftd2xx.lib exists (win32)]) + + # if we are given a zipdir... + if test "${with_ftd2xx_win32_zipdir+set}" = set + then + # Set the CFLAGS for "ftd2xx.h" + f=$with_ftd2xx_win32_zipdir/ftd2xx.h + if test ! -f $f ; then + AC_MSG_ERROR([File: $f cannot be found]) + fi + CFLAGS="$CFLAGS -I$with_ftd2xx_win32_zipdir" + + # And calculate the LDFLAGS for the machine + case "$host_cpu" in + i?86|x86_*) + LDFLAGS="$LDFLAGS -L$with_ftd2xx_win32_zipdir/i386" + LIBS="$LIBS -lftd2xx" + f=$with_ftd2xx_win32_zipdir/i386/ftd2xx.lib + ;; + amd64) + LDFLAGS="$LDFLAGS -L$with_ftd2xx_win32_zipdir/amd64" + LIBS="$LIBS -lftd2xx" + f=$with_ftd2xx_win32_zipdir/amd64/ftd2xx.lib + ;; + *) + AC_MSG_ERROR([Unknown Win32 host cpu: $host_cpu]) + ;; + esac + if test ! -f $f ; then + AC_MSG_ERROR([Library: $f not found]) + fi + else + LIBS="$LIBS -lftd2xx" + AC_MSG_WARN([ASSUMPTION: The (win32) FTDICHIP.COM files: ftd2xx.h and ftd2xx.lib are in a proper place]) + fi +fi +fi + +if test $is_win32 = no; then + +if test "${with_ftd2xx_win32_zipdir+set}" = set +then + AC_MSG_ERROR([The option: --with-ftd2xx-win32-zipdir is for win32 only]) +fi + +if test $build_ft2232_ftd2xx = yes ; then + AC_MSG_CHECKING([for libftd2xx.a (linux)]) + # Must be linux - + # Cause FTDICHIP does not supply a MAC-OS version + if test $host_os != linux-gnu && test $host_os != linux ; then + AC_MSG_ERROR([The (linux) ftd2xx library from FTDICHIP.com is linux only. Try --enable-ft2232-libftdi instead]) + fi + # Are we given a TAR directory? + if test "${with_ftd2xx_linux_tardir+set}" = set + then + # The .H file is simple.. + f=$with_ftd2xx_linux_tardir/ftd2xx.h + if test ! -f $f ; then + AC_MSG_ERROR([Option: --with-ftd2xx-linux-tardir appears wrong, cannot find: $f]) + fi + CFLAGS="$CFLAGS -I$with_ftd2xx_linux_tardir" + if test $with_ftd2xx_lib = shared + then + LDFLAGS="$LDFLAGS -L$with_ftd2xx_linux_tardir" + LIBS="$LIBS -lftd2xx" + AC_MSG_RESULT([ Assuming: -L$with_ftd2xx_linux_tardir -lftd2xx]) + else + # Test #1 - Future proof - if/when ftdichip fixes their distro. + # Try it with the simple ".a" suffix. + f=$with_ftd2xx_linux_tardir/static_lib/libftd2xx.a + if test -f $f ; then + # Yea we are done + LDFLAGS="$LDFLAGS -L$with_ftd2xx_linux_tardir/static_lib" + LIBS="$LIBS -lftd2xx" + else + # Test Number2. + # Grr.. perhaps it exists as a version number? + f="$with_ftd2xx_linux_tardir/static_lib/libftd2xx.a.*.*.*" + count=`ls $f | wc -l` + if test $count -gt 1 ; then + AC_MSG_ERROR([Multiple libftd2xx.a files found in: $with_ftd2xx_linux_tardir/static_lib sorry cannot handle this yet]) + fi + if test $count -ne 1 ; then + AC_MSG_ERROR([Not found: $f, option: --with-ftd2xx-linux-tardir appears to be wrong]) + fi + # Because the "-l" rules do not understand version numbers... + # we will just stuff the absolute path onto the LIBS variable + f=`ls $f` + # + LIBS="$LIBS $f -lpthread" + # No need to bother with LDFLAGS... + fi + AC_MSG_RESULT([Found: $f]) + fi + else + LIBS="$LIBS -lftd2xx" + AC_MSG_RESULT([Assumed: installed]) + AC_MSG_WARN([The (linux) FTDICHIP.COM files ftd2xx.h and libftd2xx.so are assumed to be in a proper place]) + fi +fi +fi + +if test $build_ft2232_ftd2xx = yes; then + +# Before we go any further - make sure we can *BUILD* and *RUN* +# a simple app with the "ftd2xx.lib" file - in what ever form we where given +# We should be able to compile, link and run this test program now + AC_MSG_CHECKING([Test: Build & Link with ftd2xx]) + +# +# Save the LDFLAGS for later.. +LDFLAGS_SAVE=$LDFLAGS +CFLAGS_SAVE=$CFLAGS +_LDFLAGS=`eval echo $LDFLAGS` +_CFLAGS=`eval echo $CFLAGS` +LDFLAGS=$_LDFLAGS +CFLAGS=$_CFLAGS + AC_RUN_IFELSE( +[ +#include "confdefs.h" +#if IS_WIN32 +#include "windows.h" +#endif +#include <stdio.h> +#include <ftd2xx.h> + +int +main( int argc, char **argv ) +{ + DWORD x; + FT_GetLibraryVersion( &x ); + return 0; +} +], [ AC_MSG_RESULT([Success!])] , [ AC_MSG_ERROR([Cannot build & run test program using ftd2xx.lib]) ] ) +LDFLAGS=$LDFLAGS_SAVE +CFLAGS=$CFLAGS_SAVE +fi + +if test $build_ft2232_libftdi = yes ; then + # We assume: the package is preinstalled in the proper place + # these present as 2 libraries.. + LIBS="$LIBS -lftdi -lusb" + # + # Try to build a small program. + AC_MSG_CHECKING([Build & Link with libftdi...]) + +LDFLAGS_SAVE=$LDFLAGS +CFLAGS_SAVE=$CFLAGS +_LDFLAGS=`eval echo $LDFLAGS` +_CFLAGS=`eval echo $CFLAGS` +LDFLAGS=$_LDFLAGS +CFLAGS=$_CFLAGS + + AC_RUN_IFELSE( +[ +#include <stdio.h> +#include <ftdi.h> + +int +main( int argc, char **argv ) +{ + struct ftdi_context *p; + p = ftdi_new(); + if( p != NULL ){ + return 0; + } else { + fprintf( stderr, "calling ftdi_new() failed\n"); + return 1; + } +} +] +, +[ AC_MSG_RESULT([Success]) ] +, +[ AC_MSG_ERROR([Cannot build & run test program using libftdi]) ] ) +# Restore the 'unexpanded ldflags' +LDFLAGS=$LDFLAGS_SAVE +CFLAGS=$CFLAGS_SAVE +fi + AM_CONFIG_HEADER(config.h) AM_INIT_AUTOMAKE(openocd, 1.0) @@ -274,6 +632,8 @@ AM_CONDITIONAL(GIVEIO, test $parport_use_giveio = yes) AM_CONDITIONAL(EP93XX, test $build_ep93xx = yes) AM_CONDITIONAL(ECOSBOARD, test $build_ecosboard = yes) +AM_CONDITIONAL(IOUTIL, test $build_ioutil = yes) +AM_CONDITIONAL(HTTPD, test $build_httpd = yes) AM_CONDITIONAL(AT91RM9200, test $build_at91rm9200 = yes) AM_CONDITIONAL(BITBANG, test $build_bitbang = yes) AM_CONDITIONAL(FT2232_LIBFTDI, test $build_ft2232_libftdi = yes) @@ -285,10 +645,11 @@ AM_CONDITIONAL(USBPROG, test $build_usbprog = yes) AM_CONDITIONAL(OOCD_TRACE, test $build_oocd_trace = yes) AM_CONDITIONAL(JLINK, test $build_jlink = yes) +AM_CONDITIONAL(VSLLINK, test $build_vsllink = yes) +AM_CONDITIONAL(RLINK, test $build_rlink = yes) AM_CONDITIONAL(IS_CYGWIN, test $is_cygwin = yes) AM_CONDITIONAL(IS_MINGW, test $is_mingw = yes) AM_CONDITIONAL(IS_WIN32, test $is_win32 = yes) -AM_CONDITIONAL(FTD2XXDIR, test $with_ftd2xx != search) AM_CONDITIONAL(BITQ, test $build_bitq = yes) AC_LANG_C @@ -344,6 +705,4 @@ AC_MSG_RESULT([$EXEEXT_FOR_BUILD]) AC_SUBST(EXEEXT_FOR_BUILD) -AC_SUBST(WITH_FTD2XX, $with_ftd2xx) - AC_OUTPUT(Makefile src/Makefile src/helper/Makefile src/jtag/Makefile src/xsvf/Makefile src/target/Makefile src/server/Makefile src/flash/Makefile src/pld/Makefile doc/Makefile) Modified: branches/openocd-0.1/doc/openocd.1 =================================================================== --- branches/openocd_1_0_branch/doc/openocd.1 2009-01-15 20:58:17 UTC (rev 1324) +++ branches/openocd-0.1/doc/openocd.1 2009-01-16 06:43:11 UTC (rev 1325) @@ -1,37 +1,39 @@ -.TH "OPENOCD" "1" "February 29, 2008" +.TH "OPENOCD" "1" "January 08, 2009" .SH "NAME" openocd \- A free and open on\-chip debugging, in\-system programming and -boundary\-scan testing tool for ARM systems +boundary\-scan testing tool for ARM and MIPS systems .SH "SYNOPSIS" -.B openocd \fR[\fB\-fsdlchv\fR] [\fB\-\-file\fR <filename>] [\fB\-\-search\fR <dirname>] [\fB\-\-debug\fR <debuglevel>] [\fB\-\-log_output\fR <filename>] [\fB\-\-command\fR <cmd>] [\fB\-\-help\fR] [\fB\-\-version\fR] +.B openocd \fR[\fB\-fsdlcphv\fR] [\fB\-\-file\fR <filename>] [\fB\-\-search\fR <dirname>] [\fB\-\-debug\fR <debuglevel>] [\fB\-\-log_output\fR <filename>] [\fB\-\-command\fR <cmd>] [\fB\-\-pipe\fR] [\fB\-\-help\fR] [\fB\-\-version\fR] .SH "DESCRIPTION" .B OpenOCD is an on\-chip debugging, in\-system programming and boundary\-scan -testing tool for ARM systems. +testing tool for various ARM and MIPS systems. .PP The debugger uses an IEEE 1149\-1 compliant JTAG TAP bus master to access -on\-chip debug functionality available on ARM7/9, XScale, Cortex-M3, and -Marvell Feroceon (as found in the Orion SoC family) based -microcontrollers / system\-on\-chip solutions. +on\-chip debug functionality available on ARM based microcontrollers or +system-on-chip solutions. For MIPS systems the EJTAG interface is supported. .PP -User interaction is realized through a telnet command line interface and -a gdb (the GNU debugger) remote protocol server. +User interaction is realized through a telnet command line interface, +a gdb (the GNU debugger) remote protocol server, and a simplified RPC +connection that can be used to interface with OpenOCD's Jim Tcl engine. .PP OpenOCD supports various different types of JTAG interfaces/programmers, -please check the README for the complete list. +please check the \fIopenocd\fR info page for the complete list. .SH "OPTIONS" .TP .B "\-f, \-\-file <filename>" Use configuration file .BR <filename> . -If this option is omitted, the config file +In order to specify multiple config files, you can use multiple +.B \-\-file +arguments. If this option is omitted, the config file .B openocd.cfg in the current working directory will be used. .TP .B "\-s, \-\-search <dirname>" Search for config files and scripts in the directory .BR <dirname> . -If this option is omitted, openocd searches for config files and scripts +If this option is omitted, OpenOCD searches for config files and scripts in the current directory. .TP .B "\-d, \-\-debug <debuglevel>" @@ -58,6 +60,9 @@ Run the command .BR <cmd> . .TP +.B "\-p, \-\-pipe" +Use pipes when talking to gdb. +.TP .B "\-h, \-\-help" Show a help text and exit. .TP @@ -78,10 +83,12 @@ .B openocd is maintained as a Texinfo manual. If the .BR info +(or +.BR pinfo ) and .BR openocd programs are properly installed at your site, the command -.B info flex +.B info openocd should give you access to the complete manual. .PP Also, the OpenOCD wiki contains some more information and examples: Modified: branches/openocd-0.1/doc/openocd.texi =================================================================== --- branches/openocd_1_0_branch/doc/openocd.texi 2009-01-15 20:58:17 UTC (rev 1324) +++ branches/openocd-0.1/doc/openocd.texi 2009-01-16 06:43:11 UTC (rev 1325) @@ -15,7 +15,7 @@ @itemize @bullet @item Copyright @copyright{} 2008 The OpenOCD Project -@item Copyright @copyright{} 2007-2008 Spen @email{spen@@spen-soft.co.uk} +@item Copyright @copyright{} 2007-2008 Spencer Oliver @email{spen@@spen-soft.co.uk} @item Copyright @copyright{} 2008 Oyvind Harboe @email{oyvind.harboe@@zylin.com} @item Copyright @copyright{} 2008 Duane Ellis @email{openocd@@duaneellis.com} @end itemize @@ -96,8 +96,7 @@ @b{Dongles:} OpenOCD currently many types of hardware dongles: USB Based, Parallel Port Based, and other standalone boxes that run -OpenOCD internally. See the section titled: @xref{JTAG Hardware -Dongles}. +OpenOCD internally. See the section titled: @xref{JTAG Hardware Dongles}. @b{GDB Debug:} It allows ARM7 (ARM7TDMI and ARM720t), ARM9 (ARM920t, ARM922t, ARM926ej--s, ARM966e--s), XScale (PXA25x, IXP42x) and @@ -128,12 +127,54 @@ @chapter Building @cindex building OpenOCD +@section Pre-Built Tools If you are interested in getting actual work done rather than building OpenOCD, then check if your interface supplier provides binaries for you. Chances are that that binary is from some SVN version that is more stable than SVN trunk where bleeding edge development takes place. +@section Packagers Please Read! +If you are a @b{PACKAGER} of OpenOCD if you + +@enumerate +@item @b{Sell dongles} and include pre-built binaries +@item @b{Supply tools} ie: A complete development solution +@item @b{Supply IDEs} like Eclipse, or RHIDE, etc. +@item @b{Build packages} ie: RPM files, or DEB files for a Linux Distro +@end enumerate + +As a @b{PACKAGER} - you are at the top of the food chain. You solve +problems for downstream users. What you fix or solve - solves hundreds +if not thousands of user questions. If something does not work for you +please let us know. That said, would also like you to follow a few +suggestions: + +@enumerate +@item @b{Always build with Printer Ports Enabled} +@item @b{Try where possible to use LIBFTDI + LIBUSB} You cover more bases +@end enumerate + +It is your decision.. + +@itemize @bullet +@item @b{Why YES to LIBFTDI + LIBUSB} +@itemize @bullet +@item @b{LESS} work - libusb perhaps already there +@item @b{LESS} work - identical code multiple platforms +@item @b{MORE} dongles are supported +@item @b{MORE} platforms are supported +@item @b{MORE} complete solution +@end itemize +@item @b{Why not LIBFTDI + LIBUSB} (ie: ftd2xx instead) +@itemize @bullet +@item @b{LESS} Some say it is slower. +@item @b{LESS} complex to distribute (external dependencies) +@end itemize +@end itemize + +@section Building From Source + You can download the current SVN version with SVN client of your choice from the following repositories: @@ -167,8 +208,7 @@ homepage (@uref{www.amontec.com}), as the JTAGkey uses a non-standard VID/PID. @end itemize -libftdi is supported under windows. Versions earlier than 0.13 will require patching. -see contrib/libftdi for more details. +libftdi is supported under windows. Do not use versions earlier then 0.14. In general, the D2XX driver provides superior performance (several times as fast), but has the draw-back of being binary-only - though that isn't that bad, as it isn't @@ -180,36 +220,38 @@ @end example Bootstrap generates the configure script, and prepares building on your system. @example - ./configure + ./configure [options, see below] @end example Configure generates the Makefiles used to build OpenOCD. @example make + make install @end example -Make builds OpenOCD, and places the final executable in ./src/. +Make builds OpenOCD, and places the final executable in ./src/, the last step, ``make install'' is optional. The configure script takes several options, specifying which JTAG interfaces should be included: @itemize @bullet @item -@option{--enable-parport} +@option{--enable-parport} - Bit bang pc printer ports. @item -@option{--enable-parport_ppdev} +@option{--enable-parport_ppdev} - Parallel Port [see below] @item -@option{--enable-parport_giveio} +@option{--enable-parport_giveio} - Parallel Port [see below] @item -@option{--enable-amtjtagaccel} +@option{--enable-amtjtagaccel} - Parallel Port [Amontec, see below] @item -@option{--enable-ft2232_ftd2xx} -@footnote{Using the latest D2XX drivers from FTDI and following their installation -instructions, I had to use @option{--enable-ft2232_libftd2xx} for OpenOCD to -build properly.} +@option{--enable-ft2232_ftd2xx} - Numerous USB Type ARM JTAG dongles use the FT2232C chip from this FTDICHIP.COM chip (closed source). @item -@option{--enable-ft2232_libftdi} +@option{--enable-ft2232_libftdi} - An open source (free) alternate to FTDICHIP.COM ftd2xx solution (Linux, MacOS, Cygwin) @item -@option{--with-ftd2xx=/path/to/d2xx/} +@option{--with-ftd2xx-win32-zipdir=PATH} - If using FTDICHIP.COM ft2232c, point at the directory where the Win32 FTDICHIP.COM 'CDM' driver zip file was unpacked. @item +@option{--with-ftd2xx-linux-tardir=PATH} - Linux only equal of @option{--with-ftd2xx-win32-zipdir}, where you unpacked the TAR.GZ file. +@item +@option{--with-ftd2xx-lib=shared|static} - Linux only. Default: static, specifies how the FTDICHIP.COM libftd2xx driver should be linked. Note 'static' only works in conjunction with @option{--with-ftd2xx-linux-tardir}. Shared is supported (12/26/2008), however you must manually install the required header files and shared libraries in an appropriate place. This uses ``libusb'' internally. +@item @option{--enable-gw16012} @item @option{--enable-usbprog} @@ -218,22 +260,75 @@ @item @option{--enable-presto_ftd2xx} @item -@option{--enable-jlink} +@option{--enable-jlink} - From SEGGER +@item +@option{--enable-vsllink} +@item +@option{--enable-rlink} - Raisonance.com dongle. @end itemize +@section Parallel Port Dongles + If you want to access the parallel port using the PPDEV interface you have to specify both the @option{--enable-parport} AND the @option{--enable-parport_ppdev} option since the @option{--enable-parport_ppdev} option actually is an option to the parport driver (see @uref{http://forum.sparkfun.com/viewtopic.php?t=3795} for more info). -Cygwin users have to specify the location of the FTDI D2XX package. This should be an -absolute path containing no spaces. +@section FT2232C Based USB Dongles -Linux users should copy the various parts of the D2XX package to the appropriate -locations, i.e. /usr/include, /usr/lib. +There are 2 methods of using the FTD2232, either (1) using the +FTDICHIP.COM closed source driver, or (2) the open (and free) driver +libftdi. Some claim the (closed) FTDICHIP.COM solution is faster. -Miscellaneous configure options +The FTDICHIP drivers come as either a (win32) ZIP file, or a (linux) +TAR.GZ file. You must unpack them ``some where'' convient. As of this +writing (12/26/2008) FTDICHIP does not supply means to install these +files ``in an appropriate place'' As a result, there are two +``./configure'' options that help. +Below is an example build process: + +1) Check out the latest version of ``openocd'' from SVN. + +2) Download & Unpack either the Windows or Linux FTD2xx Drivers + (@uref{http://www.ftdichip.com/Drivers/D2XX.htm}) + +@example + /home/duane/ftd2xx.win32 => the Cygwin/Win32 ZIP file contents. + /home/duane/libftd2xx0.4.16 => the Linux TAR file contents. +@end example + +3) Configure with these options: + +@example +Cygwin FTCICHIP solution + ./configure --prefix=/home/duane/mytools \ + --enable-ft2232_ftd2xx \ + --with-ftd2xx-win32-zipdir=/home/duane/ftd2xx.win32 + +Linux FTDICHIP solution + ./configure --prefix=/home/duane/mytools \ + --enable-ft2232_ftd2xx \ + --with-ft2xx-linux-tardir=/home/duane/libftd2xx0.4.16 + +Cygwin/Linux LIBFTDI solution + Assumes: + 1a) For Windows: The windows port of LIBUSB is in place. + 1b) For Linux: libusb has been built and is inplace. + + 2) And libftdi has been built and installed + Note: libftdi - relies upon libusb. + + ./configure --prefix=/home/duane/mytools \ + --enable-ft2232_libftdi + +@end example + +4) Then just type ``make'', and perhaps ``make install''. + + +@section Miscellaneous configure options + @itemize @bullet @item @option{--enable-gccwarnings} - enable extra gcc warnings during build @@ -323,6 +418,18 @@ @* Link: @url{http://www.iar.com/website1/1.0.1.0/369/1/index.php} @end itemize +@section USB RLINK based +Raisonance has an adapter called @b{RLink}. It exists in a stripped-down form on the STM32 Primer, permanently attached to the JTAG lines. It also exists on the STM32 Primer2, but that is wired for SWD and not JTAG, thus not supported. + +@itemize @bullet +@item @b{Raisonance RLink} +@* Link: @url{http://www.raisonance.com/products/RLink.php} +@item @b{STM32 Primer} +@* Link: @url{http://www.stm32circle.com/resources/stm32primer.php} +@item @b{STM32 Primer2} +@* Link: @url{http://www.stm32circle.com/resources/stm32primer2.php} +@end itemize + @section USB Other @itemize @bullet @item @b{USBprog} @@ -330,6 +437,9 @@ @item @b{USB - Presto} @* Link: @url{http://tools.asix.net/prg_presto.htm} + +@item @b{Versaloon-Link} +@* Link: @url{http://www.simonqian.com/en/Versaloon} @end itemize @section IBM PC Parallel Printer Port Based @@ -411,9 +521,10 @@ --debug | -d set debug level <0-3> --log_output | -l redirect log output to file <name> --command | -c run <command> +--pipe | -p use pipes when talking to gdb @end verbatim -By default openocd reads the file configuration file ``openocd.cfg'' +By default OpenOCD reads the file configuration file ``openocd.cfg'' in the current directory. To specify a different (or multiple) configuration file, you can use the ``-f'' option. For example: @@ -445,6 +556,8 @@ the @option{-s <search>} switch. The current directory and the OpenOCD target library is in the search path by default. +For details on the @option{-p} option. @xref{Connecting to GDB}. + Note! OpenOCD will launch the GDB & telnet server even if it can not establish a connection with the target. In general, it is possible for the JTAG controller to be unresponsive until the target is set up @@ -455,7 +568,7 @@ @cindex configuration @section Outline -There are 4 basic ways of ``configurating'' openocd to run, they are: +There are 4 basic ways of ``configurating'' OpenOCD to run, they are: @enumerate @item A small openocd.cfg file which ``sources'' other configuration files @@ -541,7 +654,7 @@ @enumerate @item The RESET configuration of your debug environment as a hole -@item Is there a ``work area'' that that OpenOCD can use? +@item Is there a ``work area'' that OpenOCD can use? @* For ARM - work areas mean up to 10x faster downloads. @item For MMU/MPU based ARM chips (ie: ARM9 and later) will that work area still be available? @item For complex targets (multiple chips) the JTAG SPEED becomes an issue. @@ -671,7 +784,7 @@ every chip. If the @t{-expected-id} is nonzero, OpenOCD attempts to verify the tap id number verses configuration file and may issue an error or warning like this. The hope is this will help pin point -problem openocd configurations. +problem OpenOCD configurations. @example Info: JTAG tap: sam7x256.cpu tap/device found: 0x3f0f0f0f (Manufacturer: 0x787, Part: 0xf0f0, Version: 0x3) @@ -904,7 +1017,7 @@ JIM-Tcl commands, and (older) the orginal command interpretor. @item @b{Commands} -@* At the openocd telnet command line (or via the GDB mon command) one +@* At the OpenOCD telnet command line (or via the GDB mon command) one can type a Tcl for() loop, set variables, etc. @item @b{Historical Note} @@ -917,7 +1030,7 @@ @node Daemon Configuration @chapter Daemon Configuration -The commands here are commonly found inthe openocd.cfg file and are +The commands here are commonly found in the openocd.cfg file and are used to specify what TCP/IP ports are used, and how GDB should be supported. @section init @@ -1014,6 +1127,11 @@ # jlink interface interface jlink @end verbatim +@b{A Raisonance RLink} +@verbatim +# rlink interface +interface rlink +@end verbatim @b{Parallel Port} @verbatim interface parport @@ -1063,6 +1181,12 @@ @item @b{jlink} @* Segger jlink usb adapter + +@item @b{rlink} +@* Raisonance RLink usb adapter + +@item @b{vsllink} +@* vsllink is part of Versaloon which is a versatile USB programmer. @comment - End parameters @end itemize @comment - End Interface @@ -1145,7 +1269,7 @@ @b{TODO:} Confirm the following: On windows the name needs to end with a ``space A''? Or not? It has to do with the FTD2xx driver. When must this be added and when must it not be added? Why can't the code in the -interface or in openocd automatically add this if needed? -- Duane. +interface or in OpenOCD automatically add this if needed? -- Duane. @item @b{ft2232_serial} <@var{serial-number}> @cindex ft2232_serial @@ -1244,6 +1368,7 @@ @item ft2232: 6MHz / (@var{number}+1) @item amt jtagaccel: 8 / 2**@var{number} @item jlink: maximum speed in kHz (0-12000), 0 will use RTCK +@item rlink: 24MHz / @var{number}, but only for certain values of @var{number} @comment end speed list. @end itemize @@ -1381,7 +1506,7 @@ @itemize @bullet @item @b{-irlen NUMBER} - the length in bits of the instruction register @item @b{-ircapture NUMBER} - the ID code capture command. -@item @b{-irmask NUMBER} - the corrisponding mask for the ir register. +@item @b{-irmask NUMBER} - the corresponding mask for the ir register. @comment END REQUIRED @end itemize An example of a FOOBAR Tap @@ -1392,8 +1517,6 @@ bits long, during Capture-IR 0x42 is loaded into the IR, and bits [6,4,2,0] are checked. -FIXME: The IDCODE - this was not used in the old code, it should be? -Right? -Duane. @item @b{Optional configparams} @comment START Optional @itemize @bullet @@ -1488,13 +1611,13 @@ @* @b{Removed: 28/nov/2008} This command has been removed and replaced by the ``jtag newtap'' command. The documentation remains here so that one can easily convert the old syntax to the new syntax. About the old -syntax: The old syntax is positional, ie: The 4th parameter is the -``irmask'' The new syntax requires named prefixes, and supports -additional options, for example ``-irmask 4'' Please refer to the -@b{jtag newtap} command for deails. +syntax: The old syntax is positional, ie: The 3rd parameter is the +``irmask''. The new syntax requires named prefixes, and supports +additional options, for example ``-expected-id 0x3f0f0f0f''. Please refer to the +@b{jtag newtap} command for details. @example -OLD: jtag_device 8 0x01 0x0e3 0xfe -NEW: jtag newtap CHIPNAME TAPNAME -irlen 8 -ircapture 0xe3 -irmask 0xfe +OLD: jtag_device 8 0x01 0xe3 0xfe +NEW: jtag newtap CHIPNAME TAPNAME -irlen 8 -ircapture 0x01 -irmask 0xe3 @end example @section Enable/Disable Taps @@ -1527,7 +1650,7 @@ circuit and skipped. -From OpenOCDs view point, a JTAG TAP is in one of 3 states: +From OpenOCD's view point, a JTAG TAP is in one of 3 states: @itemize @bullet @item @b{Enabled - Not In ByPass} and has a variable bit length @@ -1540,7 +1663,7 @@ @b{jtag tapisenabled DOTTED.NAME} -This command return 1 if the named tap is currently enabled, 0 if not. +This command returns 1 if the named tap is currently enabled, 0 if not. This command exists so that scripts that manipulate a JRC (like the Omap3530 has) can determine if OpenOCD thinks a tap is presently enabled, or disabled. @@ -1555,7 +1678,7 @@ @section targets [NAME] @b{Note:} This command name is PLURAL - not singular. -With NO parameter, this pural @b{targets} command lists all known +With NO parameter, this plural @b{targets} command lists all known targets in a human friendly form. With a parameter, this pural @b{targets} command sets the current @@ -1640,7 +1763,7 @@ puts [format "The button is %s" $x] @end example -In OpenOCDs terms, the ``target'' is an object just like a Tcl/Tk +In OpenOCD's terms, the ``target'' is an object just like a Tcl/Tk button. Commands avaialble as a ``target object'' are: @comment START targetobj commands. @@ -1687,13 +1810,13 @@ @end itemize @section Target Events -At various times, certian things happen, or you want to happen. +At various times, certain things can happen, or you want them to happen. Examples: @itemize @bullet @item What should happen when GDB connects? Should your target reset? @item When GDB tries to flash the target, do you need to enable the flash via a special command? -@item During reset, do you need to write to certian memory locations to reconfigure the SDRAM? +@item During reset, do you need to write to certain memory location to reconfigure the SDRAM? @end itemize All of the above items are handled by target events. @@ -1705,7 +1828,7 @@ target event name, and BODY is a tcl procedure or string of commands to execute. -The programers model is the: ``-command'' option used in Tcl/Tk +The programmers model is the ``-command'' option used in Tcl/Tk buttons and events. Below are two identical examples, the first creates and invokes small procedure. The second inlines the procedure. @@ -1718,8 +1841,8 @@ mychip.cpu configure -event gdb-attach @{ puts "Reset..." ; reset halt @} @end example -Current Events - +@section Current Events +The following events are available: @itemize @bullet @item @b{debug-halted} @* The target has halted for debug reasons (ie: breakpoint) @@ -1783,6 +1906,22 @@ @* Success @item @b{resumed} @* Target has resumed +@item @b{tap-enable} +@* Executed by @b{jtag tapenable DOTTED.NAME} command. Example: +@example +jtag configure DOTTED.NAME -event tap-enable @{ + puts "Enabling CPU" + ... +@} +@end example +@item @b{tap-disable} +@*Executed by @b{jtag tapdisable DOTTED.NAME} command. Example: +@example +jtag configure DOTTED.NAME -event tap-disable @{ + puts "Disabling CPU" + ... +@} +@end example @end itemize @@ -1819,13 +1958,13 @@ @comment end TYPES @end itemize @item @b{PARAMS} -@*PARAMs are various target configure parameters, the following are manditory -at configuration. -@comment START manditory +@*PARAMs are various target configure parameters, the following are mandatory +at configuration: +@comment START mandatory @itemize @bullet @item @b{-endian big|little} @item @b{-chain-position DOTTED.NAME} -@comment end MANDITORY +@comment end MANDATORY @end itemize @comment END params @end itemize @@ -1841,7 +1980,7 @@ @item @b{-work-area-size [ADDRESS]} specify/set the work area @item @b{-work-area-backup [0|1]} does the work area get backed up @item @b{-endian [big|little]} -@item @b{-variant [NAME]} some chips have varients openocd needs to know about +@item @b{-variant [NAME]} some chips have varients OpenOCD needs to know about @item @b{-chain-position DOTTED.NAME} the tap name this target refers to. @end itemize Example: @@ -1870,7 +2009,7 @@ @* None (this is also used as the ARM946) @item @b{cortex_m3} @* use variant <@var{-variant lm3s}> when debugging luminary lm3s targets. This will cause -openocd to use a software reset rather than asserting SRST to avoid a issue with clearing +OpenOCD to use a software reset rather than asserting SRST to avoid a issue with clearing the debug registers. This is fixed in Fury Rev B, DustDevil Rev B, Tempest, these revisions will be detected and the normal reset behaviour used. @item @b{xscale} @@ -1880,9 +2019,9 @@ @item @b{mips_m4k} @* Use variant @option{ejtag_srst} when debugging targets that do not provide a functional SRST line on the EJTAG connector. This causes -openocd to instead use an EJTAG software reset command to reset the +OpenOCD to instead use an EJTAG software reset command to reset the processor. You still need to enable @option{srst} on the reset -configuration command to enable openocd hardware reset functionality. +configuration command to enable OpenOCD hardware reset functionality. @comment END varients @end itemize @section working_area - Command Removed @@ -2004,7 +2143,7 @@ @end itemize @section flash bank command -The @b{flash bank} command is used to configure one or more flash chips (or banks in openocd terms) +The @b{flash bank} command is used to configure one or more flash chips (or banks in OpenOCD terms) @example @b{flash bank} <@var{driver}> <@var{base}> <@var{size}> <@var{chip_width}> @@ -2170,7 +2309,7 @@ @end itemize Note: Before using the str9xpec driver here is some background info to help -you better understand how the drivers works. Openocd has two flash drivers for +you better understand how the drivers works. OpenOCD has two flash drivers for the str9. @enumerate @item @@ -2305,14 +2444,12 @@ @section Daemon Commands -@subsection sleep -@b{sleep} <@var{msec}> +@subsection sleep [@var{msec}] @cindex sleep @*Wait for n milliseconds before resuming. Useful in connection with script files (@var{script} command and @var{target_script} configuration). -@subsection sleep -@b{shutdown} +@subsection shutdown @cindex shutdown @*Close the OpenOCD daemon, disconnecting all clients (GDB, Telnet, Other). @@ -2709,7 +2846,8 @@ example if you need to control a JTAG Route Controller (ie: the OMAP3530 on the Beagle Board has one) you might use these commands in a script or an event procedure. - +@section Commands +@cindex Commands @itemize @bullet @item @b{scan_chain} @cindex scan_chain @@ -2743,7 +2881,45 @@ Display/modify variable field <@var{var}> <@var{field}> [@var{value}|@var{flip}]. @end itemize +@section Tap states +@cindex Tap states +Available tap_states are: +@itemize @bullet +@item @b{RESET} +@cindex RESET +@item @b{IDLE} +@cindex IDLE +@item @b{DRSELECT} +@cindex DRSELECT +@item @b{DRCAPTURE} +@cindex DRCAPTURE +@item @b{DRSHIFT} +@cindex DRSHIFT +@item @b{DREXIT1} +@cindex DREXIT1 +@item @b{DRPAUSE} +@cindex DRPAUSE +@item @b{DREXIT2} +@cindex DREXIT2 +@item @b{DRUPDATE} +@cindex DRUPDATE +@item @b{IRSELECT} +@cindex IRSELECT +@item @b{IRCAPTURE} +@cindex IRCAPTURE +@item @b{IRSHIFT} +@cindex IRSHIFT +@item @b{IREXIT1} +@cindex IREXIT1 +@item @b{IRPAUSE} +@cindex IRPAUSE +@item @b{IREXIT2} +@cindex IREXIT2 +@item @b{IRUPDATE} +@cindex IRUPDATE +@end itemize + @node TFTP @chapter TFTP @cindex TFTP @@ -2793,41 +2969,53 @@ OpenOCD complies with the remote gdbserver protocol, and as such can be used to debug remote targets. -@section Connecting to gdb -@cindex Connecting to gdb +@section Connecting to GDB +@cindex Connecting to GDB +@anchor{Connecting to GDB} Use GDB 6.7 or newer with OpenOCD if you run into trouble. For instance 6.3 has a known bug where it produces bogus memory access errors, which has since been fixed: look up 1836 in @url{http://sourceware.org/cgi-bin/gnatsweb.pl?database=gdb} - -A connection is typically started as follows: +@*OpenOCD can communicate with GDB in two ways: +@enumerate +@item +A socket (tcp) connection is typically started as follows: @example target remote localhost:3333 @end example -This would cause gdb to connect to the gdbserver on the local pc using port 3333. +This would cause GDB to connect to the gdbserver on the local pc using port 3333. +@item +A pipe connection is typically started as follows: +@example +target remote | openocd --pipe +@end example +This would cause GDB to run OpenOCD and communicate using pipes (stdin/stdout). +Using this method has the advantage of GDB starting/stopping OpenOCD for the debug +session. +@end enumerate -To see a list of available OpenOCD commands type @option{monitor help} on the -gdb commandline. +@*To see a list of available OpenOCD commands type @option{monitor help} on the +GDB commandline. OpenOCD supports the gdb @option{qSupported} packet, this enables information -to be sent by the gdb server (openocd) to gdb. Typical information includes +to be sent by the gdb server (OpenOCD) to GDB. Typical information includes packet size and device memory map. -Previous versions of OpenOCD required the following gdb options to increase -the packet size and speed up gdb communication. +Previous versions of OpenOCD required the following GDB options to increase +the packet size and speed up GDB communication. @example set remote memory-write-packet-size 1024 set remote memory-write-packet-size fixed set remote memory-read-packet-size 1024 set remote memory-read-packet-size fixed @end example -This is now handled in the @option{qSupported} PacketSize. +This is now handled in the @option{qSupported} PacketSize and should not be required. -@section Progr... [truncated message content] |
From: ntfreak at B. <nt...@ma...> - 2009-01-15 21:58:18
|
Author: ntfreak Date: 2009-01-15 21:58:17 +0100 (Thu, 15 Jan 2009) New Revision: 1324 Modified: trunk/src/target/board/imx31pdk.cfg trunk/testing/examples/ledtest-imx27ads/Makefile trunk/testing/examples/ledtest-imx27ads/crt0.S trunk/testing/examples/ledtest-imx27ads/gdbinit-imx27ads trunk/testing/examples/ledtest-imx27ads/ldscript trunk/testing/examples/ledtest-imx27ads/test.c trunk/testing/examples/ledtest-imx31pdk/test.c Log: - add missing svn props from 1323 commit Modified: trunk/src/target/board/imx31pdk.cfg =================================================================== --- trunk/src/target/board/imx31pdk.cfg 2009-01-15 13:22:04 UTC (rev 1323) +++ trunk/src/target/board/imx31pdk.cfg 2009-01-15 20:58:17 UTC (rev 1324) @@ -1,101 +1,101 @@ -# The IMX31PDK eval board has a single IMX31 chip -source [find target/imx31.cfg] -$_TARGETNAME configure -event gdb-attach { reset init } -$_TARGETNAME configure -event reset-init { imx31pdk_init } - -proc imx31pdk_init { } { - # This setup puts RAM at 0x80000000 - - # reset the board correctly - reset run - reset halt - - # ======================================== - # Init CCM - # ======================================== - mww 0x53FC0000 0x040 - mww 0x53F80000 0x074B0B7D - - sleep 100 - - # ======================================== - # 399MHz - 26MHz input, PD=1,MFI=7, MFN=27, MFD=40 - # ======================================== - mww 0x53F80004 0xFF871D50 - mww 0x53F80010 0x00271C1B - - # ======================================== - # Configure CPLD on CS5 - # ======================================== - mww 0xb8002050 0x0000DCF6 - mww 0xb8002054 0x444A4541 - mww 0xb8002058 0x44443302 - - # ======================================== - # SDCLK - # ======================================== - mww 0x43FAC26C 0 - - # ======================================== - # CAS - # ======================================== - mww 0x43FAC270 0 - - # ======================================== - # RAS - # ======================================== - mww 0x43FAC274 0 - - # ======================================== - # CS2 (CSD0) - # ======================================== - mww 0x43FAC27C 0x1000 - - # ======================================== - # DQM3 - # ======================================== - mww 0x43FAC284 0 - - # ======================================== - # DQM2, DQM1, DQM0, SD31-SD0, A25-A0, MA10 (0x288..0x2DC) - # ======================================== - mww 0x43FAC288 0 - mww 0x43FAC28C 0 - mww 0x43FAC290 0 - mww 0x43FAC294 0 - mww 0x43FAC298 0 - mww 0x43FAC29C 0 - mww 0x43FAC2A0 0 - mww 0x43FAC2A4 0 - mww 0x43FAC2A8 0 - mww 0x43FAC2AC 0 - mww 0x43FAC2B0 0 - mww 0x43FAC2B4 0 - mww 0x43FAC2B8 0 - mww 0x43FAC2BC 0 - mww 0x43FAC2C0 0 - mww 0x43FAC2C4 0 - mww 0x43FAC2C8 0 - mww 0x43FAC2CC 0 - mww 0x43FAC2D0 0 - mww 0x43FAC2D4 0 - mww 0x43FAC2D8 0 - mww 0x43FAC2DC 0 - - # ======================================== - # Initialization script for 32 bit DDR on MX31 PDK - # ======================================== - mww 0xB8001010 0x00000004 - mww 0xB8001004 0x006ac73a - mww 0xB8001000 0x92100000 - mww 0x80000f00 0x12344321 - mww 0xB8001000 0xa2100000 - mww 0x80000000 0x12344321 - mww 0x80000000 0x12344321 - mww 0xB8001000 0xb2100000 - mwb 0x80000033 0xda - mwb 0x81000000 0xff - mww 0xB8001000 0x82226080 - mww 0x80000000 0xDEADBEEF - mww 0xB8001010 0x0000000c -} +# The IMX31PDK eval board has a single IMX31 chip +source [find target/imx31.cfg] +$_TARGETNAME configure -event gdb-attach { reset init } +$_TARGETNAME configure -event reset-init { imx31pdk_init } + +proc imx31pdk_init { } { + # This setup puts RAM at 0x80000000 + + # reset the board correctly + reset run + reset halt + + # ======================================== + # Init CCM + # ======================================== + mww 0x53FC0000 0x040 + mww 0x53F80000 0x074B0B7D + + sleep 100 + + # ======================================== + # 399MHz - 26MHz input, PD=1,MFI=7, MFN=27, MFD=40 + # ======================================== + mww 0x53F80004 0xFF871D50 + mww 0x53F80010 0x00271C1B + + # ======================================== + # Configure CPLD on CS5 + # ======================================== + mww 0xb8002050 0x0000DCF6 + mww 0xb8002054 0x444A4541 + mww 0xb8002058 0x44443302 + + # ======================================== + # SDCLK + # ======================================== + mww 0x43FAC26C 0 + + # ======================================== + # CAS + # ======================================== + mww 0x43FAC270 0 + + # ======================================== + # RAS + # ======================================== + mww 0x43FAC274 0 + + # ======================================== + # CS2 (CSD0) + # ======================================== + mww 0x43FAC27C 0x1000 + + # ======================================== + # DQM3 + # ======================================== + mww 0x43FAC284 0 + + # ======================================== + # DQM2, DQM1, DQM0, SD31-SD0, A25-A0, MA10 (0x288..0x2DC) + # ======================================== + mww 0x43FAC288 0 + mww 0x43FAC28C 0 + mww 0x43FAC290 0 + mww 0x43FAC294 0 + mww 0x43FAC298 0 + mww 0x43FAC29C 0 + mww 0x43FAC2A0 0 + mww 0x43FAC2A4 0 + mww 0x43FAC2A8 0 + mww 0x43FAC2AC 0 + mww 0x43FAC2B0 0 + mww 0x43FAC2B4 0 + mww 0x43FAC2B8 0 + mww 0x43FAC2BC 0 + mww 0x43FAC2C0 0 + mww 0x43FAC2C4 0 + mww 0x43FAC2C8 0 + mww 0x43FAC2CC 0 + mww 0x43FAC2D0 0 + mww 0x43FAC2D4 0 + mww 0x43FAC2D8 0 + mww 0x43FAC2DC 0 + + # ======================================== + # Initialization script for 32 bit DDR on MX31 PDK + # ======================================== + mww 0xB8001010 0x00000004 + mww 0xB8001004 0x006ac73a + mww 0xB8001000 0x92100000 + mww 0x80000f00 0x12344321 + mww 0xB8001000 0xa2100000 + mww 0x80000000 0x12344321 + mww 0x80000000 0x12344321 + mww 0xB8001000 0xb2100000 + mwb 0x80000033 0xda + mwb 0x81000000 0xff + mww 0xB8001000 0x82226080 + mww 0x80000000 0xDEADBEEF + mww 0xB8001010 0x0000000c +} Property changes on: trunk/src/target/board/imx31pdk.cfg ___________________________________________________________________ Name: svn:eol-style + native Modified: trunk/testing/examples/ledtest-imx27ads/Makefile =================================================================== --- trunk/testing/examples/ledtest-imx27ads/Makefile 2009-01-15 13:22:04 UTC (rev 1323) +++ trunk/testing/examples/ledtest-imx27ads/Makefile 2009-01-15 20:58:17 UTC (rev 1324) @@ -1,42 +1,42 @@ -# This will make the test program for a Freescale iMX27 ADS Board with a -# FreeScale iMX27 CPU - -PROC=arm -TYPE=926ejs-linux -LDSCRIPT=ldscript - -PATH:=/opt/freescale/usr/local/gcc-4.1.1-glibc-2.4-nptl-sf-1/arm-926ejs-linux/bin/:$(PATH) -CC=$(PROC)-$(TYPE)-gcc -AS=$(PROC)-$(TYPE)-as -AR=$(PROC)-$(TYPE)-ar -LD=$(PROC)-$(TYPE)-ld -NM=$(PROC)-$(TYPE)-nm -OBJDUMP=$(PROC)-$(TYPE)-objdump -CFLAGS= -g -c -mcpu=arm920t - -all: test.elf - -# Make a little endian image: -# In Eclipse, add the line : -# source gdbinit -# to : Run -> Debug... (menu) -> Commands (tab): Commands (listbox) -# To start gdb from a window use : arm-elf-gdb --command=gdbinit -test.elf: test.c Makefile ldscript crt0.S - $(CC) $(CFLAGS) -o crt0.o crt0.S - $(CC) $(CFLAGS) -o test.o test.c - $(LD) -g -v -T$(LDSCRIPT) -o test.elf crt0.o test.o - $(NM) test.elf - - -dump: - $(OBJDUMP) --all-headers test.elf - -dump_test: - $(OBJDUMP) --disassemble test.elf - -dump_full: - $(OBJDUMP) --full-contents test.elf - -clean: - -/bin/rm -f *.o *~ test.elf - +# This will make the test program for a Freescale iMX27 ADS Board with a +# FreeScale iMX27 CPU + +PROC=arm +TYPE=926ejs-linux +LDSCRIPT=ldscript + +PATH:=/opt/freescale/usr/local/gcc-4.1.1-glibc-2.4-nptl-sf-1/arm-926ejs-linux/bin/:$(PATH) +CC=$(PROC)-$(TYPE)-gcc +AS=$(PROC)-$(TYPE)-as +AR=$(PROC)-$(TYPE)-ar +LD=$(PROC)-$(TYPE)-ld +NM=$(PROC)-$(TYPE)-nm +OBJDUMP=$(PROC)-$(TYPE)-objdump +CFLAGS= -g -c -mcpu=arm920t + +all: test.elf + +# Make a little endian image: +# In Eclipse, add the line : +# source gdbinit +# to : Run -> Debug... (menu) -> Commands (tab): Commands (listbox) +# To start gdb from a window use : arm-elf-gdb --command=gdbinit +test.elf: test.c Makefile ldscript crt0.S + $(CC) $(CFLAGS) -o crt0.o crt0.S + $(CC) $(CFLAGS) -o test.o test.c + $(LD) -g -v -T$(LDSCRIPT) -o test.elf crt0.o test.o + $(NM) test.elf + + +dump: + $(OBJDUMP) --all-headers test.elf + +dump_test: + $(OBJDUMP) --disassemble test.elf + +dump_full: + $(OBJDUMP) --full-contents test.elf + +clean: + -/bin/rm -f *.o *~ test.elf + Property changes on: trunk/testing/examples/ledtest-imx27ads/Makefile ___________________________________________________________________ Name: svn:eol-style + native Modified: trunk/testing/examples/ledtest-imx27ads/crt0.S =================================================================== --- trunk/testing/examples/ledtest-imx27ads/crt0.S 2009-01-15 13:22:04 UTC (rev 1323) +++ trunk/testing/examples/ledtest-imx27ads/crt0.S 2009-01-15 20:58:17 UTC (rev 1324) @@ -1,47 +1,47 @@ -/* Sample initialization file */ - - .extern main - .extern exit - -/* .text is used instead of .section .text so it works with arm-aout too. */ - .text - .code 32 - .align 0 - - .global _mainCRTStartup - .global _start - .global start -start: -_start: -_mainCRTStartup: - -/* Start by setting up a stack */ - /* Set up the stack pointer to end of bss */ - ldr r3, .LC2 - mov sp, r3 - - sub sl, sp, #512 /* Still assumes 512 bytes below sl */ - - mov a2, #0 /* Second arg: fill value */ - mov fp, a2 /* Null frame pointer */ - mov r7, a2 /* Null frame pointer for Thumb */ - - ldr a1, .LC1 /* First arg: start of memory block */ - ldr a3, .LC2 /* Second arg: end of memory block */ - sub a3, a3, a1 /* Third arg: length of block */ - - mov r0, #0 /* no arguments */ - mov r1, #0 /* no argv either */ - - bl main - bl exit /* Should not return */ - - /* For Thumb, constants must be after the code since only - positive offsets are supported for PC relative addresses. */ - - .align 0 -.LC1: - .word __bss_start__ -.LC2: - .word __bss_end__ - +/* Sample initialization file */ + + .extern main + .extern exit + +/* .text is used instead of .section .text so it works with arm-aout too. */ + .text + .code 32 + .align 0 + + .global _mainCRTStartup + .global _start + .global start +start: +_start: +_mainCRTStartup: + +/* Start by setting up a stack */ + /* Set up the stack pointer to end of bss */ + ldr r3, .LC2 + mov sp, r3 + + sub sl, sp, #512 /* Still assumes 512 bytes below sl */ + + mov a2, #0 /* Second arg: fill value */ + mov fp, a2 /* Null frame pointer */ + mov r7, a2 /* Null frame pointer for Thumb */ + + ldr a1, .LC1 /* First arg: start of memory block */ + ldr a3, .LC2 /* Second arg: end of memory block */ + sub a3, a3, a1 /* Third arg: length of block */ + + mov r0, #0 /* no arguments */ + mov r1, #0 /* no argv either */ + + bl main + bl exit /* Should not return */ + + /* For Thumb, constants must be after the code since only + positive offsets are supported for PC relative addresses. */ + + .align 0 +.LC1: + .word __bss_start__ +.LC2: + .word __bss_end__ + Property changes on: trunk/testing/examples/ledtest-imx27ads/crt0.S ___________________________________________________________________ Name: svn:eol-style + native Modified: trunk/testing/examples/ledtest-imx27ads/gdbinit-imx27ads =================================================================== --- trunk/testing/examples/ledtest-imx27ads/gdbinit-imx27ads 2009-01-15 13:22:04 UTC (rev 1323) +++ trunk/testing/examples/ledtest-imx27ads/gdbinit-imx27ads 2009-01-15 20:58:17 UTC (rev 1324) @@ -1,36 +1,36 @@ -echo Script to load ledtest on iMX27ADS.\n - -# Note: you need to startup openocd with "-f board/imx27ads.cfg" -# in order to it initialize RAM memory. - -# SETUP GDB : -# -# Common gdb setup for ARM CPUs -set complaints 1 -set output-radix 10 -set input-radix 10 -set prompt (arm-gdb) -set endian little -dir . - -# CONNECT TO TARGET : -target remote 127.0.0.1:3333 - -# LOAD IMAGE : -# - -# Load the program executable called "u-boot" -load test.elf - -# Load the symbols for the program. -symbol-file test.elf - -# RUN TO MAIN : -# -# Set a breakpoint at main(). -#b reset -b main - -# Run to the breakpoint. -c - +echo Script to load ledtest on iMX27ADS.\n + +# Note: you need to startup openocd with "-f board/imx27ads.cfg" +# in order to it initialize RAM memory. + +# SETUP GDB : +# +# Common gdb setup for ARM CPUs +set complaints 1 +set output-radix 10 +set input-radix 10 +set prompt (arm-gdb) +set endian little +dir . + +# CONNECT TO TARGET : +target remote 127.0.0.1:3333 + +# LOAD IMAGE : +# + +# Load the program executable called "u-boot" +load test.elf + +# Load the symbols for the program. +symbol-file test.elf + +# RUN TO MAIN : +# +# Set a breakpoint at main(). +#b reset +b main + +# Run to the breakpoint. +c + Property changes on: trunk/testing/examples/ledtest-imx27ads/gdbinit-imx27ads ___________________________________________________________________ Name: svn:eol-style + native Modified: trunk/testing/examples/ledtest-imx27ads/ldscript =================================================================== --- trunk/testing/examples/ledtest-imx27ads/ldscript 2009-01-15 13:22:04 UTC (rev 1323) +++ trunk/testing/examples/ledtest-imx27ads/ldscript 2009-01-15 20:58:17 UTC (rev 1324) @@ -1,18 +1,18 @@ -SECTIONS -{ - . = 0xA0000000; - .text : { *(.text) } - .data ALIGN(0x10): { *(.data) } - .bss ALIGN(0x10): { - __bss_start__ = ABSOLUTE(.); - *(.bss) - . += 0x100; - } - __bss_end__ = .; -PROVIDE (__stack = .); - _end = .; - .debug_info 0 : { *(.debug_info) } - .debug_abbrev 0 : { *(.debug_abbrev) } - .debug_line 0 : { *(.debug_line) } - .debug_frame 0 : { *(.debug_frame) } -} +SECTIONS +{ + . = 0xA0000000; + .text : { *(.text) } + .data ALIGN(0x10): { *(.data) } + .bss ALIGN(0x10): { + __bss_start__ = ABSOLUTE(.); + *(.bss) + . += 0x100; + } + __bss_end__ = .; +PROVIDE (__stack = .); + _end = .; + .debug_info 0 : { *(.debug_info) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } +} Property changes on: trunk/testing/examples/ledtest-imx27ads/ldscript ___________________________________________________________________ Name: svn:eol-style + native Modified: trunk/testing/examples/ledtest-imx27ads/test.c =================================================================== --- trunk/testing/examples/ledtest-imx27ads/test.c 2009-01-15 13:22:04 UTC (rev 1323) +++ trunk/testing/examples/ledtest-imx27ads/test.c 2009-01-15 20:58:17 UTC (rev 1324) @@ -1,60 +1,60 @@ -/*************************************************************************** - * Copyright (C) 2009 by Alan Carvalho de Assis * - * ac...@gm... * - * * - * 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. * - ***************************************************************************/ - -void delay() -{ - int i; - for (i = 0; i < 500000; i++); -} - -/* MAIN ARM FUNTION */ -int main (void) -{ - int i; - volatile unsigned char *ledoff = ((volatile unsigned char *)0xD4000008); - volatile unsigned char *ledon = ((volatile unsigned char *)0xD400000C); - - for (i = 0; i < 10000; i++) - { - *ledon = 0x30; - delay(); - *ledoff = 0x30; - delay(); - } /* FOR */ - -} /* MAIN */ - -__gccmain() -{ -} /* GCCMAIN */ - - -void exit(int exit_code) -{ - while(1); -} /* EXIT */ - - -atexit() -{ - while(1); -} /* ATEXIT */ - - +/*************************************************************************** + * Copyright (C) 2009 by Alan Carvalho de Assis * + * ac...@gm... * + * * + * 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. * + ***************************************************************************/ + +void delay() +{ + int i; + for (i = 0; i < 500000; i++); +} + +/* MAIN ARM FUNTION */ +int main (void) +{ + int i; + volatile unsigned char *ledoff = ((volatile unsigned char *)0xD4000008); + volatile unsigned char *ledon = ((volatile unsigned char *)0xD400000C); + + for (i = 0; i < 10000; i++) + { + *ledon = 0x30; + delay(); + *ledoff = 0x30; + delay(); + } /* FOR */ + +} /* MAIN */ + +__gccmain() +{ +} /* GCCMAIN */ + + +void exit(int exit_code) +{ + while(1); +} /* EXIT */ + + +atexit() +{ + while(1); +} /* ATEXIT */ + + Property changes on: trunk/testing/examples/ledtest-imx27ads/test.c ___________________________________________________________________ Name: svn:eol-style + native Modified: trunk/testing/examples/ledtest-imx31pdk/test.c =================================================================== --- trunk/testing/examples/ledtest-imx31pdk/test.c 2009-01-15 13:22:04 UTC (rev 1323) +++ trunk/testing/examples/ledtest-imx31pdk/test.c 2009-01-15 20:58:17 UTC (rev 1324) @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2009 by Alan Carvalho de Assis * + * Copyright (C) 2009 by Alan Carvalho de Assis * * ac...@gm... * * * * This program is free software; you can redistribute it and/or modify * |
From: <oh...@ma...> - 2009-01-15 14:22:07
|
Author: oharboe Date: 2009-01-15 14:22:04 +0100 (Thu, 15 Jan 2009) New Revision: 1323 Added: trunk/testing/examples/ledtest-imx27ads/ trunk/testing/examples/ledtest-imx27ads/Makefile trunk/testing/examples/ledtest-imx27ads/crt0.S trunk/testing/examples/ledtest-imx27ads/gdbinit-imx27ads trunk/testing/examples/ledtest-imx27ads/ldscript trunk/testing/examples/ledtest-imx27ads/test.c trunk/testing/examples/ledtest-imx27ads/test.elf Log: Alan Carvalho de Assis <ac...@gm...> test app for imx27 Added: trunk/testing/examples/ledtest-imx27ads/Makefile =================================================================== --- trunk/testing/examples/ledtest-imx27ads/Makefile 2009-01-15 13:09:20 UTC (rev 1322) +++ trunk/testing/examples/ledtest-imx27ads/Makefile 2009-01-15 13:22:04 UTC (rev 1323) @@ -0,0 +1,42 @@ +# This will make the test program for a Freescale iMX27 ADS Board with a +# FreeScale iMX27 CPU + +PROC=arm +TYPE=926ejs-linux +LDSCRIPT=ldscript + +PATH:=/opt/freescale/usr/local/gcc-4.1.1-glibc-2.4-nptl-sf-1/arm-926ejs-linux/bin/:$(PATH) +CC=$(PROC)-$(TYPE)-gcc +AS=$(PROC)-$(TYPE)-as +AR=$(PROC)-$(TYPE)-ar +LD=$(PROC)-$(TYPE)-ld +NM=$(PROC)-$(TYPE)-nm +OBJDUMP=$(PROC)-$(TYPE)-objdump +CFLAGS= -g -c -mcpu=arm920t + +all: test.elf + +# Make a little endian image: +# In Eclipse, add the line : +# source gdbinit +# to : Run -> Debug... (menu) -> Commands (tab): Commands (listbox) +# To start gdb from a window use : arm-elf-gdb --command=gdbinit +test.elf: test.c Makefile ldscript crt0.S + $(CC) $(CFLAGS) -o crt0.o crt0.S + $(CC) $(CFLAGS) -o test.o test.c + $(LD) -g -v -T$(LDSCRIPT) -o test.elf crt0.o test.o + $(NM) test.elf + + +dump: + $(OBJDUMP) --all-headers test.elf + +dump_test: + $(OBJDUMP) --disassemble test.elf + +dump_full: + $(OBJDUMP) --full-contents test.elf + +clean: + -/bin/rm -f *.o *~ test.elf + Added: trunk/testing/examples/ledtest-imx27ads/crt0.S =================================================================== --- trunk/testing/examples/ledtest-imx27ads/crt0.S 2009-01-15 13:09:20 UTC (rev 1322) +++ trunk/testing/examples/ledtest-imx27ads/crt0.S 2009-01-15 13:22:04 UTC (rev 1323) @@ -0,0 +1,47 @@ +/* Sample initialization file */ + + .extern main + .extern exit + +/* .text is used instead of .section .text so it works with arm-aout too. */ + .text + .code 32 + .align 0 + + .global _mainCRTStartup + .global _start + .global start +start: +_start: +_mainCRTStartup: + +/* Start by setting up a stack */ + /* Set up the stack pointer to end of bss */ + ldr r3, .LC2 + mov sp, r3 + + sub sl, sp, #512 /* Still assumes 512 bytes below sl */ + + mov a2, #0 /* Second arg: fill value */ + mov fp, a2 /* Null frame pointer */ + mov r7, a2 /* Null frame pointer for Thumb */ + + ldr a1, .LC1 /* First arg: start of memory block */ + ldr a3, .LC2 /* Second arg: end of memory block */ + sub a3, a3, a1 /* Third arg: length of block */ + + mov r0, #0 /* no arguments */ + mov r1, #0 /* no argv either */ + + bl main + bl exit /* Should not return */ + + /* For Thumb, constants must be after the code since only + positive offsets are supported for PC relative addresses. */ + + .align 0 +.LC1: + .word __bss_start__ +.LC2: + .word __bss_end__ + Added: trunk/testing/examples/ledtest-imx27ads/gdbinit-imx27ads =================================================================== --- trunk/testing/examples/ledtest-imx27ads/gdbinit-imx27ads 2009-01-15 13:09:20 UTC (rev 1322) +++ trunk/testing/examples/ledtest-imx27ads/gdbinit-imx27ads 2009-01-15 13:22:04 UTC (rev 1323) @@ -0,0 +1,36 @@ +echo Script to load ledtest on iMX27ADS.\n + +# Note: you need to startup openocd with "-f board/imx27ads.cfg" +# in order to it initialize RAM memory. + +# SETUP GDB : +# +# Common gdb setup for ARM CPUs +set complaints 1 +set output-radix 10 +set input-radix 10 +set prompt (arm-gdb) +set endian little +dir . + +# CONNECT TO TARGET : +target remote 127.0.0.1:3333 + +# LOAD IMAGE : +# + +# Load the program executable called "u-boot" +load test.elf + +# Load the symbols for the program. +symbol-file test.elf + +# RUN TO MAIN : +# +# Set a breakpoint at main(). +#b reset +b main + +# Run to the breakpoint. +c + Added: trunk/testing/examples/ledtest-imx27ads/ldscript =================================================================== --- trunk/testing/examples/ledtest-imx27ads/ldscript 2009-01-15 13:09:20 UTC (rev 1322) +++ trunk/testing/examples/ledtest-imx27ads/ldscript 2009-01-15 13:22:04 UTC (rev 1323) @@ -0,0 +1,18 @@ +SECTIONS +{ + . = 0xA0000000; + .text : { *(.text) } + .data ALIGN(0x10): { *(.data) } + .bss ALIGN(0x10): { + __bss_start__ = ABSOLUTE(.); + *(.bss) + . += 0x100; + } + __bss_end__ = .; +PROVIDE (__stack = .); + _end = .; + .debug_info 0 : { *(.debug_info) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } +} Added: trunk/testing/examples/ledtest-imx27ads/test.c =================================================================== --- trunk/testing/examples/ledtest-imx27ads/test.c 2009-01-15 13:09:20 UTC (rev 1322) +++ trunk/testing/examples/ledtest-imx27ads/test.c 2009-01-15 13:22:04 UTC (rev 1323) @@ -0,0 +1,60 @@ +/*************************************************************************** + * Copyright (C) 2009 by Alan Carvalho de Assis * + * ac...@gm... * + * * + * 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. * + ***************************************************************************/ + +void delay() +{ + int i; + for (i = 0; i < 500000; i++); +} + +/* MAIN ARM FUNTION */ +int main (void) +{ + int i; + volatile unsigned char *ledoff = ((volatile unsigned char *)0xD4000008); + volatile unsigned char *ledon = ((volatile unsigned char *)0xD400000C); + + for (i = 0; i < 10000; i++) + { + *ledon = 0x30; + delay(); + *ledoff = 0x30; + delay(); + } /* FOR */ + +} /* MAIN */ + +__gccmain() +{ +} /* GCCMAIN */ + + +void exit(int exit_code) +{ + while(1); +} /* EXIT */ + + +atexit() +{ + while(1); +} /* ATEXIT */ + + Added: trunk/testing/examples/ledtest-imx27ads/test.elf =================================================================== (Binary files differ) Property changes on: trunk/testing/examples/ledtest-imx27ads/test.elf ___________________________________________________________________ Name: svn:mime-type + application/octet-stream |
From: <oh...@ma...> - 2009-01-15 14:09:22
|
Author: oharboe Date: 2009-01-15 14:09:20 +0100 (Thu, 15 Jan 2009) New Revision: 1322 Added: trunk/src/target/board/imx31pdk.cfg Modified: trunk/testing/examples/ledtest-imx31pdk/gdbinit-imx31pdk Log: Alan Carvalho de Assis <ac...@gm...> imx31pdk.cfg reset init event Added: trunk/src/target/board/imx31pdk.cfg =================================================================== --- trunk/src/target/board/imx31pdk.cfg 2009-01-14 21:26:47 UTC (rev 1321) +++ trunk/src/target/board/imx31pdk.cfg 2009-01-15 13:09:20 UTC (rev 1322) @@ -0,0 +1,101 @@ +# The IMX31PDK eval board has a single IMX31 chip +source [find target/imx31.cfg] +$_TARGETNAME configure -event gdb-attach { reset init } +$_TARGETNAME configure -event reset-init { imx31pdk_init } + +proc imx31pdk_init { } { + # This setup puts RAM at 0x80000000 + + # reset the board correctly + reset run + reset halt + + # ======================================== + # Init CCM + # ======================================== + mww 0x53FC0000 0x040 + mww 0x53F80000 0x074B0B7D + + sleep 100 + + # ======================================== + # 399MHz - 26MHz input, PD=1,MFI=7, MFN=27, MFD=40 + # ======================================== + mww 0x53F80004 0xFF871D50 + mww 0x53F80010 0x00271C1B + + # ======================================== + # Configure CPLD on CS5 + # ======================================== + mww 0xb8002050 0x0000DCF6 + mww 0xb8002054 0x444A4541 + mww 0xb8002058 0x44443302 + + # ======================================== + # SDCLK + # ======================================== + mww 0x43FAC26C 0 + + # ======================================== + # CAS + # ======================================== + mww 0x43FAC270 0 + + # ======================================== + # RAS + # ======================================== + mww 0x43FAC274 0 + + # ======================================== + # CS2 (CSD0) + # ======================================== + mww 0x43FAC27C 0x1000 + + # ======================================== + # DQM3 + # ======================================== + mww 0x43FAC284 0 + + # ======================================== + # DQM2, DQM1, DQM0, SD31-SD0, A25-A0, MA10 (0x288..0x2DC) + # ======================================== + mww 0x43FAC288 0 + mww 0x43FAC28C 0 + mww 0x43FAC290 0 + mww 0x43FAC294 0 + mww 0x43FAC298 0 + mww 0x43FAC29C 0 + mww 0x43FAC2A0 0 + mww 0x43FAC2A4 0 + mww 0x43FAC2A8 0 + mww 0x43FAC2AC 0 + mww 0x43FAC2B0 0 + mww 0x43FAC2B4 0 + mww 0x43FAC2B8 0 + mww 0x43FAC2BC 0 + mww 0x43FAC2C0 0 + mww 0x43FAC2C4 0 + mww 0x43FAC2C8 0 + mww 0x43FAC2CC 0 + mww 0x43FAC2D0 0 + mww 0x43FAC2D4 0 + mww 0x43FAC2D8 0 + mww 0x43FAC2DC 0 + + # ======================================== + # Initialization script for 32 bit DDR on MX31 PDK + # ======================================== + mww 0xB8001010 0x00000004 + mww 0xB8001004 0x006ac73a + mww 0xB8001000 0x92100000 + mww 0x80000f00 0x12344321 + mww 0xB8001000 0xa2100000 + mww 0x80000000 0x12344321 + mww 0x80000000 0x12344321 + mww 0xB8001000 0xb2100000 + mwb 0x80000033 0xda + mwb 0x81000000 0xff + mww 0xB8001000 0x82226080 + mww 0x80000000 0xDEADBEEF + mww 0xB8001010 0x0000000c +} Modified: trunk/testing/examples/ledtest-imx31pdk/gdbinit-imx31pdk =================================================================== --- trunk/testing/examples/ledtest-imx31pdk/gdbinit-imx31pdk 2009-01-14 21:26:47 UTC (rev 1321) +++ trunk/testing/examples/ledtest-imx31pdk/gdbinit-imx31pdk 2009-01-15 13:09:20 UTC (rev 1322) @@ -1,4 +1,8 @@ -echo Setting up for the FreeScale iMX31 Board.\n +echo Script to load ledtest on iMX31PDK.\n + +# Note: you need to startup openocd with "-f board/imx31pdk.cfg" +# in order to it initialize RAM memory. + # SETUP GDB : # # Common gdb setup for ARM CPUs @@ -9,105 +13,9 @@ set endian little dir . -# DEFINE MACROS : -# -# Create a "refresh" macro to update gdb's screens after the cpu -# has been stopped by the other CPU or following an "monitor allstop" -define refresh - monitor set hbreak - cont - monitor clear hbreak -end - # CONNECT TO TARGET : target remote 127.0.0.1:3333 -monitor reset run -#FIX!!!! should be reset init! -monitor reset halt -# iMX31 PDK board initialization commands: - -#// init_ccm - -monitor mww 0x53FC0000 0x040 -monitor mww 0x53F80000 0x074B0B7D - -#//532-133-66.5 -#//monitor mww 0x53F80004 0xFF871D58 -#//monitor mww 0x53F80010 0x0033280C - -#// 399MHz - 26MHz input, PD=1,MFI=7, MFN=27, MFD=40 -monitor mww 0x53F80004 0xFF871D50 -monitor mww 0x53F80010 0x00271C1B - -#// 208-104-52 -#//monitor mww 0x53F80004 0xFF871D48 -#//monitor mww 0x53F80010 0x04002000 - -#// Configure CPLD on CS5 -monitor mww 0xb8002050 0x0000DCF6 -monitor mww 0xb8002054 0x444A4541 -monitor mww 0xb8002058 0x44443302 - -#// Disable maximum drive strength for SDRAM/DDR lines by clearing DSE1 bits -#// in SW_PAD_CTL registers - -#// SDCLK -monitor mww 0x43FAC26C 0 - -#// CAS -monitor mww 0x43FAC270 0 - -#// RAS -monitor mww 0x43FAC274 0 - -#// CS2 (CSD0) -monitor mww 0x43FAC27C 0x1000 - -#// DQM3 -monitor mww 0x43FAC284 0 - -#// DQM2, DQM1, DQM0, SD31-SD0, A25-A0, MA10 (0x288..0x2DC) -monitor mww 0x43FAC288 0 -monitor mww 0x43FAC28C 0 -monitor mww 0x43FAC290 0 -monitor mww 0x43FAC294 0 -monitor mww 0x43FAC298 0 -monitor mww 0x43FAC29C 0 -monitor mww 0x43FAC2A0 0 -monitor mww 0x43FAC2A4 0 -monitor mww 0x43FAC2A8 0 -monitor mww 0x43FAC2AC 0 -monitor mww 0x43FAC2B0 0 -monitor mww 0x43FAC2B4 0 -monitor mww 0x43FAC2B8 0 -monitor mww 0x43FAC2BC 0 -monitor mww 0x43FAC2C0 0 -monitor mww 0x43FAC2C4 0 -monitor mww 0x43FAC2C8 0 -monitor mww 0x43FAC2CC 0 -monitor mww 0x43FAC2D0 0 -monitor mww 0x43FAC2D4 0 -monitor mww 0x43FAC2D8 0 -monitor mww 0x43FAC2DC 0 - -#// Initialization script for 32 bit DDR on MX31 PDK -monitor mww 0xB8001010 0x00000004 -monitor mww 0xB8001004 0x006ac73a -monitor mww 0xB8001000 0x92100000 -monitor mww 0x80000f00 0x12344321 -monitor mww 0xB8001000 0xa2100000 -monitor mww 0x80000000 0x12344321 -monitor mww 0x80000000 0x12344321 -monitor mww 0xB8001000 0xb2100000 -#monitor char 0x80000033 0xda -monitor mwb 0x80000033 0xda -#monitor char 0x81000000 0xff -monitor mwb 0x81000000 0xff -monitor mww 0xB8001000 0x82226080 -monitor mww 0x80000000 0xDEADBEEF -monitor mww 0xB8001010 0x0000000c - # LOAD IMAGE : # |
From: ntfreak at B. <nt...@ma...> - 2009-01-14 22:26:49
|
Author: ntfreak Date: 2009-01-14 22:26:47 +0100 (Wed, 14 Jan 2009) New Revision: 1321 Modified: trunk/src/target/board/imx27ads.cfg trunk/testing/examples/ledtest-imx31pdk/Makefile trunk/testing/examples/ledtest-imx31pdk/crt0.S trunk/testing/examples/ledtest-imx31pdk/gdbinit-imx31pdk trunk/testing/examples/ledtest-imx31pdk/ldscript trunk/testing/examples/ledtest-imx31pdk/test.c Log: - add missing svn props and fix incorrect line endings from last commit Modified: trunk/src/target/board/imx27ads.cfg =================================================================== --- trunk/src/target/board/imx27ads.cfg 2009-01-14 19:48:11 UTC (rev 1320) +++ trunk/src/target/board/imx27ads.cfg 2009-01-14 21:26:47 UTC (rev 1321) @@ -1,75 +1,75 @@ -# The IMX27 ADS eval board has a single IMX27 chip -# Note: tested on IMX27ADS Board REV-2.6 and REV-2.8 -source [find target/imx27.cfg] -$_TARGETNAME configure -event gdb-attach { reset init } -$_TARGETNAME configure -event reset-init { imx27ads_init } - -# The IMX27 ADS board has a NOR flash on CS0 -flash_bank cfi 0xc0000000 0x00200000 2 2 0 - -proc imx27ads_init { } { - # This setup puts RAM at 0xA0000000 - - # reset the board correctly - reset run - reset halt - - mww 0x10000000 0x20040304 - mww 0x10020000 0x00000000 - mww 0x10000004 0xDFFBFCFB - mww 0x10020004 0xFFFFFFFF - - sleep 100 - - # ======================================== - # Configure DDR on CSD0 -- initial reset - # ======================================== - mww 0xD8001010 0x00000008 - - # ======================================== - # Configure PSRAM on CS5 - # ======================================== - mww 0xd8002050 0x0000dcf6 - mww 0xd8002054 0x444a4541 - mww 0xd8002058 0x44443302 - - # ======================================== - # Configure16 bit NorFlash on CS0 - # ======================================== - mww 0xd8002000 0x0000CC03 - mww 0xd8002004 0xa0330D01 - mww 0xd8002008 0x00220800 - - # ======================================== - # Configure CPLD on CS4 - # ======================================== - mww 0xd8002040 0x0000DCF6 - mww 0xd8002044 0x444A4541 - mww 0xd8002048 0x44443302 - - # ======================================== - # Configure DDR on CSD0 -- wait 5000 cycle - # ======================================== - mww 0x10027828 0x55555555 - mww 0x10027830 0x55555555 - mww 0x10027834 0x55555555 - mww 0x10027838 0x00005005 - mww 0x1002783C 0x15555555 - - mww 0xD8001010 0x00000004 - - mww 0xD8001004 0x00795729 - - mww 0xD8001000 0x92200000 - mww 0xA0000F00 0x0 - - mww 0xD8001000 0xA2200000 - mww 0xA0000F00 0x0 - mww 0xA0000F00 0x0 - - mww 0xD8001000 0xB2200000 - mwb 0xA0000033 0xFF - mwb 0xA1000000 0xAA - - mww 0xD8001000 0x82228085 -} +# The IMX27 ADS eval board has a single IMX27 chip +# Note: tested on IMX27ADS Board REV-2.6 and REV-2.8 +source [find target/imx27.cfg] +$_TARGETNAME configure -event gdb-attach { reset init } +$_TARGETNAME configure -event reset-init { imx27ads_init } + +# The IMX27 ADS board has a NOR flash on CS0 +flash_bank cfi 0xc0000000 0x00200000 2 2 0 + +proc imx27ads_init { } { + # This setup puts RAM at 0xA0000000 + + # reset the board correctly + reset run + reset halt + + mww 0x10000000 0x20040304 + mww 0x10020000 0x00000000 + mww 0x10000004 0xDFFBFCFB + mww 0x10020004 0xFFFFFFFF + + sleep 100 + + # ======================================== + # Configure DDR on CSD0 -- initial reset + # ======================================== + mww 0xD8001010 0x00000008 + + # ======================================== + # Configure PSRAM on CS5 + # ======================================== + mww 0xd8002050 0x0000dcf6 + mww 0xd8002054 0x444a4541 + mww 0xd8002058 0x44443302 + + # ======================================== + # Configure16 bit NorFlash on CS0 + # ======================================== + mww 0xd8002000 0x0000CC03 + mww 0xd8002004 0xa0330D01 + mww 0xd8002008 0x00220800 + + # ======================================== + # Configure CPLD on CS4 + # ======================================== + mww 0xd8002040 0x0000DCF6 + mww 0xd8002044 0x444A4541 + mww 0xd8002048 0x44443302 + + # ======================================== + # Configure DDR on CSD0 -- wait 5000 cycle + # ======================================== + mww 0x10027828 0x55555555 + mww 0x10027830 0x55555555 + mww 0x10027834 0x55555555 + mww 0x10027838 0x00005005 + mww 0x1002783C 0x15555555 + + mww 0xD8001010 0x00000004 + + mww 0xD8001004 0x00795729 + + mww 0xD8001000 0x92200000 + mww 0xA0000F00 0x0 + + mww 0xD8001000 0xA2200000 + mww 0xA0000F00 0x0 + mww 0xA0000F00 0x0 + + mww 0xD8001000 0xB2200000 + mwb 0xA0000033 0xFF + mwb 0xA1000000 0xAA + + mww 0xD8001000 0x82228085 +} Property changes on: trunk/src/target/board/imx27ads.cfg ___________________________________________________________________ Name: svn:eol-style + native Modified: trunk/testing/examples/ledtest-imx31pdk/Makefile =================================================================== --- trunk/testing/examples/ledtest-imx31pdk/Makefile 2009-01-14 19:48:11 UTC (rev 1320) +++ trunk/testing/examples/ledtest-imx31pdk/Makefile 2009-01-14 21:26:47 UTC (rev 1321) @@ -1,42 +1,42 @@ -# $Header: $ -# This will make the test program for ARM. - -PROC=arm -TYPE=none-linux-gnueabi -LDSCRIPT=ldscript - -PATH:=/opt/freescale/usr/local/gcc-4.1.2-glibc-2.5-nptl-3/arm-none-linux-gnueabi/bin/:$(PATH) -CC=$(PROC)-$(TYPE)-gcc -AS=$(PROC)-$(TYPE)-as -AR=$(PROC)-$(TYPE)-ar -LD=$(PROC)-$(TYPE)-ld -NM=$(PROC)-$(TYPE)-nm -OBJDUMP=$(PROC)-$(TYPE)-objdump -CFLAGS= -g -c -mcpu=arm1136j-s - -all: test.elf - -# Make a little endian image: -# In Eclipse, add the line : -# source gdbinit -# to : Run -> Debug... (menu) -> Commands (tab): Commands (listbox) -# To start gdb from a window use : arm-elf-gdb --command=gdbinit -test.elf: test.c Makefile ldscript crt0.S - $(CC) $(CFLAGS) -o crt0.o crt0.S - $(CC) $(CFLAGS) -o test.o test.c - $(LD) -g -v -T$(LDSCRIPT) -o test.elf crt0.o test.o - $(NM) test.elf - - -dump: - $(OBJDUMP) --all-headers test.elf - -dump_test: - $(OBJDUMP) --disassemble test.elf - -dump_full: - $(OBJDUMP) --full-contents test.elf - -clean: - -/bin/rm -f *.o *~ test.elf - +# $Header: $ +# This will make the test program for ARM. + +PROC=arm +TYPE=none-linux-gnueabi +LDSCRIPT=ldscript + +PATH:=/opt/freescale/usr/local/gcc-4.1.2-glibc-2.5-nptl-3/arm-none-linux-gnueabi/bin/:$(PATH) +CC=$(PROC)-$(TYPE)-gcc +AS=$(PROC)-$(TYPE)-as +AR=$(PROC)-$(TYPE)-ar +LD=$(PROC)-$(TYPE)-ld +NM=$(PROC)-$(TYPE)-nm +OBJDUMP=$(PROC)-$(TYPE)-objdump +CFLAGS= -g -c -mcpu=arm1136j-s + +all: test.elf + +# Make a little endian image: +# In Eclipse, add the line : +# source gdbinit +# to : Run -> Debug... (menu) -> Commands (tab): Commands (listbox) +# To start gdb from a window use : arm-elf-gdb --command=gdbinit +test.elf: test.c Makefile ldscript crt0.S + $(CC) $(CFLAGS) -o crt0.o crt0.S + $(CC) $(CFLAGS) -o test.o test.c + $(LD) -g -v -T$(LDSCRIPT) -o test.elf crt0.o test.o + $(NM) test.elf + + +dump: + $(OBJDUMP) --all-headers test.elf + +dump_test: + $(OBJDUMP) --disassemble test.elf + +dump_full: + $(OBJDUMP) --full-contents test.elf + +clean: + -/bin/rm -f *.o *~ test.elf + Property changes on: trunk/testing/examples/ledtest-imx31pdk/Makefile ___________________________________________________________________ Name: svn:eol-style + native Modified: trunk/testing/examples/ledtest-imx31pdk/crt0.S =================================================================== --- trunk/testing/examples/ledtest-imx31pdk/crt0.S 2009-01-14 19:48:11 UTC (rev 1320) +++ trunk/testing/examples/ledtest-imx31pdk/crt0.S 2009-01-14 21:26:47 UTC (rev 1321) @@ -1,47 +1,47 @@ -/* Sample initialization file */ - - .extern main - .extern exit - -/* .text is used instead of .section .text so it works with arm-aout too. */ - .text - .code 32 - .align 0 - - .global _mainCRTStartup - .global _start - .global start -start: -_start: -_mainCRTStartup: - -/* Start by setting up a stack */ - /* Set up the stack pointer to end of bss */ - ldr r3, .LC2 - mov sp, r3 - - sub sl, sp, #512 /* Still assumes 512 bytes below sl */ - - mov a2, #0 /* Second arg: fill value */ - mov fp, a2 /* Null frame pointer */ - mov r7, a2 /* Null frame pointer for Thumb */ - - ldr a1, .LC1 /* First arg: start of memory block */ - ldr a3, .LC2 /* Second arg: end of memory block */ - sub a3, a3, a1 /* Third arg: length of block */ - - mov r0, #0 /* no arguments */ - mov r1, #0 /* no argv either */ - - bl main - bl exit /* Should not return */ - - /* For Thumb, constants must be after the code since only - positive offsets are supported for PC relative addresses. */ - - .align 0 -.LC1: - .word __bss_start__ -.LC2: - .word __bss_end__ - +/* Sample initialization file */ + + .extern main + .extern exit + +/* .text is used instead of .section .text so it works with arm-aout too. */ + .text + .code 32 + .align 0 + + .global _mainCRTStartup + .global _start + .global start +start: +_start: +_mainCRTStartup: + +/* Start by setting up a stack */ + /* Set up the stack pointer to end of bss */ + ldr r3, .LC2 + mov sp, r3 + + sub sl, sp, #512 /* Still assumes 512 bytes below sl */ + + mov a2, #0 /* Second arg: fill value */ + mov fp, a2 /* Null frame pointer */ + mov r7, a2 /* Null frame pointer for Thumb */ + + ldr a1, .LC1 /* First arg: start of memory block */ + ldr a3, .LC2 /* Second arg: end of memory block */ + sub a3, a3, a1 /* Third arg: length of block */ + + mov r0, #0 /* no arguments */ + mov r1, #0 /* no argv either */ + + bl main + bl exit /* Should not return */ + + /* For Thumb, constants must be after the code since only + positive offsets are supported for PC relative addresses. */ + + .align 0 +.LC1: + .word __bss_start__ +.LC2: + .word __bss_end__ + Property changes on: trunk/testing/examples/ledtest-imx31pdk/crt0.S ___________________________________________________________________ Name: svn:eol-style + native Modified: trunk/testing/examples/ledtest-imx31pdk/gdbinit-imx31pdk =================================================================== --- trunk/testing/examples/ledtest-imx31pdk/gdbinit-imx31pdk 2009-01-14 19:48:11 UTC (rev 1320) +++ trunk/testing/examples/ledtest-imx31pdk/gdbinit-imx31pdk 2009-01-14 21:26:47 UTC (rev 1321) @@ -1,131 +1,128 @@ -echo Setting up for the FreeScale iMX31 Board.\n -# SETUP GDB : -# -# Common gdb setup for ARM CPUs -set complaints 1 -set output-radix 10 -set input-radix 10 -set prompt (arm-gdb) -set endian little -dir . - - -# DEFINE MACROS : -# -# Create a "refresh" macro to update gdb's screens after the cpu -# has been stopped by the other CPU or following an "monitor allstop" -define refresh - monitor set hbreak - cont - monitor clear hbreak -end - - -# CONNECT TO TARGET : -target remote 127.0.0.1:3333 -monitor reset run -#FIX!!!! should be reset init! -monitor reset halt - -# iMX31 PDK board initialization commands: - -#// init_ccm - -monitor mww 0x53FC0000 0x040 -monitor mww 0x53F80000 0x074B0B7D - -#//532-133-66.5 -#//monitor mww 0x53F80004 0xFF871D58 -#//monitor mww 0x53F80010 0x0033280C - -#// 399MHz - 26MHz input, PD=1,MFI=7, MFN=27, MFD=40 -monitor mww 0x53F80004 0xFF871D50 -monitor mww 0x53F80010 0x00271C1B - -#// 208-104-52 -#//monitor mww 0x53F80004 0xFF871D48 -#//monitor mww 0x53F80010 0x04002000 - - -#// Configure CPLD on CS5 -monitor mww 0xb8002050 0x0000DCF6 -monitor mww 0xb8002054 0x444A4541 -monitor mww 0xb8002058 0x44443302 - -#// Disable maximum drive strength for SDRAM/DDR lines by clearing DSE1 bits -#// in SW_PAD_CTL registers - -#// SDCLK -monitor mww 0x43FAC26C 0 - -#// CAS -monitor mww 0x43FAC270 0 - -#// RAS -monitor mww 0x43FAC274 0 - -#// CS2 (CSD0) -monitor mww 0x43FAC27C 0x1000 - -#// DQM3 -monitor mww 0x43FAC284 0 - -#// DQM2, DQM1, DQM0, SD31-SD0, A25-A0, MA10 (0x288..0x2DC) -monitor mww 0x43FAC288 0 -monitor mww 0x43FAC28C 0 -monitor mww 0x43FAC290 0 -monitor mww 0x43FAC294 0 -monitor mww 0x43FAC298 0 -monitor mww 0x43FAC29C 0 -monitor mww 0x43FAC2A0 0 -monitor mww 0x43FAC2A4 0 -monitor mww 0x43FAC2A8 0 -monitor mww 0x43FAC2AC 0 -monitor mww 0x43FAC2B0 0 -monitor mww 0x43FAC2B4 0 -monitor mww 0x43FAC2B8 0 -monitor mww 0x43FAC2BC 0 -monitor mww 0x43FAC2C0 0 -monitor mww 0x43FAC2C4 0 -monitor mww 0x43FAC2C8 0 -monitor mww 0x43FAC2CC 0 -monitor mww 0x43FAC2D0 0 -monitor mww 0x43FAC2D4 0 -monitor mww 0x43FAC2D8 0 -monitor mww 0x43FAC2DC 0 - -#// Initialization script for 32 bit DDR on MX31 PDK -monitor mww 0xB8001010 0x00000004 -monitor mww 0xB8001004 0x006ac73a -monitor mww 0xB8001000 0x92100000 -monitor mww 0x80000f00 0x12344321 -monitor mww 0xB8001000 0xa2100000 -monitor mww 0x80000000 0x12344321 -monitor mww 0x80000000 0x12344321 -monitor mww 0xB8001000 0xb2100000 -#monitor char 0x80000033 0xda -monitor mwb 0x80000033 0xda -#monitor char 0x81000000 0xff -monitor mwb 0x81000000 0xff -monitor mww 0xB8001000 0x82226080 -monitor mww 0x80000000 0xDEADBEEF -monitor mww 0xB8001010 0x0000000c - -# LOAD IMAGE : -# - -# Load the program executable called "u-boot" -load test.elf - -# Load the symbols for the program. -symbol-file test.elf - -# RUN TO MAIN : -# -# Set a breakpoint at main(). -#b reset -b main - -# Run to the breakpoint. -c +echo Setting up for the FreeScale iMX31 Board.\n +# SETUP GDB : +# +# Common gdb setup for ARM CPUs +set complaints 1 +set output-radix 10 +set input-radix 10 +set prompt (arm-gdb) +set endian little +dir . +# DEFINE MACROS : +# +# Create a "refresh" macro to update gdb's screens after the cpu +# has been stopped by the other CPU or following an "monitor allstop" +define refresh + monitor set hbreak + cont + monitor clear hbreak +end + +# CONNECT TO TARGET : +target remote 127.0.0.1:3333 +monitor reset run +#FIX!!!! should be reset init! +monitor reset halt + +# iMX31 PDK board initialization commands: + +#// init_ccm + +monitor mww 0x53FC0000 0x040 +monitor mww 0x53F80000 0x074B0B7D + +#//532-133-66.5 +#//monitor mww 0x53F80004 0xFF871D58 +#//monitor mww 0x53F80010 0x0033280C + +#// 399MHz - 26MHz input, PD=1,MFI=7, MFN=27, MFD=40 +monitor mww 0x53F80004 0xFF871D50 +monitor mww 0x53F80010 0x00271C1B + +#// 208-104-52 +#//monitor mww 0x53F80004 0xFF871D48 +#//monitor mww 0x53F80010 0x04002000 + +#// Configure CPLD on CS5 +monitor mww 0xb8002050 0x0000DCF6 +monitor mww 0xb8002054 0x444A4541 +monitor mww 0xb8002058 0x44443302 + +#// Disable maximum drive strength for SDRAM/DDR lines by clearing DSE1 bits +#// in SW_PAD_CTL registers + +#// SDCLK +monitor mww 0x43FAC26C 0 + +#// CAS +monitor mww 0x43FAC270 0 + +#// RAS +monitor mww 0x43FAC274 0 + +#// CS2 (CSD0) +monitor mww 0x43FAC27C 0x1000 + +#// DQM3 +monitor mww 0x43FAC284 0 + +#// DQM2, DQM1, DQM0, SD31-SD0, A25-A0, MA10 (0x288..0x2DC) +monitor mww 0x43FAC288 0 +monitor mww 0x43FAC28C 0 +monitor mww 0x43FAC290 0 +monitor mww 0x43FAC294 0 +monitor mww 0x43FAC298 0 +monitor mww 0x43FAC29C 0 +monitor mww 0x43FAC2A0 0 +monitor mww 0x43FAC2A4 0 +monitor mww 0x43FAC2A8 0 +monitor mww 0x43FAC2AC 0 +monitor mww 0x43FAC2B0 0 +monitor mww 0x43FAC2B4 0 +monitor mww 0x43FAC2B8 0 +monitor mww 0x43FAC2BC 0 +monitor mww 0x43FAC2C0 0 +monitor mww 0x43FAC2C4 0 +monitor mww 0x43FAC2C8 0 +monitor mww 0x43FAC2CC 0 +monitor mww 0x43FAC2D0 0 +monitor mww 0x43FAC2D4 0 +monitor mww 0x43FAC2D8 0 +monitor mww 0x43FAC2DC 0 + +#// Initialization script for 32 bit DDR on MX31 PDK +monitor mww 0xB8001010 0x00000004 +monitor mww 0xB8001004 0x006ac73a +monitor mww 0xB8001000 0x92100000 +monitor mww 0x80000f00 0x12344321 +monitor mww 0xB8001000 0xa2100000 +monitor mww 0x80000000 0x12344321 +monitor mww 0x80000000 0x12344321 +monitor mww 0xB8001000 0xb2100000 +#monitor char 0x80000033 0xda +monitor mwb 0x80000033 0xda +#monitor char 0x81000000 0xff +monitor mwb 0x81000000 0xff +monitor mww 0xB8001000 0x82226080 +monitor mww 0x80000000 0xDEADBEEF +monitor mww 0xB8001010 0x0000000c + +# LOAD IMAGE : +# + +# Load the program executable called "u-boot" +load test.elf + +# Load the symbols for the program. +symbol-file test.elf + +# RUN TO MAIN : +# +# Set a breakpoint at main(). +#b reset +b main + +# Run to the breakpoint. +c + Property changes on: trunk/testing/examples/ledtest-imx31pdk/gdbinit-imx31pdk ___________________________________________________________________ Name: svn:eol-style + native Modified: trunk/testing/examples/ledtest-imx31pdk/ldscript =================================================================== --- trunk/testing/examples/ledtest-imx31pdk/ldscript 2009-01-14 19:48:11 UTC (rev 1320) +++ trunk/testing/examples/ledtest-imx31pdk/ldscript 2009-01-14 21:26:47 UTC (rev 1321) @@ -1,18 +1,18 @@ -SECTIONS -{ - . = 0x80000100; - .text : { *(.text) } - .data ALIGN(0x10): { *(.data) } - .bss ALIGN(0x10): { - __bss_start__ = ABSOLUTE(.); - *(.bss) - . += 0x100; - } - __bss_end__ = .; -PROVIDE (__stack = .); - _end = .; - .debug_info 0 : { *(.debug_info) } - .debug_abbrev 0 : { *(.debug_abbrev) } - .debug_line 0 : { *(.debug_line) } - .debug_frame 0 : { *(.debug_frame) } -} +SECTIONS +{ + . = 0x80000100; + .text : { *(.text) } + .data ALIGN(0x10): { *(.data) } + .bss ALIGN(0x10): { + __bss_start__ = ABSOLUTE(.); + *(.bss) + . += 0x100; + } + __bss_end__ = .; +PROVIDE (__stack = .); + _end = .; + .debug_info 0 : { *(.debug_info) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } +} Property changes on: trunk/testing/examples/ledtest-imx31pdk/ldscript ___________________________________________________________________ Name: svn:eol-style + native Property changes on: trunk/testing/examples/ledtest-imx31pdk/test.c ___________________________________________________________________ Name: svn:eol-style + native |
From: <oh...@ma...> - 2009-01-14 20:48:13
|
Author: oharboe Date: 2009-01-14 20:48:11 +0100 (Wed, 14 Jan 2009) New Revision: 1320 Modified: trunk/testing/examples/ledtest-imx31pdk/gdbinit-imx31pdk Log: wip Modified: trunk/testing/examples/ledtest-imx31pdk/gdbinit-imx31pdk =================================================================== --- trunk/testing/examples/ledtest-imx31pdk/gdbinit-imx31pdk 2009-01-14 19:30:51 UTC (rev 1319) +++ trunk/testing/examples/ledtest-imx31pdk/gdbinit-imx31pdk 2009-01-14 19:48:11 UTC (rev 1320) @@ -9,13 +9,7 @@ set endian little dir . -# Tell GDB to use 1024 bytes packes when downloading, this -# reduces load image download times -set remote memory-write-packet-size 1024 -set remote memory-write-packet-size fixed - - # DEFINE MACROS : # # Create a "refresh" macro to update gdb's screens after the cpu @@ -30,6 +24,7 @@ # CONNECT TO TARGET : target remote 127.0.0.1:3333 monitor reset run +#FIX!!!! should be reset init! monitor reset halt # iMX31 PDK board initialization commands: |
From: <oh...@ma...> - 2009-01-14 20:30:55
|
Author: oharboe Date: 2009-01-14 20:30:51 +0100 (Wed, 14 Jan 2009) New Revision: 1319 Added: trunk/testing/examples/ledtest-imx31pdk/ trunk/testing/examples/ledtest-imx31pdk/Makefile trunk/testing/examples/ledtest-imx31pdk/crt0.S trunk/testing/examples/ledtest-imx31pdk/gdbinit-imx31pdk trunk/testing/examples/ledtest-imx31pdk/ldscript trunk/testing/examples/ledtest-imx31pdk/test.c trunk/testing/examples/ledtest-imx31pdk/test.elf Log: Alan Carvalho de Assis <ac...@gm...> - testcase Added: trunk/testing/examples/ledtest-imx31pdk/Makefile =================================================================== --- trunk/testing/examples/ledtest-imx31pdk/Makefile 2009-01-14 18:41:09 UTC (rev 1318) +++ trunk/testing/examples/ledtest-imx31pdk/Makefile 2009-01-14 19:30:51 UTC (rev 1319) @@ -0,0 +1,42 @@ +# $Header: $ +# This will make the test program for ARM. + +PROC=arm +TYPE=none-linux-gnueabi +LDSCRIPT=ldscript + +PATH:=/opt/freescale/usr/local/gcc-4.1.2-glibc-2.5-nptl-3/arm-none-linux-gnueabi/bin/:$(PATH) +CC=$(PROC)-$(TYPE)-gcc +AS=$(PROC)-$(TYPE)-as +AR=$(PROC)-$(TYPE)-ar +LD=$(PROC)-$(TYPE)-ld +NM=$(PROC)-$(TYPE)-nm +OBJDUMP=$(PROC)-$(TYPE)-objdump +CFLAGS= -g -c -mcpu=arm1136j-s + +all: test.elf + +# Make a little endian image: +# In Eclipse, add the line : +# source gdbinit +# to : Run -> Debug... (menu) -> Commands (tab): Commands (listbox) +# To start gdb from a window use : arm-elf-gdb --command=gdbinit +test.elf: test.c Makefile ldscript crt0.S + $(CC) $(CFLAGS) -o crt0.o crt0.S + $(CC) $(CFLAGS) -o test.o test.c + $(LD) -g -v -T$(LDSCRIPT) -o test.elf crt0.o test.o + $(NM) test.elf + + +dump: + $(OBJDUMP) --all-headers test.elf + +dump_test: + $(OBJDUMP) --disassemble test.elf + +dump_full: + $(OBJDUMP) --full-contents test.elf + +clean: + -/bin/rm -f *.o *~ test.elf + Added: trunk/testing/examples/ledtest-imx31pdk/crt0.S =================================================================== --- trunk/testing/examples/ledtest-imx31pdk/crt0.S 2009-01-14 18:41:09 UTC (rev 1318) +++ trunk/testing/examples/ledtest-imx31pdk/crt0.S 2009-01-14 19:30:51 UTC (rev 1319) @@ -0,0 +1,47 @@ +/* Sample initialization file */ + + .extern main + .extern exit + +/* .text is used instead of .section .text so it works with arm-aout too. */ + .text + .code 32 + .align 0 + + .global _mainCRTStartup + .global _start + .global start +start: +_start: +_mainCRTStartup: + +/* Start by setting up a stack */ + /* Set up the stack pointer to end of bss */ + ldr r3, .LC2 + mov sp, r3 + + sub sl, sp, #512 /* Still assumes 512 bytes below sl */ + + mov a2, #0 /* Second arg: fill value */ + mov fp, a2 /* Null frame pointer */ + mov r7, a2 /* Null frame pointer for Thumb */ + + ldr a1, .LC1 /* First arg: start of memory block */ + ldr a3, .LC2 /* Second arg: end of memory block */ + sub a3, a3, a1 /* Third arg: length of block */ + + mov r0, #0 /* no arguments */ + mov r1, #0 /* no argv either */ + + bl main + bl exit /* Should not return */ + + /* For Thumb, constants must be after the code since only + positive offsets are supported for PC relative addresses. */ + + .align 0 +.LC1: + .word __bss_start__ +.LC2: + .word __bss_end__ + Added: trunk/testing/examples/ledtest-imx31pdk/gdbinit-imx31pdk =================================================================== --- trunk/testing/examples/ledtest-imx31pdk/gdbinit-imx31pdk 2009-01-14 18:41:09 UTC (rev 1318) +++ trunk/testing/examples/ledtest-imx31pdk/gdbinit-imx31pdk 2009-01-14 19:30:51 UTC (rev 1319) @@ -0,0 +1,136 @@ +echo Setting up for the FreeScale iMX31 Board.\n +# SETUP GDB : +# +# Common gdb setup for ARM CPUs +set complaints 1 +set output-radix 10 +set input-radix 10 +set prompt (arm-gdb) +set endian little +dir . + +# Tell GDB to use 1024 bytes packes when downloading, this +# reduces load image download times +set remote memory-write-packet-size 1024 +set remote memory-write-packet-size fixed + + + +# DEFINE MACROS : +# +# Create a "refresh" macro to update gdb's screens after the cpu +# has been stopped by the other CPU or following an "monitor allstop" +define refresh + monitor set hbreak + cont + monitor clear hbreak +end + + +# CONNECT TO TARGET : +target remote 127.0.0.1:3333 +monitor reset run +monitor reset halt + +# iMX31 PDK board initialization commands: + +#// init_ccm + +monitor mww 0x53FC0000 0x040 +monitor mww 0x53F80000 0x074B0B7D + +#//532-133-66.5 +#//monitor mww 0x53F80004 0xFF871D58 +#//monitor mww 0x53F80010 0x0033280C + +#// 399MHz - 26MHz input, PD=1,MFI=7, MFN=27, MFD=40 +monitor mww 0x53F80004 0xFF871D50 +monitor mww 0x53F80010 0x00271C1B + +#// 208-104-52 +#//monitor mww 0x53F80004 0xFF871D48 +#//monitor mww 0x53F80010 0x04002000 + + +#// Configure CPLD on CS5 +monitor mww 0xb8002050 0x0000DCF6 +monitor mww 0xb8002054 0x444A4541 +monitor mww 0xb8002058 0x44443302 + +#// Disable maximum drive strength for SDRAM/DDR lines by clearing DSE1 bits +#// in SW_PAD_CTL registers + +#// SDCLK +monitor mww 0x43FAC26C 0 + +#// CAS +monitor mww 0x43FAC270 0 + +#// RAS +monitor mww 0x43FAC274 0 + +#// CS2 (CSD0) +monitor mww 0x43FAC27C 0x1000 + +#// DQM3 +monitor mww 0x43FAC284 0 + +#// DQM2, DQM1, DQM0, SD31-SD0, A25-A0, MA10 (0x288..0x2DC) +monitor mww 0x43FAC288 0 +monitor mww 0x43FAC28C 0 +monitor mww 0x43FAC290 0 +monitor mww 0x43FAC294 0 +monitor mww 0x43FAC298 0 +monitor mww 0x43FAC29C 0 +monitor mww 0x43FAC2A0 0 +monitor mww 0x43FAC2A4 0 +monitor mww 0x43FAC2A8 0 +monitor mww 0x43FAC2AC 0 +monitor mww 0x43FAC2B0 0 +monitor mww 0x43FAC2B4 0 +monitor mww 0x43FAC2B8 0 +monitor mww 0x43FAC2BC 0 +monitor mww 0x43FAC2C0 0 +monitor mww 0x43FAC2C4 0 +monitor mww 0x43FAC2C8 0 +monitor mww 0x43FAC2CC 0 +monitor mww 0x43FAC2D0 0 +monitor mww 0x43FAC2D4 0 +monitor mww 0x43FAC2D8 0 +monitor mww 0x43FAC2DC 0 + +#// Initialization script for 32 bit DDR on MX31 PDK +monitor mww 0xB8001010 0x00000004 +monitor mww 0xB8001004 0x006ac73a +monitor mww 0xB8001000 0x92100000 +monitor mww 0x80000f00 0x12344321 +monitor mww 0xB8001000 0xa2100000 +monitor mww 0x80000000 0x12344321 +monitor mww 0x80000000 0x12344321 +monitor mww 0xB8001000 0xb2100000 +#monitor char 0x80000033 0xda +monitor mwb 0x80000033 0xda +#monitor char 0x81000000 0xff +monitor mwb 0x81000000 0xff +monitor mww 0xB8001000 0x82226080 +monitor mww 0x80000000 0xDEADBEEF +monitor mww 0xB8001010 0x0000000c + +# LOAD IMAGE : +# + +# Load the program executable called "u-boot" +load test.elf + +# Load the symbols for the program. +symbol-file test.elf + +# RUN TO MAIN : +# +# Set a breakpoint at main(). +#b reset +b main + +# Run to the breakpoint. +c + Added: trunk/testing/examples/ledtest-imx31pdk/ldscript =================================================================== --- trunk/testing/examples/ledtest-imx31pdk/ldscript 2009-01-14 18:41:09 UTC (rev 1318) +++ trunk/testing/examples/ledtest-imx31pdk/ldscript 2009-01-14 19:30:51 UTC (rev 1319) @@ -0,0 +1,18 @@ +SECTIONS +{ + . = 0x80000100; + .text : { *(.text) } + .data ALIGN(0x10): { *(.data) } + .bss ALIGN(0x10): { + __bss_start__ = ABSOLUTE(.); + *(.bss) + . += 0x100; + } + __bss_end__ = .; +PROVIDE (__stack = .); + _end = .; + .debug_info 0 : { *(.debug_info) } + .debug_abbrev 0 : { *(.debug_abbrev) } + .debug_line 0 : { *(.debug_line) } + .debug_frame 0 : { *(.debug_frame) } +} Added: trunk/testing/examples/ledtest-imx31pdk/test.c =================================================================== --- trunk/testing/examples/ledtest-imx31pdk/test.c 2009-01-14 18:41:09 UTC (rev 1318) +++ trunk/testing/examples/ledtest-imx31pdk/test.c 2009-01-14 19:30:51 UTC (rev 1319) @@ -0,0 +1,58 @@ +/*************************************************************************** + * Copyright (C) 2009 by Alan Carvalho de Assis * + * ac...@gm... * + * * + * 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. * + ***************************************************************************/ + +void delay() +{ + int i; + for (i = 0; i < 500000; i++); +} + +/* MAIN ARM FUNTION */ +int main (void) +{ + volatile unsigned char *led = ((volatile unsigned char *)0xB6020000); + + while(1) + { + *led = 0xFF; + delay(); + *led = 0x00; + delay(); + } /* FOR */ + +} /* MAIN */ + +__gccmain() +{ +} /* GCCMAIN */ + + +void exit(int exit_code) +{ + while(1); +} /* EXIT */ + + +atexit() +{ + while(1); +} /* ATEXIT */ + + Added: trunk/testing/examples/ledtest-imx31pdk/test.elf =================================================================== (Binary files differ) Property changes on: trunk/testing/examples/ledtest-imx31pdk/test.elf ___________________________________________________________________ Name: svn:mime-type + application/octet-stream |