Hi All
Apology in advance if I am not explaining this correctly, and, as it is very
likely, I am mistaken.
When gdb issues the "load <image>" instruction for RISCV 0.13 compliant
processor, and if riscv target use the program buffer route
(write_memory_progbuf() [riscv-013.c:3368) the riscv target uses batch
processing to write the binary image data. See while loop on [riscv-013.c:3437]
In the while loop, riscv target chop up the image data to 32/64 bit words for
writing. RISCV target batch this up, preparing each 32/64 bit into dmi
instruction using riscv_batch_add_dmi_read() [riscv-013.c:3492-3].
So far, so good.
My question is, in riscv_batch_add_dmi_write() [batch.c:116], at
batch:c124: riscv_fill_dmi_nop_u64(batch->target, (char *)field->in_value);
we are actually writing assigning a value to field->in_value. This will
eventually result in DR scan doing a read.
I believe this read is redundant, as we are not using the return value from DR.
So this is my question: why do this read?
In my driver, this extra read from DR is causing delays. Hence, I am gathering
opinion on this to see whether can I do some refactoring to take out this read.
I also believe it is not as easy as setting field->in_value=NULL in
rsicv_fill_dmi_nop_u64(), as it might be used elsewhere that actually require
field->in_value.
Many thanks
Cinly
Quick link to source code:
- riscv-013.c
https://sourceforge.net/p/openocd/code/ci/master/tree/src/target/riscv/riscv-013.c
- batch.c
https://sourceforge.net/p/openocd/code/ci/master/tree/src/target/riscv/batch.c