From patchwork Mon Feb 26 13:17:02 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: =?UTF-8?q?Javier=20Gonz=C3=A1lez?= X-Patchwork-Id: 10242345 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 644EB602DC for ; Mon, 26 Feb 2018 13:23:58 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 52A522A007 for ; Mon, 26 Feb 2018 13:23:58 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 4741B2A00B; Mon, 26 Feb 2018 13:23:58 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CE66D2A007 for ; Mon, 26 Feb 2018 13:23:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753379AbeBZNX4 (ORCPT ); Mon, 26 Feb 2018 08:23:56 -0500 Received: from mail-wm0-f67.google.com ([74.125.82.67]:36266 "EHLO mail-wm0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753088AbeBZNRb (ORCPT ); Mon, 26 Feb 2018 08:17:31 -0500 Received: by mail-wm0-f67.google.com with SMTP id 188so16603067wme.1 for ; Mon, 26 Feb 2018 05:17:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=lightnvm-io.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=pZBfqlXSX9RaFDX9f48Loc6PmPaQRpV35L34KTGl5RQ=; b=MERxZoyDpt6eemJI0Kjj4SKXrycn2Qj483Yob4WofSIT1bppVMp+CU7ECOi1Oq56VS gwcMa4ZpLmJt4ohBtBr1tg0DUuxseJ0zuOajP5umBpXQZhhBu3kkYeZo/i0YOP3T6W67 6ipk5ATTNmKbVTYc+r43azqHbZtGZ14mHU9dXo/iNYlKvW/wA3czqvNIOsfVfuvHNd+H EETH7xF7g/TFA0cDmEs8NgSlZB/ET1t0k7VWnzVrCIz1oc7OftHY72tQFbwnPTZ2HrHO EqxGPnV0p257UUr+IpFwSaZrGvOZSO0VtJtl5C2QGty/pnamvcODGsvHyRxq+kaml5ag S+xg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=pZBfqlXSX9RaFDX9f48Loc6PmPaQRpV35L34KTGl5RQ=; b=Wtw0l0+QkpiCVY6uQQpXkqEff3S+0Rl6gW0pX5zkdkBiZcLExe/t+DbqhitZvzys/g +OUJUJY25+6clEgHlWtPhlRFdqf14F+/Ayc97Q2T3WAsQd+GzGYe5K1E/evFHwdLX9gm ovdnwc/CzzG1Mz6/EpiCodE4cQ1HHN9QhB3USyZ6jvcS6Um0QigEU4cPXuu5X5xP2mOC 03QJZhwrb3OjjQ0ISlJV8kgJ1Ox0ZCNOMempE77DmH6NiIlzfoXmaUHa9C2wBiiHHM5n zCVvZfAfdXKVEwhauPvkcbweMbJoKc3WngsNvArRWfusABZz57MnTk5w0njiHJWTeafH ghHA== X-Gm-Message-State: APf1xPDlRyhFF9RwW3UZqNF9UH9lJQUpOFpRI0mepOSSkONy4r0KsNhi 6uZE9xIH2CQqmhbUn2qHpB/0vw== X-Google-Smtp-Source: AH8x225rHsPeXeKovMfzAO/c17adweh7373tW4O5YCFBvLo8UA5ognPTpLn6SLniKxK6U9ZhjWKqvA== X-Received: by 10.80.219.139 with SMTP id p11mr14789110edk.192.1519651049699; Mon, 26 Feb 2018 05:17:29 -0800 (PST) Received: from uHalley.cnexlabs.com (6164211-cl69.boa.fiberby.dk. [193.106.164.211]) by smtp.gmail.com with ESMTPSA id g59sm7097451ede.19.2018.02.26.05.17.28 (version=TLS1_2 cipher=ECDHE-RSA-AES128-SHA bits=128/128); Mon, 26 Feb 2018 05:17:29 -0800 (PST) From: "=?UTF-8?q?Javier=20Gonz=C3=A1lez?=" X-Google-Original-From: =?UTF-8?q?Javier=20Gonz=C3=A1lez?= To: mb@lightnvm.io Cc: linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, linux-nvme@lists.infradead.org, =?UTF-8?q?Javier=20Gonz=C3=A1lez?= Subject: [PATCH 03/19] lightnvm: add minor version to generic geometry Date: Mon, 26 Feb 2018 14:17:02 +0100 Message-Id: <1519651038-16845-4-git-send-email-javier@cnexlabs.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1519651038-16845-1-git-send-email-javier@cnexlabs.com> References: <1519651038-16845-1-git-send-email-javier@cnexlabs.com> MIME-Version: 1.0 Sender: linux-block-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-block@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Separate the version between major and minor on the generic geometry and represent it through sysfs in the 2.0 path. The 1.2 path only shows the major version to preserve the existing user space interface. Signed-off-by: Javier González --- drivers/lightnvm/core.c | 4 ++-- drivers/nvme/host/lightnvm.c | 25 ++++++++++++++++++++----- include/linux/lightnvm.h | 3 ++- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/drivers/lightnvm/core.c b/drivers/lightnvm/core.c index 43e3d6bb5be6..96f4e62d383b 100644 --- a/drivers/lightnvm/core.c +++ b/drivers/lightnvm/core.c @@ -897,8 +897,8 @@ static int nvm_init(struct nvm_dev *dev) goto err; } - pr_debug("nvm: ver:%u nvm_vendor:%x\n", - dev_geo->ver_id, + pr_debug("nvm: ver:%u.%u nvm_vendor:%x\n", + dev_geo->major_ver_id, dev_geo->minor_ver_id, dev_geo->c.vmnt); ret = nvm_core_init(dev); diff --git a/drivers/nvme/host/lightnvm.c b/drivers/nvme/host/lightnvm.c index 10392a664b50..8befb60eeacb 100644 --- a/drivers/nvme/host/lightnvm.c +++ b/drivers/nvme/host/lightnvm.c @@ -295,7 +295,9 @@ static int nvme_nvm_setup_12(struct nvme_nvm_id12 *id, return -EINVAL; } - dev_geo->ver_id = id->ver_id; + /* 1.2 spec. only reports a single version id - unfold */ + dev_geo->major_ver_id = id->ver_id; + dev_geo->minor_ver_id = 2; dev_geo->nr_chnls = src->num_ch; dev_geo->nr_luns = src->num_lun; @@ -380,7 +382,14 @@ static void nvme_nvm_set_addr_20(struct nvm_addr_format *dst, static int nvme_nvm_setup_20(struct nvme_nvm_id20 *id, struct nvm_geo *dev_geo) { - dev_geo->ver_id = id->mjr; + dev_geo->major_ver_id = id->mjr; + dev_geo->minor_ver_id = id->mnr; + + if (!(dev_geo->major_ver_id == 2 && dev_geo->minor_ver_id == 0)) { + pr_err("nvm: OCSSD version not supported (v%d.%d)\n", + dev_geo->major_ver_id, dev_geo->minor_ver_id); + return -EINVAL; + } dev_geo->nr_chnls = le16_to_cpu(id->num_grp); dev_geo->nr_luns = le16_to_cpu(id->num_pu); @@ -920,7 +929,13 @@ static ssize_t nvm_dev_attr_show(struct device *dev, attr = &dattr->attr; if (strcmp(attr->name, "version") == 0) { - return scnprintf(page, PAGE_SIZE, "%u\n", dev_geo->ver_id); + if (dev_geo->major_ver_id == 1) + return scnprintf(page, PAGE_SIZE, "%u\n", + dev_geo->major_ver_id); + else + return scnprintf(page, PAGE_SIZE, "%u.%u\n", + dev_geo->major_ver_id, + dev_geo->minor_ver_id); } else if (strcmp(attr->name, "capabilities") == 0) { return scnprintf(page, PAGE_SIZE, "%u\n", dev_geo->c.cap); } else if (strcmp(attr->name, "read_typ") == 0) { @@ -1174,7 +1189,7 @@ int nvme_nvm_register_sysfs(struct nvme_ns *ns) if (!ndev) return -EINVAL; - switch (dev_geo->ver_id) { + switch (dev_geo->major_ver_id) { case 1: return sysfs_create_group(&disk_to_dev(ns->disk)->kobj, &nvm_dev_attr_group_12); @@ -1191,7 +1206,7 @@ void nvme_nvm_unregister_sysfs(struct nvme_ns *ns) struct nvm_dev *ndev = ns->ndev; struct nvm_geo *dev_geo = &ndev->geo; - switch (dev_geo->ver_id) { + switch (dev_geo->major_ver_id) { case 1: sysfs_remove_group(&disk_to_dev(ns->disk)->kobj, &nvm_dev_attr_group_12); diff --git a/include/linux/lightnvm.h b/include/linux/lightnvm.h index 42704c4ca9af..ccaf8a30202d 100644 --- a/include/linux/lightnvm.h +++ b/include/linux/lightnvm.h @@ -309,7 +309,8 @@ struct nvm_common_geo { /* Instance geometry */ struct nvm_geo { /* device reported version */ - u8 ver_id; + u8 major_ver_id; + u8 minor_ver_id; /* instance specific geometry */ int nr_chnls;