2018-05-09 21:06:04 +03:00
// SPDX-License-Identifier: GPL-2.0
/*
* Copyright ( c ) 2012 , The Linux Foundation . All rights reserved .
2014-11-03 21:07:41 +03:00
*/
# 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 ;
}