As an encoded version of these key configuration parameters is a register, provide functions to extract it again so as to avoid the need for duplicating the storage.
Signed-off-by: Jonathan Cameron <jonathan.came...@huawei.com> --- include/hw/cxl/cxl_component.h | 14 ++++++++++++++ hw/cxl/cxl-component-utils.c | 17 +++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/include/hw/cxl/cxl_component.h b/include/hw/cxl/cxl_component.h index 42c7e581a7..f0ad9cf7de 100644 --- a/include/hw/cxl/cxl_component.h +++ b/include/hw/cxl/cxl_component.h @@ -238,7 +238,21 @@ static inline int cxl_decoder_count_enc(int count) return 0; } +static inline int cxl_decoder_count_dec(int enc_cnt) +{ + switch (enc_cnt) { + case 0: return 1; + case 1: return 2; + case 2: return 4; + case 3: return 6; + case 4: return 8; + case 5: return 10; + } + return 0; +} + uint8_t cxl_interleave_ways_enc(int iw, Error **errp); +int cxl_interleave_ways_dec(uint8_t iw_enc, Error **errp); uint8_t cxl_interleave_granularity_enc(uint64_t gran, Error **errp); static inline hwaddr cxl_decode_ig(int ig) diff --git a/hw/cxl/cxl-component-utils.c b/hw/cxl/cxl-component-utils.c index 378f1082ce..e96398e8af 100644 --- a/hw/cxl/cxl-component-utils.c +++ b/hw/cxl/cxl-component-utils.c @@ -392,6 +392,23 @@ uint8_t cxl_interleave_ways_enc(int iw, Error **errp) } } +int cxl_interleave_ways_dec(uint8_t iw_enc, Error **errp) +{ + switch (iw_enc) { + case 0x0: return 1; + case 0x1: return 2; + case 0x2: return 4; + case 0x3: return 8; + case 0x4: return 16; + case 0x8: return 3; + case 0x9: return 6; + case 0xa: return 12; + default: + error_setg(errp, "Encoded interleave ways: %d not supported", iw_enc); + return 0; + } +} + uint8_t cxl_interleave_granularity_enc(uint64_t gran, Error **errp) { switch (gran) { -- 2.39.2