Message ID | 1407816090-7671-1-git-send-email-yunpeng.gao@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 12 August 2014 06:01, Yunpeng Gao <yunpeng.gao@intel.com> wrote: > From: Chuanxiao Dong <chuanxiao.dong@intel.com> > > During kernel boot, it will try to read some logical sectors > of each block device node for the possible partition table. > > But since RPMB partition is special and can not be accessed > by normal eMMC read / write CMDs, it will cause below error > messages during kernel boot: The following patch were included in 3.8, does this solve your issue? 53d8f97 mmc: card: Do not scan RPMB partitions Kind regards Uffe > ... > <3>[ 4.890052] mmc0: Got data interrupt 0x00000002 even though no data operation was in progress. > <3>[ 4.892160] mmcblk0rpmb: error -110 transferring data, sector 0, nr 32, cmd response 0x900, card status 0xb00 > <4>[ 4.892165] mmcblk0rpmb: retrying using single block read > <3>[ 4.895727] mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900 > <3>[ 4.899269] mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900 > <3>[ 4.901466] mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900 > <3>[ 4.905106] mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900 > <3>[ 4.907166] mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900 > <3>[ 4.909235] mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900 > <3>[ 4.909241] end_request: I/O error, dev mmcblk0rpmb, sector 0 > <3>[ 4.909247] Buffer I/O error on device mmcblk0rpmb, logical block 0 > <3>[ 4.909263] end_request: I/O error, dev mmcblk0rpmb, sector 8 > <3>[ 4.909267] Buffer I/O error on device mmcblk0rpmb, logical block 1 > <3>[ 4.909272] end_request: I/O error, dev mmcblk0rpmb, sector 16 > <3>[ 4.909275] Buffer I/O error on device mmcblk0rpmb, logical block 2 > <3>[ 4.909280] end_request: I/O error, dev mmcblk0rpmb, sector 24 > <3>[ 4.909283] Buffer I/O error on device mmcblk0rpmb, logical block 3 > ... > > This patch will discard the access request in eMMC queue if > it is RPMB partition access request. By this way, it avoids > trigger above error messages. > > Signed-off-by: Yunpeng Gao <yunpeng.gao@intel.com> > Signed-off-by: Chuanxiao Dong <chuanxiao.dong@intel.com> > --- > drivers/mmc/card/block.c | 13 +++++++++++++ > drivers/mmc/card/queue.c | 2 +- > drivers/mmc/card/queue.h | 2 ++ > 3 files changed, 16 insertions(+), 1 deletion(-) > > diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c > index 452782b..4b79592 100644 > --- a/drivers/mmc/card/block.c > +++ b/drivers/mmc/card/block.c > @@ -1025,6 +1025,19 @@ static inline void mmc_blk_reset_success(struct mmc_blk_data *md, int type) > md->reset_done &= ~type; > } > > +int mmc_access_rpmb(struct mmc_queue *mq) > +{ > + struct mmc_blk_data *md = mq->data; > + /* > + * If this is a RPMB partition access, return ture > + */ > + if (md && md->part_type == EXT_CSD_PART_CONFIG_ACC_RPMB) > + return true; > + > + return false; > +} > +EXPORT_SYMBOL_GPL(mmc_access_rpmb); > + > static int mmc_blk_issue_discard_rq(struct mmc_queue *mq, struct request *req) > { > struct mmc_blk_data *md = mq->data; > diff --git a/drivers/mmc/card/queue.c b/drivers/mmc/card/queue.c > index 3e049c1..6ceede0 100644 > --- a/drivers/mmc/card/queue.c > +++ b/drivers/mmc/card/queue.c > @@ -38,7 +38,7 @@ static int mmc_prep_request(struct request_queue *q, struct request *req) > return BLKPREP_KILL; > } > > - if (mq && mmc_card_removed(mq->card)) > + if (mq && (mmc_card_removed(mq->card) || mmc_access_rpmb(mq))) > return BLKPREP_KILL; > > req->cmd_flags |= REQ_DONTPREP; > diff --git a/drivers/mmc/card/queue.h b/drivers/mmc/card/queue.h > index 5752d50..99e6521 100644 > --- a/drivers/mmc/card/queue.h > +++ b/drivers/mmc/card/queue.h > @@ -73,4 +73,6 @@ extern void mmc_queue_bounce_post(struct mmc_queue_req *); > extern int mmc_packed_init(struct mmc_queue *, struct mmc_card *); > extern void mmc_packed_clean(struct mmc_queue *); > > +extern int mmc_access_rpmb(struct mmc_queue *); > + > #endif > -- > 1.7.9.5 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-mmc" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Thanks for the reminder. I confirmed patch 53d8f97462b0bbb51150f4d6bc2fd45336a008b9 - ' mmc: card: Do not scan RPMB partitions' has already been in the kernel mmc driver I’m using. But seems it does not fix this issue. Actually, after adding debug output for 'md->disk->flags' when error happened, below error message captured: ... <3>[ 5.068249] mmcblk0rpmb: error -110 transferring data, sector 0, nr 32, cmd response 0x900, card status 0xb00 <4>[ 5.068255] mmcblk0rpmb: retrying using single block read. md->disk->flags: 0x210 ... md->disk->flags value is '0x210', which means ' GENHD_FL_NO_PART_SCAN' (bit 9) has already been set. So, I'm not sure why it does not work. I observed this issue on my Merrifield VV board. Did anyone else observed the similar issue on other platform? Thanks. Regards, Yunpeng -----Original Message----- From: linux-mmc-owner@vger.kernel.org [mailto:linux-mmc-owner@vger.kernel.org] On Behalf Of Ulf Hansson Sent: Tuesday, August 12, 2014 4:37 PM To: Gao, Yunpeng Cc: linux-mmc; Dong, Chuanxiao Subject: Re: [PATCH] mmc: card: not access RPMB partition for normal read and write On 12 August 2014 06:01, Yunpeng Gao <yunpeng.gao@intel.com> wrote: > From: Chuanxiao Dong <chuanxiao.dong@intel.com> > > During kernel boot, it will try to read some logical sectors of each > block device node for the possible partition table. > > But since RPMB partition is special and can not be accessed by normal > eMMC read / write CMDs, it will cause below error messages during > kernel boot: The following patch were included in 3.8, does this solve your issue? 53d8f97 mmc: card: Do not scan RPMB partitions Kind regards Uffe > ... > <3>[ 4.890052] mmc0: Got data interrupt 0x00000002 even though no data operation was in progress. > <3>[ 4.892160] mmcblk0rpmb: error -110 transferring data, sector 0, nr 32, cmd response 0x900, card status 0xb00 > <4>[ 4.892165] mmcblk0rpmb: retrying using single block read > <3>[ 4.895727] mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900 > <3>[ 4.899269] mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900 > <3>[ 4.901466] mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900 > <3>[ 4.905106] mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900 > <3>[ 4.907166] mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900 > <3>[ 4.909235] mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900 > <3>[ 4.909241] end_request: I/O error, dev mmcblk0rpmb, sector 0 > <3>[ 4.909247] Buffer I/O error on device mmcblk0rpmb, logical block 0 > <3>[ 4.909263] end_request: I/O error, dev mmcblk0rpmb, sector 8 > <3>[ 4.909267] Buffer I/O error on device mmcblk0rpmb, logical block 1 > <3>[ 4.909272] end_request: I/O error, dev mmcblk0rpmb, sector 16 > <3>[ 4.909275] Buffer I/O error on device mmcblk0rpmb, logical block 2 > <3>[ 4.909280] end_request: I/O error, dev mmcblk0rpmb, sector 24 > <3>[ 4.909283] Buffer I/O error on device mmcblk0rpmb, logical block 3 > ... > > This patch will discard the access request in eMMC queue if it is RPMB > partition access request. By this way, it avoids trigger above error > messages. > > Signed-off-by: Yunpeng Gao <yunpeng.gao@intel.com> > Signed-off-by: Chuanxiao Dong <chuanxiao.dong@intel.com> > --- > drivers/mmc/card/block.c | 13 +++++++++++++ > drivers/mmc/card/queue.c | 2 +- > drivers/mmc/card/queue.h | 2 ++ > 3 files changed, 16 insertions(+), 1 deletion(-) > > diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c index > 452782b..4b79592 100644 > --- a/drivers/mmc/card/block.c > +++ b/drivers/mmc/card/block.c > @@ -1025,6 +1025,19 @@ static inline void mmc_blk_reset_success(struct mmc_blk_data *md, int type) > md->reset_done &= ~type; > } > > +int mmc_access_rpmb(struct mmc_queue *mq) { > + struct mmc_blk_data *md = mq->data; > + /* > + * If this is a RPMB partition access, return ture > + */ > + if (md && md->part_type == EXT_CSD_PART_CONFIG_ACC_RPMB) > + return true; > + > + return false; > +} > +EXPORT_SYMBOL_GPL(mmc_access_rpmb); > + > static int mmc_blk_issue_discard_rq(struct mmc_queue *mq, struct > request *req) { > struct mmc_blk_data *md = mq->data; diff --git > a/drivers/mmc/card/queue.c b/drivers/mmc/card/queue.c index > 3e049c1..6ceede0 100644 > --- a/drivers/mmc/card/queue.c > +++ b/drivers/mmc/card/queue.c > @@ -38,7 +38,7 @@ static int mmc_prep_request(struct request_queue *q, struct request *req) > return BLKPREP_KILL; > } > > - if (mq && mmc_card_removed(mq->card)) > + if (mq && (mmc_card_removed(mq->card) || mmc_access_rpmb(mq))) > return BLKPREP_KILL; > > req->cmd_flags |= REQ_DONTPREP; diff --git > a/drivers/mmc/card/queue.h b/drivers/mmc/card/queue.h index > 5752d50..99e6521 100644 > --- a/drivers/mmc/card/queue.h > +++ b/drivers/mmc/card/queue.h > @@ -73,4 +73,6 @@ extern void mmc_queue_bounce_post(struct > mmc_queue_req *); extern int mmc_packed_init(struct mmc_queue *, > struct mmc_card *); extern void mmc_packed_clean(struct mmc_queue *); > > +extern int mmc_access_rpmb(struct mmc_queue *); > + > #endif > -- > 1.7.9.5 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-mmc" > in the body of a message to majordomo@vger.kernel.org More majordomo > info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hello, what is the status of this patch to cope with MMC RPMB? http://permalink.gmane.org/gmane.linux.kernel.mmc/28281 I had to use this workaround having run into timeouts: https://dev-nell.com/rpmb-emmc-errors-under-linux.html Here's some arch/arm work by Ulf: https://patches.linaro.org/17128/ TIA :)
On 12 August 2014 at 06:01, Yunpeng Gao <yunpeng.gao@intel.com> wrote: > From: Chuanxiao Dong <chuanxiao.dong@intel.com> > > During kernel boot, it will try to read some logical sectors > of each block device node for the possible partition table. > > But since RPMB partition is special and can not be accessed > by normal eMMC read / write CMDs, it will cause below error > messages during kernel boot: > ... > <3>[ 4.890052] mmc0: Got data interrupt 0x00000002 even though no data operation was in progress. > <3>[ 4.892160] mmcblk0rpmb: error -110 transferring data, sector 0, nr 32, cmd response 0x900, card status 0xb00 > <4>[ 4.892165] mmcblk0rpmb: retrying using single block read > <3>[ 4.895727] mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900 > <3>[ 4.899269] mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900 > <3>[ 4.901466] mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900 > <3>[ 4.905106] mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900 > <3>[ 4.907166] mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900 > <3>[ 4.909235] mmcblk0rpmb: timed out sending r/w cmd command, card status 0x400900 > <3>[ 4.909241] end_request: I/O error, dev mmcblk0rpmb, sector 0 > <3>[ 4.909247] Buffer I/O error on device mmcblk0rpmb, logical block 0 > <3>[ 4.909263] end_request: I/O error, dev mmcblk0rpmb, sector 8 > <3>[ 4.909267] Buffer I/O error on device mmcblk0rpmb, logical block 1 > <3>[ 4.909272] end_request: I/O error, dev mmcblk0rpmb, sector 16 > <3>[ 4.909275] Buffer I/O error on device mmcblk0rpmb, logical block 2 > <3>[ 4.909280] end_request: I/O error, dev mmcblk0rpmb, sector 24 > <3>[ 4.909283] Buffer I/O error on device mmcblk0rpmb, logical block 3 > ... > > This patch will discard the access request in eMMC queue if > it is RPMB partition access request. By this way, it avoids > trigger above error messages. > > Signed-off-by: Yunpeng Gao <yunpeng.gao@intel.com> > Signed-off-by: Chuanxiao Dong <chuanxiao.dong@intel.com> This patch has been completely forgotten, sorry about that. It fixes a old issue for RPMB partitions. With a minor change to the commit message (adding a Fixes tag) and also removing "EXPORT_SYMBOL_GPL(mmc_access_rpmb);" since it not needed, this patch applied smoothly to my fixes branch. Sorry for the delay and thanks! Kind regards Uffe > --- > drivers/mmc/card/block.c | 13 +++++++++++++ > drivers/mmc/card/queue.c | 2 +- > drivers/mmc/card/queue.h | 2 ++ > 3 files changed, 16 insertions(+), 1 deletion(-) > > diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c > index 452782b..4b79592 100644 > --- a/drivers/mmc/card/block.c > +++ b/drivers/mmc/card/block.c > @@ -1025,6 +1025,19 @@ static inline void mmc_blk_reset_success(struct mmc_blk_data *md, int type) > md->reset_done &= ~type; > } > > +int mmc_access_rpmb(struct mmc_queue *mq) > +{ > + struct mmc_blk_data *md = mq->data; > + /* > + * If this is a RPMB partition access, return ture > + */ > + if (md && md->part_type == EXT_CSD_PART_CONFIG_ACC_RPMB) > + return true; > + > + return false; > +} > +EXPORT_SYMBOL_GPL(mmc_access_rpmb); > + > static int mmc_blk_issue_discard_rq(struct mmc_queue *mq, struct request *req) > { > struct mmc_blk_data *md = mq->data; > diff --git a/drivers/mmc/card/queue.c b/drivers/mmc/card/queue.c > index 3e049c1..6ceede0 100644 > --- a/drivers/mmc/card/queue.c > +++ b/drivers/mmc/card/queue.c > @@ -38,7 +38,7 @@ static int mmc_prep_request(struct request_queue *q, struct request *req) > return BLKPREP_KILL; > } > > - if (mq && mmc_card_removed(mq->card)) > + if (mq && (mmc_card_removed(mq->card) || mmc_access_rpmb(mq))) > return BLKPREP_KILL; > > req->cmd_flags |= REQ_DONTPREP; > diff --git a/drivers/mmc/card/queue.h b/drivers/mmc/card/queue.h > index 5752d50..99e6521 100644 > --- a/drivers/mmc/card/queue.h > +++ b/drivers/mmc/card/queue.h > @@ -73,4 +73,6 @@ extern void mmc_queue_bounce_post(struct mmc_queue_req *); > extern int mmc_packed_init(struct mmc_queue *, struct mmc_card *); > extern void mmc_packed_clean(struct mmc_queue *); > > +extern int mmc_access_rpmb(struct mmc_queue *); > + > #endif > -- > 1.7.9.5 > > -- > To unsubscribe from this list: send the line "unsubscribe linux-mmc" in > the body of a message to majordomo@vger.kernel.org > More majordomo info at http://vger.kernel.org/majordomo-info.html -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On 05/06/2015 03:06 PM, Ulf Hansson wrote: > On 12 August 2014 at 06:01, Yunpeng Gao <yunpeng.gao@intel.com> wrote: >> From: Chuanxiao Dong <chuanxiao.dong@intel.com> > Sorry for the delay and thanks! ah thanks. Is it likely you go via my patches for mmc-utils in the new few days? > Kind regards > Uffe Sebastian -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
- Decreased cc-list On 6 May 2015 at 15:09, Sebastian Andrzej Siewior <bigeasy@linutronix.de> wrote: > On 05/06/2015 03:06 PM, Ulf Hansson wrote: >> On 12 August 2014 at 06:01, Yunpeng Gao <yunpeng.gao@intel.com> wrote: >>> From: Chuanxiao Dong <chuanxiao.dong@intel.com> >> Sorry for the delay and thanks! > > ah thanks. Is it likely you go via my patches for mmc-utils in the new > few days? Nope, that's handled by Chris Ball. Kind regards Uffe -- To unsubscribe from this list: send the line "unsubscribe linux-mmc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/drivers/mmc/card/block.c b/drivers/mmc/card/block.c index 452782b..4b79592 100644 --- a/drivers/mmc/card/block.c +++ b/drivers/mmc/card/block.c @@ -1025,6 +1025,19 @@ static inline void mmc_blk_reset_success(struct mmc_blk_data *md, int type) md->reset_done &= ~type; } +int mmc_access_rpmb(struct mmc_queue *mq) +{ + struct mmc_blk_data *md = mq->data; + /* + * If this is a RPMB partition access, return ture + */ + if (md && md->part_type == EXT_CSD_PART_CONFIG_ACC_RPMB) + return true; + + return false; +} +EXPORT_SYMBOL_GPL(mmc_access_rpmb); + static int mmc_blk_issue_discard_rq(struct mmc_queue *mq, struct request *req) { struct mmc_blk_data *md = mq->data; diff --git a/drivers/mmc/card/queue.c b/drivers/mmc/card/queue.c index 3e049c1..6ceede0 100644 --- a/drivers/mmc/card/queue.c +++ b/drivers/mmc/card/queue.c @@ -38,7 +38,7 @@ static int mmc_prep_request(struct request_queue *q, struct request *req) return BLKPREP_KILL; } - if (mq && mmc_card_removed(mq->card)) + if (mq && (mmc_card_removed(mq->card) || mmc_access_rpmb(mq))) return BLKPREP_KILL; req->cmd_flags |= REQ_DONTPREP; diff --git a/drivers/mmc/card/queue.h b/drivers/mmc/card/queue.h index 5752d50..99e6521 100644 --- a/drivers/mmc/card/queue.h +++ b/drivers/mmc/card/queue.h @@ -73,4 +73,6 @@ extern void mmc_queue_bounce_post(struct mmc_queue_req *); extern int mmc_packed_init(struct mmc_queue *, struct mmc_card *); extern void mmc_packed_clean(struct mmc_queue *); +extern int mmc_access_rpmb(struct mmc_queue *); + #endif