Index: sys/compat/linuxkpi/common/include/linux/io.h =================================================================== --- sys/compat/linuxkpi/common/include/linux/io.h +++ sys/compat/linuxkpi/common/include/linux/io.h @@ -356,16 +356,26 @@ #define _ioremap_attr(...) NULL #endif -#define ioremap_nocache(addr, size) \ - _ioremap_attr((addr), (size), VM_MEMATTR_UNCACHEABLE) #define ioremap_wc(addr, size) \ _ioremap_attr((addr), (size), VM_MEMATTR_WRITE_COMBINING) #define ioremap_wb(addr, size) \ _ioremap_attr((addr), (size), VM_MEMATTR_WRITE_BACK) +#ifdef VM_MEMATTR_DEVICE +/* on aarch64, it's really important to map as DEVICE, otherwise expect freezes */ +#define ioremap_nocache(addr, size) \ + _ioremap_attr((addr), (size), VM_MEMATTR_DEVICE) +#define ioremap_wt(addr, size) \ + _ioremap_attr((addr), (size), VM_MEMATTR_DEVICE) +#define ioremap(addr, size) \ + _ioremap_attr((addr), (size), VM_MEMATTR_DEVICE) +#else +#define ioremap_nocache(addr, size) \ + _ioremap_attr((addr), (size), VM_MEMATTR_UNCACHEABLE) #define ioremap_wt(addr, size) \ _ioremap_attr((addr), (size), VM_MEMATTR_WRITE_THROUGH) #define ioremap(addr, size) \ _ioremap_attr((addr), (size), VM_MEMATTR_UNCACHEABLE) +#endif void iounmap(void *addr); #define memset_io(a, b, c) memset((a), (b), (c))