1*93738620SCarlo Caione /* 2*93738620SCarlo Caione * (C) Copyright 2016 Carlo Caione <carlo@caione.org> 3*93738620SCarlo Caione * 4*93738620SCarlo Caione * SPDX-License-Identifier: GPL-2.0+ 5*93738620SCarlo Caione */ 6*93738620SCarlo Caione 7*93738620SCarlo Caione #ifndef __SD_EMMC_H__ 8*93738620SCarlo Caione #define __SD_EMMC_H__ 9*93738620SCarlo Caione 10*93738620SCarlo Caione #include <mmc.h> 11*93738620SCarlo Caione 12*93738620SCarlo Caione #define SDIO_PORT_A 0 13*93738620SCarlo Caione #define SDIO_PORT_B 1 14*93738620SCarlo Caione #define SDIO_PORT_C 2 15*93738620SCarlo Caione 16*93738620SCarlo Caione #define SD_EMMC_CLKSRC_24M 24000000 /* 24 MHz */ 17*93738620SCarlo Caione #define SD_EMMC_CLKSRC_DIV2 1000000000 /* 1 GHz */ 18*93738620SCarlo Caione 19*93738620SCarlo Caione #define MESON_SD_EMMC_CLOCK 0x00 20*93738620SCarlo Caione #define CLK_MAX_DIV 63 21*93738620SCarlo Caione #define CLK_SRC_24M (0 << 6) 22*93738620SCarlo Caione #define CLK_SRC_DIV2 (1 << 6) 23*93738620SCarlo Caione #define CLK_CO_PHASE_000 (0 << 8) 24*93738620SCarlo Caione #define CLK_CO_PHASE_090 (1 << 8) 25*93738620SCarlo Caione #define CLK_CO_PHASE_180 (2 << 8) 26*93738620SCarlo Caione #define CLK_CO_PHASE_270 (3 << 8) 27*93738620SCarlo Caione #define CLK_TX_PHASE_000 (0 << 10) 28*93738620SCarlo Caione #define CLK_TX_PHASE_090 (1 << 10) 29*93738620SCarlo Caione #define CLK_TX_PHASE_180 (2 << 10) 30*93738620SCarlo Caione #define CLK_TX_PHASE_270 (3 << 10) 31*93738620SCarlo Caione #define CLK_ALWAYS_ON BIT(24) 32*93738620SCarlo Caione 33*93738620SCarlo Caione #define MESON_SD_EMMC_CFG 0x44 34*93738620SCarlo Caione #define CFG_BUS_WIDTH_MASK GENMASK(1, 0) 35*93738620SCarlo Caione #define CFG_BUS_WIDTH_1 0 36*93738620SCarlo Caione #define CFG_BUS_WIDTH_4 1 37*93738620SCarlo Caione #define CFG_BUS_WIDTH_8 2 38*93738620SCarlo Caione #define CFG_BL_LEN_MASK GENMASK(7, 4) 39*93738620SCarlo Caione #define CFG_BL_LEN_SHIFT 4 40*93738620SCarlo Caione #define CFG_BL_LEN_512 (9 << 4) 41*93738620SCarlo Caione #define CFG_RESP_TIMEOUT_MASK GENMASK(11, 8) 42*93738620SCarlo Caione #define CFG_RESP_TIMEOUT_256 (8 << 8) 43*93738620SCarlo Caione #define CFG_RC_CC_MASK GENMASK(15, 12) 44*93738620SCarlo Caione #define CFG_RC_CC_16 (4 << 12) 45*93738620SCarlo Caione #define CFG_SDCLK_ALWAYS_ON BIT(18) 46*93738620SCarlo Caione #define CFG_AUTO_CLK BIT(23) 47*93738620SCarlo Caione 48*93738620SCarlo Caione #define MESON_SD_EMMC_STATUS 0x48 49*93738620SCarlo Caione #define STATUS_MASK GENMASK(15, 0) 50*93738620SCarlo Caione #define STATUS_ERR_MASK GENMASK(12, 0) 51*93738620SCarlo Caione #define STATUS_RXD_ERR_MASK GENMASK(7, 0) 52*93738620SCarlo Caione #define STATUS_TXD_ERR BIT(8) 53*93738620SCarlo Caione #define STATUS_DESC_ERR BIT(9) 54*93738620SCarlo Caione #define STATUS_RESP_ERR BIT(10) 55*93738620SCarlo Caione #define STATUS_RESP_TIMEOUT BIT(11) 56*93738620SCarlo Caione #define STATUS_DESC_TIMEOUT BIT(12) 57*93738620SCarlo Caione #define STATUS_END_OF_CHAIN BIT(13) 58*93738620SCarlo Caione 59*93738620SCarlo Caione #define MESON_SD_EMMC_IRQ_EN 0x4c 60*93738620SCarlo Caione 61*93738620SCarlo Caione #define MESON_SD_EMMC_CMD_CFG 0x50 62*93738620SCarlo Caione #define CMD_CFG_LENGTH_MASK GENMASK(8, 0) 63*93738620SCarlo Caione #define CMD_CFG_BLOCK_MODE BIT(9) 64*93738620SCarlo Caione #define CMD_CFG_R1B BIT(10) 65*93738620SCarlo Caione #define CMD_CFG_END_OF_CHAIN BIT(11) 66*93738620SCarlo Caione #define CMD_CFG_TIMEOUT_4S (12 << 12) 67*93738620SCarlo Caione #define CMD_CFG_NO_RESP BIT(16) 68*93738620SCarlo Caione #define CMD_CFG_DATA_IO BIT(18) 69*93738620SCarlo Caione #define CMD_CFG_DATA_WR BIT(19) 70*93738620SCarlo Caione #define CMD_CFG_RESP_NOCRC BIT(20) 71*93738620SCarlo Caione #define CMD_CFG_RESP_128 BIT(21) 72*93738620SCarlo Caione #define CMD_CFG_CMD_INDEX_SHIFT 24 73*93738620SCarlo Caione #define CMD_CFG_OWNER BIT(31) 74*93738620SCarlo Caione 75*93738620SCarlo Caione #define MESON_SD_EMMC_CMD_ARG 0x54 76*93738620SCarlo Caione #define MESON_SD_EMMC_CMD_DAT 0x58 77*93738620SCarlo Caione #define MESON_SD_EMMC_CMD_RSP 0x5c 78*93738620SCarlo Caione #define MESON_SD_EMMC_CMD_RSP1 0x60 79*93738620SCarlo Caione #define MESON_SD_EMMC_CMD_RSP2 0x64 80*93738620SCarlo Caione #define MESON_SD_EMMC_CMD_RSP3 0x68 81*93738620SCarlo Caione 82*93738620SCarlo Caione struct meson_mmc_platdata { 83*93738620SCarlo Caione struct mmc_config cfg; 84*93738620SCarlo Caione struct mmc mmc; 85*93738620SCarlo Caione void *regbase; 86*93738620SCarlo Caione void *w_buf; 87*93738620SCarlo Caione }; 88*93738620SCarlo Caione 89*93738620SCarlo Caione #endif 90