mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-04-29 07:02:29 -04:00
Merge tag 'drm-fixes-2023-12-15' of git://anongit.freedesktop.org/drm/drm
Pull drm fixes from Dave Airlie: "More regular fixes, amdgpu, i915, mediatek and nouveau are most of them this week. Nothing too major, then a few misc bits and pieces in core, panel and ivpu. drm: - fix uninit problems in crtc - fix fd ownership check - edid: add modes in fallback paths panel: - move LG panel into DSI yaml - ltk050h3146w: set burst mode mediatek: - mtk_disp_gamma: Fix breakage due to merge issue - fix kernel oops if no crtc is found - Add spinlock for setting vblank event in atomic_begin - Fix access violation in mtk_drm_crtc_dma_dev_get i915: - Fix selftest engine reset count storage for multi-tile - Fix out-of-bounds reads for engine reset counts - Fix ADL+ remapped stride with CCS - Fix intel_atomic_setup_scalers() plane_state handling - Fix ADL+ tiled plane stride when the POT stride is smaller than the original - Fix eDP 1.4 rate select method link configuration amdgpu: - Fix suspend fix that got accidently mangled last week - Fix OD regression - PSR fixes - OLED Backlight regression fix - JPEG 4.0.5 fix - Misc display fixes - SDMA 5.2 fix - SDMA 2.4 regression fix - GPUVM race fix nouveau: - fix gk20a instobj hierarchy - fix headless iors inheritance regression ivpu: - fix WA initialisation" * tag 'drm-fixes-2023-12-15' of git://anongit.freedesktop.org/drm/drm: (31 commits) drm/nouveau/kms/nv50-: Don't allow inheritance of headless iors drm/nouveau: Fixup gk20a instobj hierarchy drm/amdgpu: warn when there are still mappings when a BO is destroyed v2 drm/amdgpu: fix tear down order in amdgpu_vm_pt_free drm/amd: Fix a probing order problem on SDMA 2.4 drm/amdgpu/sdma5.2: add begin/end_use ring callbacks drm/panel: ltk050h3146w: Set burst mode for ltk050h3148w dt-bindings: panel-simple-dsi: move LG 5" HD TFT LCD panel into DSI yaml drm/amd/display: Disable PSR-SU on Parade 0803 TCON again drm/amd/display: Populate dtbclk from bounding box drm/amd/display: Revert "Fix conversions between bytes and KB" drm/amdgpu/jpeg: configure doorbell for each playback drm/amd/display: Restore guard against default backlight value < 1 nit drm/amd/display: fix hw rotated modes when PSR-SU is enabled drm/amd/pm: fix pp_*clk_od typo drm/amdgpu: fix buffer funcs setting order on suspend harder drm/mediatek: Fix access violation in mtk_drm_crtc_dma_dev_get drm/edid: also call add modes in EDID connector update fallback drm/i915/edp: don't write to DP_LINK_BW_SET when using rate select drm/i915: Fix ADL+ tiled plane stride when the POT stride is smaller than the original ...
This commit is contained in:
@@ -42,6 +42,8 @@ properties:
|
||||
- lg,acx467akm-7
|
||||
# LG Corporation 7" WXGA TFT LCD panel
|
||||
- lg,ld070wx3-sl01
|
||||
# LG Corporation 5" HD TFT LCD panel
|
||||
- lg,lh500wx1-sd03
|
||||
# One Stop Displays OSD101T2587-53TS 10.1" 1920x1200 panel
|
||||
- osddisplays,osd101t2587-53ts
|
||||
# Panasonic 10" WUXGA TFT LCD panel
|
||||
|
||||
@@ -208,8 +208,6 @@ properties:
|
||||
- lemaker,bl035-rgb-002
|
||||
# LG 7" (800x480 pixels) TFT LCD panel
|
||||
- lg,lb070wv8
|
||||
# LG Corporation 5" HD TFT LCD panel
|
||||
- lg,lh500wx1-sd03
|
||||
# LG LP079QX1-SP0V 7.9" (1536x2048 pixels) TFT LCD panel
|
||||
- lg,lp079qx1-sp0v
|
||||
# LG 9.7" (2048x1536 pixels) TFT LCD panel
|
||||
|
||||
@@ -53,10 +53,12 @@
|
||||
|
||||
#define ICB_0_1_IRQ_MASK ((((u64)ICB_1_IRQ_MASK) << 32) | ICB_0_IRQ_MASK)
|
||||
|
||||
#define BUTTRESS_IRQ_MASK ((REG_FLD(VPU_37XX_BUTTRESS_INTERRUPT_STAT, FREQ_CHANGE)) | \
|
||||
(REG_FLD(VPU_37XX_BUTTRESS_INTERRUPT_STAT, ATS_ERR)) | \
|
||||
#define BUTTRESS_IRQ_MASK ((REG_FLD(VPU_37XX_BUTTRESS_INTERRUPT_STAT, ATS_ERR)) | \
|
||||
(REG_FLD(VPU_37XX_BUTTRESS_INTERRUPT_STAT, UFI_ERR)))
|
||||
|
||||
#define BUTTRESS_ALL_IRQ_MASK (BUTTRESS_IRQ_MASK | \
|
||||
(REG_FLD(VPU_37XX_BUTTRESS_INTERRUPT_STAT, FREQ_CHANGE)))
|
||||
|
||||
#define BUTTRESS_IRQ_ENABLE_MASK ((u32)~BUTTRESS_IRQ_MASK)
|
||||
#define BUTTRESS_IRQ_DISABLE_MASK ((u32)-1)
|
||||
|
||||
@@ -74,8 +76,12 @@ static void ivpu_hw_wa_init(struct ivpu_device *vdev)
|
||||
vdev->wa.clear_runtime_mem = false;
|
||||
vdev->wa.d3hot_after_power_off = true;
|
||||
|
||||
if (ivpu_device_id(vdev) == PCI_DEVICE_ID_MTL && ivpu_revision(vdev) < 4)
|
||||
REGB_WR32(VPU_37XX_BUTTRESS_INTERRUPT_STAT, BUTTRESS_ALL_IRQ_MASK);
|
||||
if (REGB_RD32(VPU_37XX_BUTTRESS_INTERRUPT_STAT) == BUTTRESS_ALL_IRQ_MASK) {
|
||||
/* Writing 1s does not clear the interrupt status register */
|
||||
vdev->wa.interrupt_clear_with_0 = true;
|
||||
REGB_WR32(VPU_37XX_BUTTRESS_INTERRUPT_STAT, 0x0);
|
||||
}
|
||||
|
||||
IVPU_PRINT_WA(punit_disabled);
|
||||
IVPU_PRINT_WA(clear_runtime_mem);
|
||||
|
||||
@@ -4516,8 +4516,6 @@ int amdgpu_device_suspend(struct drm_device *dev, bool fbcon)
|
||||
|
||||
amdgpu_ras_suspend(adev);
|
||||
|
||||
amdgpu_ttm_set_buffer_funcs_status(adev, false);
|
||||
|
||||
amdgpu_device_ip_suspend_phase1(adev);
|
||||
|
||||
if (!adev->in_s0ix)
|
||||
|
||||
@@ -1343,6 +1343,8 @@ void amdgpu_bo_release_notify(struct ttm_buffer_object *bo)
|
||||
|
||||
abo = ttm_to_amdgpu_bo(bo);
|
||||
|
||||
WARN_ON(abo->vm_bo);
|
||||
|
||||
if (abo->kfd_bo)
|
||||
amdgpu_amdkfd_release_notify(abo);
|
||||
|
||||
|
||||
@@ -642,13 +642,14 @@ static void amdgpu_vm_pt_free(struct amdgpu_vm_bo_base *entry)
|
||||
|
||||
if (!entry->bo)
|
||||
return;
|
||||
|
||||
entry->bo->vm_bo = NULL;
|
||||
shadow = amdgpu_bo_shadowed(entry->bo);
|
||||
if (shadow) {
|
||||
ttm_bo_set_bulk_move(&shadow->tbo, NULL);
|
||||
amdgpu_bo_unref(&shadow);
|
||||
}
|
||||
ttm_bo_set_bulk_move(&entry->bo->tbo, NULL);
|
||||
entry->bo->vm_bo = NULL;
|
||||
|
||||
spin_lock(&entry->vm->status_lock);
|
||||
list_del(&entry->vm_status);
|
||||
|
||||
@@ -155,13 +155,6 @@ static int jpeg_v4_0_5_hw_init(void *handle)
|
||||
struct amdgpu_ring *ring = adev->jpeg.inst->ring_dec;
|
||||
int r;
|
||||
|
||||
adev->nbio.funcs->vcn_doorbell_range(adev, ring->use_doorbell,
|
||||
(adev->doorbell_index.vcn.vcn_ring0_1 << 1), 0);
|
||||
|
||||
WREG32_SOC15(VCN, 0, regVCN_JPEG_DB_CTRL,
|
||||
ring->doorbell_index << VCN_JPEG_DB_CTRL__OFFSET__SHIFT |
|
||||
VCN_JPEG_DB_CTRL__EN_MASK);
|
||||
|
||||
r = amdgpu_ring_test_helper(ring);
|
||||
if (r)
|
||||
return r;
|
||||
@@ -336,6 +329,14 @@ static int jpeg_v4_0_5_start(struct amdgpu_device *adev)
|
||||
if (adev->pm.dpm_enabled)
|
||||
amdgpu_dpm_enable_jpeg(adev, true);
|
||||
|
||||
/* doorbell programming is done for every playback */
|
||||
adev->nbio.funcs->vcn_doorbell_range(adev, ring->use_doorbell,
|
||||
(adev->doorbell_index.vcn.vcn_ring0_1 << 1), 0);
|
||||
|
||||
WREG32_SOC15(VCN, 0, regVCN_JPEG_DB_CTRL,
|
||||
ring->doorbell_index << VCN_JPEG_DB_CTRL__OFFSET__SHIFT |
|
||||
VCN_JPEG_DB_CTRL__EN_MASK);
|
||||
|
||||
/* disable power gating */
|
||||
r = jpeg_v4_0_5_disable_static_power_gating(adev);
|
||||
if (r)
|
||||
|
||||
@@ -813,12 +813,12 @@ static int sdma_v2_4_early_init(void *handle)
|
||||
struct amdgpu_device *adev = (struct amdgpu_device *)handle;
|
||||
int r;
|
||||
|
||||
adev->sdma.num_instances = SDMA_MAX_INSTANCE;
|
||||
|
||||
r = sdma_v2_4_init_microcode(adev);
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
adev->sdma.num_instances = SDMA_MAX_INSTANCE;
|
||||
|
||||
sdma_v2_4_set_ring_funcs(adev);
|
||||
sdma_v2_4_set_buffer_funcs(adev);
|
||||
sdma_v2_4_set_vm_pte_funcs(adev);
|
||||
|
||||
@@ -1643,6 +1643,32 @@ static void sdma_v5_2_get_clockgating_state(void *handle, u64 *flags)
|
||||
*flags |= AMD_CG_SUPPORT_SDMA_LS;
|
||||
}
|
||||
|
||||
static void sdma_v5_2_ring_begin_use(struct amdgpu_ring *ring)
|
||||
{
|
||||
struct amdgpu_device *adev = ring->adev;
|
||||
|
||||
/* SDMA 5.2.3 (RMB) FW doesn't seem to properly
|
||||
* disallow GFXOFF in some cases leading to
|
||||
* hangs in SDMA. Disallow GFXOFF while SDMA is active.
|
||||
* We can probably just limit this to 5.2.3,
|
||||
* but it shouldn't hurt for other parts since
|
||||
* this GFXOFF will be disallowed anyway when SDMA is
|
||||
* active, this just makes it explicit.
|
||||
*/
|
||||
amdgpu_gfx_off_ctrl(adev, false);
|
||||
}
|
||||
|
||||
static void sdma_v5_2_ring_end_use(struct amdgpu_ring *ring)
|
||||
{
|
||||
struct amdgpu_device *adev = ring->adev;
|
||||
|
||||
/* SDMA 5.2.3 (RMB) FW doesn't seem to properly
|
||||
* disallow GFXOFF in some cases leading to
|
||||
* hangs in SDMA. Allow GFXOFF when SDMA is complete.
|
||||
*/
|
||||
amdgpu_gfx_off_ctrl(adev, true);
|
||||
}
|
||||
|
||||
const struct amd_ip_funcs sdma_v5_2_ip_funcs = {
|
||||
.name = "sdma_v5_2",
|
||||
.early_init = sdma_v5_2_early_init,
|
||||
@@ -1690,6 +1716,8 @@ static const struct amdgpu_ring_funcs sdma_v5_2_ring_funcs = {
|
||||
.test_ib = sdma_v5_2_ring_test_ib,
|
||||
.insert_nop = sdma_v5_2_ring_insert_nop,
|
||||
.pad_ib = sdma_v5_2_ring_pad_ib,
|
||||
.begin_use = sdma_v5_2_ring_begin_use,
|
||||
.end_use = sdma_v5_2_ring_end_use,
|
||||
.emit_wreg = sdma_v5_2_ring_emit_wreg,
|
||||
.emit_reg_wait = sdma_v5_2_ring_emit_reg_wait,
|
||||
.emit_reg_write_reg_wait = sdma_v5_2_ring_emit_reg_write_reg_wait,
|
||||
|
||||
@@ -5182,6 +5182,9 @@ static void fill_dc_dirty_rects(struct drm_plane *plane,
|
||||
if (plane->type == DRM_PLANE_TYPE_CURSOR)
|
||||
return;
|
||||
|
||||
if (new_plane_state->rotation != DRM_MODE_ROTATE_0)
|
||||
goto ffu;
|
||||
|
||||
num_clips = drm_plane_get_damage_clips_count(new_plane_state);
|
||||
clips = drm_plane_get_damage_clips(new_plane_state);
|
||||
|
||||
|
||||
@@ -465,6 +465,7 @@ struct dc_cursor_mi_param {
|
||||
struct fixed31_32 v_scale_ratio;
|
||||
enum dc_rotation_angle rotation;
|
||||
bool mirror;
|
||||
struct dc_stream_state *stream;
|
||||
};
|
||||
|
||||
/* IPP related types */
|
||||
|
||||
@@ -1077,8 +1077,16 @@ void hubp2_cursor_set_position(
|
||||
if (src_y_offset < 0)
|
||||
src_y_offset = 0;
|
||||
/* Save necessary cursor info x, y position. w, h is saved in attribute func. */
|
||||
hubp->cur_rect.x = src_x_offset + param->viewport.x;
|
||||
hubp->cur_rect.y = src_y_offset + param->viewport.y;
|
||||
if (param->stream->link->psr_settings.psr_version >= DC_PSR_VERSION_SU_1 &&
|
||||
param->rotation != ROTATION_ANGLE_0) {
|
||||
hubp->cur_rect.x = 0;
|
||||
hubp->cur_rect.y = 0;
|
||||
hubp->cur_rect.w = param->stream->timing.h_addressable;
|
||||
hubp->cur_rect.h = param->stream->timing.v_addressable;
|
||||
} else {
|
||||
hubp->cur_rect.x = src_x_offset + param->viewport.x;
|
||||
hubp->cur_rect.y = src_y_offset + param->viewport.y;
|
||||
}
|
||||
}
|
||||
|
||||
void hubp2_clk_cntl(struct hubp *hubp, bool enable)
|
||||
|
||||
@@ -124,7 +124,7 @@ struct _vcs_dpi_soc_bounding_box_st dcn3_5_soc = {
|
||||
.phyclk_mhz = 600.0,
|
||||
.phyclk_d18_mhz = 667.0,
|
||||
.dscclk_mhz = 186.0,
|
||||
.dtbclk_mhz = 625.0,
|
||||
.dtbclk_mhz = 600.0,
|
||||
},
|
||||
{
|
||||
.state = 1,
|
||||
@@ -133,7 +133,7 @@ struct _vcs_dpi_soc_bounding_box_st dcn3_5_soc = {
|
||||
.phyclk_mhz = 810.0,
|
||||
.phyclk_d18_mhz = 667.0,
|
||||
.dscclk_mhz = 209.0,
|
||||
.dtbclk_mhz = 625.0,
|
||||
.dtbclk_mhz = 600.0,
|
||||
},
|
||||
{
|
||||
.state = 2,
|
||||
@@ -142,7 +142,7 @@ struct _vcs_dpi_soc_bounding_box_st dcn3_5_soc = {
|
||||
.phyclk_mhz = 810.0,
|
||||
.phyclk_d18_mhz = 667.0,
|
||||
.dscclk_mhz = 209.0,
|
||||
.dtbclk_mhz = 625.0,
|
||||
.dtbclk_mhz = 600.0,
|
||||
},
|
||||
{
|
||||
.state = 3,
|
||||
@@ -151,7 +151,7 @@ struct _vcs_dpi_soc_bounding_box_st dcn3_5_soc = {
|
||||
.phyclk_mhz = 810.0,
|
||||
.phyclk_d18_mhz = 667.0,
|
||||
.dscclk_mhz = 371.0,
|
||||
.dtbclk_mhz = 625.0,
|
||||
.dtbclk_mhz = 600.0,
|
||||
},
|
||||
{
|
||||
.state = 4,
|
||||
@@ -160,7 +160,7 @@ struct _vcs_dpi_soc_bounding_box_st dcn3_5_soc = {
|
||||
.phyclk_mhz = 810.0,
|
||||
.phyclk_d18_mhz = 667.0,
|
||||
.dscclk_mhz = 417.0,
|
||||
.dtbclk_mhz = 625.0,
|
||||
.dtbclk_mhz = 600.0,
|
||||
},
|
||||
},
|
||||
.num_states = 5,
|
||||
@@ -348,6 +348,8 @@ void dcn35_update_bw_bounding_box_fpu(struct dc *dc,
|
||||
clock_limits[i].socclk_mhz;
|
||||
dc->dml2_options.bbox_overrides.clks_table.clk_entries[i].memclk_mhz =
|
||||
clk_table->entries[i].memclk_mhz * clk_table->entries[i].wck_ratio;
|
||||
dc->dml2_options.bbox_overrides.clks_table.clk_entries[i].dtbclk_mhz =
|
||||
clock_limits[i].dtbclk_mhz;
|
||||
dc->dml2_options.bbox_overrides.clks_table.num_entries_per_clk.num_dcfclk_levels =
|
||||
clk_table->num_entries;
|
||||
dc->dml2_options.bbox_overrides.clks_table.num_entries_per_clk.num_fclk_levels =
|
||||
@@ -360,6 +362,8 @@ void dcn35_update_bw_bounding_box_fpu(struct dc *dc,
|
||||
clk_table->num_entries;
|
||||
dc->dml2_options.bbox_overrides.clks_table.num_entries_per_clk.num_memclk_levels =
|
||||
clk_table->num_entries;
|
||||
dc->dml2_options.bbox_overrides.clks_table.num_entries_per_clk.num_dtbclk_levels =
|
||||
clk_table->num_entries;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -6329,7 +6329,7 @@ static void dml_prefetch_check(struct display_mode_lib_st *mode_lib)
|
||||
mode_lib->ms.NoOfDPPThisState,
|
||||
mode_lib->ms.dpte_group_bytes,
|
||||
s->HostVMInefficiencyFactor,
|
||||
mode_lib->ms.soc.hostvm_min_page_size_kbytes * 1024,
|
||||
mode_lib->ms.soc.hostvm_min_page_size_kbytes,
|
||||
mode_lib->ms.cache_display_cfg.plane.HostVMMaxPageTableLevels);
|
||||
|
||||
s->NextMaxVStartup = s->MaxVStartupAllPlanes[j];
|
||||
@@ -6542,7 +6542,7 @@ static void dml_prefetch_check(struct display_mode_lib_st *mode_lib)
|
||||
mode_lib->ms.cache_display_cfg.plane.HostVMEnable,
|
||||
mode_lib->ms.cache_display_cfg.plane.HostVMMaxPageTableLevels,
|
||||
mode_lib->ms.cache_display_cfg.plane.GPUVMEnable,
|
||||
mode_lib->ms.soc.hostvm_min_page_size_kbytes * 1024,
|
||||
mode_lib->ms.soc.hostvm_min_page_size_kbytes,
|
||||
mode_lib->ms.PDEAndMetaPTEBytesPerFrame[j][k],
|
||||
mode_lib->ms.MetaRowBytes[j][k],
|
||||
mode_lib->ms.DPTEBytesPerRow[j][k],
|
||||
@@ -7687,7 +7687,7 @@ dml_bool_t dml_core_mode_support(struct display_mode_lib_st *mode_lib)
|
||||
CalculateVMRowAndSwath_params->HostVMMaxNonCachedPageTableLevels = mode_lib->ms.cache_display_cfg.plane.HostVMMaxPageTableLevels;
|
||||
CalculateVMRowAndSwath_params->GPUVMMaxPageTableLevels = mode_lib->ms.cache_display_cfg.plane.GPUVMMaxPageTableLevels;
|
||||
CalculateVMRowAndSwath_params->GPUVMMinPageSizeKBytes = mode_lib->ms.cache_display_cfg.plane.GPUVMMinPageSizeKBytes;
|
||||
CalculateVMRowAndSwath_params->HostVMMinPageSize = mode_lib->ms.soc.hostvm_min_page_size_kbytes * 1024;
|
||||
CalculateVMRowAndSwath_params->HostVMMinPageSize = mode_lib->ms.soc.hostvm_min_page_size_kbytes;
|
||||
CalculateVMRowAndSwath_params->PTEBufferModeOverrideEn = mode_lib->ms.cache_display_cfg.plane.PTEBufferModeOverrideEn;
|
||||
CalculateVMRowAndSwath_params->PTEBufferModeOverrideVal = mode_lib->ms.cache_display_cfg.plane.PTEBufferMode;
|
||||
CalculateVMRowAndSwath_params->PTEBufferSizeNotExceeded = mode_lib->ms.PTEBufferSizeNotExceededPerState;
|
||||
@@ -7957,7 +7957,7 @@ dml_bool_t dml_core_mode_support(struct display_mode_lib_st *mode_lib)
|
||||
UseMinimumDCFCLK_params->GPUVMMaxPageTableLevels = mode_lib->ms.cache_display_cfg.plane.GPUVMMaxPageTableLevels;
|
||||
UseMinimumDCFCLK_params->HostVMEnable = mode_lib->ms.cache_display_cfg.plane.HostVMEnable;
|
||||
UseMinimumDCFCLK_params->NumberOfActiveSurfaces = mode_lib->ms.num_active_planes;
|
||||
UseMinimumDCFCLK_params->HostVMMinPageSize = mode_lib->ms.soc.hostvm_min_page_size_kbytes * 1024;
|
||||
UseMinimumDCFCLK_params->HostVMMinPageSize = mode_lib->ms.soc.hostvm_min_page_size_kbytes;
|
||||
UseMinimumDCFCLK_params->HostVMMaxNonCachedPageTableLevels = mode_lib->ms.cache_display_cfg.plane.HostVMMaxPageTableLevels;
|
||||
UseMinimumDCFCLK_params->DynamicMetadataVMEnabled = mode_lib->ms.ip.dynamic_metadata_vm_enabled;
|
||||
UseMinimumDCFCLK_params->ImmediateFlipRequirement = s->ImmediateFlipRequiredFinal;
|
||||
@@ -8699,7 +8699,7 @@ void dml_core_mode_programming(struct display_mode_lib_st *mode_lib, const struc
|
||||
CalculateVMRowAndSwath_params->HostVMMaxNonCachedPageTableLevels = mode_lib->ms.cache_display_cfg.plane.HostVMMaxPageTableLevels;
|
||||
CalculateVMRowAndSwath_params->GPUVMMaxPageTableLevels = mode_lib->ms.cache_display_cfg.plane.GPUVMMaxPageTableLevels;
|
||||
CalculateVMRowAndSwath_params->GPUVMMinPageSizeKBytes = mode_lib->ms.cache_display_cfg.plane.GPUVMMinPageSizeKBytes;
|
||||
CalculateVMRowAndSwath_params->HostVMMinPageSize = mode_lib->ms.soc.hostvm_min_page_size_kbytes * 1024;
|
||||
CalculateVMRowAndSwath_params->HostVMMinPageSize = mode_lib->ms.soc.hostvm_min_page_size_kbytes;
|
||||
CalculateVMRowAndSwath_params->PTEBufferModeOverrideEn = mode_lib->ms.cache_display_cfg.plane.PTEBufferModeOverrideEn;
|
||||
CalculateVMRowAndSwath_params->PTEBufferModeOverrideVal = mode_lib->ms.cache_display_cfg.plane.PTEBufferMode;
|
||||
CalculateVMRowAndSwath_params->PTEBufferSizeNotExceeded = s->dummy_boolean_array[0];
|
||||
@@ -8805,7 +8805,7 @@ void dml_core_mode_programming(struct display_mode_lib_st *mode_lib, const struc
|
||||
mode_lib->ms.cache_display_cfg.hw.DPPPerSurface,
|
||||
locals->dpte_group_bytes,
|
||||
s->HostVMInefficiencyFactor,
|
||||
mode_lib->ms.soc.hostvm_min_page_size_kbytes * 1024,
|
||||
mode_lib->ms.soc.hostvm_min_page_size_kbytes,
|
||||
mode_lib->ms.cache_display_cfg.plane.HostVMMaxPageTableLevels);
|
||||
|
||||
locals->TCalc = 24.0 / locals->DCFCLKDeepSleep;
|
||||
@@ -8995,7 +8995,7 @@ void dml_core_mode_programming(struct display_mode_lib_st *mode_lib, const struc
|
||||
CalculatePrefetchSchedule_params->GPUVMEnable = mode_lib->ms.cache_display_cfg.plane.GPUVMEnable;
|
||||
CalculatePrefetchSchedule_params->HostVMEnable = mode_lib->ms.cache_display_cfg.plane.HostVMEnable;
|
||||
CalculatePrefetchSchedule_params->HostVMMaxNonCachedPageTableLevels = mode_lib->ms.cache_display_cfg.plane.HostVMMaxPageTableLevels;
|
||||
CalculatePrefetchSchedule_params->HostVMMinPageSize = mode_lib->ms.soc.hostvm_min_page_size_kbytes * 1024;
|
||||
CalculatePrefetchSchedule_params->HostVMMinPageSize = mode_lib->ms.soc.hostvm_min_page_size_kbytes;
|
||||
CalculatePrefetchSchedule_params->DynamicMetadataEnable = mode_lib->ms.cache_display_cfg.plane.DynamicMetadataEnable[k];
|
||||
CalculatePrefetchSchedule_params->DynamicMetadataVMEnabled = mode_lib->ms.ip.dynamic_metadata_vm_enabled;
|
||||
CalculatePrefetchSchedule_params->DynamicMetadataLinesBeforeActiveRequired = mode_lib->ms.cache_display_cfg.plane.DynamicMetadataLinesBeforeActiveRequired[k];
|
||||
@@ -9240,7 +9240,7 @@ void dml_core_mode_programming(struct display_mode_lib_st *mode_lib, const struc
|
||||
mode_lib->ms.cache_display_cfg.plane.HostVMEnable,
|
||||
mode_lib->ms.cache_display_cfg.plane.HostVMMaxPageTableLevels,
|
||||
mode_lib->ms.cache_display_cfg.plane.GPUVMEnable,
|
||||
mode_lib->ms.soc.hostvm_min_page_size_kbytes * 1024,
|
||||
mode_lib->ms.soc.hostvm_min_page_size_kbytes,
|
||||
locals->PDEAndMetaPTEBytesFrame[k],
|
||||
locals->MetaRowByte[k],
|
||||
locals->PixelPTEBytesPerRow[k],
|
||||
|
||||
@@ -423,8 +423,9 @@ void dml2_init_soc_states(struct dml2_context *dml2, const struct dc *in_dc,
|
||||
}
|
||||
|
||||
for (i = 0; i < dml2->config.bbox_overrides.clks_table.num_entries_per_clk.num_dtbclk_levels; i++) {
|
||||
p->in_states->state_array[i].dtbclk_mhz =
|
||||
dml2->config.bbox_overrides.clks_table.clk_entries[i].dtbclk_mhz;
|
||||
if (dml2->config.bbox_overrides.clks_table.clk_entries[i].dtbclk_mhz > 0)
|
||||
p->in_states->state_array[i].dtbclk_mhz =
|
||||
dml2->config.bbox_overrides.clks_table.clk_entries[i].dtbclk_mhz;
|
||||
}
|
||||
|
||||
for (i = 0; i < dml2->config.bbox_overrides.clks_table.num_entries_per_clk.num_dispclk_levels; i++) {
|
||||
|
||||
@@ -3417,7 +3417,8 @@ void dcn10_set_cursor_position(struct pipe_ctx *pipe_ctx)
|
||||
.h_scale_ratio = pipe_ctx->plane_res.scl_data.ratios.horz,
|
||||
.v_scale_ratio = pipe_ctx->plane_res.scl_data.ratios.vert,
|
||||
.rotation = pipe_ctx->plane_state->rotation,
|
||||
.mirror = pipe_ctx->plane_state->horizontal_mirror
|
||||
.mirror = pipe_ctx->plane_state->horizontal_mirror,
|
||||
.stream = pipe_ctx->stream,
|
||||
};
|
||||
bool pipe_split_on = false;
|
||||
bool odm_combine_on = (pipe_ctx->next_odm_pipe != NULL) ||
|
||||
|
||||
@@ -287,8 +287,8 @@ bool set_default_brightness_aux(struct dc_link *link)
|
||||
if (link && link->dpcd_sink_ext_caps.bits.oled == 1) {
|
||||
if (!read_default_bl_aux(link, &default_backlight))
|
||||
default_backlight = 150000;
|
||||
// if > 5000, it might be wrong readback
|
||||
if (default_backlight > 5000000)
|
||||
// if < 1 nits or > 5000, it might be wrong readback
|
||||
if (default_backlight < 1000 || default_backlight > 5000000)
|
||||
default_backlight = 150000;
|
||||
|
||||
return edp_set_backlight_level_nits(link, true,
|
||||
|
||||
@@ -839,6 +839,8 @@ bool is_psr_su_specific_panel(struct dc_link *link)
|
||||
((dpcd_caps->sink_dev_id_str[1] == 0x08 && dpcd_caps->sink_dev_id_str[0] == 0x08) ||
|
||||
(dpcd_caps->sink_dev_id_str[1] == 0x08 && dpcd_caps->sink_dev_id_str[0] == 0x07)))
|
||||
isPSRSUSupported = false;
|
||||
else if (dpcd_caps->sink_dev_id_str[1] == 0x08 && dpcd_caps->sink_dev_id_str[0] == 0x03)
|
||||
isPSRSUSupported = false;
|
||||
else if (dpcd_caps->psr_info.force_psrsu_cap == 0x1)
|
||||
isPSRSUSupported = true;
|
||||
}
|
||||
|
||||
@@ -2198,10 +2198,10 @@ static int default_attr_update(struct amdgpu_device *adev, struct amdgpu_device_
|
||||
} else if (DEVICE_ATTR_IS(xgmi_plpd_policy)) {
|
||||
if (amdgpu_dpm_get_xgmi_plpd_mode(adev, NULL) == XGMI_PLPD_NONE)
|
||||
*states = ATTR_STATE_UNSUPPORTED;
|
||||
} else if (DEVICE_ATTR_IS(pp_dpm_mclk_od)) {
|
||||
} else if (DEVICE_ATTR_IS(pp_mclk_od)) {
|
||||
if (amdgpu_dpm_get_mclk_od(adev) == -EOPNOTSUPP)
|
||||
*states = ATTR_STATE_UNSUPPORTED;
|
||||
} else if (DEVICE_ATTR_IS(pp_dpm_sclk_od)) {
|
||||
} else if (DEVICE_ATTR_IS(pp_sclk_od)) {
|
||||
if (amdgpu_dpm_get_sclk_od(adev) == -EOPNOTSUPP)
|
||||
*states = ATTR_STATE_UNSUPPORTED;
|
||||
} else if (DEVICE_ATTR_IS(apu_thermal_cap)) {
|
||||
|
||||
@@ -236,7 +236,7 @@ static int
|
||||
drm_master_check_perm(struct drm_device *dev, struct drm_file *file_priv)
|
||||
{
|
||||
if (file_priv->was_master &&
|
||||
rcu_access_pointer(file_priv->pid) == task_pid(current))
|
||||
rcu_access_pointer(file_priv->pid) == task_tgid(current))
|
||||
return 0;
|
||||
|
||||
if (!capable(CAP_SYS_ADMIN))
|
||||
|
||||
@@ -715,8 +715,7 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
|
||||
struct drm_mode_set set;
|
||||
uint32_t __user *set_connectors_ptr;
|
||||
struct drm_modeset_acquire_ctx ctx;
|
||||
int ret;
|
||||
int i;
|
||||
int ret, i, num_connectors = 0;
|
||||
|
||||
if (!drm_core_check_feature(dev, DRIVER_MODESET))
|
||||
return -EOPNOTSUPP;
|
||||
@@ -871,6 +870,7 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
|
||||
connector->name);
|
||||
|
||||
connector_set[i] = connector;
|
||||
num_connectors++;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -879,7 +879,7 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
|
||||
set.y = crtc_req->y;
|
||||
set.mode = mode;
|
||||
set.connectors = connector_set;
|
||||
set.num_connectors = crtc_req->count_connectors;
|
||||
set.num_connectors = num_connectors;
|
||||
set.fb = fb;
|
||||
|
||||
if (drm_drv_uses_atomic_modeset(dev))
|
||||
@@ -892,7 +892,7 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
|
||||
drm_framebuffer_put(fb);
|
||||
|
||||
if (connector_set) {
|
||||
for (i = 0; i < crtc_req->count_connectors; i++) {
|
||||
for (i = 0; i < num_connectors; i++) {
|
||||
if (connector_set[i])
|
||||
drm_connector_put(connector_set[i]);
|
||||
}
|
||||
|
||||
@@ -2309,7 +2309,8 @@ int drm_edid_override_connector_update(struct drm_connector *connector)
|
||||
|
||||
override = drm_edid_override_get(connector);
|
||||
if (override) {
|
||||
num_modes = drm_edid_connector_update(connector, override);
|
||||
if (drm_edid_connector_update(connector, override) == 0)
|
||||
num_modes = drm_edid_connector_add_modes(connector);
|
||||
|
||||
drm_edid_free(override);
|
||||
|
||||
|
||||
@@ -650,19 +650,30 @@ intel_dp_update_link_bw_set(struct intel_dp *intel_dp,
|
||||
const struct intel_crtc_state *crtc_state,
|
||||
u8 link_bw, u8 rate_select)
|
||||
{
|
||||
u8 link_config[2];
|
||||
u8 lane_count = crtc_state->lane_count;
|
||||
|
||||
/* Write the link configuration data */
|
||||
link_config[0] = link_bw;
|
||||
link_config[1] = crtc_state->lane_count;
|
||||
if (crtc_state->enhanced_framing)
|
||||
link_config[1] |= DP_LANE_COUNT_ENHANCED_FRAME_EN;
|
||||
drm_dp_dpcd_write(&intel_dp->aux, DP_LINK_BW_SET, link_config, 2);
|
||||
lane_count |= DP_LANE_COUNT_ENHANCED_FRAME_EN;
|
||||
|
||||
/* eDP 1.4 rate select method. */
|
||||
if (!link_bw)
|
||||
drm_dp_dpcd_write(&intel_dp->aux, DP_LINK_RATE_SET,
|
||||
&rate_select, 1);
|
||||
if (link_bw) {
|
||||
/* DP and eDP v1.3 and earlier link bw set method. */
|
||||
u8 link_config[] = { link_bw, lane_count };
|
||||
|
||||
drm_dp_dpcd_write(&intel_dp->aux, DP_LINK_BW_SET, link_config,
|
||||
ARRAY_SIZE(link_config));
|
||||
} else {
|
||||
/*
|
||||
* eDP v1.4 and later link rate set method.
|
||||
*
|
||||
* eDP v1.4x sinks shall ignore DP_LINK_RATE_SET if
|
||||
* DP_LINK_BW_SET is set. Avoid writing DP_LINK_BW_SET.
|
||||
*
|
||||
* eDP v1.5 sinks allow choosing either, and the last choice
|
||||
* shall be active.
|
||||
*/
|
||||
drm_dp_dpcd_writeb(&intel_dp->aux, DP_LANE_COUNT_SET, lane_count);
|
||||
drm_dp_dpcd_writeb(&intel_dp->aux, DP_LINK_RATE_SET, rate_select);
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -1374,7 +1374,8 @@ plane_view_scanout_stride(const struct intel_framebuffer *fb, int color_plane,
|
||||
struct drm_i915_private *i915 = to_i915(fb->base.dev);
|
||||
unsigned int stride_tiles;
|
||||
|
||||
if (IS_ALDERLAKE_P(i915) || DISPLAY_VER(i915) >= 14)
|
||||
if ((IS_ALDERLAKE_P(i915) || DISPLAY_VER(i915) >= 14) &&
|
||||
src_stride_tiles < dst_stride_tiles)
|
||||
stride_tiles = src_stride_tiles;
|
||||
else
|
||||
stride_tiles = dst_stride_tiles;
|
||||
@@ -1501,8 +1502,20 @@ static u32 calc_plane_remap_info(const struct intel_framebuffer *fb, int color_p
|
||||
|
||||
size += remap_info->size;
|
||||
} else {
|
||||
unsigned int dst_stride = plane_view_dst_stride_tiles(fb, color_plane,
|
||||
remap_info->width);
|
||||
unsigned int dst_stride;
|
||||
|
||||
/*
|
||||
* The hardware automagically calculates the CCS AUX surface
|
||||
* stride from the main surface stride so can't really remap a
|
||||
* smaller subset (unless we'd remap in whole AUX page units).
|
||||
*/
|
||||
if (intel_fb_needs_pot_stride_remap(fb) &&
|
||||
intel_fb_is_ccs_modifier(fb->base.modifier))
|
||||
dst_stride = remap_info->src_stride;
|
||||
else
|
||||
dst_stride = remap_info->width;
|
||||
|
||||
dst_stride = plane_view_dst_stride_tiles(fb, color_plane, dst_stride);
|
||||
|
||||
assign_chk_ovf(i915, remap_info->dst_stride, dst_stride);
|
||||
color_plane_info->mapping_stride = dst_stride *
|
||||
|
||||
@@ -504,7 +504,6 @@ int intel_atomic_setup_scalers(struct drm_i915_private *dev_priv,
|
||||
{
|
||||
struct drm_plane *plane = NULL;
|
||||
struct intel_plane *intel_plane;
|
||||
struct intel_plane_state *plane_state = NULL;
|
||||
struct intel_crtc_scaler_state *scaler_state =
|
||||
&crtc_state->scaler_state;
|
||||
struct drm_atomic_state *drm_state = crtc_state->uapi.state;
|
||||
@@ -536,6 +535,7 @@ int intel_atomic_setup_scalers(struct drm_i915_private *dev_priv,
|
||||
|
||||
/* walkthrough scaler_users bits and start assigning scalers */
|
||||
for (i = 0; i < sizeof(scaler_state->scaler_users) * 8; i++) {
|
||||
struct intel_plane_state *plane_state = NULL;
|
||||
int *scaler_id;
|
||||
const char *name;
|
||||
int idx, ret;
|
||||
|
||||
@@ -1293,7 +1293,7 @@ int __intel_engine_reset_bh(struct intel_engine_cs *engine, const char *msg)
|
||||
if (msg)
|
||||
drm_notice(&engine->i915->drm,
|
||||
"Resetting %s for %s\n", engine->name, msg);
|
||||
atomic_inc(&engine->i915->gpu_error.reset_engine_count[engine->uabi_class]);
|
||||
i915_increase_reset_engine_count(&engine->i915->gpu_error, engine);
|
||||
|
||||
ret = intel_gt_reset_engine(engine);
|
||||
if (ret) {
|
||||
|
||||
@@ -5001,7 +5001,8 @@ static void capture_error_state(struct intel_guc *guc,
|
||||
if (match) {
|
||||
intel_engine_set_hung_context(e, ce);
|
||||
engine_mask |= e->mask;
|
||||
atomic_inc(&i915->gpu_error.reset_engine_count[e->uabi_class]);
|
||||
i915_increase_reset_engine_count(&i915->gpu_error,
|
||||
e);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -5013,7 +5014,7 @@ static void capture_error_state(struct intel_guc *guc,
|
||||
} else {
|
||||
intel_engine_set_hung_context(ce->engine, ce);
|
||||
engine_mask = ce->engine->mask;
|
||||
atomic_inc(&i915->gpu_error.reset_engine_count[ce->engine->uabi_class]);
|
||||
i915_increase_reset_engine_count(&i915->gpu_error, ce->engine);
|
||||
}
|
||||
|
||||
with_intel_runtime_pm(&i915->runtime_pm, wakeref)
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
|
||||
#include "display/intel_display_device.h"
|
||||
#include "gt/intel_engine.h"
|
||||
#include "gt/intel_engine_types.h"
|
||||
#include "gt/intel_gt_types.h"
|
||||
#include "gt/uc/intel_uc_fw.h"
|
||||
|
||||
@@ -232,7 +233,7 @@ struct i915_gpu_error {
|
||||
atomic_t reset_count;
|
||||
|
||||
/** Number of times an engine has been reset */
|
||||
atomic_t reset_engine_count[I915_NUM_ENGINES];
|
||||
atomic_t reset_engine_count[MAX_ENGINE_CLASS];
|
||||
};
|
||||
|
||||
struct drm_i915_error_state_buf {
|
||||
@@ -255,7 +256,14 @@ static inline u32 i915_reset_count(struct i915_gpu_error *error)
|
||||
static inline u32 i915_reset_engine_count(struct i915_gpu_error *error,
|
||||
const struct intel_engine_cs *engine)
|
||||
{
|
||||
return atomic_read(&error->reset_engine_count[engine->uabi_class]);
|
||||
return atomic_read(&error->reset_engine_count[engine->class]);
|
||||
}
|
||||
|
||||
static inline void
|
||||
i915_increase_reset_engine_count(struct i915_gpu_error *error,
|
||||
const struct intel_engine_cs *engine)
|
||||
{
|
||||
atomic_inc(&error->reset_engine_count[engine->class]);
|
||||
}
|
||||
|
||||
#define CORE_DUMP_FLAG_NONE 0x0
|
||||
|
||||
@@ -37,8 +37,9 @@ int igt_live_test_begin(struct igt_live_test *t,
|
||||
}
|
||||
|
||||
for_each_engine(engine, gt, id)
|
||||
t->reset_engine[id] =
|
||||
i915_reset_engine_count(&i915->gpu_error, engine);
|
||||
t->reset_engine[i][id] =
|
||||
i915_reset_engine_count(&i915->gpu_error,
|
||||
engine);
|
||||
}
|
||||
|
||||
t->reset_global = i915_reset_count(&i915->gpu_error);
|
||||
@@ -66,14 +67,14 @@ int igt_live_test_end(struct igt_live_test *t)
|
||||
|
||||
for_each_gt(gt, i915, i) {
|
||||
for_each_engine(engine, gt, id) {
|
||||
if (t->reset_engine[id] ==
|
||||
if (t->reset_engine[i][id] ==
|
||||
i915_reset_engine_count(&i915->gpu_error, engine))
|
||||
continue;
|
||||
|
||||
gt_err(gt, "%s(%s): engine '%s' was reset %d times!\n",
|
||||
t->func, t->name, engine->name,
|
||||
i915_reset_engine_count(&i915->gpu_error, engine) -
|
||||
t->reset_engine[id]);
|
||||
t->reset_engine[i][id]);
|
||||
return -EIO;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#ifndef IGT_LIVE_TEST_H
|
||||
#define IGT_LIVE_TEST_H
|
||||
|
||||
#include "gt/intel_gt_defines.h" /* for I915_MAX_GT */
|
||||
#include "gt/intel_engine.h" /* for I915_NUM_ENGINES */
|
||||
|
||||
struct drm_i915_private;
|
||||
@@ -17,7 +18,7 @@ struct igt_live_test {
|
||||
const char *name;
|
||||
|
||||
unsigned int reset_global;
|
||||
unsigned int reset_engine[I915_NUM_ENGINES];
|
||||
unsigned int reset_engine[I915_MAX_GT][I915_NUM_ENGINES];
|
||||
};
|
||||
|
||||
/*
|
||||
|
||||
@@ -203,7 +203,7 @@ void mtk_gamma_set(struct device *dev, struct drm_crtc_state *state)
|
||||
/* Disable RELAY mode to pass the processed image */
|
||||
cfg_val &= ~GAMMA_RELAY_MODE;
|
||||
|
||||
cfg_val = readl(gamma->regs + DISP_GAMMA_CFG);
|
||||
writel(cfg_val, gamma->regs + DISP_GAMMA_CFG);
|
||||
}
|
||||
|
||||
void mtk_gamma_config(struct device *dev, unsigned int w,
|
||||
|
||||
@@ -788,6 +788,7 @@ static void mtk_drm_crtc_atomic_begin(struct drm_crtc *crtc,
|
||||
crtc);
|
||||
struct mtk_crtc_state *mtk_crtc_state = to_mtk_crtc_state(crtc_state);
|
||||
struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc);
|
||||
unsigned long flags;
|
||||
|
||||
if (mtk_crtc->event && mtk_crtc_state->base.event)
|
||||
DRM_ERROR("new event while there is still a pending event\n");
|
||||
@@ -795,7 +796,11 @@ static void mtk_drm_crtc_atomic_begin(struct drm_crtc *crtc,
|
||||
if (mtk_crtc_state->base.event) {
|
||||
mtk_crtc_state->base.event->pipe = drm_crtc_index(crtc);
|
||||
WARN_ON(drm_crtc_vblank_get(crtc) != 0);
|
||||
|
||||
spin_lock_irqsave(&crtc->dev->event_lock, flags);
|
||||
mtk_crtc->event = mtk_crtc_state->base.event;
|
||||
spin_unlock_irqrestore(&crtc->dev->event_lock, flags);
|
||||
|
||||
mtk_crtc_state->base.event = NULL;
|
||||
}
|
||||
}
|
||||
@@ -921,7 +926,14 @@ static int mtk_drm_crtc_init_comp_planes(struct drm_device *drm_dev,
|
||||
|
||||
struct device *mtk_drm_crtc_dma_dev_get(struct drm_crtc *crtc)
|
||||
{
|
||||
struct mtk_drm_crtc *mtk_crtc = to_mtk_crtc(crtc);
|
||||
struct mtk_drm_crtc *mtk_crtc = NULL;
|
||||
|
||||
if (!crtc)
|
||||
return NULL;
|
||||
|
||||
mtk_crtc = to_mtk_crtc(crtc);
|
||||
if (!mtk_crtc)
|
||||
return NULL;
|
||||
|
||||
return mtk_crtc->dma_dev;
|
||||
}
|
||||
|
||||
@@ -443,6 +443,7 @@ static int mtk_drm_kms_init(struct drm_device *drm)
|
||||
struct mtk_drm_private *private = drm->dev_private;
|
||||
struct mtk_drm_private *priv_n;
|
||||
struct device *dma_dev = NULL;
|
||||
struct drm_crtc *crtc;
|
||||
int ret, i, j;
|
||||
|
||||
if (drm_firmware_drivers_only())
|
||||
@@ -519,7 +520,9 @@ static int mtk_drm_kms_init(struct drm_device *drm)
|
||||
}
|
||||
|
||||
/* Use OVL device for all DMA memory allocations */
|
||||
dma_dev = mtk_drm_crtc_dma_dev_get(drm_crtc_from_index(drm, 0));
|
||||
crtc = drm_crtc_from_index(drm, 0);
|
||||
if (crtc)
|
||||
dma_dev = mtk_drm_crtc_dma_dev_get(crtc);
|
||||
if (!dma_dev) {
|
||||
ret = -ENODEV;
|
||||
dev_err(drm->dev, "Need at least one OVL device\n");
|
||||
|
||||
@@ -385,7 +385,7 @@ nvkm_uoutp_mthd_inherit(struct nvkm_outp *outp, void *argv, u32 argc)
|
||||
|
||||
/* Ensure an ior is hooked up to this outp already */
|
||||
ior = outp->func->inherit(outp);
|
||||
if (!ior)
|
||||
if (!ior || !ior->arm.head)
|
||||
return -ENODEV;
|
||||
|
||||
/* With iors, there will be a separate output path for each type of connector - and all of
|
||||
|
||||
@@ -49,14 +49,14 @@
|
||||
#include <subdev/mmu.h>
|
||||
|
||||
struct gk20a_instobj {
|
||||
struct nvkm_memory memory;
|
||||
struct nvkm_instobj base;
|
||||
struct nvkm_mm_node *mn;
|
||||
struct gk20a_instmem *imem;
|
||||
|
||||
/* CPU mapping */
|
||||
u32 *vaddr;
|
||||
};
|
||||
#define gk20a_instobj(p) container_of((p), struct gk20a_instobj, memory)
|
||||
#define gk20a_instobj(p) container_of((p), struct gk20a_instobj, base.memory)
|
||||
|
||||
/*
|
||||
* Used for objects allocated using the DMA API
|
||||
@@ -148,7 +148,7 @@ gk20a_instobj_iommu_recycle_vaddr(struct gk20a_instobj_iommu *obj)
|
||||
list_del(&obj->vaddr_node);
|
||||
vunmap(obj->base.vaddr);
|
||||
obj->base.vaddr = NULL;
|
||||
imem->vaddr_use -= nvkm_memory_size(&obj->base.memory);
|
||||
imem->vaddr_use -= nvkm_memory_size(&obj->base.base.memory);
|
||||
nvkm_debug(&imem->base.subdev, "vaddr used: %x/%x\n", imem->vaddr_use,
|
||||
imem->vaddr_max);
|
||||
}
|
||||
@@ -283,7 +283,7 @@ gk20a_instobj_map(struct nvkm_memory *memory, u64 offset, struct nvkm_vmm *vmm,
|
||||
{
|
||||
struct gk20a_instobj *node = gk20a_instobj(memory);
|
||||
struct nvkm_vmm_map map = {
|
||||
.memory = &node->memory,
|
||||
.memory = &node->base.memory,
|
||||
.offset = offset,
|
||||
.mem = node->mn,
|
||||
};
|
||||
@@ -391,8 +391,8 @@ gk20a_instobj_ctor_dma(struct gk20a_instmem *imem, u32 npages, u32 align,
|
||||
return -ENOMEM;
|
||||
*_node = &node->base;
|
||||
|
||||
nvkm_memory_ctor(&gk20a_instobj_func_dma, &node->base.memory);
|
||||
node->base.memory.ptrs = &gk20a_instobj_ptrs;
|
||||
nvkm_memory_ctor(&gk20a_instobj_func_dma, &node->base.base.memory);
|
||||
node->base.base.memory.ptrs = &gk20a_instobj_ptrs;
|
||||
|
||||
node->base.vaddr = dma_alloc_attrs(dev, npages << PAGE_SHIFT,
|
||||
&node->handle, GFP_KERNEL,
|
||||
@@ -438,8 +438,8 @@ gk20a_instobj_ctor_iommu(struct gk20a_instmem *imem, u32 npages, u32 align,
|
||||
*_node = &node->base;
|
||||
node->dma_addrs = (void *)(node->pages + npages);
|
||||
|
||||
nvkm_memory_ctor(&gk20a_instobj_func_iommu, &node->base.memory);
|
||||
node->base.memory.ptrs = &gk20a_instobj_ptrs;
|
||||
nvkm_memory_ctor(&gk20a_instobj_func_iommu, &node->base.base.memory);
|
||||
node->base.base.memory.ptrs = &gk20a_instobj_ptrs;
|
||||
|
||||
/* Allocate backing memory */
|
||||
for (i = 0; i < npages; i++) {
|
||||
@@ -533,7 +533,7 @@ gk20a_instobj_new(struct nvkm_instmem *base, u32 size, u32 align, bool zero,
|
||||
else
|
||||
ret = gk20a_instobj_ctor_dma(imem, size >> PAGE_SHIFT,
|
||||
align, &node);
|
||||
*pmemory = node ? &node->memory : NULL;
|
||||
*pmemory = node ? &node->base.memory : NULL;
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
|
||||
@@ -326,7 +326,7 @@ static const struct drm_display_mode ltk050h3148w_mode = {
|
||||
static const struct ltk050h3146w_desc ltk050h3148w_data = {
|
||||
.mode = <k050h3148w_mode,
|
||||
.init = ltk050h3148w_init_sequence,
|
||||
.mode_flags = MIPI_DSI_MODE_VIDEO_SYNC_PULSE,
|
||||
.mode_flags = MIPI_DSI_MODE_VIDEO_SYNC_PULSE | MIPI_DSI_MODE_VIDEO_BURST,
|
||||
};
|
||||
|
||||
static int ltk050h3146w_init_sequence(struct ltk050h3146w *ctx)
|
||||
|
||||
Reference in New Issue
Block a user