I am using DS-5 v5.27.1 and using ARM SGI-575 as development platform. platform have a range for RAM, serial and ethernet devices. At kernel/code level I have mapped all memories and able to read/write in these memory ranges but in command window/memory browser of DS-5 I am able to view serial and RAM's memory view but memory range of ethernet is not accessible for both R/W. So how can I review this specific memory ? Any ideas ? Or anything that can help me out?
I have replied from different account as I was unable to reply from my previous account from which Query was opened.
Hi again,
So your address looks ok, it is the Ethernet controller so can you try 2 things please :
i) enter the command:
x 0x18000000
in the command window to see if just reading 1 word works ?
ii) Can you try accessing the memory *before* linux has booted and see if that makes any difference ?
I have the model, but not the Linux dist at the moment but if you let me know how you get on and we can take it from there.
thanks,
Stuart
Hi,1) I can only access first 15 bytes from 0x18000000 to 0x1800000c by using any of the methods i.e. x 0x18000000 or memory view.
2) I have tied to access memory before booting kernel and behaviour is the same.
Hi,
So I wonder if there is no valid memory access to (at least) address 0x18000010 ? If there is no registers/mapped there then an error would be returned and the read deemed to have failed.
I think this is why your read is failing : the number of bytes being read in the memory view that you showed was 1024, but only the first 16 bytes are used, so any accesses after this will fail, because the read operation cannot be serviced.
The Ethernet device in use is the SMSC 91C111 and looking at http://ww1.microchip.com/downloads/en/DeviceDoc/00002276A.pdf, section 8.3, p40, states "...To limit the I/O space requirements to 16 locations, the registers are assigned to different banks..." so this confirms the theory : only the first 16 bytes are used. So you can't read any more than 16 bytes.
Also, it probably worth noting that the 91C111 uses 16 bit registers so to read the locations correctly you could do :
x /h 0x18000000
to read the TCR (Transmit Control Register).
Note that +0xC is reserved in bank0, so you might get unpredictable/failing accesses if you are trying to read 0x1800000C and Bank0 is selected (I am guessing bank 0 is the default bank visible).
I hope this clarifies things for you.
Regards