/* Copyright (c) 2012, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and * only version 2 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. */ #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt #include <linux/kernel.h> #include <linux/types.h> #include <linux/bug.h> #include <asm/hardware/cp14.h> #include "coresight-etm.h" int etm_readl_cp14(u32 reg, unsigned int *val) { switch (reg) { case ETMCR: *val = etm_read(ETMCR); return 0; case ETMCCR: *val = etm_read(ETMCCR); return 0; case ETMTRIGGER: *val = etm_read(ETMTRIGGER); return 0; case ETMSR: *val = etm_read(ETMSR); return 0; case ETMSCR: *val = etm_read(ETMSCR); return 0; case ETMTSSCR: *val = etm_read(ETMTSSCR); return 0; case ETMTEEVR: *val = etm_read(ETMTEEVR); return 0; case ETMTECR1: *val = etm_read(ETMTECR1); return 0; case ETMFFLR: *val = etm_read(ETMFFLR); return 0; case ETMACVRn(0): *val = etm_read(ETMACVR0); return 0; case ETMACVRn(1): *val = etm_read(ETMACVR1); return 0; case ETMACVRn(2): *val = etm_read(ETMACVR2); return 0; case ETMACVRn(3): *val = etm_read(ETMACVR3); return 0; case ETMACVRn(4): *val = etm_read(ETMACVR4); return 0; case ETMACVRn(5): *val = etm_read(ETMACVR5); return 0; case ETMACVRn(6): *val = etm_read(ETMACVR6); return 0; case ETMACVRn(7): *val = etm_read(ETMACVR7); return 0; case ETMACVRn(8): *val = etm_read(ETMACVR8); return 0; case ETMACVRn(9): *val = etm_read(ETMACVR9); return 0; case ETMACVRn(10): *val = etm_read(ETMACVR10); return 0; case ETMACVRn(11): *val = etm_read(ETMACVR11); return 0; case ETMACVRn(12): *val = etm_read(ETMACVR12); return 0; case ETMACVRn(13): *val = etm_read(ETMACVR13); return 0; case ETMACVRn(14): *val = etm_read(ETMACVR14); return 0; case ETMACVRn(15): *val = etm_read(ETMACVR15); return 0; case ETMACTRn(0): *val = etm_read(ETMACTR0); return 0; case ETMACTRn(1): *val = etm_read(ETMACTR1); return 0; case ETMACTRn(2): *val = etm_read(ETMACTR2); return 0; case ETMACTRn(3): *val = etm_read(ETMACTR3); return 0; case ETMACTRn(4): *val = etm_read(ETMACTR4); return 0; case ETMACTRn(5): *val = etm_read(ETMACTR5); return 0; case ETMACTRn(6): *val = etm_read(ETMACTR6); return 0; case ETMACTRn(7): *val = etm_read(ETMACTR7); return 0; case ETMACTRn(8): *val = etm_read(ETMACTR8); return 0; case ETMACTRn(9): *val = etm_read(ETMACTR9); return 0; case ETMACTRn(10): *val = etm_read(ETMACTR10); return 0; case ETMACTRn(11): *val = etm_read(ETMACTR11); return 0; case ETMACTRn(12): *val = etm_read(ETMACTR12); return 0; case ETMACTRn(13): *val = etm_read(ETMACTR13); return 0; case ETMACTRn(14): *val = etm_read(ETMACTR14); return 0; case ETMACTRn(15): *val = etm_read(ETMACTR15); return 0; case ETMCNTRLDVRn(0): *val = etm_read(ETMCNTRLDVR0); return 0; case ETMCNTRLDVRn(1): *val = etm_read(ETMCNTRLDVR1); return 0; case ETMCNTRLDVRn(2): *val = etm_read(ETMCNTRLDVR2); return 0; case ETMCNTRLDVRn(3): *val = etm_read(ETMCNTRLDVR3); return 0; case ETMCNTENRn(0): *val = etm_read(ETMCNTENR0); return 0; case ETMCNTENRn(1): *val = etm_read(ETMCNTENR1); return 0; case ETMCNTENRn(2): *val = etm_read(ETMCNTENR2); return 0; case ETMCNTENRn(3): *val = etm_read(ETMCNTENR3); return 0; case ETMCNTRLDEVRn(0): *val = etm_read(ETMCNTRLDEVR0); return 0; case ETMCNTRLDEVRn(1): *val = etm_read(ETMCNTRLDEVR1); return 0; case ETMCNTRLDEVRn(2): *val = etm_read(ETMCNTRLDEVR2); return 0; case ETMCNTRLDEVRn(3): *val = etm_read(ETMCNTRLDEVR3); return 0; case ETMCNTVRn(0): *val = etm_read(ETMCNTVR0); return 0; case ETMCNTVRn(1): *val = etm_read(ETMCNTVR1); return 0; case ETMCNTVRn(2): *val = etm_read(ETMCNTVR2); return 0; case ETMCNTVRn(3): *val = etm_read(ETMCNTVR3); return 0; case ETMSQ12EVR: *val = etm_read(ETMSQ12EVR); return 0; case ETMSQ21EVR: *val = etm_read(ETMSQ21EVR); return 0; case ETMSQ23EVR: *val = etm_read(ETMSQ23EVR); return 0; case ETMSQ31EVR: *val = etm_read(ETMSQ31EVR); return 0; case ETMSQ32EVR: *val = etm_read(ETMSQ32EVR); return 0; case ETMSQ13EVR: *val = etm_read(ETMSQ13EVR); return 0; case ETMSQR: *val = etm_read(ETMSQR); return 0; case ETMEXTOUTEVRn(0): *val = etm_read(ETMEXTOUTEVR0); return 0; case ETMEXTOUTEVRn(1): *val = etm_read(ETMEXTOUTEVR1); return 0; case ETMEXTOUTEVRn(2): *val = etm_read(ETMEXTOUTEVR2); return 0; case ETMEXTOUTEVRn(3): *val = etm_read(ETMEXTOUTEVR3); return 0; case ETMCIDCVRn(0): *val = etm_read(ETMCIDCVR0); return 0; case ETMCIDCVRn(1): *val = etm_read(ETMCIDCVR1); return 0; case ETMCIDCVRn(2): *val = etm_read(ETMCIDCVR2); return 0; case ETMCIDCMR: *val = etm_read(ETMCIDCMR); return 0; case ETMIMPSPEC0: *val = etm_read(ETMIMPSPEC0); return 0; case ETMIMPSPEC1: *val = etm_read(ETMIMPSPEC1); return 0; case ETMIMPSPEC2: *val = etm_read(ETMIMPSPEC2); return 0; case ETMIMPSPEC3: *val = etm_read(ETMIMPSPEC3); return 0; case ETMIMPSPEC4: *val = etm_read(ETMIMPSPEC4); return 0; case ETMIMPSPEC5: *val = etm_read(ETMIMPSPEC5); return 0; case ETMIMPSPEC6: *val = etm_read(ETMIMPSPEC6); return 0; case ETMIMPSPEC7: *val = etm_read(ETMIMPSPEC7); return 0; case ETMSYNCFR: *val = etm_read(ETMSYNCFR); return 0; case ETMIDR: *val = etm_read(ETMIDR); return 0; case ETMCCER: *val = etm_read(ETMCCER); return 0; case ETMEXTINSELR: *val = etm_read(ETMEXTINSELR); return 0; case ETMTESSEICR: *val = etm_read(ETMTESSEICR); return 0; case ETMEIBCR: *val = etm_read(ETMEIBCR); return 0; case ETMTSEVR: *val = etm_read(ETMTSEVR); return 0; case ETMAUXCR: *val = etm_read(ETMAUXCR); return 0; case ETMTRACEIDR: *val = etm_read(ETMTRACEIDR); return 0; case ETMVMIDCVR: *val = etm_read(ETMVMIDCVR); return 0; case ETMOSLSR: *val = etm_read(ETMOSLSR); return 0; case ETMOSSRR: *val = etm_read(ETMOSSRR); return 0; case ETMPDCR: *val = etm_read(ETMPDCR); return 0; case ETMPDSR: *val = etm_read(ETMPDSR); return 0; default: *val = 0; return -EINVAL; } } int etm_writel_cp14(u32 reg, u32 val) { switch (reg) { case ETMCR: etm_write(val, ETMCR); break; case ETMTRIGGER: etm_write(val, ETMTRIGGER); break; case ETMSR: etm_write(val, ETMSR); break; case ETMTSSCR: etm_write(val, ETMTSSCR); break; case ETMTEEVR: etm_write(val, ETMTEEVR); break; case ETMTECR1: etm_write(val, ETMTECR1); break; case ETMFFLR: etm_write(val, ETMFFLR); break; case ETMACVRn(0): etm_write(val, ETMACVR0); break; case ETMACVRn(1): etm_write(val, ETMACVR1); break; case ETMACVRn(2): etm_write(val, ETMACVR2); break; case ETMACVRn(3): etm_write(val, ETMACVR3); break; case ETMACVRn(4): etm_write(val, ETMACVR4); break; case ETMACVRn(5): etm_write(val, ETMACVR5); break; case ETMACVRn(6): etm_write(val, ETMACVR6); break; case ETMACVRn(7): etm_write(val, ETMACVR7); break; case ETMACVRn(8): etm_write(val, ETMACVR8); break; case ETMACVRn(9): etm_write(val, ETMACVR9); break; case ETMACVRn(10): etm_write(val, ETMACVR10); break; case ETMACVRn(11): etm_write(val, ETMACVR11); break; case ETMACVRn(12): etm_write(val, ETMACVR12); break; case ETMACVRn(13): etm_write(val, ETMACVR13); break; case ETMACVRn(14): etm_write(val, ETMACVR14); break; case ETMACVRn(15): etm_write(val, ETMACVR15); break; case ETMACTRn(0): etm_write(val, ETMACTR0); break; case ETMACTRn(1): etm_write(val, ETMACTR1); break; case ETMACTRn(2): etm_write(val, ETMACTR2); break; case ETMACTRn(3): etm_write(val, ETMACTR3); break; case ETMACTRn(4): etm_write(val, ETMACTR4); break; case ETMACTRn(5): etm_write(val, ETMACTR5); break; case ETMACTRn(6): etm_write(val, ETMACTR6); break; case ETMACTRn(7): etm_write(val, ETMACTR7); break; case ETMACTRn(8): etm_write(val, ETMACTR8); break; case ETMACTRn(9): etm_write(val, ETMACTR9); break; case ETMACTRn(10): etm_write(val, ETMACTR10); break; case ETMACTRn(11): etm_write(val, ETMACTR11); break; case ETMACTRn(12): etm_write(val, ETMACTR12); break; case ETMACTRn(13): etm_write(val, ETMACTR13); break; case ETMACTRn(14): etm_write(val, ETMACTR14); break; case ETMACTRn(15): etm_write(val, ETMACTR15); break; case ETMCNTRLDVRn(0): etm_write(val, ETMCNTRLDVR0); break; case ETMCNTRLDVRn(1): etm_write(val, ETMCNTRLDVR1); break; case ETMCNTRLDVRn(2): etm_write(val, ETMCNTRLDVR2); break; case ETMCNTRLDVRn(3): etm_write(val, ETMCNTRLDVR3); break; case ETMCNTENRn(0): etm_write(val, ETMCNTENR0); break; case ETMCNTENRn(1): etm_write(val, ETMCNTENR1); break; case ETMCNTENRn(2): etm_write(val, ETMCNTENR2); break; case ETMCNTENRn(3): etm_write(val, ETMCNTENR3); break; case ETMCNTRLDEVRn(0): etm_write(val, ETMCNTRLDEVR0); break; case ETMCNTRLDEVRn(1): etm_write(val, ETMCNTRLDEVR1); break; case ETMCNTRLDEVRn(2): etm_write(val, ETMCNTRLDEVR2); break; case ETMCNTRLDEVRn(3): etm_write(val, ETMCNTRLDEVR3); break; case ETMCNTVRn(0): etm_write(val, ETMCNTVR0); break; case ETMCNTVRn(1): etm_write(val, ETMCNTVR1); break; case ETMCNTVRn(2): etm_write(val, ETMCNTVR2); break; case ETMCNTVRn(3): etm_write(val, ETMCNTVR3); break; case ETMSQ12EVR: etm_write(val, ETMSQ12EVR); break; case ETMSQ21EVR: etm_write(val, ETMSQ21EVR); break; case ETMSQ23EVR: etm_write(val, ETMSQ23EVR); break; case ETMSQ31EVR: etm_write(val, ETMSQ31EVR); break; case ETMSQ32EVR: etm_write(val, ETMSQ32EVR); break; case ETMSQ13EVR: etm_write(val, ETMSQ13EVR); break; case ETMSQR: etm_write(val, ETMSQR); break; case ETMEXTOUTEVRn(0): etm_write(val, ETMEXTOUTEVR0); break; case ETMEXTOUTEVRn(1): etm_write(val, ETMEXTOUTEVR1); break; case ETMEXTOUTEVRn(2): etm_write(val, ETMEXTOUTEVR2); break; case ETMEXTOUTEVRn(3): etm_write(val, ETMEXTOUTEVR3); break; case ETMCIDCVRn(0): etm_write(val, ETMCIDCVR0); break; case ETMCIDCVRn(1): etm_write(val, ETMCIDCVR1); break; case ETMCIDCVRn(2): etm_write(val, ETMCIDCVR2); break; case ETMCIDCMR: etm_write(val, ETMCIDCMR); break; case ETMIMPSPEC0: etm_write(val, ETMIMPSPEC0); break; case ETMIMPSPEC1: etm_write(val, ETMIMPSPEC1); break; case ETMIMPSPEC2: etm_write(val, ETMIMPSPEC2); break; case ETMIMPSPEC3: etm_write(val, ETMIMPSPEC3); break; case ETMIMPSPEC4: etm_write(val, ETMIMPSPEC4); break; case ETMIMPSPEC5: etm_write(val, ETMIMPSPEC5); break; case ETMIMPSPEC6: etm_write(val, ETMIMPSPEC6); break; case ETMIMPSPEC7: etm_write(val, ETMIMPSPEC7); break; case ETMSYNCFR: etm_write(val, ETMSYNCFR); break; case ETMEXTINSELR: etm_write(val, ETMEXTINSELR); break; case ETMTESSEICR: etm_write(val, ETMTESSEICR); break; case ETMEIBCR: etm_write(val, ETMEIBCR); break; case ETMTSEVR: etm_write(val, ETMTSEVR); break; case ETMAUXCR: etm_write(val, ETMAUXCR); break; case ETMTRACEIDR: etm_write(val, ETMTRACEIDR); break; case ETMVMIDCVR: etm_write(val, ETMVMIDCVR); break; case ETMOSLAR: etm_write(val, ETMOSLAR); break; case ETMOSSRR: etm_write(val, ETMOSSRR); break; case ETMPDCR: etm_write(val, ETMPDCR); break; case ETMPDSR: etm_write(val, ETMPDSR); break; default: return -EINVAL; } return 0; }