Commit f31531e5 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'drm-fixes-2021-10-29' of git://anongit.freedesktop.org/drm/drm

Pull drm fixes from Dave Airlie:
 "Quiet but not too quiet, I blame Halloween.

  The first set of amdgpu fixes missed last week, hence why this has a
  few more of them, it's mostly display fixes for new GPUs and some
  debugfs OOB stuff.

  The i915 patches have one to remove a tracepoint possible issue before
  it's a real problem, the others around cflush and display are cc'ed to
  stable as well.

  Otherwise it's just a few misc fixes.

  Summary:

  MAINTAINERS:
   - Fix the path pattern

  ttm:
   - Fix fence leak in ttm_transfered_destroy.

  core:
   - Add GPD Win3 rotation quirk

  i915:
   - Remove unconditional clflushes
   - Fix oops on boot due to sync state on disabled DP encoders
   - Revert backend specific data added to tracepoints
   - Remove useless and incorrect memory frequence calculation

  panel:
   - Add quirk for Aya Neo 2021

  seltest:
   - Reset property count for each drm damage selftest so full run will
     work correctly.

  amdgpu:
   - Fix two potential out of bounds writes in debugfs
   - Fix revision handling for Yellow Carp
   - Display fixes for Yellow Carp
   - Display fixes for DCN 3.1"

* tag 'drm-fixes-2021-10-29' of git://anongit.freedesktop.org/drm/drm: (21 commits)
  MAINTAINERS: dri-devel is for all of drivers/gpu
  drm/i915: Revert 'guc_id' from i915_request tracepoint
  drm/amd/display: Fix deadlock when falling back to v2 from v3
  drm/amd/display: Fallback to clocks which meet requested voltage on DCN31
  drm/amdgpu: Fix even more out of bound writes from debugfs
  drm: panel-orientation-quirks: Add quirk for GPD Win3
  drm/i915/dp: Skip the HW readout of DPCD on disabled encoders
  drm/i915: Catch yet another unconditioal clflush
  drm/i915: Convert unconditional clflush to drm_clflush_virt_range()
  drm/i915/selftests: Properly reset mock object propers for each test
  drm: panel-orientation-quirks: Add quirk for Aya Neo 2021
  drm/ttm: fix memleak in ttm_transfered_destroy
  drm/amdgpu: support B0&B1 external revision id for yellow carp
  drm/amd/display: Moved dccg init to after bios golden init
  drm/amd/display: Increase watermark latencies for DCN3.1
  drm/amd/display: increase Z9 latency to workaround underflow in Z9
  drm/amd/display: Require immediate flip support for DCN3.1 planes
  drm/amd/display: Fix prefetch bandwidth calculation for DCN3.1
  drm/amd/display: Limit display scaling to up to true 4k for DCN 3.1
  drm/amdgpu: fix out of bounds write
  ...
parents 411a44c2 b112166a
...@@ -6160,8 +6160,7 @@ T: git git://anongit.freedesktop.org/drm/drm ...@@ -6160,8 +6160,7 @@ T: git git://anongit.freedesktop.org/drm/drm
F: Documentation/devicetree/bindings/display/ F: Documentation/devicetree/bindings/display/
F: Documentation/devicetree/bindings/gpu/ F: Documentation/devicetree/bindings/gpu/
F: Documentation/gpu/ F: Documentation/gpu/
F: drivers/gpu/drm/ F: drivers/gpu/
F: drivers/gpu/vga/
F: include/drm/ F: include/drm/
F: include/linux/vga* F: include/linux/vga*
F: include/uapi/drm/ F: include/uapi/drm/
......
...@@ -1257,7 +1257,7 @@ static int nv_common_early_init(void *handle) ...@@ -1257,7 +1257,7 @@ static int nv_common_early_init(void *handle)
AMD_PG_SUPPORT_VCN_DPG | AMD_PG_SUPPORT_VCN_DPG |
AMD_PG_SUPPORT_JPEG; AMD_PG_SUPPORT_JPEG;
if (adev->pdev->device == 0x1681) if (adev->pdev->device == 0x1681)
adev->external_rev_id = adev->rev_id + 0x19; adev->external_rev_id = 0x20;
else else
adev->external_rev_id = adev->rev_id + 0x01; adev->external_rev_id = adev->rev_id + 0x01;
break; break;
......
...@@ -263,7 +263,7 @@ static ssize_t dp_link_settings_write(struct file *f, const char __user *buf, ...@@ -263,7 +263,7 @@ static ssize_t dp_link_settings_write(struct file *f, const char __user *buf,
if (!wr_buf) if (!wr_buf)
return -ENOSPC; return -ENOSPC;
if (parse_write_buffer_into_params(wr_buf, size, if (parse_write_buffer_into_params(wr_buf, wr_buf_size,
(long *)param, buf, (long *)param, buf,
max_param_num, max_param_num,
&param_nums)) { &param_nums)) {
...@@ -487,7 +487,7 @@ static ssize_t dp_phy_settings_write(struct file *f, const char __user *buf, ...@@ -487,7 +487,7 @@ static ssize_t dp_phy_settings_write(struct file *f, const char __user *buf,
if (!wr_buf) if (!wr_buf)
return -ENOSPC; return -ENOSPC;
if (parse_write_buffer_into_params(wr_buf, size, if (parse_write_buffer_into_params(wr_buf, wr_buf_size,
(long *)param, buf, (long *)param, buf,
max_param_num, max_param_num,
&param_nums)) { &param_nums)) {
...@@ -639,7 +639,7 @@ static ssize_t dp_phy_test_pattern_debugfs_write(struct file *f, const char __us ...@@ -639,7 +639,7 @@ static ssize_t dp_phy_test_pattern_debugfs_write(struct file *f, const char __us
if (!wr_buf) if (!wr_buf)
return -ENOSPC; return -ENOSPC;
if (parse_write_buffer_into_params(wr_buf, size, if (parse_write_buffer_into_params(wr_buf, wr_buf_size,
(long *)param, buf, (long *)param, buf,
max_param_num, max_param_num,
&param_nums)) { &param_nums)) {
...@@ -914,7 +914,7 @@ static ssize_t dp_dsc_passthrough_set(struct file *f, const char __user *buf, ...@@ -914,7 +914,7 @@ static ssize_t dp_dsc_passthrough_set(struct file *f, const char __user *buf,
return -ENOSPC; return -ENOSPC;
} }
if (parse_write_buffer_into_params(wr_buf, size, if (parse_write_buffer_into_params(wr_buf, wr_buf_size,
&param, buf, &param, buf,
max_param_num, max_param_num,
&param_nums)) { &param_nums)) {
...@@ -1211,7 +1211,7 @@ static ssize_t trigger_hotplug(struct file *f, const char __user *buf, ...@@ -1211,7 +1211,7 @@ static ssize_t trigger_hotplug(struct file *f, const char __user *buf,
return -ENOSPC; return -ENOSPC;
} }
if (parse_write_buffer_into_params(wr_buf, size, if (parse_write_buffer_into_params(wr_buf, wr_buf_size,
(long *)param, buf, (long *)param, buf,
max_param_num, max_param_num,
&param_nums)) { &param_nums)) {
...@@ -1396,7 +1396,7 @@ static ssize_t dp_dsc_clock_en_write(struct file *f, const char __user *buf, ...@@ -1396,7 +1396,7 @@ static ssize_t dp_dsc_clock_en_write(struct file *f, const char __user *buf,
return -ENOSPC; return -ENOSPC;
} }
if (parse_write_buffer_into_params(wr_buf, size, if (parse_write_buffer_into_params(wr_buf, wr_buf_size,
(long *)param, buf, (long *)param, buf,
max_param_num, max_param_num,
&param_nums)) { &param_nums)) {
...@@ -1581,7 +1581,7 @@ static ssize_t dp_dsc_slice_width_write(struct file *f, const char __user *buf, ...@@ -1581,7 +1581,7 @@ static ssize_t dp_dsc_slice_width_write(struct file *f, const char __user *buf,
return -ENOSPC; return -ENOSPC;
} }
if (parse_write_buffer_into_params(wr_buf, size, if (parse_write_buffer_into_params(wr_buf, wr_buf_size,
(long *)param, buf, (long *)param, buf,
max_param_num, max_param_num,
&param_nums)) { &param_nums)) {
...@@ -1766,7 +1766,7 @@ static ssize_t dp_dsc_slice_height_write(struct file *f, const char __user *buf, ...@@ -1766,7 +1766,7 @@ static ssize_t dp_dsc_slice_height_write(struct file *f, const char __user *buf,
return -ENOSPC; return -ENOSPC;
} }
if (parse_write_buffer_into_params(wr_buf, size, if (parse_write_buffer_into_params(wr_buf, wr_buf_size,
(long *)param, buf, (long *)param, buf,
max_param_num, max_param_num,
&param_nums)) { &param_nums)) {
...@@ -1944,7 +1944,7 @@ static ssize_t dp_dsc_bits_per_pixel_write(struct file *f, const char __user *bu ...@@ -1944,7 +1944,7 @@ static ssize_t dp_dsc_bits_per_pixel_write(struct file *f, const char __user *bu
return -ENOSPC; return -ENOSPC;
} }
if (parse_write_buffer_into_params(wr_buf, size, if (parse_write_buffer_into_params(wr_buf, wr_buf_size,
(long *)param, buf, (long *)param, buf,
max_param_num, max_param_num,
&param_nums)) { &param_nums)) {
...@@ -2382,7 +2382,7 @@ static ssize_t dp_max_bpc_write(struct file *f, const char __user *buf, ...@@ -2382,7 +2382,7 @@ static ssize_t dp_max_bpc_write(struct file *f, const char __user *buf,
return -ENOSPC; return -ENOSPC;
} }
if (parse_write_buffer_into_params(wr_buf, size, if (parse_write_buffer_into_params(wr_buf, wr_buf_size,
(long *)param, buf, (long *)param, buf,
max_param_num, max_param_num,
&param_nums)) { &param_nums)) {
......
...@@ -366,32 +366,32 @@ static struct wm_table lpddr5_wm_table = { ...@@ -366,32 +366,32 @@ static struct wm_table lpddr5_wm_table = {
.wm_inst = WM_A, .wm_inst = WM_A,
.wm_type = WM_TYPE_PSTATE_CHG, .wm_type = WM_TYPE_PSTATE_CHG,
.pstate_latency_us = 11.65333, .pstate_latency_us = 11.65333,
.sr_exit_time_us = 5.32, .sr_exit_time_us = 11.5,
.sr_enter_plus_exit_time_us = 6.38, .sr_enter_plus_exit_time_us = 14.5,
.valid = true, .valid = true,
}, },
{ {
.wm_inst = WM_B, .wm_inst = WM_B,
.wm_type = WM_TYPE_PSTATE_CHG, .wm_type = WM_TYPE_PSTATE_CHG,
.pstate_latency_us = 11.65333, .pstate_latency_us = 11.65333,
.sr_exit_time_us = 9.82, .sr_exit_time_us = 11.5,
.sr_enter_plus_exit_time_us = 11.196, .sr_enter_plus_exit_time_us = 14.5,
.valid = true, .valid = true,
}, },
{ {
.wm_inst = WM_C, .wm_inst = WM_C,
.wm_type = WM_TYPE_PSTATE_CHG, .wm_type = WM_TYPE_PSTATE_CHG,
.pstate_latency_us = 11.65333, .pstate_latency_us = 11.65333,
.sr_exit_time_us = 9.89, .sr_exit_time_us = 11.5,
.sr_enter_plus_exit_time_us = 11.24, .sr_enter_plus_exit_time_us = 14.5,
.valid = true, .valid = true,
}, },
{ {
.wm_inst = WM_D, .wm_inst = WM_D,
.wm_type = WM_TYPE_PSTATE_CHG, .wm_type = WM_TYPE_PSTATE_CHG,
.pstate_latency_us = 11.65333, .pstate_latency_us = 11.65333,
.sr_exit_time_us = 9.748, .sr_exit_time_us = 11.5,
.sr_enter_plus_exit_time_us = 11.102, .sr_enter_plus_exit_time_us = 14.5,
.valid = true, .valid = true,
}, },
} }
...@@ -518,14 +518,21 @@ static unsigned int find_clk_for_voltage( ...@@ -518,14 +518,21 @@ static unsigned int find_clk_for_voltage(
unsigned int voltage) unsigned int voltage)
{ {
int i; int i;
int max_voltage = 0;
int clock = 0;
for (i = 0; i < NUM_SOC_VOLTAGE_LEVELS; i++) { for (i = 0; i < NUM_SOC_VOLTAGE_LEVELS; i++) {
if (clock_table->SocVoltage[i] == voltage) if (clock_table->SocVoltage[i] == voltage) {
return clocks[i]; return clocks[i];
} else if (clock_table->SocVoltage[i] >= max_voltage &&
clock_table->SocVoltage[i] < voltage) {
max_voltage = clock_table->SocVoltage[i];
clock = clocks[i];
}
} }
ASSERT(0); ASSERT(clock);
return 0; return clock;
} }
void dcn31_clk_mgr_helper_populate_bw_params( void dcn31_clk_mgr_helper_populate_bw_params(
......
...@@ -76,10 +76,6 @@ void dcn31_init_hw(struct dc *dc) ...@@ -76,10 +76,6 @@ void dcn31_init_hw(struct dc *dc)
if (dc->clk_mgr && dc->clk_mgr->funcs->init_clocks) if (dc->clk_mgr && dc->clk_mgr->funcs->init_clocks)
dc->clk_mgr->funcs->init_clocks(dc->clk_mgr); dc->clk_mgr->funcs->init_clocks(dc->clk_mgr);
// Initialize the dccg
if (res_pool->dccg->funcs->dccg_init)
res_pool->dccg->funcs->dccg_init(res_pool->dccg);
if (IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) { if (IS_FPGA_MAXIMUS_DC(dc->ctx->dce_environment)) {
REG_WRITE(REFCLK_CNTL, 0); REG_WRITE(REFCLK_CNTL, 0);
...@@ -106,6 +102,9 @@ void dcn31_init_hw(struct dc *dc) ...@@ -106,6 +102,9 @@ void dcn31_init_hw(struct dc *dc)
hws->funcs.bios_golden_init(dc); hws->funcs.bios_golden_init(dc);
hws->funcs.disable_vga(dc->hwseq); hws->funcs.disable_vga(dc->hwseq);
} }
// Initialize the dccg
if (res_pool->dccg->funcs->dccg_init)
res_pool->dccg->funcs->dccg_init(res_pool->dccg);
if (dc->debug.enable_mem_low_power.bits.dmcu) { if (dc->debug.enable_mem_low_power.bits.dmcu) {
// Force ERAM to shutdown if DMCU is not enabled // Force ERAM to shutdown if DMCU is not enabled
......
...@@ -217,8 +217,8 @@ struct _vcs_dpi_soc_bounding_box_st dcn3_1_soc = { ...@@ -217,8 +217,8 @@ struct _vcs_dpi_soc_bounding_box_st dcn3_1_soc = {
.num_states = 5, .num_states = 5,
.sr_exit_time_us = 9.0, .sr_exit_time_us = 9.0,
.sr_enter_plus_exit_time_us = 11.0, .sr_enter_plus_exit_time_us = 11.0,
.sr_exit_z8_time_us = 402.0, .sr_exit_z8_time_us = 442.0,
.sr_enter_plus_exit_z8_time_us = 520.0, .sr_enter_plus_exit_z8_time_us = 560.0,
.writeback_latency_us = 12.0, .writeback_latency_us = 12.0,
.dram_channel_width_bytes = 4, .dram_channel_width_bytes = 4,
.round_trip_ping_latency_dcfclk_cycles = 106, .round_trip_ping_latency_dcfclk_cycles = 106,
...@@ -928,7 +928,7 @@ static const struct dc_debug_options debug_defaults_drv = { ...@@ -928,7 +928,7 @@ static const struct dc_debug_options debug_defaults_drv = {
.disable_dcc = DCC_ENABLE, .disable_dcc = DCC_ENABLE,
.vsr_support = true, .vsr_support = true,
.performance_trace = false, .performance_trace = false,
.max_downscale_src_width = 3840,/*upto 4K*/ .max_downscale_src_width = 4096,/*upto true 4K*/
.disable_pplib_wm_range = false, .disable_pplib_wm_range = false,
.scl_reset_length10 = true, .scl_reset_length10 = true,
.sanity_checks = false, .sanity_checks = false,
...@@ -1590,6 +1590,13 @@ static int dcn31_populate_dml_pipes_from_context( ...@@ -1590,6 +1590,13 @@ static int dcn31_populate_dml_pipes_from_context(
pipe = &res_ctx->pipe_ctx[i]; pipe = &res_ctx->pipe_ctx[i];
timing = &pipe->stream->timing; timing = &pipe->stream->timing;
/*
* Immediate flip can be set dynamically after enabling the plane.
* We need to require support for immediate flip or underflow can be
* intermittently experienced depending on peak b/w requirements.
*/
pipes[pipe_cnt].pipe.src.immediate_flip = true;
pipes[pipe_cnt].pipe.src.unbounded_req_mode = false; pipes[pipe_cnt].pipe.src.unbounded_req_mode = false;
pipes[pipe_cnt].pipe.src.gpuvm = true; pipes[pipe_cnt].pipe.src.gpuvm = true;
pipes[pipe_cnt].pipe.src.dcc_fraction_of_zs_req_luma = 0; pipes[pipe_cnt].pipe.src.dcc_fraction_of_zs_req_luma = 0;
......
...@@ -5398,9 +5398,9 @@ void dml31_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_l ...@@ -5398,9 +5398,9 @@ void dml31_ModeSupportAndSystemConfigurationFull(struct display_mode_lib *mode_l
v->MaximumReadBandwidthWithPrefetch = v->MaximumReadBandwidthWithPrefetch =
v->MaximumReadBandwidthWithPrefetch v->MaximumReadBandwidthWithPrefetch
+ dml_max4( + dml_max3(
v->VActivePixelBandwidth[i][j][k], v->VActivePixelBandwidth[i][j][k]
v->VActiveCursorBandwidth[i][j][k] + v->VActiveCursorBandwidth[i][j][k]
+ v->NoOfDPP[i][j][k] + v->NoOfDPP[i][j][k]
* (v->meta_row_bandwidth[i][j][k] * (v->meta_row_bandwidth[i][j][k]
+ v->dpte_row_bandwidth[i][j][k]), + v->dpte_row_bandwidth[i][j][k]),
......
...@@ -227,7 +227,7 @@ enum { ...@@ -227,7 +227,7 @@ enum {
#define FAMILY_YELLOW_CARP 146 #define FAMILY_YELLOW_CARP 146
#define YELLOW_CARP_A0 0x01 #define YELLOW_CARP_A0 0x01
#define YELLOW_CARP_B0 0x1A #define YELLOW_CARP_B0 0x20
#define YELLOW_CARP_UNKNOWN 0xFF #define YELLOW_CARP_UNKNOWN 0xFF
#ifndef ASICREV_IS_YELLOW_CARP #ifndef ASICREV_IS_YELLOW_CARP
......
...@@ -105,6 +105,7 @@ static enum mod_hdcp_status remove_display_from_topology_v3( ...@@ -105,6 +105,7 @@ static enum mod_hdcp_status remove_display_from_topology_v3(
dtm_cmd->dtm_status = TA_DTM_STATUS__GENERIC_FAILURE; dtm_cmd->dtm_status = TA_DTM_STATUS__GENERIC_FAILURE;
psp_dtm_invoke(psp, dtm_cmd->cmd_id); psp_dtm_invoke(psp, dtm_cmd->cmd_id);
mutex_unlock(&psp->dtm_context.mutex);
if (dtm_cmd->dtm_status != TA_DTM_STATUS__SUCCESS) { if (dtm_cmd->dtm_status != TA_DTM_STATUS__SUCCESS) {
status = remove_display_from_topology_v2(hdcp, index); status = remove_display_from_topology_v2(hdcp, index);
...@@ -115,8 +116,6 @@ static enum mod_hdcp_status remove_display_from_topology_v3( ...@@ -115,8 +116,6 @@ static enum mod_hdcp_status remove_display_from_topology_v3(
HDCP_TOP_REMOVE_DISPLAY_TRACE(hdcp, display->index); HDCP_TOP_REMOVE_DISPLAY_TRACE(hdcp, display->index);
} }
mutex_unlock(&psp->dtm_context.mutex);
return status; return status;
} }
...@@ -205,6 +204,7 @@ static enum mod_hdcp_status add_display_to_topology_v3( ...@@ -205,6 +204,7 @@ static enum mod_hdcp_status add_display_to_topology_v3(
dtm_cmd->dtm_in_message.topology_update_v3.link_hdcp_cap = link->hdcp_supported_informational; dtm_cmd->dtm_in_message.topology_update_v3.link_hdcp_cap = link->hdcp_supported_informational;
psp_dtm_invoke(psp, dtm_cmd->cmd_id); psp_dtm_invoke(psp, dtm_cmd->cmd_id);
mutex_unlock(&psp->dtm_context.mutex);
if (dtm_cmd->dtm_status != TA_DTM_STATUS__SUCCESS) { if (dtm_cmd->dtm_status != TA_DTM_STATUS__SUCCESS) {
status = add_display_to_topology_v2(hdcp, display); status = add_display_to_topology_v2(hdcp, display);
...@@ -214,8 +214,6 @@ static enum mod_hdcp_status add_display_to_topology_v3( ...@@ -214,8 +214,6 @@ static enum mod_hdcp_status add_display_to_topology_v3(
HDCP_TOP_ADD_DISPLAY_TRACE(hdcp, display->index); HDCP_TOP_ADD_DISPLAY_TRACE(hdcp, display->index);
} }
mutex_unlock(&psp->dtm_context.mutex);
return status; return status;
} }
......
...@@ -134,6 +134,12 @@ static const struct dmi_system_id orientation_data[] = { ...@@ -134,6 +134,12 @@ static const struct dmi_system_id orientation_data[] = {
DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "T103HAF"), DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "T103HAF"),
}, },
.driver_data = (void *)&lcd800x1280_rightside_up, .driver_data = (void *)&lcd800x1280_rightside_up,
}, { /* AYA NEO 2021 */
.matches = {
DMI_EXACT_MATCH(DMI_SYS_VENDOR, "AYADEVICE"),
DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "AYA NEO 2021"),
},
.driver_data = (void *)&lcd800x1280_rightside_up,
}, { /* GPD MicroPC (generic strings, also match on bios date) */ }, { /* GPD MicroPC (generic strings, also match on bios date) */
.matches = { .matches = {
DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Default string"), DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Default string"),
...@@ -185,6 +191,12 @@ static const struct dmi_system_id orientation_data[] = { ...@@ -185,6 +191,12 @@ static const struct dmi_system_id orientation_data[] = {
DMI_EXACT_MATCH(DMI_BOARD_NAME, "Default string"), DMI_EXACT_MATCH(DMI_BOARD_NAME, "Default string"),
}, },
.driver_data = (void *)&gpd_win2, .driver_data = (void *)&gpd_win2,
}, { /* GPD Win 3 */
.matches = {
DMI_EXACT_MATCH(DMI_SYS_VENDOR, "GPD"),
DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "G1618-03")
},
.driver_data = (void *)&lcd720x1280_rightside_up,
}, { /* I.T.Works TW891 */ }, { /* I.T.Works TW891 */
.matches = { .matches = {
DMI_EXACT_MATCH(DMI_SYS_VENDOR, "To be filled by O.E.M."), DMI_EXACT_MATCH(DMI_SYS_VENDOR, "To be filled by O.E.M."),
......
...@@ -1916,6 +1916,9 @@ void intel_dp_sync_state(struct intel_encoder *encoder, ...@@ -1916,6 +1916,9 @@ void intel_dp_sync_state(struct intel_encoder *encoder,
{ {
struct intel_dp *intel_dp = enc_to_intel_dp(encoder); struct intel_dp *intel_dp = enc_to_intel_dp(encoder);
if (!crtc_state)
return;
/* /*
* Don't clobber DPCD if it's been already read out during output * Don't clobber DPCD if it's been already read out during output
* setup (eDP) or detect. * setup (eDP) or detect.
......
...@@ -64,7 +64,7 @@ intel_timeline_pin_map(struct intel_timeline *timeline) ...@@ -64,7 +64,7 @@ intel_timeline_pin_map(struct intel_timeline *timeline)
timeline->hwsp_map = vaddr; timeline->hwsp_map = vaddr;
timeline->hwsp_seqno = memset(vaddr + ofs, 0, TIMELINE_SEQNO_BYTES); timeline->hwsp_seqno = memset(vaddr + ofs, 0, TIMELINE_SEQNO_BYTES);
clflush(vaddr + ofs); drm_clflush_virt_range(vaddr + ofs, TIMELINE_SEQNO_BYTES);
return 0; return 0;
} }
...@@ -225,7 +225,7 @@ void intel_timeline_reset_seqno(const struct intel_timeline *tl) ...@@ -225,7 +225,7 @@ void intel_timeline_reset_seqno(const struct intel_timeline *tl)
memset(hwsp_seqno + 1, 0, TIMELINE_SEQNO_BYTES - sizeof(*hwsp_seqno)); memset(hwsp_seqno + 1, 0, TIMELINE_SEQNO_BYTES - sizeof(*hwsp_seqno));
WRITE_ONCE(*hwsp_seqno, tl->seqno); WRITE_ONCE(*hwsp_seqno, tl->seqno);
clflush(hwsp_seqno); drm_clflush_virt_range(hwsp_seqno, TIMELINE_SEQNO_BYTES);
} }
void intel_timeline_enter(struct intel_timeline *tl) void intel_timeline_enter(struct intel_timeline *tl)
......
...@@ -11048,12 +11048,6 @@ enum skl_power_gate { ...@@ -11048,12 +11048,6 @@ enum skl_power_gate {
#define DC_STATE_DEBUG_MASK_CORES (1 << 0) #define DC_STATE_DEBUG_MASK_CORES (1 << 0)
#define DC_STATE_DEBUG_MASK_MEMORY_UP (1 << 1) #define DC_STATE_DEBUG_MASK_MEMORY_UP (1 << 1)
#define BXT_P_CR_MC_BIOS_REQ_0_0_0 _MMIO(MCHBAR_MIRROR_BASE_SNB + 0x7114)
#define BXT_REQ_DATA_MASK 0x3F
#define BXT_DRAM_CHANNEL_ACTIVE_SHIFT 12
#define BXT_DRAM_CHANNEL_ACTIVE_MASK (0xF << 12)
#define BXT_MEMORY_FREQ_MULTIPLIER_HZ 133333333
#define BXT_D_CR_DRP0_DUNIT8 0x1000 #define BXT_D_CR_DRP0_DUNIT8 0x1000
#define BXT_D_CR_DRP0_DUNIT9 0x1200 #define BXT_D_CR_DRP0_DUNIT9 0x1200
#define BXT_D_CR_DRP0_DUNIT_START 8 #define BXT_D_CR_DRP0_DUNIT_START 8
...@@ -11084,9 +11078,7 @@ enum skl_power_gate { ...@@ -11084,9 +11078,7 @@ enum skl_power_gate {
#define BXT_DRAM_TYPE_LPDDR4 (0x2 << 22) #define BXT_DRAM_TYPE_LPDDR4 (0x2 << 22)
#define BXT_DRAM_TYPE_DDR4 (0x4 << 22) #define BXT_DRAM_TYPE_DDR4 (0x4 << 22)
#define SKL_MEMORY_FREQ_MULTIPLIER_HZ 266666666
#define SKL_MC_BIOS_DATA_0_0_0_MCHBAR_PCU _MMIO(MCHBAR_MIRROR_BASE_SNB + 0x5E04) #define SKL_MC_BIOS_DATA_0_0_0_MCHBAR_PCU _MMIO(MCHBAR_MIRROR_BASE_SNB + 0x5E04)
#define SKL_REQ_DATA_MASK (0xF << 0)
#define DG1_GEAR_TYPE REG_BIT(16) #define DG1_GEAR_TYPE REG_BIT(16)
#define SKL_MAD_INTER_CHANNEL_0_0_0_MCHBAR_MCMAIN _MMIO(MCHBAR_MIRROR_BASE_SNB + 0x5000) #define SKL_MAD_INTER_CHANNEL_0_0_0_MCHBAR_MCMAIN _MMIO(MCHBAR_MIRROR_BASE_SNB + 0x5000)
......
...@@ -794,7 +794,6 @@ DECLARE_EVENT_CLASS(i915_request, ...@@ -794,7 +794,6 @@ DECLARE_EVENT_CLASS(i915_request,
TP_STRUCT__entry( TP_STRUCT__entry(
__field(u32, dev) __field(u32, dev)
__field(u64, ctx) __field(u64, ctx)
__field(u32, guc_id)
__field(u16, class) __field(u16, class)
__field(u16, instance) __field(u16, instance)
__field(u32, seqno) __field(u32, seqno)
...@@ -805,16 +804,14 @@ DECLARE_EVENT_CLASS(i915_request, ...@@ -805,16 +804,14 @@ DECLARE_EVENT_CLASS(i915_request,
__entry->dev = rq->engine->i915->drm.primary->index; __entry->dev = rq->engine->i915->drm.primary->index;
__entry->class = rq->engine->uabi_class; __entry->class = rq->engine->uabi_class;
__entry->instance = rq->engine->uabi_instance; __entry->instance = rq->engine->uabi_instance;
__entry->guc_id = rq->context->guc_id;
__entry->ctx = rq->fence.context; __entry->ctx = rq->fence.context;
__entry->seqno = rq->fence.seqno; __entry->seqno = rq->fence.seqno;
__entry->tail = rq->tail; __entry->tail = rq->tail;
), ),
TP_printk("dev=%u, engine=%u:%u, guc_id=%u, ctx=%llu, seqno=%u, tail=%u", TP_printk("dev=%u, engine=%u:%u, ctx=%llu, seqno=%u, tail=%u",
__entry->dev, __entry->class, __entry->instance, __entry->dev, __entry->class, __entry->instance,
__entry->guc_id, __entry->ctx, __entry->seqno, __entry->ctx, __entry->seqno, __entry->tail)
__entry->tail)
); );
DEFINE_EVENT(i915_request, i915_request_add, DEFINE_EVENT(i915_request, i915_request_add,
......
...@@ -244,7 +244,6 @@ static int ...@@ -244,7 +244,6 @@ static int
skl_get_dram_info(struct drm_i915_private *i915) skl_get_dram_info(struct drm_i915_private *i915)
{ {
struct dram_info *dram_info = &i915->dram_info; struct dram_info *dram_info = &i915->dram_info;
u32 mem_freq_khz, val;
int ret; int ret;
dram_info->type = skl_get_dram_type(i915); dram_info->type = skl_get_dram_type(i915);
...@@ -255,17 +254,6 @@ skl_get_dram_info(struct drm_i915_private *i915) ...@@ -255,17 +254,6 @@ skl_get_dram_info(struct drm_i915_private *i915)
if (ret) if (ret)
return ret; return ret;
val = intel_uncore_read(&i915->uncore,
SKL_MC_BIOS_DATA_0_0_0_MCHBAR_PCU);
mem_freq_khz = DIV_ROUND_UP((val & SKL_REQ_DATA_MASK) *
SKL_MEMORY_FREQ_MULTIPLIER_HZ, 1000);
if (dram_info->num_channels * mem_freq_khz == 0) {
drm_info(&i915->drm,
"Couldn't get system memory bandwidth\n");
return -EINVAL;
}
return 0; return 0;
} }
...@@ -350,24 +338,10 @@ static void bxt_get_dimm_info(struct dram_dimm_info *dimm, u32 val) ...@@ -350,24 +338,10 @@ static void bxt_get_dimm_info(struct dram_dimm_info *dimm, u32 val)
static int bxt_get_dram_info(struct drm_i915_private *i915) static int bxt_get_dram_info(struct drm_i915_private *i915)
{ {
struct dram_info *dram_info = &i915->dram_info; struct dram_info *dram_info = &i915->dram_info;
u32 dram_channels; u32 val;
u32 mem_freq_khz, val; u8 valid_ranks = 0;
u8 num_active_channels, valid_ranks = 0;
int i; int i;
val = intel_uncore_read(&i915->uncore, BXT_P_CR_MC_BIOS_REQ_0_0_0);
mem_freq_khz = DIV_ROUND_UP((val & BXT_REQ_DATA_MASK) *
BXT_MEMORY_FREQ_MULTIPLIER_HZ, 1000);
dram_channels = val & BXT_DRAM_CHANNEL_ACTIVE_MASK;
num_active_channels = hweight32(dram_channels);
if (mem_freq_khz * num_active_channels == 0) {
drm_info(&i915->drm,
"Couldn't get system memory bandwidth\n");
return -EINVAL;
}
/* /*
* Now read each DUNIT8/9/10/11 to check the rank of each dimms. * Now read each DUNIT8/9/10/11 to check the rank of each dimms.
*/ */
......
...@@ -30,6 +30,7 @@ static void mock_setup(struct drm_plane_state *state) ...@@ -30,6 +30,7 @@ static void mock_setup(struct drm_plane_state *state)
mock_device.driver = &mock_driver; mock_device.driver = &mock_driver;
mock_device.mode_config.prop_fb_damage_clips = &mock_prop; mock_device.mode_config.prop_fb_damage_clips = &mock_prop;
mock_plane.dev = &mock_device; mock_plane.dev = &mock_device;
mock_obj_props.count = 0;
mock_plane.base.properties = &mock_obj_props; mock_plane.base.properties = &mock_obj_props;
mock_prop.base.id = 1; /* 0 is an invalid id */ mock_prop.base.id = 1; /* 0 is an invalid id */
mock_prop.dev = &mock_device; mock_prop.dev = &mock_device;
......
...@@ -190,6 +190,7 @@ static void ttm_transfered_destroy(struct ttm_buffer_object *bo) ...@@ -190,6 +190,7 @@ static void ttm_transfered_destroy(struct ttm_buffer_object *bo)
struct ttm_transfer_obj *fbo; struct ttm_transfer_obj *fbo;
fbo = container_of(bo, struct ttm_transfer_obj, base); fbo = container_of(bo, struct ttm_transfer_obj, base);
dma_resv_fini(&fbo->base.base._resv);
ttm_bo_put(fbo->bo); ttm_bo_put(fbo->bo);
kfree(fbo); kfree(fbo);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment