mirror of
git://nv-tegra.nvidia.com/linux-nv-oot.git
synced 2025-12-22 17:25:35 +03:00
vblk: Fix mapping of SECURE_ERASE to ERASE
In 6.1+ kernel, blk_queue_max_secure_erase_sectors() has to be used to tell block layer that vblk supports SECURE_ERASE operation. Bug 5011844 Bug 4311184 Change-Id: Id61edee27f4ae0db9a92a4e2d331bb3f209fdd85 Signed-off-by: Sanjith T D <std@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/c/linux-nv-oot/+/3300237 GVS: buildbot_gerritrpt <buildbot_gerritrpt@nvidia.com> Reviewed-by: Sreenivas Velpula <svelpula@nvidia.com> Reviewed-by: Vipin Kumar <vipink@nvidia.com>
This commit is contained in:
@@ -73,6 +73,22 @@ static inline uint64_t _arch_counter_get_cntvct(void)
|
|||||||
return cval;
|
return cval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void print_erase_op_supported(struct device *dev, uint32_t ops)
|
||||||
|
{
|
||||||
|
const char *op;
|
||||||
|
if (ops & VS_BLK_DISCARD_OP_F) {
|
||||||
|
op = "DISCARD";
|
||||||
|
} else if (ops & VS_BLK_SECURE_ERASE_OP_F) {
|
||||||
|
op = "SECURE_ERASE";
|
||||||
|
} else if (ops & VS_BLK_ERASE_OP_F) {
|
||||||
|
op = "ERASE";
|
||||||
|
} else {
|
||||||
|
op = "Unknown";
|
||||||
|
}
|
||||||
|
dev_info(dev, "UFS supports erase operation type - %s. So, DISCARD and SECURE ERASE are mapped to %s",
|
||||||
|
op, op);
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* vblk_get_req: Get a handle to free vsc request.
|
* vblk_get_req: Get a handle to free vsc request.
|
||||||
*/
|
*/
|
||||||
@@ -1390,6 +1406,9 @@ static void setup_device(struct vblk_dev *vblkdev)
|
|||||||
* FIXME: Support for Linux v5.19+ kernels
|
* FIXME: Support for Linux v5.19+ kernels
|
||||||
*/
|
*/
|
||||||
blk_queue_flag_set(QUEUE_FLAG_SECERASE, vblkdev->queue);
|
blk_queue_flag_set(QUEUE_FLAG_SECERASE, vblkdev->queue);
|
||||||
|
#else
|
||||||
|
blk_queue_max_secure_erase_sectors(vblkdev->queue,
|
||||||
|
vblkdev->config.blk_config.max_erase_blks_per_io);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if ((vblkdev->config.blk_config.req_ops_supported & VS_BLK_DISCARD_OP_F)
|
if ((vblkdev->config.blk_config.req_ops_supported & VS_BLK_DISCARD_OP_F)
|
||||||
@@ -1406,6 +1425,8 @@ static void setup_device(struct vblk_dev *vblkdev)
|
|||||||
vblkdev->config.blk_config.max_erase_blks_per_io);
|
vblkdev->config.blk_config.max_erase_blks_per_io);
|
||||||
vblkdev->queue->limits.discard_granularity =
|
vblkdev->queue->limits.discard_granularity =
|
||||||
vblkdev->config.blk_config.hardblk_size;
|
vblkdev->config.blk_config.hardblk_size;
|
||||||
|
print_erase_op_supported(vblkdev->device,
|
||||||
|
vblkdev->config.blk_config.req_ops_supported);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* And the gendisk structure. */
|
/* And the gendisk structure. */
|
||||||
@@ -1460,6 +1481,7 @@ static void setup_device(struct vblk_dev *vblkdev)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
dev_info(vblkdev->device, "device name is %s\n", vblkdev->gd->disk_name);
|
||||||
set_capacity(vblkdev->gd, (vblkdev->size / SECTOR_SIZE));
|
set_capacity(vblkdev->gd, (vblkdev->size / SECTOR_SIZE));
|
||||||
#if defined(NV_DEVICE_ADD_DISK_HAS_INT_RETURN_TYPE) /* Linux v5.15 */
|
#if defined(NV_DEVICE_ADD_DISK_HAS_INT_RETURN_TYPE) /* Linux v5.15 */
|
||||||
if (device_add_disk(vblkdev->device, vblkdev->gd, NULL)) {
|
if (device_add_disk(vblkdev->device, vblkdev->gd, NULL)) {
|
||||||
|
|||||||
Reference in New Issue
Block a user