Merge tag 'fsnotify_for_v6.5-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git...
[sfrench/cifs-2.6.git] / drivers / dma / dw-edma / dw-hdma-v0-regs.h
1 /* SPDX-License-Identifier: GPL-2.0 */
2 /*
3  * Copyright (c) 2023 Cai Huoqing
4  * Synopsys DesignWare HDMA v0 reg
5  *
6  * Author: Cai Huoqing <cai.huoqing@linux.dev>
7  */
8
9 #ifndef _DW_HDMA_V0_REGS_H
10 #define _DW_HDMA_V0_REGS_H
11
12 #include <linux/dmaengine.h>
13
14 #define HDMA_V0_MAX_NR_CH                       8
15 #define HDMA_V0_LOCAL_ABORT_INT_EN              BIT(6)
16 #define HDMA_V0_REMOTE_ABORT_INT_EN             BIT(5)
17 #define HDMA_V0_LOCAL_STOP_INT_EN               BIT(4)
18 #define HDMA_V0_REMOTEL_STOP_INT_EN             BIT(3)
19 #define HDMA_V0_ABORT_INT_MASK                  BIT(2)
20 #define HDMA_V0_STOP_INT_MASK                   BIT(0)
21 #define HDMA_V0_LINKLIST_EN                     BIT(0)
22 #define HDMA_V0_CONSUMER_CYCLE_STAT             BIT(1)
23 #define HDMA_V0_CONSUMER_CYCLE_BIT              BIT(0)
24 #define HDMA_V0_DOORBELL_START                  BIT(0)
25 #define HDMA_V0_CH_STATUS_MASK                  GENMASK(1, 0)
26
27 struct dw_hdma_v0_ch_regs {
28         u32 ch_en;                              /* 0x0000 */
29         u32 doorbell;                           /* 0x0004 */
30         u32 prefetch;                           /* 0x0008 */
31         u32 handshake;                          /* 0x000c */
32         union {
33                 u64 reg;                        /* 0x0010..0x0014 */
34                 struct {
35                         u32 lsb;                /* 0x0010 */
36                         u32 msb;                /* 0x0014 */
37                 };
38         } llp;
39         u32 cycle_sync;                         /* 0x0018 */
40         u32 transfer_size;                      /* 0x001c */
41         union {
42                 u64 reg;                        /* 0x0020..0x0024 */
43                 struct {
44                         u32 lsb;                /* 0x0020 */
45                         u32 msb;                /* 0x0024 */
46                 };
47         } sar;
48         union {
49                 u64 reg;                        /* 0x0028..0x002c */
50                 struct {
51                         u32 lsb;                /* 0x0028 */
52                         u32 msb;                /* 0x002c */
53                 };
54         } dar;
55         u32 watermark_en;                       /* 0x0030 */
56         u32 control1;                           /* 0x0034 */
57         u32 func_num;                           /* 0x0038 */
58         u32 qos;                                /* 0x003c */
59         u32 padding_1[16];                      /* 0x0040..0x007c */
60         u32 ch_stat;                            /* 0x0080 */
61         u32 int_stat;                           /* 0x0084 */
62         u32 int_setup;                          /* 0x0088 */
63         u32 int_clear;                          /* 0x008c */
64         union {
65                 u64 reg;                        /* 0x0090..0x0094 */
66                 struct {
67                         u32 lsb;                /* 0x0090 */
68                         u32 msb;                /* 0x0094 */
69                 };
70         } msi_stop;
71         union {
72                 u64 reg;                        /* 0x0098..0x009c */
73                 struct {
74                         u32 lsb;                /* 0x0098 */
75                         u32 msb;                /* 0x009c */
76                 };
77         } msi_watermark;
78         union {
79                 u64 reg;                        /* 0x00a0..0x00a4 */
80                 struct {
81                         u32 lsb;                /* 0x00a0 */
82                         u32 msb;                /* 0x00a4 */
83                 };
84         } msi_abort;
85         u32 msi_msgdata;                        /* 0x00a8 */
86         u32 padding_2[21];                      /* 0x00ac..0x00fc */
87 } __packed;
88
89 struct dw_hdma_v0_ch {
90         struct dw_hdma_v0_ch_regs wr;           /* 0x0000 */
91         struct dw_hdma_v0_ch_regs rd;           /* 0x0100 */
92 } __packed;
93
94 struct dw_hdma_v0_regs {
95         struct dw_hdma_v0_ch ch[HDMA_V0_MAX_NR_CH];     /* 0x0000..0x0fa8 */
96 } __packed;
97
98 struct dw_hdma_v0_lli {
99         u32 control;
100         u32 transfer_size;
101         union {
102                 u64 reg;
103                 struct {
104                         u32 lsb;
105                         u32 msb;
106                 };
107         } sar;
108         union {
109                 u64 reg;
110                 struct {
111                         u32 lsb;
112                         u32 msb;
113                 };
114         } dar;
115 } __packed;
116
117 struct dw_hdma_v0_llp {
118         u32 control;
119         u32 reserved;
120         union {
121                 u64 reg;
122                 struct {
123                         u32 lsb;
124                         u32 msb;
125                 };
126         } llp;
127 } __packed;
128
129 #endif /* _DW_HDMA_V0_REGS_H */