From: "Michael S. Tsirkin" <mst@redhat.com>
To: Dave Jiang <dave.jiang@intel.com>
Cc: thuth@redhat.com, qemu-devel@nongnu.org,
peter.maydell@linaro.org, Jonathan.Cameron@huawei.com,
imammedo@redhat.com, anisinha@redhat.com,
marcel.apfelbaum@gmail.com, pbonzini@redhat.com,
richard.henderson@linaro.org, eduardo@habkost.net
Subject: Re: [PATCH v3] hw/cxl: Add QTG _DSM support for ACPI0017 device
Date: Thu, 5 Oct 2023 12:32:11 -0400 [thread overview]
Message-ID: <20231005122736-mutt-send-email-mst@kernel.org> (raw)
In-Reply-To: <12874c03-7de0-474f-9378-7d3ab8572d8d@intel.com>
On Thu, Oct 05, 2023 at 09:11:15AM -0700, Dave Jiang wrote:
>
>
> On 10/4/23 20:36, Michael S. Tsirkin wrote:
> >
> > On Wed, Oct 04, 2023 at 04:09:07PM -0700, Dave Jiang wrote:
> >> 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.
> >
> >
> > the enabling -> this
>
> will update
> >
> >>
> >> Following edited for readbility only
> >
> > readbility only -> readability
>
> will update
> >
> >
> >>
> >> 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>
> >>
> >> --
> >> v3: Fix output assignment to be BE host friendly. Fix typo in comment.
> >> According to the CXL spec, the DSM output should be 1 WORD to indicate
> >> the max suppoted QTG ID and a package of 0 or more WORDs for the QTG IDs.
> >> In this dummy impementation, we have first WORD with a 1 to indcate max
> >> supprted QTG ID of 1. And second WORD in a package to indicate the QTG
> >> ID of 0.
> >>
> >> v2: Minor edit to drop reference to switches in patch description.
> >> Message-Id: <20230904161847.18468-3-Jonathan.Cameron@huawei.com>
> >> Reviewed-by: Michael S. Tsirkin <mst@redhat.com>
> >> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
> >> ---
> >> hw/acpi/cxl.c | 55 +++++++++++++++++++++++++++++++++++++++++++++++++
> >> hw/i386/acpi-build.c | 1 +
> >> include/hw/acpi/cxl.h | 1 +
> >> 3 files changed, 57 insertions(+)
> >>
> >> diff --git a/hw/acpi/cxl.c b/hw/acpi/cxl.c
> >> index 92b46bc9323b..cce12d5bc81c 100644
> >> --- a/hw/acpi/cxl.c
> >> +++ b/hw/acpi/cxl.c
> >> @@ -30,6 +30,61 @@
> >> #include "qapi/error.h"
> >> #include "qemu/uuid.h"
> >>
> >> +void build_cxl_dsm_method(Aml *dev)
> >> +{
> >> + 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 *
> >
> >
> > drop this * please
> >
> >> , QTG ID _DSM
>
> Ooops. git format-patch mangled this and I didn't catch. Will fix
>
> >
> >
> > this is not the name of this paragraph. pls make it match
> > exactly so people can search
> >
> >> */
> >> + 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 */
> >
> > function 1?
>
> Yes, will fix
>
> >
> >> +
> >> + aml_append(ifctx2,
> >> + aml_return(aml_buffer(sizeof(byte_list), byte_list)));
> >> + }
> >> + aml_append(ifctx, ifctx2);
> >> +
> >> + /*
> >> + * Function 1
> >> + * A return value of {1, {0}} indicates that
> >> + * max supported QTG ID of 1 and recommended QTG is 0.
> >> + * The values here are faked to simplify emulation.
> >
> > again pls quote spec directly do not paraphrase
>
> Here it's not paraphrasing from the spec. I'm just describing the dummy value that will be provided.
>
> >
> >> + */
> >> + ifctx2 = aml_if(aml_equal(function, aml_int(1)));
> >> + {
> >> + uint16_t word_list = cpu_to_le16(1);
> >> + uint16_t word_list2 = 0;
> >> + 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.
> >
> >
> >
> > pls quote the spec directly
>
> Will do.
>
> >
> > what does "a WORD" mean is unclear - do you match what hardware does
> > when you use aml_buffer? pls mention this in commit log, and
> > show actual hardware dump for comparison.
> The CXL spec says WORD without much qualification. It's a 16bit value AFAICT. I'll add additional comment. Currently I do not have access to actual hardware unfortunately. I'm constructing this purely based on spec description.
It's not clear buffer is actually word though.
Jonathan do you have hardware access?
Also, possible to get clarification from the spec committee?
>
> >
> >
> >> + */
> >> + pak1 = aml_package(1);
> >> + aml_append(pak1, aml_buffer(sizeof(uint16_t), word_list2));
> >> + pak = aml_package(2);
> >> + aml_append(pak, aml_buffer(sizeof(uint16_t), word_list));
> >
> >
> > It does not look like this patch compiles.
> >
> > So how did you test it?
> >
> > Please do not post untested patches.
> >
> > If you do at least minimal testing
> > you would also see failures in bios table test
> > and would follow the procedure described there to
> > post it.
>
> Sorry about that. I compiled successfully but did not test.
I don't see how it can compile either. In fact I just applied and build
fails.
> The following chunk is tested. However, is it the correct way to do this? The comment is direct spec verbiage. I'm not familiar with constructing ACPI tables in QEMU and tried my best by looking at other ACPI code in QEMU.
To do what? create a buffer with a two byte word?
For example:
word = aml_buffer(0, NULL);
build_append_int_noprefix(word->buf, 2, 0x1);
but again it is not clear at all what does spec mean.
an integer up to 0xfffff? a buffer as you did? just two bytes?
could be any of these.
>
> + ifctx2 = aml_if(aml_equal(function, aml_int(1)));
> + {
> + uint16_t max_id = cpu_to_le16(1);
> + uint16_t qtg_id = 0;
> + Aml *pak, *pak1;
> +
> + /*
> + * Return: A package containing two elements - a WORD that returns
> + * the maximum throttling group that the platform supports, and a
> + * package containing the QTG ID(s) that the platform recommends.
> + * Package {
> + * Max Supported QTG ID
> + * Package {QTG Recommendations}
> + * }
> + */
> + pak1 = aml_package(1);
> + aml_append(pak1, aml_buffer(sizeof(uint16_t), (uint8_t *)&qtg_id));
> + pak = aml_package(2);
> + aml_append(pak, aml_buffer(sizeof(uint16_t), (uint8_t *)&max_id));
> + aml_append(pak, pak1);
> +
> + aml_append(ifctx2, aml_return(pak));
> + }
>
>
> >
> >
> > When you post next version please also document how the patch
> > was tested: which guests, what tests, what were the results.
> >
> > thanks!
> >
> >> + 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 95199c89008a..692af40b1a75 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);
> >> diff --git a/include/hw/acpi/cxl.h b/include/hw/acpi/cxl.h
> >> index acf441888683..8f22c71530d8 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
> >>
> >
next prev parent reply other threads:[~2023-10-05 16:32 UTC|newest]
Thread overview: 99+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-04 8:43 [PULL 00/63] virtio,pci: features, cleanups Michael S. Tsirkin
2023-10-04 8:43 ` [PULL 01/63] pci: SLT must be RO Michael S. Tsirkin
2023-10-04 8:43 ` [PULL 02/63] hw/virtio: Propagate page_mask to vhost_vdpa_listener_skipped_section() Michael S. Tsirkin
2023-10-04 8:43 ` [PULL 03/63] hw/virtio: Propagate page_mask to vhost_vdpa_section_end() Michael S. Tsirkin
2023-10-04 8:43 ` [PULL 04/63] hw/virtio/vhost-vdpa: Inline TARGET_PAGE_ALIGN() macro Michael S. Tsirkin
2023-10-04 8:43 ` [PULL 05/63] hw/virtio/vhost-vdpa: Use target-agnostic qemu_target_page_mask() Michael S. Tsirkin
2023-10-04 8:43 ` [PULL 06/63] hw/virtio: Build vhost-vdpa.o once Michael S. Tsirkin
2023-10-04 8:43 ` [PULL 07/63] hw/virtio/meson: Rename softmmu_virtio_ss[] -> system_virtio_ss[] Michael S. Tsirkin
2023-10-04 8:43 ` [PULL 08/63] virtio: add vhost-user-base and a generic vhost-user-device Michael S. Tsirkin
2023-10-04 8:43 ` [PULL 09/63] hw/virtio: add config support to vhost-user-device Michael S. Tsirkin
2023-10-04 8:43 ` [PULL 10/63] virtio-net: do not reset vlan filtering at set_features Michael S. Tsirkin
2023-10-04 8:43 ` [PULL 11/63] virtio-net: Expose MAX_VLAN Michael S. Tsirkin
2023-10-04 8:43 ` [PULL 12/63] vdpa: Restore vlan filtering state Michael S. Tsirkin
2023-10-04 8:43 ` [PULL 13/63] vdpa: Allow VIRTIO_NET_F_CTRL_VLAN in SVQ Michael S. Tsirkin
2023-10-04 8:43 ` [PULL 14/63] virtio: don't zero out memory region cache for indirect descriptors Michael S. Tsirkin
2023-10-04 8:43 ` [PULL 15/63] vdpa: use first queue SVQ state for CVQ default Michael S. Tsirkin
2023-10-04 8:43 ` [PULL 16/63] vdpa: export vhost_vdpa_set_vring_ready Michael S. Tsirkin
2023-10-04 8:44 ` [PULL 17/63] vdpa: rename vhost_vdpa_net_load to vhost_vdpa_net_cvq_load Michael S. Tsirkin
2023-10-04 8:44 ` [PULL 18/63] vdpa: move vhost_vdpa_set_vring_ready to the caller Michael S. Tsirkin
2023-10-04 8:44 ` [PULL 19/63] vdpa: remove net cvq migration blocker Michael S. Tsirkin
2023-10-04 8:44 ` [PULL 20/63] vhost: Add count argument to vhost_svq_poll() Michael S. Tsirkin
2023-10-04 8:44 ` [PULL 21/63] qmp: remove virtio_list, search QOM tree instead Michael S. Tsirkin
2023-10-04 8:44 ` [PULL 22/63] qmp: update virtio feature maps, vhost-user-gpio introspection Michael S. Tsirkin
2023-10-04 8:44 ` [PULL 23/63] vhost-user: move VhostUserProtocolFeature definition to header file Michael S. Tsirkin
2023-10-04 8:44 ` [PULL 24/63] vhost-user: strip superfluous whitespace Michael S. Tsirkin
2023-10-04 8:44 ` [PULL 25/63] vhost-user: tighten "reply_supported" scope in "set_vring_addr" Michael S. Tsirkin
2023-10-04 8:44 ` [PULL 26/63] vhost-user: factor out "vhost_user_write_sync" Michael S. Tsirkin
2023-10-04 8:44 ` [PULL 27/63] vhost-user: flatten "enforce_reply" into "vhost_user_write_sync" Michael S. Tsirkin
2023-10-04 8:44 ` [PULL 28/63] vhost-user: hoist "write_sync", "get_features", "get_u64" Michael S. Tsirkin
2023-10-04 8:44 ` [PULL 29/63] vhost-user: allow "vhost_set_vring" to wait for a reply Michael S. Tsirkin
2023-10-04 8:44 ` [PULL 30/63] vhost-user: call VHOST_USER_SET_VRING_ENABLE synchronously Michael S. Tsirkin
2023-10-04 10:11 ` Laszlo Ersek
2023-10-04 12:53 ` Michael S. Tsirkin
2023-10-04 13:28 ` Laszlo Ersek
2023-10-04 8:44 ` [PULL 31/63] hw/isa/ich9: Add comment on imperfect emulation of PIC vs. I/O APIC routing Michael S. Tsirkin
2023-10-04 8:44 ` [PULL 32/63] tests/acpi: Allow update of DSDT.cxl Michael S. Tsirkin
2023-10-04 8:44 ` [PULL 33/63] hw/cxl: Add QTG _DSM support for ACPI0017 device Michael S. Tsirkin
2023-10-04 17:46 ` Thomas Huth
2023-10-04 22:14 ` Michael S. Tsirkin
2023-10-04 23:09 ` [PATCH v3] " Dave Jiang
2023-10-05 3:36 ` Michael S. Tsirkin
2023-10-05 16:11 ` Dave Jiang
2023-10-05 16:32 ` Michael S. Tsirkin [this message]
2023-10-06 12:09 ` Jonathan Cameron via
2023-10-06 12:09 ` Jonathan Cameron
2023-10-06 17:50 ` Dan Williams
2023-10-06 22:15 ` [PATCH v4] " Dave Jiang
2023-10-09 15:47 ` Jonathan Cameron via
2023-10-09 15:47 ` Jonathan Cameron
2023-10-09 16:06 ` Dave Jiang
2023-10-09 15:44 ` [PATCH v3] " Jonathan Cameron via
2023-10-09 15:44 ` Jonathan Cameron
2023-10-07 21:17 ` Michael S. Tsirkin
2023-10-09 15:40 ` Jonathan Cameron via
2023-10-09 15:40 ` Jonathan Cameron
2023-10-05 17:00 ` Michael S. Tsirkin
2023-10-04 8:44 ` [PULL 34/63] tests/acpi: Update DSDT.cxl with QTG DSM Michael S. Tsirkin
2023-10-04 8:44 ` [PULL 35/63] hw/i386/acpi-build: Use pc_madt_cpu_entry() directly Michael S. Tsirkin
2023-10-04 8:45 ` [PULL 36/63] hw/acpi/cpu: Have build_cpus_aml() take a build_madt_cpu_fn callback Michael S. Tsirkin
2023-10-04 8:45 ` [PULL 37/63] hw/acpi/acpi_dev_interface: Remove now unused madt_cpu virtual method Michael S. Tsirkin
2023-10-04 8:45 ` [PULL 38/63] hw/acpi/acpi_dev_interface: Remove now unused #include "hw/boards.h" Michael S. Tsirkin
2023-10-04 8:45 ` [PULL 39/63] hw/i386: Remove now redundant TYPE_ACPI_GED_X86 Michael S. Tsirkin
2023-10-04 8:45 ` [PULL 40/63] hw/i386/acpi-build: Determine SMI command port just once Michael S. Tsirkin
2023-10-04 8:45 ` [PULL 41/63] hw/acpi: Trace GPE access in all device models, not just PIIX4 Michael S. Tsirkin
2023-10-04 8:45 ` [PULL 42/63] hw/acpi/core: Trace enable and status registers of GPE separately Michael S. Tsirkin
2023-10-04 8:45 ` [PULL 43/63] vdpa: fix gcc cvq_isolated uninitialized variable warning Michael S. Tsirkin
2023-10-04 8:45 ` [PULL 44/63] vdpa net: zero vhost_vdpa iova_tree pointer at cleanup Michael S. Tsirkin
2023-10-04 8:45 ` [PULL 45/63] hw/cxl: Push cxl_decoder_count_enc() and cxl_decode_ig() into .c Michael S. Tsirkin
2023-10-04 8:45 ` [PULL 46/63] hw/cxl: Add utility functions decoder interleave ways and target count Michael S. Tsirkin
2023-10-04 8:45 ` [PULL 47/63] hw/cxl: Fix and use same calculation for HDM decoder block size everywhere Michael S. Tsirkin
2023-10-04 8:45 ` [PULL 48/63] hw/cxl: Support 4 HDM decoders at all levels of topology Michael S. Tsirkin
2023-10-04 8:45 ` [PULL 49/63] hw/pci-bridge/cxl-upstream: Add serial number extended capability support Michael S. Tsirkin
2023-10-04 8:45 ` [PULL 50/63] vdpa net: fix error message setting virtio status Michael S. Tsirkin
2023-10-04 8:45 ` [PULL 51/63] vdpa net: stop probing if cannot set features Michael S. Tsirkin
2023-10-04 8:45 ` [PULL 52/63] vdpa net: follow VirtIO initialization properly at cvq isolation probing Michael S. Tsirkin
2023-10-04 8:46 ` [PULL 53/63] amd_iommu: Fix APIC address check Michael S. Tsirkin
2023-10-04 8:46 ` [PULL 54/63] hw/i386/pc: improve physical address space bound check for 32-bit x86 systems Michael S. Tsirkin
2023-10-04 8:46 ` [PULL 55/63] pcie_sriov: unregister_vfs(): fix error path Michael S. Tsirkin
2023-10-04 8:46 ` [PULL 56/63] libvhost-user.c: add assertion to vu_message_read_default Michael S. Tsirkin
2023-10-04 8:46 ` [PULL 57/63] virtio: use shadow_avail_idx while checking number of heads Michael S. Tsirkin
2023-10-04 8:46 ` [PULL 58/63] virtio: remove unnecessary thread fence while reading next descriptor Michael S. Tsirkin
2023-10-04 8:46 ` [PULL 59/63] virtio: remove unused next argument from virtqueue_split_read_next_desc() Michael S. Tsirkin
2023-10-04 8:46 ` [PULL 60/63] util/uuid: add a hash function Michael S. Tsirkin
2023-10-04 8:46 ` [PULL 61/63] hw/display: introduce virtio-dmabuf Michael S. Tsirkin
2023-10-04 8:46 ` [PULL 62/63] vhost-user: add shared_object msg Michael S. Tsirkin
2023-10-04 8:46 ` [PULL 63/63] libvhost-user: handle " Michael S. Tsirkin
2023-10-04 8:54 ` [PULL 00/63] virtio,pci: features, cleanups Philippe Mathieu-Daudé
2023-10-04 9:08 ` Michael S. Tsirkin
2023-10-04 8:58 ` Michael S. Tsirkin
2023-10-04 16:26 ` Michael S. Tsirkin
2023-10-04 16:50 ` Stefan Hajnoczi
2023-10-04 17:04 ` Michael S. Tsirkin
2023-10-04 17:40 ` Thomas Huth
2023-10-04 22:23 ` Michael S. Tsirkin
2023-10-05 6:10 ` Thomas Huth
2023-10-04 18:23 ` Stefan Hajnoczi
2023-10-04 17:20 ` Michael S. Tsirkin
2023-10-04 18:29 ` Stefan Hajnoczi
2023-10-04 22:16 ` Michael S. Tsirkin
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=20231005122736-mutt-send-email-mst@kernel.org \
--to=mst@redhat.com \
--cc=Jonathan.Cameron@huawei.com \
--cc=anisinha@redhat.com \
--cc=dave.jiang@intel.com \
--cc=eduardo@habkost.net \
--cc=imammedo@redhat.com \
--cc=marcel.apfelbaum@gmail.com \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=thuth@redhat.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).