xref: /rk3399_ARM-atf/plat/intel/soc/common/drivers/sdmmc/sdmmc.h (revision ddaf02d17142187d9f17acd4900aafa598666317)
1*ddaf02d1SJit Loon Lim /*
2*ddaf02d1SJit Loon Lim  * Copyright (c) 2022-2023, Intel Corporation. All rights reserved.
3*ddaf02d1SJit Loon Lim  *
4*ddaf02d1SJit Loon Lim  * SPDX-License-Identifier: BSD-3-Clause
5*ddaf02d1SJit Loon Lim  */
6*ddaf02d1SJit Loon Lim 
7*ddaf02d1SJit Loon Lim #ifndef SDMMC_H
8*ddaf02d1SJit Loon Lim #define SDMMC_H
9*ddaf02d1SJit Loon Lim 
10*ddaf02d1SJit Loon Lim #include <lib/mmio.h>
11*ddaf02d1SJit Loon Lim #include "socfpga_handoff.h"
12*ddaf02d1SJit Loon Lim 
13*ddaf02d1SJit Loon Lim #define PERIPHERAL_SDMMC_MASK			0x60
14*ddaf02d1SJit Loon Lim #define PERIPHERAL_SDMMC_OFFSET			6
15*ddaf02d1SJit Loon Lim 
16*ddaf02d1SJit Loon Lim #define DEFAULT_SDMMC_MAX_RETRIES		5
17*ddaf02d1SJit Loon Lim #define SEND_SDMMC_OP_COND_MAX_RETRIES		100
18*ddaf02d1SJit Loon Lim #define SDMMC_MULT_BY_512K_SHIFT		19
19*ddaf02d1SJit Loon Lim 
20*ddaf02d1SJit Loon Lim static const unsigned char tran_speed_base[16] = {
21*ddaf02d1SJit Loon Lim 	0, 10, 12, 13, 15, 20, 26, 30, 35, 40, 45, 52, 55, 60, 70, 80
22*ddaf02d1SJit Loon Lim };
23*ddaf02d1SJit Loon Lim 
24*ddaf02d1SJit Loon Lim static const unsigned char sd_tran_speed_base[16] = {
25*ddaf02d1SJit Loon Lim 	0, 10, 12, 13, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 70, 80
26*ddaf02d1SJit Loon Lim };
27*ddaf02d1SJit Loon Lim 
28*ddaf02d1SJit Loon Lim 
29*ddaf02d1SJit Loon Lim /* FUNCTION DEFINATION */
30*ddaf02d1SJit Loon Lim /*
31*ddaf02d1SJit Loon Lim  * @brief SDMMC controller initialization function
32*ddaf02d1SJit Loon Lim  *
33*ddaf02d1SJit Loon Lim  * @hoff_ptr: Pointer to the hand-off data
34*ddaf02d1SJit Loon Lim  * Return: 0 on success, a negative errno on failure
35*ddaf02d1SJit Loon Lim  */
36*ddaf02d1SJit Loon Lim int sdmmc_init(handoff *hoff_ptr, struct cdns_sdmmc_params *params,
37*ddaf02d1SJit Loon Lim 	     struct mmc_device_info *info);
38*ddaf02d1SJit Loon Lim int sd_or_mmc_init(const struct mmc_ops *ops_ptr, unsigned int clk,
39*ddaf02d1SJit Loon Lim 	     unsigned int width, unsigned int flags,
40*ddaf02d1SJit Loon Lim 	     struct mmc_device_info *device_info);
41*ddaf02d1SJit Loon Lim void sdmmc_pin_config(void);
42*ddaf02d1SJit Loon Lim #endif
43