Back to home page

OSCL-LXR

 
 

    


0001 /* SPDX-License-Identifier: GPL-2.0+ */
0002 /*
0003  * Copyright (C) 2020 Martin Blumenstingl <martin.blumenstingl@googlemail.com>
0004  */
0005 
0006 #ifndef _MESON_MX_SDHC_H_
0007 #define _MESON_MX_SDHC_H_
0008 
0009 #include <linux/bitfield.h>
0010 
0011 #define MESON_SDHC_ARGU                     0x00
0012 
0013 #define MESON_SDHC_SEND                     0x04
0014     #define MESON_SDHC_SEND_CMD_INDEX           GENMASK(5, 0)
0015     #define MESON_SDHC_SEND_CMD_HAS_RESP            BIT(6)
0016     #define MESON_SDHC_SEND_CMD_HAS_DATA            BIT(7)
0017     #define MESON_SDHC_SEND_RESP_LEN            BIT(8)
0018     #define MESON_SDHC_SEND_RESP_NO_CRC         BIT(9)
0019     #define MESON_SDHC_SEND_DATA_DIR            BIT(10)
0020     #define MESON_SDHC_SEND_DATA_STOP           BIT(11)
0021     #define MESON_SDHC_SEND_R1B             BIT(12)
0022     #define MESON_SDHC_SEND_TOTAL_PACK          GENMASK(31, 16)
0023 
0024 #define MESON_SDHC_CTRL                     0x08
0025     #define MESON_SDHC_CTRL_DAT_TYPE            GENMASK(1, 0)
0026     #define MESON_SDHC_CTRL_DDR_MODE            BIT(2)
0027     #define MESON_SDHC_CTRL_TX_CRC_NOCHECK          BIT(3)
0028     #define MESON_SDHC_CTRL_PACK_LEN            GENMASK(12, 4)
0029     #define MESON_SDHC_CTRL_RX_TIMEOUT          GENMASK(19, 13)
0030     #define MESON_SDHC_CTRL_RX_PERIOD           GENMASK(23, 20)
0031     #define MESON_SDHC_CTRL_RX_ENDIAN           GENMASK(26, 24)
0032     #define MESON_SDHC_CTRL_SDIO_IRQ_MODE           BIT(27)
0033     #define MESON_SDHC_CTRL_DAT0_IRQ_SEL            BIT(28)
0034     #define MESON_SDHC_CTRL_TX_ENDIAN           GENMASK(31, 29)
0035 
0036 #define MESON_SDHC_STAT                     0x0c
0037     #define MESON_SDHC_STAT_CMD_BUSY            BIT(0)
0038     #define MESON_SDHC_STAT_DAT3_0              GENMASK(4, 1)
0039     #define MESON_SDHC_STAT_CMD             BIT(5)
0040     #define MESON_SDHC_STAT_RXFIFO_CNT          GENMASK(12, 6)
0041     #define MESON_SDHC_STAT_TXFIFO_CNT          GENMASK(19, 13)
0042     #define MESON_SDHC_STAT_DAT7_4              GENMASK(23, 20)
0043 
0044 #define MESON_SDHC_CLKC                     0x10
0045     #define MESON_SDHC_CLKC_CLK_DIV             GENMASK(11, 0)
0046     #define MESON_SDHC_CLKC_CLK_JIC             BIT(24)
0047     #define MESON_SDHC_CLKC_MEM_PWR_OFF         GENMASK(26, 25)
0048 
0049 #define MESON_SDHC_ADDR                     0x14
0050 
0051 #define MESON_SDHC_PDMA                     0x18
0052     #define MESON_SDHC_PDMA_DMA_MODE            BIT(0)
0053     #define MESON_SDHC_PDMA_PIO_RDRESP          GENMASK(3, 1)
0054     #define MESON_SDHC_PDMA_DMA_URGENT          BIT(4)
0055     #define MESON_SDHC_PDMA_WR_BURST            GENMASK(9, 5)
0056     #define MESON_SDHC_PDMA_RD_BURST            GENMASK(14, 10)
0057     #define MESON_SDHC_PDMA_RXFIFO_TH           GENMASK(21, 15)
0058     #define MESON_SDHC_PDMA_TXFIFO_TH           GENMASK(28, 22)
0059     #define MESON_SDHC_PDMA_RXFIFO_MANUAL_FLUSH     GENMASK(30, 29)
0060     #define MESON_SDHC_PDMA_TXFIFO_FILL         BIT(31)
0061 
0062 #define MESON_SDHC_MISC                     0x1c
0063     #define MESON_SDHC_MISC_WCRC_ERR_PATT           GENMASK(6, 4)
0064     #define MESON_SDHC_MISC_WCRC_OK_PATT            GENMASK(9, 7)
0065     #define MESON_SDHC_MISC_BURST_NUM           GENMASK(21, 16)
0066     #define MESON_SDHC_MISC_THREAD_ID           GENMASK(27, 22)
0067     #define MESON_SDHC_MISC_MANUAL_STOP         BIT(28)
0068     #define MESON_SDHC_MISC_TXSTART_THRES           GENMASK(31, 29)
0069 
0070 #define MESON_SDHC_DATA                     0x20
0071 
0072 #define MESON_SDHC_ICTL                     0x24
0073     #define MESON_SDHC_ICTL_RESP_OK             BIT(0)
0074     #define MESON_SDHC_ICTL_RESP_TIMEOUT            BIT(1)
0075     #define MESON_SDHC_ICTL_RESP_ERR_CRC            BIT(2)
0076     #define MESON_SDHC_ICTL_RESP_OK_NOCLEAR         BIT(3)
0077     #define MESON_SDHC_ICTL_DATA_1PACK_OK           BIT(4)
0078     #define MESON_SDHC_ICTL_DATA_TIMEOUT            BIT(5)
0079     #define MESON_SDHC_ICTL_DATA_ERR_CRC            BIT(6)
0080     #define MESON_SDHC_ICTL_DATA_XFER_OK            BIT(7)
0081     #define MESON_SDHC_ICTL_RX_HIGHER           BIT(8)
0082     #define MESON_SDHC_ICTL_RX_LOWER            BIT(9)
0083     #define MESON_SDHC_ICTL_DAT1_IRQ            BIT(10)
0084     #define MESON_SDHC_ICTL_DMA_DONE            BIT(11)
0085     #define MESON_SDHC_ICTL_RXFIFO_FULL         BIT(12)
0086     #define MESON_SDHC_ICTL_TXFIFO_EMPTY            BIT(13)
0087     #define MESON_SDHC_ICTL_ADDI_DAT1_IRQ           BIT(14)
0088     #define MESON_SDHC_ICTL_ALL_IRQS            GENMASK(14, 0)
0089     #define MESON_SDHC_ICTL_DAT1_IRQ_DELAY          GENMASK(17, 16)
0090 
0091 #define MESON_SDHC_ISTA                     0x28
0092     #define MESON_SDHC_ISTA_RESP_OK             BIT(0)
0093     #define MESON_SDHC_ISTA_RESP_TIMEOUT            BIT(1)
0094     #define MESON_SDHC_ISTA_RESP_ERR_CRC            BIT(2)
0095     #define MESON_SDHC_ISTA_RESP_OK_NOCLEAR         BIT(3)
0096     #define MESON_SDHC_ISTA_DATA_1PACK_OK           BIT(4)
0097     #define MESON_SDHC_ISTA_DATA_TIMEOUT            BIT(5)
0098     #define MESON_SDHC_ISTA_DATA_ERR_CRC            BIT(6)
0099     #define MESON_SDHC_ISTA_DATA_XFER_OK            BIT(7)
0100     #define MESON_SDHC_ISTA_RX_HIGHER           BIT(8)
0101     #define MESON_SDHC_ISTA_RX_LOWER            BIT(9)
0102     #define MESON_SDHC_ISTA_DAT1_IRQ            BIT(10)
0103     #define MESON_SDHC_ISTA_DMA_DONE            BIT(11)
0104     #define MESON_SDHC_ISTA_RXFIFO_FULL         BIT(12)
0105     #define MESON_SDHC_ISTA_TXFIFO_EMPTY            BIT(13)
0106     #define MESON_SDHC_ISTA_ADDI_DAT1_IRQ           BIT(14)
0107     #define MESON_SDHC_ISTA_ALL_IRQS            GENMASK(14, 0)
0108 
0109 #define MESON_SDHC_SRST                     0x2c
0110     #define MESON_SDHC_SRST_MAIN_CTRL           BIT(0)
0111     #define MESON_SDHC_SRST_RXFIFO              BIT(1)
0112     #define MESON_SDHC_SRST_TXFIFO              BIT(2)
0113     #define MESON_SDHC_SRST_DPHY_RX             BIT(3)
0114     #define MESON_SDHC_SRST_DPHY_TX             BIT(4)
0115     #define MESON_SDHC_SRST_DMA_IF              BIT(5)
0116 
0117 #define MESON_SDHC_ESTA                     0x30
0118     #define MESON_SDHC_ESTA_11_13               GENMASK(13, 11)
0119 
0120 #define MESON_SDHC_ENHC                     0x34
0121     #define MESON_SDHC_ENHC_MESON8M2_WRRSP_MODE     BIT(0)
0122     #define MESON_SDHC_ENHC_MESON8M2_CHK_WRRSP      BIT(1)
0123     #define MESON_SDHC_ENHC_MESON8M2_CHK_DMA        BIT(2)
0124     #define MESON_SDHC_ENHC_MESON8M2_DEBUG          GENMASK(5, 3)
0125     #define MESON_SDHC_ENHC_MESON6_RX_TIMEOUT       GENMASK(7, 0)
0126     #define MESON_SDHC_ENHC_MESON6_DMA_RD_RESP      BIT(16)
0127     #define MESON_SDHC_ENHC_MESON6_DMA_WR_RESP      BIT(17)
0128     #define MESON_SDHC_ENHC_SDIO_IRQ_PERIOD         GENMASK(15, 8)
0129     #define MESON_SDHC_ENHC_RXFIFO_TH           GENMASK(24, 18)
0130     #define MESON_SDHC_ENHC_TXFIFO_TH           GENMASK(31, 25)
0131 
0132 #define MESON_SDHC_CLK2                     0x38
0133     #define MESON_SDHC_CLK2_RX_CLK_PHASE            GENMASK(11, 0)
0134     #define MESON_SDHC_CLK2_SD_CLK_PHASE            GENMASK(23, 12)
0135 
0136 struct clk_bulk_data;
0137 
0138 int meson_mx_sdhc_register_clkc(struct device *dev, void __iomem *base,
0139                 struct clk_bulk_data *clk_bulk_data);
0140 
0141 #endif /* _MESON_MX_SDHC_H_ */