m68k: fix ioremapping for internal ColdFire peripherals
authorGreg Ungerer <gerg@linux-m68k.org>
Thu, 5 Apr 2018 13:55:11 +0000 (23:55 +1000)
committerGreg Ungerer <gerg@linux-m68k.org>
Sun, 27 May 2018 23:45:27 +0000 (09:45 +1000)
commitbe39cbcbd6cc94ed0e6daf3637cc092641254cf3
tree95b17fb51ea556553e6a5ae2f37952851f839191
parent4d53037876277fbba10f47de7b90d3a873c5d12b
m68k: fix ioremapping for internal ColdFire peripherals

The ColdFire SoC internal peripherals are mapped into virtual address
space using the ACR registers of the cache control unit. This means we
are using a 1:1 physical:virtual mapping for them that does not rely on
page table mappings. We can quickly determine if we are accessing an
internal peripheral device given the physical or vitrual address using
the same range check.

The implications of this mapping is that an ioremap should return the
physical address as the virtual mapping __iomem cookie as well. So fix
ioremap() to deal with this on ColdFire. Of course you need to take
care of this in the iounmap() path as well.

Reported-by: Angelo Dureghello <angelo@sysam.it>
Signed-off-by: Greg Ungerer <gerg@linux-m68k.org>
Reviewed-by: Angelo Dureghello <angelo@sysam.it>
Tested-by: Angelo Dureghello <angelo@sysam.it>
arch/m68k/mm/kmap.c