On Fri, Dec 08, 2017 at 02:00:25PM -0700, Dave Jiang wrote:
> Adding NFIT platform capabilities sub table in nfit_test simulated ACPI
> NFIT table. Only the first NFIT table is added with the capability
> sub-table.
> 
> Signed-off-by: Dave Jiang <[email protected]>
> ---
>  tools/testing/nvdimm/test/nfit.c |   11 ++++++++++-
>  1 file changed, 10 insertions(+), 1 deletion(-)
> 
> diff --git a/tools/testing/nvdimm/test/nfit.c 
> b/tools/testing/nvdimm/test/nfit.c
> index 7217b2b953b5..8a16f90a9573 100644
> --- a/tools/testing/nvdimm/test/nfit.c
> +++ b/tools/testing/nvdimm/test/nfit.c
> @@ -993,6 +993,7 @@ static void nfit_test0_setup(struct nfit_test *t)
>       struct acpi_nfit_control_region *dcr;
>       struct acpi_nfit_data_region *bdw;
>       struct acpi_nfit_flush_address *flush;
> +     struct acpi_nfit_capabilities *pcap;
>       unsigned int offset, i;
>  
>       /*
> @@ -1500,8 +1501,16 @@ static void nfit_test0_setup(struct nfit_test *t)
>       for (i = 0; i < NUM_HINTS; i++)
>               flush->hint_address[i] = t->flush_dma[3] + i * sizeof(u64);
>  
> +     /* platform capabilities */
> +     pcap = nfit_buf + offset + flush_hint_size * 4;
> +     pcap->header.type = ACPI_NFIT_TYPE_CAPABILITIES;
> +     pcap->header.length = sizeof(*pcap);
> +     pcap->highest_capability = BIT(2);
> +     pcap->capabilities = ACPI_NFIT_CAPABILITY_CACHE_FLUSH |
> +             ACPI_NFIT_CAPABILITY_MEM_FLUSH;
> +
>       if (t->setup_hotplug) {
> -             offset = offset + flush_hint_size * 4;
> +             offset = offset + sizeof(*pcap);

You still need to increase the offset by flush_hint_size*4, in addition to
sizeof(*pcap):

        offset = offset + flush_hint_size * 4 + sizeof(*pcap);

Also, you need to increase the size of the memory allocation for t->nfit_buf
in nfit_test_alloc() by adding in a sizeof(struct acpi_nfit_capabilities) to
the calculation of nfit_size.  Otherwise you'll increment offset off the end
of nfit_buf in nfit_test0_setup().

>               /* dcr-descriptor4: blk */
>               dcr = nfit_buf + offset;
>               dcr->header.type = ACPI_NFIT_TYPE_CONTROL_REGION;
> 
> _______________________________________________
> Linux-nvdimm mailing list
> [email protected]
> https://lists.01.org/mailman/listinfo/linux-nvdimm
_______________________________________________
Linux-nvdimm mailing list
[email protected]
https://lists.01.org/mailman/listinfo/linux-nvdimm

Reply via email to