11bd4fe43Sopenharmony_ci/* 21bd4fe43Sopenharmony_ci * Copyright (c) 2021 HiSilicon (Shanghai) Technologies CO., LIMITED. 31bd4fe43Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 41bd4fe43Sopenharmony_ci * you may not use this file except in compliance with the License. 51bd4fe43Sopenharmony_ci * You may obtain a copy of the License at 61bd4fe43Sopenharmony_ci * 71bd4fe43Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 81bd4fe43Sopenharmony_ci * 91bd4fe43Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 101bd4fe43Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 111bd4fe43Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 121bd4fe43Sopenharmony_ci * See the License for the specific language governing permissions and 131bd4fe43Sopenharmony_ci * limitations under the License. 141bd4fe43Sopenharmony_ci */ 151bd4fe43Sopenharmony_ci 161bd4fe43Sopenharmony_ci#ifndef DMAC_HI35XX_H 171bd4fe43Sopenharmony_ci#define DMAC_HI35XX_H 181bd4fe43Sopenharmony_ci 191bd4fe43Sopenharmony_ci#include "asm/platform.h" 201bd4fe43Sopenharmony_ci 211bd4fe43Sopenharmony_ci#ifdef __cplusplus 221bd4fe43Sopenharmony_ci#if __cplusplus 231bd4fe43Sopenharmony_ciextern "C" { 241bd4fe43Sopenharmony_ci#endif /* __cplusplus */ 251bd4fe43Sopenharmony_ci#endif /* __cplusplus */ 261bd4fe43Sopenharmony_ci 271bd4fe43Sopenharmony_ci#define HIDMAC_CHANNEL_NUM 8 281bd4fe43Sopenharmony_ci#define HIDMAC_ENABLE 1 291bd4fe43Sopenharmony_ci 301bd4fe43Sopenharmony_ci#define HIDMAC_MAX_PERIPHERALS 32 311bd4fe43Sopenharmony_ci#define HIDMAC_PERI_ID_OFFSET 4 321bd4fe43Sopenharmony_ci#define HIDMAC_SRC_WIDTH_OFFSET 16 331bd4fe43Sopenharmony_ci#define HIDMAC_DST_WIDTH_OFFSET 12 341bd4fe43Sopenharmony_ci#define HIDMAC_CH_ENABLE 1 351bd4fe43Sopenharmony_ci 361bd4fe43Sopenharmony_cienum HiDmacPeriphWidth { 371bd4fe43Sopenharmony_ci PERI_MODE_8BIT = 0, 381bd4fe43Sopenharmony_ci PERI_MODE_16BIT = 1, 391bd4fe43Sopenharmony_ci PERI_MODE_32BIT = 2, 401bd4fe43Sopenharmony_ci PERI_MODE_64BIT = 3, 411bd4fe43Sopenharmony_ci}; 421bd4fe43Sopenharmony_ci 431bd4fe43Sopenharmony_ci/* UART ADDRESS INFO */ 441bd4fe43Sopenharmony_ci#define UART0_RX_ADDR (UART0_REG_BASE + 0x0) 451bd4fe43Sopenharmony_ci#define UART0_TX_ADDR (UART0_REG_BASE + 0x0) 461bd4fe43Sopenharmony_ci#define UART1_RX_ADDR (UART1_REG_BASE + 0x0) 471bd4fe43Sopenharmony_ci#define UART1_TX_ADDR (UART1_REG_BASE + 0x0) 481bd4fe43Sopenharmony_ci#define UART2_RX_ADDR (UART2_REG_BASE + 0x0) 491bd4fe43Sopenharmony_ci#define UART2_TX_ADDR (UART2_REG_BASE + 0x0) 501bd4fe43Sopenharmony_ci 511bd4fe43Sopenharmony_ci/* I2C ADDRESS INFO */ 521bd4fe43Sopenharmony_ci#define I2C0_TX_FIFO (I2C0_REG_BASE + 0x20) 531bd4fe43Sopenharmony_ci#define I2C0_RX_FIFO (I2C0_REG_BASE + 0x24) 541bd4fe43Sopenharmony_ci#define I2C1_TX_FIFO (I2C1_REG_BASE + 0x20) 551bd4fe43Sopenharmony_ci#define I2C1_RX_FIFO (I2C1_REG_BASE + 0x24) 561bd4fe43Sopenharmony_ci#define I2C2_TX_FIFO (I2C2_REG_BASE + 0x20) 571bd4fe43Sopenharmony_ci#define I2C2_RX_FIFO (I2C2_REG_BASE + 0x24) 581bd4fe43Sopenharmony_ci 591bd4fe43Sopenharmony_ci/* SPI ADDRESS INFO */ 601bd4fe43Sopenharmony_ci#define SPI0_RX_FIFO (0x120c0000 + 0x8) 611bd4fe43Sopenharmony_ci#define SPI0_TX_FIFO (0x120c0000 + 0x8) 621bd4fe43Sopenharmony_ci#define SPI1_RX_FIFO (0x120c1000 + 0x8) 631bd4fe43Sopenharmony_ci#define SPI1_TX_FIFO (0x120c1000 + 0x8) 641bd4fe43Sopenharmony_ci#define SPI2_RX_FIFO (0x120c2000 + 0x8) 651bd4fe43Sopenharmony_ci#define SPI2_TX_FIFO (0x120c2000 + 0x8) 661bd4fe43Sopenharmony_ci 671bd4fe43Sopenharmony_ci#define HIDMAC_PERI_CRG101_OFFSET 0x194 681bd4fe43Sopenharmony_ci#define HIDMA0_AXI_OFFSET 2 691bd4fe43Sopenharmony_ci#define HIDMA0_CLK_OFFSET 1 701bd4fe43Sopenharmony_ci#define HIDMA0_RST_OFFSET 0 711bd4fe43Sopenharmony_ci#define DDRAM_ADDR DDR_MEM_BASE 721bd4fe43Sopenharmony_ci#define DDRAM_SIZE 0x3FFFFFFF 731bd4fe43Sopenharmony_ci 741bd4fe43Sopenharmony_ci#define HIDMAC_INT_STAT_OFFSET 0x00 751bd4fe43Sopenharmony_ci#define HIDMAC_INT_TC1_OFFSET 0x04 761bd4fe43Sopenharmony_ci#define HIDMAC_INT_TC2_OFFSET 0x08 771bd4fe43Sopenharmony_ci#define HIDMAC_INT_ERR1_OFFSET 0x0C 781bd4fe43Sopenharmony_ci#define HIDMAC_INT_ERR2_OFFSET 0x10 791bd4fe43Sopenharmony_ci#define HIDMAC_INT_ERR3_OFFSET 0x14 801bd4fe43Sopenharmony_ci#define HIDMAC_INT_TC1_MASK_OFFSET 0x18 811bd4fe43Sopenharmony_ci#define HIDMAC_INT_TC2_MASK_OFFSET 0x1C 821bd4fe43Sopenharmony_ci#define HIDMAC_INT_ERR1_MASK_OFFSET 0x20 831bd4fe43Sopenharmony_ci#define HIDMAC_INT_ERR2_MASK_OFFSET 0x24 841bd4fe43Sopenharmony_ci#define HIDMAC_INT_ERR3_MASK_OFFSET 0x28 851bd4fe43Sopenharmony_ci#define HIDMAC_INT_TC1_RAW_OFFSET 0x600 861bd4fe43Sopenharmony_ci#define HIDMAC_INT_TC2_RAW_OFFSET 0x608 871bd4fe43Sopenharmony_ci#define HIDMAC_INT_ERR1_RAW_OFFSET 0x610 881bd4fe43Sopenharmony_ci#define HIDMAC_INT_ERR2_RAW_OFFSET 0x618 891bd4fe43Sopenharmony_ci#define HIDMAC_INT_ERR3_RAW_OFFSET 0x620 901bd4fe43Sopenharmony_ci#define HIDMAC_CH_PRI_OFFSET 0x688 911bd4fe43Sopenharmony_ci#define HIDMAC_CH_STAT_OFFSET 0x690 921bd4fe43Sopenharmony_ci#define HIDMAC_CX_CUR_SRC_OFFSET(x) (0x408 + (x) * 0x20) 931bd4fe43Sopenharmony_ci#define HIDMAC_CX_CUR_DST_OFFSET(x) (0x410 + (x) * 0x20) 941bd4fe43Sopenharmony_ci#define HIDMAC_CX_LLI_OFFSET_L(x) (0x800 + (x) * 0x40) 951bd4fe43Sopenharmony_ci#define HIDMAC_CX_LLI_OFFSET_H(x) (0x804 + (x) * 0x40) 961bd4fe43Sopenharmony_ci#define HIDMAC_CX_CNT0_OFFSET(x) (0x81C + (x) * 0x40) 971bd4fe43Sopenharmony_ci#define HIDMAC_CX_SRC_OFFSET_L(x) (0x820 + (x) * 0x40) 981bd4fe43Sopenharmony_ci#define HIDMAC_CX_SRC_OFFSET_H(x) (0x824 + (x) * 0x40) 991bd4fe43Sopenharmony_ci#define HIDMAC_CX_DST_OFFSET_L(x) (0x828 + (x) * 0x40) 1001bd4fe43Sopenharmony_ci#define HIDMAC_CX_DST_OFFSET_H(x) (0x82C + (x) * 0x40) 1011bd4fe43Sopenharmony_ci#define HIDMAC_CX_CFG_OFFSET(x) (0x830 + (x) * 0x40) 1021bd4fe43Sopenharmony_ci 1031bd4fe43Sopenharmony_ci/* others */ 1041bd4fe43Sopenharmony_ci#define HIDMAC_ALL_CHAN_CLR 0xFF 1051bd4fe43Sopenharmony_ci#define HIDMAC_INT_ENABLE_ALL_CHAN 0xFF 1061bd4fe43Sopenharmony_ci#define HIDMAC_CFG_SRC_INC (1 << 31) 1071bd4fe43Sopenharmony_ci#define HIDMAC_CFG_DST_INC (1 << 30) 1081bd4fe43Sopenharmony_ci#define HIDMAC_CFG_SRC_WIDTH_SHIFT 16 1091bd4fe43Sopenharmony_ci#define HIDMAC_CFG_DST_WIDTH_SHIFT 12 1101bd4fe43Sopenharmony_ci#define HIDMAC_WIDTH_8BIT 0x0 1111bd4fe43Sopenharmony_ci#define HIDMAC_WIDTH_16BIT 0x1 1121bd4fe43Sopenharmony_ci#define HIDMAC_WIDTH_32BIT 0x10 1131bd4fe43Sopenharmony_ci#define HIDMAC_WIDTH_64BIT 0x11 1141bd4fe43Sopenharmony_ci#define HIDMAC_BURST_WIDTH_MAX 16 1151bd4fe43Sopenharmony_ci#define HIDMAC_BURST_WIDTH_MIN 1 1161bd4fe43Sopenharmony_ci#define HIDMAC_CFG_SRC_BURST_SHIFT 24 1171bd4fe43Sopenharmony_ci#define HIDMAC_CFG_DST_BURST_SHIFT 20 1181bd4fe43Sopenharmony_ci#define HIDMAC_LLI_ALIGN 0x40 1191bd4fe43Sopenharmony_ci#define HIDMAC_LLI_DISABLE 0x0 1201bd4fe43Sopenharmony_ci#define HIDMAC_LLI_ENABLE 0x2 1211bd4fe43Sopenharmony_ci#define HIDMAC_CX_CFG_SIGNAL_SHIFT 0x4 1221bd4fe43Sopenharmony_ci#define HIDMAC_CX_CFG_MEM_TYPE 0x0 1231bd4fe43Sopenharmony_ci#define HIDMAC_CX_CFG_DEV_MEM_TYPE 0x1 1241bd4fe43Sopenharmony_ci#define HIDMAC_CX_CFG_TSF_TYPE_SHIFT 0x2 1251bd4fe43Sopenharmony_ci#define HIDMAC_CX_CFG_ITC_EN 0x1 1261bd4fe43Sopenharmony_ci#define HIDMAC_CX_CFG_ITC_EN_SHIFT 0x1 1271bd4fe43Sopenharmony_ci#define HIDMAC_CX_CFG_M2M 0xCFF00001 1281bd4fe43Sopenharmony_ci#define HIDMAC_CX_CFG_CHN_START 0x1 1291bd4fe43Sopenharmony_ci#define HIDMAC_CX_DISABLE 0x0 1301bd4fe43Sopenharmony_ci#define HIDMAC_M2M 0x0 1311bd4fe43Sopenharmony_ci#define HIDMAC_NOM2M 0x1 1321bd4fe43Sopenharmony_ci#define HIDMAC_TRQANS_MAX_SIZE (64 * 1024 - 1) 1331bd4fe43Sopenharmony_ci 1341bd4fe43Sopenharmony_cistruct HiDmacPeripheral { 1351bd4fe43Sopenharmony_ci unsigned int periphId; // peripheral ID 1361bd4fe43Sopenharmony_ci uintptr_t periphAddr; // peripheral data register address 1371bd4fe43Sopenharmony_ci int hostSel; // config request 1381bd4fe43Sopenharmony_ci#define HIDMAC_HOST0 0 1391bd4fe43Sopenharmony_ci#define HIDMAC_HOST1 1 1401bd4fe43Sopenharmony_ci#define HIDMAC_NOT_USE (-1) 1411bd4fe43Sopenharmony_ci unsigned long transCfg; // default channel config word 1421bd4fe43Sopenharmony_ci unsigned int transWidth; // transfer data width 1431bd4fe43Sopenharmony_ci unsigned int dynPeripNum; // dynamic peripheral number 1441bd4fe43Sopenharmony_ci}; 1451bd4fe43Sopenharmony_ci 1461bd4fe43Sopenharmony_ci#ifdef __cplusplus 1471bd4fe43Sopenharmony_ci#if __cplusplus 1481bd4fe43Sopenharmony_ci} 1491bd4fe43Sopenharmony_ci#endif /* __cplusplus */ 1501bd4fe43Sopenharmony_ci#endif /* __cplusplus */ 1511bd4fe43Sopenharmony_ci#endif /* DMAC_HI35XX_H */ 152