Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: GPL-2.0
0002 /*
0003  * Copyright (c) 2012, The Linux Foundation. All rights reserved.
0004  */
0005 
0006 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
0007 
0008 #include <linux/kernel.h>
0009 #include <linux/types.h>
0010 #include <linux/bug.h>
0011 #include <asm/hardware/cp14.h>
0012 
0013 #include "coresight-etm.h"
0014 
0015 int etm_readl_cp14(u32 reg, unsigned int *val)
0016 {
0017     switch (reg) {
0018     case ETMCR:
0019         *val = etm_read(ETMCR);
0020         return 0;
0021     case ETMCCR:
0022         *val = etm_read(ETMCCR);
0023         return 0;
0024     case ETMTRIGGER:
0025         *val = etm_read(ETMTRIGGER);
0026         return 0;
0027     case ETMSR:
0028         *val = etm_read(ETMSR);
0029         return 0;
0030     case ETMSCR:
0031         *val = etm_read(ETMSCR);
0032         return 0;
0033     case ETMTSSCR:
0034         *val = etm_read(ETMTSSCR);
0035         return 0;
0036     case ETMTEEVR:
0037         *val = etm_read(ETMTEEVR);
0038         return 0;
0039     case ETMTECR1:
0040         *val = etm_read(ETMTECR1);
0041         return 0;
0042     case ETMFFLR:
0043         *val = etm_read(ETMFFLR);
0044         return 0;
0045     case ETMACVRn(0):
0046         *val = etm_read(ETMACVR0);
0047         return 0;
0048     case ETMACVRn(1):
0049         *val = etm_read(ETMACVR1);
0050         return 0;
0051     case ETMACVRn(2):
0052         *val = etm_read(ETMACVR2);
0053         return 0;
0054     case ETMACVRn(3):
0055         *val = etm_read(ETMACVR3);
0056         return 0;
0057     case ETMACVRn(4):
0058         *val = etm_read(ETMACVR4);
0059         return 0;
0060     case ETMACVRn(5):
0061         *val = etm_read(ETMACVR5);
0062         return 0;
0063     case ETMACVRn(6):
0064         *val = etm_read(ETMACVR6);
0065         return 0;
0066     case ETMACVRn(7):
0067         *val = etm_read(ETMACVR7);
0068         return 0;
0069     case ETMACVRn(8):
0070         *val = etm_read(ETMACVR8);
0071         return 0;
0072     case ETMACVRn(9):
0073         *val = etm_read(ETMACVR9);
0074         return 0;
0075     case ETMACVRn(10):
0076         *val = etm_read(ETMACVR10);
0077         return 0;
0078     case ETMACVRn(11):
0079         *val = etm_read(ETMACVR11);
0080         return 0;
0081     case ETMACVRn(12):
0082         *val = etm_read(ETMACVR12);
0083         return 0;
0084     case ETMACVRn(13):
0085         *val = etm_read(ETMACVR13);
0086         return 0;
0087     case ETMACVRn(14):
0088         *val = etm_read(ETMACVR14);
0089         return 0;
0090     case ETMACVRn(15):
0091         *val = etm_read(ETMACVR15);
0092         return 0;
0093     case ETMACTRn(0):
0094         *val = etm_read(ETMACTR0);
0095         return 0;
0096     case ETMACTRn(1):
0097         *val = etm_read(ETMACTR1);
0098         return 0;
0099     case ETMACTRn(2):
0100         *val = etm_read(ETMACTR2);
0101         return 0;
0102     case ETMACTRn(3):
0103         *val = etm_read(ETMACTR3);
0104         return 0;
0105     case ETMACTRn(4):
0106         *val = etm_read(ETMACTR4);
0107         return 0;
0108     case ETMACTRn(5):
0109         *val = etm_read(ETMACTR5);
0110         return 0;
0111     case ETMACTRn(6):
0112         *val = etm_read(ETMACTR6);
0113         return 0;
0114     case ETMACTRn(7):
0115         *val = etm_read(ETMACTR7);
0116         return 0;
0117     case ETMACTRn(8):
0118         *val = etm_read(ETMACTR8);
0119         return 0;
0120     case ETMACTRn(9):
0121         *val = etm_read(ETMACTR9);
0122         return 0;
0123     case ETMACTRn(10):
0124         *val = etm_read(ETMACTR10);
0125         return 0;
0126     case ETMACTRn(11):
0127         *val = etm_read(ETMACTR11);
0128         return 0;
0129     case ETMACTRn(12):
0130         *val = etm_read(ETMACTR12);
0131         return 0;
0132     case ETMACTRn(13):
0133         *val = etm_read(ETMACTR13);
0134         return 0;
0135     case ETMACTRn(14):
0136         *val = etm_read(ETMACTR14);
0137         return 0;
0138     case ETMACTRn(15):
0139         *val = etm_read(ETMACTR15);
0140         return 0;
0141     case ETMCNTRLDVRn(0):
0142         *val = etm_read(ETMCNTRLDVR0);
0143         return 0;
0144     case ETMCNTRLDVRn(1):
0145         *val = etm_read(ETMCNTRLDVR1);
0146         return 0;
0147     case ETMCNTRLDVRn(2):
0148         *val = etm_read(ETMCNTRLDVR2);
0149         return 0;
0150     case ETMCNTRLDVRn(3):
0151         *val = etm_read(ETMCNTRLDVR3);
0152         return 0;
0153     case ETMCNTENRn(0):
0154         *val = etm_read(ETMCNTENR0);
0155         return 0;
0156     case ETMCNTENRn(1):
0157         *val = etm_read(ETMCNTENR1);
0158         return 0;
0159     case ETMCNTENRn(2):
0160         *val = etm_read(ETMCNTENR2);
0161         return 0;
0162     case ETMCNTENRn(3):
0163         *val = etm_read(ETMCNTENR3);
0164         return 0;
0165     case ETMCNTRLDEVRn(0):
0166         *val = etm_read(ETMCNTRLDEVR0);
0167         return 0;
0168     case ETMCNTRLDEVRn(1):
0169         *val = etm_read(ETMCNTRLDEVR1);
0170         return 0;
0171     case ETMCNTRLDEVRn(2):
0172         *val = etm_read(ETMCNTRLDEVR2);
0173         return 0;
0174     case ETMCNTRLDEVRn(3):
0175         *val = etm_read(ETMCNTRLDEVR3);
0176         return 0;
0177     case ETMCNTVRn(0):
0178         *val = etm_read(ETMCNTVR0);
0179         return 0;
0180     case ETMCNTVRn(1):
0181         *val = etm_read(ETMCNTVR1);
0182         return 0;
0183     case ETMCNTVRn(2):
0184         *val = etm_read(ETMCNTVR2);
0185         return 0;
0186     case ETMCNTVRn(3):
0187         *val = etm_read(ETMCNTVR3);
0188         return 0;
0189     case ETMSQ12EVR:
0190         *val = etm_read(ETMSQ12EVR);
0191         return 0;
0192     case ETMSQ21EVR:
0193         *val = etm_read(ETMSQ21EVR);
0194         return 0;
0195     case ETMSQ23EVR:
0196         *val = etm_read(ETMSQ23EVR);
0197         return 0;
0198     case ETMSQ31EVR:
0199         *val = etm_read(ETMSQ31EVR);
0200         return 0;
0201     case ETMSQ32EVR:
0202         *val = etm_read(ETMSQ32EVR);
0203         return 0;
0204     case ETMSQ13EVR:
0205         *val = etm_read(ETMSQ13EVR);
0206         return 0;
0207     case ETMSQR:
0208         *val = etm_read(ETMSQR);
0209         return 0;
0210     case ETMEXTOUTEVRn(0):
0211         *val = etm_read(ETMEXTOUTEVR0);
0212         return 0;
0213     case ETMEXTOUTEVRn(1):
0214         *val = etm_read(ETMEXTOUTEVR1);
0215         return 0;
0216     case ETMEXTOUTEVRn(2):
0217         *val = etm_read(ETMEXTOUTEVR2);
0218         return 0;
0219     case ETMEXTOUTEVRn(3):
0220         *val = etm_read(ETMEXTOUTEVR3);
0221         return 0;
0222     case ETMCIDCVRn(0):
0223         *val = etm_read(ETMCIDCVR0);
0224         return 0;
0225     case ETMCIDCVRn(1):
0226         *val = etm_read(ETMCIDCVR1);
0227         return 0;
0228     case ETMCIDCVRn(2):
0229         *val = etm_read(ETMCIDCVR2);
0230         return 0;
0231     case ETMCIDCMR:
0232         *val = etm_read(ETMCIDCMR);
0233         return 0;
0234     case ETMIMPSPEC0:
0235         *val = etm_read(ETMIMPSPEC0);
0236         return 0;
0237     case ETMIMPSPEC1:
0238         *val = etm_read(ETMIMPSPEC1);
0239         return 0;
0240     case ETMIMPSPEC2:
0241         *val = etm_read(ETMIMPSPEC2);
0242         return 0;
0243     case ETMIMPSPEC3:
0244         *val = etm_read(ETMIMPSPEC3);
0245         return 0;
0246     case ETMIMPSPEC4:
0247         *val = etm_read(ETMIMPSPEC4);
0248         return 0;
0249     case ETMIMPSPEC5:
0250         *val = etm_read(ETMIMPSPEC5);
0251         return 0;
0252     case ETMIMPSPEC6:
0253         *val = etm_read(ETMIMPSPEC6);
0254         return 0;
0255     case ETMIMPSPEC7:
0256         *val = etm_read(ETMIMPSPEC7);
0257         return 0;
0258     case ETMSYNCFR:
0259         *val = etm_read(ETMSYNCFR);
0260         return 0;
0261     case ETMIDR:
0262         *val = etm_read(ETMIDR);
0263         return 0;
0264     case ETMCCER:
0265         *val = etm_read(ETMCCER);
0266         return 0;
0267     case ETMEXTINSELR:
0268         *val = etm_read(ETMEXTINSELR);
0269         return 0;
0270     case ETMTESSEICR:
0271         *val = etm_read(ETMTESSEICR);
0272         return 0;
0273     case ETMEIBCR:
0274         *val = etm_read(ETMEIBCR);
0275         return 0;
0276     case ETMTSEVR:
0277         *val = etm_read(ETMTSEVR);
0278         return 0;
0279     case ETMAUXCR:
0280         *val = etm_read(ETMAUXCR);
0281         return 0;
0282     case ETMTRACEIDR:
0283         *val = etm_read(ETMTRACEIDR);
0284         return 0;
0285     case ETMVMIDCVR:
0286         *val = etm_read(ETMVMIDCVR);
0287         return 0;
0288     case ETMOSLSR:
0289         *val = etm_read(ETMOSLSR);
0290         return 0;
0291     case ETMOSSRR:
0292         *val = etm_read(ETMOSSRR);
0293         return 0;
0294     case ETMPDCR:
0295         *val = etm_read(ETMPDCR);
0296         return 0;
0297     case ETMPDSR:
0298         *val = etm_read(ETMPDSR);
0299         return 0;
0300     default:
0301         *val = 0;
0302         return -EINVAL;
0303     }
0304 }
0305 
0306 int etm_writel_cp14(u32 reg, u32 val)
0307 {
0308     switch (reg) {
0309     case ETMCR:
0310         etm_write(val, ETMCR);
0311         break;
0312     case ETMTRIGGER:
0313         etm_write(val, ETMTRIGGER);
0314         break;
0315     case ETMSR:
0316         etm_write(val, ETMSR);
0317         break;
0318     case ETMTSSCR:
0319         etm_write(val, ETMTSSCR);
0320         break;
0321     case ETMTEEVR:
0322         etm_write(val, ETMTEEVR);
0323         break;
0324     case ETMTECR1:
0325         etm_write(val, ETMTECR1);
0326         break;
0327     case ETMFFLR:
0328         etm_write(val, ETMFFLR);
0329         break;
0330     case ETMACVRn(0):
0331         etm_write(val, ETMACVR0);
0332         break;
0333     case ETMACVRn(1):
0334         etm_write(val, ETMACVR1);
0335         break;
0336     case ETMACVRn(2):
0337         etm_write(val, ETMACVR2);
0338         break;
0339     case ETMACVRn(3):
0340         etm_write(val, ETMACVR3);
0341         break;
0342     case ETMACVRn(4):
0343         etm_write(val, ETMACVR4);
0344         break;
0345     case ETMACVRn(5):
0346         etm_write(val, ETMACVR5);
0347         break;
0348     case ETMACVRn(6):
0349         etm_write(val, ETMACVR6);
0350         break;
0351     case ETMACVRn(7):
0352         etm_write(val, ETMACVR7);
0353         break;
0354     case ETMACVRn(8):
0355         etm_write(val, ETMACVR8);
0356         break;
0357     case ETMACVRn(9):
0358         etm_write(val, ETMACVR9);
0359         break;
0360     case ETMACVRn(10):
0361         etm_write(val, ETMACVR10);
0362         break;
0363     case ETMACVRn(11):
0364         etm_write(val, ETMACVR11);
0365         break;
0366     case ETMACVRn(12):
0367         etm_write(val, ETMACVR12);
0368         break;
0369     case ETMACVRn(13):
0370         etm_write(val, ETMACVR13);
0371         break;
0372     case ETMACVRn(14):
0373         etm_write(val, ETMACVR14);
0374         break;
0375     case ETMACVRn(15):
0376         etm_write(val, ETMACVR15);
0377         break;
0378     case ETMACTRn(0):
0379         etm_write(val, ETMACTR0);
0380         break;
0381     case ETMACTRn(1):
0382         etm_write(val, ETMACTR1);
0383         break;
0384     case ETMACTRn(2):
0385         etm_write(val, ETMACTR2);
0386         break;
0387     case ETMACTRn(3):
0388         etm_write(val, ETMACTR3);
0389         break;
0390     case ETMACTRn(4):
0391         etm_write(val, ETMACTR4);
0392         break;
0393     case ETMACTRn(5):
0394         etm_write(val, ETMACTR5);
0395         break;
0396     case ETMACTRn(6):
0397         etm_write(val, ETMACTR6);
0398         break;
0399     case ETMACTRn(7):
0400         etm_write(val, ETMACTR7);
0401         break;
0402     case ETMACTRn(8):
0403         etm_write(val, ETMACTR8);
0404         break;
0405     case ETMACTRn(9):
0406         etm_write(val, ETMACTR9);
0407         break;
0408     case ETMACTRn(10):
0409         etm_write(val, ETMACTR10);
0410         break;
0411     case ETMACTRn(11):
0412         etm_write(val, ETMACTR11);
0413         break;
0414     case ETMACTRn(12):
0415         etm_write(val, ETMACTR12);
0416         break;
0417     case ETMACTRn(13):
0418         etm_write(val, ETMACTR13);
0419         break;
0420     case ETMACTRn(14):
0421         etm_write(val, ETMACTR14);
0422         break;
0423     case ETMACTRn(15):
0424         etm_write(val, ETMACTR15);
0425         break;
0426     case ETMCNTRLDVRn(0):
0427         etm_write(val, ETMCNTRLDVR0);
0428         break;
0429     case ETMCNTRLDVRn(1):
0430         etm_write(val, ETMCNTRLDVR1);
0431         break;
0432     case ETMCNTRLDVRn(2):
0433         etm_write(val, ETMCNTRLDVR2);
0434         break;
0435     case ETMCNTRLDVRn(3):
0436         etm_write(val, ETMCNTRLDVR3);
0437         break;
0438     case ETMCNTENRn(0):
0439         etm_write(val, ETMCNTENR0);
0440         break;
0441     case ETMCNTENRn(1):
0442         etm_write(val, ETMCNTENR1);
0443         break;
0444     case ETMCNTENRn(2):
0445         etm_write(val, ETMCNTENR2);
0446         break;
0447     case ETMCNTENRn(3):
0448         etm_write(val, ETMCNTENR3);
0449         break;
0450     case ETMCNTRLDEVRn(0):
0451         etm_write(val, ETMCNTRLDEVR0);
0452         break;
0453     case ETMCNTRLDEVRn(1):
0454         etm_write(val, ETMCNTRLDEVR1);
0455         break;
0456     case ETMCNTRLDEVRn(2):
0457         etm_write(val, ETMCNTRLDEVR2);
0458         break;
0459     case ETMCNTRLDEVRn(3):
0460         etm_write(val, ETMCNTRLDEVR3);
0461         break;
0462     case ETMCNTVRn(0):
0463         etm_write(val, ETMCNTVR0);
0464         break;
0465     case ETMCNTVRn(1):
0466         etm_write(val, ETMCNTVR1);
0467         break;
0468     case ETMCNTVRn(2):
0469         etm_write(val, ETMCNTVR2);
0470         break;
0471     case ETMCNTVRn(3):
0472         etm_write(val, ETMCNTVR3);
0473         break;
0474     case ETMSQ12EVR:
0475         etm_write(val, ETMSQ12EVR);
0476         break;
0477     case ETMSQ21EVR:
0478         etm_write(val, ETMSQ21EVR);
0479         break;
0480     case ETMSQ23EVR:
0481         etm_write(val, ETMSQ23EVR);
0482         break;
0483     case ETMSQ31EVR:
0484         etm_write(val, ETMSQ31EVR);
0485         break;
0486     case ETMSQ32EVR:
0487         etm_write(val, ETMSQ32EVR);
0488         break;
0489     case ETMSQ13EVR:
0490         etm_write(val, ETMSQ13EVR);
0491         break;
0492     case ETMSQR:
0493         etm_write(val, ETMSQR);
0494         break;
0495     case ETMEXTOUTEVRn(0):
0496         etm_write(val, ETMEXTOUTEVR0);
0497         break;
0498     case ETMEXTOUTEVRn(1):
0499         etm_write(val, ETMEXTOUTEVR1);
0500         break;
0501     case ETMEXTOUTEVRn(2):
0502         etm_write(val, ETMEXTOUTEVR2);
0503         break;
0504     case ETMEXTOUTEVRn(3):
0505         etm_write(val, ETMEXTOUTEVR3);
0506         break;
0507     case ETMCIDCVRn(0):
0508         etm_write(val, ETMCIDCVR0);
0509         break;
0510     case ETMCIDCVRn(1):
0511         etm_write(val, ETMCIDCVR1);
0512         break;
0513     case ETMCIDCVRn(2):
0514         etm_write(val, ETMCIDCVR2);
0515         break;
0516     case ETMCIDCMR:
0517         etm_write(val, ETMCIDCMR);
0518         break;
0519     case ETMIMPSPEC0:
0520         etm_write(val, ETMIMPSPEC0);
0521         break;
0522     case ETMIMPSPEC1:
0523         etm_write(val, ETMIMPSPEC1);
0524         break;
0525     case ETMIMPSPEC2:
0526         etm_write(val, ETMIMPSPEC2);
0527         break;
0528     case ETMIMPSPEC3:
0529         etm_write(val, ETMIMPSPEC3);
0530         break;
0531     case ETMIMPSPEC4:
0532         etm_write(val, ETMIMPSPEC4);
0533         break;
0534     case ETMIMPSPEC5:
0535         etm_write(val, ETMIMPSPEC5);
0536         break;
0537     case ETMIMPSPEC6:
0538         etm_write(val, ETMIMPSPEC6);
0539         break;
0540     case ETMIMPSPEC7:
0541         etm_write(val, ETMIMPSPEC7);
0542         break;
0543     case ETMSYNCFR:
0544         etm_write(val, ETMSYNCFR);
0545         break;
0546     case ETMEXTINSELR:
0547         etm_write(val, ETMEXTINSELR);
0548         break;
0549     case ETMTESSEICR:
0550         etm_write(val, ETMTESSEICR);
0551         break;
0552     case ETMEIBCR:
0553         etm_write(val, ETMEIBCR);
0554         break;
0555     case ETMTSEVR:
0556         etm_write(val, ETMTSEVR);
0557         break;
0558     case ETMAUXCR:
0559         etm_write(val, ETMAUXCR);
0560         break;
0561     case ETMTRACEIDR:
0562         etm_write(val, ETMTRACEIDR);
0563         break;
0564     case ETMVMIDCVR:
0565         etm_write(val, ETMVMIDCVR);
0566         break;
0567     case ETMOSLAR:
0568         etm_write(val, ETMOSLAR);
0569         break;
0570     case ETMOSSRR:
0571         etm_write(val, ETMOSSRR);
0572         break;
0573     case ETMPDCR:
0574         etm_write(val, ETMPDCR);
0575         break;
0576     case ETMPDSR:
0577         etm_write(val, ETMPDSR);
0578         break;
0579     default:
0580         return -EINVAL;
0581     }
0582 
0583     return 0;
0584 }