All of lore.kernel.org
 help / color / mirror / Atom feed
* MMC_SWITCH command doesn't update the ext_csd data structure
@ 2013-09-03 11:04 Dirk Behme
  2013-09-03 11:26 ` Chris Ball
  0 siblings, 1 reply; 3+ messages in thread
From: Dirk Behme @ 2013-09-03 11:04 UTC (permalink / raw)
  To: Chris Ball, linux-mmc@vger.kernel.org

Hi,

using the MMC_SWITCH command via the ioctl to write registers of the 
EXT_CSD, it looks to us that in this case the internal ext_csd data 
structure isn't updated. Resulting in a mismatch of what the ext_csd 
data structure contains and what's written to the real hardware.

We are using the mmc utils [1] to e.g. enable the bootpart

mmc bootpart enable 1 0 /dev/mmcblk1

This correctly writes to the EXT_CSD structure of the device, but 
doesn't update

card->ext_csd.part_config

Issuing additional MMC_SWITCH commands afterwards use the then (wrong) 
card->ext_csd.part_config. Resulting in a undo of the mmc bootpart enable.

What we think might be necessary here is anything like

--- a/drivers/mmc/card/block.c
+++ b/drivers/mmc/card/block.c
@@ -542,11 +544,17 @@ static int mmc_blk_ioctl_cmd(struct block_device 
*bdev,
                                         __func__, status, err);
         }

+       if ((cmd.opcode == MMC_SWITCH) && ((cmd.arg >> 24) & 0x3)) {
+               /* In case the IOCTL has modified the EXT_CSD, update 
it, i.e. re-read the EXT_CSD */
+		mmc_update_ext_csd(card->ext_csd);
+       }
+
  cmd_rel_host:
         mmc_release_host(card->host);

?

Opinions?

Best regards

Dirk

[1] https://git.kernel.org/cgit/linux/kernel/git/cjb/mmc-utils.git/


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2013-09-03 11:34 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-09-03 11:04 MMC_SWITCH command doesn't update the ext_csd data structure Dirk Behme
2013-09-03 11:26 ` Chris Ball
2013-09-03 11:34   ` Dirk Behme

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.