Skip to content

Commit

Permalink
cxl: Setup exclusive CXL features that are reserved for the kernel
Browse files Browse the repository at this point in the history
Certain features will be exclusively used by components such as in
kernel RAS driver. Setup an exclusion list that can be used to detect
if a feature is exclusive to the kernel.

Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Reviewed-by: Dan Williams <dan.j.williams@intel.com>
Reviewed-by: Li Ming <ming.li@zohomail.com>
Tested-by: Shiju Jose <shiju.jose@huawei.com>
Link: https://patch.msgid.link/20250220194438.2281088-7-dave.jiang@intel.com
Signed-off-by: Dave Jiang <dave.jiang@intel.com>
  • Loading branch information
Dave Jiang committed Feb 26, 2025
1 parent 14d502c commit a8b773f
Show file tree
Hide file tree
Showing 2 changed files with 62 additions and 0 deletions.
28 changes: 28 additions & 0 deletions drivers/cxl/core/features.c
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,28 @@
#include "core.h"
#include "cxlmem.h"

/* All the features below are exclusive to the kernel */
static const uuid_t cxl_exclusive_feats[] = {
CXL_FEAT_PATROL_SCRUB_UUID,
CXL_FEAT_ECS_UUID,
CXL_FEAT_SPPR_UUID,
CXL_FEAT_HPPR_UUID,
CXL_FEAT_CACHELINE_SPARING_UUID,
CXL_FEAT_ROW_SPARING_UUID,
CXL_FEAT_BANK_SPARING_UUID,
CXL_FEAT_RANK_SPARING_UUID,
};

static bool is_cxl_feature_exclusive(struct cxl_feat_entry *entry)
{
for (int i = 0; i < ARRAY_SIZE(cxl_exclusive_feats); i++) {
if (uuid_equal(&entry->uuid, &cxl_exclusive_feats[i]))
return true;
}

return false;
}

inline struct cxl_features_state *to_cxlfs(struct cxl_dev_state *cxlds)
{
return cxlds->cxlfs;
Expand Down Expand Up @@ -47,6 +69,7 @@ get_supported_features(struct cxl_features_state *cxlfs)
struct cxl_mbox_get_sup_feats_in mbox_in;
struct cxl_feat_entry *entry;
struct cxl_mbox_cmd mbox_cmd;
int user_feats = 0;
int count;

count = cxl_get_supported_features_count(cxl_mbox);
Expand Down Expand Up @@ -121,6 +144,10 @@ get_supported_features(struct cxl_features_state *cxlfs)
return NULL;

memcpy(entry, mbox_out->ents, retrieved);
for (int i = 0; i < num_entries; i++) {
if (!is_cxl_feature_exclusive(entry + i))
user_feats++;
}
entry += num_entries;
/*
* If the number of output entries is less than expected, add the
Expand All @@ -131,6 +158,7 @@ get_supported_features(struct cxl_features_state *cxlfs)
} while (remain_feats);

entries->num_features = count;
entries->num_user_features = user_feats;

return no_free_ptr(entries);
}
Expand Down
34 changes: 34 additions & 0 deletions include/cxl/features.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,39 @@

#include <linux/uuid.h>

/* Feature UUIDs used by the kernel */
#define CXL_FEAT_PATROL_SCRUB_UUID \
UUID_INIT(0x96dad7d6, 0xfde8, 0x482b, 0xa7, 0x33, 0x75, 0x77, 0x4e, \
0x06, 0xdb, 0x8a)

#define CXL_FEAT_ECS_UUID \
UUID_INIT(0xe5b13f22, 0x2328, 0x4a14, 0xb8, 0xba, 0xb9, 0x69, 0x1e, \
0x89, 0x33, 0x86)

#define CXL_FEAT_SPPR_UUID \
UUID_INIT(0x892ba475, 0xfad8, 0x474e, 0x9d, 0x3e, 0x69, 0x2c, 0x91, \
0x75, 0x68, 0xbb)

#define CXL_FEAT_HPPR_UUID \
UUID_INIT(0x80ea4521, 0x786f, 0x4127, 0xaf, 0xb1, 0xec, 0x74, 0x59, \
0xfb, 0x0e, 0x24)

#define CXL_FEAT_CACHELINE_SPARING_UUID \
UUID_INIT(0x96C33386, 0x91dd, 0x44c7, 0x9e, 0xcb, 0xfd, 0xaf, 0x65, \
0x03, 0xba, 0xc4)

#define CXL_FEAT_ROW_SPARING_UUID \
UUID_INIT(0x450ebf67, 0xb135, 0x4f97, 0xa4, 0x98, 0xc2, 0xd5, 0x7f, \
0x27, 0x9b, 0xed)

#define CXL_FEAT_BANK_SPARING_UUID \
UUID_INIT(0x78b79636, 0x90ac, 0x4b64, 0xa4, 0xef, 0xfa, 0xac, 0x5d, \
0x18, 0xa8, 0x63)

#define CXL_FEAT_RANK_SPARING_UUID \
UUID_INIT(0x34dbaff5, 0x0552, 0x4281, 0x8f, 0x76, 0xda, 0x0b, 0x5e, \
0x7a, 0x76, 0xa7)

/* Feature commands capability supported by a device */
enum cxl_features_capability {
CXL_FEATURES_NONE = 0,
Expand Down Expand Up @@ -134,6 +167,7 @@ struct cxl_features_state {
struct cxl_dev_state *cxlds;
struct cxl_feat_entries {
int num_features;
int num_user_features;
struct cxl_feat_entry ent[] __counted_by(num_features);
} *entries;
};
Expand Down

0 comments on commit a8b773f

Please sign in to comment.