OpenCores
URL https://opencores.org/ocsvn/or1k/or1k/trunk

Subversion Repositories or1k

[/] [or1k/] [trunk/] [gdb-5.0/] [gdb/] [jtag.c] - Diff between revs 593 and 603

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 593 Rev 603
Line 1003... Line 1003...
{
{
  char *ptype;
  char *ptype;
  char *port_name;
  char *port_name;
  char **argv;
  char **argv;
 
 
  int tmp, i;
 
  unsigned int npc, ppc, r1, insn, result;
 
 
 
#ifdef DEBUG_JTAG
#ifdef DEBUG_JTAG
  printf_unfiltered ("INIT\n");
  printf_unfiltered ("INIT\n");
  fflush(stdout);
  fflush(stdout);
#endif
#endif
  if (args == 0) /* CZ */
  if (args == 0) /* CZ */
Line 1089... Line 1086...
  if(connection.location == JTAG_LOCAL)
  if(connection.location == JTAG_LOCAL)
    jp1_reset_JTAG ();
    jp1_reset_JTAG ();
  jtag_set_chain (SC_RISC_DEBUG);
  jtag_set_chain (SC_RISC_DEBUG);
 
 
  free (port_name);
  free (port_name);
 
 
#if 1
 
 
 
#define RAM_BASE 0x40000000
 
  /* Stall risc */
 
  jtag_set_chain (SC_REGISTER);
 
  jtag_write_reg (4, 0x00000001);
 
 
 
  jtag_set_chain (SC_WISHBONE);
 
  jtag_write_reg (RAM_BASE + 0x00, 0x9c200000);                                /* l.addi  r1,r0,0x0       */
 
  jtag_write_reg (RAM_BASE + 0x04, 0x18400000 + (RAM_BASE >> 16));             /* l.movhi r2,0x4000       */
 
  jtag_write_reg (RAM_BASE + 0x08, 0xa8420000 + ((RAM_BASE + 0x30) & 0xffff)); /* l.ori   r2,r2,0x0000    */
 
  jtag_write_reg (RAM_BASE + 0x0c, 0x9c210001);                                /* l.addi  r1,r1,1         */
 
  jtag_write_reg (RAM_BASE + 0x10, 0x9c210001);                                /* l.addi  r1,r1,1         */
 
  jtag_write_reg (RAM_BASE + 0x14, 0xd4020800);                                /* l.sw    0(r2),r1        */
 
  jtag_write_reg (RAM_BASE + 0x18, 0x9c210001);                                /* l.addi  r1,r1,1         */
 
  jtag_write_reg (RAM_BASE + 0x1c, 0x84620000);                                /* l.lwz   r3,0(r2)        */
 
  jtag_write_reg (RAM_BASE + 0x20, 0x03fffffb);                                /* l.j     loop2           */
 
  jtag_write_reg (RAM_BASE + 0x24, 0xe0211800);                                /* l.add   r1,r1,r3        */
 
  jtag_write_reg (RAM_BASE + 0x24, 0xe0211800);                                /* l.add   r1,r1,r3        */
 
 
 
  /* Enable exceptions */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  jtag_write_reg ((0 << 11) + 17, 0x03);
 
 
 
  /* Trap causes stall */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  jtag_write_reg ((6 << 11) + 20, 0x2000);
 
 
 
  /* Set PC */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  jtag_write_reg ((0 << 11) + 16, RAM_BASE);
 
 
 
  /* Set step bit */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  jtag_write_reg ((6 << 11) + 16, 1 << 22);
 
 
 
 
 
  for (i = 0; i < 10; i++)
 
    {
 
      /* Unstall */
 
      jtag_set_chain (SC_REGISTER);
 
      jtag_write_reg (4, 0x00000000);
 
      jtag_set_chain (SC_RISC_DEBUG);
 
    }
 
 
 
  /* Read NPC */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  npc = jtag_read_reg ((0 << 11) + 16);
 
  npc = jtag_read_reg ((0 << 11) + 16);
 
 
 
  /* Read PPC */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  ppc = jtag_read_reg ((0 << 11) + 18);
 
  ppc = jtag_read_reg ((0 << 11) + 18);
 
 
 
  /* Read R1 */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  r1 = jtag_read_reg (0x401);
 
  r1 = jtag_read_reg (0x401);
 
 
 
  printf("Read      npc = %.8lx ppc = %.8lx r1 = %.8lx\n", npc, ppc, r1);
 
  printf("Expected  npc = %.8lx ppc = %.8lx r1 = %.8lx\n", 0x4000000c, 0x40000024, 5);
 
  result = npc + ppc + r1;
 
 
 
 
 
  /* Reset step bit */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  jtag_write_reg ((6 << 11) + 16, 0);
 
 
 
 
 
 
 
  /* Set trap insn in delay slot */
 
  jtag_set_chain (SC_WISHBONE);
 
  insn = jtag_read_reg (RAM_BASE + 0x24);
 
  insn = jtag_read_reg (RAM_BASE + 0x24);
 
  jtag_write_reg (RAM_BASE + 0x24, 0x21000001);
 
 
 
  /* Unstall */
 
  jtag_set_chain (SC_REGISTER);
 
  jtag_write_reg (4, 0x00000000);
 
  jtag_set_chain (SC_RISC_DEBUG);
 
 
 
  /* Read NPC */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  npc = jtag_read_reg ((0 << 11) + 16);
 
  npc = jtag_read_reg ((0 << 11) + 16);
 
 
 
  /* Read PPC */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  ppc = jtag_read_reg ((0 << 11) + 18);
 
  ppc = jtag_read_reg ((0 << 11) + 18);
 
 
 
  /* Read R1 */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  r1 = jtag_read_reg (0x401);
 
  r1 = jtag_read_reg (0x401);
 
 
 
  /* Set back original insn */
 
  jtag_set_chain (SC_WISHBONE);
 
  jtag_write_reg (RAM_BASE + 0x24, insn);
 
 
 
  printf("Read      npc = %.8lx ppc = %.8lx r1 = %.8lx\n", npc, ppc, r1);
 
  printf("Expected  npc = %.8lx ppc = %.8lx r1 = %.8lx\n", 0x4000000c, 0x40000024, 8);
 
  result = npc + ppc + r1 + result;
 
 
 
 
 
  /* Set trap insn in place of branch insn */
 
  jtag_set_chain (SC_WISHBONE);
 
  insn = jtag_read_reg (RAM_BASE + 0x20);
 
  insn = jtag_read_reg (RAM_BASE + 0x20);
 
  jtag_write_reg (RAM_BASE + 0x20, 0x21000001);
 
 
 
  /* Set PC */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  jtag_write_reg ((0 << 11) + 16, RAM_BASE + 0x0c);
 
 
 
  /* Unstall */
 
  jtag_set_chain (SC_REGISTER);
 
  jtag_write_reg (4, 0x00000000);
 
  jtag_set_chain (SC_RISC_DEBUG);
 
 
 
  /* Read NPC */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  npc = jtag_read_reg ((0 << 11) + 16);
 
  npc = jtag_read_reg ((0 << 11) + 16);
 
 
 
  /* Read PPC */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  ppc = jtag_read_reg ((0 << 11) + 18);
 
  ppc = jtag_read_reg ((0 << 11) + 18);
 
 
 
  /* Read R1 */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  r1 = jtag_read_reg (0x401);
 
  r1 = jtag_read_reg (0x401);
 
 
 
  /* Set back original insn */
 
  jtag_set_chain (SC_WISHBONE);
 
  jtag_write_reg (RAM_BASE + 0x20, insn);
 
 
 
  printf("Read      npc = %.8lx ppc = %.8lx r1 = %.8lx\n", npc, ppc, r1);
 
  printf("Expected  npc = %.8lx ppc = %.8lx r1 = %.8lx\n", 0x40000024, 0x40000020, 11);
 
  result = npc + ppc + r1 + result;
 
 
 
 
 
  /* Set trap insn before branch insn */
 
  jtag_set_chain (SC_WISHBONE);
 
  insn = jtag_read_reg (RAM_BASE + 0x1c);
 
  insn = jtag_read_reg (RAM_BASE + 0x1c);
 
  jtag_write_reg (RAM_BASE + 0x1c, 0x21000001);
 
 
 
  /* Set PC */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  jtag_write_reg ((0 << 11) + 16, RAM_BASE + 0x20);
 
 
 
  /* Unstall */
 
  jtag_set_chain (SC_REGISTER);
 
  jtag_write_reg (4, 0x00000000);
 
  jtag_set_chain (SC_RISC_DEBUG);
 
 
 
  /* Read NPC */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  npc = jtag_read_reg ((0 << 11) + 16);
 
  npc = jtag_read_reg ((0 << 11) + 16);
 
 
 
  /* Read PPC */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  ppc = jtag_read_reg ((0 << 11) + 18);
 
  ppc = jtag_read_reg ((0 << 11) + 18);
 
 
 
  /* Read R1 */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  r1 = jtag_read_reg (0x401);
 
  r1 = jtag_read_reg (0x401);
 
 
 
  /* Set back original insn */
 
  jtag_set_chain (SC_WISHBONE);
 
  jtag_write_reg (RAM_BASE + 0x1c, insn);
 
 
 
  printf("Read      npc = %.8lx ppc = %.8lx r1 = %.8lx\n", npc, ppc, r1);
 
  printf("Expected  npc = %.8lx ppc = %.8lx r1 = %.8lx\n", 0x40000020, 0x4000001c, 24);
 
  result = npc + ppc + r1 + result;
 
 
 
 
 
  /* Set trap insn behind lsu insn */
 
  jtag_set_chain (SC_WISHBONE);
 
  insn = jtag_read_reg (RAM_BASE + 0x18);
 
  insn = jtag_read_reg (RAM_BASE + 0x18);
 
  jtag_write_reg (RAM_BASE + 0x18, 0x21000001);
 
 
 
  /* Set PC */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  jtag_write_reg ((0 << 11) + 16, RAM_BASE + 0x1c);
 
 
 
  /* Unstall */
 
  jtag_set_chain (SC_REGISTER);
 
  jtag_write_reg (4, 0x00000000);
 
  jtag_set_chain (SC_RISC_DEBUG);
 
 
 
  /* Read NPC */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  npc = jtag_read_reg ((0 << 11) + 16);
 
  npc = jtag_read_reg ((0 << 11) + 16);
 
 
 
  /* Read PPC */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  ppc = jtag_read_reg ((0 << 11) + 18);
 
  ppc = jtag_read_reg ((0 << 11) + 18);
 
 
 
  /* Read R1 */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  r1 = jtag_read_reg (0x401);
 
  r1 = jtag_read_reg (0x401);
 
 
 
  /* Set back original insn */
 
  jtag_set_chain (SC_WISHBONE);
 
  jtag_write_reg (RAM_BASE + 0x18, insn);
 
 
 
  printf("Read      npc = %.8lx ppc = %.8lx r1 = %.8lx\n", npc, ppc, r1);
 
  printf("Expected  npc = %.8lx ppc = %.8lx r1 = %.8lx\n", 0x4000001c, 0x40000018, 49);
 
  result = npc + ppc + r1 + result;
 
 
 
  /* Set trap insn very near previous one */
 
  jtag_set_chain (SC_WISHBONE);
 
  insn = jtag_read_reg (RAM_BASE + 0x1c);
 
  insn = jtag_read_reg (RAM_BASE + 0x1c);
 
  jtag_write_reg (RAM_BASE + 0x1c, 0x21000001);
 
 
 
  /* Set PC */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  jtag_write_reg ((0 << 11) + 16, RAM_BASE + 0x18);
 
 
 
  /* Unstall */
 
  jtag_set_chain (SC_REGISTER);
 
  jtag_write_reg (4, 0x00000000);
 
  jtag_set_chain (SC_RISC_DEBUG);
 
 
 
  /* Read NPC */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  npc = jtag_read_reg ((0 << 11) + 16);
 
  npc = jtag_read_reg ((0 << 11) + 16);
 
 
 
  /* Read PPC */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  ppc = jtag_read_reg ((0 << 11) + 18);
 
  ppc = jtag_read_reg ((0 << 11) + 18);
 
 
 
  /* Read R1 */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  r1 = jtag_read_reg (0x401);
 
  r1 = jtag_read_reg (0x401);
 
 
 
  /* Set back original insn */
 
  jtag_set_chain (SC_WISHBONE);
 
  jtag_write_reg (RAM_BASE + 0x1c, insn);
 
 
 
  printf("Read      npc = %.8lx ppc = %.8lx r1 = %.8lx\n", npc, ppc, r1);
 
  printf("Expected  npc = %.8lx ppc = %.8lx r1 = %.8lx\n", 0x40000020, 0x4000001c, 50);
 
  result = npc + ppc + r1 + result;
 
 
 
 
 
  /* Set trap insn to the start */
 
  jtag_set_chain (SC_WISHBONE);
 
  insn = jtag_read_reg (RAM_BASE + 0x0c);
 
  insn = jtag_read_reg (RAM_BASE + 0x0c);
 
  jtag_write_reg (RAM_BASE + 0x0c, 0x21000001);
 
 
 
  /* Set PC */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  jtag_write_reg ((0 << 11) + 16, RAM_BASE + 0x1c);
 
 
 
  /* Unstall */
 
  jtag_set_chain (SC_REGISTER);
 
  jtag_write_reg (4, 0x00000000);
 
  jtag_set_chain (SC_RISC_DEBUG);
 
 
 
  /* Read NPC */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  npc = jtag_read_reg ((0 << 11) + 16);
 
  npc = jtag_read_reg ((0 << 11) + 16);
 
 
 
  /* Read PPC */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  ppc = jtag_read_reg ((0 << 11) + 18);
 
  ppc = jtag_read_reg ((0 << 11) + 18);
 
 
 
  /* Read R1 */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  r1 = jtag_read_reg (0x401);
 
  r1 = jtag_read_reg (0x401);
 
 
 
  /* Set back original insn */
 
  jtag_set_chain (SC_WISHBONE);
 
  jtag_write_reg (RAM_BASE + 0x0c, insn);
 
 
 
  printf("Read      npc = %.8lx ppc = %.8lx r1 = %.8lx\n", npc, ppc, r1);
 
  printf("Expected  npc = %.8lx ppc = %.8lx r1 = %.8lx\n", 0x40000010, 0x4000000c, 99);
 
  result = npc + ppc + r1 + result;
 
 
 
 
 
  /* Set step bit */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  jtag_write_reg ((6 << 11) + 16, 1 << 22);
 
 
 
  for (i = 0; i < 5; i++)
 
    {
 
      /* Unstall */
 
      jtag_set_chain (SC_REGISTER);
 
      jtag_write_reg (4, 0x00000000);
 
      jtag_set_chain (SC_RISC_DEBUG);
 
    }
 
 
 
  /* Read NPC */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  npc = jtag_read_reg ((0 << 11) + 16);
 
  npc = jtag_read_reg ((0 << 11) + 16);
 
 
 
  /* Read PPC */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  ppc = jtag_read_reg ((0 << 11) + 18);
 
  ppc = jtag_read_reg ((0 << 11) + 18);
 
 
 
  /* Read R1 */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  r1 = jtag_read_reg (0x401);
 
  r1 = jtag_read_reg (0x401);
 
 
 
  printf("Read      npc = %.8lx ppc = %.8lx r1 = %.8lx\n", npc, ppc, r1);
 
  printf("Expected  npc = %.8lx ppc = %.8lx r1 = %.8lx\n", 0x40000024, 0x40000020, 101);
 
  result = npc + ppc + r1 + result;
 
 
 
  /* Set PC */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  jtag_write_reg ((0 << 11) + 16, RAM_BASE + 0x20);
 
 
 
  for (i = 0; i < 2; i++)
 
    {
 
      /* Unstall */
 
      jtag_set_chain (SC_REGISTER);
 
      jtag_write_reg (4, 0x00000000);
 
      jtag_set_chain (SC_RISC_DEBUG);
 
    }
 
 
 
  /* Read NPC */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  npc = jtag_read_reg ((0 << 11) + 16);
 
  npc = jtag_read_reg ((0 << 11) + 16);
 
 
 
  /* Read PPC */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  ppc = jtag_read_reg ((0 << 11) + 18);
 
  ppc = jtag_read_reg ((0 << 11) + 18);
 
 
 
  /* Read R1 */
 
  jtag_set_chain (SC_RISC_DEBUG);
 
  r1 = jtag_read_reg (0x401);
 
  r1 = jtag_read_reg (0x401);
 
 
 
  printf("Read      npc = %.8lx ppc = %.8lx r1 = %.8lx\n", npc, ppc, r1);
 
  printf("Expected  npc = %.8lx ppc = %.8lx r1 = %.8lx\n", 0x4000000c, 0x40000024, 201);
 
  result = npc + ppc + r1 + result;
 
 
 
  printf("result = %.8lx\n", result + 0x5eaddaa9);
 
 
 
#endif
 
}
}
 
 
void
void
jtag_done ()  /* CZ */
jtag_done ()  /* CZ */
{
{

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.