Lines Matching refs:dmc
71 return i915->display.dmc.dmc; in i915_to_dmc()
298 struct intel_dmc *dmc = i915_to_dmc(i915); in has_dmc_id_fw() local
300 return dmc && dmc->dmc_info[dmc_id].payload; in has_dmc_id_fw()
507 struct intel_dmc *dmc = i915_to_dmc(i915); in intel_dmc_load_program() local
523 for (i = 0; i < dmc->dmc_info[dmc_id].dmc_fw_size; i++) { in intel_dmc_load_program()
525 DMC_PROGRAM(dmc->dmc_info[dmc_id].start_mmioaddr, i), in intel_dmc_load_program()
526 dmc->dmc_info[dmc_id].payload[i]); in intel_dmc_load_program()
533 for (i = 0; i < dmc->dmc_info[dmc_id].mmio_count; i++) { in intel_dmc_load_program()
534 intel_de_write(i915, dmc->dmc_info[dmc_id].mmioaddr[i], in intel_dmc_load_program()
535 dmc->dmc_info[dmc_id].mmiodata[i]); in intel_dmc_load_program()
572 struct intel_dmc *dmc = i915_to_dmc(i915); in assert_dmc_loaded() local
574 drm_WARN_ONCE(&i915->drm, !dmc, "DMC not initialized\n"); in assert_dmc_loaded()
575 drm_WARN_ONCE(&i915->drm, dmc && in assert_dmc_loaded()
576 !intel_de_read(i915, DMC_PROGRAM(dmc->dmc_info[DMC_FW_MAIN].start_mmioaddr, 0)), in assert_dmc_loaded()
605 static void dmc_set_fw_offset(struct intel_dmc *dmc, in dmc_set_fw_offset() argument
611 struct drm_i915_private *i915 = dmc->i915; in dmc_set_fw_offset()
627 if (dmc->dmc_info[dmc_id].present) in dmc_set_fw_offset()
631 dmc->dmc_info[dmc_id].present = true; in dmc_set_fw_offset()
632 dmc->dmc_info[dmc_id].dmc_offset = fw_info[i].offset; in dmc_set_fw_offset()
637 static bool dmc_mmio_addr_sanity_check(struct intel_dmc *dmc, in dmc_mmio_addr_sanity_check() argument
641 struct drm_i915_private *i915 = dmc->i915; in dmc_mmio_addr_sanity_check()
670 static u32 parse_dmc_fw_header(struct intel_dmc *dmc, in parse_dmc_fw_header() argument
674 struct drm_i915_private *i915 = dmc->i915; in parse_dmc_fw_header()
675 struct dmc_fw_info *dmc_info = &dmc->dmc_info[dmc_id]; in parse_dmc_fw_header()
739 if (!dmc_mmio_addr_sanity_check(dmc, mmioaddr, mmio_count, in parse_dmc_fw_header()
759 if (payload_size > dmc->max_fw_size) { in parse_dmc_fw_header()
780 parse_dmc_fw_package(struct intel_dmc *dmc, in parse_dmc_fw_package() argument
785 struct drm_i915_private *i915 = dmc->i915; in parse_dmc_fw_package()
823 dmc_set_fw_offset(dmc, fw_info, num_entries, si, in parse_dmc_fw_package()
835 static u32 parse_dmc_fw_css(struct intel_dmc *dmc, in parse_dmc_fw_css() argument
839 struct drm_i915_private *i915 = dmc->i915; in parse_dmc_fw_css()
854 dmc->version = css_header->version; in parse_dmc_fw_css()
859 static void parse_dmc_fw(struct intel_dmc *dmc, const struct firmware *fw) in parse_dmc_fw() argument
861 struct drm_i915_private *i915 = dmc->i915; in parse_dmc_fw()
876 r = parse_dmc_fw_css(dmc, css_header, fw->size); in parse_dmc_fw()
884 r = parse_dmc_fw_package(dmc, package_header, si, fw->size - readcount); in parse_dmc_fw()
891 if (!dmc->dmc_info[dmc_id].present) in parse_dmc_fw()
894 offset = readcount + dmc->dmc_info[dmc_id].dmc_offset * 4; in parse_dmc_fw()
901 parse_dmc_fw_header(dmc, dmc_header, fw->size - offset, dmc_id); in parse_dmc_fw()
907 drm_WARN_ON(&i915->drm, i915->display.dmc.wakeref); in intel_dmc_runtime_pm_get()
908 i915->display.dmc.wakeref = intel_display_power_get(i915, POWER_DOMAIN_INIT); in intel_dmc_runtime_pm_get()
914 fetch_and_zero(&i915->display.dmc.wakeref); in intel_dmc_runtime_pm_put()
929 struct intel_dmc *dmc = container_of(work, typeof(*dmc), work); in dmc_load_work_fn() local
930 struct drm_i915_private *i915 = dmc->i915; in dmc_load_work_fn()
935 err = request_firmware(&fw, dmc->fw_path, i915->drm.dev); in dmc_load_work_fn()
941 dmc->fw_path, fallback_path); in dmc_load_work_fn()
944 dmc->fw_path = fallback_path; in dmc_load_work_fn()
948 parse_dmc_fw(dmc, fw); in dmc_load_work_fn()
955 dmc->fw_path, DMC_VERSION_MAJOR(dmc->version), in dmc_load_work_fn()
956 DMC_VERSION_MINOR(dmc->version)); in dmc_load_work_fn()
961 dmc->fw_path); in dmc_load_work_fn()
978 struct intel_dmc *dmc; in intel_dmc_init() local
993 dmc = kzalloc(sizeof(*dmc), GFP_KERNEL); in intel_dmc_init()
994 if (!dmc) in intel_dmc_init()
997 dmc->i915 = i915; in intel_dmc_init()
999 INIT_WORK(&dmc->work, dmc_load_work_fn); in intel_dmc_init()
1002 dmc->fw_path = MTL_DMC_PATH; in intel_dmc_init()
1003 dmc->max_fw_size = XELPDP_DMC_MAX_FW_SIZE; in intel_dmc_init()
1005 dmc->fw_path = DG2_DMC_PATH; in intel_dmc_init()
1006 dmc->max_fw_size = DISPLAY_VER13_DMC_MAX_FW_SIZE; in intel_dmc_init()
1008 dmc->fw_path = ADLP_DMC_PATH; in intel_dmc_init()
1009 dmc->max_fw_size = DISPLAY_VER13_DMC_MAX_FW_SIZE; in intel_dmc_init()
1011 dmc->fw_path = ADLS_DMC_PATH; in intel_dmc_init()
1012 dmc->max_fw_size = DISPLAY_VER12_DMC_MAX_FW_SIZE; in intel_dmc_init()
1014 dmc->fw_path = DG1_DMC_PATH; in intel_dmc_init()
1015 dmc->max_fw_size = DISPLAY_VER12_DMC_MAX_FW_SIZE; in intel_dmc_init()
1017 dmc->fw_path = RKL_DMC_PATH; in intel_dmc_init()
1018 dmc->max_fw_size = DISPLAY_VER12_DMC_MAX_FW_SIZE; in intel_dmc_init()
1020 dmc->fw_path = TGL_DMC_PATH; in intel_dmc_init()
1021 dmc->max_fw_size = DISPLAY_VER12_DMC_MAX_FW_SIZE; in intel_dmc_init()
1023 dmc->fw_path = ICL_DMC_PATH; in intel_dmc_init()
1024 dmc->max_fw_size = ICL_DMC_MAX_FW_SIZE; in intel_dmc_init()
1026 dmc->fw_path = GLK_DMC_PATH; in intel_dmc_init()
1027 dmc->max_fw_size = GLK_DMC_MAX_FW_SIZE; in intel_dmc_init()
1031 dmc->fw_path = KBL_DMC_PATH; in intel_dmc_init()
1032 dmc->max_fw_size = KBL_DMC_MAX_FW_SIZE; in intel_dmc_init()
1034 dmc->fw_path = SKL_DMC_PATH; in intel_dmc_init()
1035 dmc->max_fw_size = SKL_DMC_MAX_FW_SIZE; in intel_dmc_init()
1037 dmc->fw_path = BXT_DMC_PATH; in intel_dmc_init()
1038 dmc->max_fw_size = BXT_DMC_MAX_FW_SIZE; in intel_dmc_init()
1048 dmc->fw_path = i915->params.dmc_firmware_path; in intel_dmc_init()
1051 if (!dmc->fw_path) { in intel_dmc_init()
1057 i915->display.dmc.dmc = dmc; in intel_dmc_init()
1059 drm_dbg_kms(&i915->drm, "Loading %s\n", dmc->fw_path); in intel_dmc_init()
1060 queue_work(i915->unordered_wq, &dmc->work); in intel_dmc_init()
1065 kfree(dmc); in intel_dmc_init()
1078 struct intel_dmc *dmc = i915_to_dmc(i915); in intel_dmc_suspend() local
1083 if (dmc) in intel_dmc_suspend()
1084 flush_work(&dmc->work); in intel_dmc_suspend()
1120 struct intel_dmc *dmc = i915_to_dmc(i915); in intel_dmc_fini() local
1127 drm_WARN_ON(&i915->drm, i915->display.dmc.wakeref); in intel_dmc_fini()
1129 if (dmc) { in intel_dmc_fini()
1131 kfree(dmc->dmc_info[dmc_id].payload); in intel_dmc_fini()
1133 kfree(dmc); in intel_dmc_fini()
1134 i915->display.dmc.dmc = NULL; in intel_dmc_fini()
1141 struct intel_dmc *dmc = i915_to_dmc(i915); in intel_dmc_print_error_state() local
1146 i915_error_printf(m, "DMC initialized: %s\n", str_yes_no(dmc)); in intel_dmc_print_error_state()
1149 if (dmc) in intel_dmc_print_error_state()
1151 DMC_VERSION_MAJOR(dmc->version), in intel_dmc_print_error_state()
1152 DMC_VERSION_MINOR(dmc->version)); in intel_dmc_print_error_state()
1158 struct intel_dmc *dmc = i915_to_dmc(i915); in intel_dmc_debugfs_status_show() local
1167 seq_printf(m, "DMC initialized: %s\n", str_yes_no(dmc)); in intel_dmc_debugfs_status_show()
1170 seq_printf(m, "path: %s\n", dmc ? dmc->fw_path : "N/A"); in intel_dmc_debugfs_status_show()
1184 seq_printf(m, "version: %d.%d\n", DMC_VERSION_MAJOR(dmc->version), in intel_dmc_debugfs_status_show()
1185 DMC_VERSION_MINOR(dmc->version)); in intel_dmc_debugfs_status_show()
1214 intel_de_read(i915, DMC_PROGRAM(dmc->dmc_info[DMC_FW_MAIN].start_mmioaddr, 0))); in intel_dmc_debugfs_status_show()