On Mon, Jun 29, 2015 at 2:38 AM, Stefan Tauner
On Sun, 8 Mar 2015 07:54:11 +0000
Urja Rannikko <urjaman(a)gmail.com> wrote:
also make serprog_map report if mapping doesnt
in the 24-bit address space of serprog.
what exactly happens without this fake mapping? I think I don't
completely understand how non-spi serprog handles chip addresses...
For parallel it was essentially that address bits past the chip size
wouldnt be connected in hardware since chips dont have(/look at) more
address lines than their size. So the chip would always be addressed and the
address space would be as many mirrors of the chip as would fit (in 24bit/16M).
For LPC/FWH they have a real 32/28-bit address space, within
which the chip will natively be mapped to the highest addresses (at 4G
- chip size)
- below which they can have lock regs etc.
The serprog (libfrser) LPC/FWH maps the 24-bit address
space to the highest 16M of the 4G space since thats where the chips are.
If you used the null mapping and tried to access eg addr 0 of 512k LPC
try to access 0xFF000000 instead of 4G - 512k = 0xFFF80000.
The chip would just ignore the accesses since that isnt the address it
Also, the lock regs would get the same null mapping and nope.
Essentially this is a bug in the original serprog because the
mapping just wasnt thought about at the time (worked without).
I think it is also a bug of fallback_map in returning NULL always
- that does the lock regs and chip at same address so it just cant
work for all things,
but I'm not sure if some programmer relies on that by now,
and serprog has an use for a map function: reporting about the attempted
mappings if they're outside the 24bit space it has.
BTW the documentation on non-spi stuff especially the opbuf handling in
Documentation/serprog-protocol.txt has some room for improvements ;)
at this later.