xref: /rk3399_ARM-atf/plat/intel/soc/common/drivers/sdmmc/sdmmc.h (revision 02711885d7efcf396947900efbbebcd58613a3b7)
1ddaf02d1SJit Loon Lim /*
2ddaf02d1SJit Loon Lim  * Copyright (c) 2022-2023, Intel Corporation. All rights reserved.
3*beba2040SSieu Mun Tang  * Copyright (c) 2024, Altera Corporation. All rights reserved.
4ddaf02d1SJit Loon Lim  *
5ddaf02d1SJit Loon Lim  * SPDX-License-Identifier: BSD-3-Clause
6ddaf02d1SJit Loon Lim  */
7ddaf02d1SJit Loon Lim 
8ddaf02d1SJit Loon Lim #ifndef SDMMC_H
9ddaf02d1SJit Loon Lim #define SDMMC_H
10ddaf02d1SJit Loon Lim 
11ddaf02d1SJit Loon Lim #include <lib/mmio.h>
12ddaf02d1SJit Loon Lim #include "socfpga_handoff.h"
13ddaf02d1SJit Loon Lim 
14ddaf02d1SJit Loon Lim #define PERIPHERAL_SDMMC_MASK			0x60
15ddaf02d1SJit Loon Lim #define PERIPHERAL_SDMMC_OFFSET			6
16ddaf02d1SJit Loon Lim 
17ddaf02d1SJit Loon Lim #define DEFAULT_SDMMC_MAX_RETRIES		5
18ddaf02d1SJit Loon Lim #define SEND_SDMMC_OP_COND_MAX_RETRIES		100
19ddaf02d1SJit Loon Lim #define SDMMC_MULT_BY_512K_SHIFT		19
20ddaf02d1SJit Loon Lim 
21ddaf02d1SJit Loon Lim static const unsigned char tran_speed_base[16] = {
22ddaf02d1SJit Loon Lim 	0, 10, 12, 13, 15, 20, 26, 30, 35, 40, 45, 52, 55, 60, 70, 80
23ddaf02d1SJit Loon Lim };
24ddaf02d1SJit Loon Lim 
25ddaf02d1SJit Loon Lim static const unsigned char sd_tran_speed_base[16] = {
26ddaf02d1SJit Loon Lim 	0, 10, 12, 13, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 70, 80
27ddaf02d1SJit Loon Lim };
28ddaf02d1SJit Loon Lim 
29ddaf02d1SJit Loon Lim 
30ddaf02d1SJit Loon Lim /* FUNCTION DEFINATION */
31ddaf02d1SJit Loon Lim /*
32ddaf02d1SJit Loon Lim  * @brief SDMMC controller initialization function
33ddaf02d1SJit Loon Lim  *
34ddaf02d1SJit Loon Lim  * @hoff_ptr: Pointer to the hand-off data
35ddaf02d1SJit Loon Lim  * Return: 0 on success, a negative errno on failure
36ddaf02d1SJit Loon Lim  */
37ddaf02d1SJit Loon Lim void sdmmc_pin_config(void);
38*beba2040SSieu Mun Tang size_t sdmmc_read_blocks(int lba, uintptr_t buf, size_t size);
39*beba2040SSieu Mun Tang size_t sdmmc_write_blocks(int lba, const uintptr_t buf, size_t size);
40*beba2040SSieu Mun Tang int sdmmc_device_state(void);
41*beba2040SSieu Mun Tang bool is_cmd23_enabled(void);
42*beba2040SSieu Mun Tang int sdmmc_send_cmd(unsigned int idx, unsigned int arg,
43*beba2040SSieu Mun Tang 			unsigned int r_type, unsigned int *r_data);
44*beba2040SSieu Mun Tang 
45ddaf02d1SJit Loon Lim #endif
46