Commit dc6500bf authored by Srinivas Kandagatla's avatar Srinivas Kandagatla Committed by Ulf Hansson

mmc: mmci: add f_max to variant structure

Some of the controller have maximum supported frequency, This patch adds
support in variant data structure to specify such restrictions. This
gives more flexibility in calculating the f_max before passing it to
mmc-core.
Signed-off-by: default avatarSrinivas Kandagatla <srinivas.kandagatla@linaro.org>
Reviewed-by: default avatarLinus Walleij <linus.walleij@linaro.org>
Signed-off-by: default avatarUlf Hansson <ulf.hansson@linaro.org>
parent ae7b0061
...@@ -67,6 +67,7 @@ static unsigned int fmax = 515633; ...@@ -67,6 +67,7 @@ static unsigned int fmax = 515633;
* @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
* @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.
* @signal_direction: input/out direction of bus signals can be indicated * @signal_direction: input/out direction of bus signals can be indicated
* @pwrreg_clkgate: MMCIPOWER register must be used to gate the clock * @pwrreg_clkgate: MMCIPOWER register must be used to gate the clock
* @busy_detect: true if busy detection on dat0 is supported * @busy_detect: true if busy detection on dat0 is supported
...@@ -87,6 +88,7 @@ struct variant_data { ...@@ -87,6 +88,7 @@ struct variant_data {
bool blksz_datactrl16; bool blksz_datactrl16;
bool blksz_datactrl4; bool blksz_datactrl4;
u32 pwrreg_powerup; u32 pwrreg_powerup;
u32 f_max;
bool signal_direction; bool signal_direction;
bool pwrreg_clkgate; bool pwrreg_clkgate;
bool busy_detect; bool busy_detect;
...@@ -98,6 +100,7 @@ static struct variant_data variant_arm = { ...@@ -98,6 +100,7 @@ static struct variant_data variant_arm = {
.fifohalfsize = 8 * 4, .fifohalfsize = 8 * 4,
.datalength_bits = 16, .datalength_bits = 16,
.pwrreg_powerup = MCI_PWR_UP, .pwrreg_powerup = MCI_PWR_UP,
.f_max = 100000000,
}; };
static struct variant_data variant_arm_extended_fifo = { static struct variant_data variant_arm_extended_fifo = {
...@@ -105,6 +108,7 @@ static struct variant_data variant_arm_extended_fifo = { ...@@ -105,6 +108,7 @@ static struct variant_data variant_arm_extended_fifo = {
.fifohalfsize = 64 * 4, .fifohalfsize = 64 * 4,
.datalength_bits = 16, .datalength_bits = 16,
.pwrreg_powerup = MCI_PWR_UP, .pwrreg_powerup = MCI_PWR_UP,
.f_max = 100000000,
}; };
static struct variant_data variant_arm_extended_fifo_hwfc = { static struct variant_data variant_arm_extended_fifo_hwfc = {
...@@ -113,6 +117,7 @@ static struct variant_data variant_arm_extended_fifo_hwfc = { ...@@ -113,6 +117,7 @@ static struct variant_data variant_arm_extended_fifo_hwfc = {
.clkreg_enable = MCI_ARM_HWFCEN, .clkreg_enable = MCI_ARM_HWFCEN,
.datalength_bits = 16, .datalength_bits = 16,
.pwrreg_powerup = MCI_PWR_UP, .pwrreg_powerup = MCI_PWR_UP,
.f_max = 100000000,
}; };
static struct variant_data variant_u300 = { static struct variant_data variant_u300 = {
...@@ -123,6 +128,7 @@ static struct variant_data variant_u300 = { ...@@ -123,6 +128,7 @@ static struct variant_data variant_u300 = {
.datalength_bits = 16, .datalength_bits = 16,
.sdio = true, .sdio = true,
.pwrreg_powerup = MCI_PWR_ON, .pwrreg_powerup = MCI_PWR_ON,
.f_max = 100000000,
.signal_direction = true, .signal_direction = true,
.pwrreg_clkgate = true, .pwrreg_clkgate = true,
.pwrreg_nopower = true, .pwrreg_nopower = true,
...@@ -136,6 +142,7 @@ static struct variant_data variant_nomadik = { ...@@ -136,6 +142,7 @@ static struct variant_data variant_nomadik = {
.sdio = true, .sdio = true,
.st_clkdiv = true, .st_clkdiv = true,
.pwrreg_powerup = MCI_PWR_ON, .pwrreg_powerup = MCI_PWR_ON,
.f_max = 100000000,
.signal_direction = true, .signal_direction = true,
.pwrreg_clkgate = true, .pwrreg_clkgate = true,
.pwrreg_nopower = true, .pwrreg_nopower = true,
...@@ -152,6 +159,7 @@ static struct variant_data variant_ux500 = { ...@@ -152,6 +159,7 @@ static struct variant_data variant_ux500 = {
.sdio = true, .sdio = true,
.st_clkdiv = true, .st_clkdiv = true,
.pwrreg_powerup = MCI_PWR_ON, .pwrreg_powerup = MCI_PWR_ON,
.f_max = 100000000,
.signal_direction = true, .signal_direction = true,
.pwrreg_clkgate = true, .pwrreg_clkgate = true,
.busy_detect = true, .busy_detect = true,
...@@ -171,6 +179,7 @@ static struct variant_data variant_ux500v2 = { ...@@ -171,6 +179,7 @@ static struct variant_data variant_ux500v2 = {
.st_clkdiv = true, .st_clkdiv = true,
.blksz_datactrl16 = true, .blksz_datactrl16 = true,
.pwrreg_powerup = MCI_PWR_ON, .pwrreg_powerup = MCI_PWR_ON,
.f_max = 100000000,
.signal_direction = true, .signal_direction = true,
.pwrreg_clkgate = true, .pwrreg_clkgate = true,
.busy_detect = true, .busy_detect = true,
...@@ -1473,8 +1482,8 @@ static int mmci_probe(struct amba_device *dev, ...@@ -1473,8 +1482,8 @@ static int mmci_probe(struct amba_device *dev,
* so we try to adjust the clock down to this, * so we try to adjust the clock down to this,
* (if possible). * (if possible).
*/ */
if (host->mclk > 100000000) { if (host->mclk > variant->f_max) {
ret = clk_set_rate(host->clk, 100000000); ret = clk_set_rate(host->clk, variant->f_max);
if (ret < 0) if (ret < 0)
goto clk_disable; goto clk_disable;
host->mclk = clk_get_rate(host->clk); host->mclk = clk_get_rate(host->clk);
......
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