hdm.c (594ce0b8a998aa4d05827cd7c0d0dcec9a1e3ae2) | hdm.c (84328c5acebc10c8cdcf17283ab6c6d548885bfc) |
---|---|
1// SPDX-License-Identifier: GPL-2.0-only 2/* Copyright(c) 2022 Intel Corporation. All rights reserved. */ 3#include <linux/seq_file.h> 4#include <linux/device.h> 5#include <linux/delay.h> 6 7#include "cxlmem.h" 8#include "core.h" --- 38 unchanged lines hidden (view full) --- 47 * CXL region is enumerated / activated. 48 */ 49int devm_cxl_add_passthrough_decoder(struct cxl_port *port) 50{ 51 struct cxl_switch_decoder *cxlsd; 52 struct cxl_dport *dport = NULL; 53 int single_port_map[1]; 54 unsigned long index; | 1// SPDX-License-Identifier: GPL-2.0-only 2/* Copyright(c) 2022 Intel Corporation. All rights reserved. */ 3#include <linux/seq_file.h> 4#include <linux/device.h> 5#include <linux/delay.h> 6 7#include "cxlmem.h" 8#include "core.h" --- 38 unchanged lines hidden (view full) --- 47 * CXL region is enumerated / activated. 48 */ 49int devm_cxl_add_passthrough_decoder(struct cxl_port *port) 50{ 51 struct cxl_switch_decoder *cxlsd; 52 struct cxl_dport *dport = NULL; 53 int single_port_map[1]; 54 unsigned long index; |
55 struct cxl_hdm *cxlhdm = dev_get_drvdata(&port->dev); |
|
55 | 56 |
57 /* 58 * Capability checks are moot for passthrough decoders, support 59 * any and all possibilities. 60 */ 61 cxlhdm->interleave_mask = ~0U; 62 cxlhdm->iw_cap_mask = ~0UL; 63 |
|
56 cxlsd = cxl_switch_decoder_alloc(port, 1); 57 if (IS_ERR(cxlsd)) 58 return PTR_ERR(cxlsd); 59 60 device_lock_assert(&port->dev); 61 62 xa_for_each(&port->dports, index, dport) 63 break; --- 10 unchanged lines hidden (view full) --- 74 hdm_cap = readl(cxlhdm->regs.hdm_decoder + CXL_HDM_DECODER_CAP_OFFSET); 75 cxlhdm->decoder_count = cxl_hdm_decoder_count(hdm_cap); 76 cxlhdm->target_count = 77 FIELD_GET(CXL_HDM_DECODER_TARGET_COUNT_MASK, hdm_cap); 78 if (FIELD_GET(CXL_HDM_DECODER_INTERLEAVE_11_8, hdm_cap)) 79 cxlhdm->interleave_mask |= GENMASK(11, 8); 80 if (FIELD_GET(CXL_HDM_DECODER_INTERLEAVE_14_12, hdm_cap)) 81 cxlhdm->interleave_mask |= GENMASK(14, 12); | 64 cxlsd = cxl_switch_decoder_alloc(port, 1); 65 if (IS_ERR(cxlsd)) 66 return PTR_ERR(cxlsd); 67 68 device_lock_assert(&port->dev); 69 70 xa_for_each(&port->dports, index, dport) 71 break; --- 10 unchanged lines hidden (view full) --- 82 hdm_cap = readl(cxlhdm->regs.hdm_decoder + CXL_HDM_DECODER_CAP_OFFSET); 83 cxlhdm->decoder_count = cxl_hdm_decoder_count(hdm_cap); 84 cxlhdm->target_count = 85 FIELD_GET(CXL_HDM_DECODER_TARGET_COUNT_MASK, hdm_cap); 86 if (FIELD_GET(CXL_HDM_DECODER_INTERLEAVE_11_8, hdm_cap)) 87 cxlhdm->interleave_mask |= GENMASK(11, 8); 88 if (FIELD_GET(CXL_HDM_DECODER_INTERLEAVE_14_12, hdm_cap)) 89 cxlhdm->interleave_mask |= GENMASK(14, 12); |
90 cxlhdm->iw_cap_mask = BIT(1) | BIT(2) | BIT(4) | BIT(8); 91 if (FIELD_GET(CXL_HDM_DECODER_INTERLEAVE_3_6_12_WAY, hdm_cap)) 92 cxlhdm->iw_cap_mask |= BIT(3) | BIT(6) | BIT(12); 93 if (FIELD_GET(CXL_HDM_DECODER_INTERLEAVE_16_WAY, hdm_cap)) 94 cxlhdm->iw_cap_mask |= BIT(16); |
|
82} 83 84static bool should_emulate_decoders(struct cxl_endpoint_dvsec_info *info) 85{ 86 struct cxl_hdm *cxlhdm; 87 void __iomem *hdm; 88 u32 ctrl; 89 int i; --- 940 unchanged lines hidden --- | 95} 96 97static bool should_emulate_decoders(struct cxl_endpoint_dvsec_info *info) 98{ 99 struct cxl_hdm *cxlhdm; 100 void __iomem *hdm; 101 u32 ctrl; 102 int i; --- 940 unchanged lines hidden --- |