From: Fan Ni <fan.ni@gmx.us>
To: J?rgen Hansen <Jorgen.Hansen@wdc.com>
Cc: Fan Ni <fan.ni@samsung.com>,
"qemu-devel@nongnu.org" <qemu-devel@nongnu.org>,
"jonathan.cameron@huawei.com" <jonathan.cameron@huawei.com>,
"linux-cxl@vger.kernel.org" <linux-cxl@vger.kernel.org>,
"gregory.price@memverge.com" <gregory.price@memverge.com>,
"hchkuo@avery-design.com.tw" <hchkuo@avery-design.com.tw>,
"cbrowy@avery-design.com" <cbrowy@avery-design.com>,
"ira.weiny@intel.com" <ira.weiny@intel.com>,
"dan.j.williams@intel.com" <dan.j.williams@intel.com>,
Adam Manzanares <a.manzanares@samsung.com>,
"dave@stgolabs.net" <dave@stgolabs.net>,
"nmtadam.samsung@gmail.com" <nmtadam.samsung@gmail.com>,
"nifan@outlook.com" <nifan@outlook.com>
Subject: Re: [Qemu PATCH v2 6/9] hw/mem/cxl_type3: Add DC extent list representative and get DC extent list mailbox support
Date: Fri, 8 Sep 2023 10:12:58 -0700 [thread overview]
Message-ID: <ZPtWGqBCISsaDbY/@debian> (raw)
In-Reply-To: <ca63022b-0447-74b8-06fc-0e6d47455ebc@wdc.com>
On Fri, Sep 08, 2023 at 01:12:45PM +0000, J?rgen Hansen wrote:
> On 7/25/23 20:39, Fan Ni wrote:
> > From: Fan Ni <nifan@outlook.com>
> >
> > Add dynamic capacity extent list representative to the definition of
> > CXLType3Dev and add get DC extent list mailbox command per
> > CXL.spec.3.0:.8.2.9.8.9.2.
> >
> > Signed-off-by: Fan Ni <fan.ni@samsung.com>
> > ---
> > hw/cxl/cxl-mailbox-utils.c | 71 +++++++++++++++++++++++++++++++++++++
> > hw/mem/cxl_type3.c | 1 +
> > include/hw/cxl/cxl_device.h | 23 ++++++++++++
> > 3 files changed, 95 insertions(+)
> >
> > diff --git a/hw/cxl/cxl-mailbox-utils.c b/hw/cxl/cxl-mailbox-utils.c
> > index 0511b8e6f7..3d25a9697e 100644
> > --- a/hw/cxl/cxl-mailbox-utils.c
> > +++ b/hw/cxl/cxl-mailbox-utils.c
> > @@ -83,6 +83,7 @@ enum {
> > #define CLEAR_POISON 0x2
> > DCD_CONFIG = 0x48, /*r3.0: 8.2.9.8.9*/
> > #define GET_DC_CONFIG 0x0
> > + #define GET_DYN_CAP_EXT_LIST 0x1
> > PHYSICAL_SWITCH = 0x51
> > #define IDENTIFY_SWITCH_DEVICE 0x0
> > };
> > @@ -1018,6 +1019,73 @@ static CXLRetCode cmd_dcd_get_dyn_cap_config(struct cxl_cmd *cmd,
> > return CXL_MBOX_SUCCESS;
> > }
> >
> > +/*
> > + * cxl spec 3.0: 8.2.9.8.9.2
> > + * Get Dynamic Capacity Extent List (Opcode 4810h)
> > + */
> > +static CXLRetCode cmd_dcd_get_dyn_cap_ext_list(struct cxl_cmd *cmd,
> > + CXLDeviceState *cxl_dstate,
> > + uint16_t *len)
> > +{
> > + struct get_dyn_cap_ext_list_in_pl {
> > + uint32_t extent_cnt;
> > + uint32_t start_extent_id;
> > + } QEMU_PACKED;
> > +
> > + struct get_dyn_cap_ext_list_out_pl {
> > + uint32_t count;
> > + uint32_t total_extents;
> > + uint32_t generation_num;
> > + uint8_t rsvd[4];
> > + CXLDCExtent_raw records[];
> > + } QEMU_PACKED;
> > +
> > + struct get_dyn_cap_ext_list_in_pl *in = (void *)cmd->payload;
> > + struct get_dyn_cap_ext_list_out_pl *out = (void *)cmd->payload;
> > + struct CXLType3Dev *ct3d = container_of(cxl_dstate, CXLType3Dev,
> > + cxl_dstate);
> > + uint16_t record_count = 0, i = 0, record_done = 0;
> > + CXLDCDExtentList *extent_list = &ct3d->dc.extents;
> > + CXLDCD_Extent *ent;
> > + uint16_t out_pl_len;
> > + uint32_t start_extent_id = in->start_extent_id;
> > +
> > + if (start_extent_id > ct3d->dc.total_extent_count) {
> > + return CXL_MBOX_INVALID_INPUT;
> > + }
> > +
> > + record_count = MIN(in->extent_cnt,
> > + ct3d->dc.total_extent_count - start_extent_id);
> > +
> > + out_pl_len = sizeof(*out) + record_count * sizeof(out->records[0]);
> > + /* May need more processing here in the future */
> > + assert(out_pl_len <= CXL_MAILBOX_MAX_PAYLOAD_SIZE);
> > +
> > + memset(out, 0, out_pl_len);
> > + stl_le_p(&out->count, record_count);
> > + stl_le_p(&out->total_extents, ct3d->dc.total_extent_count);
> > + stl_le_p(&out->generation_num, ct3d->dc.ext_list_gen_seq);
> > +
> > + if (record_count > 0) {
> > + QTAILQ_FOREACH(ent, extent_list, node) {
> > + if (i++ < start_extent_id) {
> > + continue;
> > + }
> > + stq_le_p(&out->records[record_done].start_dpa, ent->start_dpa);
> > + stq_le_p(&out->records[record_done].len, ent->len);
> > + memcpy(&out->records[record_done].tag, ent->tag, 0x10);
> > + stw_le_p(&out->records[record_done].shared_seq, ent->shared_seq);
> > + record_done++;
> > + if (record_done == record_count) {
> > + break;
> > + }
> > + }
> > + }
> > +
> > + *len = out_pl_len;
> > + return CXL_MBOX_SUCCESS;
> > +}
> > +
> > #define IMMEDIATE_CONFIG_CHANGE (1 << 1)
> > #define IMMEDIATE_DATA_CHANGE (1 << 2)
> > #define IMMEDIATE_POLICY_CHANGE (1 << 3)
> > @@ -1058,6 +1126,9 @@ static struct cxl_cmd cxl_cmd_set[256][256] = {
> > cmd_media_clear_poison, 72, 0 },
> > [DCD_CONFIG][GET_DC_CONFIG] = { "DCD_GET_DC_CONFIG",
> > cmd_dcd_get_dyn_cap_config, 2, 0 },
> > + [DCD_CONFIG][GET_DYN_CAP_EXT_LIST] = {
> > + "DCD_GET_DYNAMIC_CAPACITY_EXTENT_LIST", cmd_dcd_get_dyn_cap_ext_list,
> > + 8, 0 },
> > };
> >
> > static struct cxl_cmd cxl_cmd_set_sw[256][256] = {
> > diff --git a/hw/mem/cxl_type3.c b/hw/mem/cxl_type3.c
> > index 76bbd9f785..f1170b8047 100644
> > --- a/hw/mem/cxl_type3.c
> > +++ b/hw/mem/cxl_type3.c
> > @@ -789,6 +789,7 @@ static int cxl_create_dc_regions(CXLType3Dev *ct3d)
> >
> > region_base += region->len;
> > }
> > + QTAILQ_INIT(&ct3d->dc.extents);
> >
> > return 0;
> > }
> > diff --git a/include/hw/cxl/cxl_device.h b/include/hw/cxl/cxl_device.h
> > index 1c99b05a66..3a338b3b37 100644
> > --- a/include/hw/cxl/cxl_device.h
> > +++ b/include/hw/cxl/cxl_device.h
> > @@ -385,6 +385,25 @@ typedef QLIST_HEAD(, CXLPoison) CXLPoisonList;
> >
> > #define DCD_MAX_REGION_NUM 8
> >
> > +typedef struct CXLDCD_Extent_raw {
> > + uint64_t start_dpa;
> > + uint64_t len;
> > + uint8_t tag[0x10];
> > + uint16_t shared_seq;
> > + uint8_t rsvd[0x6];
> > +} QEMU_PACKED CXLDCExtent_raw;
> > +
> > +typedef struct CXLDCD_Extent {
> > + uint64_t start_dpa;
> > + uint64_t len;
> > + uint8_t tag[0x10];
> > + uint16_t shared_seq;
> > + uint8_t rsvd[0x6];
> > +
> > + QTAILQ_ENTRY(CXLDCD_Extent) node;
> > +} CXLDCD_Extent;
> > +typedef QTAILQ_HEAD(, CXLDCD_Extent) CXLDCDExtentList;
> > +
> > typedef struct CXLDCD_Region {
> > uint64_t base;
> > uint64_t decode_len; /* in multiples of 256MB */
> > @@ -433,6 +452,10 @@ struct CXLType3Dev {
> >
> > uint8_t num_regions; /* 0-8 regions */
> > struct CXLDCD_Region regions[DCD_MAX_REGION_NUM];
> > + CXLDCDExtentList extents;
> > +
> > + uint32_t total_extent_count;
>
> Hi,
>
> I don't see total_extent_count being updated anywhere. Shouldn't this be
> adjusted as part of cmd_dcd_add_dyn_cap_rsp()/cmd_dcd_release_dyn_cap()?
>
> Thanks,
> Jorgen
Good catch. Thanks Jorgen, will fix in the next version.
Fan
>
>
> > + uint32_t ext_list_gen_seq;
> > } dc;
> > };
> >
> > --
> > 2.25.1
next prev parent reply other threads:[~2023-09-08 17:15 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
[not found] <CGME20230725183956uscas1p154e945516c2a4091479f4906d7652648@uscas1p1.samsung.com>
2023-07-25 18:39 ` [Qemu PATCH v2 0/9] Enabling DCD emulation support in Qemu Fan Ni
2023-07-25 18:39 ` [Qemu PATCH v2 2/9] hw/cxl/cxl-mailbox-utils: Add dynamic capacity region representative and mailbox command support Fan Ni
2023-08-04 15:24 ` Jonathan Cameron
2023-08-04 15:24 ` Jonathan Cameron via
2023-07-25 18:39 ` [Qemu PATCH v2 1/9] hw/cxl/cxl-mailbox-utils: Add dc_event_log_size field to output payload of identify memory device command Fan Ni
2023-08-04 14:19 ` Jonathan Cameron
2023-08-04 14:19 ` Jonathan Cameron via
2023-07-25 18:39 ` [Qemu PATCH v2 3/9] include/hw/cxl/cxl_device: Rename mem_size as static_mem_size for type3 memory devices Fan Ni
2023-08-04 15:27 ` Jonathan Cameron
2023-08-04 15:27 ` Jonathan Cameron via
2023-07-25 18:39 ` [Qemu PATCH v2 4/9] hw/mem/cxl_type3: Add support to create DC regions to " Fan Ni
2023-08-04 15:55 ` Jonathan Cameron
2023-08-04 15:55 ` Jonathan Cameron via
2023-07-25 18:39 ` [Qemu PATCH v2 7/9] hw/cxl/cxl-mailbox-utils: Add mailbox commands to support add/release dynamic capacity response Fan Ni
2023-08-07 11:42 ` Jonathan Cameron
2023-08-07 11:42 ` Jonathan Cameron via
2023-09-08 13:00 ` Jørgen Hansen
2023-09-08 17:19 ` Fan Ni
2023-07-25 18:39 ` [Qemu PATCH v2 9/9] hw/mem/cxl_type3: Add dpa range validation for accesses to dc regions Fan Ni
2023-08-07 8:53 ` Jonathan Cameron
2023-08-07 8:53 ` Jonathan Cameron via
2023-08-07 9:37 ` Jonathan Cameron
2023-08-07 9:37 ` Jonathan Cameron via
2023-08-24 20:49 ` Fan Ni
2023-08-25 11:42 ` Jonathan Cameron
2023-08-25 11:42 ` Jonathan Cameron via
2023-08-25 16:34 ` Fan Ni
2023-08-30 15:04 ` Jonathan Cameron
2023-08-30 15:04 ` Jonathan Cameron via
2023-08-30 12:08 ` Jørgen Hansen
2023-08-30 15:37 ` Jonathan Cameron
2023-08-30 15:37 ` Jonathan Cameron via
2023-07-25 18:39 ` [Qemu PATCH v2 6/9] hw/mem/cxl_type3: Add DC extent list representative and get DC extent list mailbox support Fan Ni
2023-08-07 11:55 ` Jonathan Cameron
2023-08-07 11:55 ` Jonathan Cameron via
2023-09-08 13:12 ` Jørgen Hansen
2023-09-08 17:12 ` Fan Ni [this message]
2023-07-25 18:39 ` [Qemu PATCH v2 5/9] hw/mem/cxl_type3: Add host backend and address space handling for DC regions Fan Ni
2023-07-26 12:53 ` Nathan Fontenot
2023-07-26 16:17 ` nifan
2023-08-04 16:36 ` Jonathan Cameron
2023-08-04 16:36 ` Jonathan Cameron via
2023-08-04 18:07 ` Gregory Price
2023-08-07 12:10 ` Jonathan Cameron
2023-08-07 12:10 ` Jonathan Cameron via
2023-07-25 18:39 ` [Qemu PATCH v2 8/9] hw/cxl/events: Add qmp interfaces to add/release dynamic capacity extents Fan Ni
2023-08-07 10:35 ` Jonathan Cameron
2023-08-07 10:35 ` Jonathan Cameron via
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=ZPtWGqBCISsaDbY/@debian \
--to=fan.ni@gmx.us \
--cc=Jorgen.Hansen@wdc.com \
--cc=a.manzanares@samsung.com \
--cc=cbrowy@avery-design.com \
--cc=dan.j.williams@intel.com \
--cc=dave@stgolabs.net \
--cc=fan.ni@samsung.com \
--cc=gregory.price@memverge.com \
--cc=hchkuo@avery-design.com.tw \
--cc=ira.weiny@intel.com \
--cc=jonathan.cameron@huawei.com \
--cc=linux-cxl@vger.kernel.org \
--cc=nifan@outlook.com \
--cc=nmtadam.samsung@gmail.com \
--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.