Re: doesn't ioremap() retrun contigious addressess...?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I guess your reading is wrong. If you are mapping 16KB of physical address from 0x03900000. The mapping is as follows.

0x03900000 to 0x03903FFF --> 0xEA880000 to 0xEA883FFF

For every iteration you are reading 4 bytes. hence you have to reduce your loop as follows and also declare tcpm_base as unsigned int *

unsigned int __iomem *tcpm_base;

 *tcpm_base = ioremap_nocache(0x03900000, SZ_16KB);
            printk("Virtual addresss %x\n",tcpm_base);
            if(tcpm_base!=NULL)
            {
            printk("Jiffies %x %ld\n\n\n\n", jiffies, jiffies);
            for(i=0;i<0xFFF;i++)
            src = "">
            printk("%d\n",src);
            printk("Jiffies %x %ld\n\n\n\n", jiffies, jiffies);
            }
            else
                printk("unable to map \n");


Regards,
Prabhu


On Thu, Feb 28, 2013 at 4:41 PM, Prabhu nath <gprabhunath@xxxxxxxxx> wrote:
Yes, ioremap() maps the given physical address to contiguous Kernel virtual address above high_memory and returns the first address of the mapped kernel virtual address.

Regards,
Prabhu



On Thu, Feb 28, 2013 at 4:06 PM, sandeep kumar <coolsandyforyou@xxxxxxxxx> wrote:

Hi All
Please find a piece of code that i wrote in my driver,
 
void __iomem *tcpm_base = ioremap_nocache(0x03900000, SZ_16KB);
            printk("Virtual addresss %x\n",tcpm_base);
            if(tcpm_base!=NULL)
            {
            printk("Jiffies %x %ld\n\n\n\n", jiffies, jiffies);
            for(i=0;i<(SZ_16KB-1);i++)
            src = "">
            printk("%d\n",src);
            printk("Jiffies %x %ld\n\n\n\n", jiffies, jiffies);
            }
            else
                printk("unable to map \n");


When i execute this code, i am seeing a kernel panic telling
----- LOG --------
"Virtual addresss ea880000"
"Unable to handle kernel paging request at virtual address ea890000"
-----LOG-----

If you observe,
virtual address of  tcpm_base is ea880000.
if ioremap() returns all contigious memory, There should be no dereferencing of "ea890000"(the max address should be ea88fffe)

But in kernel logs show, it is dereferencing that address.

My question now is...
doesn't ioremap() returns contigious address space?


With regards,
Sandeep Kumar Anantapalli,

_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies



_______________________________________________
Kernelnewbies mailing list
Kernelnewbies@xxxxxxxxxxxxxxxxx
http://lists.kernelnewbies.org/mailman/listinfo/kernelnewbies

[Index of Archives]     [Newbies FAQ]     [Linux Kernel Mentors]     [Linux Kernel Development]     [IETF Annouce]     [Git]     [Networking]     [Security]     [Bugtraq]     [Yosemite]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux SCSI]     [Linux ACPI]
  Powered by Linux