From patchwork Mon Jun 27 06:46:00 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Chun-Yi Lee X-Patchwork-Id: 9199939 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 099DC60752 for ; Mon, 27 Jun 2016 06:48:17 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id ED73828581 for ; Mon, 27 Jun 2016 06:48:16 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id E247C28583; Mon, 27 Jun 2016 06:48:16 +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.8 required=2.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, T_DKIM_INVALID 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 6C45728581 for ; Mon, 27 Jun 2016 06:48:16 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751677AbcF0GsP (ORCPT ); Mon, 27 Jun 2016 02:48:15 -0400 Received: from mail-pa0-f67.google.com ([209.85.220.67]:34545 "EHLO mail-pa0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751510AbcF0GsO (ORCPT ); Mon, 27 Jun 2016 02:48:14 -0400 Received: by mail-pa0-f67.google.com with SMTP id us13so14574934pab.1; Sun, 26 Jun 2016 23:48:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=from:to:cc:subject:date:message-id; bh=9lG0wjvo3uYNe9iKPzFovvIbwPRjwWuc1+RVCM8jA5A=; b=otREwr7ghx/Q2TvT1V4snvwq5JmGKcvatyVrqK1nXjwn9s+pNvRykPHnazMnok/NM8 Jd8mMa4DUixSBdoM0GyDwevHCSHGHeMtHjlTrif2AWWb/JjG8Yr2FZUC/11/yNdPiV01 gwRviAmPZ6b4Jumi4VLs6CNVwCwwFOnRFaBays1tytkftdrrYST+bc8ZfCvZw50+vfZT fRTKQKV6HP54sVWdcykulsPx3xFd+pQw0ltCgwmg2huDfV7HZthYYbQXvI+pmRGfJwoC d2mjr7AYI8uBzlz5Luh0fP+FuOVZRYed+2a35U9T5OueR+UQM+uVsedISZTk12bZ04+O YcdQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20130820; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=9lG0wjvo3uYNe9iKPzFovvIbwPRjwWuc1+RVCM8jA5A=; b=X9du9d3g+vqxspMxkEVmX5f6XQUVgpopGKDxY9FF/TBDSdWVMl1o0ENtq1zwxYyIEj y4Ulq30doDPvBztEXM3c6GXPrs8UuDZQ9OoezEDGKzAU4ZbBWRW7yjJTYSnU6DAVdxAD jSEH2v18yP/oQ9tLXjLMda1whQeDMkT6mNN+fjMgmHUCTVshNgNYcwKJT59zToG9+51d DXL5LjWRqJQQNVQwE5vR9b4acnlwmG9kH2cLcUHasRVqMXHv0+2V1EmMc9eBJdlmgDHA 5pcsEE47mjCKgSWXNuzzmQwh1UtM4GmFmXq8hdV9hwtOP6dTT6CHg9v+H86hCMMRTIQw lS1g== X-Gm-Message-State: ALyK8tLucCVdecTGOL4WyaUyRKdGRG88+onIFGZEKR3j9BMchcbHbMyq5RY6XslyICtSjA== X-Received: by 10.66.138.43 with SMTP id qn11mr31064030pab.1.1467010093291; Sun, 26 Jun 2016 23:48:13 -0700 (PDT) Received: from linux-rxt1.site ([203.192.156.9]) by smtp.gmail.com with ESMTPSA id jh3sm3860697pac.14.2016.06.26.23.48.10 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Sun, 26 Jun 2016 23:48:12 -0700 (PDT) From: "Lee, Chun-Yi" X-Google-Original-From: "Lee, Chun-Yi" To: Ross Zwisler , Dan Williams , "Rafael J. Wysocki" , Linda Knippers Cc: linux-nvdimm@lists.01.org, linux-acpi@vger.kernel.org, linux-kernel@vger.kernel.org, "Lee, Chun-Yi" , Gary Lin Subject: [PATCH v3] acpi, nfit: treat volatile virtual CD region as pmem Date: Mon, 27 Jun 2016 14:46:00 +0800 Message-Id: <1467009960-20580-1-git-send-email-jlee@suse.com> X-Mailer: git-send-email 1.8.4.5 Sender: linux-acpi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP This patch adds logic to treat volatile virtual CD region as pmem region, then /dev/pmem* device can be mounted with iso9660. It's useful to work with the httpboot in EFI firmware to pull a remote ISO file to the local memory region for booting and installation. Wiki page of UEFI HTTPBoot with OVMF: https://en.opensuse.org/UEFI_HTTPBoot_with_OVMF The ramdisk function in EDK2/OVMF generates a ACPI0012 root device that it contains empty _STA but without _DSM: DefinitionBlock ("ssdt2.aml", "SSDT", 2, "INTEL ", "RamDisk ", 0x00001000) { Scope (\_SB) { Device (NVDR) { Name (_HID, "ACPI0012") // _HID: Hardware ID Name (_STR, Unicode ("NVDIMM Root Device")) // _STR: Description String Method (_STA, 0, NotSerialized) // _STA: Status { Return (0x0F) } } } } In section 5.2.25.2 of ACPI 6.1 spec, it mentions that the "SPA Range Structure Index" of VCD SPA shall be set to zero. That means VCD SPA will not be associated by any NVDIMM region mapping. The VCD's SPA Range Structure in NFIT is similar to virtual disk region as following: [028h 0040 2] Subtable Type : 0000 [System Physical Address Range] [02Ah 0042 2] Length : 0038 [02Ch 0044 2] Range Index : 0000 [02Eh 0046 2] Flags (decoded below) : 0000 Add/Online Operation Only : 0 Proximity Domain Valid : 0 [030h 0048 4] Reserved : 00000000 [034h 0052 4] Proximity Domain : 00000000 [038h 0056 16] Address Range GUID : 77AB535A-45FC-624B-5560-F7B281D1F96E [048h 0072 8] Address Range Base : 00000000B6ABD018 [050h 0080 8] Address Range Length : 0000000005500000 [058h 0088 8] Memory Map Attribute : 0000000000000000 The way to not associate a SPA range is to never reference it from a "flush hint", "interleave", or "control region" table. After testing on OVMF, pmem driver can support the region that it doesn't assoicate to any NVDIMM mapping. So, treat VCD like pmem is a idea to get a pmem block device that it contains iso. v3: To simplify patch, removed VCD region in libnvdimm. v2: Removed the code for setting VCD to a read-only region. Cc: Gary Lin Cc: Dan Williams Cc: Ross Zwisler Cc: "Rafael J. Wysocki" Cc: Linda Knippers Signed-off-by: Lee, Chun-Yi --- drivers/acpi/nfit.c | 8 +++++++- drivers/nvdimm/region_devs.c | 26 +++++++++++++++++++++++++- include/linux/libnvdimm.h | 2 ++ 3 files changed, 34 insertions(+), 2 deletions(-) -- To unsubscribe from this list: send the line "unsubscribe linux-acpi" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Index: linux/drivers/acpi/nfit.c =================================================================== --- linux.orig/drivers/acpi/nfit.c +++ linux/drivers/acpi/nfit.c @@ -1995,7 +1995,7 @@ static int acpi_nfit_register_region(str if (nfit_spa->nd_region) return 0; - if (spa->range_index == 0) { + if (spa->range_index == 0 && nfit_spa_type(spa) != NFIT_SPA_VCD) { dev_dbg(acpi_desc->dev, "%s: detected invalid spa index\n", __func__); return 0; @@ -2059,6 +2059,11 @@ static int acpi_nfit_register_region(str ndr_desc); if (!nfit_spa->nd_region) rc = -ENOMEM; + } else if (nfit_spa_type(spa) == NFIT_SPA_VCD) { + nfit_spa->nd_region = nvdimm_pmem_region_create(nvdimm_bus, + ndr_desc); + if (!nfit_spa->nd_region) + rc = -ENOMEM; } out: