This is an automated email from Gerrit.

a ([email protected]) just uploaded a new patch set to Gerrit, which you 
can find at http://openocd.zylin.com/5838

-- gerrit

commit 4a0dd3b1760eb0ff45ceafb5eacd52f8923658cb
Author: m_s <[email protected]>
Date:   Fri Sep 18 23:49:29 2020 +0200

    Xilinx XVC programmer on AXI bus Adding support for
    
    Xilinx XVC programming adapters that are not attached via PCIe but the 
internal memory bus of the device via e.g. AXI. Most likely situation is a 
Xilinx SoC ('Zynq') that contains an ARM processor and an FPGA that is the JTAG 
master for other devices.
    
    Change-Id: I8399587302dc1328fc6ab7ecf556ee803dfc9325
    Signed-off-by: m_s <[email protected]>

diff --git a/a.txt b/a.txt
deleted file mode 100644
index 1621e73..0000000
--- a/a.txt
+++ /dev/null
@@ -1,83 +0,0 @@
-From 46300b568a0494053ec2dc15db16af3b358459db Mon Sep 17 00:00:00 2001
-From: m_s <[email protected]>
-Date: Fri, 18 Sep 2020 20:26:34 +0200
-Subject: [PATCH] topic: Xilinx XVC programmer on AXI bus Adding support for
- Xilinx XVC programming adapters that are not attached via PCIe but the
- internal memory bus of the device via e.g. AXI. Most likely situation is a
- Xilinx SoC ('Zynq') that contains an ARM processor and an FPGA that is the
- JTAG master for other devices.
-
-Change-Id: I83f6b5c30ec74ce98f9b950213859dd5b3284817
-Signed-off-by: m_s <[email protected]>
----
- tools/m_s     | 49 +++++++++++++++++++++++++++++++++++++++++++++++++
- tools/m_s.pub |  1 +
- 2 files changed, 50 insertions(+)
- create mode 100644 tools/m_s
- create mode 100644 tools/m_s.pub
-
-diff --git a/tools/m_s b/tools/m_s
-new file mode 100644
-index 000000000..ad0fc6bb0
---- /dev/null
-+++ b/tools/m_s
-@@ -0,0 +1,49 @@
-+-----BEGIN OPENSSH PRIVATE KEY-----
-+b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAACFwAAAAdzc2gtcn
-+NhAAAAAwEAAQAAAgEAyrf+IffcDUH2hNSzYlGM67HDx4Rt0jdJ1XPgYqlafdP4cIo7YMQJ
-+Puexvp+CwtNK2+X1ROiUVP/9GaKaSWd0A6iUQNUfdRSJiMWtqd2f+m7ewwIazRoAktg0OW
-+uv39QoNnQwAoHqWx8HLwTRkpxvDHCXYLujHV9NViWgA7JvO1Xtj7hDuqK936oxEkxsIEDU
-+ARxjreLPcv/gV/7uNZHTdsprsBWi2FB0fVUY4Krks7HBziir5MgHSqgiqIewigtewBSTvm
-+ZaF05qi/LoCskGK5fa05AOvw8L0lJpPRaUDl1AqIpYm6/GpXXmNdaGnCj1uaxPn1j/xngI
-+89JyTIiQj9bjKjzpx4qe0g4jc09ZyfvYubDwAJN2yxNpt8osfPUReJWnOOWBSTkIULhKe5
-+E0+AwcMImd5YTKfEIZj5BrhW30q1XdUfbwx9PpxNksx659OUThrDW+qlq/dR7cEHxmVKro
-+x0E6Qs4iOqOK9aVb5/CzVeN8hTBp8Dwr5x1nG/zVHuChfIKREQMBrpAjLwe0U7soHO7Zhi
-+SF7WnXlbZabatwO7J+EUNoDK0xkKJFvAaoC46prpaIEGW5xSgxQr17/wMUQurPDmS2NdP1
-+XN+9XLY+gfe7USJTtRNRzf6nawJPBvRsnF+Eiv8nNr6NI83BijsL/TgCASDKT79y5bC/F4
-+sAAAdQTycxZk8nMWYAAAAHc3NoLXJzYQAAAgEAyrf+IffcDUH2hNSzYlGM67HDx4Rt0jdJ
-+1XPgYqlafdP4cIo7YMQJPuexvp+CwtNK2+X1ROiUVP/9GaKaSWd0A6iUQNUfdRSJiMWtqd
-+2f+m7ewwIazRoAktg0OWuv39QoNnQwAoHqWx8HLwTRkpxvDHCXYLujHV9NViWgA7JvO1Xt
-+j7hDuqK936oxEkxsIEDUARxjreLPcv/gV/7uNZHTdsprsBWi2FB0fVUY4Krks7HBziir5M
-+gHSqgiqIewigtewBSTvmZaF05qi/LoCskGK5fa05AOvw8L0lJpPRaUDl1AqIpYm6/GpXXm
-+NdaGnCj1uaxPn1j/xngI89JyTIiQj9bjKjzpx4qe0g4jc09ZyfvYubDwAJN2yxNpt8osfP
-+UReJWnOOWBSTkIULhKe5E0+AwcMImd5YTKfEIZj5BrhW30q1XdUfbwx9PpxNksx659OUTh
-+rDW+qlq/dR7cEHxmVKrox0E6Qs4iOqOK9aVb5/CzVeN8hTBp8Dwr5x1nG/zVHuChfIKREQ
-+MBrpAjLwe0U7soHO7ZhiSF7WnXlbZabatwO7J+EUNoDK0xkKJFvAaoC46prpaIEGW5xSgx
-+Qr17/wMUQurPDmS2NdP1XN+9XLY+gfe7USJTtRNRzf6nawJPBvRsnF+Eiv8nNr6NI83Bij
-+sL/TgCASDKT79y5bC/F4sAAAADAQABAAACAFsBQIAlUk9NVosJJcK0k4vX0OlHxTmDAo1l
-+qM0B9BLazwROuhtVxkTMJNpLp5so2clgMbyOoNCL3ybb/WGIpOdjjbKROr8Hyjpxa+X/DW
-+uSzERFNJzw2GMT1lYUxu63wpm3jToC8p+XjVUJV7/2pE+0V/DgK3jrKL/MwkoGl7LOf4hu
-+k1E87/px3/e0ATJ1h/c7tHACi1i4EBHQ60V3QrRoaPGytNlhPPpq8nEhpuwYl8WiMpDRT5
-+yvYGfCCnneYtneIvlt33HpDSHomU0GM9PsJxuk50nUSl1QC9iVwz+zk2xWNzMlNQtgo0l2
-+FhYSuUVyWohRnvmNN4+l4RQElsh/iM3Z2mPgz1UssOWJ5qIXv9QSvmrVatQ7aDAYL/h2d5
-+EX75qcSnnySm98+7Eo5gar3LO98MJs3JEGaHB/M8MIh53rKUzP/dneQ57kleidn4Hsic0u
-+SQcnqfVq7a39HOwP3+7g56jDOdFmPKjSY4tiY/57JVrihXrMKqLoSJy7dRWzM73vxR4WAA
-+6Qf39paiNuv2CYG4ZBQEnxyz4PFrW57tQodH4uOmrawcdXU18J3hBQpFmdIvOYGJUGdDpR
-+hV2FM8DSDLlVRw8YKr8CLf0EDeZpbmkEG5qWYTSezx0bh3YK7hiHFFPmb4TOxDhvIwWeE+
-+3oMtgZNnZL7dKDW7ThAAABAQCTmAwv+OebgWBCYpf6WIn1DELFHl1u8wZhPZ4tVXrrvDW/
-+YG+KgoZEqHq6RaGt2a3saOTIB9H17X0gyXaZvgzSK2W50MU6OI/j/0mKPFm6FDvb0azVSJ
-+wtLNh5b4PnQpK7VP8dhaaVbjogAezjnAqR3OhM9u3/dduRHqlp3ek+p4VGNbv+SOK8f2Ll
-+VLooxwKc59f3QLDcc7hVPvYL3jrk8BN9SHJaNdvqY2/Vfxn11wnOCHM4HnhA6K3AMBPI/n
-+yxUFFtJ5NiGGptKaz/dYu3eQiDGdkDwNV4NpesWdn8mcIxSFQGJFkpeDHhZW8rwbCGtWg5
-+9KSVQwmA6/9tjWB4AAABAQDkALu0V/Upju6R+OefYtHmy1b+LQJyxjpubX0JwImG15BeWQ
-+KIMbdV4y44WfHKnoE6XKEewXEOSl2t1UCPKfW5nXxJiLQI9slQA9KWDnPsvpZk4ENMtEDl
-+BN6hih9viH/e1KoOXzA9GenxbGJVZt0dCGp6Bt1RpeqV2YkkXeO9psjNZW8Q4JRC0sW3gb
-+YHuA+vCPwpKhfZ2uJXoYuJ/kI2z27RkiogAzBb6MHlUxeCPl4+ytTuzr2IBdD4YZ759iRl
-+m64UOaf/bnMYUgykZcxfQMXwx/VTZTSsk6BmirejKJRDwj0q2TocwMcAjrZRHKaHLxms7E
-+br71f0/ySZims7AAABAQDjnHPsK8IdX4Fei+S4cmw2+HOrYy/LxK08GvDL2sX2b4K/BZY6
-+LtwX/kSj0DhuX2gAheZ+ftxk5dsMgW+TrcSs3Eq4WkpVf5p3kHR7yqL6K9vFr8JyEzswcI
-+6HYviAFuj37tlCtGykn2hEXHMbx/01vIGGZsSB0wUxDQ1Y+L+B5Syyt12c9dirfYm6Ut2+
-+dcfEpG/qKy1Wsn+ft9rwnoBJj4t+q3khbBupRlpbkw5ZQyenhXN/gHIjUfw3vFnZQuotP5
-+aAetTpEPlo5iM6wBliaG8fWbvdphee7cPtBXpLYnkbtRIKl1ROWCxJloqf0/uc4MdHzNWS
-+Sxr+JTZ4HB/xAAAAF21hcnRpbi5zY2hyZW5nZW5Ad2ViLmRlAQID
-+-----END OPENSSH PRIVATE KEY-----
-diff --git a/tools/m_s.pub b/tools/m_s.pub
-new file mode 100644
-index 000000000..4704f78f7
---- /dev/null
-+++ b/tools/m_s.pub
-@@ -0,0 +1 @@
-+ssh-rsa 
AAAAB3NzaC1yc2EAAAADAQABAAACAQDKt/4h99wNQfaE1LNiUYzrscPHhG3SN0nVc+BiqVp90/hwijtgxAk+57G+n4LC00rb5fVE6JRU//0ZoppJZ3QDqJRA1R91FImIxa2p3Z/6bt7DAhrNGgCS2DQ5a6/f1Cg2dDACgepbHwcvBNGSnG8McJdgu6MdX01WJaADsm87Ve2PuEO6or3fqjESTGwgQNQBHGOt4s9y/+BX/u41kdN2ymuwFaLYUHR9VRjgquSzscHOKKvkyAdKqCKoh7CKC17AFJO+ZloXTmqL8ugKyQYrl9rTkA6/DwvSUmk9FpQOXUCoilibr8aldeY11oacKPW5rE+fWP/GeAjz0nJMiJCP1uMqPOnHip7SDiNzT1nJ+9i5sPAAk3bLE2m3yix89RF4lac45YFJOQhQuEp7kTT4DBwwiZ3lhMp8QhmPkGuFbfSrVd1R9vDH0+nE2SzHrn05ROGsNb6qWr91HtwQfGZUqujHQTpCziI6o4r1pVvn8LNV43yFMGnwPCvnHWcb/NUe4KF8gpERAwGukCMvB7RTuygc7tmGJIXtadeVtlptq3A7sn4RQ2gMrTGQokW8BqgLjqmulogQZbnFKDFCvXv/AxRC6s8OZLY10/Vc371ctj6B97tRIlO1E1HN/qdrAk8G9GycX4SK/yc2vo0jzcGKOwv9OAIBIMpPv3LlsL8Xiw==
 [email protected]
--- 
-2.26.0.windows.1
-
diff --git a/src/jtag/drivers/xlnx-pcie-xvc.c b/src/jtag/drivers/xlnx-pcie-xvc.c
index 2423a9f..c978a1b 100644
--- a/src/jtag/drivers/xlnx-pcie-xvc.c
+++ b/src/jtag/drivers/xlnx-pcie-xvc.c
@@ -29,9 +29,11 @@
 
 #define XLNX_XVC_EXT_CAP       0x00
 #define XLNX_XVC_VSEC_HDR      0x04
-#define XLNX_XVC_LEN_REG       0x0C
-#define XLNX_XVC_TMS_REG       0x10
-#define XLNX_XVC_TDx_REG       0x14
+
+#define XLNX_PCI_XVC_LEN_REG   0x0C
+#define XLNX_PCI_XVC_TMS_REG   0x10
+#define XLNX_PCI_XVC_TDx_REG   0x14
+
 
 #define XLNX_XVC_CAP_SIZE      0x20
 #define XLNX_XVC_VSEC_ID       0x8
@@ -40,12 +42,34 @@
 #define MASK_ACK(x) (((x) >> 9) & 0x7)
 #define MASK_PAR(x) ((int)((x) & 0x1))
 
+
+#define MODE_PCI 0x01                  /* XVC device attached via PCIe */
+#define MODE_MMAP 0x02                 /* XVC device available in general 
memory space e.g. as AXI device */
+/* #define MODE_ETH 0x03               /* Remote XVC device available via 
network (XAPP 1251 */
+
+static int MODE = MODE_PCI;
+
+
+
 struct xlnx_pcie_xvc {
        int fd;
        unsigned offset;
        char *device;
 };
 
+#define MAP_SIZE_AXI    0x10000
+
+typedef struct {
+uint32_t length_offset;
+uint32_t tms_offset;
+uint32_t tdi_offset;
+uint32_t tdo_offset;
+uint32_t ctrl_offset;
+} axi_jtag_t;
+
+volatile axi_jtag_t *ptr;
+
+
 static struct xlnx_pcie_xvc xlnx_pcie_xvc_state;
 static struct xlnx_pcie_xvc *xlnx_pcie_xvc = &xlnx_pcie_xvc_state;
 
@@ -95,27 +119,43 @@ static int xlnx_pcie_xvc_transact(size_t num_bits, 
uint32_t tms, uint32_t tdi,
 {
        int err;
 
-       err = xlnx_pcie_xvc_write_reg(XLNX_XVC_LEN_REG, num_bits);
+       if (MODE == MODE_PCI) {
+               err = xlnx_pcie_xvc_write_reg(XLNX_PCI_XVC_LEN_REG, num_bits);
        if (err != ERROR_OK)
                return err;
 
-       err = xlnx_pcie_xvc_write_reg(XLNX_XVC_TMS_REG, tms);
+               err = xlnx_pcie_xvc_write_reg(XLNX_PCI_XVC_TMS_REG, tms);
        if (err != ERROR_OK)
                return err;
 
-       err = xlnx_pcie_xvc_write_reg(XLNX_XVC_TDx_REG, tdi);
+               err = xlnx_pcie_xvc_write_reg(XLNX_PCI_XVC_TDx_REG, tdi);
        if (err != ERROR_OK)
                return err;
 
-       err = xlnx_pcie_xvc_read_reg(XLNX_XVC_TDx_REG, tdo);
+               err = xlnx_pcie_xvc_read_reg(XLNX_PCI_XVC_TDx_REG, tdo);
        if (err != ERROR_OK)
                return err;
 
+       } else if (MODE == MODE_MMAP) {
+               ptr->length_offset = num_bits;
+               ptr->tms_offset = tms;
+               ptr->tdi_offset = tdi;
+               ptr->ctrl_offset = 0x01;
+
+               while (ptr->ctrl_offset) {
+                       /* wait for end of transaction */
+               }
+
+               if (tdo)
+                       *tdo = ptr->tdo_offset;
+
+       }
+
        if (tdo)
-               LOG_DEBUG_IO("Transact num_bits: %zu, tms: %" PRIx32 ", tdi: %" 
PRIx32 ", tdo: %" PRIx32,
+               LOG_DEBUG_IO("Transact num_bits: %zu, tms: %x, tdi: %x, tdo: 
%x",
                             num_bits, tms, tdi, *tdo);
        else
-               LOG_DEBUG_IO("Transact num_bits: %zu, tms: %" PRIx32 ", tdi: %" 
PRIx32 ", tdo: <null>",
+               LOG_DEBUG_IO("Transact num_bits: %zu, tms: %x, tdi: %x, tdo: 
<null>",
                             num_bits, tms, tdi);
        return ERROR_OK;
 }
@@ -381,66 +421,93 @@ static int xlnx_pcie_xvc_execute_queue(void)
 
 static int xlnx_pcie_xvc_init(void)
 {
-       char filename[PATH_MAX];
-       uint32_t cap, vh;
-       int err;
-
-       snprintf(filename, PATH_MAX, "/sys/bus/pci/devices/%s/config",
-                xlnx_pcie_xvc->device);
-       xlnx_pcie_xvc->fd = open(filename, O_RDWR | O_SYNC);
-       if (xlnx_pcie_xvc->fd < 0) {
-               LOG_ERROR("Failed to open device: %s", filename);
-               return ERROR_JTAG_INIT_FAILED;
-       }
+       if (MODE == MODE_PCI) {
+               char filename[PATH_MAX];
+               int err;
+
+               snprintf(filename, PATH_MAX, "/sys/bus/pci/devices/%s/config",
+                        xlnx_pcie_xvc->device);
+               xlnx_pcie_xvc->fd = open(filename, O_RDWR | O_SYNC);
+               if (xlnx_pcie_xvc->fd < 0) {
+                       LOG_ERROR("Failed to open device: %s", filename);
+                       return ERROR_JTAG_INIT_FAILED;
+               }
 
-       LOG_INFO("Scanning PCIe device %s's for Xilinx XVC/PCIe ...",
-                xlnx_pcie_xvc->device);
-       /* Parse the PCIe extended capability list and try to find
-        * vendor specific header */
-       xlnx_pcie_xvc->offset = PCIE_EXT_CAP_LST;
-       while (xlnx_pcie_xvc->offset <= PCI_CFG_SPACE_EXP_SIZE - sizeof(cap) &&
-              xlnx_pcie_xvc->offset >= PCIE_EXT_CAP_LST) {
-               err = xlnx_pcie_xvc_read_reg(XLNX_XVC_EXT_CAP, &cap);
-               if (err != ERROR_OK)
-                       return err;
-               LOG_DEBUG("Checking capability at 0x%x; id=0x%04" PRIx32 " 
version=0x%" PRIx32 " next=0x%" PRIx32,
-                        xlnx_pcie_xvc->offset,
-                        PCI_EXT_CAP_ID(cap),
-                        PCI_EXT_CAP_VER(cap),
-                        PCI_EXT_CAP_NEXT(cap));
-               if (PCI_EXT_CAP_ID(cap) == PCI_EXT_CAP_ID_VNDR) {
-                       err = xlnx_pcie_xvc_read_reg(XLNX_XVC_VSEC_HDR, &vh);
+               LOG_INFO("Scanning PCIe device %s's for Xilinx XVC/PCIe ...",
+                        xlnx_pcie_xvc->device);
+               /* Parse the PCIe extended capability list and try to find
+                * vendor specific header */
+               xlnx_pcie_xvc->offset = PCIE_EXT_CAP_LST;
+               while (xlnx_pcie_xvc->offset <= PCI_CFG_SPACE_EXP_SIZE - 
sizeof(cap) &&
+                          xlnx_pcie_xvc->offset >= PCIE_EXT_CAP_LST) {
+                       err = xlnx_pcie_xvc_read_reg(XLNX_XVC_EXT_CAP, &cap);
                        if (err != ERROR_OK)
                                return err;
-                       LOG_DEBUG("Checking possible match at 0x%x; id: 0x%" 
PRIx32 "; rev: 0x%" PRIx32 "; length: 0x%" PRIx32,
+                       LOG_DEBUG("Checking capability at 0x%x; id=0x%04" 
PRIx32 " version=0x%" PRIx32 " next=0x%" PRIx32,
                                 xlnx_pcie_xvc->offset,
-                                PCI_VNDR_HEADER_ID(vh),
-                                PCI_VNDR_HEADER_REV(vh),
-                                PCI_VNDR_HEADER_LEN(vh));
-                       if ((PCI_VNDR_HEADER_ID(vh) == XLNX_XVC_VSEC_ID) &&
-                           (PCI_VNDR_HEADER_LEN(vh) == XLNX_XVC_CAP_SIZE))
-                               break;
+                                PCI_EXT_CAP_ID(cap),
+                                PCI_EXT_CAP_VER(cap),
+                                PCI_EXT_CAP_NEXT(cap));
+                       if (PCI_EXT_CAP_ID(cap) == PCI_EXT_CAP_ID_VNDR) {
+                               err = xlnx_pcie_xvc_read_reg(XLNX_XVC_VSEC_HDR, 
&vh);
+                               if (err != ERROR_OK)
+                                       return err;
+                               LOG_DEBUG("Checking possible match at 0x%x; id: 
0x%" PRIx32 "; rev: 0x%" PRIx32 "; length: 0x%" PRIx32,
+                                        xlnx_pcie_xvc->offset,
+                                        PCI_VNDR_HEADER_ID(vh),
+                                        PCI_VNDR_HEADER_REV(vh),
+                                        PCI_VNDR_HEADER_LEN(vh));
+                               if ((PCI_VNDR_HEADER_ID(vh) == 
XLNX_XVC_VSEC_ID) &&
+                                       (PCI_VNDR_HEADER_LEN(vh) == 
XLNX_XVC_CAP_SIZE))
+                                       break;
+                       }
+                       xlnx_pcie_xvc->offset = PCI_EXT_CAP_NEXT(cap);
+               }
+               if ((xlnx_pcie_xvc->offset > PCI_CFG_SPACE_EXP_SIZE - 
XLNX_XVC_CAP_SIZE) ||
+                        xlnx_pcie_xvc->offset < PCIE_EXT_CAP_LST) {
+                       close(xlnx_pcie_xvc->fd);
+                       return ERROR_JTAG_INIT_FAILED;
                }
-               xlnx_pcie_xvc->offset = PCI_EXT_CAP_NEXT(cap);
-       }
-       if ((xlnx_pcie_xvc->offset > PCI_CFG_SPACE_EXP_SIZE - 
XLNX_XVC_CAP_SIZE) ||
-            xlnx_pcie_xvc->offset < PCIE_EXT_CAP_LST) {
-               close(xlnx_pcie_xvc->fd);
-               return ERROR_JTAG_INIT_FAILED;
-       }
 
-       LOG_INFO("Found Xilinx XVC/PCIe capability at offset: 0x%x", 
xlnx_pcie_xvc->offset);
+               LOG_INFO("Found Xilinx XVC/PCIe capability at offset: 0x%x", 
xlnx_pcie_xvc->offset);
 
-       return ERROR_OK;
+               return ERROR_OK;
+
+       } else if (MODE == MODE_MMAP) {
+
+               int fd_uio;
+               fd_uio = open(xlnx_pcie_xvc->device, O_RDWR);
+               if (fd_uio < 1) {
+                       LOG_ERROR("Failed to open device: %s\n", 
xlnx_pcie_xvc->device);
+                       return ERROR_JTAG_INIT_FAILED;
+               }
+
+               ptr = (volatile axi_jtag_t *) mmap(NULL, MAP_SIZE, PROT_READ | 
PROT_WRITE, MAP_SHARED, fd_uio, 0);
+               if (ptr == MAP_FAILED) {
+                       LOG_ERROR("MMAP Failed\n");
+                       return ERROR_JTAG_INIT_FAILED;
+               }
+               close(fd_uio);
+               LOG_INFO("Found Xilinx XVC/PCIe capability at offset: 0x%x", 
xlnx_pcie_xvc->offset);
+
+               return ERROR_OK;
+
+       } else {                        /* (TODO: add support for IOCTL variant 
and ETH MODE) */
+               return ERROR_COMMAND_SYNTAX_ERROR;
+       }
 }
 
 static int xlnx_pcie_xvc_quit(void)
 {
-       int err;
+       if (MODE == MODE_PCI) {
+               int err;
+               err = close(xlnx_pcie_xvc->fd);
+               if (err)
+                       return err;
 
-       err = close(xlnx_pcie_xvc->fd);
-       if (err)
-               return err;
+       } else if (MODE == MODE_MMAP) {
+               munmap((void *) ptr, MAP_SIZE_AXI);
+       }
 
        return ERROR_OK;
 }
@@ -454,20 +521,44 @@ COMMAND_HANDLER(xlnx_pcie_xvc_handle_config_command)
         * limit the memory we're leaking by freeing the old one first
         * before allocating a new one ...
         */
-       free(xlnx_pcie_xvc->device);
+
+       if (xlnx_pcie_xvc->device)
+               free(xlnx_pcie_xvc->device);
 
        xlnx_pcie_xvc->device = strdup(CMD_ARGV[0]);
        return ERROR_OK;
 }
 
+COMMAND_HANDLER(xlnx_pcie_xvc_handle_ismmapdevice_command)
+{
+       int flag = 0;
+       if (CMD_ARGC != 1)
+               return ERROR_COMMAND_SYNTAX_ERROR;
+
+       COMMAND_PARSE_NUMBER(int, CMD_ARGV[0], flag);
+       if (flag != 0) {
+               MODE = MODE_MMAP;
+               command_print(CMD, "Memory mapped XVC device, path = %s", 
xlnx_pcie_xvc->device);
+       }
+       return ERROR_OK;
+}
+
 static const struct command_registration xlnx_pcie_xvc_command_handlers[] = {
        {
                .name = "xlnx_pcie_xvc_config",
                .handler = xlnx_pcie_xvc_handle_config_command,
                .mode = COMMAND_CONFIG,
-               .help = "Configure XVC/PCIe JTAG adapter",
+               .help = "Configure XVC JTAG adapter (supply full device path in 
case of memory mapped device)",
                .usage = "device",
        },
+       {
+               .name = "xlnx_pcie_xvc_is_mmap_device",
+               .handler = &xlnx_pcie_xvc_handle_ismmapdevice_command,
+               .mode = COMMAND_CONFIG,
+               .help = "Set to 1 when the XVC device is not attached via PCIe, 
\
+                               but available via mmap (e.g. an UIO device 
attached to the AXI bus)",
+               .usage = "devoffset_in_mmapped_space",
+       },
        COMMAND_REGISTRATION_DONE
 };
 
diff --git a/tools/m_s b/tools/m_s
deleted file mode 100644
index ad0fc6b..0000000
--- a/tools/m_s
+++ /dev/null
@@ -1,49 +0,0 @@
------BEGIN OPENSSH PRIVATE KEY-----
-b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAACFwAAAAdzc2gtcn
-NhAAAAAwEAAQAAAgEAyrf+IffcDUH2hNSzYlGM67HDx4Rt0jdJ1XPgYqlafdP4cIo7YMQJ
-Puexvp+CwtNK2+X1ROiUVP/9GaKaSWd0A6iUQNUfdRSJiMWtqd2f+m7ewwIazRoAktg0OW
-uv39QoNnQwAoHqWx8HLwTRkpxvDHCXYLujHV9NViWgA7JvO1Xtj7hDuqK936oxEkxsIEDU
-ARxjreLPcv/gV/7uNZHTdsprsBWi2FB0fVUY4Krks7HBziir5MgHSqgiqIewigtewBSTvm
-ZaF05qi/LoCskGK5fa05AOvw8L0lJpPRaUDl1AqIpYm6/GpXXmNdaGnCj1uaxPn1j/xngI
-89JyTIiQj9bjKjzpx4qe0g4jc09ZyfvYubDwAJN2yxNpt8osfPUReJWnOOWBSTkIULhKe5
-E0+AwcMImd5YTKfEIZj5BrhW30q1XdUfbwx9PpxNksx659OUThrDW+qlq/dR7cEHxmVKro
-x0E6Qs4iOqOK9aVb5/CzVeN8hTBp8Dwr5x1nG/zVHuChfIKREQMBrpAjLwe0U7soHO7Zhi
-SF7WnXlbZabatwO7J+EUNoDK0xkKJFvAaoC46prpaIEGW5xSgxQr17/wMUQurPDmS2NdP1
-XN+9XLY+gfe7USJTtRNRzf6nawJPBvRsnF+Eiv8nNr6NI83BijsL/TgCASDKT79y5bC/F4
-sAAAdQTycxZk8nMWYAAAAHc3NoLXJzYQAAAgEAyrf+IffcDUH2hNSzYlGM67HDx4Rt0jdJ
-1XPgYqlafdP4cIo7YMQJPuexvp+CwtNK2+X1ROiUVP/9GaKaSWd0A6iUQNUfdRSJiMWtqd
-2f+m7ewwIazRoAktg0OWuv39QoNnQwAoHqWx8HLwTRkpxvDHCXYLujHV9NViWgA7JvO1Xt
-j7hDuqK936oxEkxsIEDUARxjreLPcv/gV/7uNZHTdsprsBWi2FB0fVUY4Krks7HBziir5M
-gHSqgiqIewigtewBSTvmZaF05qi/LoCskGK5fa05AOvw8L0lJpPRaUDl1AqIpYm6/GpXXm
-NdaGnCj1uaxPn1j/xngI89JyTIiQj9bjKjzpx4qe0g4jc09ZyfvYubDwAJN2yxNpt8osfP
-UReJWnOOWBSTkIULhKe5E0+AwcMImd5YTKfEIZj5BrhW30q1XdUfbwx9PpxNksx659OUTh
-rDW+qlq/dR7cEHxmVKrox0E6Qs4iOqOK9aVb5/CzVeN8hTBp8Dwr5x1nG/zVHuChfIKREQ
-MBrpAjLwe0U7soHO7ZhiSF7WnXlbZabatwO7J+EUNoDK0xkKJFvAaoC46prpaIEGW5xSgx
-Qr17/wMUQurPDmS2NdP1XN+9XLY+gfe7USJTtRNRzf6nawJPBvRsnF+Eiv8nNr6NI83Bij
-sL/TgCASDKT79y5bC/F4sAAAADAQABAAACAFsBQIAlUk9NVosJJcK0k4vX0OlHxTmDAo1l
-qM0B9BLazwROuhtVxkTMJNpLp5so2clgMbyOoNCL3ybb/WGIpOdjjbKROr8Hyjpxa+X/DW
-uSzERFNJzw2GMT1lYUxu63wpm3jToC8p+XjVUJV7/2pE+0V/DgK3jrKL/MwkoGl7LOf4hu
-k1E87/px3/e0ATJ1h/c7tHACi1i4EBHQ60V3QrRoaPGytNlhPPpq8nEhpuwYl8WiMpDRT5
-yvYGfCCnneYtneIvlt33HpDSHomU0GM9PsJxuk50nUSl1QC9iVwz+zk2xWNzMlNQtgo0l2
-FhYSuUVyWohRnvmNN4+l4RQElsh/iM3Z2mPgz1UssOWJ5qIXv9QSvmrVatQ7aDAYL/h2d5
-EX75qcSnnySm98+7Eo5gar3LO98MJs3JEGaHB/M8MIh53rKUzP/dneQ57kleidn4Hsic0u
-SQcnqfVq7a39HOwP3+7g56jDOdFmPKjSY4tiY/57JVrihXrMKqLoSJy7dRWzM73vxR4WAA
-6Qf39paiNuv2CYG4ZBQEnxyz4PFrW57tQodH4uOmrawcdXU18J3hBQpFmdIvOYGJUGdDpR
-hV2FM8DSDLlVRw8YKr8CLf0EDeZpbmkEG5qWYTSezx0bh3YK7hiHFFPmb4TOxDhvIwWeE+
-3oMtgZNnZL7dKDW7ThAAABAQCTmAwv+OebgWBCYpf6WIn1DELFHl1u8wZhPZ4tVXrrvDW/
-YG+KgoZEqHq6RaGt2a3saOTIB9H17X0gyXaZvgzSK2W50MU6OI/j/0mKPFm6FDvb0azVSJ
-wtLNh5b4PnQpK7VP8dhaaVbjogAezjnAqR3OhM9u3/dduRHqlp3ek+p4VGNbv+SOK8f2Ll
-VLooxwKc59f3QLDcc7hVPvYL3jrk8BN9SHJaNdvqY2/Vfxn11wnOCHM4HnhA6K3AMBPI/n
-yxUFFtJ5NiGGptKaz/dYu3eQiDGdkDwNV4NpesWdn8mcIxSFQGJFkpeDHhZW8rwbCGtWg5
-9KSVQwmA6/9tjWB4AAABAQDkALu0V/Upju6R+OefYtHmy1b+LQJyxjpubX0JwImG15BeWQ
-KIMbdV4y44WfHKnoE6XKEewXEOSl2t1UCPKfW5nXxJiLQI9slQA9KWDnPsvpZk4ENMtEDl
-BN6hih9viH/e1KoOXzA9GenxbGJVZt0dCGp6Bt1RpeqV2YkkXeO9psjNZW8Q4JRC0sW3gb
-YHuA+vCPwpKhfZ2uJXoYuJ/kI2z27RkiogAzBb6MHlUxeCPl4+ytTuzr2IBdD4YZ759iRl
-m64UOaf/bnMYUgykZcxfQMXwx/VTZTSsk6BmirejKJRDwj0q2TocwMcAjrZRHKaHLxms7E
-br71f0/ySZims7AAABAQDjnHPsK8IdX4Fei+S4cmw2+HOrYy/LxK08GvDL2sX2b4K/BZY6
-LtwX/kSj0DhuX2gAheZ+ftxk5dsMgW+TrcSs3Eq4WkpVf5p3kHR7yqL6K9vFr8JyEzswcI
-6HYviAFuj37tlCtGykn2hEXHMbx/01vIGGZsSB0wUxDQ1Y+L+B5Syyt12c9dirfYm6Ut2+
-dcfEpG/qKy1Wsn+ft9rwnoBJj4t+q3khbBupRlpbkw5ZQyenhXN/gHIjUfw3vFnZQuotP5
-aAetTpEPlo5iM6wBliaG8fWbvdphee7cPtBXpLYnkbtRIKl1ROWCxJloqf0/uc4MdHzNWS
-Sxr+JTZ4HB/xAAAAF21hcnRpbi5zY2hyZW5nZW5Ad2ViLmRlAQID
------END OPENSSH PRIVATE KEY-----
diff --git a/tools/m_s.pub b/tools/m_s.pub
deleted file mode 100644
index 4704f78..0000000
--- a/tools/m_s.pub
+++ /dev/null
@@ -1 +0,0 @@
-ssh-rsa 
AAAAB3NzaC1yc2EAAAADAQABAAACAQDKt/4h99wNQfaE1LNiUYzrscPHhG3SN0nVc+BiqVp90/hwijtgxAk+57G+n4LC00rb5fVE6JRU//0ZoppJZ3QDqJRA1R91FImIxa2p3Z/6bt7DAhrNGgCS2DQ5a6/f1Cg2dDACgepbHwcvBNGSnG8McJdgu6MdX01WJaADsm87Ve2PuEO6or3fqjESTGwgQNQBHGOt4s9y/+BX/u41kdN2ymuwFaLYUHR9VRjgquSzscHOKKvkyAdKqCKoh7CKC17AFJO+ZloXTmqL8ugKyQYrl9rTkA6/DwvSUmk9FpQOXUCoilibr8aldeY11oacKPW5rE+fWP/GeAjz0nJMiJCP1uMqPOnHip7SDiNzT1nJ+9i5sPAAk3bLE2m3yix89RF4lac45YFJOQhQuEp7kTT4DBwwiZ3lhMp8QhmPkGuFbfSrVd1R9vDH0+nE2SzHrn05ROGsNb6qWr91HtwQfGZUqujHQTpCziI6o4r1pVvn8LNV43yFMGnwPCvnHWcb/NUe4KF8gpERAwGukCMvB7RTuygc7tmGJIXtadeVtlptq3A7sn4RQ2gMrTGQokW8BqgLjqmulogQZbnFKDFCvXv/AxRC6s8OZLY10/Vc371ctj6B97tRIlO1E1HN/qdrAk8G9GycX4SK/yc2vo0jzcGKOwv9OAIBIMpPv3LlsL8Xiw==
 [email protected]
diff --git a/tools/scripts/a.txt b/tools/scripts/a.txt
deleted file mode 100644
index e69de29..0000000

-- 


_______________________________________________
OpenOCD-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to