mmc: meson-gx: factor out setting block size
Subsystems (2)
PATCH 1/2 mmc: meson-gx: factor out setting block size
Factor out setting the block size. This also contributes to reducing complexity of function meson_mmc_start_cmd.
--- drivers/mmc/host/meson-gx-mmc.c | 42 ++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-)
drivers/mmc/host/meson-gx-mmc.c +27 -15
@@ -431,12 +431,36 @@ static void meson_mmc_request_done(struct mmc_host *mmc,mmc_request_done (host->mmc, mrq); } +static void meson_mmc_set_blksz (struct mmc_host *mmc,unsigned int blksz) +{ +struct meson_host *host =mmc_priv (mmc); +u32 cfg, blksz_old; + + cfg =readl (host->regs +SD_EMMC_CFG ); + blksz_old =FIELD_GET (CFG_BLK_LEN_MASK , cfg); + +if (!is_power_of_2 (blksz)) +dev_err (host->dev,"blksz %u is not a power of 2\n" , blksz); + + blksz =ilog2 (blksz); + +/* check if block-size matches, if not update */ +if (blksz == blksz_old) +return ; + +dev_dbg (host->dev,"%s: update blk_len %d -> %d\n" , __func__, + blksz_old, blksz); + + cfg &= ~CFG_BLK_LEN_MASK ; + cfg |=FIELD_PREP (CFG_BLK_LEN_MASK , blksz); +writel (cfg, host->regs +SD_EMMC_CFG ); +} +static void meson_mmc_start_cmd (struct mmc_host *mmc,struct mmc_command *cmd) {struct meson_host *host =mmc_priv (mmc);struct mmc_data *data = cmd->data; -u32 cfg, cmd_cfg =0 , cmd_data =0 ; -u8 blk_len; +u32 cmd_cfg =0 , cmd_data =0 ;unsigned int xfer_bytes =0 ;/* Setup descriptors */
@@ -470,19 +494,7 @@ static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd) cmd_cfg |=CMD_CFG_BLOCK_MODE ; cmd_cfg |=FIELD_PREP (CMD_CFG_LENGTH_MASK , data->blocks); - -/* check if block-size matches, if not update */ - cfg =readl (host->regs +SD_EMMC_CFG ); - blk_len =FIELD_GET (CFG_BLK_LEN_MASK , cfg); -if (blk_len !=ilog2 (data->blksz)) { -dev_dbg (host->dev,"%s: update blk_len %d -> %d\n" , - __func__, blk_len, -ilog2 (data->blksz)); - blk_len =ilog2 (data->blksz); - cfg &= ~CFG_BLK_LEN_MASK ; - cfg |=FIELD_PREP (CFG_BLK_LEN_MASK , blk_len); -writel (cfg, host->regs +SD_EMMC_CFG ); - } +meson_mmc_set_blksz (mmc, data->blksz); }else { cmd_cfg |=FIELD_PREP (CMD_CFG_LENGTH_MASK , data->blksz); }
Signature · 1 line
2.12.1
PATCH 2/2 mmc: meson-gx: factor out setting response configuration bits
Factor out setting the response configuration bits thus further reducing complexity of function meson_mmc_start_cmd.
--- drivers/mmc/host/meson-gx-mmc.c | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-)
drivers/mmc/host/meson-gx-mmc.c +18 -14
@@ -456,6 +456,23 @@ static void meson_mmc_set_blksz(struct mmc_host *mmc, unsigned int blksz)writel (cfg, host->regs +SD_EMMC_CFG ); } +static void meson_mmc_set_response_bits (struct mmc_command *cmd,u32 *cmd_cfg) +{ +if (cmd->flags &MMC_RSP_PRESENT ) { +if (cmd->flags &MMC_RSP_136 ) + *cmd_cfg |=CMD_CFG_RESP_128 ; + *cmd_cfg |=CMD_CFG_RESP_NUM ; + +if (!(cmd->flags &MMC_RSP_CRC )) + *cmd_cfg |=CMD_CFG_RESP_NOCRC ; + +if (cmd->flags &MMC_RSP_BUSY ) + *cmd_cfg |=CMD_CFG_R1B ; + }else { + *cmd_cfg |=CMD_CFG_NO_RESP ; + } +} +static void meson_mmc_start_cmd (struct mmc_host *mmc,struct mmc_command *cmd) {struct meson_host *host =mmc_priv (mmc);
@@ -469,20 +486,7 @@ static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd) cmd_cfg |=FIELD_PREP (CMD_CFG_CMD_INDEX_MASK , cmd->opcode); cmd_cfg |=CMD_CFG_OWNER ;/* owned by CPU */ -/* Response */ -if (cmd->flags &MMC_RSP_PRESENT ) { -if (cmd->flags &MMC_RSP_136 ) - cmd_cfg |=CMD_CFG_RESP_128 ; - cmd_cfg |=CMD_CFG_RESP_NUM ; - -if (!(cmd->flags &MMC_RSP_CRC )) - cmd_cfg |=CMD_CFG_RESP_NOCRC ; - -if (cmd->flags &MMC_RSP_BUSY ) - cmd_cfg |=CMD_CFG_R1B ; - }else { - cmd_cfg |=CMD_CFG_NO_RESP ; - } +meson_mmc_set_response_bits (cmd, &cmd_cfg);/* data? */ if (data) {
Signature · 1 line
2.12.1
Kevin Hilman
maintainerPATCH 2/2 mmc: meson-gx: factor out setting response configuration bits
Quoted 4 lines · Heiner Kallweit
Factor out setting the response configuration bits thus further reducing complexity of function
meson_mmc_start_cmd.Signed-off-by Heiner Kallweit <[email protected]>
Quoted 54 lines
--- drivers/mmc/host/meson-gx-mmc.c | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-)drivers/mmc/host/meson-gx-mmc.c +18
-14@@ -456,6 +456,23 @@ static void meson_mmc_set_blksz(struct mmc_host *mmc, unsigned int blksz)writel (cfg, host->regs +SD_EMMC_CFG ); } +static void meson_mmc_set_response_bits (struct mmc_command *cmd,u32 *cmd_cfg) +{ +if (cmd->flags &MMC_RSP_PRESENT ) { +if (cmd->flags &MMC_RSP_136 ) + *cmd_cfg |=CMD_CFG_RESP_128 ; + *cmd_cfg |=CMD_CFG_RESP_NUM ; + +if (!(cmd->flags &MMC_RSP_CRC )) + *cmd_cfg |=CMD_CFG_RESP_NOCRC ; + +if (cmd->flags &MMC_RSP_BUSY ) + *cmd_cfg |=CMD_CFG_R1B ; + }else { + *cmd_cfg |=CMD_CFG_NO_RESP ; + } +} +static void meson_mmc_start_cmd (struct mmc_host *mmc,struct mmc_command *cmd) {struct meson_host *host =mmc_priv (mmc);@@ -469,20 +486,7 @@ static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd) cmd_cfg |=FIELD_PREP (CMD_CFG_CMD_INDEX_MASK , cmd->opcode); cmd_cfg |=CMD_CFG_OWNER ;/* owned by CPU */ -/* Response */ -if (cmd->flags &MMC_RSP_PRESENT ) { -if (cmd->flags &MMC_RSP_136 ) - cmd_cfg |=CMD_CFG_RESP_128 ; - cmd_cfg |=CMD_CFG_RESP_NUM ; - -if (!(cmd->flags &MMC_RSP_CRC )) - cmd_cfg |=CMD_CFG_RESP_NOCRC ; - -if (cmd->flags &MMC_RSP_BUSY ) - cmd_cfg |=CMD_CFG_R1B ; - }else { - cmd_cfg |=CMD_CFG_NO_RESP ; - } +meson_mmc_set_response_bits (cmd, &cmd_cfg);/* data? */ if (data) {
Ulf Hansson
AppliedPATCH 2/2 mmc: meson-gx: factor out setting response configuration bits
In reply to Heiner KallweitQuoted 4 lines · Heiner Kallweit
Factor out setting the response configuration bits thus further reducing complexity of function
meson_mmc_start_cmd.Signed-off-by Heiner Kallweit <[email protected]>
Thanks, applied for next!
Kind regards
Uffe
Quoted 58 lines
--- drivers/mmc/host/meson-gx-mmc.c | 32 ++++++++++++++++++-------------- 1 file changed, 18 insertions(+), 14 deletions(-)drivers/mmc/host/meson-gx-mmc.c +18
-15@@ -456,6 +456,23 @@ static void meson_mmc_set_blksz(struct mmc_host *mmc, unsigned int blksz)writel (cfg, host->regs +SD_EMMC_CFG ); } +static void meson_mmc_set_response_bits (struct mmc_command *cmd,u32 *cmd_cfg) +{ +if (cmd->flags &MMC_RSP_PRESENT ) { +if (cmd->flags &MMC_RSP_136 ) + *cmd_cfg |=CMD_CFG_RESP_128 ; + *cmd_cfg |=CMD_CFG_RESP_NUM ; + +if (!(cmd->flags &MMC_RSP_CRC )) + *cmd_cfg |=CMD_CFG_RESP_NOCRC ; + +if (cmd->flags &MMC_RSP_BUSY ) + *cmd_cfg |=CMD_CFG_R1B ; + }else { + *cmd_cfg |=CMD_CFG_NO_RESP ; + } +} +static void meson_mmc_start_cmd (struct mmc_host *mmc,struct mmc_command *cmd) {struct meson_host *host =mmc_priv (mmc);@@ -469,20 +486,7 @@ static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd) cmd_cfg |=FIELD_PREP (CMD_CFG_CMD_INDEX_MASK , cmd->opcode); cmd_cfg |=CMD_CFG_OWNER ;/* owned by CPU */ -/* Response */ -if (cmd->flags &MMC_RSP_PRESENT ) { -if (cmd->flags &MMC_RSP_136 ) - cmd_cfg |=CMD_CFG_RESP_128 ; - cmd_cfg |=CMD_CFG_RESP_NUM ; - -if (!(cmd->flags &MMC_RSP_CRC )) - cmd_cfg |=CMD_CFG_RESP_NOCRC ; - -if (cmd->flags &MMC_RSP_BUSY ) - cmd_cfg |=CMD_CFG_R1B ; - }else { - cmd_cfg |=CMD_CFG_NO_RESP ; - } +meson_mmc_set_response_bits (cmd, &cmd_cfg);/* data? */ if (data) { --2.12.1
Kevin Hilman
maintainerPATCH 1/2 mmc: meson-gx: factor out setting block size
In reply to Heiner KallweitQuoted 4 lines · Heiner Kallweit
Factor out setting the block size. This also contributes to reducing complexity of function
meson_mmc_start_cmd.Signed-off-by Heiner Kallweit <[email protected]>
Quoted 68 lines
--- drivers/mmc/host/meson-gx-mmc.c | 42 ++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-)drivers/mmc/host/meson-gx-mmc.c +27
-15@@ -431,12 +431,36 @@ static void meson_mmc_request_done(struct mmc_host *mmc,mmc_request_done (host->mmc, mrq); } +static void meson_mmc_set_blksz (struct mmc_host *mmc,unsigned int blksz) +{ +struct meson_host *host =mmc_priv (mmc); +u32 cfg, blksz_old; + + cfg =readl (host->regs +SD_EMMC_CFG ); + blksz_old =FIELD_GET (CFG_BLK_LEN_MASK , cfg); + +if (!is_power_of_2 (blksz)) +dev_err (host->dev,"blksz %u is not a power of 2\n" , blksz); + + blksz =ilog2 (blksz); + +/* check if block-size matches, if not update */ +if (blksz == blksz_old) +return ; + +dev_dbg (host->dev,"%s: update blk_len %d -> %d\n" , __func__, + blksz_old, blksz); + + cfg &= ~CFG_BLK_LEN_MASK ; + cfg |=FIELD_PREP (CFG_BLK_LEN_MASK , blksz); +writel (cfg, host->regs +SD_EMMC_CFG ); +} +static void meson_mmc_start_cmd (struct mmc_host *mmc,struct mmc_command *cmd) {struct meson_host *host =mmc_priv (mmc);struct mmc_data *data = cmd->data; -u32 cfg, cmd_cfg =0 , cmd_data =0 ; -u8 blk_len; +u32 cmd_cfg =0 , cmd_data =0 ;unsigned int xfer_bytes =0 ;/* Setup descriptors */ @@ -470,19 +494,7 @@ static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd) cmd_cfg |=CMD_CFG_BLOCK_MODE ; cmd_cfg |=FIELD_PREP (CMD_CFG_LENGTH_MASK , data->blocks); - -/* check if block-size matches, if not update */ - cfg =readl (host->regs +SD_EMMC_CFG ); - blk_len =FIELD_GET (CFG_BLK_LEN_MASK , cfg); -if (blk_len !=ilog2 (data->blksz)) { -dev_dbg (host->dev,"%s: update blk_len %d -> %d\n" , - __func__, blk_len, -ilog2 (data->blksz)); - blk_len =ilog2 (data->blksz); - cfg &= ~CFG_BLK_LEN_MASK ; - cfg |=FIELD_PREP (CFG_BLK_LEN_MASK , blk_len); -writel (cfg, host->regs +SD_EMMC_CFG ); - } +meson_mmc_set_blksz (mmc, data->blksz); }else { cmd_cfg |=FIELD_PREP (CMD_CFG_LENGTH_MASK , data->blksz); }
Ulf Hansson
AppliedPATCH 1/2 mmc: meson-gx: factor out setting block size
In reply to Heiner KallweitQuoted 4 lines · Heiner Kallweit
Factor out setting the block size. This also contributes to reducing complexity of function
meson_mmc_start_cmd.Signed-off-by Heiner Kallweit <[email protected]>
Thanks, applied for next!
Kind regards
Uffe
Quoted 71 lines
--- drivers/mmc/host/meson-gx-mmc.c | 42 ++++++++++++++++++++++++++--------------- 1 file changed, 27 insertions(+), 15 deletions(-)drivers/mmc/host/meson-gx-mmc.c +27
-16@@ -431,12 +431,36 @@ static void meson_mmc_request_done(struct mmc_host *mmc,mmc_request_done (host->mmc, mrq); } +static void meson_mmc_set_blksz (struct mmc_host *mmc,unsigned int blksz) +{ +struct meson_host *host =mmc_priv (mmc); +u32 cfg, blksz_old; + + cfg =readl (host->regs +SD_EMMC_CFG ); + blksz_old =FIELD_GET (CFG_BLK_LEN_MASK , cfg); + +if (!is_power_of_2 (blksz)) +dev_err (host->dev,"blksz %u is not a power of 2\n" , blksz); + + blksz =ilog2 (blksz); + +/* check if block-size matches, if not update */ +if (blksz == blksz_old) +return ; + +dev_dbg (host->dev,"%s: update blk_len %d -> %d\n" , __func__, + blksz_old, blksz); + + cfg &= ~CFG_BLK_LEN_MASK ; + cfg |=FIELD_PREP (CFG_BLK_LEN_MASK , blksz); +writel (cfg, host->regs +SD_EMMC_CFG ); +} +static void meson_mmc_start_cmd (struct mmc_host *mmc,struct mmc_command *cmd) {struct meson_host *host =mmc_priv (mmc);struct mmc_data *data = cmd->data; -u32 cfg, cmd_cfg =0 , cmd_data =0 ; -u8 blk_len; +u32 cmd_cfg =0 , cmd_data =0 ;unsigned int xfer_bytes =0 ;/* Setup descriptors */ @@ -470,19 +494,7 @@ static void meson_mmc_start_cmd(struct mmc_host *mmc, struct mmc_command *cmd) cmd_cfg |=CMD_CFG_BLOCK_MODE ; cmd_cfg |=FIELD_PREP (CMD_CFG_LENGTH_MASK , data->blocks); - -/* check if block-size matches, if not update */ - cfg =readl (host->regs +SD_EMMC_CFG ); - blk_len =FIELD_GET (CFG_BLK_LEN_MASK , cfg); -if (blk_len !=ilog2 (data->blksz)) { -dev_dbg (host->dev,"%s: update blk_len %d -> %d\n" , - __func__, blk_len, -ilog2 (data->blksz)); - blk_len =ilog2 (data->blksz); - cfg &= ~CFG_BLK_LEN_MASK ; - cfg |=FIELD_PREP (CFG_BLK_LEN_MASK , blk_len); -writel (cfg, host->regs +SD_EMMC_CFG ); - } +meson_mmc_set_blksz (mmc, data->blksz); }else { cmd_cfg |=FIELD_PREP (CMD_CFG_LENGTH_MASK , data->blksz); } --2.12.1