Home | History | Annotate | Download | only in ls102xa
      1 // SPDX-License-Identifier: GPL-2.0+
      2 /*
      3  * Copyright 2014 Freescale Semiconductor, Inc.
      4  */
      5 
      6 #include <common.h>
      7 #include <asm/io.h>
      8 
      9 #include "fsl_epu.h"
     10 
     11 struct fsm_reg_vals epu_default_val[] = {
     12 	/* EPGCR (Event Processor Global Control Register) */
     13 	{EPGCR, 0},
     14 	/* EPECR (Event Processor Event Control Registers) */
     15 	{EPECR0 + EPECR_STRIDE * 0, 0},
     16 	{EPECR0 + EPECR_STRIDE * 1, 0},
     17 	{EPECR0 + EPECR_STRIDE * 2, 0xF0004004},
     18 	{EPECR0 + EPECR_STRIDE * 3, 0x80000084},
     19 	{EPECR0 + EPECR_STRIDE * 4, 0x20000084},
     20 	{EPECR0 + EPECR_STRIDE * 5, 0x08000004},
     21 	{EPECR0 + EPECR_STRIDE * 6, 0x80000084},
     22 	{EPECR0 + EPECR_STRIDE * 7, 0x80000084},
     23 	{EPECR0 + EPECR_STRIDE * 8, 0x60000084},
     24 	{EPECR0 + EPECR_STRIDE * 9, 0x08000084},
     25 	{EPECR0 + EPECR_STRIDE * 10, 0x42000084},
     26 	{EPECR0 + EPECR_STRIDE * 11, 0x90000084},
     27 	{EPECR0 + EPECR_STRIDE * 12, 0x80000084},
     28 	{EPECR0 + EPECR_STRIDE * 13, 0x08000084},
     29 	{EPECR0 + EPECR_STRIDE * 14, 0x02000084},
     30 	{EPECR0 + EPECR_STRIDE * 15, 0x00000004},
     31 	/*
     32 	 * EPEVTCR (Event Processor EVT Pin Control Registers)
     33 	 * SCU8 triger EVT2, and SCU11 triger EVT9
     34 	 */
     35 	{EPEVTCR0 + EPEVTCR_STRIDE * 0, 0},
     36 	{EPEVTCR0 + EPEVTCR_STRIDE * 1, 0},
     37 	{EPEVTCR0 + EPEVTCR_STRIDE * 2, 0x80000001},
     38 	{EPEVTCR0 + EPEVTCR_STRIDE * 3, 0},
     39 	{EPEVTCR0 + EPEVTCR_STRIDE * 4, 0},
     40 	{EPEVTCR0 + EPEVTCR_STRIDE * 5, 0},
     41 	{EPEVTCR0 + EPEVTCR_STRIDE * 6, 0},
     42 	{EPEVTCR0 + EPEVTCR_STRIDE * 7, 0},
     43 	{EPEVTCR0 + EPEVTCR_STRIDE * 8, 0},
     44 	{EPEVTCR0 + EPEVTCR_STRIDE * 9, 0xB0000001},
     45 	/* EPCMPR (Event Processor Counter Compare Registers) */
     46 	{EPCMPR0 + EPCMPR_STRIDE * 0, 0},
     47 	{EPCMPR0 + EPCMPR_STRIDE * 1, 0},
     48 	{EPCMPR0 + EPCMPR_STRIDE * 2, 0x000000FF},
     49 	{EPCMPR0 + EPCMPR_STRIDE * 3, 0},
     50 	{EPCMPR0 + EPCMPR_STRIDE * 4, 0x000000FF},
     51 	{EPCMPR0 + EPCMPR_STRIDE * 5, 0x00000020},
     52 	{EPCMPR0 + EPCMPR_STRIDE * 6, 0},
     53 	{EPCMPR0 + EPCMPR_STRIDE * 7, 0},
     54 	{EPCMPR0 + EPCMPR_STRIDE * 8, 0x000000FF},
     55 	{EPCMPR0 + EPCMPR_STRIDE * 9, 0x000000FF},
     56 	{EPCMPR0 + EPCMPR_STRIDE * 10, 0x000000FF},
     57 	{EPCMPR0 + EPCMPR_STRIDE * 11, 0x000000FF},
     58 	{EPCMPR0 + EPCMPR_STRIDE * 12, 0x000000FF},
     59 	{EPCMPR0 + EPCMPR_STRIDE * 13, 0},
     60 	{EPCMPR0 + EPCMPR_STRIDE * 14, 0x000000FF},
     61 	{EPCMPR0 + EPCMPR_STRIDE * 15, 0x000000FF},
     62 	/* EPCCR (Event Processor Counter Control Registers) */
     63 	{EPCCR0 + EPCCR_STRIDE * 0, 0},
     64 	{EPCCR0 + EPCCR_STRIDE * 1, 0},
     65 	{EPCCR0 + EPCCR_STRIDE * 2, 0x92840000},
     66 	{EPCCR0 + EPCCR_STRIDE * 3, 0},
     67 	{EPCCR0 + EPCCR_STRIDE * 4, 0x92840000},
     68 	{EPCCR0 + EPCCR_STRIDE * 5, 0x92840000},
     69 	{EPCCR0 + EPCCR_STRIDE * 6, 0},
     70 	{EPCCR0 + EPCCR_STRIDE * 7, 0},
     71 	{EPCCR0 + EPCCR_STRIDE * 8, 0x92840000},
     72 	{EPCCR0 + EPCCR_STRIDE * 9, 0x92840000},
     73 	{EPCCR0 + EPCCR_STRIDE * 10, 0x92840000},
     74 	{EPCCR0 + EPCCR_STRIDE * 11, 0x92840000},
     75 	{EPCCR0 + EPCCR_STRIDE * 12, 0x92840000},
     76 	{EPCCR0 + EPCCR_STRIDE * 13, 0},
     77 	{EPCCR0 + EPCCR_STRIDE * 14, 0x92840000},
     78 	{EPCCR0 + EPCCR_STRIDE * 15, 0x92840000},
     79 	/* EPSMCR (Event Processor SCU Mux Control Registers) */
     80 	{EPSMCR0 + EPSMCR_STRIDE * 0, 0},
     81 	{EPSMCR0 + EPSMCR_STRIDE * 1, 0},
     82 	{EPSMCR0 + EPSMCR_STRIDE * 2, 0x6C700000},
     83 	{EPSMCR0 + EPSMCR_STRIDE * 3, 0x2F000000},
     84 	{EPSMCR0 + EPSMCR_STRIDE * 4, 0x002F0000},
     85 	{EPSMCR0 + EPSMCR_STRIDE * 5, 0x00002E00},
     86 	{EPSMCR0 + EPSMCR_STRIDE * 6, 0x7C000000},
     87 	{EPSMCR0 + EPSMCR_STRIDE * 7, 0x30000000},
     88 	{EPSMCR0 + EPSMCR_STRIDE * 8, 0x64300000},
     89 	{EPSMCR0 + EPSMCR_STRIDE * 9, 0x00003000},
     90 	{EPSMCR0 + EPSMCR_STRIDE * 10, 0x65000030},
     91 	{EPSMCR0 + EPSMCR_STRIDE * 11, 0x31740000},
     92 	{EPSMCR0 + EPSMCR_STRIDE * 12, 0x7F000000},
     93 	{EPSMCR0 + EPSMCR_STRIDE * 13, 0x00003100},
     94 	{EPSMCR0 + EPSMCR_STRIDE * 14, 0x00000031},
     95 	{EPSMCR0 + EPSMCR_STRIDE * 15, 0x76000000},
     96 	/* EPACR (Event Processor Action Control Registers) */
     97 	{EPACR0 + EPACR_STRIDE * 0, 0},
     98 	{EPACR0 + EPACR_STRIDE * 1, 0},
     99 	{EPACR0 + EPACR_STRIDE * 2, 0},
    100 	{EPACR0 + EPACR_STRIDE * 3, 0x00000080},
    101 	{EPACR0 + EPACR_STRIDE * 4, 0},
    102 	{EPACR0 + EPACR_STRIDE * 5, 0x00000040},
    103 	{EPACR0 + EPACR_STRIDE * 6, 0},
    104 	{EPACR0 + EPACR_STRIDE * 7, 0},
    105 	{EPACR0 + EPACR_STRIDE * 8, 0},
    106 	{EPACR0 + EPACR_STRIDE * 9, 0x0000001C},
    107 	{EPACR0 + EPACR_STRIDE * 10, 0x00000020},
    108 	{EPACR0 + EPACR_STRIDE * 11, 0},
    109 	{EPACR0 + EPACR_STRIDE * 12, 0x00000003},
    110 	{EPACR0 + EPACR_STRIDE * 13, 0x06000000},
    111 	{EPACR0 + EPACR_STRIDE * 14, 0x04000000},
    112 	{EPACR0 + EPACR_STRIDE * 15, 0x02000000},
    113 	/* EPIMCR (Event Processor Input Mux Control Registers) */
    114 	{EPIMCR0 + EPIMCR_STRIDE * 0, 0},
    115 	{EPIMCR0 + EPIMCR_STRIDE * 1, 0},
    116 	{EPIMCR0 + EPIMCR_STRIDE * 2, 0},
    117 	{EPIMCR0 + EPIMCR_STRIDE * 3, 0},
    118 	{EPIMCR0 + EPIMCR_STRIDE * 4, 0x44000000},
    119 	{EPIMCR0 + EPIMCR_STRIDE * 5, 0x40000000},
    120 	{EPIMCR0 + EPIMCR_STRIDE * 6, 0},
    121 	{EPIMCR0 + EPIMCR_STRIDE * 7, 0},
    122 	{EPIMCR0 + EPIMCR_STRIDE * 8, 0},
    123 	{EPIMCR0 + EPIMCR_STRIDE * 9, 0},
    124 	{EPIMCR0 + EPIMCR_STRIDE * 10, 0},
    125 	{EPIMCR0 + EPIMCR_STRIDE * 11, 0},
    126 	{EPIMCR0 + EPIMCR_STRIDE * 12, 0x44000000},
    127 	{EPIMCR0 + EPIMCR_STRIDE * 13, 0},
    128 	{EPIMCR0 + EPIMCR_STRIDE * 14, 0},
    129 	{EPIMCR0 + EPIMCR_STRIDE * 15, 0},
    130 	{EPIMCR0 + EPIMCR_STRIDE * 16, 0x6A000000},
    131 	{EPIMCR0 + EPIMCR_STRIDE * 17, 0},
    132 	{EPIMCR0 + EPIMCR_STRIDE * 18, 0},
    133 	{EPIMCR0 + EPIMCR_STRIDE * 19, 0},
    134 	{EPIMCR0 + EPIMCR_STRIDE * 20, 0x48000000},
    135 	{EPIMCR0 + EPIMCR_STRIDE * 21, 0},
    136 	{EPIMCR0 + EPIMCR_STRIDE * 22, 0x6C000000},
    137 	{EPIMCR0 + EPIMCR_STRIDE * 23, 0},
    138 	{EPIMCR0 + EPIMCR_STRIDE * 24, 0},
    139 	{EPIMCR0 + EPIMCR_STRIDE * 25, 0},
    140 	{EPIMCR0 + EPIMCR_STRIDE * 26, 0},
    141 	{EPIMCR0 + EPIMCR_STRIDE * 27, 0},
    142 	{EPIMCR0 + EPIMCR_STRIDE * 28, 0x76000000},
    143 	{EPIMCR0 + EPIMCR_STRIDE * 29, 0},
    144 	{EPIMCR0 + EPIMCR_STRIDE * 30, 0},
    145 	{EPIMCR0 + EPIMCR_STRIDE * 31, 0x76000000},
    146 	/* EPXTRIGCR (Event Processor Crosstrigger Control Register) */
    147 	{EPXTRIGCR, 0x0000FFDF},
    148 	/* end */
    149 	{FSM_END_FLAG, 0},
    150 };
    151 
    152 /**
    153  * fsl_epu_setup - Setup EPU registers to default values
    154  */
    155 void fsl_epu_setup(void *epu_base)
    156 {
    157 	struct fsm_reg_vals *data = epu_default_val;
    158 
    159 	if (!epu_base || !data)
    160 		return;
    161 
    162 	while (data->offset != FSM_END_FLAG) {
    163 		out_be32(epu_base + data->offset, data->value);
    164 		data++;
    165 	}
    166 }
    167 
    168 /**
    169  * fsl_epu_clean - Clear EPU registers
    170  */
    171 void fsl_epu_clean(void *epu_base)
    172 {
    173 	u32 offset;
    174 
    175 	/* follow the exact sequence to clear the registers */
    176 	/* Clear EPACRn */
    177 	for (offset = EPACR0; offset <= EPACR15; offset += EPACR_STRIDE)
    178 		out_be32(epu_base + offset, 0);
    179 
    180 	/* Clear EPEVTCRn */
    181 	for (offset = EPEVTCR0; offset <= EPEVTCR9; offset += EPEVTCR_STRIDE)
    182 		out_be32(epu_base + offset, 0);
    183 
    184 	/* Clear EPGCR */
    185 	out_be32(epu_base + EPGCR, 0);
    186 
    187 	/* Clear EPSMCRn */
    188 	for (offset = EPSMCR0; offset <= EPSMCR15; offset += EPSMCR_STRIDE)
    189 		out_be32(epu_base + offset, 0);
    190 
    191 	/* Clear EPCCRn */
    192 	for (offset = EPCCR0; offset <= EPCCR31; offset += EPCCR_STRIDE)
    193 		out_be32(epu_base + offset, 0);
    194 
    195 	/* Clear EPCMPRn */
    196 	for (offset = EPCMPR0; offset <= EPCMPR31; offset += EPCMPR_STRIDE)
    197 		out_be32(epu_base + offset, 0);
    198 
    199 	/* Clear EPCTRn */
    200 	for (offset = EPCTR0; offset <= EPCTR31; offset += EPCTR_STRIDE)
    201 		out_be32(epu_base + offset, 0);
    202 
    203 	/* Clear EPIMCRn */
    204 	for (offset = EPIMCR0; offset <= EPIMCR31; offset += EPIMCR_STRIDE)
    205 		out_be32(epu_base + offset, 0);
    206 
    207 	/* Clear EPXTRIGCRn */
    208 	out_be32(epu_base + EPXTRIGCR, 0);
    209 
    210 	/* Clear EPECRn */
    211 	for (offset = EPECR0; offset <= EPECR15; offset += EPECR_STRIDE)
    212 		out_be32(epu_base + offset, 0);
    213 }
    214