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?
Hi ateeb,
Are you able to provide a screenshot to show exactly what the issue is please ?
Thanks
Stuart
Ateeb, could you open the Window -> Show View -> MMU/MPU view to examine the properties of the address of the ethernet controller? This may explain the issue you are seeing. It may also be that this region is only accessible at a higher EL level.Can you read with something like "x EL2:<address>"?Aside... the latest DS-5 version is 5.,29, downloadable from developer.arm.com/.../downloads
Yes I have examined the Ethernet properties in MMU/MPU > Memory Map and this memory is readable/writeable in EL1. See screen shots belowStuart Hirons @Ronan I have also tried DS-5 v5.29.0 and behavior is the same as above.
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,
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