Lines Matching refs:cxled

217 static void __cxl_dpa_release(struct cxl_endpoint_decoder *cxled)
219 struct cxl_memdev *cxlmd = cxled_to_memdev(cxled);
220 struct cxl_port *port = cxled_to_port(cxled);
222 struct resource *res = cxled->dpa_res;
228 skip_start = res->start - cxled->skip;
230 if (cxled->skip)
231 __release_region(&cxlds->dpa_res, skip_start, cxled->skip);
232 cxled->skip = 0;
233 cxled->dpa_res = NULL;
234 put_device(&cxled->cxld.dev);
238 static void cxl_dpa_release(void *cxled)
241 __cxl_dpa_release(cxled);
249 static void devm_cxl_dpa_release(struct cxl_endpoint_decoder *cxled)
251 struct cxl_port *port = cxled_to_port(cxled);
254 devm_remove_action(&port->dev, cxl_dpa_release, cxled);
255 __cxl_dpa_release(cxled);
258 static int __cxl_dpa_reserve(struct cxl_endpoint_decoder *cxled,
262 struct cxl_memdev *cxlmd = cxled_to_memdev(cxled);
263 struct cxl_port *port = cxled_to_port(cxled);
272 port->id, cxled->cxld.id);
276 if (cxled->dpa_res) {
278 port->id, cxled->cxld.id, cxled->dpa_res);
282 if (port->hdm_end + 1 != cxled->cxld.id) {
290 cxled->cxld.id, port->id, port->hdm_end + 1);
296 dev_name(&cxled->cxld.dev), 0);
300 port->id, cxled->cxld.id);
305 dev_name(&cxled->cxld.dev), 0);
308 port->id, cxled->cxld.id);
314 cxled->dpa_res = res;
315 cxled->skip = skipped;
318 cxled->mode = CXL_DECODER_PMEM;
320 cxled->mode = CXL_DECODER_RAM;
323 port->id, cxled->cxld.id, cxled->dpa_res);
324 cxled->mode = CXL_DECODER_MIXED;
328 get_device(&cxled->cxld.dev);
332 int devm_cxl_dpa_reserve(struct cxl_endpoint_decoder *cxled,
336 struct cxl_port *port = cxled_to_port(cxled);
340 rc = __cxl_dpa_reserve(cxled, base, len, skipped);
346 return devm_add_action_or_reset(&port->dev, cxl_dpa_release, cxled);
350 resource_size_t cxl_dpa_size(struct cxl_endpoint_decoder *cxled)
355 if (cxled->dpa_res)
356 size = resource_size(cxled->dpa_res);
362 resource_size_t cxl_dpa_resource_start(struct cxl_endpoint_decoder *cxled)
367 if (cxled->dpa_res)
368 base = cxled->dpa_res->start;
373 int cxl_dpa_free(struct cxl_endpoint_decoder *cxled)
375 struct cxl_port *port = cxled_to_port(cxled);
376 struct device *dev = &cxled->cxld.dev;
380 if (!cxled->dpa_res) {
384 if (cxled->cxld.region) {
386 dev_name(&cxled->cxld.region->dev));
390 if (cxled->cxld.flags & CXL_DECODER_F_ENABLE) {
395 if (cxled->cxld.id != port->hdm_end) {
401 devm_cxl_dpa_release(cxled);
408 int cxl_dpa_set_mode(struct cxl_endpoint_decoder *cxled,
411 struct cxl_memdev *cxlmd = cxled_to_memdev(cxled);
413 struct device *dev = &cxled->cxld.dev;
426 if (cxled->cxld.flags & CXL_DECODER_F_ENABLE) {
446 cxled->mode = mode;
454 int cxl_dpa_alloc(struct cxl_endpoint_decoder *cxled, unsigned long long size)
456 struct cxl_memdev *cxlmd = cxled_to_memdev(cxled);
458 struct cxl_port *port = cxled_to_port(cxled);
460 struct device *dev = &cxled->cxld.dev;
466 if (cxled->cxld.region) {
468 dev_name(&cxled->cxld.region->dev));
473 if (cxled->cxld.flags & CXL_DECODER_F_ENABLE) {
493 if (cxled->mode == CXL_DECODER_RAM) {
497 } else if (cxled->mode == CXL_DECODER_PMEM) {
522 cxl_decoder_mode_name(cxled->mode), &avail);
527 rc = __cxl_dpa_reserve(cxled, start, size, skip);
534 return devm_add_action_or_reset(&port->dev, cxl_dpa_release, cxled);
639 struct cxl_endpoint_decoder *cxled =
641 struct cxl_memdev *cxlmd = cxled_to_memdev(cxled);
677 struct cxl_endpoint_decoder *cxled =
682 writel(upper_32_bits(cxled->skip), sk_hi);
683 writel(lower_32_bits(cxled->skip), sk_lo);
736 struct cxl_endpoint_decoder *cxled;
738 cxled = to_cxl_endpoint_decoder(&cxld->dev);
739 cxled->state = CXL_DECODER_STATE_MANUAL;
749 struct cxl_endpoint_decoder *cxled;
756 cxled = to_cxl_endpoint_decoder(&cxld->dev);
773 rc = devm_cxl_dpa_reserve(cxled, *dpa_base, len, 0);
781 cxled->state = CXL_DECODER_STATE_AUTO;
790 struct cxl_endpoint_decoder *cxled = NULL;
825 cxled = to_cxl_endpoint_decoder(&cxld->dev);
857 if (cxled) {
858 struct cxl_memdev *cxlmd = cxled_to_memdev(cxled);
901 if (!cxled) {
924 rc = devm_cxl_dpa_reserve(cxled, *dpa_base + skip, dpa_size, skip);
934 cxled->state = CXL_DECODER_STATE_AUTO;
987 struct cxl_endpoint_decoder *cxled;
989 cxled = cxl_endpoint_decoder_alloc(port);
990 if (IS_ERR(cxled)) {
994 return PTR_ERR(cxled);
996 cxld = &cxled->cxld;