[PATCH V2 2/4] lightnvm: flatten nvm_id_group into nvm_id

2018-02-09 Thread Matias Bjørling
There are no groups in the 2.0 specification, make sure that the
nvm_id structure is flattened before 2.0 data structures are added.

Signed-off-by: Matias Bjørling 
---
 drivers/lightnvm/core.c  |  25 ++-
 drivers/nvme/host/lightnvm.c | 100 +--
 include/linux/lightnvm.h |  53 +++
 3 files changed, 86 insertions(+), 92 deletions(-)

diff --git a/drivers/lightnvm/core.c b/drivers/lightnvm/core.c
index dcc9e621e651..c72863b36439 100644
--- a/drivers/lightnvm/core.c
+++ b/drivers/lightnvm/core.c
@@ -851,33 +851,32 @@ EXPORT_SYMBOL(nvm_get_tgt_bb_tbl);
 static int nvm_core_init(struct nvm_dev *dev)
 {
struct nvm_id *id = >identity;
-   struct nvm_id_group *grp = >grp;
struct nvm_geo *geo = >geo;
int ret;
 
memcpy(>ppaf, >ppaf, sizeof(struct nvm_addr_format));
 
-   if (grp->mtype != 0) {
+   if (id->mtype != 0) {
pr_err("nvm: memory type not supported\n");
return -EINVAL;
}
 
/* Whole device values */
-   geo->nr_chnls = grp->num_ch;
-   geo->nr_luns = grp->num_lun;
+   geo->nr_chnls = id->num_ch;
+   geo->nr_luns = id->num_lun;
 
/* Generic device geometry values */
-   geo->ws_min = grp->ws_min;
-   geo->ws_opt = grp->ws_opt;
-   geo->ws_seq = grp->ws_seq;
-   geo->ws_per_chk = grp->ws_per_chk;
-   geo->nr_chks = grp->num_chk;
-   geo->sec_size = grp->csecs;
-   geo->oob_size = grp->sos;
-   geo->mccap = grp->mccap;
+   geo->ws_min = id->ws_min;
+   geo->ws_opt = id->ws_opt;
+   geo->ws_seq = id->ws_seq;
+   geo->ws_per_chk = id->ws_per_chk;
+   geo->nr_chks = id->num_chk;
+   geo->sec_size = id->csecs;
+   geo->oob_size = id->sos;
+   geo->mccap = id->mccap;
geo->max_rq_size = dev->ops->max_phys_sect * geo->sec_size;
 
-   geo->sec_per_chk = grp->clba;
+   geo->sec_per_chk = id->clba;
geo->sec_per_lun = geo->sec_per_chk * geo->nr_chks;
geo->all_luns = geo->nr_luns * geo->nr_chnls;
 
diff --git a/drivers/nvme/host/lightnvm.c b/drivers/nvme/host/lightnvm.c
index 60db3f1b59da..6412551ecc65 100644
--- a/drivers/nvme/host/lightnvm.c
+++ b/drivers/nvme/host/lightnvm.c
@@ -203,57 +203,55 @@ static inline void _nvme_nvm_check_size(void)
 static int init_grp(struct nvm_id *nvm_id, struct nvme_nvm_id12 *id12)
 {
struct nvme_nvm_id12_grp *src;
-   struct nvm_id_group *grp;
int sec_per_pg, sec_per_pl, pg_per_blk;
 
if (id12->cgrps != 1)
return -EINVAL;
 
src = >grp;
-   grp = _id->grp;
 
-   grp->mtype = src->mtype;
-   grp->fmtype = src->fmtype;
+   nvm_id->mtype = src->mtype;
+   nvm_id->fmtype = src->fmtype;
 
-   grp->num_ch = src->num_ch;
-   grp->num_lun = src->num_lun;
+   nvm_id->num_ch = src->num_ch;
+   nvm_id->num_lun = src->num_lun;
 
-   grp->num_chk = le16_to_cpu(src->num_chk);
-   grp->csecs = le16_to_cpu(src->csecs);
-   grp->sos = le16_to_cpu(src->sos);
+   nvm_id->num_chk = le16_to_cpu(src->num_chk);
+   nvm_id->csecs = le16_to_cpu(src->csecs);
+   nvm_id->sos = le16_to_cpu(src->sos);
 
pg_per_blk = le16_to_cpu(src->num_pg);
-   sec_per_pg = le16_to_cpu(src->fpg_sz) / grp->csecs;
+   sec_per_pg = le16_to_cpu(src->fpg_sz) / nvm_id->csecs;
sec_per_pl = sec_per_pg * src->num_pln;
-   grp->clba = sec_per_pl * pg_per_blk;
-   grp->ws_per_chk = pg_per_blk;
+   nvm_id->clba = sec_per_pl * pg_per_blk;
+   nvm_id->ws_per_chk = pg_per_blk;
 
-   grp->mpos = le32_to_cpu(src->mpos);
-   grp->cpar = le16_to_cpu(src->cpar);
-   grp->mccap = le32_to_cpu(src->mccap);
+   nvm_id->mpos = le32_to_cpu(src->mpos);
+   nvm_id->cpar = le16_to_cpu(src->cpar);
+   nvm_id->mccap = le32_to_cpu(src->mccap);
 
-   grp->ws_opt = grp->ws_min = sec_per_pg;
-   grp->ws_seq = NVM_IO_SNGL_ACCESS;
+   nvm_id->ws_opt = nvm_id->ws_min = sec_per_pg;
+   nvm_id->ws_seq = NVM_IO_SNGL_ACCESS;
 
-   if (grp->mpos & 0x020202) {
-   grp->ws_seq = NVM_IO_DUAL_ACCESS;
-   grp->ws_opt <<= 1;
-   } else if (grp->mpos & 0x040404) {
-   grp->ws_seq = NVM_IO_QUAD_ACCESS;
-   grp->ws_opt <<= 2;
+   if (nvm_id->mpos & 0x020202) {
+   nvm_id->ws_seq = NVM_IO_DUAL_ACCESS;
+   nvm_id->ws_opt <<= 1;
+   } else if (nvm_id->mpos & 0x040404) {
+   nvm_id->ws_seq = NVM_IO_QUAD_ACCESS;
+   nvm_id->ws_opt <<= 2;
}
 
-   grp->trdt = le32_to_cpu(src->trdt);
-   grp->trdm = le32_to_cpu(src->trdm);
-   grp->tprt = le32_to_cpu(src->tprt);
-   grp->tprm = le32_to_cpu(src->tprm);
-   grp->tbet = le32_to_cpu(src->tbet);
-   grp->tbem = le32_to_cpu(src->tbem);
+   nvm_id->trdt = le32_to_cpu(src->trdt);
+   nvm_id->trdm = 

[PATCH V2 2/4] lightnvm: flatten nvm_id_group into nvm_id

2018-02-09 Thread Matias Bjørling
There are no groups in the 2.0 specification, make sure that the
nvm_id structure is flattened before 2.0 data structures are added.

Signed-off-by: Matias Bjørling 
---
 drivers/lightnvm/core.c  |  25 ++-
 drivers/nvme/host/lightnvm.c | 100 +--
 include/linux/lightnvm.h |  53 +++
 3 files changed, 86 insertions(+), 92 deletions(-)

diff --git a/drivers/lightnvm/core.c b/drivers/lightnvm/core.c
index dcc9e621e651..c72863b36439 100644
--- a/drivers/lightnvm/core.c
+++ b/drivers/lightnvm/core.c
@@ -851,33 +851,32 @@ EXPORT_SYMBOL(nvm_get_tgt_bb_tbl);
 static int nvm_core_init(struct nvm_dev *dev)
 {
struct nvm_id *id = >identity;
-   struct nvm_id_group *grp = >grp;
struct nvm_geo *geo = >geo;
int ret;
 
memcpy(>ppaf, >ppaf, sizeof(struct nvm_addr_format));
 
-   if (grp->mtype != 0) {
+   if (id->mtype != 0) {
pr_err("nvm: memory type not supported\n");
return -EINVAL;
}
 
/* Whole device values */
-   geo->nr_chnls = grp->num_ch;
-   geo->nr_luns = grp->num_lun;
+   geo->nr_chnls = id->num_ch;
+   geo->nr_luns = id->num_lun;
 
/* Generic device geometry values */
-   geo->ws_min = grp->ws_min;
-   geo->ws_opt = grp->ws_opt;
-   geo->ws_seq = grp->ws_seq;
-   geo->ws_per_chk = grp->ws_per_chk;
-   geo->nr_chks = grp->num_chk;
-   geo->sec_size = grp->csecs;
-   geo->oob_size = grp->sos;
-   geo->mccap = grp->mccap;
+   geo->ws_min = id->ws_min;
+   geo->ws_opt = id->ws_opt;
+   geo->ws_seq = id->ws_seq;
+   geo->ws_per_chk = id->ws_per_chk;
+   geo->nr_chks = id->num_chk;
+   geo->sec_size = id->csecs;
+   geo->oob_size = id->sos;
+   geo->mccap = id->mccap;
geo->max_rq_size = dev->ops->max_phys_sect * geo->sec_size;
 
-   geo->sec_per_chk = grp->clba;
+   geo->sec_per_chk = id->clba;
geo->sec_per_lun = geo->sec_per_chk * geo->nr_chks;
geo->all_luns = geo->nr_luns * geo->nr_chnls;
 
diff --git a/drivers/nvme/host/lightnvm.c b/drivers/nvme/host/lightnvm.c
index 60db3f1b59da..6412551ecc65 100644
--- a/drivers/nvme/host/lightnvm.c
+++ b/drivers/nvme/host/lightnvm.c
@@ -203,57 +203,55 @@ static inline void _nvme_nvm_check_size(void)
 static int init_grp(struct nvm_id *nvm_id, struct nvme_nvm_id12 *id12)
 {
struct nvme_nvm_id12_grp *src;
-   struct nvm_id_group *grp;
int sec_per_pg, sec_per_pl, pg_per_blk;
 
if (id12->cgrps != 1)
return -EINVAL;
 
src = >grp;
-   grp = _id->grp;
 
-   grp->mtype = src->mtype;
-   grp->fmtype = src->fmtype;
+   nvm_id->mtype = src->mtype;
+   nvm_id->fmtype = src->fmtype;
 
-   grp->num_ch = src->num_ch;
-   grp->num_lun = src->num_lun;
+   nvm_id->num_ch = src->num_ch;
+   nvm_id->num_lun = src->num_lun;
 
-   grp->num_chk = le16_to_cpu(src->num_chk);
-   grp->csecs = le16_to_cpu(src->csecs);
-   grp->sos = le16_to_cpu(src->sos);
+   nvm_id->num_chk = le16_to_cpu(src->num_chk);
+   nvm_id->csecs = le16_to_cpu(src->csecs);
+   nvm_id->sos = le16_to_cpu(src->sos);
 
pg_per_blk = le16_to_cpu(src->num_pg);
-   sec_per_pg = le16_to_cpu(src->fpg_sz) / grp->csecs;
+   sec_per_pg = le16_to_cpu(src->fpg_sz) / nvm_id->csecs;
sec_per_pl = sec_per_pg * src->num_pln;
-   grp->clba = sec_per_pl * pg_per_blk;
-   grp->ws_per_chk = pg_per_blk;
+   nvm_id->clba = sec_per_pl * pg_per_blk;
+   nvm_id->ws_per_chk = pg_per_blk;
 
-   grp->mpos = le32_to_cpu(src->mpos);
-   grp->cpar = le16_to_cpu(src->cpar);
-   grp->mccap = le32_to_cpu(src->mccap);
+   nvm_id->mpos = le32_to_cpu(src->mpos);
+   nvm_id->cpar = le16_to_cpu(src->cpar);
+   nvm_id->mccap = le32_to_cpu(src->mccap);
 
-   grp->ws_opt = grp->ws_min = sec_per_pg;
-   grp->ws_seq = NVM_IO_SNGL_ACCESS;
+   nvm_id->ws_opt = nvm_id->ws_min = sec_per_pg;
+   nvm_id->ws_seq = NVM_IO_SNGL_ACCESS;
 
-   if (grp->mpos & 0x020202) {
-   grp->ws_seq = NVM_IO_DUAL_ACCESS;
-   grp->ws_opt <<= 1;
-   } else if (grp->mpos & 0x040404) {
-   grp->ws_seq = NVM_IO_QUAD_ACCESS;
-   grp->ws_opt <<= 2;
+   if (nvm_id->mpos & 0x020202) {
+   nvm_id->ws_seq = NVM_IO_DUAL_ACCESS;
+   nvm_id->ws_opt <<= 1;
+   } else if (nvm_id->mpos & 0x040404) {
+   nvm_id->ws_seq = NVM_IO_QUAD_ACCESS;
+   nvm_id->ws_opt <<= 2;
}
 
-   grp->trdt = le32_to_cpu(src->trdt);
-   grp->trdm = le32_to_cpu(src->trdm);
-   grp->tprt = le32_to_cpu(src->tprt);
-   grp->tprm = le32_to_cpu(src->tprm);
-   grp->tbet = le32_to_cpu(src->tbet);
-   grp->tbem = le32_to_cpu(src->tbem);
+   nvm_id->trdt = le32_to_cpu(src->trdt);
+   nvm_id->trdm = le32_to_cpu(src->trdm);
+