On Sunday 25 October 2009, Magnus Lundin wrote:
> I prefer read_cp/write_cp to mrc/mcr, since we really want to read/write
> to the coprocessor registers. The fact that this is implemented using
> the mrc/mcr instructions is not important here. There are no other arm
> instructions treated like that, rather we specifiy the registers, memory
> etc. that we want to access.
Actually I think MCR/MRC is probably appropriate. When you look
at how these "coprocessor registers" are specified ... they really
boil down to fourteen bits in the MCR/MRC instructions, plus one
more stipulated by the use of MCR/MRC instead of MCR2/MRC2.
Or, for 64 bit values, MCRR{,2}/MRRC{,2} also have 15-bit register
specs. Same deal: the register is specified as an N-tuple of bits
that are parameters to the instruction: CRn, CRm, Opcode_1, Opcode_2,
and the conceptual bit indicated by e.g. MRRC vs MRRC2.
So unless you treat "read_cp" as just an instruction rename (and
maybe passing MRC-vs-MRC2 as Yet Another Parameter), you're not going
to get away from doing exactly what the mrc and mcr routines do...
> It is definitely possible that there might be a future coprocessor
> access debug component that accesses coprocessors using a coresight
> memory mapped interface.
Not persuasive. We can speculate on all kinds of things that
haven't happened yet. The *point* of the coprocessor stuff is
that it can be accessed through instructions, integrating with
the CPU pipeline. That's what distinguishes coprocessors from
random memory-mapped peripherals ... or from DSPs which are
fully independent and communicate via memory or mailboxes.
If some particular coprocessor creates a custom debug interface,
and advertises itself in the ROM table, that's another thing.
It would be a bunch of special case work to talk to it. But
that wouldn't obsolete instruction based access.
- Dave
_______________________________________________
Openocd-development mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/openocd-development