SyterKit 0.4.0.x
SyterKit is a bare-metal framework
Loading...
Searching...
No Matches
sys-sdhci.h
Go to the documentation of this file.
1/* SPDX-License-Identifier: GPL-2.0+ */
3#ifndef _SYS_SDHCI_H_
4#define _SYS_SDHCI_H_
5
6#include <io.h>
7#include <stdarg.h>
8#include <stdbool.h>
9#include <stddef.h>
10#include <stdint.h>
11#include <types.h>
12
13#include <reg/reg-smhc.h>
14#include <sys-gpio.h>
15
16#include <log.h>
17
18#include "sys-mmc.h"
19
20#ifdef __cplusplus
21extern "C" {
22#endif// __cplusplus
23
24#define SMHC_DES_NUM_SHIFT 12 /* smhc2!! */
25#define SMHC_DES_BUFFER_MAX_LEN (1 << SMHC_DES_NUM_SHIFT)
26
27#define MMC_REG_FIFO_OS (0x200)
28
29#define SMHC_TIMEOUT 0xfffff
30#define SMHC_DMA_TIMEOUT 0xffffff
31#define SMHC_WAITBUSY_TIMEOUT 0xfffff
32#define SMHC_DATA_TIMEOUT 0xfffff
33#define SMHC_RESP_TIMEOUT 0xff
34
35enum {
39};
40
45
46typedef struct sunxi_sdhci_desc {
47 uint32_t : 1, dic : 1, /* disable interrupt on completion */
48 last_desc : 1, /* 1-this data buffer is the last buffer */
49 first_desc : 1, /* 1-data buffer is the first buffer, 0-data buffer contained in the next descriptor is 1st buffer */
50 des_chain : 1, /* 1-the 2nd address in the descriptor is the next descriptor address */
51 end_of_ring : 1, /* 1-last descriptor flag when using dual data buffer in descriptor */
52 : 24, /* Reserved */
53 err_flag : 1, /* transfer error flag */
54 own : 1; /* des owner:1-idma owns it, 0-host owns it */
55
59} sunxi_sdhci_desc_t __attribute__((aligned(8)));
60
70
87
93
103
123
124#define SDHCI_DEFAULT_CLK_RST_OFFSET(x) (16 + x)
125#define SDHCI_DEFAULT_CLK_GATE_OFFSET(x) (x)
126#define SDHCI_DEFAULT_CLK_FACTOR_M_OFFSET (0)
127#define SDHCI_DEFAULT_CLK_FACTOR_N_OFFSET (8)
128
142
154
165
175
188int sunxi_sdhci_xfer(sunxi_sdhci_t *sdhci, mmc_cmd_t *cmd, mmc_data_t *data);
189
201
202/* Internal Use */
212extern int sunxi_sdhci_set_mclk(sunxi_sdhci_t *sdhci, uint32_t clk_hz);
213
223
224#ifdef __cplusplus
225}
226#endif// __cplusplus
227
228#endif// _SYS_SDHCI_H_
u32_t uint32_t
Definition stdint.h:13
u8_t uint8_t
Definition stdint.h:7
struct sunxi_sdhci_pinctrl sunxi_sdhci_pinctrl_t
struct sunxi_sdhci_clk sunxi_sdhci_clk_t
int sunxi_sdhci_core_init(sunxi_sdhci_t *sdhci)
Initialize the core functionality of the SDHC controller.
Definition sys-sdhci.c:833
int sunxi_sdhci_set_mclk(sunxi_sdhci_t *sdhci, uint32_t clk_hz)
Set the SDHC controller's clock frequency.
Definition sys-sdhci.c:29
struct sunxi_sdhci sunxi_sdhci_t
int sunxi_sdhci_xfer(sunxi_sdhci_t *sdhci, mmc_cmd_t *cmd, mmc_data_t *data)
Perform a data transfer operation on the SDHC controller.
Definition sys-sdhci.c:888
int sunxi_sdhci_init(sunxi_sdhci_t *sdhci)
Initialize the SDHC controller.
Definition sys-sdhci.c:1162
void sunxi_sdhci_set_ios(sunxi_sdhci_t *sdhci)
Set the I/O settings for the SDHC controller.
Definition sys-sdhci.c:794
uint32_t sunxi_sdhci_get_mclk(sunxi_sdhci_t *sdhci)
Get the current clock frequency of the SDHC controller.
Definition sys-sdhci.c:84
struct sunxi_sdhci_desc __attribute__((aligned(8)))
struct sunxi_sdhci_timing sunxi_sdhci_timing_t
void sunxi_sdhci_dump_reg(sunxi_sdhci_t *sdhci)
Dump the contents of the SDHCI registers.
Definition sys-sdhci.c:1229
sunxi_sdhci_type_t
Definition sys-sdhci.h:41
@ MMC_TYPE_SD
Definition sys-sdhci.h:42
@ MMC_TYPE_EMMC
Definition sys-sdhci.h:43
int sunxi_sdhci_update_phase(sunxi_sdhci_t *sdhci)
Update phase for the SDHC controller.
Definition sys-sdhci.c:1137
@ MMC_CONTROLLER_1
Definition sys-sdhci.h:37
@ MMC_CONTROLLER_2
Definition sys-sdhci.h:38
@ MMC_CONTROLLER_0
Definition sys-sdhci.h:36
struct sunxi_sdhci_host sunxi_sdhci_host_t
Definition sys-gpio.h:68
Definition sys-mmc.h:315
Definition sys-mmc.h:323
Definition sys-mmc.h:333
Definition reg-smhc.h:186
Definition sys-clk.h:17
Definition sys-sdhci.h:94
uint8_t reg_factor_m_offset
Definition sys-sdhci.h:99
uint8_t reg_factor_n_offset
Definition sys-sdhci.h:97
uint8_t clk_sel
Definition sys-sdhci.h:100
uint8_t factor_n
Definition sys-sdhci.h:96
uint32_t parent_clk
Definition sys-sdhci.h:101
uint32_t reg_base
Definition sys-sdhci.h:95
uint8_t factor_m
Definition sys-sdhci.h:98
Definition sys-sdhci.h:46
uint32_t last_desc
Definition sys-sdhci.h:48
uint32_t data_buf_dummy
Definition sys-sdhci.h:56
uint32_t buf_addr
Definition sys-sdhci.h:57
uint32_t next_desc_addr
Definition sys-sdhci.h:58
uint32_t dic
Definition sys-sdhci.h:47
uint32_t data_buf_sz
Definition sys-sdhci.h:56
uint32_t err_flag
Definition sys-sdhci.h:52
uint32_t own
Definition sys-sdhci.h:54
uint32_t first_desc
Definition sys-sdhci.h:49
uint32_t des_chain
Definition sys-sdhci.h:50
uint32_t end_of_ring
Definition sys-sdhci.h:51
Definition sys-sdhci.h:61
uint8_t fatal_err
Definition sys-sdhci.h:64
uint8_t timing_mode
Definition sys-sdhci.h:65
uint32_t commreg
Definition sys-sdhci.h:63
sunxi_sdhci_desc_t * sdhci_desc
Definition sys-sdhci.h:68
sdhci_reg_t * reg
Definition sys-sdhci.h:62
Definition sys-sdhci.h:71
gpio_mux_t gpio_d1
Definition sys-sdhci.h:73
gpio_mux_t gpio_ds
Definition sys-sdhci.h:82
gpio_mux_t gpio_d0
Definition sys-sdhci.h:72
gpio_mux_t gpio_d2
Definition sys-sdhci.h:74
gpio_mux_t gpio_d3
Definition sys-sdhci.h:75
gpio_mux_t gpio_clk
Definition sys-sdhci.h:81
gpio_mux_t gpio_cmd
Definition sys-sdhci.h:80
uint8_t cd_level
Definition sys-sdhci.h:85
gpio_mux_t gpio_d5
Definition sys-sdhci.h:77
gpio_mux_t gpio_cd
Definition sys-sdhci.h:84
gpio_mux_t gpio_rst
Definition sys-sdhci.h:83
gpio_mux_t gpio_d7
Definition sys-sdhci.h:79
gpio_mux_t gpio_d4
Definition sys-sdhci.h:76
gpio_mux_t gpio_d6
Definition sys-sdhci.h:78
Definition sys-sdhci.h:88
uint8_t auto_timing
Definition sys-sdhci.h:91
uint32_t sdly
Definition sys-sdhci.h:90
uint32_t odly
Definition sys-sdhci.h:89
Definition sys-sdhci.h:104
uint32_t id
Definition sys-sdhci.h:107
uint32_t width
Definition sys-sdhci.h:108
sunxi_sdhci_type_t sdhci_mmc_type
Definition sys-sdhci.h:113
sunxi_clk_t clk_ctrl
Definition sys-sdhci.h:109
sunxi_sdhci_clk_t sdhci_clk
Definition sys-sdhci.h:110
sunxi_sdhci_timing_t * timing_data
Definition sys-sdhci.h:121
uint32_t max_clk
Definition sys-sdhci.h:111
sunxi_sdhci_host_t * mmc_host
Definition sys-sdhci.h:120
sunxi_sdhci_pinctrl_t pinctrl
Definition sys-sdhci.h:116
uint32_t dma_des_addr
Definition sys-sdhci.h:112
mmc_t * mmc
Definition sys-sdhci.h:119
uint32_t reg_base
Definition sys-sdhci.h:106
char * name
Definition sys-sdhci.h:105