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))
|
|
|