ARMv7-M: make DAP commands verify target is an ARMv7-M
[openocd.git] / src / ecosboard.c
index 455c93c05c72acbd4863621c777ed4580caac202..2e73585d0bedfb7f591118961ef80fd5df767182 100644 (file)
@@ -1,5 +1,5 @@
 /***************************************************************************
- *   Copyright (C) 2007-2008 by Øyvind Harboe                              *
+ *   Copyright (C) 2007-2009 by Øyvind Harboe                              *
  *                                                                         *
  *   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  *
 #include "config.h"
 #endif
 
-#include "log.h"
-#include "types.h"
-#include "jtag.h"
-#include "configuration.h"
-#include "xsvf.h"
-#include "svf.h"
-#include "target.h"
-#include "flash.h"
-#include "nand.h"
-#include "pld.h"
-
-#include "command.h"
-#include "server.h"
-#include "telnet_server.h"
-#include "gdb_server.h"
-
-#include <time_support.h>
+#include <helper/types.h>
+#include <jtag/jtag.h>
+#include <helper/ioutil.h>
+#include <helper/configuration.h>
+
+#include <server/server.h>
+#include <server/telnet_server.h>
+#include <server/gdb_server.h>
+#include <openocd.h>
+
+#include <helper/time_support.h>
+
 #include <sys/time.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <cyg/athttpd/cgi.h>
 #include <cyg/athttpd/forms.h>
 #include <cyg/discover/discover.h>
-#include <cyg/hal/hal_diag.h>
-#include <cyg/kernel/kapi.h>
-#include <cyg/io/serialio.h>
 #include <cyg/io/io.h>
+#include <cyg/io/serialio.h>
 #include <netinet/tcp.h>
+#include <cyg/hal/hal_diag.h>
+
 #include "rom.h"
-#include <sys/ioctl.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <net/if.h>
-#include <arpa/inet.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netdb.h>
-#include <netinet/in.h>
-#include <unistd.h>
-#include <arpa/inet.h>
-#include <stdio.h>
-#include <ifaddrs.h>
-#include <string.h>
 
-#include <unistd.h>
-#include <stdio.h>
+#ifdef CYGPKG_HAL_NIOS2
+#include <cyg/hal/io.h>
+#define ZY1000_SER_DEV "/dev/uart_0"
+#else
+#define ZY1000_SER_DEV "/dev/ser0"
+
+#endif
 
 
 #define MAX_IFS 64
@@ -160,7 +146,14 @@ static void zylinjtag_reboot(cyg_addrword_t data)
        diag_printf("Unmounting /config..\n");
        umount("/config");
        diag_printf("Rebooting..\n");
+#ifdef CYGPKG_HAL_NIOS2
+       /* This will reboot & reconfigure the FPGA from the bootloader
+        * and on.
+        */
+       IOWR(REMOTE_UPDATE_BASE, 0x20, 0x1);
+#else
        HAL_PLATFORM_RESET();
+#endif
 }
 static cyg_thread zylinjtag_thread_object;
 static cyg_handle_t zylinjtag_thread_handle;
@@ -229,7 +222,7 @@ void reboot_port(void)
        cyg_thread_resume(zylinjtag_reboot_port_thread_handle);
 }
 
-int configuration_output_handler(struct command_context_s *context,
+int configuration_output_handler(struct command_context *context,
                const char* line)
 {
        diag_printf("%s", line);
@@ -237,7 +230,7 @@ int configuration_output_handler(struct command_context_s *context,
        return ERROR_OK;
 }
 
-int zy1000_configuration_output_handler_log(struct command_context_s *context,
+int zy1000_configuration_output_handler_log(struct command_context *context,
                const char* line)
 {
        LOG_USER_N("%s", line);
@@ -246,11 +239,21 @@ int zy1000_configuration_output_handler_log(struct command_context_s *context,
 }
 
 #ifdef CYGPKG_PROFILE_GPROF
+//extern int64_t totaltime;
 
-int eCosBoard_handle_eCosBoard_profile_command(struct command_context_s *cmd_ctx, char *cmd, char **args, int argc)
+static int zylinjtag_Jim_Command_profile(Jim_Interp *interp, int argc,
+               Jim_Obj * const *argv)
 {
-       command_print(cmd_ctx, "Profiling started");
-       start_profile();
+       if ((argc == 2) && (strcmp(Jim_GetString(argv[1], NULL), "stats")==0))
+       {
+//             profile_off();
+               //LOG_USER("Stats %dms sleeping in select()", (int)totaltime);
+       } else
+       {
+               LOG_USER("Profiling started");
+               start_profile();
+               //totaltime = 0;
+       }
        return ERROR_OK;
 }
 
@@ -258,7 +261,7 @@ int eCosBoard_handle_eCosBoard_profile_command(struct command_context_s *cmd_ctx
 
 externC void phi_init_all_network_interfaces(void);
 
-command_context_t *cmd_ctx;
+struct command_context *cmd_ctx;
 
 static bool webRunning = false;
 
@@ -500,8 +503,6 @@ static void zylinjtag_startNetwork(void)
 
        cyg_httpd_init_tcl_interpreter();
 
-       interp = httpstate.jim_interp;
-
        Jim_CreateCommand(httpstate.jim_interp, "log", zylinjtag_Jim_Command_log,
                        NULL, NULL);
        Jim_CreateCommand(httpstate.jim_interp, "zy1000_reboot",
@@ -687,7 +688,7 @@ static void zylinjtag_uart(cyg_addrword_t data)
                int oldopts = fcntl(session, F_GETFL, 0);
                fcntl(session, F_SETFL, oldopts | O_NONBLOCK); //
 
-               int serHandle = open("/dev/ser0", O_RDWR | O_NONBLOCK);
+               int serHandle = open(ZY1000_SER_DEV, O_RDWR | O_NONBLOCK);
                if (serHandle < 0)
                {
                        close(session);
@@ -840,21 +841,25 @@ void startUart(void)
        cyg_thread_resume(zylinjtag_uart_thread_handle);
 }
 
-int handle_uart_command(struct command_context_s *cmd_ctx, char *cmd,
-               char **args, int argc)
+static int zylinjtag_Jim_Command_uart(Jim_Interp *interp, int argc,
+               Jim_Obj * const *argv)
 {
        static int current_baud = 38400;
-       if (argc == 0)
+       if (argc == 1)
        {
                command_print(cmd_ctx, "%d", current_baud);
-               return ERROR_OK;
+               return JIM_OK;
        }
-       else if (argc != 1)
+       else if (argc != 2)
        {
-               return ERROR_INVALID_ARGUMENTS;
+               return JIM_ERR;
        }
 
-       current_baud = atol(args[0]);
+       long new_baudrate;
+       if (Jim_GetLong(interp, argv[1], &new_baudrate) != JIM_OK)
+               return JIM_ERR;
+
+       current_baud = new_baudrate;
 
        int baud;
        switch (current_baud)
@@ -889,11 +894,11 @@ int handle_uart_command(struct command_context_s *cmd_ctx, char *cmd,
        int err;
        cyg_io_handle_t serial_handle;
 
-       err = cyg_io_lookup("/dev/ser0", &serial_handle);
+       err = cyg_io_lookup(ZY1000_SER_DEV, &serial_handle);
        if (err != ENOERR)
        {
-               LOG_ERROR("/dev/ser0 not found\n");
-               return ERROR_FAIL;
+               LOG_ERROR("Could not open serial port\n");
+               return JIM_ERR;
        }
 
        err = cyg_io_get_config(serial_handle,
@@ -902,8 +907,8 @@ int handle_uart_command(struct command_context_s *cmd_ctx, char *cmd,
                        &len);
        if (err != ENOERR)
        {
-               command_print(cmd_ctx, "Failed to get serial port settings %d", err);
-               return ERROR_OK;
+               LOG_ERROR("Failed to get serial port settings %d", err);
+               return JIM_ERR;
        }
        buf.baud = baud;
 
@@ -911,11 +916,11 @@ int handle_uart_command(struct command_context_s *cmd_ctx, char *cmd,
                        &len);
        if (err != ENOERR)
        {
-               command_print(cmd_ctx, "Failed to set serial port settings %d", err);
-               return ERROR_OK;
+               LOG_ERROR("Failed to set serial port settings %d", err);
+               return JIM_ERR;
        }
 
-       return ERROR_OK;
+       return JIM_OK;
 }
 
 bool logAllToSerial = false;
@@ -924,8 +929,6 @@ bool logAllToSerial = false;
 int boolParam(char *var);
 
 
-command_context_t *setup_command_handler(void);
-
 static const char *zylin_config_dir="/config/settings";
 
 static int add_default_dirs(void)
@@ -936,8 +939,6 @@ static int add_default_dirs(void)
        return ERROR_OK;
 }
 
-int ioutil_init(struct command_context_s *cmd_ctx);
-
 int main(int argc, char *argv[])
 {
        /* ramblockdevice will be the same address every time. The deflate app uses a buffer 16mBytes out, so we
@@ -955,7 +956,11 @@ int main(int argc, char *argv[])
 
        diag_init_putc(_zylinjtag_diag_write_char);
        // We want this in the log.
-       diag_printf("Zylin ZY1000.\n");
+#ifdef CYGPKG_HAL_NIOS2
+       diag_printf("Zylin ZY1000 PCB revc.\n");
+#else
+       diag_printf("Zylin ZY1000 PCB revb.\n");
+#endif
 
        err = mount("", "/ram", "ramfs");
        if (err < 0)
@@ -994,6 +999,20 @@ int main(int argc, char *argv[])
 
        copydir("/rom", "/ram/cgi");
 
+#ifdef CYGPKG_HAL_NIOS2
+       cyg_flashaddr_t err_address;
+#define UNCACHED_EXT_FLASH_BASE (0x80000000 + EXT_FLASH_BASE)
+       /* The revc flash is locked upon reset, unlock it */
+#ifdef CYGHWR_IO_FLASH_BLOCK_LOCKING
+       if ((err = flash_unlock((void *) UNCACHED_EXT_FLASH_BASE, EXT_FLASH_SPAN,
+                       (void **) &err_address)) != 0)
+       {
+               diag_printf("Error: could not unlock flash\n");
+       }
+#endif
+#endif
+
+
        err = mount("/dev/flash1", "/config", "jffs2");
        if (err < 0)
        {
@@ -1068,34 +1087,24 @@ int main(int argc, char *argv[])
        add_default_dirs();
 
        /* initialize commandline interface */
-       command_context_t * cmd_ctx;
-       cmd_ctx = setup_command_handler();
+       struct command_context * cmd_ctx;
+       struct command_context *setup_command_handler(Jim_Interp *interp);
+       cmd_ctx = setup_command_handler(httpstate.jim_interp);
        command_set_output_handler(cmd_ctx, configuration_output_handler, NULL);
        command_context_mode(cmd_ctx, COMMAND_CONFIG);
 
-#if BUILD_IOUTIL
        if (ioutil_init(cmd_ctx) != ERROR_OK)
-       {
                return EXIT_FAILURE;
-       }
-#endif
-
 
 #ifdef CYGPKG_PROFILE_GPROF
-       register_command(cmd_ctx, NULL, "ecosboard_profile", eCosBoard_handle_eCosBoard_profile_command,
-                       COMMAND_ANY, NULL);
+       Jim_CreateCommand(httpstate.jim_interp, "zy1000_profile", zylinjtag_Jim_Command_profile,
+                       NULL, NULL);
 #endif
 
-       register_command(cmd_ctx, NULL, "uart", handle_uart_command, COMMAND_ANY,
-                       "uart <baud>  - forward uart on port 5555");
+       Jim_CreateCommand(httpstate.jim_interp, "zy1000_uart", zylinjtag_Jim_Command_uart, NULL, NULL);
 
-       int errVal;
-       errVal = log_init(cmd_ctx);
-       if (errVal != ERROR_OK)
-       {
-               diag_printf("log_init() failed %d\n", errVal);
-               exit(-1);
-       }
+
+       log_init();
 
        set_log_output(cmd_ctx, log);
 
@@ -1112,6 +1121,11 @@ int main(int argc, char *argv[])
 
        command_run_linef(cmd_ctx, "script /rom/openocd.cfg");
 
+       int ret;
+       ret = server_init(cmd_ctx);
+       if (ERROR_OK != ret)
+               return EXIT_FAILURE;
+
        /* we MUST always run the init command as it will launch telnet sessions */
        command_run_line(cmd_ctx, "init");
 

Linking to existing account procedure

If you already have an account and want to add another login method you MUST first sign in with your existing account and then change URL to read https://review.openocd.org/login/?link to get to this page again but this time it'll work for linking. Thank you.

SSH host keys fingerprints

1024 SHA256:YKx8b7u5ZWdcbp7/4AeXNaqElP49m6QrwfXaqQGJAOk gerrit-code-review@openocd.zylin.com (DSA)
384 SHA256:jHIbSQa4REvwCFG4cq5LBlBLxmxSqelQPem/EXIrxjk gerrit-code-review@openocd.org (ECDSA)
521 SHA256:UAOPYkU9Fjtcao0Ul/Rrlnj/OsQvt+pgdYSZ4jOYdgs gerrit-code-review@openocd.org (ECDSA)
256 SHA256:A13M5QlnozFOvTllybRZH6vm7iSt0XLxbA48yfc2yfY gerrit-code-review@openocd.org (ECDSA)
256 SHA256:spYMBqEYoAOtK7yZBrcwE8ZpYt6b68Cfh9yEVetvbXg gerrit-code-review@openocd.org (ED25519)
+--[ED25519 256]--+
|=..              |
|+o..   .         |
|*.o   . .        |
|+B . . .         |
|Bo. = o S        |
|Oo.+ + =         |
|oB=.* = . o      |
| =+=.+   + E     |
|. .=o   . o      |
+----[SHA256]-----+
2048 SHA256:0Onrb7/PHjpo6iVZ7xQX2riKN83FJ3KGU0TvI0TaFG4 gerrit-code-review@openocd.zylin.com (RSA)