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