From: <micky_ching@realsil.com.cn> To: <chris@printf.net>, <ulf.hansson@linaro.org>, <sameo@linux.intel.com> Cc: <gregkh@linuxfoundation.org>, <dan.carpenter@oracle.com>, <devel@linuxdriverproject.org>, <linux-kernel@vger.kernel.org>, <linux-mmc@vger.kernel.org>, <rogerable@realtek.com>, <wei_wang@realsil.com.cn>, Micky Ching <micky_ching@realsil.com.cn> Subject: [PATCH 07/12] mmc: sdhci: add data structure for SD4.0 Date: Wed, 29 Apr 2015 09:23:39 +0800 [thread overview] Message-ID: <d854a023e0b5c7836b1385114dbad6acc7874d07.1429845922.git.micky_ching@realsil.com.cn> (raw) In-Reply-To: <cover.1429845922.git.micky_ching@realsil.com.cn> From: Micky Ching <micky_ching@realsil.com.cn> add SD4.0 register define and host data structure for handshake with SD4.0 card. Signed-off-by: Micky Ching <micky_ching@realsil.com.cn> Signed-off-by: Wei Wang <wei_wang@realsil.com.cn> --- drivers/mmc/host/sdhci.h | 136 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 135 insertions(+), 1 deletion(-) diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h index e639b7f..659eb64 100644 --- a/drivers/mmc/host/sdhci.h +++ b/drivers/mmc/host/sdhci.h @@ -73,6 +73,9 @@ #define SDHCI_DATA_LVL_MASK 0x00F00000 #define SDHCI_DATA_LVL_SHIFT 20 #define SDHCI_DATA_0_LVL_MASK 0x00100000 +#define SDHCI_IN_DORMANT_STATE 0x20000000 +#define SDHCI_LANE_SYNC 0x40000000 +#define SDHCI_STBL_DETECT 0x80000000 #define SDHCI_HOST_CONTROL 0x28 #define SDHCI_CTRL_LED 0x01 @@ -90,6 +93,8 @@ #define SDHCI_POWER_180 0x0A #define SDHCI_POWER_300 0x0C #define SDHCI_POWER_330 0x0E +#define SDHCI_VDD1_SHIFT 0 +#define SDHCI_VDD2_SHIFT 4 #define SDHCI_BLOCK_GAP_CONTROL 0x2A @@ -162,6 +167,7 @@ #define SDHCI_CTRL_UHS_SDR104 0x0003 #define SDHCI_CTRL_UHS_DDR50 0x0004 #define SDHCI_CTRL_HS400 0x0005 /* Non-standard */ +#define SDHCI_CTRL_UHSII 0x0007 #define SDHCI_CTRL_VDD_180 0x0008 #define SDHCI_CTRL_DRV_TYPE_MASK 0x0030 #define SDHCI_CTRL_DRV_TYPE_B 0x0000 @@ -170,6 +176,10 @@ #define SDHCI_CTRL_DRV_TYPE_D 0x0030 #define SDHCI_CTRL_EXEC_TUNING 0x0040 #define SDHCI_CTRL_TUNED_CLK 0x0080 +#define SDHCI_CTRL_UHSII_IF_ENABLE 0x0100 +#define SDHCI_CTRL_HOST_V4_ENABLE 0x1000 +#define SDHCI_CTRL_64BIT_ADDR_ENABLE 0x2000 +#define SDHCI_CTRL_ASYNC_INT_ENABLE 0x4000 #define SDHCI_CTRL_PRESET_VAL_ENABLE 0x8000 #define SDHCI_CAPABILITIES 0x40 @@ -194,6 +204,7 @@ #define SDHCI_SUPPORT_SDR50 0x00000001 #define SDHCI_SUPPORT_SDR104 0x00000002 #define SDHCI_SUPPORT_DDR50 0x00000004 +#define SDHCI_SUPPORT_UHSII 0x00000008 #define SDHCI_DRIVER_TYPE_A 0x00000010 #define SDHCI_DRIVER_TYPE_C 0x00000020 #define SDHCI_DRIVER_TYPE_D 0x00000040 @@ -205,6 +216,8 @@ #define SDHCI_CLOCK_MUL_MASK 0x00FF0000 #define SDHCI_CLOCK_MUL_SHIFT 16 #define SDHCI_SUPPORT_HS400 0x80000000 /* Non-standard */ +#define SDHCI_CAN_DO_ADMA3 0x08000000 +#define SDHCI_CAN_VDD2_180 0x10000000 #define SDHCI_CAPABILITIES_1 0x44 @@ -230,7 +243,7 @@ #define SDHCI_ADMA_ADDRESS 0x58 #define SDHCI_ADMA_ADDRESS_HI 0x5C -/* 60-FB reserved */ +/* 60-73 reserved */ #define SDHCI_PRESET_FOR_SDR12 0x66 #define SDHCI_PRESET_FOR_SDR25 0x68 @@ -245,6 +258,71 @@ #define SDHCI_PRESET_SDCLK_FREQ_MASK 0x3FF #define SDHCI_PRESET_SDCLK_FREQ_SHIFT 0 +#define SDHCI_PRESET_VALUE_UHSII 0x74 +#define SDHCI_ADMA3_ID_ADDRESS 0x78 + +#define SDHCI_UHSII_BLOCK_SIZE 0x80 +#define SDHCI_UHSII_BLOCK_COUNT 0x84 + +#define SDHCI_UHSII_CMD_PACKET 0x88 +#define SDHCI_UHSII_CMD_PACK_LEN 20 +#define SDHCI_UHSII_CMD_HEADER (SDHCI_UHSII_CMD_PACKET) +#define SDHCI_UHSII_CMD_ARGUMENT (SDHCI_UHSII_CMD_PACKET + 2) +#define SDHCI_UHSII_CMD_PAYLOAD (SDHCI_UHSII_CMD_PACKET + 4) + +#define SDHCI_UHSII_TRANSFER_MODE 0x9C +#define SDHCI_UHSII_TRNS_DMA 0x01 +#define SDHCI_UHSII_TRNS_BLK_CNT_EN 0x02 +#define SDHCI_UHSII_TRNS_WRITE 0x10 +#define SDHCI_UHSII_TRNS_BYTE_MODE 0x20 +#define SDHCI_UHSII_TRNS_WAIT_EBSY 0x4000 +#define SDHCI_UHSII_TRANS_2LANE_HD 0x8000 +#define SDHCI_UHSII_COMMAND 0x9E +#define SDHCI_UHSII_DATA_PRESENT 0x0020 +#define SDHCI_UHSII_NORMAL_COMMAND (0 << 6) +#define SDHCI_UHSII_TRANS_ABORT_CCMD (1 << 6) +#define SDHCI_UHSII_ABORT_COMMAND (2 << 6) +#define SDHCI_UHSII_GO_DORMANT (3 << 6) +#define SDHCI_UHSII_COMMAND_LEN_SHIFT 8 +#define SDHCI_UHSII_COMMAND_LEN_MASK 0x1F + +#define SDHCI_UHSII_RESPONSE 0xA0 +#define SDHCI_UHSII_RESP_LEN 20 +#define SDHCI_UHSII_RESP_HEADER SDHCI_UHSII_RESPONSE +#define SDHCI_UHSII_RESP_ARGUMENT (SDHCI_UHSII_RESPONSE + 2) +#define SDHCI_UHSII_RESP_PAYLOAD (SDHCI_UHSII_RESPONSE + 4) + +#define SDHCI_UHSII_MSG_SEL 0xB4 +#define SDHCI_UHSII_MSG_REG 0xB8 +#define SDHCI_UHSII_DEV_INT_STATUS 0xBC +#define SDHCI_UHSII_DEV_SEL 0xBE +#define SDHCI_UHSII_INT_CODE 0xBF +#define SDHCI_UHSII_SOFT_RESET 0xC0 +#define SDHCI_UHSII_HOST_FULL_RESET 0x0001 +#define SDHCI_UHSII_TIMER_CONTROL 0xC2 +#define SDHCI_UHSII_INT_STATUS 0xC4 +#define SDHCI_UHSII_INT_ENABLE 0xC8 +#define SDHCI_UHSII_SIGNAL_ENABLE 0xCC +#define SDHCI_UHSII_INT_HEADER 0x00000001 +#define SDHCI_UHSII_INT_RES 0x00000002 +#define SDHCI_UHSII_INT_EXPIRED 0x00000004 +#define SDHCI_UHSII_INT_CRC 0x00000008 +#define SDHCI_UHSII_INT_FRAMING 0x00000010 +#define SDHCI_UHSII_INT_TID 0x00000020 +#define SDHCI_UHSII_INT_UNRECOVERABLE 0x00000080 +#define SDHCI_UHSII_INT_EBSY 0x00000100 +#define SDHCI_UHSII_INT_ADMA 0x00008000 +#define SDHCI_UHSII_INT_TO_RES 0x00010000 +#define SDHCI_UHSII_INT_TO_DEADLOCK 0x00020000 +#define SDHCI_UHSII_INT_TIMEOUT \ + (SDHCI_UHSII_INT_TO_RES | SDHCI_UHSII_INT_TO_DEADLOCK) + +#define SDHCI_UHSII_SETTINGS_PTR 0xE0 +#define SDHCI_UHSII_HOST_CAPS_PTR 0xE2 +#define SDHCI_UHSII_TEST_REG_PTR 0xE4 +#define SDHCI_EMBEDDED_CONTROL_PTR 0xE6 +#define SDHCI_VENDOR_SPEC_AREA_PTR 0xE8 + #define SDHCI_SLOT_INT_STATUS 0xFC #define SDHCI_HOST_VERSION 0xFE @@ -255,6 +333,42 @@ #define SDHCI_SPEC_100 0 #define SDHCI_SPEC_200 1 #define SDHCI_SPEC_300 2 +#define SDHCI_SPEC_400 3 + +#define SDHCI_UHSII_GENERAL_REG 0x00 +#define SDHCI_UHSII_PHY_REG 0x04 +#define SDHCI_UHSII_LINK_REG_L 0x08 +#define SDHCI_UHSII_LINK_REG_H 0x0C + +/* UHS-II General Setting */ +#define SDHCI_UHSII_LOW_PWR_MODE 0x01 + +/* UHS-II General Capabilities */ +#define SDHCI_UHSII_LANES_SHIFT 8 +#define SDHCI_UHSII_LANES_MASK 0x3F00 +#define SDHCI_UHSII_LANES_2L_HD 0x01 +#define SDHCI_UHSII_LANES_2D1U_FD 0x02 +#define SDHCI_UHSII_LANES_1D2U_FD 0x04 +#define SDHCI_UHSII_LANES_2D2U_FD 0x08 +#define SDHCI_UHSII_GAP_SHIFT 4 +#define SDHCI_UHSII_GAP_MASK 0xF0 +#define SDHCI_UHSII_DAP_SHIFT 0 +#define SDHCI_UHSII_DAP_MASK 0x0F + +/* UHS-II PHY Capabilities */ +#define SDHCI_UHSII_LSS_DIR_SHIFT 20 +#define SDHCI_UHSII_LSS_DIR_MASK (0x0F >> SDHCI_UHSII_LSS_DIR_SHIFT) +#define SDHCI_UHSII_LSS_SYN_SHIFT 16 +#define SDHCI_UHSII_LSS_SYN_MASK (0x0F >> SDHCI_UHSII_LSS_SYN_SHIFT) +#define SDHCI_UHSII_RANGE_SHIFT 6 +#define SDHCI_UHSII_RANGE_MASK 0xC0 +#define SDHCI_UHSII_RANGE_A 0x00 +#define SDHCI_UHSII_RANGE_AB 0x01 + +/* UHS-II LINK/TRAN Capabilities */ +#define SDHCI_UHSII_DATA_GAP_MASK 0xFF +#define SDHCI_UHSII_N_FCU_SHIFT 8 +#define SDHCI_UHSII_N_FCU_MASK 0xFF00 /* * End of controller registers. @@ -441,6 +555,7 @@ struct sdhci_host { #define SDHCI_USING_RETUNING_TIMER (1<<11) /* Host is using a retuning timer for the card */ #define SDHCI_USE_64_BIT_DMA (1<<12) /* Use 64-bit DMA */ #define SDHCI_HS400_TUNING (1<<13) /* Tuning for HS400 */ +#define SDHCI_HOST_V4_ENABLED (1<<12) unsigned int version; /* SDHCI spec. version */ @@ -451,11 +566,25 @@ struct sdhci_host { unsigned int clock; /* Current clock (MHz) */ u8 pwr; /* Current voltage */ + bool uhsii_if_enabled; + u8 lane_mode; + u8 max_gap; + u8 max_dap; + u8 n_data_gap; + u8 n_fcu; + u8 n_lss_dir; + u8 n_lss_syn; + u8 speed_range; + + u16 uhsii_settings_ptr; + u16 uhsii_caps_ptr; + bool runtime_suspended; /* Host is runtime suspended */ bool bus_on; /* Bus power prevents runtime suspend */ bool preset_enabled; /* Preset is enabled */ struct mmc_request *mrq; /* Current request */ + struct mmc_tlp *tlp; /* Current native TLP */ struct mmc_command *cmd; /* Current command */ struct mmc_data *data; /* Current data request */ unsigned int data_early:1; /* Data finished before cmd */ @@ -627,6 +756,11 @@ static inline u8 sdhci_readb(struct sdhci_host *host, int reg) #endif /* CONFIG_MMC_SDHCI_IO_ACCESSORS */ +static inline u32 sdhci_raw_readl(struct sdhci_host *host, int reg) +{ + return __raw_readl(host->ioaddr + reg); +} + extern struct sdhci_host *sdhci_alloc_host(struct device *dev, size_t priv_size); extern void sdhci_free_host(struct sdhci_host *host); -- 1.9.1
WARNING: multiple messages have this Message-ID (diff)
From: <micky_ching@realsil.com.cn> To: chris@printf.net, ulf.hansson@linaro.org, sameo@linux.intel.com Cc: gregkh@linuxfoundation.org, linux-mmc@vger.kernel.org, linux-kernel@vger.kernel.org, wei_wang@realsil.com.cn, devel@linuxdriverproject.org, rogerable@realtek.com, dan.carpenter@oracle.com Subject: [PATCH 07/12] mmc: sdhci: add data structure for SD4.0 Date: Wed, 29 Apr 2015 09:23:39 +0800 [thread overview] Message-ID: <d854a023e0b5c7836b1385114dbad6acc7874d07.1429845922.git.micky_ching@realsil.com.cn> (raw) In-Reply-To: <cover.1429845922.git.micky_ching@realsil.com.cn> From: Micky Ching <micky_ching@realsil.com.cn> add SD4.0 register define and host data structure for handshake with SD4.0 card. Signed-off-by: Micky Ching <micky_ching@realsil.com.cn> Signed-off-by: Wei Wang <wei_wang@realsil.com.cn> --- drivers/mmc/host/sdhci.h | 136 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 135 insertions(+), 1 deletion(-) diff --git a/drivers/mmc/host/sdhci.h b/drivers/mmc/host/sdhci.h index e639b7f..659eb64 100644 --- a/drivers/mmc/host/sdhci.h +++ b/drivers/mmc/host/sdhci.h @@ -73,6 +73,9 @@ #define SDHCI_DATA_LVL_MASK 0x00F00000 #define SDHCI_DATA_LVL_SHIFT 20 #define SDHCI_DATA_0_LVL_MASK 0x00100000 +#define SDHCI_IN_DORMANT_STATE 0x20000000 +#define SDHCI_LANE_SYNC 0x40000000 +#define SDHCI_STBL_DETECT 0x80000000 #define SDHCI_HOST_CONTROL 0x28 #define SDHCI_CTRL_LED 0x01 @@ -90,6 +93,8 @@ #define SDHCI_POWER_180 0x0A #define SDHCI_POWER_300 0x0C #define SDHCI_POWER_330 0x0E +#define SDHCI_VDD1_SHIFT 0 +#define SDHCI_VDD2_SHIFT 4 #define SDHCI_BLOCK_GAP_CONTROL 0x2A @@ -162,6 +167,7 @@ #define SDHCI_CTRL_UHS_SDR104 0x0003 #define SDHCI_CTRL_UHS_DDR50 0x0004 #define SDHCI_CTRL_HS400 0x0005 /* Non-standard */ +#define SDHCI_CTRL_UHSII 0x0007 #define SDHCI_CTRL_VDD_180 0x0008 #define SDHCI_CTRL_DRV_TYPE_MASK 0x0030 #define SDHCI_CTRL_DRV_TYPE_B 0x0000 @@ -170,6 +176,10 @@ #define SDHCI_CTRL_DRV_TYPE_D 0x0030 #define SDHCI_CTRL_EXEC_TUNING 0x0040 #define SDHCI_CTRL_TUNED_CLK 0x0080 +#define SDHCI_CTRL_UHSII_IF_ENABLE 0x0100 +#define SDHCI_CTRL_HOST_V4_ENABLE 0x1000 +#define SDHCI_CTRL_64BIT_ADDR_ENABLE 0x2000 +#define SDHCI_CTRL_ASYNC_INT_ENABLE 0x4000 #define SDHCI_CTRL_PRESET_VAL_ENABLE 0x8000 #define SDHCI_CAPABILITIES 0x40 @@ -194,6 +204,7 @@ #define SDHCI_SUPPORT_SDR50 0x00000001 #define SDHCI_SUPPORT_SDR104 0x00000002 #define SDHCI_SUPPORT_DDR50 0x00000004 +#define SDHCI_SUPPORT_UHSII 0x00000008 #define SDHCI_DRIVER_TYPE_A 0x00000010 #define SDHCI_DRIVER_TYPE_C 0x00000020 #define SDHCI_DRIVER_TYPE_D 0x00000040 @@ -205,6 +216,8 @@ #define SDHCI_CLOCK_MUL_MASK 0x00FF0000 #define SDHCI_CLOCK_MUL_SHIFT 16 #define SDHCI_SUPPORT_HS400 0x80000000 /* Non-standard */ +#define SDHCI_CAN_DO_ADMA3 0x08000000 +#define SDHCI_CAN_VDD2_180 0x10000000 #define SDHCI_CAPABILITIES_1 0x44 @@ -230,7 +243,7 @@ #define SDHCI_ADMA_ADDRESS 0x58 #define SDHCI_ADMA_ADDRESS_HI 0x5C -/* 60-FB reserved */ +/* 60-73 reserved */ #define SDHCI_PRESET_FOR_SDR12 0x66 #define SDHCI_PRESET_FOR_SDR25 0x68 @@ -245,6 +258,71 @@ #define SDHCI_PRESET_SDCLK_FREQ_MASK 0x3FF #define SDHCI_PRESET_SDCLK_FREQ_SHIFT 0 +#define SDHCI_PRESET_VALUE_UHSII 0x74 +#define SDHCI_ADMA3_ID_ADDRESS 0x78 + +#define SDHCI_UHSII_BLOCK_SIZE 0x80 +#define SDHCI_UHSII_BLOCK_COUNT 0x84 + +#define SDHCI_UHSII_CMD_PACKET 0x88 +#define SDHCI_UHSII_CMD_PACK_LEN 20 +#define SDHCI_UHSII_CMD_HEADER (SDHCI_UHSII_CMD_PACKET) +#define SDHCI_UHSII_CMD_ARGUMENT (SDHCI_UHSII_CMD_PACKET + 2) +#define SDHCI_UHSII_CMD_PAYLOAD (SDHCI_UHSII_CMD_PACKET + 4) + +#define SDHCI_UHSII_TRANSFER_MODE 0x9C +#define SDHCI_UHSII_TRNS_DMA 0x01 +#define SDHCI_UHSII_TRNS_BLK_CNT_EN 0x02 +#define SDHCI_UHSII_TRNS_WRITE 0x10 +#define SDHCI_UHSII_TRNS_BYTE_MODE 0x20 +#define SDHCI_UHSII_TRNS_WAIT_EBSY 0x4000 +#define SDHCI_UHSII_TRANS_2LANE_HD 0x8000 +#define SDHCI_UHSII_COMMAND 0x9E +#define SDHCI_UHSII_DATA_PRESENT 0x0020 +#define SDHCI_UHSII_NORMAL_COMMAND (0 << 6) +#define SDHCI_UHSII_TRANS_ABORT_CCMD (1 << 6) +#define SDHCI_UHSII_ABORT_COMMAND (2 << 6) +#define SDHCI_UHSII_GO_DORMANT (3 << 6) +#define SDHCI_UHSII_COMMAND_LEN_SHIFT 8 +#define SDHCI_UHSII_COMMAND_LEN_MASK 0x1F + +#define SDHCI_UHSII_RESPONSE 0xA0 +#define SDHCI_UHSII_RESP_LEN 20 +#define SDHCI_UHSII_RESP_HEADER SDHCI_UHSII_RESPONSE +#define SDHCI_UHSII_RESP_ARGUMENT (SDHCI_UHSII_RESPONSE + 2) +#define SDHCI_UHSII_RESP_PAYLOAD (SDHCI_UHSII_RESPONSE + 4) + +#define SDHCI_UHSII_MSG_SEL 0xB4 +#define SDHCI_UHSII_MSG_REG 0xB8 +#define SDHCI_UHSII_DEV_INT_STATUS 0xBC +#define SDHCI_UHSII_DEV_SEL 0xBE +#define SDHCI_UHSII_INT_CODE 0xBF +#define SDHCI_UHSII_SOFT_RESET 0xC0 +#define SDHCI_UHSII_HOST_FULL_RESET 0x0001 +#define SDHCI_UHSII_TIMER_CONTROL 0xC2 +#define SDHCI_UHSII_INT_STATUS 0xC4 +#define SDHCI_UHSII_INT_ENABLE 0xC8 +#define SDHCI_UHSII_SIGNAL_ENABLE 0xCC +#define SDHCI_UHSII_INT_HEADER 0x00000001 +#define SDHCI_UHSII_INT_RES 0x00000002 +#define SDHCI_UHSII_INT_EXPIRED 0x00000004 +#define SDHCI_UHSII_INT_CRC 0x00000008 +#define SDHCI_UHSII_INT_FRAMING 0x00000010 +#define SDHCI_UHSII_INT_TID 0x00000020 +#define SDHCI_UHSII_INT_UNRECOVERABLE 0x00000080 +#define SDHCI_UHSII_INT_EBSY 0x00000100 +#define SDHCI_UHSII_INT_ADMA 0x00008000 +#define SDHCI_UHSII_INT_TO_RES 0x00010000 +#define SDHCI_UHSII_INT_TO_DEADLOCK 0x00020000 +#define SDHCI_UHSII_INT_TIMEOUT \ + (SDHCI_UHSII_INT_TO_RES | SDHCI_UHSII_INT_TO_DEADLOCK) + +#define SDHCI_UHSII_SETTINGS_PTR 0xE0 +#define SDHCI_UHSII_HOST_CAPS_PTR 0xE2 +#define SDHCI_UHSII_TEST_REG_PTR 0xE4 +#define SDHCI_EMBEDDED_CONTROL_PTR 0xE6 +#define SDHCI_VENDOR_SPEC_AREA_PTR 0xE8 + #define SDHCI_SLOT_INT_STATUS 0xFC #define SDHCI_HOST_VERSION 0xFE @@ -255,6 +333,42 @@ #define SDHCI_SPEC_100 0 #define SDHCI_SPEC_200 1 #define SDHCI_SPEC_300 2 +#define SDHCI_SPEC_400 3 + +#define SDHCI_UHSII_GENERAL_REG 0x00 +#define SDHCI_UHSII_PHY_REG 0x04 +#define SDHCI_UHSII_LINK_REG_L 0x08 +#define SDHCI_UHSII_LINK_REG_H 0x0C + +/* UHS-II General Setting */ +#define SDHCI_UHSII_LOW_PWR_MODE 0x01 + +/* UHS-II General Capabilities */ +#define SDHCI_UHSII_LANES_SHIFT 8 +#define SDHCI_UHSII_LANES_MASK 0x3F00 +#define SDHCI_UHSII_LANES_2L_HD 0x01 +#define SDHCI_UHSII_LANES_2D1U_FD 0x02 +#define SDHCI_UHSII_LANES_1D2U_FD 0x04 +#define SDHCI_UHSII_LANES_2D2U_FD 0x08 +#define SDHCI_UHSII_GAP_SHIFT 4 +#define SDHCI_UHSII_GAP_MASK 0xF0 +#define SDHCI_UHSII_DAP_SHIFT 0 +#define SDHCI_UHSII_DAP_MASK 0x0F + +/* UHS-II PHY Capabilities */ +#define SDHCI_UHSII_LSS_DIR_SHIFT 20 +#define SDHCI_UHSII_LSS_DIR_MASK (0x0F >> SDHCI_UHSII_LSS_DIR_SHIFT) +#define SDHCI_UHSII_LSS_SYN_SHIFT 16 +#define SDHCI_UHSII_LSS_SYN_MASK (0x0F >> SDHCI_UHSII_LSS_SYN_SHIFT) +#define SDHCI_UHSII_RANGE_SHIFT 6 +#define SDHCI_UHSII_RANGE_MASK 0xC0 +#define SDHCI_UHSII_RANGE_A 0x00 +#define SDHCI_UHSII_RANGE_AB 0x01 + +/* UHS-II LINK/TRAN Capabilities */ +#define SDHCI_UHSII_DATA_GAP_MASK 0xFF +#define SDHCI_UHSII_N_FCU_SHIFT 8 +#define SDHCI_UHSII_N_FCU_MASK 0xFF00 /* * End of controller registers. @@ -441,6 +555,7 @@ struct sdhci_host { #define SDHCI_USING_RETUNING_TIMER (1<<11) /* Host is using a retuning timer for the card */ #define SDHCI_USE_64_BIT_DMA (1<<12) /* Use 64-bit DMA */ #define SDHCI_HS400_TUNING (1<<13) /* Tuning for HS400 */ +#define SDHCI_HOST_V4_ENABLED (1<<12) unsigned int version; /* SDHCI spec. version */ @@ -451,11 +566,25 @@ struct sdhci_host { unsigned int clock; /* Current clock (MHz) */ u8 pwr; /* Current voltage */ + bool uhsii_if_enabled; + u8 lane_mode; + u8 max_gap; + u8 max_dap; + u8 n_data_gap; + u8 n_fcu; + u8 n_lss_dir; + u8 n_lss_syn; + u8 speed_range; + + u16 uhsii_settings_ptr; + u16 uhsii_caps_ptr; + bool runtime_suspended; /* Host is runtime suspended */ bool bus_on; /* Bus power prevents runtime suspend */ bool preset_enabled; /* Preset is enabled */ struct mmc_request *mrq; /* Current request */ + struct mmc_tlp *tlp; /* Current native TLP */ struct mmc_command *cmd; /* Current command */ struct mmc_data *data; /* Current data request */ unsigned int data_early:1; /* Data finished before cmd */ @@ -627,6 +756,11 @@ static inline u8 sdhci_readb(struct sdhci_host *host, int reg) #endif /* CONFIG_MMC_SDHCI_IO_ACCESSORS */ +static inline u32 sdhci_raw_readl(struct sdhci_host *host, int reg) +{ + return __raw_readl(host->ioaddr + reg); +} + extern struct sdhci_host *sdhci_alloc_host(struct device *dev, size_t priv_size); extern void sdhci_free_host(struct sdhci_host *host); -- 1.9.1
next prev parent reply other threads:[~2015-04-29 1:36 UTC|newest] Thread overview: 26+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-04-29 1:23 [PATCH 00/12] mmc: core: add SD4.0 support micky_ching 2015-04-29 1:23 ` micky_ching 2015-04-29 1:23 ` [PATCH 01/12] mmc: core: add data structure define for SD4.0 micky_ching 2015-04-29 1:23 ` micky_ching 2015-04-29 1:23 ` [PATCH 02/12] mmc: core: modify mmc_app_cmd interface " micky_ching 2015-04-29 1:23 ` micky_ching 2015-04-29 1:23 ` [PATCH 03/12] mmc: core: add SD4.0 operation function micky_ching 2015-04-29 1:23 ` micky_ching 2015-04-29 1:23 ` [PATCH 04/12] mmc: core: add tlp request handler for SD4.0 micky_ching 2015-04-29 1:23 ` micky_ching 2015-04-29 1:23 ` [PATCH 05/12] mmc: core: disable full power cycle " micky_ching 2015-04-29 1:23 ` micky_ching 2015-04-29 1:23 ` [PATCH 06/12] mmc: core: init SD4.0 mode before legacy mode micky_ching 2015-04-29 1:23 ` micky_ching 2015-04-29 1:23 ` micky_ching [this message] 2015-04-29 1:23 ` [PATCH 07/12] mmc: sdhci: add data structure for SD4.0 micky_ching 2015-04-29 1:23 ` [PATCH 08/12] mmc: sdhci: add SD4.0 operations micky_ching 2015-04-29 1:23 ` micky_ching 2015-04-29 1:23 ` [PATCH 09/12] mmc: sdhci: add tlp handler for SD4.0 micky_ching 2015-04-29 1:23 ` micky_ching 2015-04-29 1:23 ` [PATCH 10/12] mmc: sdhci: disable clock control for SD4.0 mode micky_ching 2015-04-29 1:23 ` micky_ching 2015-04-29 1:23 ` [PATCH 11/12] mmc: sdhci: set DMA configure " micky_ching 2015-04-29 1:23 ` micky_ching 2015-04-29 1:23 ` [PATCH 12/12] mmc: sdhci: add SD4.0 support micky_ching 2015-04-29 1:23 ` micky_ching
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=d854a023e0b5c7836b1385114dbad6acc7874d07.1429845922.git.micky_ching@realsil.com.cn \ --to=micky_ching@realsil.com.cn \ --cc=chris@printf.net \ --cc=dan.carpenter@oracle.com \ --cc=devel@linuxdriverproject.org \ --cc=gregkh@linuxfoundation.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mmc@vger.kernel.org \ --cc=rogerable@realtek.com \ --cc=sameo@linux.intel.com \ --cc=ulf.hansson@linaro.org \ --cc=wei_wang@realsil.com.cn \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.