Blame view
include/fsl_qe.h
9.48 KB
7737d5c65 mpc83xx: add QE e... |
1 |
/* |
7211fbfa1 drivers/qe: Chang... |
2 |
* Copyright (C) 2006-2009 Freescale Semiconductor, Inc. |
7737d5c65 mpc83xx: add QE e... |
3 4 5 6 |
* * Dave Liu <daveliu@freescale.com> * based on source code of Shlomi Gridish * |
1a4596601 Add GPL-2.0+ SPDX... |
7 |
* SPDX-License-Identifier: GPL-2.0+ |
7737d5c65 mpc83xx: add QE e... |
8 9 10 11 12 13 |
*/ #ifndef __QE_H__ #define __QE_H__ #include "common.h" |
ae42eb035 QE/DeepSleep: add... |
14 15 16 |
#ifdef CONFIG_U_QE #include <linux/immap_qe.h> #endif |
7737d5c65 mpc83xx: add QE e... |
17 |
|
7737d5c65 mpc83xx: add QE e... |
18 19 |
#define QE_NUM_OF_BRGS 16 #define UCC_MAX_NUM 8 |
ff9658d70 mpc83xx: Fix the ... |
20 |
#define QE_DATAONLY_BASE 0 |
24c3aca3f mpc83xx: Add supp... |
21 |
#define QE_DATAONLY_SIZE (QE_MURAM_SIZE - QE_DATAONLY_BASE) |
7737d5c65 mpc83xx: add QE e... |
22 23 24 25 26 27 28 29 30 |
/* QE threads SNUM */ typedef enum qe_snum_state { QE_SNUM_STATE_USED, /* used */ QE_SNUM_STATE_FREE /* free */ } qe_snum_state_e; typedef struct qe_snum { |
53677ef18 Big white-space c... |
31 |
u8 num; /* snum */ |
7737d5c65 mpc83xx: add QE e... |
32 33 34 35 36 |
qe_snum_state_e state; /* state */ } qe_snum_t; /* QE RISC allocation */ |
7211fbfa1 drivers/qe: Chang... |
37 38 39 40 41 42 43 44 45 46 |
#define QE_RISC_ALLOCATION_RISC1 0x1 /* RISC 1 */ #define QE_RISC_ALLOCATION_RISC2 0x2 /* RISC 2 */ #define QE_RISC_ALLOCATION_RISC3 0x4 /* RISC 3 */ #define QE_RISC_ALLOCATION_RISC4 0x8 /* RISC 4 */ #define QE_RISC_ALLOCATION_RISC1_AND_RISC2 (QE_RISC_ALLOCATION_RISC1 | \ QE_RISC_ALLOCATION_RISC2) #define QE_RISC_ALLOCATION_FOUR_RISCS (QE_RISC_ALLOCATION_RISC1 | \ QE_RISC_ALLOCATION_RISC2 | \ QE_RISC_ALLOCATION_RISC3 | \ QE_RISC_ALLOCATION_RISC4) |
7737d5c65 mpc83xx: add QE e... |
47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
/* QE CECR commands for UCC fast. */ #define QE_CR_FLG 0x00010000 #define QE_RESET 0x80000000 #define QE_INIT_TX_RX 0x00000000 #define QE_INIT_RX 0x00000001 #define QE_INIT_TX 0x00000002 #define QE_ENTER_HUNT_MODE 0x00000003 #define QE_STOP_TX 0x00000004 #define QE_GRACEFUL_STOP_TX 0x00000005 #define QE_RESTART_TX 0x00000006 #define QE_SWITCH_COMMAND 0x00000007 #define QE_SET_GROUP_ADDRESS 0x00000008 #define QE_INSERT_CELL 0x00000009 #define QE_ATM_TRANSMIT 0x0000000a #define QE_CELL_POOL_GET 0x0000000b #define QE_CELL_POOL_PUT 0x0000000c #define QE_IMA_HOST_CMD 0x0000000d #define QE_ATM_MULTI_THREAD_INIT 0x00000011 #define QE_ASSIGN_PAGE 0x00000012 #define QE_START_FLOW_CONTROL 0x00000014 #define QE_STOP_FLOW_CONTROL 0x00000015 #define QE_ASSIGN_PAGE_TO_DEVICE 0x00000016 #define QE_GRACEFUL_STOP_RX 0x0000001a #define QE_RESTART_RX 0x0000001b /* QE CECR Sub Block Code - sub block code of QE command. */ #define QE_CR_SUBBLOCK_INVALID 0x00000000 #define QE_CR_SUBBLOCK_USB 0x03200000 #define QE_CR_SUBBLOCK_UCCFAST1 0x02000000 #define QE_CR_SUBBLOCK_UCCFAST2 0x02200000 #define QE_CR_SUBBLOCK_UCCFAST3 0x02400000 #define QE_CR_SUBBLOCK_UCCFAST4 0x02600000 #define QE_CR_SUBBLOCK_UCCFAST5 0x02800000 #define QE_CR_SUBBLOCK_UCCFAST6 0x02a00000 #define QE_CR_SUBBLOCK_UCCFAST7 0x02c00000 #define QE_CR_SUBBLOCK_UCCFAST8 0x02e00000 #define QE_CR_SUBBLOCK_UCCSLOW1 0x00000000 #define QE_CR_SUBBLOCK_UCCSLOW2 0x00200000 #define QE_CR_SUBBLOCK_UCCSLOW3 0x00400000 #define QE_CR_SUBBLOCK_UCCSLOW4 0x00600000 #define QE_CR_SUBBLOCK_UCCSLOW5 0x00800000 #define QE_CR_SUBBLOCK_UCCSLOW6 0x00a00000 #define QE_CR_SUBBLOCK_UCCSLOW7 0x00c00000 #define QE_CR_SUBBLOCK_UCCSLOW8 0x00e00000 #define QE_CR_SUBBLOCK_MCC1 0x03800000 #define QE_CR_SUBBLOCK_MCC2 0x03a00000 #define QE_CR_SUBBLOCK_MCC3 0x03000000 #define QE_CR_SUBBLOCK_IDMA1 0x02800000 #define QE_CR_SUBBLOCK_IDMA2 0x02a00000 #define QE_CR_SUBBLOCK_IDMA3 0x02c00000 #define QE_CR_SUBBLOCK_IDMA4 0x02e00000 #define QE_CR_SUBBLOCK_HPAC 0x01e00000 #define QE_CR_SUBBLOCK_SPI1 0x01400000 #define QE_CR_SUBBLOCK_SPI2 0x01600000 #define QE_CR_SUBBLOCK_RAND 0x01c00000 #define QE_CR_SUBBLOCK_TIMER 0x01e00000 #define QE_CR_SUBBLOCK_GENERAL 0x03c00000 /* QE CECR Protocol - For non-MCC, specifies mode for QE CECR command. */ #define QE_CR_PROTOCOL_UNSPECIFIED 0x00 /* For all other protocols */ #define QE_CR_PROTOCOL_HDLC_TRANSPARENT 0x00 #define QE_CR_PROTOCOL_ATM_POS 0x0A #define QE_CR_PROTOCOL_ETHERNET 0x0C #define QE_CR_PROTOCOL_L2_SWITCH 0x0D #define QE_CR_PROTOCOL_SHIFT 6 /* QE ASSIGN PAGE command */ #define QE_CR_ASSIGN_PAGE_SNUM_SHIFT 17 /* Communication Direction. */ typedef enum comm_dir { COMM_DIR_NONE = 0, COMM_DIR_RX = 1, COMM_DIR_TX = 2, COMM_DIR_RX_AND_TX = 3 } comm_dir_e; /* Clocks and BRG's */ typedef enum qe_clock { QE_CLK_NONE = 0, QE_BRG1, /* Baud Rate Generator 1 */ QE_BRG2, /* Baud Rate Generator 2 */ QE_BRG3, /* Baud Rate Generator 3 */ QE_BRG4, /* Baud Rate Generator 4 */ QE_BRG5, /* Baud Rate Generator 5 */ QE_BRG6, /* Baud Rate Generator 6 */ QE_BRG7, /* Baud Rate Generator 7 */ QE_BRG8, /* Baud Rate Generator 8 */ QE_BRG9, /* Baud Rate Generator 9 */ QE_BRG10, /* Baud Rate Generator 10 */ QE_BRG11, /* Baud Rate Generator 11 */ QE_BRG12, /* Baud Rate Generator 12 */ QE_BRG13, /* Baud Rate Generator 13 */ QE_BRG14, /* Baud Rate Generator 14 */ QE_BRG15, /* Baud Rate Generator 15 */ QE_BRG16, /* Baud Rate Generator 16 */ |
53677ef18 Big white-space c... |
150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 |
QE_CLK1, /* Clock 1 */ QE_CLK2, /* Clock 2 */ QE_CLK3, /* Clock 3 */ QE_CLK4, /* Clock 4 */ QE_CLK5, /* Clock 5 */ QE_CLK6, /* Clock 6 */ QE_CLK7, /* Clock 7 */ QE_CLK8, /* Clock 8 */ QE_CLK9, /* Clock 9 */ QE_CLK10, /* Clock 10 */ QE_CLK11, /* Clock 11 */ QE_CLK12, /* Clock 12 */ QE_CLK13, /* Clock 13 */ QE_CLK14, /* Clock 14 */ QE_CLK15, /* Clock 15 */ QE_CLK16, /* Clock 16 */ QE_CLK17, /* Clock 17 */ QE_CLK18, /* Clock 18 */ QE_CLK19, /* Clock 19 */ QE_CLK20, /* Clock 20 */ QE_CLK21, /* Clock 21 */ QE_CLK22, /* Clock 22 */ QE_CLK23, /* Clock 23 */ QE_CLK24, /* Clock 24 */ |
7737d5c65 mpc83xx: add QE e... |
174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 |
QE_CLK_DUMMY } qe_clock_e; /* QE CMXGCR register */ #define QE_CMXGCR_MII_ENET_MNG_MASK 0x00007000 #define QE_CMXGCR_MII_ENET_MNG_SHIFT 12 /* QE CMXUCR registers */ #define QE_CMXUCR_TX_CLK_SRC_MASK 0x0000000F /* QE BRG configuration register */ #define QE_BRGC_ENABLE 0x00010000 #define QE_BRGC_DIVISOR_SHIFT 1 #define QE_BRGC_DIVISOR_MAX 0xFFF #define QE_BRGC_DIV16 1 /* QE SDMA registers */ #define QE_SDSR_BER1 0x02000000 #define QE_SDSR_BER2 0x01000000 #define QE_SDMR_GLB_1_MSK 0x80000000 #define QE_SDMR_ADR_SEL 0x20000000 #define QE_SDMR_BER1_MSK 0x02000000 #define QE_SDMR_BER2_MSK 0x01000000 #define QE_SDMR_EB1_MSK 0x00800000 #define QE_SDMR_ER1_MSK 0x00080000 #define QE_SDMR_ER2_MSK 0x00040000 #define QE_SDMR_CEN_MASK 0x0000E000 #define QE_SDMR_SBER_1 0x00000200 #define QE_SDMR_SBER_2 0x00000200 #define QE_SDMR_EB1_PR_MASK 0x000000C0 #define QE_SDMR_ER1_PR 0x00000008 #define QE_SDMR_CEN_SHIFT 13 #define QE_SDMR_EB1_PR_SHIFT 6 #define QE_SDTM_MSNUM_SHIFT 24 #define QE_SDEBCR_BA_MASK 0x01FFFFFF |
b8ec23850 85xx: add ability... |
217 218 219 220 221 222 223 224 |
/* Communication Processor */ #define QE_CP_CERCR_MEE 0x8000 /* Multi-user RAM ECC enable */ #define QE_CP_CERCR_IEE 0x4000 /* Instruction RAM ECC enable */ #define QE_CP_CERCR_CIR 0x0800 /* Common instruction RAM */ /* I-RAM */ #define QE_IRAM_IADD_AIE 0x80000000 /* Auto Increment Enable */ #define QE_IRAM_IADD_BADDR 0x00080000 /* Base Address */ |
2d4de6ae5 MPC85xx: Load and... |
225 |
#define QE_IRAM_READY 0x80000000 |
b8ec23850 85xx: add ability... |
226 227 228 229 230 231 232 |
/* Structure that defines QE firmware binary files. * * See doc/README.qe_firmware for a description of these fields. */ struct qe_firmware { struct qe_header { |
53677ef18 Big white-space c... |
233 234 235 |
u32 length; /* Length of the entire structure, in bytes */ u8 magic[3]; /* Set to { 'Q', 'E', 'F' } */ u8 version; /* Version of this layout. First ver is '1' */ |
b8ec23850 85xx: add ability... |
236 |
} header; |
53677ef18 Big white-space c... |
237 238 239 |
u8 id[62]; /* Null-terminated identifier string */ u8 split; /* 0 = shared I-RAM, 1 = split I-RAM */ u8 count; /* Number of microcode[] structures */ |
b8ec23850 85xx: add ability... |
240 |
struct { |
53677ef18 Big white-space c... |
241 242 243 |
u16 model; /* The SOC model */ u8 major; /* The SOC revision major */ u8 minor; /* The SOC revision minor */ |
b8ec23850 85xx: add ability... |
244 |
} __attribute__ ((packed)) soc; |
53677ef18 Big white-space c... |
245 246 |
u8 padding[4]; /* Reserved, for alignment */ u64 extended_modes; /* Extended modes */ |
b8ec23850 85xx: add ability... |
247 |
u32 vtraps[8]; /* Virtual trap addresses */ |
53677ef18 Big white-space c... |
248 |
u8 reserved[4]; /* Reserved, for future expansion */ |
b8ec23850 85xx: add ability... |
249 |
struct qe_microcode { |
53677ef18 Big white-space c... |
250 251 252 253 254 255 256 257 258 259 260 |
u8 id[32]; /* Null-terminated identifier */ u32 traps[16]; /* Trap addresses, 0 == ignore */ u32 eccr; /* The value for the ECCR register */ u32 iram_offset;/* Offset into I-RAM for the code */ u32 count; /* Number of 32-bit words of the code */ u32 code_offset;/* Offset of the actual microcode */ u8 major; /* The microcode version major */ u8 minor; /* The microcode version minor */ u8 revision; /* The microcode version revision */ u8 padding; /* Reserved, for alignment */ u8 reserved[4]; /* Reserved, for future expansion */ |
b8ec23850 85xx: add ability... |
261 262 263 264 265 266 267 268 269 270 |
} __attribute__ ((packed)) microcode[1]; /* All microcode binaries should be located here */ /* CRC32 should be located here, after the microcode binaries */ } __attribute__ ((packed)); struct qe_firmware_info { char id[64]; /* Firmware name */ u32 vtraps[8]; /* Virtual trap addresses */ u64 extended_modes; /* Extended modes */ }; |
7737d5c65 mpc83xx: add QE e... |
271 272 273 274 275 276 277 278 279 280 281 |
void qe_config_iopin(u8 port, u8 pin, int dir, int open_drain, int assign); void qe_issue_cmd(uint cmd, uint sbc, u8 mcn, u32 cmd_data); uint qe_muram_alloc(uint size, uint align); void *qe_muram_addr(uint offset); int qe_get_snum(void); void qe_put_snum(u8 snum); void qe_init(uint qe_base); void qe_reset(void); void qe_assign_page(uint snum, uint para_ram_base); int qe_set_brg(uint brg, uint rate); int qe_set_mii_clk_src(int ucc_num); |
b8ec23850 85xx: add ability... |
282 283 |
int qe_upload_firmware(const struct qe_firmware *firmware); struct qe_firmware_info *qe_get_firmware_info(void); |
69018ce2e QE: Move FDT supp... |
284 |
void ft_qe_setup(void *blob); |
2a44efeb2 QE/U-QE: Add U-QE... |
285 286 |
void qe_init(uint qe_base); void qe_reset(void); |
7737d5c65 mpc83xx: add QE e... |
287 |
|
5632d15cf u_qe: add u_qe_up... |
288 289 290 |
#ifdef CONFIG_U_QE void u_qe_init(void); int u_qe_upload_firmware(const struct qe_firmware *firmware); |
ae42eb035 QE/DeepSleep: add... |
291 292 293 |
void u_qe_resume(void); int u_qe_firmware_resume(const struct qe_firmware *firmware, qe_map_t *qe_immrr); |
5632d15cf u_qe: add u_qe_up... |
294 |
#endif |
7737d5c65 mpc83xx: add QE e... |
295 |
#endif /* __QE_H__ */ |