cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

coresight-etm-cp14.c (11453B)


      1// SPDX-License-Identifier: GPL-2.0
      2/*
      3 * Copyright (c) 2012, The Linux Foundation. All rights reserved.
      4 */
      5
      6#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
      7
      8#include <linux/kernel.h>
      9#include <linux/types.h>
     10#include <linux/bug.h>
     11#include <asm/hardware/cp14.h>
     12
     13#include "coresight-etm.h"
     14
     15int etm_readl_cp14(u32 reg, unsigned int *val)
     16{
     17	switch (reg) {
     18	case ETMCR:
     19		*val = etm_read(ETMCR);
     20		return 0;
     21	case ETMCCR:
     22		*val = etm_read(ETMCCR);
     23		return 0;
     24	case ETMTRIGGER:
     25		*val = etm_read(ETMTRIGGER);
     26		return 0;
     27	case ETMSR:
     28		*val = etm_read(ETMSR);
     29		return 0;
     30	case ETMSCR:
     31		*val = etm_read(ETMSCR);
     32		return 0;
     33	case ETMTSSCR:
     34		*val = etm_read(ETMTSSCR);
     35		return 0;
     36	case ETMTEEVR:
     37		*val = etm_read(ETMTEEVR);
     38		return 0;
     39	case ETMTECR1:
     40		*val = etm_read(ETMTECR1);
     41		return 0;
     42	case ETMFFLR:
     43		*val = etm_read(ETMFFLR);
     44		return 0;
     45	case ETMACVRn(0):
     46		*val = etm_read(ETMACVR0);
     47		return 0;
     48	case ETMACVRn(1):
     49		*val = etm_read(ETMACVR1);
     50		return 0;
     51	case ETMACVRn(2):
     52		*val = etm_read(ETMACVR2);
     53		return 0;
     54	case ETMACVRn(3):
     55		*val = etm_read(ETMACVR3);
     56		return 0;
     57	case ETMACVRn(4):
     58		*val = etm_read(ETMACVR4);
     59		return 0;
     60	case ETMACVRn(5):
     61		*val = etm_read(ETMACVR5);
     62		return 0;
     63	case ETMACVRn(6):
     64		*val = etm_read(ETMACVR6);
     65		return 0;
     66	case ETMACVRn(7):
     67		*val = etm_read(ETMACVR7);
     68		return 0;
     69	case ETMACVRn(8):
     70		*val = etm_read(ETMACVR8);
     71		return 0;
     72	case ETMACVRn(9):
     73		*val = etm_read(ETMACVR9);
     74		return 0;
     75	case ETMACVRn(10):
     76		*val = etm_read(ETMACVR10);
     77		return 0;
     78	case ETMACVRn(11):
     79		*val = etm_read(ETMACVR11);
     80		return 0;
     81	case ETMACVRn(12):
     82		*val = etm_read(ETMACVR12);
     83		return 0;
     84	case ETMACVRn(13):
     85		*val = etm_read(ETMACVR13);
     86		return 0;
     87	case ETMACVRn(14):
     88		*val = etm_read(ETMACVR14);
     89		return 0;
     90	case ETMACVRn(15):
     91		*val = etm_read(ETMACVR15);
     92		return 0;
     93	case ETMACTRn(0):
     94		*val = etm_read(ETMACTR0);
     95		return 0;
     96	case ETMACTRn(1):
     97		*val = etm_read(ETMACTR1);
     98		return 0;
     99	case ETMACTRn(2):
    100		*val = etm_read(ETMACTR2);
    101		return 0;
    102	case ETMACTRn(3):
    103		*val = etm_read(ETMACTR3);
    104		return 0;
    105	case ETMACTRn(4):
    106		*val = etm_read(ETMACTR4);
    107		return 0;
    108	case ETMACTRn(5):
    109		*val = etm_read(ETMACTR5);
    110		return 0;
    111	case ETMACTRn(6):
    112		*val = etm_read(ETMACTR6);
    113		return 0;
    114	case ETMACTRn(7):
    115		*val = etm_read(ETMACTR7);
    116		return 0;
    117	case ETMACTRn(8):
    118		*val = etm_read(ETMACTR8);
    119		return 0;
    120	case ETMACTRn(9):
    121		*val = etm_read(ETMACTR9);
    122		return 0;
    123	case ETMACTRn(10):
    124		*val = etm_read(ETMACTR10);
    125		return 0;
    126	case ETMACTRn(11):
    127		*val = etm_read(ETMACTR11);
    128		return 0;
    129	case ETMACTRn(12):
    130		*val = etm_read(ETMACTR12);
    131		return 0;
    132	case ETMACTRn(13):
    133		*val = etm_read(ETMACTR13);
    134		return 0;
    135	case ETMACTRn(14):
    136		*val = etm_read(ETMACTR14);
    137		return 0;
    138	case ETMACTRn(15):
    139		*val = etm_read(ETMACTR15);
    140		return 0;
    141	case ETMCNTRLDVRn(0):
    142		*val = etm_read(ETMCNTRLDVR0);
    143		return 0;
    144	case ETMCNTRLDVRn(1):
    145		*val = etm_read(ETMCNTRLDVR1);
    146		return 0;
    147	case ETMCNTRLDVRn(2):
    148		*val = etm_read(ETMCNTRLDVR2);
    149		return 0;
    150	case ETMCNTRLDVRn(3):
    151		*val = etm_read(ETMCNTRLDVR3);
    152		return 0;
    153	case ETMCNTENRn(0):
    154		*val = etm_read(ETMCNTENR0);
    155		return 0;
    156	case ETMCNTENRn(1):
    157		*val = etm_read(ETMCNTENR1);
    158		return 0;
    159	case ETMCNTENRn(2):
    160		*val = etm_read(ETMCNTENR2);
    161		return 0;
    162	case ETMCNTENRn(3):
    163		*val = etm_read(ETMCNTENR3);
    164		return 0;
    165	case ETMCNTRLDEVRn(0):
    166		*val = etm_read(ETMCNTRLDEVR0);
    167		return 0;
    168	case ETMCNTRLDEVRn(1):
    169		*val = etm_read(ETMCNTRLDEVR1);
    170		return 0;
    171	case ETMCNTRLDEVRn(2):
    172		*val = etm_read(ETMCNTRLDEVR2);
    173		return 0;
    174	case ETMCNTRLDEVRn(3):
    175		*val = etm_read(ETMCNTRLDEVR3);
    176		return 0;
    177	case ETMCNTVRn(0):
    178		*val = etm_read(ETMCNTVR0);
    179		return 0;
    180	case ETMCNTVRn(1):
    181		*val = etm_read(ETMCNTVR1);
    182		return 0;
    183	case ETMCNTVRn(2):
    184		*val = etm_read(ETMCNTVR2);
    185		return 0;
    186	case ETMCNTVRn(3):
    187		*val = etm_read(ETMCNTVR3);
    188		return 0;
    189	case ETMSQ12EVR:
    190		*val = etm_read(ETMSQ12EVR);
    191		return 0;
    192	case ETMSQ21EVR:
    193		*val = etm_read(ETMSQ21EVR);
    194		return 0;
    195	case ETMSQ23EVR:
    196		*val = etm_read(ETMSQ23EVR);
    197		return 0;
    198	case ETMSQ31EVR:
    199		*val = etm_read(ETMSQ31EVR);
    200		return 0;
    201	case ETMSQ32EVR:
    202		*val = etm_read(ETMSQ32EVR);
    203		return 0;
    204	case ETMSQ13EVR:
    205		*val = etm_read(ETMSQ13EVR);
    206		return 0;
    207	case ETMSQR:
    208		*val = etm_read(ETMSQR);
    209		return 0;
    210	case ETMEXTOUTEVRn(0):
    211		*val = etm_read(ETMEXTOUTEVR0);
    212		return 0;
    213	case ETMEXTOUTEVRn(1):
    214		*val = etm_read(ETMEXTOUTEVR1);
    215		return 0;
    216	case ETMEXTOUTEVRn(2):
    217		*val = etm_read(ETMEXTOUTEVR2);
    218		return 0;
    219	case ETMEXTOUTEVRn(3):
    220		*val = etm_read(ETMEXTOUTEVR3);
    221		return 0;
    222	case ETMCIDCVRn(0):
    223		*val = etm_read(ETMCIDCVR0);
    224		return 0;
    225	case ETMCIDCVRn(1):
    226		*val = etm_read(ETMCIDCVR1);
    227		return 0;
    228	case ETMCIDCVRn(2):
    229		*val = etm_read(ETMCIDCVR2);
    230		return 0;
    231	case ETMCIDCMR:
    232		*val = etm_read(ETMCIDCMR);
    233		return 0;
    234	case ETMIMPSPEC0:
    235		*val = etm_read(ETMIMPSPEC0);
    236		return 0;
    237	case ETMIMPSPEC1:
    238		*val = etm_read(ETMIMPSPEC1);
    239		return 0;
    240	case ETMIMPSPEC2:
    241		*val = etm_read(ETMIMPSPEC2);
    242		return 0;
    243	case ETMIMPSPEC3:
    244		*val = etm_read(ETMIMPSPEC3);
    245		return 0;
    246	case ETMIMPSPEC4:
    247		*val = etm_read(ETMIMPSPEC4);
    248		return 0;
    249	case ETMIMPSPEC5:
    250		*val = etm_read(ETMIMPSPEC5);
    251		return 0;
    252	case ETMIMPSPEC6:
    253		*val = etm_read(ETMIMPSPEC6);
    254		return 0;
    255	case ETMIMPSPEC7:
    256		*val = etm_read(ETMIMPSPEC7);
    257		return 0;
    258	case ETMSYNCFR:
    259		*val = etm_read(ETMSYNCFR);
    260		return 0;
    261	case ETMIDR:
    262		*val = etm_read(ETMIDR);
    263		return 0;
    264	case ETMCCER:
    265		*val = etm_read(ETMCCER);
    266		return 0;
    267	case ETMEXTINSELR:
    268		*val = etm_read(ETMEXTINSELR);
    269		return 0;
    270	case ETMTESSEICR:
    271		*val = etm_read(ETMTESSEICR);
    272		return 0;
    273	case ETMEIBCR:
    274		*val = etm_read(ETMEIBCR);
    275		return 0;
    276	case ETMTSEVR:
    277		*val = etm_read(ETMTSEVR);
    278		return 0;
    279	case ETMAUXCR:
    280		*val = etm_read(ETMAUXCR);
    281		return 0;
    282	case ETMTRACEIDR:
    283		*val = etm_read(ETMTRACEIDR);
    284		return 0;
    285	case ETMVMIDCVR:
    286		*val = etm_read(ETMVMIDCVR);
    287		return 0;
    288	case ETMOSLSR:
    289		*val = etm_read(ETMOSLSR);
    290		return 0;
    291	case ETMOSSRR:
    292		*val = etm_read(ETMOSSRR);
    293		return 0;
    294	case ETMPDCR:
    295		*val = etm_read(ETMPDCR);
    296		return 0;
    297	case ETMPDSR:
    298		*val = etm_read(ETMPDSR);
    299		return 0;
    300	default:
    301		*val = 0;
    302		return -EINVAL;
    303	}
    304}
    305
    306int etm_writel_cp14(u32 reg, u32 val)
    307{
    308	switch (reg) {
    309	case ETMCR:
    310		etm_write(val, ETMCR);
    311		break;
    312	case ETMTRIGGER:
    313		etm_write(val, ETMTRIGGER);
    314		break;
    315	case ETMSR:
    316		etm_write(val, ETMSR);
    317		break;
    318	case ETMTSSCR:
    319		etm_write(val, ETMTSSCR);
    320		break;
    321	case ETMTEEVR:
    322		etm_write(val, ETMTEEVR);
    323		break;
    324	case ETMTECR1:
    325		etm_write(val, ETMTECR1);
    326		break;
    327	case ETMFFLR:
    328		etm_write(val, ETMFFLR);
    329		break;
    330	case ETMACVRn(0):
    331		etm_write(val, ETMACVR0);
    332		break;
    333	case ETMACVRn(1):
    334		etm_write(val, ETMACVR1);
    335		break;
    336	case ETMACVRn(2):
    337		etm_write(val, ETMACVR2);
    338		break;
    339	case ETMACVRn(3):
    340		etm_write(val, ETMACVR3);
    341		break;
    342	case ETMACVRn(4):
    343		etm_write(val, ETMACVR4);
    344		break;
    345	case ETMACVRn(5):
    346		etm_write(val, ETMACVR5);
    347		break;
    348	case ETMACVRn(6):
    349		etm_write(val, ETMACVR6);
    350		break;
    351	case ETMACVRn(7):
    352		etm_write(val, ETMACVR7);
    353		break;
    354	case ETMACVRn(8):
    355		etm_write(val, ETMACVR8);
    356		break;
    357	case ETMACVRn(9):
    358		etm_write(val, ETMACVR9);
    359		break;
    360	case ETMACVRn(10):
    361		etm_write(val, ETMACVR10);
    362		break;
    363	case ETMACVRn(11):
    364		etm_write(val, ETMACVR11);
    365		break;
    366	case ETMACVRn(12):
    367		etm_write(val, ETMACVR12);
    368		break;
    369	case ETMACVRn(13):
    370		etm_write(val, ETMACVR13);
    371		break;
    372	case ETMACVRn(14):
    373		etm_write(val, ETMACVR14);
    374		break;
    375	case ETMACVRn(15):
    376		etm_write(val, ETMACVR15);
    377		break;
    378	case ETMACTRn(0):
    379		etm_write(val, ETMACTR0);
    380		break;
    381	case ETMACTRn(1):
    382		etm_write(val, ETMACTR1);
    383		break;
    384	case ETMACTRn(2):
    385		etm_write(val, ETMACTR2);
    386		break;
    387	case ETMACTRn(3):
    388		etm_write(val, ETMACTR3);
    389		break;
    390	case ETMACTRn(4):
    391		etm_write(val, ETMACTR4);
    392		break;
    393	case ETMACTRn(5):
    394		etm_write(val, ETMACTR5);
    395		break;
    396	case ETMACTRn(6):
    397		etm_write(val, ETMACTR6);
    398		break;
    399	case ETMACTRn(7):
    400		etm_write(val, ETMACTR7);
    401		break;
    402	case ETMACTRn(8):
    403		etm_write(val, ETMACTR8);
    404		break;
    405	case ETMACTRn(9):
    406		etm_write(val, ETMACTR9);
    407		break;
    408	case ETMACTRn(10):
    409		etm_write(val, ETMACTR10);
    410		break;
    411	case ETMACTRn(11):
    412		etm_write(val, ETMACTR11);
    413		break;
    414	case ETMACTRn(12):
    415		etm_write(val, ETMACTR12);
    416		break;
    417	case ETMACTRn(13):
    418		etm_write(val, ETMACTR13);
    419		break;
    420	case ETMACTRn(14):
    421		etm_write(val, ETMACTR14);
    422		break;
    423	case ETMACTRn(15):
    424		etm_write(val, ETMACTR15);
    425		break;
    426	case ETMCNTRLDVRn(0):
    427		etm_write(val, ETMCNTRLDVR0);
    428		break;
    429	case ETMCNTRLDVRn(1):
    430		etm_write(val, ETMCNTRLDVR1);
    431		break;
    432	case ETMCNTRLDVRn(2):
    433		etm_write(val, ETMCNTRLDVR2);
    434		break;
    435	case ETMCNTRLDVRn(3):
    436		etm_write(val, ETMCNTRLDVR3);
    437		break;
    438	case ETMCNTENRn(0):
    439		etm_write(val, ETMCNTENR0);
    440		break;
    441	case ETMCNTENRn(1):
    442		etm_write(val, ETMCNTENR1);
    443		break;
    444	case ETMCNTENRn(2):
    445		etm_write(val, ETMCNTENR2);
    446		break;
    447	case ETMCNTENRn(3):
    448		etm_write(val, ETMCNTENR3);
    449		break;
    450	case ETMCNTRLDEVRn(0):
    451		etm_write(val, ETMCNTRLDEVR0);
    452		break;
    453	case ETMCNTRLDEVRn(1):
    454		etm_write(val, ETMCNTRLDEVR1);
    455		break;
    456	case ETMCNTRLDEVRn(2):
    457		etm_write(val, ETMCNTRLDEVR2);
    458		break;
    459	case ETMCNTRLDEVRn(3):
    460		etm_write(val, ETMCNTRLDEVR3);
    461		break;
    462	case ETMCNTVRn(0):
    463		etm_write(val, ETMCNTVR0);
    464		break;
    465	case ETMCNTVRn(1):
    466		etm_write(val, ETMCNTVR1);
    467		break;
    468	case ETMCNTVRn(2):
    469		etm_write(val, ETMCNTVR2);
    470		break;
    471	case ETMCNTVRn(3):
    472		etm_write(val, ETMCNTVR3);
    473		break;
    474	case ETMSQ12EVR:
    475		etm_write(val, ETMSQ12EVR);
    476		break;
    477	case ETMSQ21EVR:
    478		etm_write(val, ETMSQ21EVR);
    479		break;
    480	case ETMSQ23EVR:
    481		etm_write(val, ETMSQ23EVR);
    482		break;
    483	case ETMSQ31EVR:
    484		etm_write(val, ETMSQ31EVR);
    485		break;
    486	case ETMSQ32EVR:
    487		etm_write(val, ETMSQ32EVR);
    488		break;
    489	case ETMSQ13EVR:
    490		etm_write(val, ETMSQ13EVR);
    491		break;
    492	case ETMSQR:
    493		etm_write(val, ETMSQR);
    494		break;
    495	case ETMEXTOUTEVRn(0):
    496		etm_write(val, ETMEXTOUTEVR0);
    497		break;
    498	case ETMEXTOUTEVRn(1):
    499		etm_write(val, ETMEXTOUTEVR1);
    500		break;
    501	case ETMEXTOUTEVRn(2):
    502		etm_write(val, ETMEXTOUTEVR2);
    503		break;
    504	case ETMEXTOUTEVRn(3):
    505		etm_write(val, ETMEXTOUTEVR3);
    506		break;
    507	case ETMCIDCVRn(0):
    508		etm_write(val, ETMCIDCVR0);
    509		break;
    510	case ETMCIDCVRn(1):
    511		etm_write(val, ETMCIDCVR1);
    512		break;
    513	case ETMCIDCVRn(2):
    514		etm_write(val, ETMCIDCVR2);
    515		break;
    516	case ETMCIDCMR:
    517		etm_write(val, ETMCIDCMR);
    518		break;
    519	case ETMIMPSPEC0:
    520		etm_write(val, ETMIMPSPEC0);
    521		break;
    522	case ETMIMPSPEC1:
    523		etm_write(val, ETMIMPSPEC1);
    524		break;
    525	case ETMIMPSPEC2:
    526		etm_write(val, ETMIMPSPEC2);
    527		break;
    528	case ETMIMPSPEC3:
    529		etm_write(val, ETMIMPSPEC3);
    530		break;
    531	case ETMIMPSPEC4:
    532		etm_write(val, ETMIMPSPEC4);
    533		break;
    534	case ETMIMPSPEC5:
    535		etm_write(val, ETMIMPSPEC5);
    536		break;
    537	case ETMIMPSPEC6:
    538		etm_write(val, ETMIMPSPEC6);
    539		break;
    540	case ETMIMPSPEC7:
    541		etm_write(val, ETMIMPSPEC7);
    542		break;
    543	case ETMSYNCFR:
    544		etm_write(val, ETMSYNCFR);
    545		break;
    546	case ETMEXTINSELR:
    547		etm_write(val, ETMEXTINSELR);
    548		break;
    549	case ETMTESSEICR:
    550		etm_write(val, ETMTESSEICR);
    551		break;
    552	case ETMEIBCR:
    553		etm_write(val, ETMEIBCR);
    554		break;
    555	case ETMTSEVR:
    556		etm_write(val, ETMTSEVR);
    557		break;
    558	case ETMAUXCR:
    559		etm_write(val, ETMAUXCR);
    560		break;
    561	case ETMTRACEIDR:
    562		etm_write(val, ETMTRACEIDR);
    563		break;
    564	case ETMVMIDCVR:
    565		etm_write(val, ETMVMIDCVR);
    566		break;
    567	case ETMOSLAR:
    568		etm_write(val, ETMOSLAR);
    569		break;
    570	case ETMOSSRR:
    571		etm_write(val, ETMOSSRR);
    572		break;
    573	case ETMPDCR:
    574		etm_write(val, ETMPDCR);
    575		break;
    576	case ETMPDSR:
    577		etm_write(val, ETMPDSR);
    578		break;
    579	default:
    580		return -EINVAL;
    581	}
    582
    583	return 0;
    584}