________________________________
From: coolsandyforyou@gmail.com Date: Sat, 2 Mar 2013 22:48:34 +0530 Subject: Re: [ARM_LINUX] ioremap() allowing to map system memory... To: gprabhunath@gmail.com CC: kernelnewbies@kernelnewbies.org
I passed a physical address 0x63ACD000. As expected it returned 0x00000000. I am running linux version 3.5.1. Mine is ARM, i donno about x86. In my case ioremap is successfule and giving an address in ioremap() range of virtual memory map as in http://www.arm.linux.org.uk/developer/memory.txt.
please give your detail calling example, it is weired that you did not get 0x0 returned. maybe your platform overwirte the arch_ioremap_caller? please double check this. the default implementation for arch_ioremap_caller is as below: void __iomem * (*arch_ioremap_caller)(unsigned long, size_t, unsigned int, void *) = __arm_ioremap_caller; in \arch\arm\mm\ioremap.c, in function __arm_ioremap_pfn_caller: /* * Don't allow RAM to be mapped - this causes problems with ARMv6+ */ if (WARN_ON(pfn_valid(pfn))) return NULL; you should get NULL if you are asking convert a valid memory.
On Sat, Mar 2, 2013 at 4:52 PM, Prabhu nath <gprabhunath@gmail.com<mailto:gprabhunath@gmail.com>> wrote: In principle, ioremap() will return 0x00000000 if the physical address passed is of memory. I just want you to double check the address you have passed to ioremap(). In my experiment on x86 Desktop machine with 2GB RAM. I passed a physical address 0x63ACD000. As expected it returned 0x00000000. I am running linux version 3.5.1.
Regards, Prabhunath G Linux Trainer Bangalore
On Fri, Mar 1, 2013 at 5:57 PM, sandeep kumar <coolsandyforyou@gmail.com<mailto:coolsandyforyou@gmail.com>> wrote:
Looks like you are trying to pass the address of physical memory to this function as a parameter and it is screwing up. Yes, i intentionally gave some physical address which is part of system memory. My problem infact is, it is not screwing up. It is allowing me to do that. Its not 'panic'ing
On Fri, Mar 1, 2013 at 4:58 PM, Prabhu nath <gprabhunath@gmail.com<mailto:gprabhunath@gmail.com>> wrote:
On Fri, Mar 1, 2013 at 4:48 PM, sandeep kumar <coolsandyforyou@gmail.com<mailto:coolsandyforyou@gmail.com>> wrote: Hi All I am using ARM based board. In mine, i did the following...
void __iomem *tcpm_base = ioremap_nocache(0x03B00000, 10*SZ_3MB);
Actually i didnt reserve the 30MB memory @ 0x3B00000. But still the call is succesful and i am able to read the memory.
In the logs it is just showing a warning, to fix my driver as i am calling ioremap() on system memory.
However if i try to write something on that memory, then only it is calling panic()..
Don't you think it should throw panic()while calling the ioremap() itself. Because this sounds like a serious violation...
What say?
To my knowledge, ioremap is used only to map the device related physical address to kernel virtual address. i.e. this function will only map either device registers or device memory to kernel virtual address.
Looks like you are trying to pass the address of physical memory to this function as a parameter and it is screwing up.
Please verify.
Regards, Prabhu
-- With regards, Sandeep Kumar Anantapalli,
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org<mailto:Kernelnewbies@kernelnewbies.org> http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies
-- With regards, Sandeep Kumar Anantapalli,
-- With regards, Sandeep Kumar Anantapalli,
_______________________________________________ Kernelnewbies mailing list Kernelnewbies@kernelnewbies.org http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies