1 // See LICENSE for license details.
\r
3 #ifndef _SIFIVE_SPI_H
\r
4 #define _SIFIVE_SPI_H
\r
6 /* Register offsets */
\r
8 #define SPI_REG_SCKDIV 0x00
\r
9 #define SPI_REG_SCKMODE 0x04
\r
10 #define SPI_REG_CSID 0x10
\r
11 #define SPI_REG_CSDEF 0x14
\r
12 #define SPI_REG_CSMODE 0x18
\r
14 #define SPI_REG_DCSSCK 0x28
\r
15 #define SPI_REG_DSCKCS 0x2a
\r
16 #define SPI_REG_DINTERCS 0x2c
\r
17 #define SPI_REG_DINTERXFR 0x2e
\r
19 #define SPI_REG_FMT 0x40
\r
20 #define SPI_REG_TXFIFO 0x48
\r
21 #define SPI_REG_RXFIFO 0x4c
\r
22 #define SPI_REG_TXCTRL 0x50
\r
23 #define SPI_REG_RXCTRL 0x54
\r
25 #define SPI_REG_FCTRL 0x60
\r
26 #define SPI_REG_FFMT 0x64
\r
28 #define SPI_REG_IE 0x70
\r
29 #define SPI_REG_IP 0x74
\r
33 #define SPI_SCK_PHA 0x1
\r
34 #define SPI_SCK_POL 0x2
\r
36 #define SPI_FMT_PROTO(x) ((x) & 0x3)
\r
37 #define SPI_FMT_ENDIAN(x) (((x) & 0x1) << 2)
\r
38 #define SPI_FMT_DIR(x) (((x) & 0x1) << 3)
\r
39 #define SPI_FMT_LEN(x) (((x) & 0xf) << 16)
\r
41 /* TXCTRL register */
\r
42 #define SPI_TXWM(x) ((x) & 0xffff)
\r
43 /* RXCTRL register */
\r
44 #define SPI_RXWM(x) ((x) & 0xffff)
\r
46 #define SPI_IP_TXWM 0x1
\r
47 #define SPI_IP_RXWM 0x2
\r
49 #define SPI_FCTRL_EN 0x1
\r
51 #define SPI_INSN_CMD_EN 0x1
\r
52 #define SPI_INSN_ADDR_LEN(x) (((x) & 0x7) << 1)
\r
53 #define SPI_INSN_PAD_CNT(x) (((x) & 0xf) << 4)
\r
54 #define SPI_INSN_CMD_PROTO(x) (((x) & 0x3) << 8)
\r
55 #define SPI_INSN_ADDR_PROTO(x) (((x) & 0x3) << 10)
\r
56 #define SPI_INSN_DATA_PROTO(x) (((x) & 0x3) << 12)
\r
57 #define SPI_INSN_CMD_CODE(x) (((x) & 0xff) << 16)
\r
58 #define SPI_INSN_PAD_CODE(x) (((x) & 0xff) << 24)
\r
60 #define SPI_TXFIFO_FULL (1 << 31)
\r
61 #define SPI_RXFIFO_EMPTY (1 << 31)
\r
65 #define SPI_CSMODE_AUTO 0
\r
66 #define SPI_CSMODE_HOLD 2
\r
67 #define SPI_CSMODE_OFF 3
\r
69 #define SPI_DIR_RX 0
\r
70 #define SPI_DIR_TX 1
\r
72 #define SPI_PROTO_S 0
\r
73 #define SPI_PROTO_D 1
\r
74 #define SPI_PROTO_Q 2
\r
76 #define SPI_ENDIAN_MSB 0
\r
77 #define SPI_ENDIAN_LSB 1
\r
80 #endif /* _SIFIVE_SPI_H */
\r