MMC_SWITCH command doesn't update the ext_csd data structure

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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/

--
To unsubscribe from this list: send the line "unsubscribe linux-mmc" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux USB Devel]     [Linux Media]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux