On Fri, 2009-06-12 at 09:55 +0200, Nico Coesel wrote:
> > -----Original Message-----
> > From: [email protected] [mailto:openocd-
> > [email protected]] On Behalf Of David Claffey
> > Sent: donderdag 11 juni 2009 23:18
> > To: openocd-development
> > Subject: [Openocd-development] mips32 big endian fix
> > 
> > A patch is needed for MIPS big endian (elf32-tradbigmips) targets.
> Perhaps
> > I'm the first to test trunk with a MIPS big endian target.
> > 
> > If "-endian big" is not set in target create, the endianess defaults
> to
> > little.
> >  mw and md commands will still work, but binary file loads will have
> the
> > incorrect word order loaded into memory.
> > 
> > The EJTAG processor access data register (PrAcc) is little endian
> regardless
> > of the CPU endianness; it is always loaded LSB first. This is
> confirmed by
> > the fact that mips_ejtag_drscan_32() uses buf_set_u32() to load the
> scan
> > field;
> > buf_set_u32() is a little-endian formatter. For big endian targets,
> data
> > buffers have to be modified so the LSB of each u32 or u16 is at the
> lower
> > (first) memory location.
> > 
> > The attached patch for src/target/mips_m4k.c fixes the problem.
> > 
> > Included is a patch for src/target/mips_ejtag.c that fixes the case of
> a big
> > endian host.  Again it is related to PrAcc.  If the drscan out_value
> word
> > order is set using buf_set_u32() then it makes sense to also fixup the
> > in_value with buf_get_u32(); a symmetry argument. This has no affect
> on
> > little endian hosts.
> > 
> David,
> I strongly doubt your patch is required. AFAIK OpenOCD already modifies
> the loaded data for correct endianess at a higher level. Secondly I
> think endianess conversions should not be done inside a target specific
> file.
>  
> I'm using OpenOCD with a MIPS target (AU1100) as well which is also big
> endian. I've configured OpenOCD to use little endian mode and that seems
> to be the proper setting. A thing to look out for is that the MIPS EJTAG
> interface may do the endian conversion for you. Is the order of the
> special function registers correct when OpenOCD is in little endian
> mode? This the case with 'my' AU1100 target. You might want to check
> that first. If the special function registers read correctly in little
> endian mode then you'll need to modify the endianess of the binary file
> before loading it with OpenOCD. There are tools to do that. If I'm
> correct the bootloader Yamon comes with a tool called 'smunge' which can
> be used to modify the endianess of a file.

As you probably noticed, I already committed these changes, but they
will be trivial to revert.  Please let me know if I should remove them.

That said, why require an external tool manage the conversion?  Can
OpenOCD reasonably offer such support built-in?

Cheers,

Zach

_______________________________________________
Openocd-development mailing list
[email protected]
https://lists.berlios.de/mailman/listinfo/openocd-development

Reply via email to