drm fixes for v5.7-rc7
vmwgfx: - change maintainers - fix redundant assignment - fix parameter name - fix return value etnaviv: - memory leak fix when userspace passes a invalid softpin address - off-by-one crashing the kernel in the perfmon domain iteration when the GPU core has both 2D and 3D capabilities amdgpu: - DP fix - Floating point fix - Fix cursor stutter issue -----BEGIN PGP SIGNATURE----- iQIcBAABAgAGBQJeyDb/AAoJEAx081l5xIa+wL4P/3pd2Favy18WHMgotEXhN8QV /3t0SpNtIxAGuYLf7U5oWKq30fNY6QGBGSeqlgISCDG+SOsEXlhjBSCDDhfO+sez pdbXoGI+2lW/gNTYEVKbk/Lb1VMKP+RCkhLkCZJLyeQ+60Y3kr2/yPdCb7MUf4wl waQQMDfSRIciy1UrAJU4nxRV39VWuokaIs9vwfY3trdA41pz9KlCJW0+JsdoavcG Ala9uThSK0QxBZ76Mtqukxkr0E/sV/mqckPTaYwKNmGFoIYtKcWvyU2BffWwmGU/ a48t45oah5GDi1fDsbBdJTSnlAnTjxisl5ASDgfny7gHpvmh00Poh3jThMW0DUew 2CfUfaQk/U6mcAMp6HLwtDOi+f35KdQp6hyIAQkYeSMUtTcP6cq5BNXDRSt+sOiT WqdvzE8fmBKJ422ZB0MIg4FziNqYXkrkOnkyHqEV1DNF2ueR9XHOOdNQMwEgJJLI Fc1VkiVDtfOZ1LCItnP3+4AQT6P3DbZzDa3aoTZAutsuP7f14AeccvcLfnODUdgA wAk6DneM56lHpS7WJq69Jumv/hfoiuR65dtl4hg5g7ujJRGBjf6EzNQPaHV0k8iI 1JYtkZ3fr8X4x0BOss25c7TbNuTDsARF7Cwyg4eNzNYlyUYsvHT24ywcoPYaJ4b6 dbQcyMoEA89DovCX5Wvj =1XSD -----END PGP SIGNATURE----- Merge tag 'drm-fixes-2020-05-23' of git://anongit.freedesktop.org/drm/drm Pull drm fixes from Dave Airlie: "Things seemed to have quieten down, though no i915 pull (I even gave them an extra 12 hours in case they were late). The amdgpu floating point fix is probably the largest, but it just moves some code around to it doesn't do fpu stuff outside the fpu boundaries. Otherwise it's just a couple of vmwgfx fixes (maintainer change) and two etnaviv fixes. vmwgfx: - change maintainers - fix redundant assignment - fix parameter name - fix return value etnaviv: - memory leak fix when userspace passes a invalid softpin address - off-by-one crashing the kernel in the perfmon domain iteration when the GPU core has both 2D and 3D capabilities amdgpu: - DP fix - Floating point fix - Fix cursor stutter issue" * tag 'drm-fixes-2020-05-23' of git://anongit.freedesktop.org/drm/drm: drm/amd/display: Defer cursor lock until after VUPDATE drm/amd/display: Remove dml_common_def file drm/amd/display: DP training to set properly SCRAMBLING_DISABLE drm/edid: Add Oculus Rift S to non-desktop list drm/etnaviv: Fix a leak in submit_pin_objects() drm/etnaviv: fix perfmon domain interation drm/vmwgfx: Return true in function vmw_fence_obj_signaled() drm/vmwgfx: remove redundant assignment to variable ret drm/vmwgfx: Fix parameter name in vmw_bo_init drm/vmwgfx: update MAINTAINERS entry
This commit is contained in:
Коммит
a24deb9d68
|
@ -5507,10 +5507,10 @@ F: drivers/gpu/drm/vboxvideo/
|
|||
|
||||
DRM DRIVER FOR VMWARE VIRTUAL GPU
|
||||
M: "VMware Graphics" <linux-graphics-maintainer@vmware.com>
|
||||
M: Thomas Hellstrom <thellstrom@vmware.com>
|
||||
M: Roland Scheidegger <sroland@vmware.com>
|
||||
L: dri-devel@lists.freedesktop.org
|
||||
S: Supported
|
||||
T: git git://people.freedesktop.org/~thomash/linux
|
||||
T: git git://people.freedesktop.org/~sroland/linux
|
||||
F: drivers/gpu/drm/vmwgfx/
|
||||
F: include/uapi/drm/vmwgfx_drm.h
|
||||
|
||||
|
|
|
@ -220,6 +220,30 @@ static enum dpcd_training_patterns
|
|||
return dpcd_tr_pattern;
|
||||
}
|
||||
|
||||
static uint8_t dc_dp_initialize_scrambling_data_symbols(
|
||||
struct dc_link *link,
|
||||
enum dc_dp_training_pattern pattern)
|
||||
{
|
||||
uint8_t disable_scrabled_data_symbols = 0;
|
||||
|
||||
switch (pattern) {
|
||||
case DP_TRAINING_PATTERN_SEQUENCE_1:
|
||||
case DP_TRAINING_PATTERN_SEQUENCE_2:
|
||||
case DP_TRAINING_PATTERN_SEQUENCE_3:
|
||||
disable_scrabled_data_symbols = 1;
|
||||
break;
|
||||
case DP_TRAINING_PATTERN_SEQUENCE_4:
|
||||
disable_scrabled_data_symbols = 0;
|
||||
break;
|
||||
default:
|
||||
ASSERT(0);
|
||||
DC_LOG_HW_LINK_TRAINING("%s: Invalid HW Training pattern: %d\n",
|
||||
__func__, pattern);
|
||||
break;
|
||||
}
|
||||
return disable_scrabled_data_symbols;
|
||||
}
|
||||
|
||||
static inline bool is_repeater(struct dc_link *link, uint32_t offset)
|
||||
{
|
||||
return (!link->is_lttpr_mode_transparent && offset != 0);
|
||||
|
@ -252,6 +276,9 @@ static void dpcd_set_lt_pattern_and_lane_settings(
|
|||
dpcd_pattern.v1_4.TRAINING_PATTERN_SET =
|
||||
dc_dp_training_pattern_to_dpcd_training_pattern(link, pattern);
|
||||
|
||||
dpcd_pattern.v1_4.SCRAMBLING_DISABLE =
|
||||
dc_dp_initialize_scrambling_data_symbols(link, pattern);
|
||||
|
||||
dpcd_lt_buffer[DP_TRAINING_PATTERN_SET - DP_TRAINING_PATTERN_SET]
|
||||
= dpcd_pattern.raw;
|
||||
|
||||
|
|
|
@ -1625,12 +1625,79 @@ void dcn10_pipe_control_lock(
|
|||
hws->funcs.verify_allow_pstate_change_high(dc);
|
||||
}
|
||||
|
||||
/**
|
||||
* delay_cursor_until_vupdate() - Delay cursor update if too close to VUPDATE.
|
||||
*
|
||||
* Software keepout workaround to prevent cursor update locking from stalling
|
||||
* out cursor updates indefinitely or from old values from being retained in
|
||||
* the case where the viewport changes in the same frame as the cursor.
|
||||
*
|
||||
* The idea is to calculate the remaining time from VPOS to VUPDATE. If it's
|
||||
* too close to VUPDATE, then stall out until VUPDATE finishes.
|
||||
*
|
||||
* TODO: Optimize cursor programming to be once per frame before VUPDATE
|
||||
* to avoid the need for this workaround.
|
||||
*/
|
||||
static void delay_cursor_until_vupdate(struct dc *dc, struct pipe_ctx *pipe_ctx)
|
||||
{
|
||||
struct dc_stream_state *stream = pipe_ctx->stream;
|
||||
struct crtc_position position;
|
||||
uint32_t vupdate_start, vupdate_end;
|
||||
unsigned int lines_to_vupdate, us_to_vupdate, vpos;
|
||||
unsigned int us_per_line, us_vupdate;
|
||||
|
||||
if (!dc->hwss.calc_vupdate_position || !dc->hwss.get_position)
|
||||
return;
|
||||
|
||||
if (!pipe_ctx->stream_res.stream_enc || !pipe_ctx->stream_res.tg)
|
||||
return;
|
||||
|
||||
dc->hwss.calc_vupdate_position(dc, pipe_ctx, &vupdate_start,
|
||||
&vupdate_end);
|
||||
|
||||
dc->hwss.get_position(&pipe_ctx, 1, &position);
|
||||
vpos = position.vertical_count;
|
||||
|
||||
/* Avoid wraparound calculation issues */
|
||||
vupdate_start += stream->timing.v_total;
|
||||
vupdate_end += stream->timing.v_total;
|
||||
vpos += stream->timing.v_total;
|
||||
|
||||
if (vpos <= vupdate_start) {
|
||||
/* VPOS is in VACTIVE or back porch. */
|
||||
lines_to_vupdate = vupdate_start - vpos;
|
||||
} else if (vpos > vupdate_end) {
|
||||
/* VPOS is in the front porch. */
|
||||
return;
|
||||
} else {
|
||||
/* VPOS is in VUPDATE. */
|
||||
lines_to_vupdate = 0;
|
||||
}
|
||||
|
||||
/* Calculate time until VUPDATE in microseconds. */
|
||||
us_per_line =
|
||||
stream->timing.h_total * 10000u / stream->timing.pix_clk_100hz;
|
||||
us_to_vupdate = lines_to_vupdate * us_per_line;
|
||||
|
||||
/* 70 us is a conservative estimate of cursor update time*/
|
||||
if (us_to_vupdate > 70)
|
||||
return;
|
||||
|
||||
/* Stall out until the cursor update completes. */
|
||||
us_vupdate = (vupdate_end - vupdate_start + 1) * us_per_line;
|
||||
udelay(us_to_vupdate + us_vupdate);
|
||||
}
|
||||
|
||||
void dcn10_cursor_lock(struct dc *dc, struct pipe_ctx *pipe, bool lock)
|
||||
{
|
||||
/* cursor lock is per MPCC tree, so only need to lock one pipe per stream */
|
||||
if (!pipe || pipe->top_pipe)
|
||||
return;
|
||||
|
||||
/* Prevent cursor lock from stalling out cursor updates. */
|
||||
if (lock)
|
||||
delay_cursor_until_vupdate(dc, pipe);
|
||||
|
||||
dc->res_pool->mpc->funcs->cursor_lock(dc->res_pool->mpc,
|
||||
pipe->stream_res.opp->inst, lock);
|
||||
}
|
||||
|
@ -3236,7 +3303,7 @@ int dcn10_get_vupdate_offset_from_vsync(struct pipe_ctx *pipe_ctx)
|
|||
return vertical_line_start;
|
||||
}
|
||||
|
||||
static void dcn10_calc_vupdate_position(
|
||||
void dcn10_calc_vupdate_position(
|
||||
struct dc *dc,
|
||||
struct pipe_ctx *pipe_ctx,
|
||||
uint32_t *start_line,
|
||||
|
|
|
@ -34,6 +34,11 @@ struct dc;
|
|||
void dcn10_hw_sequencer_construct(struct dc *dc);
|
||||
|
||||
int dcn10_get_vupdate_offset_from_vsync(struct pipe_ctx *pipe_ctx);
|
||||
void dcn10_calc_vupdate_position(
|
||||
struct dc *dc,
|
||||
struct pipe_ctx *pipe_ctx,
|
||||
uint32_t *start_line,
|
||||
uint32_t *end_line);
|
||||
void dcn10_setup_vupdate_interrupt(struct dc *dc, struct pipe_ctx *pipe_ctx);
|
||||
enum dc_status dcn10_enable_stream_timing(
|
||||
struct pipe_ctx *pipe_ctx,
|
||||
|
|
|
@ -72,6 +72,7 @@ static const struct hw_sequencer_funcs dcn10_funcs = {
|
|||
.set_clock = dcn10_set_clock,
|
||||
.get_clock = dcn10_get_clock,
|
||||
.get_vupdate_offset_from_vsync = dcn10_get_vupdate_offset_from_vsync,
|
||||
.calc_vupdate_position = dcn10_calc_vupdate_position,
|
||||
};
|
||||
|
||||
static const struct hwseq_private_funcs dcn10_private_funcs = {
|
||||
|
|
|
@ -83,6 +83,7 @@ static const struct hw_sequencer_funcs dcn20_funcs = {
|
|||
.init_vm_ctx = dcn20_init_vm_ctx,
|
||||
.set_flip_control_gsl = dcn20_set_flip_control_gsl,
|
||||
.get_vupdate_offset_from_vsync = dcn10_get_vupdate_offset_from_vsync,
|
||||
.calc_vupdate_position = dcn10_calc_vupdate_position,
|
||||
};
|
||||
|
||||
static const struct hwseq_private_funcs dcn20_private_funcs = {
|
||||
|
|
|
@ -86,6 +86,7 @@ static const struct hw_sequencer_funcs dcn21_funcs = {
|
|||
.optimize_pwr_state = dcn21_optimize_pwr_state,
|
||||
.exit_optimized_pwr_state = dcn21_exit_optimized_pwr_state,
|
||||
.get_vupdate_offset_from_vsync = dcn10_get_vupdate_offset_from_vsync,
|
||||
.calc_vupdate_position = dcn10_calc_vupdate_position,
|
||||
.set_cursor_position = dcn10_set_cursor_position,
|
||||
.set_cursor_attribute = dcn10_set_cursor_attribute,
|
||||
.set_cursor_sdr_white_level = dcn10_set_cursor_sdr_white_level,
|
||||
|
|
|
@ -63,10 +63,8 @@ CFLAGS_$(AMDDALPATH)/dc/dml/dcn21/display_rq_dlg_calc_21.o := $(dml_ccflags)
|
|||
endif
|
||||
CFLAGS_$(AMDDALPATH)/dc/dml/dml1_display_rq_dlg_calc.o := $(dml_ccflags)
|
||||
CFLAGS_$(AMDDALPATH)/dc/dml/display_rq_dlg_helpers.o := $(dml_ccflags)
|
||||
CFLAGS_$(AMDDALPATH)/dc/dml/dml_common_defs.o := $(dml_ccflags)
|
||||
|
||||
DML = display_mode_lib.o display_rq_dlg_helpers.o dml1_display_rq_dlg_calc.o \
|
||||
dml_common_defs.o
|
||||
|
||||
ifdef CONFIG_DRM_AMD_DC_DCN
|
||||
DML += display_mode_vba.o dcn20/display_rq_dlg_calc_20.o dcn20/display_mode_vba_20.o
|
||||
|
|
|
@ -26,7 +26,6 @@
|
|||
#ifndef __DML20_DISPLAY_RQ_DLG_CALC_H__
|
||||
#define __DML20_DISPLAY_RQ_DLG_CALC_H__
|
||||
|
||||
#include "../dml_common_defs.h"
|
||||
#include "../display_rq_dlg_helpers.h"
|
||||
|
||||
struct display_mode_lib;
|
||||
|
|
|
@ -26,7 +26,6 @@
|
|||
#ifndef __DML20V2_DISPLAY_RQ_DLG_CALC_H__
|
||||
#define __DML20V2_DISPLAY_RQ_DLG_CALC_H__
|
||||
|
||||
#include "../dml_common_defs.h"
|
||||
#include "../display_rq_dlg_helpers.h"
|
||||
|
||||
struct display_mode_lib;
|
||||
|
|
|
@ -26,7 +26,7 @@
|
|||
#ifndef __DML21_DISPLAY_RQ_DLG_CALC_H__
|
||||
#define __DML21_DISPLAY_RQ_DLG_CALC_H__
|
||||
|
||||
#include "../dml_common_defs.h"
|
||||
#include "dm_services.h"
|
||||
#include "../display_rq_dlg_helpers.h"
|
||||
|
||||
struct display_mode_lib;
|
||||
|
|
|
@ -25,8 +25,10 @@
|
|||
#ifndef __DISPLAY_MODE_LIB_H__
|
||||
#define __DISPLAY_MODE_LIB_H__
|
||||
|
||||
|
||||
#include "dml_common_defs.h"
|
||||
#include "dm_services.h"
|
||||
#include "dc_features.h"
|
||||
#include "display_mode_structs.h"
|
||||
#include "display_mode_enums.h"
|
||||
#include "display_mode_vba.h"
|
||||
|
||||
enum dml_project {
|
||||
|
|
|
@ -27,8 +27,6 @@
|
|||
#ifndef __DML2_DISPLAY_MODE_VBA_H__
|
||||
#define __DML2_DISPLAY_MODE_VBA_H__
|
||||
|
||||
#include "dml_common_defs.h"
|
||||
|
||||
struct display_mode_lib;
|
||||
|
||||
void ModeSupportAndSystemConfiguration(struct display_mode_lib *mode_lib);
|
||||
|
|
|
@ -26,7 +26,6 @@
|
|||
#ifndef __DISPLAY_RQ_DLG_HELPERS_H__
|
||||
#define __DISPLAY_RQ_DLG_HELPERS_H__
|
||||
|
||||
#include "dml_common_defs.h"
|
||||
#include "display_mode_lib.h"
|
||||
|
||||
/* Function: Printer functions
|
||||
|
|
|
@ -26,8 +26,6 @@
|
|||
#ifndef __DISPLAY_RQ_DLG_CALC_H__
|
||||
#define __DISPLAY_RQ_DLG_CALC_H__
|
||||
|
||||
#include "dml_common_defs.h"
|
||||
|
||||
struct display_mode_lib;
|
||||
|
||||
#include "display_rq_dlg_helpers.h"
|
||||
|
|
|
@ -1,43 +0,0 @@
|
|||
/*
|
||||
* Copyright 2017 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Authors: AMD
|
||||
*
|
||||
*/
|
||||
|
||||
#include "dml_common_defs.h"
|
||||
#include "dcn_calc_math.h"
|
||||
|
||||
#include "dml_inline_defs.h"
|
||||
|
||||
double dml_round(double a)
|
||||
{
|
||||
double round_pt = 0.5;
|
||||
double ceil = dml_ceil(a, 1);
|
||||
double floor = dml_floor(a, 1);
|
||||
|
||||
if (a - floor >= round_pt)
|
||||
return ceil;
|
||||
else
|
||||
return floor;
|
||||
}
|
||||
|
||||
|
|
@ -1,37 +0,0 @@
|
|||
/*
|
||||
* Copyright 2017 Advanced Micro Devices, Inc.
|
||||
*
|
||||
* Permission is hereby granted, free of charge, to any person obtaining a
|
||||
* copy of this software and associated documentation files (the "Software"),
|
||||
* to deal in the Software without restriction, including without limitation
|
||||
* the rights to use, copy, modify, merge, publish, distribute, sublicense,
|
||||
* and/or sell copies of the Software, and to permit persons to whom the
|
||||
* Software is furnished to do so, subject to the following conditions:
|
||||
*
|
||||
* The above copyright notice and this permission notice shall be included in
|
||||
* all copies or substantial portions of the Software.
|
||||
*
|
||||
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
|
||||
* THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
|
||||
* OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
|
||||
* ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||
* OTHER DEALINGS IN THE SOFTWARE.
|
||||
*
|
||||
* Authors: AMD
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __DC_COMMON_DEFS_H__
|
||||
#define __DC_COMMON_DEFS_H__
|
||||
|
||||
#include "dm_services.h"
|
||||
#include "dc_features.h"
|
||||
#include "display_mode_structs.h"
|
||||
#include "display_mode_enums.h"
|
||||
|
||||
|
||||
double dml_round(double a);
|
||||
|
||||
#endif /* __DC_COMMON_DEFS_H__ */
|
|
@ -26,7 +26,6 @@
|
|||
#ifndef __DML_INLINE_DEFS_H__
|
||||
#define __DML_INLINE_DEFS_H__
|
||||
|
||||
#include "dml_common_defs.h"
|
||||
#include "dcn_calc_math.h"
|
||||
#include "dml_logger.h"
|
||||
|
||||
|
@ -75,6 +74,18 @@ static inline double dml_floor(double a, double granularity)
|
|||
return (double) dcn_bw_floor2(a, granularity);
|
||||
}
|
||||
|
||||
static inline double dml_round(double a)
|
||||
{
|
||||
double round_pt = 0.5;
|
||||
double ceil = dml_ceil(a, 1);
|
||||
double floor = dml_floor(a, 1);
|
||||
|
||||
if (a - floor >= round_pt)
|
||||
return ceil;
|
||||
else
|
||||
return floor;
|
||||
}
|
||||
|
||||
static inline int dml_log2(double x)
|
||||
{
|
||||
return dml_round((double)dcn_bw_log(x, 2));
|
||||
|
@ -112,7 +123,7 @@ static inline double dml_log(double x, double base)
|
|||
|
||||
static inline unsigned int dml_round_to_multiple(unsigned int num,
|
||||
unsigned int multiple,
|
||||
bool up)
|
||||
unsigned char up)
|
||||
{
|
||||
unsigned int remainder;
|
||||
|
||||
|
|
|
@ -92,6 +92,11 @@ struct hw_sequencer_funcs {
|
|||
void (*get_position)(struct pipe_ctx **pipe_ctx, int num_pipes,
|
||||
struct crtc_position *position);
|
||||
int (*get_vupdate_offset_from_vsync)(struct pipe_ctx *pipe_ctx);
|
||||
void (*calc_vupdate_position)(
|
||||
struct dc *dc,
|
||||
struct pipe_ctx *pipe_ctx,
|
||||
uint32_t *start_line,
|
||||
uint32_t *end_line);
|
||||
void (*enable_per_frame_crtc_position_reset)(struct dc *dc,
|
||||
int group_size, struct pipe_ctx *grouped_pipes[]);
|
||||
void (*enable_timing_synchronization)(struct dc *dc,
|
||||
|
|
|
@ -191,10 +191,11 @@ static const struct edid_quirk {
|
|||
{ "HVR", 0xaa01, EDID_QUIRK_NON_DESKTOP },
|
||||
{ "HVR", 0xaa02, EDID_QUIRK_NON_DESKTOP },
|
||||
|
||||
/* Oculus Rift DK1, DK2, and CV1 VR Headsets */
|
||||
/* Oculus Rift DK1, DK2, CV1 and Rift S VR Headsets */
|
||||
{ "OVR", 0x0001, EDID_QUIRK_NON_DESKTOP },
|
||||
{ "OVR", 0x0003, EDID_QUIRK_NON_DESKTOP },
|
||||
{ "OVR", 0x0004, EDID_QUIRK_NON_DESKTOP },
|
||||
{ "OVR", 0x0012, EDID_QUIRK_NON_DESKTOP },
|
||||
|
||||
/* Windows Mixed Reality Headsets */
|
||||
{ "ACR", 0x7fce, EDID_QUIRK_NON_DESKTOP },
|
||||
|
|
|
@ -238,8 +238,10 @@ static int submit_pin_objects(struct etnaviv_gem_submit *submit)
|
|||
}
|
||||
|
||||
if ((submit->flags & ETNA_SUBMIT_SOFTPIN) &&
|
||||
submit->bos[i].va != mapping->iova)
|
||||
submit->bos[i].va != mapping->iova) {
|
||||
etnaviv_gem_mapping_unreference(mapping);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
atomic_inc(&etnaviv_obj->gpu_active);
|
||||
|
||||
|
|
|
@ -453,7 +453,7 @@ static const struct etnaviv_pm_domain *pm_domain(const struct etnaviv_gpu *gpu,
|
|||
if (!(gpu->identity.features & meta->feature))
|
||||
continue;
|
||||
|
||||
if (meta->nr_domains < (index - offset)) {
|
||||
if (index - offset >= meta->nr_domains) {
|
||||
offset += meta->nr_domains;
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -850,7 +850,7 @@ extern void vmw_bo_bo_free(struct ttm_buffer_object *bo);
|
|||
extern int vmw_bo_init(struct vmw_private *dev_priv,
|
||||
struct vmw_buffer_object *vmw_bo,
|
||||
size_t size, struct ttm_placement *placement,
|
||||
bool interuptable,
|
||||
bool interruptible,
|
||||
void (*bo_free)(struct ttm_buffer_object *bo));
|
||||
extern int vmw_user_bo_verify_access(struct ttm_buffer_object *bo,
|
||||
struct ttm_object_file *tfile);
|
||||
|
|
|
@ -515,7 +515,7 @@ bool vmw_fence_obj_signaled(struct vmw_fence_obj *fence)
|
|||
struct vmw_fence_manager *fman = fman_from_fence(fence);
|
||||
|
||||
if (test_bit(DMA_FENCE_FLAG_SIGNALED_BIT, &fence->base.flags))
|
||||
return 1;
|
||||
return true;
|
||||
|
||||
vmw_fences_update(fman);
|
||||
|
||||
|
|
|
@ -1651,7 +1651,7 @@ vmw_gb_surface_reference_internal(struct drm_device *dev,
|
|||
struct vmw_surface_metadata *metadata;
|
||||
struct ttm_base_object *base;
|
||||
uint32_t backup_handle;
|
||||
int ret = -EINVAL;
|
||||
int ret;
|
||||
|
||||
ret = vmw_surface_handle_reference(dev_priv, file_priv, req->sid,
|
||||
req->handle_type, &base);
|
||||
|
|
Загрузка…
Ссылка в новой задаче