src/jtag/drivers/ep93xx: fix GCC 12 warning
[fw/openocd] / src / jtag / drivers / ep93xx.c
index 61dc76ede4bdc86dfb4308f1486c6e5ca7477577..5130bd4228f5535656d87b391d31d1e1d212089f 100644 (file)
@@ -1,22 +1,10 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later */
+
 /***************************************************************************
  *   Copyright (C) 2005 by Dominic Rath                                    *
  *   Dominic.Rath@gmx.de                                                   *
- *                                                                         *
- *   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.             *
  ***************************************************************************/
+
 #ifdef HAVE_CONFIG_H
 #include "config.h"
 #endif
 
 #include <sys/mman.h>
 
-static uint8_t output_value = 0x0;
+static uint8_t output_value;
 static int dev_mem_fd;
-static void *gpio_controller;
+static uint8_t *gpio_controller;
 static volatile uint8_t *gpio_data_register;
 static volatile uint8_t *gpio_data_direction_register;
 
 /* low level command set
  */
-static int ep93xx_read(void);
-static void ep93xx_write(int tck, int tms, int tdi);
-static void ep93xx_reset(int trst, int srst);
+static bb_value_t ep93xx_read(void);
+static int ep93xx_write(int tck, int tms, int tdi);
+static int ep93xx_reset(int trst, int srst);
 
-static int ep93xx_speed(int speed);
-static int ep93xx_register_commands(struct command_context *cmd_ctx);
 static int ep93xx_init(void);
 static int ep93xx_quit(void);
 
 struct timespec ep93xx_zzzz;
 
-struct jtag_interface ep93xx_interface =
-{
-       .name = "ep93xx",
-
+static struct jtag_interface ep93xx_interface = {
+       .supported = DEBUG_CAP_TMS_SEQ,
        .execute_queue = bitbang_execute_queue,
+};
+
+struct adapter_driver ep93xx_adapter_driver = {
+       .name = "ep93xx",
+       .transports = jtag_only,
 
-       .speed = ep93xx_speed,
-       .register_commands = ep93xx_register_commands,
        .init = ep93xx_init,
        .quit = ep93xx_quit,
+       .reset = ep93xx_reset,
+
+       .jtag_ops = &ep93xx_interface,
 };
 
-static struct bitbang_interface ep93xx_bitbang =
-{
+static struct bitbang_interface ep93xx_bitbang = {
        .read = ep93xx_read,
        .write = ep93xx_write,
-       .reset = ep93xx_reset,
        .blink = 0,
 };
 
-static int ep93xx_read(void)
+static bb_value_t ep93xx_read(void)
 {
-       return !!(*gpio_data_register & TDO_BIT);
+       return (*gpio_data_register & TDO_BIT) ? BB_HIGH : BB_LOW;
 }
 
-static void ep93xx_write(int tck, int tms, int tdi)
+static int ep93xx_write(int tck, int tms, int tdi)
 {
        if (tck)
                output_value |= TCK_BIT;
@@ -97,10 +85,12 @@ static void ep93xx_write(int tck, int tms, int tdi)
 
        *gpio_data_register = output_value;
        nanosleep(&ep93xx_zzzz, NULL);
+
+       return ERROR_OK;
 }
 
 /* (1) assert or (0) deassert reset lines */
-static void ep93xx_reset(int trst, int srst)
+static int ep93xx_reset(int trst, int srst)
 {
        if (trst == 0)
                output_value |= TRST_BIT;
@@ -114,35 +104,22 @@ static void ep93xx_reset(int trst, int srst)
 
        *gpio_data_register = output_value;
        nanosleep(&ep93xx_zzzz, NULL);
-}
-
-static int ep93xx_speed(int speed)
-{
-
-       return ERROR_OK;
-}
-
-static int ep93xx_register_commands(struct command_context *cmd_ctx)
-{
 
        return ERROR_OK;
 }
 
 static int set_gonk_mode(void)
 {
-       void *syscon;
-       uint32_t devicecfg;
-
-       syscon = mmap(NULL, 4096, PROT_READ | PROT_WRITE,
+       void *syscon = mmap(NULL, 4096, PROT_READ | PROT_WRITE,
                        MAP_SHARED, dev_mem_fd, 0x80930000);
        if (syscon == MAP_FAILED) {
-               perror("mmap");
+               LOG_ERROR("mmap: %s", strerror(errno));
                return ERROR_JTAG_INIT_FAILED;
        }
 
-       devicecfg = *((volatile int *)(syscon + 0x80));
-       *((volatile int *)(syscon + 0xc0)) = 0xaa;
-       *((volatile int *)(syscon + 0x80)) = devicecfg | 0x08000000;
+       uint32_t devicecfg = *((volatile uint32_t *)((uintptr_t)syscon + 0x80));
+       *((volatile uint32_t *)((uintptr_t)syscon + 0xc0)) = 0xaa;
+       *((volatile uint32_t *)((uintptr_t)syscon + 0x80)) = devicecfg | 0x08000000;
 
        munmap(syscon, 4096);
 
@@ -160,14 +137,14 @@ static int ep93xx_init(void)
 
        dev_mem_fd = open("/dev/mem", O_RDWR | O_SYNC);
        if (dev_mem_fd < 0) {
-               perror("open");
+               LOG_ERROR("open: %s", strerror(errno));
                return ERROR_JTAG_INIT_FAILED;
        }
 
        gpio_controller = mmap(NULL, 4096, PROT_READ | PROT_WRITE,
                                MAP_SHARED, dev_mem_fd, 0x80840000);
        if (gpio_controller == MAP_FAILED) {
-               perror("mmap");
+               LOG_ERROR("mmap: %s", strerror(errno));
                close(dev_mem_fd);
                return ERROR_JTAG_INIT_FAILED;
        }
@@ -202,8 +179,8 @@ static int ep93xx_init(void)
        gpio_data_register = gpio_controller + 0x08;
        gpio_data_direction_register = gpio_controller + 0x18;
 
-       LOG_INFO("gpio_data_register      = %p\n", gpio_data_register);
-       LOG_INFO("gpio_data_direction_reg = %p\n", gpio_data_direction_register);
+       LOG_INFO("gpio_data_register      = %p", gpio_data_register);
+       LOG_INFO("gpio_data_direction_reg = %p", gpio_data_direction_register);
        /*
         * Configure bit 0 (TDO) as an input, and bits 1-5 (TDI, TCK
         * TMS, TRST, SRST) as outputs.  Drive TDI and TCK low, and