1306fa012Schenhui zhao /* 2306fa012Schenhui zhao * Copyright 2014 Freescale Semiconductor, Inc. 3306fa012Schenhui zhao * 4306fa012Schenhui zhao * SPDX-License-Identifier: GPL-2.0+ 5306fa012Schenhui zhao */ 6306fa012Schenhui zhao 7306fa012Schenhui zhao #include <common.h> 8306fa012Schenhui zhao #include <asm/io.h> 9306fa012Schenhui zhao 10306fa012Schenhui zhao #include "fsl_epu.h" 11306fa012Schenhui zhao 12*d7b00639SHongbo Zhang struct fsm_reg_vals epu_default_val[] = { 13*d7b00639SHongbo Zhang /* EPGCR (Event Processor Global Control Register) */ 14*d7b00639SHongbo Zhang {EPGCR, 0}, 15*d7b00639SHongbo Zhang /* EPECR (Event Processor Event Control Registers) */ 16*d7b00639SHongbo Zhang {EPECR0 + EPECR_STRIDE * 0, 0}, 17*d7b00639SHongbo Zhang {EPECR0 + EPECR_STRIDE * 1, 0}, 18*d7b00639SHongbo Zhang {EPECR0 + EPECR_STRIDE * 2, 0xF0004004}, 19*d7b00639SHongbo Zhang {EPECR0 + EPECR_STRIDE * 3, 0x80000084}, 20*d7b00639SHongbo Zhang {EPECR0 + EPECR_STRIDE * 4, 0x20000084}, 21*d7b00639SHongbo Zhang {EPECR0 + EPECR_STRIDE * 5, 0x08000004}, 22*d7b00639SHongbo Zhang {EPECR0 + EPECR_STRIDE * 6, 0x80000084}, 23*d7b00639SHongbo Zhang {EPECR0 + EPECR_STRIDE * 7, 0x80000084}, 24*d7b00639SHongbo Zhang {EPECR0 + EPECR_STRIDE * 8, 0x60000084}, 25*d7b00639SHongbo Zhang {EPECR0 + EPECR_STRIDE * 9, 0x08000084}, 26*d7b00639SHongbo Zhang {EPECR0 + EPECR_STRIDE * 10, 0x42000084}, 27*d7b00639SHongbo Zhang {EPECR0 + EPECR_STRIDE * 11, 0x90000084}, 28*d7b00639SHongbo Zhang {EPECR0 + EPECR_STRIDE * 12, 0x80000084}, 29*d7b00639SHongbo Zhang {EPECR0 + EPECR_STRIDE * 13, 0x08000084}, 30*d7b00639SHongbo Zhang {EPECR0 + EPECR_STRIDE * 14, 0x02000084}, 31*d7b00639SHongbo Zhang {EPECR0 + EPECR_STRIDE * 15, 0x00000004}, 32*d7b00639SHongbo Zhang /* 33*d7b00639SHongbo Zhang * EPEVTCR (Event Processor EVT Pin Control Registers) 34*d7b00639SHongbo Zhang * SCU8 triger EVT2, and SCU11 triger EVT9 35*d7b00639SHongbo Zhang */ 36*d7b00639SHongbo Zhang {EPEVTCR0 + EPEVTCR_STRIDE * 0, 0}, 37*d7b00639SHongbo Zhang {EPEVTCR0 + EPEVTCR_STRIDE * 1, 0}, 38*d7b00639SHongbo Zhang {EPEVTCR0 + EPEVTCR_STRIDE * 2, 0x80000001}, 39*d7b00639SHongbo Zhang {EPEVTCR0 + EPEVTCR_STRIDE * 3, 0}, 40*d7b00639SHongbo Zhang {EPEVTCR0 + EPEVTCR_STRIDE * 4, 0}, 41*d7b00639SHongbo Zhang {EPEVTCR0 + EPEVTCR_STRIDE * 5, 0}, 42*d7b00639SHongbo Zhang {EPEVTCR0 + EPEVTCR_STRIDE * 6, 0}, 43*d7b00639SHongbo Zhang {EPEVTCR0 + EPEVTCR_STRIDE * 7, 0}, 44*d7b00639SHongbo Zhang {EPEVTCR0 + EPEVTCR_STRIDE * 8, 0}, 45*d7b00639SHongbo Zhang {EPEVTCR0 + EPEVTCR_STRIDE * 9, 0xB0000001}, 46*d7b00639SHongbo Zhang /* EPCMPR (Event Processor Counter Compare Registers) */ 47*d7b00639SHongbo Zhang {EPCMPR0 + EPCMPR_STRIDE * 0, 0}, 48*d7b00639SHongbo Zhang {EPCMPR0 + EPCMPR_STRIDE * 1, 0}, 49*d7b00639SHongbo Zhang {EPCMPR0 + EPCMPR_STRIDE * 2, 0x000000FF}, 50*d7b00639SHongbo Zhang {EPCMPR0 + EPCMPR_STRIDE * 3, 0}, 51*d7b00639SHongbo Zhang {EPCMPR0 + EPCMPR_STRIDE * 4, 0x000000FF}, 52*d7b00639SHongbo Zhang {EPCMPR0 + EPCMPR_STRIDE * 5, 0x00000020}, 53*d7b00639SHongbo Zhang {EPCMPR0 + EPCMPR_STRIDE * 6, 0}, 54*d7b00639SHongbo Zhang {EPCMPR0 + EPCMPR_STRIDE * 7, 0}, 55*d7b00639SHongbo Zhang {EPCMPR0 + EPCMPR_STRIDE * 8, 0x000000FF}, 56*d7b00639SHongbo Zhang {EPCMPR0 + EPCMPR_STRIDE * 9, 0x000000FF}, 57*d7b00639SHongbo Zhang {EPCMPR0 + EPCMPR_STRIDE * 10, 0x000000FF}, 58*d7b00639SHongbo Zhang {EPCMPR0 + EPCMPR_STRIDE * 11, 0x000000FF}, 59*d7b00639SHongbo Zhang {EPCMPR0 + EPCMPR_STRIDE * 12, 0x000000FF}, 60*d7b00639SHongbo Zhang {EPCMPR0 + EPCMPR_STRIDE * 13, 0}, 61*d7b00639SHongbo Zhang {EPCMPR0 + EPCMPR_STRIDE * 14, 0x000000FF}, 62*d7b00639SHongbo Zhang {EPCMPR0 + EPCMPR_STRIDE * 15, 0x000000FF}, 63*d7b00639SHongbo Zhang /* EPCCR (Event Processor Counter Control Registers) */ 64*d7b00639SHongbo Zhang {EPCCR0 + EPCCR_STRIDE * 0, 0}, 65*d7b00639SHongbo Zhang {EPCCR0 + EPCCR_STRIDE * 1, 0}, 66*d7b00639SHongbo Zhang {EPCCR0 + EPCCR_STRIDE * 2, 0x92840000}, 67*d7b00639SHongbo Zhang {EPCCR0 + EPCCR_STRIDE * 3, 0}, 68*d7b00639SHongbo Zhang {EPCCR0 + EPCCR_STRIDE * 4, 0x92840000}, 69*d7b00639SHongbo Zhang {EPCCR0 + EPCCR_STRIDE * 5, 0x92840000}, 70*d7b00639SHongbo Zhang {EPCCR0 + EPCCR_STRIDE * 6, 0}, 71*d7b00639SHongbo Zhang {EPCCR0 + EPCCR_STRIDE * 7, 0}, 72*d7b00639SHongbo Zhang {EPCCR0 + EPCCR_STRIDE * 8, 0x92840000}, 73*d7b00639SHongbo Zhang {EPCCR0 + EPCCR_STRIDE * 9, 0x92840000}, 74*d7b00639SHongbo Zhang {EPCCR0 + EPCCR_STRIDE * 10, 0x92840000}, 75*d7b00639SHongbo Zhang {EPCCR0 + EPCCR_STRIDE * 11, 0x92840000}, 76*d7b00639SHongbo Zhang {EPCCR0 + EPCCR_STRIDE * 12, 0x92840000}, 77*d7b00639SHongbo Zhang {EPCCR0 + EPCCR_STRIDE * 13, 0}, 78*d7b00639SHongbo Zhang {EPCCR0 + EPCCR_STRIDE * 14, 0x92840000}, 79*d7b00639SHongbo Zhang {EPCCR0 + EPCCR_STRIDE * 15, 0x92840000}, 80*d7b00639SHongbo Zhang /* EPSMCR (Event Processor SCU Mux Control Registers) */ 81*d7b00639SHongbo Zhang {EPSMCR0 + EPSMCR_STRIDE * 0, 0}, 82*d7b00639SHongbo Zhang {EPSMCR0 + EPSMCR_STRIDE * 1, 0}, 83*d7b00639SHongbo Zhang {EPSMCR0 + EPSMCR_STRIDE * 2, 0x6C700000}, 84*d7b00639SHongbo Zhang {EPSMCR0 + EPSMCR_STRIDE * 3, 0x2F000000}, 85*d7b00639SHongbo Zhang {EPSMCR0 + EPSMCR_STRIDE * 4, 0x002F0000}, 86*d7b00639SHongbo Zhang {EPSMCR0 + EPSMCR_STRIDE * 5, 0x00002E00}, 87*d7b00639SHongbo Zhang {EPSMCR0 + EPSMCR_STRIDE * 6, 0x7C000000}, 88*d7b00639SHongbo Zhang {EPSMCR0 + EPSMCR_STRIDE * 7, 0x30000000}, 89*d7b00639SHongbo Zhang {EPSMCR0 + EPSMCR_STRIDE * 8, 0x64300000}, 90*d7b00639SHongbo Zhang {EPSMCR0 + EPSMCR_STRIDE * 9, 0x00003000}, 91*d7b00639SHongbo Zhang {EPSMCR0 + EPSMCR_STRIDE * 10, 0x65000030}, 92*d7b00639SHongbo Zhang {EPSMCR0 + EPSMCR_STRIDE * 11, 0x31740000}, 93*d7b00639SHongbo Zhang {EPSMCR0 + EPSMCR_STRIDE * 12, 0x7F000000}, 94*d7b00639SHongbo Zhang {EPSMCR0 + EPSMCR_STRIDE * 13, 0x00003100}, 95*d7b00639SHongbo Zhang {EPSMCR0 + EPSMCR_STRIDE * 14, 0x00000031}, 96*d7b00639SHongbo Zhang {EPSMCR0 + EPSMCR_STRIDE * 15, 0x76000000}, 97*d7b00639SHongbo Zhang /* EPACR (Event Processor Action Control Registers) */ 98*d7b00639SHongbo Zhang {EPACR0 + EPACR_STRIDE * 0, 0}, 99*d7b00639SHongbo Zhang {EPACR0 + EPACR_STRIDE * 1, 0}, 100*d7b00639SHongbo Zhang {EPACR0 + EPACR_STRIDE * 2, 0}, 101*d7b00639SHongbo Zhang {EPACR0 + EPACR_STRIDE * 3, 0x00000080}, 102*d7b00639SHongbo Zhang {EPACR0 + EPACR_STRIDE * 4, 0}, 103*d7b00639SHongbo Zhang {EPACR0 + EPACR_STRIDE * 5, 0x00000040}, 104*d7b00639SHongbo Zhang {EPACR0 + EPACR_STRIDE * 6, 0}, 105*d7b00639SHongbo Zhang {EPACR0 + EPACR_STRIDE * 7, 0}, 106*d7b00639SHongbo Zhang {EPACR0 + EPACR_STRIDE * 8, 0}, 107*d7b00639SHongbo Zhang {EPACR0 + EPACR_STRIDE * 9, 0x0000001C}, 108*d7b00639SHongbo Zhang {EPACR0 + EPACR_STRIDE * 10, 0x00000020}, 109*d7b00639SHongbo Zhang {EPACR0 + EPACR_STRIDE * 11, 0}, 110*d7b00639SHongbo Zhang {EPACR0 + EPACR_STRIDE * 12, 0x00000003}, 111*d7b00639SHongbo Zhang {EPACR0 + EPACR_STRIDE * 13, 0x06000000}, 112*d7b00639SHongbo Zhang {EPACR0 + EPACR_STRIDE * 14, 0x04000000}, 113*d7b00639SHongbo Zhang {EPACR0 + EPACR_STRIDE * 15, 0x02000000}, 114*d7b00639SHongbo Zhang /* EPIMCR (Event Processor Input Mux Control Registers) */ 115*d7b00639SHongbo Zhang {EPIMCR0 + EPIMCR_STRIDE * 0, 0}, 116*d7b00639SHongbo Zhang {EPIMCR0 + EPIMCR_STRIDE * 1, 0}, 117*d7b00639SHongbo Zhang {EPIMCR0 + EPIMCR_STRIDE * 2, 0}, 118*d7b00639SHongbo Zhang {EPIMCR0 + EPIMCR_STRIDE * 3, 0}, 119*d7b00639SHongbo Zhang {EPIMCR0 + EPIMCR_STRIDE * 4, 0x44000000}, 120*d7b00639SHongbo Zhang {EPIMCR0 + EPIMCR_STRIDE * 5, 0x40000000}, 121*d7b00639SHongbo Zhang {EPIMCR0 + EPIMCR_STRIDE * 6, 0}, 122*d7b00639SHongbo Zhang {EPIMCR0 + EPIMCR_STRIDE * 7, 0}, 123*d7b00639SHongbo Zhang {EPIMCR0 + EPIMCR_STRIDE * 8, 0}, 124*d7b00639SHongbo Zhang {EPIMCR0 + EPIMCR_STRIDE * 9, 0}, 125*d7b00639SHongbo Zhang {EPIMCR0 + EPIMCR_STRIDE * 10, 0}, 126*d7b00639SHongbo Zhang {EPIMCR0 + EPIMCR_STRIDE * 11, 0}, 127*d7b00639SHongbo Zhang {EPIMCR0 + EPIMCR_STRIDE * 12, 0x44000000}, 128*d7b00639SHongbo Zhang {EPIMCR0 + EPIMCR_STRIDE * 13, 0}, 129*d7b00639SHongbo Zhang {EPIMCR0 + EPIMCR_STRIDE * 14, 0}, 130*d7b00639SHongbo Zhang {EPIMCR0 + EPIMCR_STRIDE * 15, 0}, 131*d7b00639SHongbo Zhang {EPIMCR0 + EPIMCR_STRIDE * 16, 0x6A000000}, 132*d7b00639SHongbo Zhang {EPIMCR0 + EPIMCR_STRIDE * 17, 0}, 133*d7b00639SHongbo Zhang {EPIMCR0 + EPIMCR_STRIDE * 18, 0}, 134*d7b00639SHongbo Zhang {EPIMCR0 + EPIMCR_STRIDE * 19, 0}, 135*d7b00639SHongbo Zhang {EPIMCR0 + EPIMCR_STRIDE * 20, 0x48000000}, 136*d7b00639SHongbo Zhang {EPIMCR0 + EPIMCR_STRIDE * 21, 0}, 137*d7b00639SHongbo Zhang {EPIMCR0 + EPIMCR_STRIDE * 22, 0x6C000000}, 138*d7b00639SHongbo Zhang {EPIMCR0 + EPIMCR_STRIDE * 23, 0}, 139*d7b00639SHongbo Zhang {EPIMCR0 + EPIMCR_STRIDE * 24, 0}, 140*d7b00639SHongbo Zhang {EPIMCR0 + EPIMCR_STRIDE * 25, 0}, 141*d7b00639SHongbo Zhang {EPIMCR0 + EPIMCR_STRIDE * 26, 0}, 142*d7b00639SHongbo Zhang {EPIMCR0 + EPIMCR_STRIDE * 27, 0}, 143*d7b00639SHongbo Zhang {EPIMCR0 + EPIMCR_STRIDE * 28, 0x76000000}, 144*d7b00639SHongbo Zhang {EPIMCR0 + EPIMCR_STRIDE * 29, 0}, 145*d7b00639SHongbo Zhang {EPIMCR0 + EPIMCR_STRIDE * 30, 0}, 146*d7b00639SHongbo Zhang {EPIMCR0 + EPIMCR_STRIDE * 31, 0x76000000}, 147*d7b00639SHongbo Zhang /* EPXTRIGCR (Event Processor Crosstrigger Control Register) */ 148*d7b00639SHongbo Zhang {EPXTRIGCR, 0x0000FFDF}, 149*d7b00639SHongbo Zhang /* end */ 150*d7b00639SHongbo Zhang {FSM_END_FLAG, 0}, 151*d7b00639SHongbo Zhang }; 152*d7b00639SHongbo Zhang 153*d7b00639SHongbo Zhang /** 154*d7b00639SHongbo Zhang * fsl_epu_setup - Setup EPU registers to default values 155*d7b00639SHongbo Zhang */ 156*d7b00639SHongbo Zhang void fsl_epu_setup(void *epu_base) 157*d7b00639SHongbo Zhang { 158*d7b00639SHongbo Zhang struct fsm_reg_vals *data = epu_default_val; 159*d7b00639SHongbo Zhang 160*d7b00639SHongbo Zhang if (!epu_base || !data) 161*d7b00639SHongbo Zhang return; 162*d7b00639SHongbo Zhang 163*d7b00639SHongbo Zhang while (data->offset != FSM_END_FLAG) { 164*d7b00639SHongbo Zhang out_be32(epu_base + data->offset, data->value); 165*d7b00639SHongbo Zhang data++; 166*d7b00639SHongbo Zhang } 167*d7b00639SHongbo Zhang } 168*d7b00639SHongbo Zhang 169306fa012Schenhui zhao /** 170306fa012Schenhui zhao * fsl_epu_clean - Clear EPU registers 171306fa012Schenhui zhao */ 172306fa012Schenhui zhao void fsl_epu_clean(void *epu_base) 173306fa012Schenhui zhao { 174306fa012Schenhui zhao u32 offset; 175306fa012Schenhui zhao 176306fa012Schenhui zhao /* follow the exact sequence to clear the registers */ 177306fa012Schenhui zhao /* Clear EPACRn */ 178306fa012Schenhui zhao for (offset = EPACR0; offset <= EPACR15; offset += EPACR_STRIDE) 179306fa012Schenhui zhao out_be32(epu_base + offset, 0); 180306fa012Schenhui zhao 181306fa012Schenhui zhao /* Clear EPEVTCRn */ 182306fa012Schenhui zhao for (offset = EPEVTCR0; offset <= EPEVTCR9; offset += EPEVTCR_STRIDE) 183306fa012Schenhui zhao out_be32(epu_base + offset, 0); 184306fa012Schenhui zhao 185306fa012Schenhui zhao /* Clear EPGCR */ 186306fa012Schenhui zhao out_be32(epu_base + EPGCR, 0); 187306fa012Schenhui zhao 188306fa012Schenhui zhao /* Clear EPSMCRn */ 189306fa012Schenhui zhao for (offset = EPSMCR0; offset <= EPSMCR15; offset += EPSMCR_STRIDE) 190306fa012Schenhui zhao out_be32(epu_base + offset, 0); 191306fa012Schenhui zhao 192306fa012Schenhui zhao /* Clear EPCCRn */ 193306fa012Schenhui zhao for (offset = EPCCR0; offset <= EPCCR31; offset += EPCCR_STRIDE) 194306fa012Schenhui zhao out_be32(epu_base + offset, 0); 195306fa012Schenhui zhao 196306fa012Schenhui zhao /* Clear EPCMPRn */ 197306fa012Schenhui zhao for (offset = EPCMPR0; offset <= EPCMPR31; offset += EPCMPR_STRIDE) 198306fa012Schenhui zhao out_be32(epu_base + offset, 0); 199306fa012Schenhui zhao 200306fa012Schenhui zhao /* Clear EPCTRn */ 201306fa012Schenhui zhao for (offset = EPCTR0; offset <= EPCTR31; offset += EPCTR_STRIDE) 202306fa012Schenhui zhao out_be32(epu_base + offset, 0); 203306fa012Schenhui zhao 204306fa012Schenhui zhao /* Clear EPIMCRn */ 205306fa012Schenhui zhao for (offset = EPIMCR0; offset <= EPIMCR31; offset += EPIMCR_STRIDE) 206306fa012Schenhui zhao out_be32(epu_base + offset, 0); 207306fa012Schenhui zhao 208306fa012Schenhui zhao /* Clear EPXTRIGCRn */ 209306fa012Schenhui zhao out_be32(epu_base + EPXTRIGCR, 0); 210306fa012Schenhui zhao 211306fa012Schenhui zhao /* Clear EPECRn */ 212306fa012Schenhui zhao for (offset = EPECR0; offset <= EPECR15; offset += EPECR_STRIDE) 213306fa012Schenhui zhao out_be32(epu_base + offset, 0); 214306fa012Schenhui zhao } 215