mmap question on ppc440
Stefan Roese
sr at denx.de
Tue Nov 6 17:50:21 EST 2007
On Monday 05 November 2007, Josh Boyer wrote:
> > I am attempting to access the CPLD on the AMCC Sequoia board from
> > user-land. I open /dev/mem, and mmap it, then try to access the
> > resulting pointer. That works fine when accessing physical addresses
> > that correspond to RAM, but as soon as I try to access the CPLD at
> > physical address 0xc0000000, I get an infinite machine check.
>
> That's because the CPLD is actually at physical address 0x1C0000000.
> Yay for 36-bit physical addresses.
Right. Are you using arch/ppc or arch/powerpc? If it's arch/ppc you could
give the following patch a try:
@@ -275,6 +275,14 @@
{
size_t size = vma->vm_end - vma->vm_start;
+#if defined(CONFIG_44x) && !defined(CONFIG_PPC_MERGE)
+ /*
+ * 2006-08-07: sr
+ * Needed on 44x-er systems for 36bit addresses (like pci on 440gx)
+ */
+ vma->vm_pgoff = (fixup_bigphys_addr(vma->vm_pgoff << PAGE_SHIFT, size) >> PAGE_SHIFT);
+#endif
+
if (!valid_mmap_phys_addr_range(vma->vm_pgoff, size))
return -EINVAL;
Best regards,
Stefan
More information about the Linuxppc-dev
mailing list