From 7765c636498173ad09b91e3b923b8068b227738b Mon Sep 17 00:00:00 2001 From: oharboe Date: Wed, 26 Nov 2008 13:31:26 +0000 Subject: [PATCH] wip git-svn-id: svn://svn.berlios.de/openocd/trunk@1184 b42882b7-edfa-0310-969c-e2dbd0fdcd60 --- src/ecosboard.c | 103 +++++++++++++++++++++++++--------------------- src/jtag/zy1000.c | 48 ++++++++++----------- 2 files changed, 81 insertions(+), 70 deletions(-) diff --git a/src/ecosboard.c b/src/ecosboard.c index ed7492c66..8195943e0 100644 --- a/src/ecosboard.c +++ b/src/ecosboard.c @@ -543,10 +543,10 @@ static void setPower(bool power) savePower = power; if (power) { - HAL_WRITE_UINT32(0x08000014, 0x8); + HAL_WRITE_UINT32(ZY1000_JTAG_BASE+0x14, 0x8); } else { - HAL_WRITE_UINT32(0x08000010, 0x8); + HAL_WRITE_UINT32(ZY1000_JTAG_BASE+0x10, 0x8); } } @@ -1413,7 +1413,6 @@ static char uart_stack[4096]; static char forwardBuffer[1024]; // NB! must be smaller than a TCP/IP packet!!!!! static char backwardBuffer[1024]; -static cyg_io_handle_t serial_handle; void setNoDelay(int session, int flag) { @@ -1686,6 +1685,16 @@ int handle_uart_command(struct command_context_s *cmd_ctx, char *cmd, char **arg //get existing serial configuration len = sizeof(cyg_serial_info_t); int err; + cyg_io_handle_t serial_handle; + + err = cyg_io_lookup("/dev/ser0", &serial_handle); + if (err != ENOERR) + { + LOG_ERROR("/dev/ser0 not found\n"); + return ERROR_FAIL; + } + + err = cyg_io_get_config(serial_handle, CYG_IO_GET_CONFIG_SERIAL_OUTPUT_DRAIN, &buf, &len); err = cyg_io_get_config(serial_handle, CYG_IO_GET_CONFIG_SERIAL_INFO, &buf, &len); if (err != ENOERR) @@ -1748,6 +1757,8 @@ int main(int argc, char *argv[]) ramblockdevice=(cyg_uint8 *)malloc(ramblockdevice_size); memset(ramblockdevice, 0xff, ramblockdevice_size); + + #ifdef CYGNUM_HAL_VECTOR_UNDEF_INSTRUCTION setHandler(CYGNUM_HAL_VECTOR_UNDEF_INSTRUCTION); setHandler(CYGNUM_HAL_VECTOR_ABORT_PREFETCH); @@ -1755,12 +1766,6 @@ int main(int argc, char *argv[]) #endif int err; - err = cyg_io_lookup("/dev/ser0", &serial_handle); - if (err != ENOERR) - { - diag_printf("/dev/ser0 not found\n"); - reboot(); - } setPower(true); // on by default @@ -1811,48 +1816,54 @@ int main(int argc, char *argv[]) err = mount("/dev/flash1", "/config", "jffs2"); if (err < 0) { - diag_printf("unable to mount jffs\n"); - reboot(); - } - - /* are we using a ram disk instead of a flash disk? This is used - * for ZY1000 live demo... - * - * copy over flash disk to ram block device - */ - if (boolParam("ramdisk")) - { - diag_printf("Unmounting /config from flash and using ram instead\n"); - err=umount("/config"); - if (err < 0) + diag_printf("unable to mount jffs2, falling back to ram disk..\n"); + err = mount("", "/config", "ramfs"); + if (err<0) { - diag_printf("unable to unmount jffs\n"); + diag_printf("unable to mount /config as ramdisk.\n"); reboot(); } - - err = mount("/dev/flash1", "/config2", "jffs2"); - if (err < 0) - { - diag_printf("unable to mount jffs\n"); - reboot(); - } - - err = mount("/dev/ram", "/config", "jffs2"); - if (err < 0) - { - diag_printf("unable to mount ram block device\n"); - reboot(); - } - -// copydir("/config2", "/config"); - copyfile("/config2/ip", "/config/ip"); - copydir("/config2/settings", "/config/settings"); - - umount("/config2"); } else { - /* we're not going to use a ram block disk */ - free(ramblockdevice); + /* are we using a ram disk instead of a flash disk? This is used + * for ZY1000 live demo... + * + * copy over flash disk to ram block device + */ + if (boolParam("ramdisk")) + { + diag_printf("Unmounting /config from flash and using ram instead\n"); + err=umount("/config"); + if (err < 0) + { + diag_printf("unable to unmount jffs\n"); + reboot(); + } + + err = mount("/dev/flash1", "/config2", "jffs2"); + if (err < 0) + { + diag_printf("unable to mount jffs\n"); + reboot(); + } + + err = mount("/dev/ram", "/config", "jffs2"); + if (err < 0) + { + diag_printf("unable to mount ram block device\n"); + reboot(); + } + + // copydir("/config2", "/config"); + copyfile("/config2/ip", "/config/ip"); + copydir("/config2/settings", "/config/settings"); + + umount("/config2"); + } else + { + /* we're not going to use a ram block disk */ + free(ramblockdevice); + } } diff --git a/src/jtag/zy1000.c b/src/jtag/zy1000.c index 5ec1d8adb..423822b21 100644 --- a/src/jtag/zy1000.c +++ b/src/jtag/zy1000.c @@ -81,8 +81,8 @@ static bool readPowerDropout() { cyg_uint32 state; // sample and clear power dropout - HAL_WRITE_UINT32(0x08000010, 0x80); - HAL_READ_UINT32(0x08000010, state); + HAL_WRITE_UINT32(ZY1000_JTAG_BASE+0x10, 0x80); + HAL_READ_UINT32(ZY1000_JTAG_BASE+0x10, state); bool powerDropout; powerDropout = (state & 0x80) != 0; return powerDropout; @@ -93,8 +93,8 @@ static bool readSRST() { cyg_uint32 state; // sample and clear SRST sensing - HAL_WRITE_UINT32(0x08000010, 0x00000040); - HAL_READ_UINT32(0x08000010, state); + HAL_WRITE_UINT32(ZY1000_JTAG_BASE+0x10, 0x00000040); + HAL_READ_UINT32(ZY1000_JTAG_BASE+0x10, state); bool srstAsserted; srstAsserted = (state & 0x40) != 0; return srstAsserted; @@ -153,35 +153,35 @@ void zy1000_reset(int trst, int srst) LOG_DEBUG("zy1000 trst=%d, srst=%d", trst, srst); if(!srst) { - ZY1000_POKE(0x08000014, 0x00000001); + ZY1000_POKE(ZY1000_JTAG_BASE+0x14, 0x00000001); } else { /* Danger!!! if clk!=0 when in * idle in TAP_RTI, reset halt on str912 will fail. */ - ZY1000_POKE(0x08000010, 0x00000001); + ZY1000_POKE(ZY1000_JTAG_BASE+0x10, 0x00000001); } if(!trst) { - ZY1000_POKE(0x08000014, 0x00000002); + ZY1000_POKE(ZY1000_JTAG_BASE+0x14, 0x00000002); } else { /* assert reset */ - ZY1000_POKE(0x08000010, 0x00000002); + ZY1000_POKE(ZY1000_JTAG_BASE+0x10, 0x00000002); } if (trst||(srst&&(jtag_reset_config & RESET_SRST_PULLS_TRST))) { waitIdle(); /* we're now in the TLR state until trst is deasserted */ - ZY1000_POKE(0x08000020, TAP_TLR); + ZY1000_POKE(ZY1000_JTAG_BASE+0x20, TAP_TLR); } else { /* We'll get RCLK failure when we assert TRST, so clear any false positives here */ - ZY1000_POKE(0x08000014, 0x400); + ZY1000_POKE(ZY1000_JTAG_BASE+0x14, 0x400); } /* wait for srst to float back up */ @@ -216,7 +216,7 @@ int zy1000_speed(int speed) { /*0 means RCLK*/ speed = 0; - ZY1000_POKE(0x08000010, 0x100); + ZY1000_POKE(ZY1000_JTAG_BASE+0x10, 0x100); LOG_DEBUG("jtag_speed using RCLK"); } else @@ -228,8 +228,8 @@ int zy1000_speed(int speed) } LOG_USER("jtag_speed %d => JTAG clk=%f", speed, 64.0/(float)speed); - ZY1000_POKE(0x08000014, 0x100); - ZY1000_POKE(0x0800001c, speed&~1); + ZY1000_POKE(ZY1000_JTAG_BASE+0x14, 0x100); + ZY1000_POKE(ZY1000_JTAG_BASE+0x1c, speed&~1); } return ERROR_OK; } @@ -242,7 +242,7 @@ int zy1000_register_commands(struct command_context_s *cmd_ctx) int zy1000_init(void) { - ZY1000_POKE(0x08000010, 0x30); // Turn on LED1 & LED2 + ZY1000_POKE(ZY1000_JTAG_BASE+0x10, 0x30); // Turn on LED1 & LED2 /* deassert resets. Important to avoid infinite loop waiting for SRST to deassert */ zy1000_reset(0, 0); @@ -324,9 +324,9 @@ int interface_jtag_execute_queue(void) cyg_uint32 empty; waitIdle(); - ZY1000_PEEK(0x08000010, empty); + ZY1000_PEEK(ZY1000_JTAG_BASE+0x10, empty); /* clear JTAG error register */ - ZY1000_POKE(0x08000014, 0x400); + ZY1000_POKE(ZY1000_JTAG_BASE+0x14, 0x400); if ((empty&0x400)!=0) { @@ -347,7 +347,7 @@ static cyg_uint32 getShiftValue() { cyg_uint32 value; waitIdle(); - ZY1000_PEEK(0x0800000c, value); + ZY1000_PEEK(ZY1000_JTAG_BASE+0xc, value); VERBOSE(LOG_INFO("getShiftValue %08x", value)); return value; } @@ -356,7 +356,7 @@ static cyg_uint32 getShiftValueFlip() { cyg_uint32 value; waitIdle(); - ZY1000_PEEK(0x08000018, value); + ZY1000_PEEK(ZY1000_JTAG_BASE+0x18, value); VERBOSE(LOG_INFO("getShiftValue %08x (flipped)", value)); return value; } @@ -369,8 +369,8 @@ static void shiftValueInnerFlip(const enum tap_state state, const enum tap_state cyg_uint32 a,b; a=state; b=endState; - ZY1000_POKE(0x0800000c, value); - ZY1000_POKE(0x08000008, (1<<15)|(repeat<<8)|(a<<4)|b); + ZY1000_POKE(ZY1000_JTAG_BASE+0xc, value); + ZY1000_POKE(ZY1000_JTAG_BASE+0x8, (1<<15)|(repeat<<8)|(a<<4)|b); VERBOSE(getShiftValueFlip()); } #endif @@ -680,10 +680,10 @@ int interface_jtag_add_runtest(int num_cycles, enum tap_state state) { tms = (tms_scan >> i) & 1; waitIdle(); - ZY1000_POKE(0x08000028, tms); + ZY1000_POKE(ZY1000_JTAG_BASE+0x28, tms); } waitIdle(); - ZY1000_POKE(0x08000020, state); + ZY1000_POKE(ZY1000_JTAG_BASE+0x20, state); #endif @@ -725,7 +725,7 @@ int interface_jtag_add_pathmove(int num_states, enum tap_state *path) } waitIdle(); - ZY1000_POKE(0x08000028, tms); + ZY1000_POKE(ZY1000_JTAG_BASE+0x28, tms); cur_state = path[state_count]; state_count++; @@ -733,7 +733,7 @@ int interface_jtag_add_pathmove(int num_states, enum tap_state *path) } waitIdle(); - ZY1000_POKE(0x08000020, cur_state); + ZY1000_POKE(ZY1000_JTAG_BASE+0x20, cur_state); return ERROR_OK; }