nvme: Fix number of blocks detection
authorJon Nettleton <jon@solid-run.com>
Thu, 3 Aug 2017 09:31:01 +0000 (02:31 -0700)
committerTom Rini <trini@konsulko.com>
Sun, 13 Aug 2017 19:17:32 +0000 (15:17 -0400)
NVMe should use the nsze value from the queried device. This will
reflect the total number of blocks of the device and fix detecting
my Samsung 960 EVO 256GB.

Original:
Capacity: 40386.6 MB = 39.4 GB (82711872 x 512)

Fixed:
Capacity: 238475.1 MB = 232.8 GB (488397168 x 512)

Signed-off-by: Jon Nettleton <jon@solid-run.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
Tested-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Tom Rini <trini@konsulko.com>
drivers/nvme/nvme.c

index feea02aa85d75b31f72e169fa7c3dec154938887..bac253a3f7c660e707021e193b95710c82b2f4a4 100644 (file)
@@ -620,7 +620,7 @@ static int nvme_blk_probe(struct udevice *udev)
        flbas = id->flbas & NVME_NS_FLBAS_LBA_MASK;
        ns->flbas = flbas;
        ns->lba_shift = id->lbaf[flbas].ds;
-       ns->mode_select_num_blocks = le64_to_cpu(id->nuse);
+       ns->mode_select_num_blocks = le64_to_cpu(id->nsze);
        ns->mode_select_block_len = 1 << ns->lba_shift;
        list_add(&ns->list, &ndev->namespaces);