0001
0002
0003
0004
0005
0006
0007 #ifndef LINUX_MMC_CARD_H
0008 #define LINUX_MMC_CARD_H
0009
0010 #include <linux/device.h>
0011 #include <linux/mod_devicetable.h>
0012
0013 struct mmc_cid {
0014 unsigned int manfid;
0015 char prod_name[8];
0016 unsigned char prv;
0017 unsigned int serial;
0018 unsigned short oemid;
0019 unsigned short year;
0020 unsigned char hwrev;
0021 unsigned char fwrev;
0022 unsigned char month;
0023 };
0024
0025 struct mmc_csd {
0026 unsigned char structure;
0027 unsigned char mmca_vsn;
0028 unsigned short cmdclass;
0029 unsigned short taac_clks;
0030 unsigned int taac_ns;
0031 unsigned int c_size;
0032 unsigned int r2w_factor;
0033 unsigned int max_dtr;
0034 unsigned int erase_size;
0035 unsigned int read_blkbits;
0036 unsigned int write_blkbits;
0037 unsigned int capacity;
0038 unsigned int read_partial:1,
0039 read_misalign:1,
0040 write_partial:1,
0041 write_misalign:1,
0042 dsr_imp:1;
0043 };
0044
0045 struct mmc_ext_csd {
0046 u8 rev;
0047 u8 erase_group_def;
0048 u8 sec_feature_support;
0049 u8 rel_sectors;
0050 u8 rel_param;
0051 bool enhanced_rpmb_supported;
0052 u8 part_config;
0053 u8 cache_ctrl;
0054 u8 rst_n_function;
0055 u8 max_packed_writes;
0056 u8 max_packed_reads;
0057 u8 packed_event_en;
0058 unsigned int part_time;
0059 unsigned int sa_timeout;
0060 unsigned int generic_cmd6_time;
0061 unsigned int power_off_longtime;
0062 u8 power_off_notification;
0063 unsigned int hs_max_dtr;
0064 unsigned int hs200_max_dtr;
0065 #define MMC_HIGH_26_MAX_DTR 26000000
0066 #define MMC_HIGH_52_MAX_DTR 52000000
0067 #define MMC_HIGH_DDR_MAX_DTR 52000000
0068 #define MMC_HS200_MAX_DTR 200000000
0069 unsigned int sectors;
0070 unsigned int hc_erase_size;
0071 unsigned int hc_erase_timeout;
0072 unsigned int sec_trim_mult;
0073 unsigned int sec_erase_mult;
0074 unsigned int trim_timeout;
0075 bool partition_setting_completed;
0076 unsigned long long enhanced_area_offset;
0077 unsigned int enhanced_area_size;
0078 unsigned int cache_size;
0079 bool hpi_en;
0080 bool hpi;
0081 unsigned int hpi_cmd;
0082 bool bkops;
0083 bool man_bkops_en;
0084 bool auto_bkops_en;
0085 unsigned int data_sector_size;
0086 unsigned int data_tag_unit_size;
0087 unsigned int boot_ro_lock;
0088 bool boot_ro_lockable;
0089 bool ffu_capable;
0090 bool cmdq_en;
0091 bool cmdq_support;
0092 unsigned int cmdq_depth;
0093 #define MMC_FIRMWARE_LEN 8
0094 u8 fwrev[MMC_FIRMWARE_LEN];
0095 u8 raw_exception_status;
0096 u8 raw_partition_support;
0097 u8 raw_rpmb_size_mult;
0098 u8 raw_erased_mem_count;
0099 u8 strobe_support;
0100 u8 raw_ext_csd_structure;
0101 u8 raw_card_type;
0102 u8 raw_driver_strength;
0103 u8 out_of_int_time;
0104 u8 raw_pwr_cl_52_195;
0105 u8 raw_pwr_cl_26_195;
0106 u8 raw_pwr_cl_52_360;
0107 u8 raw_pwr_cl_26_360;
0108 u8 raw_s_a_timeout;
0109 u8 raw_hc_erase_gap_size;
0110 u8 raw_erase_timeout_mult;
0111 u8 raw_hc_erase_grp_size;
0112 u8 raw_boot_mult;
0113 u8 raw_sec_trim_mult;
0114 u8 raw_sec_erase_mult;
0115 u8 raw_sec_feature_support;
0116 u8 raw_trim_mult;
0117 u8 raw_pwr_cl_200_195;
0118 u8 raw_pwr_cl_200_360;
0119 u8 raw_pwr_cl_ddr_52_195;
0120 u8 raw_pwr_cl_ddr_52_360;
0121 u8 raw_pwr_cl_ddr_200_360;
0122 u8 raw_bkops_status;
0123 u8 raw_sectors[4];
0124 u8 pre_eol_info;
0125 u8 device_life_time_est_typ_a;
0126 u8 device_life_time_est_typ_b;
0127
0128 unsigned int feature_support;
0129 #define MMC_DISCARD_FEATURE BIT(0)
0130 };
0131
0132 struct sd_scr {
0133 unsigned char sda_vsn;
0134 unsigned char sda_spec3;
0135 unsigned char sda_spec4;
0136 unsigned char sda_specx;
0137 unsigned char bus_widths;
0138 #define SD_SCR_BUS_WIDTH_1 (1<<0)
0139 #define SD_SCR_BUS_WIDTH_4 (1<<2)
0140 unsigned char cmds;
0141 #define SD_SCR_CMD20_SUPPORT (1<<0)
0142 #define SD_SCR_CMD23_SUPPORT (1<<1)
0143 #define SD_SCR_CMD48_SUPPORT (1<<2)
0144 #define SD_SCR_CMD58_SUPPORT (1<<3)
0145 };
0146
0147 struct sd_ssr {
0148 unsigned int au;
0149 unsigned int erase_timeout;
0150 unsigned int erase_offset;
0151 };
0152
0153 struct sd_switch_caps {
0154 unsigned int hs_max_dtr;
0155 unsigned int uhs_max_dtr;
0156 #define HIGH_SPEED_MAX_DTR 50000000
0157 #define UHS_SDR104_MAX_DTR 208000000
0158 #define UHS_SDR50_MAX_DTR 100000000
0159 #define UHS_DDR50_MAX_DTR 50000000
0160 #define UHS_SDR25_MAX_DTR UHS_DDR50_MAX_DTR
0161 #define UHS_SDR12_MAX_DTR 25000000
0162 #define DEFAULT_SPEED_MAX_DTR UHS_SDR12_MAX_DTR
0163 unsigned int sd3_bus_mode;
0164 #define UHS_SDR12_BUS_SPEED 0
0165 #define HIGH_SPEED_BUS_SPEED 1
0166 #define UHS_SDR25_BUS_SPEED 1
0167 #define UHS_SDR50_BUS_SPEED 2
0168 #define UHS_SDR104_BUS_SPEED 3
0169 #define UHS_DDR50_BUS_SPEED 4
0170
0171 #define SD_MODE_HIGH_SPEED (1 << HIGH_SPEED_BUS_SPEED)
0172 #define SD_MODE_UHS_SDR12 (1 << UHS_SDR12_BUS_SPEED)
0173 #define SD_MODE_UHS_SDR25 (1 << UHS_SDR25_BUS_SPEED)
0174 #define SD_MODE_UHS_SDR50 (1 << UHS_SDR50_BUS_SPEED)
0175 #define SD_MODE_UHS_SDR104 (1 << UHS_SDR104_BUS_SPEED)
0176 #define SD_MODE_UHS_DDR50 (1 << UHS_DDR50_BUS_SPEED)
0177 unsigned int sd3_drv_type;
0178 #define SD_DRIVER_TYPE_B 0x01
0179 #define SD_DRIVER_TYPE_A 0x02
0180 #define SD_DRIVER_TYPE_C 0x04
0181 #define SD_DRIVER_TYPE_D 0x08
0182 unsigned int sd3_curr_limit;
0183 #define SD_SET_CURRENT_LIMIT_200 0
0184 #define SD_SET_CURRENT_LIMIT_400 1
0185 #define SD_SET_CURRENT_LIMIT_600 2
0186 #define SD_SET_CURRENT_LIMIT_800 3
0187 #define SD_SET_CURRENT_NO_CHANGE (-1)
0188
0189 #define SD_MAX_CURRENT_200 (1 << SD_SET_CURRENT_LIMIT_200)
0190 #define SD_MAX_CURRENT_400 (1 << SD_SET_CURRENT_LIMIT_400)
0191 #define SD_MAX_CURRENT_600 (1 << SD_SET_CURRENT_LIMIT_600)
0192 #define SD_MAX_CURRENT_800 (1 << SD_SET_CURRENT_LIMIT_800)
0193 };
0194
0195 struct sd_ext_reg {
0196 u8 fno;
0197 u8 page;
0198 u16 offset;
0199 u8 rev;
0200 u8 feature_enabled;
0201 u8 feature_support;
0202
0203 #define SD_EXT_POWER_OFF_NOTIFY (1<<0)
0204 #define SD_EXT_POWER_SUSTENANCE (1<<1)
0205 #define SD_EXT_POWER_DOWN_MODE (1<<2)
0206
0207 #define SD_EXT_PERF_FX_EVENT (1<<0)
0208 #define SD_EXT_PERF_CARD_MAINT (1<<1)
0209 #define SD_EXT_PERF_HOST_MAINT (1<<2)
0210 #define SD_EXT_PERF_CACHE (1<<3)
0211 #define SD_EXT_PERF_CMD_QUEUE (1<<4)
0212 };
0213
0214 struct sdio_cccr {
0215 unsigned int sdio_vsn;
0216 unsigned int sd_vsn;
0217 unsigned int multi_block:1,
0218 low_speed:1,
0219 wide_bus:1,
0220 high_power:1,
0221 high_speed:1,
0222 disable_cd:1,
0223 enable_async_irq:1;
0224 };
0225
0226 struct sdio_cis {
0227 unsigned short vendor;
0228 unsigned short device;
0229 unsigned short blksize;
0230 unsigned int max_dtr;
0231 };
0232
0233 struct mmc_host;
0234 struct sdio_func;
0235 struct sdio_func_tuple;
0236 struct mmc_queue_req;
0237
0238 #define SDIO_MAX_FUNCS 7
0239
0240
0241
0242
0243
0244 #define MMC_NUM_BOOT_PARTITION 2
0245 #define MMC_NUM_GP_PARTITION 4
0246 #define MMC_NUM_PHY_PARTITION 7
0247 #define MAX_MMC_PART_NAME_LEN 20
0248
0249
0250
0251
0252 struct mmc_part {
0253 u64 size;
0254 unsigned int part_cfg;
0255 char name[MAX_MMC_PART_NAME_LEN];
0256 bool force_ro;
0257 unsigned int area_type;
0258 #define MMC_BLK_DATA_AREA_MAIN (1<<0)
0259 #define MMC_BLK_DATA_AREA_BOOT (1<<1)
0260 #define MMC_BLK_DATA_AREA_GP (1<<2)
0261 #define MMC_BLK_DATA_AREA_RPMB (1<<3)
0262 };
0263
0264
0265
0266
0267 struct mmc_card {
0268 struct mmc_host *host;
0269 struct device dev;
0270 u32 ocr;
0271 unsigned int rca;
0272 unsigned int type;
0273 #define MMC_TYPE_MMC 0
0274 #define MMC_TYPE_SD 1
0275 #define MMC_TYPE_SDIO 2
0276 #define MMC_TYPE_SD_COMBO 3
0277 unsigned int state;
0278 unsigned int quirks;
0279 unsigned int quirk_max_rate;
0280 #define MMC_QUIRK_LENIENT_FN0 (1<<0)
0281 #define MMC_QUIRK_BLKSZ_FOR_BYTE_MODE (1<<1)
0282
0283 #define MMC_QUIRK_NONSTD_SDIO (1<<2)
0284
0285 #define MMC_QUIRK_NONSTD_FUNC_IF (1<<4)
0286 #define MMC_QUIRK_DISABLE_CD (1<<5)
0287 #define MMC_QUIRK_INAND_CMD38 (1<<6)
0288 #define MMC_QUIRK_BLK_NO_CMD23 (1<<7)
0289 #define MMC_QUIRK_BROKEN_BYTE_MODE_512 (1<<8)
0290
0291 #define MMC_QUIRK_LONG_READ_TIME (1<<9)
0292 #define MMC_QUIRK_SEC_ERASE_TRIM_BROKEN (1<<10)
0293 #define MMC_QUIRK_BROKEN_IRQ_POLLING (1<<11)
0294 #define MMC_QUIRK_TRIM_BROKEN (1<<12)
0295 #define MMC_QUIRK_BROKEN_HPI (1<<13)
0296
0297 bool reenable_cmdq;
0298
0299 unsigned int erase_size;
0300 unsigned int erase_shift;
0301 unsigned int pref_erase;
0302 unsigned int eg_boundary;
0303 unsigned int erase_arg;
0304 u8 erased_byte;
0305
0306 u32 raw_cid[4];
0307 u32 raw_csd[4];
0308 u32 raw_scr[2];
0309 u32 raw_ssr[16];
0310 struct mmc_cid cid;
0311 struct mmc_csd csd;
0312 struct mmc_ext_csd ext_csd;
0313 struct sd_scr scr;
0314 struct sd_ssr ssr;
0315 struct sd_switch_caps sw_caps;
0316 struct sd_ext_reg ext_power;
0317 struct sd_ext_reg ext_perf;
0318
0319 unsigned int sdio_funcs;
0320 atomic_t sdio_funcs_probed;
0321 struct sdio_cccr cccr;
0322 struct sdio_cis cis;
0323 struct sdio_func *sdio_func[SDIO_MAX_FUNCS];
0324 struct sdio_func *sdio_single_irq;
0325 u8 major_rev;
0326 u8 minor_rev;
0327 unsigned num_info;
0328 const char **info;
0329 struct sdio_func_tuple *tuples;
0330
0331 unsigned int sd_bus_speed;
0332 unsigned int mmc_avail_type;
0333 unsigned int drive_strength;
0334
0335 struct dentry *debugfs_root;
0336 struct mmc_part part[MMC_NUM_PHY_PARTITION];
0337 unsigned int nr_parts;
0338
0339 struct workqueue_struct *complete_wq;
0340 };
0341
0342 static inline bool mmc_large_sector(struct mmc_card *card)
0343 {
0344 return card->ext_csd.data_sector_size == 4096;
0345 }
0346
0347 static inline int mmc_card_enable_async_irq(struct mmc_card *card)
0348 {
0349 return card->cccr.enable_async_irq;
0350 }
0351
0352 bool mmc_card_is_blockaddr(struct mmc_card *card);
0353
0354 #define mmc_card_mmc(c) ((c)->type == MMC_TYPE_MMC)
0355 #define mmc_card_sd(c) ((c)->type == MMC_TYPE_SD)
0356 #define mmc_card_sdio(c) ((c)->type == MMC_TYPE_SDIO)
0357 #define mmc_card_sd_combo(c) ((c)->type == MMC_TYPE_SD_COMBO)
0358
0359 #endif