xref: /qemu/include/hw/ssi/imx_spi.h (revision 1da79ecc)
1c906a3a0SJean-Christophe DUBOIS /*
2c906a3a0SJean-Christophe DUBOIS  * IMX SPI Controller
3c906a3a0SJean-Christophe DUBOIS  *
4c906a3a0SJean-Christophe DUBOIS  * Copyright 2016 Jean-Christophe Dubois <jcd@tribudubois.net>
5c906a3a0SJean-Christophe DUBOIS  *
6c906a3a0SJean-Christophe DUBOIS  * This work is licensed under the terms of the GNU GPL, version 2 or later.
7c906a3a0SJean-Christophe DUBOIS  * See the COPYING file in the top-level directory.
8c906a3a0SJean-Christophe DUBOIS  */
9c906a3a0SJean-Christophe DUBOIS 
10c906a3a0SJean-Christophe DUBOIS #ifndef IMX_SPI_H
11c906a3a0SJean-Christophe DUBOIS #define IMX_SPI_H
12c906a3a0SJean-Christophe DUBOIS 
13c906a3a0SJean-Christophe DUBOIS #include "hw/sysbus.h"
14c906a3a0SJean-Christophe DUBOIS #include "hw/ssi/ssi.h"
15c906a3a0SJean-Christophe DUBOIS #include "qemu/bitops.h"
16c906a3a0SJean-Christophe DUBOIS #include "qemu/fifo32.h"
17db1015e9SEduardo Habkost #include "qom/object.h"
18c906a3a0SJean-Christophe DUBOIS 
19c906a3a0SJean-Christophe DUBOIS #define ECSPI_FIFO_SIZE 64
20c906a3a0SJean-Christophe DUBOIS 
21c906a3a0SJean-Christophe DUBOIS #define ECSPI_RXDATA 0
22c906a3a0SJean-Christophe DUBOIS #define ECSPI_TXDATA 1
23c906a3a0SJean-Christophe DUBOIS #define ECSPI_CONREG 2
24c906a3a0SJean-Christophe DUBOIS #define ECSPI_CONFIGREG 3
25c906a3a0SJean-Christophe DUBOIS #define ECSPI_INTREG 4
26c906a3a0SJean-Christophe DUBOIS #define ECSPI_DMAREG 5
27c906a3a0SJean-Christophe DUBOIS #define ECSPI_STATREG 6
28c906a3a0SJean-Christophe DUBOIS #define ECSPI_PERIODREG 7
29c906a3a0SJean-Christophe DUBOIS #define ECSPI_TESTREG 8
30c906a3a0SJean-Christophe DUBOIS #define ECSPI_MSGDATA 16
31c906a3a0SJean-Christophe DUBOIS #define ECSPI_MAX 17
32c906a3a0SJean-Christophe DUBOIS 
33c906a3a0SJean-Christophe DUBOIS /* ECSPI_CONREG */
34c906a3a0SJean-Christophe DUBOIS #define ECSPI_CONREG_EN (1 << 0)
35c906a3a0SJean-Christophe DUBOIS #define ECSPI_CONREG_HT (1 << 1)
36c906a3a0SJean-Christophe DUBOIS #define ECSPI_CONREG_XCH (1 << 2)
37c906a3a0SJean-Christophe DUBOIS #define ECSPI_CONREG_SMC (1 << 3)
38c906a3a0SJean-Christophe DUBOIS #define ECSPI_CONREG_CHANNEL_MODE_SHIFT 4
39c906a3a0SJean-Christophe DUBOIS #define ECSPI_CONREG_CHANNEL_MODE_LENGTH 4
40c906a3a0SJean-Christophe DUBOIS #define ECSPI_CONREG_DRCTL_SHIFT 16
41c906a3a0SJean-Christophe DUBOIS #define ECSPI_CONREG_DRCTL_LENGTH 2
42c906a3a0SJean-Christophe DUBOIS #define ECSPI_CONREG_CHANNEL_SELECT_SHIFT 18
43c906a3a0SJean-Christophe DUBOIS #define ECSPI_CONREG_CHANNEL_SELECT_LENGTH 2
44c906a3a0SJean-Christophe DUBOIS #define ECSPI_CONREG_BURST_LENGTH_SHIFT 20
45c906a3a0SJean-Christophe DUBOIS #define ECSPI_CONREG_BURST_LENGTH_LENGTH 12
46c906a3a0SJean-Christophe DUBOIS 
47c906a3a0SJean-Christophe DUBOIS /* ECSPI_CONFIGREG */
48c906a3a0SJean-Christophe DUBOIS #define ECSPI_CONFIGREG_SS_CTL_SHIFT 8
49c906a3a0SJean-Christophe DUBOIS #define ECSPI_CONFIGREG_SS_CTL_LENGTH 4
50c906a3a0SJean-Christophe DUBOIS 
51c906a3a0SJean-Christophe DUBOIS /* ECSPI_INTREG */
52c906a3a0SJean-Christophe DUBOIS #define ECSPI_INTREG_TEEN (1 << 0)
53c906a3a0SJean-Christophe DUBOIS #define ECSPI_INTREG_TDREN (1 << 1)
54c906a3a0SJean-Christophe DUBOIS #define ECSPI_INTREG_TFEN (1 << 2)
55c906a3a0SJean-Christophe DUBOIS #define ECSPI_INTREG_RREN (1 << 3)
56c906a3a0SJean-Christophe DUBOIS #define ECSPI_INTREG_RDREN (1 << 4)
57c906a3a0SJean-Christophe DUBOIS #define ECSPI_INTREG_RFEN (1 << 5)
58c906a3a0SJean-Christophe DUBOIS #define ECSPI_INTREG_ROEN (1 << 6)
59c906a3a0SJean-Christophe DUBOIS #define ECSPI_INTREG_TCEN (1 << 7)
60c906a3a0SJean-Christophe DUBOIS 
61c906a3a0SJean-Christophe DUBOIS /* ECSPI_DMAREG */
62c906a3a0SJean-Christophe DUBOIS #define ECSPI_DMAREG_RXTDEN (1 << 31)
63c906a3a0SJean-Christophe DUBOIS #define ECSPI_DMAREG_RXDEN (1 << 23)
64c906a3a0SJean-Christophe DUBOIS #define ECSPI_DMAREG_TEDEN (1 << 7)
65c906a3a0SJean-Christophe DUBOIS #define ECSPI_DMAREG_RX_THRESHOLD_SHIFT 16
66c906a3a0SJean-Christophe DUBOIS #define ECSPI_DMAREG_RX_THRESHOLD_LENGTH 6
67c906a3a0SJean-Christophe DUBOIS 
68c906a3a0SJean-Christophe DUBOIS /* ECSPI_STATREG */
69c906a3a0SJean-Christophe DUBOIS #define ECSPI_STATREG_TE (1 << 0)
70c906a3a0SJean-Christophe DUBOIS #define ECSPI_STATREG_TDR (1 << 1)
71c906a3a0SJean-Christophe DUBOIS #define ECSPI_STATREG_TF (1 << 2)
72c906a3a0SJean-Christophe DUBOIS #define ECSPI_STATREG_RR (1 << 3)
73c906a3a0SJean-Christophe DUBOIS #define ECSPI_STATREG_RDR (1 << 4)
74c906a3a0SJean-Christophe DUBOIS #define ECSPI_STATREG_RF (1 << 5)
75c906a3a0SJean-Christophe DUBOIS #define ECSPI_STATREG_RO (1 << 6)
76c906a3a0SJean-Christophe DUBOIS #define ECSPI_STATREG_TC (1 << 7)
77c906a3a0SJean-Christophe DUBOIS 
78c906a3a0SJean-Christophe DUBOIS #define EXTRACT(value, name) extract32(value, name##_SHIFT, name##_LENGTH)
79c906a3a0SJean-Christophe DUBOIS 
80*1da79eccSBin Meng /* number of chip selects supported */
81*1da79eccSBin Meng #define ECSPI_NUM_CS 4
82*1da79eccSBin Meng 
83c906a3a0SJean-Christophe DUBOIS #define TYPE_IMX_SPI "imx.spi"
848063396bSEduardo Habkost OBJECT_DECLARE_SIMPLE_TYPE(IMXSPIState, IMX_SPI)
85c906a3a0SJean-Christophe DUBOIS 
86db1015e9SEduardo Habkost struct IMXSPIState {
87c906a3a0SJean-Christophe DUBOIS     /* <private> */
88c906a3a0SJean-Christophe DUBOIS     SysBusDevice parent_obj;
89c906a3a0SJean-Christophe DUBOIS 
90c906a3a0SJean-Christophe DUBOIS     /* <public> */
91c906a3a0SJean-Christophe DUBOIS     MemoryRegion iomem;
92c906a3a0SJean-Christophe DUBOIS 
93c906a3a0SJean-Christophe DUBOIS     qemu_irq irq;
94c906a3a0SJean-Christophe DUBOIS 
95*1da79eccSBin Meng     qemu_irq cs_lines[ECSPI_NUM_CS];
96c906a3a0SJean-Christophe DUBOIS 
97c906a3a0SJean-Christophe DUBOIS     SSIBus *bus;
98c906a3a0SJean-Christophe DUBOIS 
99c906a3a0SJean-Christophe DUBOIS     uint32_t regs[ECSPI_MAX];
100c906a3a0SJean-Christophe DUBOIS 
101c906a3a0SJean-Christophe DUBOIS     Fifo32 rx_fifo;
102c906a3a0SJean-Christophe DUBOIS     Fifo32 tx_fifo;
103c906a3a0SJean-Christophe DUBOIS 
104c906a3a0SJean-Christophe DUBOIS     int16_t burst_length;
105db1015e9SEduardo Habkost };
106c906a3a0SJean-Christophe DUBOIS 
107c906a3a0SJean-Christophe DUBOIS #endif /* IMX_SPI_H */
108