Commit c931d495 authored by Ludovic Barre's avatar Ludovic Barre Committed by Ulf Hansson

mmc: mmci: add datactrl block size variant property

This patch allows to define a datactrl block size
by variant, requested by STM32 sdmmc variant.
Signed-off-by: default avatarLudovic Barre <ludovic.barre@st.com>
Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent cd3ee8c5
...@@ -57,6 +57,7 @@ static struct variant_data variant_arm = { ...@@ -57,6 +57,7 @@ static struct variant_data variant_arm = {
.fifosize = 16 * 4, .fifosize = 16 * 4,
.fifohalfsize = 8 * 4, .fifohalfsize = 8 * 4,
.datalength_bits = 16, .datalength_bits = 16,
.datactrl_blocksz = 11,
.pwrreg_powerup = MCI_PWR_UP, .pwrreg_powerup = MCI_PWR_UP,
.f_max = 100000000, .f_max = 100000000,
.reversed_irq_handling = true, .reversed_irq_handling = true,
...@@ -70,6 +71,7 @@ static struct variant_data variant_arm_extended_fifo = { ...@@ -70,6 +71,7 @@ static struct variant_data variant_arm_extended_fifo = {
.fifosize = 128 * 4, .fifosize = 128 * 4,
.fifohalfsize = 64 * 4, .fifohalfsize = 64 * 4,
.datalength_bits = 16, .datalength_bits = 16,
.datactrl_blocksz = 11,
.pwrreg_powerup = MCI_PWR_UP, .pwrreg_powerup = MCI_PWR_UP,
.f_max = 100000000, .f_max = 100000000,
.mmcimask1 = true, .mmcimask1 = true,
...@@ -83,6 +85,7 @@ static struct variant_data variant_arm_extended_fifo_hwfc = { ...@@ -83,6 +85,7 @@ static struct variant_data variant_arm_extended_fifo_hwfc = {
.fifohalfsize = 64 * 4, .fifohalfsize = 64 * 4,
.clkreg_enable = MCI_ARM_HWFCEN, .clkreg_enable = MCI_ARM_HWFCEN,
.datalength_bits = 16, .datalength_bits = 16,
.datactrl_blocksz = 11,
.pwrreg_powerup = MCI_PWR_UP, .pwrreg_powerup = MCI_PWR_UP,
.f_max = 100000000, .f_max = 100000000,
.mmcimask1 = true, .mmcimask1 = true,
...@@ -97,6 +100,7 @@ static struct variant_data variant_u300 = { ...@@ -97,6 +100,7 @@ static struct variant_data variant_u300 = {
.clkreg_enable = MCI_ST_U300_HWFCEN, .clkreg_enable = MCI_ST_U300_HWFCEN,
.clkreg_8bit_bus_enable = MCI_ST_8BIT_BUS, .clkreg_8bit_bus_enable = MCI_ST_8BIT_BUS,
.datalength_bits = 16, .datalength_bits = 16,
.datactrl_blocksz = 11,
.datactrl_mask_sdio = MCI_DPSM_ST_SDIOEN, .datactrl_mask_sdio = MCI_DPSM_ST_SDIOEN,
.st_sdio = true, .st_sdio = true,
.pwrreg_powerup = MCI_PWR_ON, .pwrreg_powerup = MCI_PWR_ON,
...@@ -116,6 +120,7 @@ static struct variant_data variant_nomadik = { ...@@ -116,6 +120,7 @@ static struct variant_data variant_nomadik = {
.clkreg = MCI_CLK_ENABLE, .clkreg = MCI_CLK_ENABLE,
.clkreg_8bit_bus_enable = MCI_ST_8BIT_BUS, .clkreg_8bit_bus_enable = MCI_ST_8BIT_BUS,
.datalength_bits = 24, .datalength_bits = 24,
.datactrl_blocksz = 11,
.datactrl_mask_sdio = MCI_DPSM_ST_SDIOEN, .datactrl_mask_sdio = MCI_DPSM_ST_SDIOEN,
.st_sdio = true, .st_sdio = true,
.st_clkdiv = true, .st_clkdiv = true,
...@@ -138,6 +143,7 @@ static struct variant_data variant_ux500 = { ...@@ -138,6 +143,7 @@ static struct variant_data variant_ux500 = {
.clkreg_8bit_bus_enable = MCI_ST_8BIT_BUS, .clkreg_8bit_bus_enable = MCI_ST_8BIT_BUS,
.clkreg_neg_edge_enable = MCI_ST_UX500_NEG_EDGE, .clkreg_neg_edge_enable = MCI_ST_UX500_NEG_EDGE,
.datalength_bits = 24, .datalength_bits = 24,
.datactrl_blocksz = 11,
.datactrl_mask_sdio = MCI_DPSM_ST_SDIOEN, .datactrl_mask_sdio = MCI_DPSM_ST_SDIOEN,
.st_sdio = true, .st_sdio = true,
.st_clkdiv = true, .st_clkdiv = true,
...@@ -165,6 +171,7 @@ static struct variant_data variant_ux500v2 = { ...@@ -165,6 +171,7 @@ static struct variant_data variant_ux500v2 = {
.clkreg_neg_edge_enable = MCI_ST_UX500_NEG_EDGE, .clkreg_neg_edge_enable = MCI_ST_UX500_NEG_EDGE,
.datactrl_mask_ddrmode = MCI_DPSM_ST_DDRMODE, .datactrl_mask_ddrmode = MCI_DPSM_ST_DDRMODE,
.datalength_bits = 24, .datalength_bits = 24,
.datactrl_blocksz = 11,
.datactrl_mask_sdio = MCI_DPSM_ST_SDIOEN, .datactrl_mask_sdio = MCI_DPSM_ST_SDIOEN,
.st_sdio = true, .st_sdio = true,
.st_clkdiv = true, .st_clkdiv = true,
...@@ -192,6 +199,7 @@ static struct variant_data variant_stm32 = { ...@@ -192,6 +199,7 @@ static struct variant_data variant_stm32 = {
.clkreg_8bit_bus_enable = MCI_ST_8BIT_BUS, .clkreg_8bit_bus_enable = MCI_ST_8BIT_BUS,
.clkreg_neg_edge_enable = MCI_ST_UX500_NEG_EDGE, .clkreg_neg_edge_enable = MCI_ST_UX500_NEG_EDGE,
.datalength_bits = 24, .datalength_bits = 24,
.datactrl_blocksz = 11,
.datactrl_mask_sdio = MCI_DPSM_ST_SDIOEN, .datactrl_mask_sdio = MCI_DPSM_ST_SDIOEN,
.st_sdio = true, .st_sdio = true,
.st_clkdiv = true, .st_clkdiv = true,
...@@ -213,6 +221,7 @@ static struct variant_data variant_qcom = { ...@@ -213,6 +221,7 @@ static struct variant_data variant_qcom = {
.data_cmd_enable = MCI_CPSM_QCOM_DATCMD, .data_cmd_enable = MCI_CPSM_QCOM_DATCMD,
.blksz_datactrl4 = true, .blksz_datactrl4 = true,
.datalength_bits = 24, .datalength_bits = 24,
.datactrl_blocksz = 11,
.pwrreg_powerup = MCI_PWR_UP, .pwrreg_powerup = MCI_PWR_UP,
.f_max = 208000000, .f_max = 208000000,
.explicit_mclk_control = true, .explicit_mclk_control = true,
...@@ -1861,13 +1870,13 @@ static int mmci_probe(struct amba_device *dev, ...@@ -1861,13 +1870,13 @@ static int mmci_probe(struct amba_device *dev,
/* /*
* Block size can be up to 2048 bytes, but must be a power of two. * Block size can be up to 2048 bytes, but must be a power of two.
*/ */
mmc->max_blk_size = 1 << 11; mmc->max_blk_size = 1 << variant->datactrl_blocksz;
/* /*
* Limit the number of blocks transferred so that we don't overflow * Limit the number of blocks transferred so that we don't overflow
* the maximum request size. * the maximum request size.
*/ */
mmc->max_blk_count = mmc->max_req_size >> 11; mmc->max_blk_count = mmc->max_req_size >> variant->datactrl_blocksz;
spin_lock_init(&host->lock); spin_lock_init(&host->lock);
......
...@@ -217,6 +217,7 @@ struct mmci_host; ...@@ -217,6 +217,7 @@ struct mmci_host;
* @blksz_datactrl4: true if Block size is at b4..b16 position in datactrl * @blksz_datactrl4: true if Block size is at b4..b16 position in datactrl
* register * register
* @datactrl_mask_sdio: SDIO enable mask in datactrl register * @datactrl_mask_sdio: SDIO enable mask in datactrl register
* @datactrl_blksz: block size in power of two
* @pwrreg_powerup: power up value for MMCIPOWER register * @pwrreg_powerup: power up value for MMCIPOWER register
* @f_max: maximum clk frequency supported by the controller. * @f_max: maximum clk frequency supported by the controller.
* @signal_direction: input/out direction of bus signals can be indicated * @signal_direction: input/out direction of bus signals can be indicated
...@@ -248,6 +249,7 @@ struct variant_data { ...@@ -248,6 +249,7 @@ struct variant_data {
unsigned int data_cmd_enable; unsigned int data_cmd_enable;
unsigned int datactrl_mask_ddrmode; unsigned int datactrl_mask_ddrmode;
unsigned int datactrl_mask_sdio; unsigned int datactrl_mask_sdio;
unsigned int datactrl_blocksz;
u8 st_sdio:1; u8 st_sdio:1;
u8 st_clkdiv:1; u8 st_clkdiv:1;
u8 blksz_datactrl16:1; u8 blksz_datactrl16:1;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment