[PATCH v5 4/8] rockchip: block: blk-uclass: add bounce buffer flag to blk_desc

Kever Yang kever.yang at rock-chips.com
Mon Oct 23 10:22:31 CEST 2023


On 2023/10/18 22:01, Johan Jonker wrote:
> Currently bounce buffer support is enabled for all block devices
> when available. Add a flag to blk_desc to enable only on demand.
>
> Signed-off-by: Johan Jonker <jbx6244 at gmail.com>
Reviewed-by: Kever Yang <kever.yang at rock-chips.com>

Thanks,
- Kever
> ---
>
> Changed V5:
>    New patch
> ---
>   drivers/block/blk-uclass.c | 4 ++--
>   drivers/scsi/scsi.c        | 4 ++++
>   include/blk.h              | 1 +
>   3 files changed, 7 insertions(+), 2 deletions(-)
>
> diff --git a/drivers/block/blk-uclass.c b/drivers/block/blk-uclass.c
> index 30ad5bbb0024..77066da352a3 100644
> --- a/drivers/block/blk-uclass.c
> +++ b/drivers/block/blk-uclass.c
> @@ -441,7 +441,7 @@ long blk_read(struct udevice *dev, lbaint_t start, lbaint_t blkcnt, void *buf)
>   			  start, blkcnt, desc->blksz, buf))
>   		return blkcnt;
>
> -	if (IS_ENABLED(CONFIG_BOUNCE_BUFFER)) {
> +	if (IS_ENABLED(CONFIG_BOUNCE_BUFFER) && desc->bb) {
>   		struct blk_bounce_buffer bbstate = { .dev = dev };
>   		int ret;
>
> @@ -478,7 +478,7 @@ long blk_write(struct udevice *dev, lbaint_t start, lbaint_t blkcnt,
>
>   	blkcache_invalidate(desc->uclass_id, desc->devnum);
>
> -	if (IS_ENABLED(CONFIG_BOUNCE_BUFFER)) {
> +	if (IS_ENABLED(CONFIG_BOUNCE_BUFFER) && desc->bb) {
>   		struct blk_bounce_buffer bbstate = { .dev = dev };
>   		int ret;
>
> diff --git a/drivers/scsi/scsi.c b/drivers/scsi/scsi.c
> index 7411660d465e..779a34bd2f1c 100644
> --- a/drivers/scsi/scsi.c
> +++ b/drivers/scsi/scsi.c
> @@ -459,6 +459,9 @@ static void scsi_init_dev_desc_priv(struct blk_desc *dev_desc)
>   	dev_desc->product[0] = 0;
>   	dev_desc->revision[0] = 0;
>   	dev_desc->removable = false;
> +#if IS_ENABLED(CONFIG_BOUNCE_BUFFER)
> +	dev_desc->bb = true;
> +#endif	/* CONFIG_BOUNCE_BUFFER */
>   }
>
>   #if !defined(CONFIG_DM_SCSI)
> @@ -606,6 +609,7 @@ static int do_scsi_scan_one(struct udevice *dev, int id, int lun, bool verbose)
>   	bdesc->lun = lun;
>   	bdesc->removable = bd.removable;
>   	bdesc->type = bd.type;
> +	bdesc->bb = bd.bb;
>   	memcpy(&bdesc->vendor, &bd.vendor, sizeof(bd.vendor));
>   	memcpy(&bdesc->product, &bd.product, sizeof(bd.product));
>   	memcpy(&bdesc->revision, &bd.revision,	sizeof(bd.revision));
> diff --git a/include/blk.h b/include/blk.h
> index 76bd5baf9959..7c7cf7f2b102 100644
> --- a/include/blk.h
> +++ b/include/blk.h
> @@ -68,6 +68,7 @@ struct blk_desc {
>   	/* device can use 48bit addr (ATA/ATAPI v7) */
>   	bool	lba48;
>   	unsigned char	atapi;		/* Use ATAPI protocol */
> +	unsigned char	bb;		/* Use bounce buffer */
>   	lbaint_t	lba;		/* number of blocks */
>   	unsigned long	blksz;		/* block size */
>   	int		log2blksz;	/* for convenience: log2(blksz) */
> --
> 2.39.2
>


More information about the U-Boot mailing list