#include #include static inline u32 armv6_sunavcr_read(void) { u32 val; asm volatile("mrc p15, 0, %0, c15, c9, 0" : "=r"(val)); return val; } static inline void armv6_sunavcr_write(u32 val) { asm volatile("mcr p15, 0, %0, c15, c9, 0" : : "r"(val)); } static int __init pmu_init(void) { u32 sunavcr = 0; armv6_sunavcr_write(0x1); sunavcr = armv6_sunavcr_read(); if (sunavcr!=0) { printk("pmu_init(): userland acces to pmu-regs activated\n"); return 0; } else { printk("pmu_init(): sunavcr_write() failed\n"); return -EIO; } } static void __exit pmu_exit(void) { printk ("pmu_exit()\n"); armv6_sunavcr_write(0x0); } module_init(pmu_init); module_exit(pmu_exit); MODULE_LICENSE("GPL");