[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v3 23/32] nvdimm: build ACPI NFIT table
From: |
Dan Williams |
Subject: |
Re: [Qemu-devel] [PATCH v3 23/32] nvdimm: build ACPI NFIT table |
Date: |
Mon, 12 Oct 2015 09:40:59 -0700 |
On Sat, Oct 10, 2015 at 8:52 PM, Xiao Guangrong
<address@hidden> wrote:
> NFIT is defined in ACPI 6.0: 5.2.25 NVDIMM Firmware Interface Table (NFIT)
>
> Currently, we only support PMEM mode. Each device has 3 structures:
> - SPA structure, defines the PMEM region info
>
> - MEM DEV structure, it has the @handle which is used to associate specified
> ACPI NVDIMM device we will introduce in later patch.
> Also we can happily ignored the memory device's interleave, the real
> nvdimm hardware access is hidden behind host
>
> - DCR structure, it defines vendor ID used to associate specified vendor
> nvdimm driver. Since we only implement PMEM mode this time, Command
> window and Data window are not needed
>
> Signed-off-by: Xiao Guangrong <address@hidden>
> ---
> hw/i386/acpi-build.c | 4 +
> hw/mem/nvdimm/acpi.c | 209
> ++++++++++++++++++++++++++++++++++++++++++++++-
> hw/mem/nvdimm/internal.h | 13 +++
> hw/mem/nvdimm/nvdimm.c | 25 ++++++
> include/hw/mem/nvdimm.h | 2 +
> 5 files changed, 252 insertions(+), 1 deletion(-)
>
> diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
> index 95e0c65..c637dc8 100644
> --- a/hw/i386/acpi-build.c
> +++ b/hw/i386/acpi-build.c
> @@ -1661,6 +1661,7 @@ static bool acpi_has_iommu(void)
> static
> void acpi_build(PcGuestInfo *guest_info, AcpiBuildTables *tables)
> {
> + PCMachineState *pcms = PC_MACHINE(qdev_get_machine());
> GArray *table_offsets;
> unsigned facs, ssdt, dsdt, rsdt;
> AcpiCpuInfo cpu;
> @@ -1742,6 +1743,9 @@ void acpi_build(PcGuestInfo *guest_info,
> AcpiBuildTables *tables)
> build_dmar_q35(tables_blob, tables->linker);
> }
>
> + nvdimm_build_acpi_table(&pcms->nvdimm_memory, table_offsets, tables_blob,
> + tables->linker);
> +
> /* Add tables supplied by user (if any) */
> for (u = acpi_table_first(); u; u = acpi_table_next(u)) {
> unsigned len = acpi_table_len(u);
> diff --git a/hw/mem/nvdimm/acpi.c b/hw/mem/nvdimm/acpi.c
> index b640874..62b1e02 100644
> --- a/hw/mem/nvdimm/acpi.c
> +++ b/hw/mem/nvdimm/acpi.c
> @@ -32,6 +32,46 @@
> #include "hw/mem/nvdimm.h"
> #include "internal.h"
>
> +static void nfit_spa_uuid_pm(uuid_le *uuid)
> +{
> + uuid_le uuid_pm = UUID_LE(0x66f0d379, 0xb4f3, 0x4074, 0xac, 0x43, 0x0d,
> + 0x33, 0x18, 0xb7, 0x8c, 0xdb);
> + memcpy(uuid, &uuid_pm, sizeof(uuid_pm));
> +}
> +
> +enum {
> + NFIT_STRUCTURE_SPA = 0,
> + NFIT_STRUCTURE_MEMDEV = 1,
> + NFIT_STRUCTURE_IDT = 2,
> + NFIT_STRUCTURE_SMBIOS = 3,
> + NFIT_STRUCTURE_DCR = 4,
> + NFIT_STRUCTURE_BDW = 5,
> + NFIT_STRUCTURE_FLUSH = 6,
> +};
> +
> +enum {
> + EFI_MEMORY_UC = 0x1ULL,
> + EFI_MEMORY_WC = 0x2ULL,
> + EFI_MEMORY_WT = 0x4ULL,
> + EFI_MEMORY_WB = 0x8ULL,
> + EFI_MEMORY_UCE = 0x10ULL,
> + EFI_MEMORY_WP = 0x1000ULL,
> + EFI_MEMORY_RP = 0x2000ULL,
> + EFI_MEMORY_XP = 0x4000ULL,
> + EFI_MEMORY_NV = 0x8000ULL,
> + EFI_MEMORY_MORE_RELIABLE = 0x10000ULL,
> +};
Would it worth including / copying the ACPICA header files directly?
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/acpi/actbl1.h
https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/include/acpi/acuuid.h
- [Qemu-devel] [PATCH v3 18/32] dimm: get mapped memory region from DIMMDeviceClass->get_memory_region, (continued)
- [Qemu-devel] [PATCH v3 18/32] dimm: get mapped memory region from DIMMDeviceClass->get_memory_region, Xiao Guangrong, 2015/10/10
- [Qemu-devel] [PATCH v3 13/32] pc-dimm: make pc_existing_dimms_capacity static and rename it, Xiao Guangrong, 2015/10/10
- [Qemu-devel] [PATCH v3 15/32] stubs: rename qmp_pc_dimm_device_list.c, Xiao Guangrong, 2015/10/10
- [Qemu-devel] [PATCH v3 21/32] nvdimm: implement NVDIMM device abstract, Xiao Guangrong, 2015/10/10
- [Qemu-devel] [PATCH v3 24/32] nvdimm: init the address region used by DSM method, Xiao Guangrong, 2015/10/10
- [Qemu-devel] [PATCH v3 23/32] nvdimm: build ACPI NFIT table, Xiao Guangrong, 2015/10/10
- Re: [Qemu-devel] [PATCH v3 23/32] nvdimm: build ACPI NFIT table,
Dan Williams <=
[Qemu-devel] [PATCH v3 25/32] nvdimm: build ACPI nvdimm devices, Xiao Guangrong, 2015/10/10
[Qemu-devel] [PATCH v3 32/32] nvdimm: add maintain info, Xiao Guangrong, 2015/10/10
Re: [Qemu-devel] [PATCH v3 00/32] implement vNVDIMM, Dan Williams, 2015/10/10