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