aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/lightnvm/core.c67
-rw-r--r--drivers/nvme/host/lightnvm.c14
-rw-r--r--include/linux/lightnvm.h6
3 files changed, 0 insertions, 87 deletions
diff --git a/drivers/lightnvm/core.c b/drivers/lightnvm/core.c
index 390d5efd6287..52059dd0ed18 100644
--- a/drivers/lightnvm/core.c
+++ b/drivers/lightnvm/core.c
@@ -751,53 +751,6 @@ int nvm_get_tgt_bb_tbl(struct nvm_tgt_dev *tgt_dev, struct ppa_addr ppa,
751} 751}
752EXPORT_SYMBOL(nvm_get_tgt_bb_tbl); 752EXPORT_SYMBOL(nvm_get_tgt_bb_tbl);
753 753
754static int nvm_init_slc_tbl(struct nvm_dev *dev, struct nvm_id_group *grp)
755{
756 struct nvm_geo *geo = &dev->geo;
757 int i;
758
759 dev->lps_per_blk = geo->pgs_per_blk;
760 dev->lptbl = kcalloc(dev->lps_per_blk, sizeof(int), GFP_KERNEL);
761 if (!dev->lptbl)
762 return -ENOMEM;
763
764 /* Just a linear array */
765 for (i = 0; i < dev->lps_per_blk; i++)
766 dev->lptbl[i] = i;
767
768 return 0;
769}
770
771static int nvm_init_mlc_tbl(struct nvm_dev *dev, struct nvm_id_group *grp)
772{
773 int i, p;
774 struct nvm_id_lp_mlc *mlc = &grp->lptbl.mlc;
775
776 if (!mlc->num_pairs)
777 return 0;
778
779 dev->lps_per_blk = mlc->num_pairs;
780 dev->lptbl = kcalloc(dev->lps_per_blk, sizeof(int), GFP_KERNEL);
781 if (!dev->lptbl)
782 return -ENOMEM;
783
784 /* The lower page table encoding consists of a list of bytes, where each
785 * has a lower and an upper half. The first half byte maintains the
786 * increment value and every value after is an offset added to the
787 * previous incrementation value
788 */
789 dev->lptbl[0] = mlc->pairs[0] & 0xF;
790 for (i = 1; i < dev->lps_per_blk; i++) {
791 p = mlc->pairs[i >> 1];
792 if (i & 0x1) /* upper */
793 dev->lptbl[i] = dev->lptbl[i - 1] + ((p & 0xF0) >> 4);
794 else /* lower */
795 dev->lptbl[i] = dev->lptbl[i - 1] + (p & 0xF);
796 }
797
798 return 0;
799}
800
801static int nvm_core_init(struct nvm_dev *dev) 754static int nvm_core_init(struct nvm_dev *dev)
802{ 755{
803 struct nvm_id *id = &dev->identity; 756 struct nvm_id *id = &dev->identity;
@@ -846,25 +799,6 @@ static int nvm_core_init(struct nvm_dev *dev)
846 if (!dev->lun_map) 799 if (!dev->lun_map)
847 return -ENOMEM; 800 return -ENOMEM;
848 801
849 switch (grp->fmtype) {
850 case NVM_ID_FMTYPE_SLC:
851 if (nvm_init_slc_tbl(dev, grp)) {
852 ret = -ENOMEM;
853 goto err_fmtype;
854 }
855 break;
856 case NVM_ID_FMTYPE_MLC:
857 if (nvm_init_mlc_tbl(dev, grp)) {
858 ret = -ENOMEM;
859 goto err_fmtype;
860 }
861 break;
862 default:
863 pr_err("nvm: flash type not supported\n");
864 ret = -EINVAL;
865 goto err_fmtype;
866 }
867
868 INIT_LIST_HEAD(&dev->area_list); 802 INIT_LIST_HEAD(&dev->area_list);
869 INIT_LIST_HEAD(&dev->targets); 803 INIT_LIST_HEAD(&dev->targets);
870 mutex_init(&dev->mlock); 804 mutex_init(&dev->mlock);
@@ -890,7 +824,6 @@ static void nvm_free(struct nvm_dev *dev)
890 dev->ops->destroy_dma_pool(dev->dma_pool); 824 dev->ops->destroy_dma_pool(dev->dma_pool);
891 825
892 nvm_unregister_map(dev); 826 nvm_unregister_map(dev);
893 kfree(dev->lptbl);
894 kfree(dev->lun_map); 827 kfree(dev->lun_map);
895 kfree(dev); 828 kfree(dev);
896} 829}
diff --git a/drivers/nvme/host/lightnvm.c b/drivers/nvme/host/lightnvm.c
index 26f7eccc1684..15bf243f6096 100644
--- a/drivers/nvme/host/lightnvm.c
+++ b/drivers/nvme/host/lightnvm.c
@@ -246,20 +246,6 @@ static int init_grps(struct nvm_id *nvm_id, struct nvme_nvm_id *nvme_nvm_id)
246 246
247 dst->cpar = le16_to_cpu(src->cpar); 247 dst->cpar = le16_to_cpu(src->cpar);
248 248
249 if (dst->fmtype == NVM_ID_FMTYPE_MLC) {
250 memcpy(dst->lptbl.id, src->lptbl.id, 8);
251 dst->lptbl.mlc.num_pairs =
252 le16_to_cpu(src->lptbl.mlc.num_pairs);
253
254 if (dst->lptbl.mlc.num_pairs > NVME_NVM_LP_MLC_PAIRS) {
255 pr_err("nvm: number of MLC pairs not supported\n");
256 return -EINVAL;
257 }
258
259 memcpy(dst->lptbl.mlc.pairs, src->lptbl.mlc.pairs,
260 dst->lptbl.mlc.num_pairs);
261 }
262
263 return 0; 249 return 0;
264} 250}
265 251
diff --git a/include/linux/lightnvm.h b/include/linux/lightnvm.h
index 07cdb05a9a87..a5d8e0cbbb46 100644
--- a/include/linux/lightnvm.h
+++ b/include/linux/lightnvm.h
@@ -174,8 +174,6 @@ struct nvm_id_group {
174 u32 mpos; 174 u32 mpos;
175 u32 mccap; 175 u32 mccap;
176 u16 cpar; 176 u16 cpar;
177
178 struct nvm_id_lp_tbl lptbl;
179}; 177};
180 178
181struct nvm_addr_format { 179struct nvm_addr_format {
@@ -313,10 +311,6 @@ struct nvm_dev {
313 /* Device information */ 311 /* Device information */
314 struct nvm_geo geo; 312 struct nvm_geo geo;
315 313
316 /* lower page table */
317 int lps_per_blk;
318 int *lptbl;
319
320 unsigned long total_secs; 314 unsigned long total_secs;
321 315
322 unsigned long *lun_map; 316 unsigned long *lun_map;