mirror of https://github.com/OpenIPC/firmware.git
				
				
				
			
		
			
				
	
	
		
			91 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Diff
		
	
	
			
		
		
	
	
			91 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Diff
		
	
	
| --- linux-4.9.37/include/linux/mmc/card.h	2017-07-12 16:42:41.000000000 +0300
 | |
| +++ linux-4.9.y/include/linux/mmc/card.h	2021-06-07 13:01:34.000000000 +0300
 | |
| @@ -14,6 +14,8 @@
 | |
|  #include <linux/mmc/core.h>
 | |
|  #include <linux/mod_devicetable.h>
 | |
|  
 | |
| +#define MMC_CARD_CMDQ_BLK_SIZE 512
 | |
| +
 | |
|  struct mmc_cid {
 | |
|  	unsigned int		manfid;
 | |
|  	char			prod_name[8];
 | |
| @@ -84,6 +86,7 @@
 | |
|  	unsigned int		hpi_cmd;		/* cmd used as HPI */
 | |
|  	bool			bkops;		/* background support bit */
 | |
|  	bool			man_bkops_en;	/* manual bkops enable bit */
 | |
| +	bool			auto_bkops_en;	/* auto bkops enable bit */
 | |
|  	unsigned int            data_sector_size;       /* 512 bytes or 4KB */
 | |
|  	unsigned int            data_tag_unit_size;     /* DATA TAG UNIT size */
 | |
|  	unsigned int		boot_ro_lock;		/* ro lock support */
 | |
| @@ -119,6 +122,8 @@
 | |
|  	u8			raw_pwr_cl_ddr_200_360;	/* 253 */
 | |
|  	u8			raw_bkops_status;	/* 246 */
 | |
|  	u8			raw_sectors[4];		/* 212 - 4 bytes */
 | |
| +	u8			cmdq_depth;		/* 307 */
 | |
| +	u8			cmdq_support;		/* 308 */
 | |
|  
 | |
|  	unsigned int            feature_support;
 | |
|  #define MMC_DISCARD_FEATURE	BIT(0)                  /* CMD38 feature */
 | |
| @@ -264,6 +269,8 @@
 | |
|  #define MMC_CARD_REMOVED	(1<<4)		/* card has been removed */
 | |
|  #define MMC_STATE_DOING_BKOPS	(1<<5)		/* card is doing BKOPS */
 | |
|  #define MMC_STATE_SUSPENDED	(1<<6)		/* card is suspended */
 | |
| +#define MMC_STATE_CMDQ		(1<<7)		/* card is in cmd queue mode */
 | |
| +
 | |
|  	unsigned int		quirks; 	/* card quirks */
 | |
|  #define MMC_QUIRK_LENIENT_FN0	(1<<0)		/* allow SDIO FN0 writes outside of the VS CCCR range */
 | |
|  #define MMC_QUIRK_BLKSZ_FOR_BYTE_MODE (1<<1)	/* use func->cur_blksize */
 | |
| @@ -281,7 +288,8 @@
 | |
|  #define MMC_QUIRK_BROKEN_IRQ_POLLING	(1<<11)	/* Polling SDIO_CCCR_INTx could create a fake interrupt */
 | |
|  #define MMC_QUIRK_TRIM_BROKEN	(1<<12)		/* Skip trim */
 | |
|  #define MMC_QUIRK_BROKEN_HPI	(1<<13)		/* Disable broken HPI support */
 | |
| -
 | |
| +/* Make sure CMDQ is empty before queuing DCMD */
 | |
| +#define MMC_QUIRK_CMDQ_EMPTY_BEFORE_DCMD (1 << 14)
 | |
|  
 | |
|  	unsigned int		erase_size;	/* erase size in sectors */
 | |
|   	unsigned int		erase_shift;	/* if erase unit is power 2 */
 | |
| @@ -316,6 +324,8 @@
 | |
|  	struct dentry		*debugfs_root;
 | |
|  	struct mmc_part	part[MMC_NUM_PHY_PARTITION]; /* physical partitions */
 | |
|  	unsigned int    nr_parts;
 | |
| +	unsigned int	part_curr;
 | |
| +	bool cmdq_init;
 | |
|  };
 | |
|  
 | |
|  /*
 | |
| @@ -453,6 +463,7 @@
 | |
|  #define mmc_card_removed(c)	((c) && ((c)->state & MMC_CARD_REMOVED))
 | |
|  #define mmc_card_doing_bkops(c)	((c)->state & MMC_STATE_DOING_BKOPS)
 | |
|  #define mmc_card_suspended(c)	((c)->state & MMC_STATE_SUSPENDED)
 | |
| +#define mmc_card_cmdq(c)       ((c)->state & MMC_STATE_CMDQ)
 | |
|  
 | |
|  #define mmc_card_set_present(c)	((c)->state |= MMC_STATE_PRESENT)
 | |
|  #define mmc_card_set_readonly(c) ((c)->state |= MMC_STATE_READONLY)
 | |
| @@ -463,6 +474,8 @@
 | |
|  #define mmc_card_clr_doing_bkops(c)	((c)->state &= ~MMC_STATE_DOING_BKOPS)
 | |
|  #define mmc_card_set_suspended(c) ((c)->state |= MMC_STATE_SUSPENDED)
 | |
|  #define mmc_card_clr_suspended(c) ((c)->state &= ~MMC_STATE_SUSPENDED)
 | |
| +#define mmc_card_set_cmdq(c)           ((c)->state |= MMC_STATE_CMDQ)
 | |
| +#define mmc_card_clr_cmdq(c)           ((c)->state &= ~MMC_STATE_CMDQ)
 | |
|  
 | |
|  /*
 | |
|   * Quirk add/remove for MMC products.
 | |
| @@ -538,6 +551,16 @@
 | |
|  	return c->quirks & MMC_QUIRK_BROKEN_HPI;
 | |
|  }
 | |
|  
 | |
| +static inline bool mmc_card_configured_manual_bkops(const struct mmc_card *c)
 | |
| +{
 | |
| +	return c->ext_csd.man_bkops_en;
 | |
| +}
 | |
| +
 | |
| +static inline bool mmc_card_configured_auto_bkops(const struct mmc_card *c)
 | |
| +{
 | |
| +	return c->ext_csd.auto_bkops_en;
 | |
| +}
 | |
| +
 | |
|  #define mmc_card_name(c)	((c)->cid.prod_name)
 | |
|  #define mmc_card_id(c)		(dev_name(&(c)->dev))
 | |
|  
 |