From: Jonathan Cameron <Jonathan.Cameron@Huawei.com>
To: Fan Ni <fan.ni@samsung.com>
Cc: "qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
"Michael Tsirkin" <mst@redhat.com>,
"linux-cxl@vger.kernel.org" <linux-cxl@vger.kernel.org>,
"Dave Jiang" <dave.jiang@intel.com>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"linuxarm@huawei.com" <linuxarm@huawei.com>
Subject: Re: [PATCH v2 2/3] hw/cxl: Add QTG _DSM support for ACPI0017 device
Date: Wed, 13 Sep 2023 09:51:52 +0100 [thread overview]
Message-ID: <20230913095152.00005053@Huawei.com> (raw)
In-Reply-To: <20230912211245.GC2828853@sjcvldevvm72>
On Tue, 12 Sep 2023 21:12:45 +0000
Fan Ni <fan.ni@samsung.com> wrote:
> On Mon, Sep 04, 2023 at 05:18:46PM +0100, Jonathan Cameron wrote:
>
> > From: Dave Jiang <dave.jiang@intel.com>
> >
> > Add a simple _DSM call support for the ACPI0017 device to return a fake QTG
> > ID value of 0 in all cases. The enabling is for _DSM plumbing testing
> > from the OS.
> >
> > Following edited for readbility only
> >
> > Device (CXLM)
> > {
> > Name (_HID, "ACPI0017") // _HID: Hardware ID
> > ...
> > Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
> > {
> > If ((Arg0 == ToUUID ("f365f9a6-a7de-4071-a66a-b40c0b4f8e52")))
> > {
> > If ((Arg2 == Zero))
> > {
> > Return (Buffer (One) { 0x01 })
> > }
> >
> > If ((Arg2 == One))
> > {
> > Return (Package (0x02)
> > {
> > Buffer (0x02)
> > { 0x01, 0x00 },
> > Package (0x01)
> > {
> > Buffer (0x02)
> > { 0x00, 0x00 }
> > }
> > })
> > }
> > }
> > }
> >
> > Signed-off-by: Dave Jiang <dave.jiang@intel.com>
> > Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>
> Looks good to me. One minor comment inline.
> >
> > --
> > v2: Minor edit to drop reference to switches in patch description.
> > ---
> > include/hw/acpi/cxl.h | 1 +
> > hw/acpi/cxl.c | 57 +++++++++++++++++++++++++++++++++++++++++++
> > hw/i386/acpi-build.c | 1 +
> > 3 files changed, 59 insertions(+)
> >
> > diff --git a/include/hw/acpi/cxl.h b/include/hw/acpi/cxl.h
> > index acf4418886..8f22c71530 100644
> > --- a/include/hw/acpi/cxl.h
> > +++ b/include/hw/acpi/cxl.h
> > @@ -25,5 +25,6 @@ void cxl_build_cedt(GArray *table_offsets, GArray *table_data,
> > BIOSLinker *linker, const char *oem_id,
> > const char *oem_table_id, CXLState *cxl_state);
> > void build_cxl_osc_method(Aml *dev);
> > +void build_cxl_dsm_method(Aml *dev);
> >
> > #endif
> > diff --git a/hw/acpi/cxl.c b/hw/acpi/cxl.c
> > index 92b46bc932..5e9039785a 100644
> > --- a/hw/acpi/cxl.c
> > +++ b/hw/acpi/cxl.c
> > @@ -30,6 +30,63 @@
> > #include "qapi/error.h"
> > #include "qemu/uuid.h"
> >
> > +void build_cxl_dsm_method(Aml *dev)
>
> Not a concern for now, I think, do we need to check the revision
> field?
Any new versions should be defined to be backwards compatible...
So hopefully not (though it has gone wrong a few times in the
past when spec reviewers like me haven't been paying attention :(
If that happens we'll have to deal with it when it becomes public.
Jonathan
>
> Fan
> > +{
> > + Aml *method, *ifctx, *ifctx2;
> > +
> > + method = aml_method("_DSM", 4, AML_SERIALIZED);
> > + {
> > + Aml *function, *uuid;
> > +
> > + uuid = aml_arg(0);
> > + function = aml_arg(2);
> > + /* CXL spec v3.0 9.17.3.1 *, QTG ID _DSM */
> > + ifctx = aml_if(aml_equal(
> > + uuid, aml_touuid("F365F9A6-A7DE-4071-A66A-B40C0B4F8E52")));
> > +
> > + /* Function 0, standard DSM query function */
> > + ifctx2 = aml_if(aml_equal(function, aml_int(0)));
> > + {
> > + uint8_t byte_list[1] = { 0x01 }; /* functions 1 only */
> > +
> > + aml_append(ifctx2,
> > + aml_return(aml_buffer(sizeof(byte_list), byte_list)));
> > + }
> > + aml_append(ifctx, ifctx2);
> > +
> > + /*
> > + * Function 1
> > + * A return value of {1, {0}} inciate that
> > + * max supported QTG ID of 1 and recommended QTG is 0.
> > + * The values here are faked to simplify emulation.
> > + */
> > + ifctx2 = aml_if(aml_equal(function, aml_int(1)));
> > + {
> > + uint16_t word_list[1] = { 0x01 };
> > + uint16_t word_list2[1] = { 0 };
> > + uint8_t *byte_list = (uint8_t *)word_list;
> > + uint8_t *byte_list2 = (uint8_t *)word_list2;
> > + Aml *pak, *pak1;
> > +
> > + /*
> > + * The return package is a package of a WORD and another package.
> > + * The embedded package contains 0 or more WORDs for the
> > + * recommended QTG IDs.
> > + */
> > + pak1 = aml_package(1);
> > + aml_append(pak1, aml_buffer(sizeof(uint16_t), byte_list2));
> > + pak = aml_package(2);
> > + aml_append(pak, aml_buffer(sizeof(uint16_t), byte_list));
> > + aml_append(pak, pak1);
> > +
> > + aml_append(ifctx2, aml_return(pak));
> > + }
> > + aml_append(ifctx, ifctx2);
> > + }
> > + aml_append(method, ifctx);
> > + aml_append(dev, method);
> > +}
> > +
> > static void cedt_build_chbs(GArray *table_data, PXBCXLDev *cxl)
> > {
> > PXBDev *pxb = PXB_DEV(cxl);
> > diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
> > index bb12b0ad43..d3bc5875eb 100644
> > --- a/hw/i386/acpi-build.c
> > +++ b/hw/i386/acpi-build.c
> > @@ -1422,6 +1422,7 @@ static void build_acpi0017(Aml *table)
> > method = aml_method("_STA", 0, AML_NOTSERIALIZED);
> > aml_append(method, aml_return(aml_int(0x01)));
> > aml_append(dev, method);
> > + build_cxl_dsm_method(dev);
> >
> > aml_append(scope, dev);
> > aml_append(table, scope);
> > --
> > 2.39.2
> >
> >
WARNING: multiple messages have this Message-ID (diff)
From: Jonathan Cameron via <qemu-devel@nongnu.org>
To: Fan Ni <fan.ni@samsung.com>
Cc: "qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
"Michael Tsirkin" <mst@redhat.com>,
"linux-cxl@vger.kernel.org" <linux-cxl@vger.kernel.org>,
"Dave Jiang" <dave.jiang@intel.com>,
"Philippe Mathieu-Daudé" <philmd@linaro.org>,
"linuxarm@huawei.com" <linuxarm@huawei.com>
Subject: Re: [PATCH v2 2/3] hw/cxl: Add QTG _DSM support for ACPI0017 device
Date: Wed, 13 Sep 2023 09:51:52 +0100 [thread overview]
Message-ID: <20230913095152.00005053@Huawei.com> (raw)
In-Reply-To: <20230912211245.GC2828853@sjcvldevvm72>
On Tue, 12 Sep 2023 21:12:45 +0000
Fan Ni <fan.ni@samsung.com> wrote:
> On Mon, Sep 04, 2023 at 05:18:46PM +0100, Jonathan Cameron wrote:
>
> > From: Dave Jiang <dave.jiang@intel.com>
> >
> > Add a simple _DSM call support for the ACPI0017 device to return a fake QTG
> > ID value of 0 in all cases. The enabling is for _DSM plumbing testing
> > from the OS.
> >
> > Following edited for readbility only
> >
> > Device (CXLM)
> > {
> > Name (_HID, "ACPI0017") // _HID: Hardware ID
> > ...
> > Method (_DSM, 4, Serialized) // _DSM: Device-Specific Method
> > {
> > If ((Arg0 == ToUUID ("f365f9a6-a7de-4071-a66a-b40c0b4f8e52")))
> > {
> > If ((Arg2 == Zero))
> > {
> > Return (Buffer (One) { 0x01 })
> > }
> >
> > If ((Arg2 == One))
> > {
> > Return (Package (0x02)
> > {
> > Buffer (0x02)
> > { 0x01, 0x00 },
> > Package (0x01)
> > {
> > Buffer (0x02)
> > { 0x00, 0x00 }
> > }
> > })
> > }
> > }
> > }
> >
> > Signed-off-by: Dave Jiang <dave.jiang@intel.com>
> > Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
>
> Looks good to me. One minor comment inline.
> >
> > --
> > v2: Minor edit to drop reference to switches in patch description.
> > ---
> > include/hw/acpi/cxl.h | 1 +
> > hw/acpi/cxl.c | 57 +++++++++++++++++++++++++++++++++++++++++++
> > hw/i386/acpi-build.c | 1 +
> > 3 files changed, 59 insertions(+)
> >
> > diff --git a/include/hw/acpi/cxl.h b/include/hw/acpi/cxl.h
> > index acf4418886..8f22c71530 100644
> > --- a/include/hw/acpi/cxl.h
> > +++ b/include/hw/acpi/cxl.h
> > @@ -25,5 +25,6 @@ void cxl_build_cedt(GArray *table_offsets, GArray *table_data,
> > BIOSLinker *linker, const char *oem_id,
> > const char *oem_table_id, CXLState *cxl_state);
> > void build_cxl_osc_method(Aml *dev);
> > +void build_cxl_dsm_method(Aml *dev);
> >
> > #endif
> > diff --git a/hw/acpi/cxl.c b/hw/acpi/cxl.c
> > index 92b46bc932..5e9039785a 100644
> > --- a/hw/acpi/cxl.c
> > +++ b/hw/acpi/cxl.c
> > @@ -30,6 +30,63 @@
> > #include "qapi/error.h"
> > #include "qemu/uuid.h"
> >
> > +void build_cxl_dsm_method(Aml *dev)
>
> Not a concern for now, I think, do we need to check the revision
> field?
Any new versions should be defined to be backwards compatible...
So hopefully not (though it has gone wrong a few times in the
past when spec reviewers like me haven't been paying attention :(
If that happens we'll have to deal with it when it becomes public.
Jonathan
>
> Fan
> > +{
> > + Aml *method, *ifctx, *ifctx2;
> > +
> > + method = aml_method("_DSM", 4, AML_SERIALIZED);
> > + {
> > + Aml *function, *uuid;
> > +
> > + uuid = aml_arg(0);
> > + function = aml_arg(2);
> > + /* CXL spec v3.0 9.17.3.1 *, QTG ID _DSM */
> > + ifctx = aml_if(aml_equal(
> > + uuid, aml_touuid("F365F9A6-A7DE-4071-A66A-B40C0B4F8E52")));
> > +
> > + /* Function 0, standard DSM query function */
> > + ifctx2 = aml_if(aml_equal(function, aml_int(0)));
> > + {
> > + uint8_t byte_list[1] = { 0x01 }; /* functions 1 only */
> > +
> > + aml_append(ifctx2,
> > + aml_return(aml_buffer(sizeof(byte_list), byte_list)));
> > + }
> > + aml_append(ifctx, ifctx2);
> > +
> > + /*
> > + * Function 1
> > + * A return value of {1, {0}} inciate that
> > + * max supported QTG ID of 1 and recommended QTG is 0.
> > + * The values here are faked to simplify emulation.
> > + */
> > + ifctx2 = aml_if(aml_equal(function, aml_int(1)));
> > + {
> > + uint16_t word_list[1] = { 0x01 };
> > + uint16_t word_list2[1] = { 0 };
> > + uint8_t *byte_list = (uint8_t *)word_list;
> > + uint8_t *byte_list2 = (uint8_t *)word_list2;
> > + Aml *pak, *pak1;
> > +
> > + /*
> > + * The return package is a package of a WORD and another package.
> > + * The embedded package contains 0 or more WORDs for the
> > + * recommended QTG IDs.
> > + */
> > + pak1 = aml_package(1);
> > + aml_append(pak1, aml_buffer(sizeof(uint16_t), byte_list2));
> > + pak = aml_package(2);
> > + aml_append(pak, aml_buffer(sizeof(uint16_t), byte_list));
> > + aml_append(pak, pak1);
> > +
> > + aml_append(ifctx2, aml_return(pak));
> > + }
> > + aml_append(ifctx, ifctx2);
> > + }
> > + aml_append(method, ifctx);
> > + aml_append(dev, method);
> > +}
> > +
> > static void cedt_build_chbs(GArray *table_data, PXBCXLDev *cxl)
> > {
> > PXBDev *pxb = PXB_DEV(cxl);
> > diff --git a/hw/i386/acpi-build.c b/hw/i386/acpi-build.c
> > index bb12b0ad43..d3bc5875eb 100644
> > --- a/hw/i386/acpi-build.c
> > +++ b/hw/i386/acpi-build.c
> > @@ -1422,6 +1422,7 @@ static void build_acpi0017(Aml *table)
> > method = aml_method("_STA", 0, AML_NOTSERIALIZED);
> > aml_append(method, aml_return(aml_int(0x01)));
> > aml_append(dev, method);
> > + build_cxl_dsm_method(dev);
> >
> > aml_append(scope, dev);
> > aml_append(table, scope);
> > --
> > 2.39.2
> >
> >
next prev parent reply other threads:[~2023-09-13 8:51 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-09-04 16:18 [PATCH v2 0/3] hw/cxl: Add dummy ACPI QTG DSM Jonathan Cameron
2023-09-04 16:18 ` Jonathan Cameron via
2023-09-04 16:18 ` [PATCH v2 1/3] tests/acpi: Allow update of DSDT.cxl Jonathan Cameron
2023-09-04 16:18 ` Jonathan Cameron via
2023-09-12 21:03 ` Fan Ni
2023-09-13 15:22 ` Dave Jiang
2023-09-04 16:18 ` [PATCH v2 2/3] hw/cxl: Add QTG _DSM support for ACPI0017 device Jonathan Cameron
2023-09-04 16:18 ` Jonathan Cameron via
2023-09-12 21:12 ` Fan Ni
2023-09-13 8:51 ` Jonathan Cameron [this message]
2023-09-13 8:51 ` Jonathan Cameron via
2023-10-04 9:04 ` Michael S. Tsirkin
2023-10-04 9:35 ` Jonathan Cameron
2023-10-04 9:35 ` Jonathan Cameron via
2023-09-04 16:18 ` [PATCH v2 3/3] tests/acpi: Update DSDT.cxl with QTG DSM Jonathan Cameron
2023-09-04 16:18 ` Jonathan Cameron via
2023-09-12 21:03 ` Fan Ni
2023-09-13 15:23 ` Dave Jiang
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20230913095152.00005053@Huawei.com \
--to=jonathan.cameron@huawei.com \
--cc=dave.jiang@intel.com \
--cc=fan.ni@samsung.com \
--cc=linux-cxl@vger.kernel.org \
--cc=linuxarm@huawei.com \
--cc=mst@redhat.com \
--cc=philmd@linaro.org \
--cc=qemu-devel@nongnu.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.