Update bits to latest spec.
Change-Id: Ib09e1da81c6c0e7c9c6b69e9fe31eda20e3cd6e0
This commit is contained in:
parent
3bd661b679
commit
8f6ddc92e8
File diff suppressed because it is too large
Load Diff
|
@ -814,7 +814,7 @@ static void write_program(struct target *target, const program_t *program)
|
||||||
((uint32_t) program->code[i+1] << 8) |
|
((uint32_t) program->code[i+1] << 8) |
|
||||||
((uint32_t) program->code[i+2] << 16) |
|
((uint32_t) program->code[i+2] << 16) |
|
||||||
((uint32_t) program->code[i+3] << 24);
|
((uint32_t) program->code[i+3] << 24);
|
||||||
dmi_write(target, DMI_IBUF0 + i / 4, value);
|
dmi_write(target, DMI_PROGBUF0 + i / 4, value);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1272,7 +1272,8 @@ static int halt(struct target *target)
|
||||||
LOG_DEBUG("riscv_halt()");
|
LOG_DEBUG("riscv_halt()");
|
||||||
select_dmi(target);
|
select_dmi(target);
|
||||||
|
|
||||||
dmi_write(target, DMI_DMCONTROL, DMI_DMCONTROL_HALTREQ | DMI_DMCONTROL_DMACTIVE);
|
dmi_write(target, DMI_DMCONTROL, DMI_DMCONTROL_HALTREQ |
|
||||||
|
DMI_DMCONTROL_DMACTIVE);
|
||||||
|
|
||||||
return ERROR_OK;
|
return ERROR_OK;
|
||||||
}
|
}
|
||||||
|
@ -1679,13 +1680,14 @@ static int examine(struct target *target)
|
||||||
|
|
||||||
LOG_DEBUG("dmcontrol: 0x%08x", dmcontrol);
|
LOG_DEBUG("dmcontrol: 0x%08x", dmcontrol);
|
||||||
LOG_DEBUG(" haltreq=%d", get_field(dmcontrol, DMI_DMCONTROL_HALTREQ));
|
LOG_DEBUG(" haltreq=%d", get_field(dmcontrol, DMI_DMCONTROL_HALTREQ));
|
||||||
LOG_DEBUG(" reset=%d", get_field(dmcontrol, DMI_DMCONTROL_RESET));
|
LOG_DEBUG(" resumereq=%d", get_field(dmcontrol, DMI_DMCONTROL_RESUMEREQ));
|
||||||
LOG_DEBUG(" dmactive=%d", get_field(dmcontrol, DMI_DMCONTROL_DMACTIVE));
|
|
||||||
LOG_DEBUG(" hartstatus=%d", get_field(dmcontrol, DMI_DMCONTROL_HARTSTATUS));
|
LOG_DEBUG(" hartstatus=%d", get_field(dmcontrol, DMI_DMCONTROL_HARTSTATUS));
|
||||||
LOG_DEBUG(" hartsel=0x%x", get_field(dmcontrol, DMI_DMCONTROL_HARTSEL));
|
LOG_DEBUG(" hartsel=0x%x", get_field(dmcontrol, DMI_DMCONTROL_HARTSEL));
|
||||||
|
LOG_DEBUG(" hartreset=0x%x", get_field(dmcontrol, DMI_DMCONTROL_HARTRESET));
|
||||||
|
LOG_DEBUG(" dmactive=%d", get_field(dmcontrol, DMI_DMCONTROL_DMACTIVE));
|
||||||
|
LOG_DEBUG(" reset=%d", get_field(dmcontrol, DMI_DMCONTROL_RESET));
|
||||||
LOG_DEBUG(" authenticated=%d", get_field(dmcontrol, DMI_DMCONTROL_AUTHENTICATED));
|
LOG_DEBUG(" authenticated=%d", get_field(dmcontrol, DMI_DMCONTROL_AUTHENTICATED));
|
||||||
LOG_DEBUG(" authbusy=%d", get_field(dmcontrol, DMI_DMCONTROL_AUTHBUSY));
|
LOG_DEBUG(" authbusy=%d", get_field(dmcontrol, DMI_DMCONTROL_AUTHBUSY));
|
||||||
LOG_DEBUG(" authtype=%d", get_field(dmcontrol, DMI_DMCONTROL_AUTHTYPE));
|
|
||||||
LOG_DEBUG(" version=%d", get_field(dmcontrol, DMI_DMCONTROL_VERSION));
|
LOG_DEBUG(" version=%d", get_field(dmcontrol, DMI_DMCONTROL_VERSION));
|
||||||
|
|
||||||
unsigned hartstatus = DMI_DMCONTROL_HARTSTATUS;
|
unsigned hartstatus = DMI_DMCONTROL_HARTSTATUS;
|
||||||
|
@ -1718,8 +1720,8 @@ static int examine(struct target *target)
|
||||||
LOG_DEBUG("abstractcs=0x%x", abstractcs);
|
LOG_DEBUG("abstractcs=0x%x", abstractcs);
|
||||||
LOG_DEBUG(" datacount=%d", info->datacount);
|
LOG_DEBUG(" datacount=%d", info->datacount);
|
||||||
|
|
||||||
uint32_t accesscs = dmi_read(target, DMI_ACCESSCS);
|
uint32_t accesscs = dmi_read(target, DMI_PROGBUFCS);
|
||||||
info->progsize = get_field(abstractcs, DMI_ACCESSCS_PROGSIZE);
|
info->progsize = get_field(abstractcs, DMI_PROGBUFCS_PROGSIZE);
|
||||||
LOG_DEBUG("accesscs=0x%x", accesscs);
|
LOG_DEBUG("accesscs=0x%x", accesscs);
|
||||||
LOG_DEBUG(" progsize=%d", info->progsize);
|
LOG_DEBUG(" progsize=%d", info->progsize);
|
||||||
|
|
||||||
|
@ -1730,7 +1732,7 @@ static int examine(struct target *target)
|
||||||
}
|
}
|
||||||
|
|
||||||
for (unsigned i = 0; i < info->progsize; i++) {
|
for (unsigned i = 0; i < info->progsize; i++) {
|
||||||
dmi_write(target, DMI_IBUF0 + i, value);
|
dmi_write(target, DMI_PROGBUF0 + i, value);
|
||||||
value += 0x52534335;
|
value += 0x52534335;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1745,17 +1747,18 @@ static int examine(struct target *target)
|
||||||
value += 0x52534335;
|
value += 0x52534335;
|
||||||
}
|
}
|
||||||
for (unsigned i = 0; i < info->progsize; i++) {
|
for (unsigned i = 0; i < info->progsize; i++) {
|
||||||
uint32_t check = dmi_read(target, DMI_IBUF0 + i);
|
uint32_t check = dmi_read(target, DMI_PROGBUF0 + i);
|
||||||
if (check != value) {
|
if (check != value) {
|
||||||
LOG_ERROR("Wrote 0x%x to dbus address 0x%x but got back 0x%x",
|
LOG_ERROR("Wrote 0x%x to dbus address 0x%x but got back 0x%x",
|
||||||
value, DMI_IBUF0 + i, check);
|
value, DMI_PROGBUF0 + i, check);
|
||||||
return ERROR_FAIL;
|
return ERROR_FAIL;
|
||||||
}
|
}
|
||||||
value += 0x52534335;
|
value += 0x52534335;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (hartstatus == 1) {
|
if (hartstatus == 1) {
|
||||||
dmi_write(target, DMI_DMCONTROL, DMI_DMCONTROL_HALTREQ | DMI_DMCONTROL_DMACTIVE);
|
dmi_write(target, DMI_DMCONTROL, DMI_DMCONTROL_HALTREQ |
|
||||||
|
DMI_DMCONTROL_DMACTIVE);
|
||||||
for (unsigned i = 0; i < 256; i++) {
|
for (unsigned i = 0; i < 256; i++) {
|
||||||
dmcontrol = dmi_read(target, DMI_DMCONTROL);
|
dmcontrol = dmi_read(target, DMI_DMCONTROL);
|
||||||
if (get_field(dmcontrol, DMI_DMCONTROL_HARTSTATUS) == 0)
|
if (get_field(dmcontrol, DMI_DMCONTROL_HARTSTATUS) == 0)
|
||||||
|
|
Loading…
Reference in New Issue