1*83d290c5STom Rini /* SPDX-License-Identifier: GPL-2.0+ */ 2ae691e57SStefan Roese /* 3ae691e57SStefan Roese * (C) Copyright 2009 Stefan Roese <sr@denx.de>, DENX Software Engineering 4ae691e57SStefan Roese * 5ae691e57SStefan Roese * Copyright (C) 2006 Micronas GmbH 6ae691e57SStefan Roese */ 7ae691e57SStefan Roese 8ae691e57SStefan Roese #ifndef _SCC_H 9ae691e57SStefan Roese #define _SCC_H 10ae691e57SStefan Roese 11ae691e57SStefan Roese #define DMA_READ 0 /* SCC read DMA */ 12ae691e57SStefan Roese #define DMA_WRITE 1 /* SCC write DMA */ 13ae691e57SStefan Roese 14ae691e57SStefan Roese #define DMA_LINEAR 0 /* DMA linear buffer access method */ 15ae691e57SStefan Roese #define DMA_CYCLIC 1 /* DMA cyclic buffer access method */ 16ae691e57SStefan Roese 17ae691e57SStefan Roese #define DMA_START 0 /* DMA command - start DMA */ 18ae691e57SStefan Roese #define DMA_STOP 1 /* DMA command - stop DMA */ 19ae691e57SStefan Roese #define DMA_START_FH_RESET 2 /* DMA command - start DMA reset FH */ 20ae691e57SStefan Roese #define DMA_TAKEOVER 15 /* DMA command - commit the DMA conf */ 21ae691e57SStefan Roese 22ae691e57SStefan Roese #define AGU_ACTIVE 0 /* enable AGU address calculation */ 23ae691e57SStefan Roese #define AGU_BYPASS 1 /* set AGU to bypass mode */ 24ae691e57SStefan Roese 25ae691e57SStefan Roese #define USE_NO_FH 0 /* order the DMA to not use FH */ 26ae691e57SStefan Roese #define USE_FH 1 /* order the DMA to work with FH*/ 27ae691e57SStefan Roese 28ae691e57SStefan Roese #define SCC_DBG_IDLE 0 /* DEBUG status (idle interfaces) */ 29ae691e57SStefan Roese #define SCC_DBG_SYNC_RES 0x0001 /* synchronuous reset */ 30ae691e57SStefan Roese 31ae691e57SStefan Roese #define SCC_TO_IMMEDIATE 1 /* takeover command issued immediately*/ 32ae691e57SStefan Roese #define TO_DMA_CFG 2 /* takeover command for the DMA config*/ 33ae691e57SStefan Roese 34ae691e57SStefan Roese #define DMA_CMD_RESET 0 35ae691e57SStefan Roese #define DMA_CMD_SETUP 1 36ae691e57SStefan Roese #define DMA_CMD_START 2 37ae691e57SStefan Roese #define DMA_CMD_STOP 3 38ae691e57SStefan Roese 39ae691e57SStefan Roese #define DMA_STATE_RESET 0 40ae691e57SStefan Roese #define DMA_STATE_SETUP 1 41ae691e57SStefan Roese #define DMA_STATE_START 2 42ae691e57SStefan Roese #define DMA_STATE_ERROR 3 43ae691e57SStefan Roese 44ae691e57SStefan Roese #define SRMD 0 45ae691e57SStefan Roese #define STRM_D 1 46ae691e57SStefan Roese #define STRM_P 2 47ae691e57SStefan Roese 48ae691e57SStefan Roese /* 49ae691e57SStefan Roese * Slowest Monterey domain is DVP 27 MHz (324/27 = 12; 12*16 = 192 CPU clocks) 50ae691e57SStefan Roese */ 51ae691e57SStefan Roese #define RESET_TIME 2 /* cycle calc see in SCC_Reset */ 52ae691e57SStefan Roese 53ae691e57SStefan Roese struct scc_descriptor { 54ae691e57SStefan Roese char *pu_name; /* PU identifier */ 55ae691e57SStefan Roese char *scc_instance; /* SCC Name */ 56ae691e57SStefan Roese u32 profile; /* SCC VCI_D profile */ 57ae691e57SStefan Roese 58ae691e57SStefan Roese u32 base_address; /* base address of the SCC unit reg shell*/ 59ae691e57SStefan Roese 60ae691e57SStefan Roese /* SCS Interconnect configuration */ 61ae691e57SStefan Roese u32 p_scc_id; /* instance number of SCC unit */ 62ae691e57SStefan Roese u32 p_mci_id; /* memory channel ID */ 63ae691e57SStefan Roese 64ae691e57SStefan Roese /* DMA Registers configuration */ 65ae691e57SStefan Roese u32 p_dma_channels_rd; /* Number of Read DMA channels */ 66ae691e57SStefan Roese u32 p_dma_channels_wr; /* Number of Write DMA channels */ 67ae691e57SStefan Roese 68ae691e57SStefan Roese u32 p_dma_packet_desc; /* Number of packet descriptors */ 69ae691e57SStefan Roese u32 p_dma_mci_desc; /* Number of MCI_CFG Descriptors */ 70ae691e57SStefan Roese 71ae691e57SStefan Roese int use_fh; /* the flag tells if SCC uses an FH */ 72ae691e57SStefan Roese 73ae691e57SStefan Roese int p_si2ocp_id; /* instance number of SI2OCP unit */ 74ae691e57SStefan Roese int hw_dma_cfg; /* HW or SW DMA config flag */ 75ae691e57SStefan Roese int hw_dma_start; /* HW or SW DMA start/stop flag */ 76ae691e57SStefan Roese 77ae691e57SStefan Roese u32 *buffer_tag_list; /* list of the buffer tags available */ 78ae691e57SStefan Roese u32 *csize_list; /* list of the valid CSIZE values */ 79ae691e57SStefan Roese }; 80ae691e57SStefan Roese 81ae691e57SStefan Roese struct scc_dma_state { 82ae691e57SStefan Roese u32 scc_id:8; /* SCC id */ 83ae691e57SStefan Roese u32 dma_id:8; /* DMA id, used for match with array idx*/ 84ae691e57SStefan Roese u32 buffer_tag:8; /* mem buf tag, assigned to this DMA */ 85ae691e57SStefan Roese u32 dma_status:2; /* state of DMA, of the DMA_STATE_ const*/ 86ae691e57SStefan Roese u32 dma_drs:2; /* DMA dir, either DMA_READ or DMA_WRITE*/ 87ae691e57SStefan Roese u32 dma_cmd:4; /* last executed command on this DMA */ 88ae691e57SStefan Roese }; 89ae691e57SStefan Roese 90ae691e57SStefan Roese union scc_cmd { 91ae691e57SStefan Roese u32 reg; 92ae691e57SStefan Roese struct { 93ae691e57SStefan Roese u32 res1:19; /* reserved */ 94ae691e57SStefan Roese u32 drs:1; /* DMA Register Set */ 95ae691e57SStefan Roese u32 rid:2; /* Register Identifier */ 96ae691e57SStefan Roese u32 id:6; /* DMA Identifier */ 97ae691e57SStefan Roese u32 action:4; /* DMA Command encoding */ 98ae691e57SStefan Roese } bits; 99ae691e57SStefan Roese }; 100ae691e57SStefan Roese 101ae691e57SStefan Roese union scc_dma_cfg { 102ae691e57SStefan Roese u32 reg; 103ae691e57SStefan Roese struct { 104ae691e57SStefan Roese u32 res1:17; /* reserved */ 105ae691e57SStefan Roese u32 agu_mode:1; /* AGU Mode */ 106ae691e57SStefan Roese u32 res2:1; /* reserved */ 107ae691e57SStefan Roese u32 fh_mode:1; /* Fifo Handler */ 108ae691e57SStefan Roese u32 buffer_type:1; /* Defines type of mem buffers */ 109ae691e57SStefan Roese u32 mci_cfg_id:1; /* MCI_CFG register selector */ 110ae691e57SStefan Roese u32 packet_cfg_id:1; /* PACKET_CFG register selector */ 111ae691e57SStefan Roese u32 buffer_id:8; /* DMA Buffer Identifier */ 112ae691e57SStefan Roese } bits; 113ae691e57SStefan Roese }; 114ae691e57SStefan Roese 115ae691e57SStefan Roese union scc_debug { 116ae691e57SStefan Roese u32 reg; 117ae691e57SStefan Roese struct { 118ae691e57SStefan Roese u32 res1:20; /* reserved */ 119ae691e57SStefan Roese u32 arg:8; /* SCC Debug Command Argument (#) */ 120ae691e57SStefan Roese u32 cmd:4; /* SCC Debug Command Register */ 121ae691e57SStefan Roese } bits; 122ae691e57SStefan Roese }; 123ae691e57SStefan Roese 124ae691e57SStefan Roese union scc_softwareconfiguration { 125ae691e57SStefan Roese u32 reg; 126ae691e57SStefan Roese struct { 127ae691e57SStefan Roese u32 res1:28; /* reserved */ 128ae691e57SStefan Roese u32 clock_status:1; /* clock on/off */ 129ae691e57SStefan Roese u32 packet_select:1; /* active SCC packet id */ 130ae691e57SStefan Roese u32 enable_status:1; /* enabled [1/0] */ 131ae691e57SStefan Roese u32 active_status:1; /* 1=active 0=reset */ 132ae691e57SStefan Roese } bits; 133ae691e57SStefan Roese }; 134ae691e57SStefan Roese 135ae691e57SStefan Roese /* 136ae691e57SStefan Roese * System on Chip Channel ID 137ae691e57SStefan Roese */ 138ae691e57SStefan Roese enum scc_id { 139ae691e57SStefan Roese SCC_NULL = -1, /* illegal SCC identifier */ 140ae691e57SStefan Roese SCC_FE_3DCOMB_WR, /* SCC_FE_3DCOMB Write channel */ 141ae691e57SStefan Roese SCC_FE_3DCOMB_RD, /* SCC_FE_3DCOMB Read channel */ 142ae691e57SStefan Roese SCC_DI_TNR_WR, /* SCC_DI_TNR Write channel */ 143ae691e57SStefan Roese SCC_DI_TNR_FIELD_RD, /* SCC_DI_TNR_FIELD Read channel */ 144ae691e57SStefan Roese SCC_DI_TNR_FRAME_RD, /* SCC_DI_TNR_FRAME Read channel */ 145ae691e57SStefan Roese SCC_DI_MVAL_WR, /* SCC_DI_MVAL Write channel */ 146ae691e57SStefan Roese SCC_DI_MVAL_RD, /* SCC_DI_MVAL Read channel */ 147ae691e57SStefan Roese SCC_RC_FRAME_WR, /* SCC_RC_FRAME Write channel */ 148ae691e57SStefan Roese SCC_RC_FRAME0_RD, /* SCC_RC_FRAME0 Read channel */ 149ae691e57SStefan Roese SCC_OPT_FIELD0_RD, /* SCC_OPT_FIELD0 Read channel */ 150ae691e57SStefan Roese SCC_OPT_FIELD1_RD, /* SCC_OPT_FIELD1 Read channel */ 151ae691e57SStefan Roese SCC_OPT_FIELD2_RD, /* SCC_OPT_FIELD2 Read channel */ 152ae691e57SStefan Roese SCC_PIP_FRAME_WR, /* SCC_PIP_FRAME Write channel */ 153ae691e57SStefan Roese SCC_PIP_FRAME_RD, /* SCC_PIP_FRAME Read channel */ 154ae691e57SStefan Roese SCC_DP_AGPU_RD, /* SCC_DP_AGPU Read channel */ 155ae691e57SStefan Roese SCC_EWARP_RW, /* SCC_EWARP Read/Write channel */ 156ae691e57SStefan Roese SCC_DP_OSD_RD, /* SCC_DP_OSD Read channel */ 157ae691e57SStefan Roese SCC_DP_GRAPHIC_RD, /* SCC_DP_GRAPHIC Read channel */ 158ae691e57SStefan Roese SCC_DVP_OSD_RD, /* SCC_DVP_OSD Read channel */ 159ae691e57SStefan Roese SCC_DVP_VBI_RD, /* SCC_DVP_VBI Read channel */ 160ae691e57SStefan Roese SCC_TSIO_WR, /* SCC_TSIO Write channel */ 161ae691e57SStefan Roese SCC_TSIO_RD, /* SCC_TSIO Read channel */ 162ae691e57SStefan Roese SCC_TSD_WR, /* SCC_TSD Write channel */ 163ae691e57SStefan Roese SCC_VD_UD_ST_RW, /* SCC_VD_UD_ST Read/Write channel */ 164ae691e57SStefan Roese SCC_VD_FRR_RD, /* SCC_VD_FRR Read channel */ 165ae691e57SStefan Roese SCC_VD_FRW_DISP_WR, /* SCC_VD_FRW_DISP Write channel */ 166ae691e57SStefan Roese SCC_MR_VD_M_Y_RD, /* SCC_MR_VD_M_Y Read channel */ 167ae691e57SStefan Roese SCC_MR_VD_M_C_RD, /* SCC_MR_VD_M_C Read channel */ 168ae691e57SStefan Roese SCC_MR_VD_S_Y_RD, /* SCC_MR_VD_S_Y Read channel */ 169ae691e57SStefan Roese SCC_MR_VD_S_C_RD, /* SCC_MR_VD_S_C Read channel */ 170ae691e57SStefan Roese SCC_GA_WR, /* SCC_GA Write channel */ 171ae691e57SStefan Roese SCC_GA_SRC1_RD, /* SCC_GA_SRC1 Read channel */ 172ae691e57SStefan Roese SCC_GA_SRC2_RD, /* SCC_GA_SRC2 Read channel */ 173ae691e57SStefan Roese SCC_AD_RD, /* SCC_AD Read channel */ 174ae691e57SStefan Roese SCC_AD_WR, /* SCC_AD Write channel */ 175ae691e57SStefan Roese SCC_ABP_RD, /* SCC_ABP Read channel */ 176ae691e57SStefan Roese SCC_ABP_WR, /* SCC_ABP Write channel */ 177ae691e57SStefan Roese SCC_EBI_RW, /* SCC_EBI Read/Write channel */ 178ae691e57SStefan Roese SCC_USB_RW, /* SCC_USB Read/Write channel */ 179ae691e57SStefan Roese SCC_CPU1_SPDMA_RW, /* SCC_CPU1_SPDMA Read/Write channel */ 180ae691e57SStefan Roese SCC_CPU1_BRIDGE_RW, /* SCC_CPU1_BRIDGE Read/Write channel */ 181ae691e57SStefan Roese SCC_MAX /* maximum limit on the SCC id */ 182ae691e57SStefan Roese }; 183ae691e57SStefan Roese 184ae691e57SStefan Roese int scc_set_usb_address_generation_mode(u32 agu_mode); 185ae691e57SStefan Roese int scc_dma_cmd(enum scc_id id, u32 cmd, u32 dma_id, u32 drs); 186ae691e57SStefan Roese int scc_setup_dma(enum scc_id id, u32 buffer_tag, 187ae691e57SStefan Roese u32 type, u32 fh_mode, u32 drs, u32 dma_id); 188ae691e57SStefan Roese int scc_enable(enum scc_id id, u32 value); 189ae691e57SStefan Roese int scc_reset(enum scc_id id, u32 value); 190ae691e57SStefan Roese 191ae691e57SStefan Roese #endif /* _SCC_H */ 192