On tis, sep 26, 2023 at 16:43, Bin Meng <bm...@tinylab.org> wrote: > At present if a device to map has a block size other than 512, > the blkmap map process just fails. There is no reason why we > can't just use the block size of the mapped device.
Won't this be very confusing to the user? The blkmap device uses a fixed block size of 512: https://source.denx.de/u-boot/u-boot/-/blob/master/drivers/block/blkmap.c?ref_type=heads#L393 So if I map a slice of a 4k device into a blkmap, then blkmap read 0x80000000 0 1 would copy 4k instead of 512 bytes from the lower device to 0x80000000, even though the blkmap reports a block size of 512. It seems to me that the expected behavior would be that only the first 512 bytes would be copied in the command above. > > Signed-off-by: Bin Meng <bm...@tinylab.org> > --- > > drivers/block/blkmap.c | 10 +++++----- > 1 file changed, 5 insertions(+), 5 deletions(-) > > diff --git a/drivers/block/blkmap.c b/drivers/block/blkmap.c > index f6acfa8927..149a4cac3e 100644 > --- a/drivers/block/blkmap.c > +++ b/drivers/block/blkmap.c > @@ -171,11 +171,11 @@ int blkmap_map_linear(struct udevice *dev, lbaint_t > blknr, lbaint_t blkcnt, > > bd = dev_get_uclass_plat(bm->blk); > lbd = dev_get_uclass_plat(lblk); > - if (lbd->blksz != bd->blksz) > - /* We could support block size translation, but we > - * don't yet. > - */ Hence this comment ^ > - return -EINVAL; > + if (lbd->blksz != bd->blksz) { > + /* update to match the mapped device */ > + bd->blksz = lbd->blksz; > + bd->log2blksz = LOG2(bd->blksz); > + } > > linear = malloc(sizeof(*linear)); > if (!linear) > -- > 2.25.1