* 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
* Re: MMC_SWITCH command doesn't update the ext_csd data structure
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
0 siblings, 1 reply; 3+ messages in thread
From: Chris Ball @ 2013-09-03 11:26 UTC (permalink / raw)
To: Dirk Behme; +Cc: linux-mmc@vger.kernel.org
Hi,
On Tue, Sep 03 2013, Dirk Behme wrote:
> + 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);
> + }
> +
Your analysis looks good, please go ahead and submit a full patch.
Thanks!
- Chris.
--
Chris Ball <cjb@laptop.org> <http://printf.net/>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: MMC_SWITCH command doesn't update the ext_csd data structure
2013-09-03 11:26 ` Chris Ball
@ 2013-09-03 11:34 ` Dirk Behme
0 siblings, 0 replies; 3+ messages in thread
From: Dirk Behme @ 2013-09-03 11:34 UTC (permalink / raw)
To: Chris Ball; +Cc: linux-mmc@vger.kernel.org
On 03.09.2013 13:26, Chris Ball wrote:
> Hi,
>
> On Tue, Sep 03 2013, Dirk Behme wrote:
>> + 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);
>> + }
>> +
>
> Your analysis looks good, please go ahead and submit a full patch.
The issue here is that something like mmc_update_ext_csd() doesn't
exist, yet?
So we have to implement a mmc_update_ext_csd() in core/mmc.c and call it
from mmc_blk_ioctl_cmd() in card/block.c?
Or any better proposal?
Thanks
Dirk
^ 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.