mmc: mmci: add datactrl block size variant property
[platform/kernel/linux-rpi.git] / drivers / mmc / host / mmci.c
index 1b99ae3..0e8b65d 100644 (file)
@@ -57,6 +57,7 @@ static struct variant_data variant_arm = {
        .fifosize               = 16 * 4,
        .fifohalfsize           = 8 * 4,
        .datalength_bits        = 16,
+       .datactrl_blocksz       = 11,
        .pwrreg_powerup         = MCI_PWR_UP,
        .f_max                  = 100000000,
        .reversed_irq_handling  = true,
@@ -70,6 +71,7 @@ static struct variant_data variant_arm_extended_fifo = {
        .fifosize               = 128 * 4,
        .fifohalfsize           = 64 * 4,
        .datalength_bits        = 16,
+       .datactrl_blocksz       = 11,
        .pwrreg_powerup         = MCI_PWR_UP,
        .f_max                  = 100000000,
        .mmcimask1              = true,
@@ -83,6 +85,7 @@ static struct variant_data variant_arm_extended_fifo_hwfc = {
        .fifohalfsize           = 64 * 4,
        .clkreg_enable          = MCI_ARM_HWFCEN,
        .datalength_bits        = 16,
+       .datactrl_blocksz       = 11,
        .pwrreg_powerup         = MCI_PWR_UP,
        .f_max                  = 100000000,
        .mmcimask1              = true,
@@ -97,6 +100,7 @@ static struct variant_data variant_u300 = {
        .clkreg_enable          = MCI_ST_U300_HWFCEN,
        .clkreg_8bit_bus_enable = MCI_ST_8BIT_BUS,
        .datalength_bits        = 16,
+       .datactrl_blocksz       = 11,
        .datactrl_mask_sdio     = MCI_DPSM_ST_SDIOEN,
        .st_sdio                        = true,
        .pwrreg_powerup         = MCI_PWR_ON,
@@ -116,6 +120,7 @@ static struct variant_data variant_nomadik = {
        .clkreg                 = MCI_CLK_ENABLE,
        .clkreg_8bit_bus_enable = MCI_ST_8BIT_BUS,
        .datalength_bits        = 24,
+       .datactrl_blocksz       = 11,
        .datactrl_mask_sdio     = MCI_DPSM_ST_SDIOEN,
        .st_sdio                = true,
        .st_clkdiv              = true,
@@ -138,6 +143,7 @@ static struct variant_data variant_ux500 = {
        .clkreg_8bit_bus_enable = MCI_ST_8BIT_BUS,
        .clkreg_neg_edge_enable = MCI_ST_UX500_NEG_EDGE,
        .datalength_bits        = 24,
+       .datactrl_blocksz       = 11,
        .datactrl_mask_sdio     = MCI_DPSM_ST_SDIOEN,
        .st_sdio                = true,
        .st_clkdiv              = true,
@@ -165,6 +171,7 @@ static struct variant_data variant_ux500v2 = {
        .clkreg_neg_edge_enable = MCI_ST_UX500_NEG_EDGE,
        .datactrl_mask_ddrmode  = MCI_DPSM_ST_DDRMODE,
        .datalength_bits        = 24,
+       .datactrl_blocksz       = 11,
        .datactrl_mask_sdio     = MCI_DPSM_ST_SDIOEN,
        .st_sdio                = true,
        .st_clkdiv              = true,
@@ -192,6 +199,7 @@ static struct variant_data variant_stm32 = {
        .clkreg_8bit_bus_enable = MCI_ST_8BIT_BUS,
        .clkreg_neg_edge_enable = MCI_ST_UX500_NEG_EDGE,
        .datalength_bits        = 24,
+       .datactrl_blocksz       = 11,
        .datactrl_mask_sdio     = MCI_DPSM_ST_SDIOEN,
        .st_sdio                = true,
        .st_clkdiv              = true,
@@ -213,6 +221,7 @@ static struct variant_data variant_qcom = {
        .data_cmd_enable        = MCI_CPSM_QCOM_DATCMD,
        .blksz_datactrl4        = true,
        .datalength_bits        = 24,
+       .datactrl_blocksz       = 11,
        .pwrreg_powerup         = MCI_PWR_UP,
        .f_max                  = 208000000,
        .explicit_mclk_control  = true,
@@ -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.
         */
-       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
         * 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);