From: Dave Jiang <dave.jiang@intel.com>
To: Dan Williams <dan.j.williams@intel.com>, linux-cxl@vger.kernel.org
Cc: vishal.l.verma@intel.com, ira.weiny@intel.com,
alison.schofield@intel.com, Jonathan.Cameron@huawei.com
Subject: Re: [PATCH 2/3] cxl: Add CXL spec v3.0 interleave support
Date: Thu, 11 Aug 2022 16:19:07 -0700 [thread overview]
Message-ID: <638867f4-214b-eba3-6bf3-9aa4fb85fa53@intel.com> (raw)
In-Reply-To: <62f2895635e69_1f18b29456@dwillia2-xfh.jf.intel.com.notmuch>
On 8/9/2022 9:20 AM, Dan Williams wrote:
> Dave Jiang wrote:
>> CXL spec v3.0 added 2 CAP bits to the CXL HDM Decoder Capability Register.
>> CXL spec v3.0 8.2.4.19.1. Bit 11 indicates that 3, 6, and 12 way interleave
>> is capable. Bit 12 indicates that 16 way interleave is capable.
>>
>> Add code to parse_hdm_decoder_caps() to cache those new bits. Add check in
>> cxl_interleave_verify() call to make sure those CAP bits matches the passed
>> in interleave value.
>>
>> Signed-off-by: Dave Jiang <dave.jiang@intel.com>
>> ---
>> drivers/cxl/core/hdm.c | 4 ++++
>> drivers/cxl/cxl.h | 2 ++
>> drivers/cxl/cxlmem.h | 29 +++++++++++++++++++++++++++++
>> 3 files changed, 35 insertions(+)
>>
>> diff --git a/drivers/cxl/core/hdm.c b/drivers/cxl/core/hdm.c
>> index 8143e2615957..50ff7387e425 100644
>> --- a/drivers/cxl/core/hdm.c
>> +++ b/drivers/cxl/core/hdm.c
>> @@ -80,6 +80,10 @@ static void parse_hdm_decoder_caps(struct cxl_hdm *cxlhdm)
>> cxlhdm->interleave_mask |= GENMASK(11, 8);
>> if (FIELD_GET(CXL_HDM_DECODER_INTERLEAVE_14_12, hdm_cap))
>> cxlhdm->interleave_mask |= GENMASK(14, 12);
>> + if (FIELD_GET(CXL_HDM_DECODER_INTERLEAVE_3_6_12_WAY, hdm_cap))
>> + cxlhdm->interleave_3_6_12 = true;
>> + if (FIELD_GET(CXL_HDM_DECODER_INTERLEAVE_16_WAY, hdm_cap))
>> + cxlhdm->interleave_16 = true;
>> }
>>
>> static void __iomem *map_hdm_decoder_regs(struct cxl_port *port,
>> diff --git a/drivers/cxl/cxl.h b/drivers/cxl/cxl.h
>> index 275979fbd15a..db9631d09dd0 100644
>> --- a/drivers/cxl/cxl.h
>> +++ b/drivers/cxl/cxl.h
>> @@ -42,6 +42,8 @@
>> #define CXL_HDM_DECODER_TARGET_COUNT_MASK GENMASK(7, 4)
>> #define CXL_HDM_DECODER_INTERLEAVE_11_8 BIT(8)
>> #define CXL_HDM_DECODER_INTERLEAVE_14_12 BIT(9)
>> +#define CXL_HDM_DECODER_INTERLEAVE_3_6_12_WAY BIT(11)
>> +#define CXL_HDM_DECODER_INTERLEAVE_16_WAY BIT(12)
>> #define CXL_HDM_DECODER_CTRL_OFFSET 0x4
>> #define CXL_HDM_DECODER_ENABLE BIT(1)
>> #define CXL_HDM_DECODER0_BASE_LOW_OFFSET(i) (0x20 * (i) + 0x10)
>> diff --git a/drivers/cxl/cxlmem.h b/drivers/cxl/cxlmem.h
>> index d5f872ca62f9..9b4b23b3b78a 100644
>> --- a/drivers/cxl/cxlmem.h
>> +++ b/drivers/cxl/cxlmem.h
>> @@ -398,9 +398,35 @@ struct cxl_hdm {
>> unsigned int decoder_count;
>> unsigned int target_count;
>> unsigned int interleave_mask;
>> + bool interleave_3_6_12;
>> + bool interleave_16;
>> struct cxl_port *port;
>> };
>>
>> +static inline bool valid_interleave(struct cxl_hdm *cxlhdm, u8 iw)
>> +{
>> + switch (iw) {
>> + case CXL_INTERLEAVE_1_WAY:
>> + case CXL_INTERLEAVE_2_WAY:
>> + case CXL_INTERLEAVE_4_WAY:
>> + case CXL_INTERLEAVE_8_WAY:
>> + return true;
>> + case CXL_INTERLEAVE_16_WAY:
>> + if (!cxlhdm->interleave_16)
>> + return false;
>> + return true;
>> + case CXL_INTERLEAVE_3_WAY:
>> + case CXL_INTERLEAVE_6_WAY:
>> + case CXL_INTERLEAVE_12_WAY:
>> + if (!cxlhdm->interleave_3_6_12)
>> + return false;
>> + return true;
>> + default:
>> + };
>> +
>> + return false;
> I'd prefer something more compact like
>
> test_bit(iw, &port->interleave_cap)
>
> ...where interleave_cap is just a mask with bits 1,2,3,4,6,8,12,16
> optionally set.
ok
next prev parent reply other threads:[~2022-08-11 23:20 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-08-08 21:06 [PATCH 0/3] Add sanity check for interleave setup Dave Jiang
2022-08-08 21:06 ` [PATCH 1/3] cxl: Add check for result of interleave ways plus granularity combo Dave Jiang
2022-08-09 16:18 ` Dan Williams
2022-08-11 23:18 ` Dave Jiang
2022-08-09 17:06 ` Alison Schofield
2022-08-11 23:33 ` Dave Jiang
2022-08-08 21:07 ` [PATCH 2/3] cxl: Add CXL spec v3.0 interleave support Dave Jiang
2022-08-09 16:20 ` Dan Williams
2022-08-11 23:19 ` Dave Jiang [this message]
2022-08-08 21:07 ` [PATCH 3/3] tools/testing/cxl: Add interleave check support to mock cxl port device Dave Jiang
2022-08-09 16:21 ` Dan Williams
2022-08-11 23:22 ` 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=638867f4-214b-eba3-6bf3-9aa4fb85fa53@intel.com \
--to=dave.jiang@intel.com \
--cc=Jonathan.Cameron@huawei.com \
--cc=alison.schofield@intel.com \
--cc=dan.j.williams@intel.com \
--cc=ira.weiny@intel.com \
--cc=linux-cxl@vger.kernel.org \
--cc=vishal.l.verma@intel.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 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.