mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-12 13:34:10 +08:00
- GVT fixes including fix for a CommetLake regression in mmio table
and misc doc and typo fixes - Fix CCS handling (Matt) - Fix for guc requests after reset (Daniele) - Display DSI related fixes (Jani) - Display backlight related fixes (Arun, Jouni) -----BEGIN PGP SIGNATURE----- iQEzBAABCAAdFiEEbSBwaO7dZQkcLOKj+mJfZA7rE8oFAmMIwg0ACgkQ+mJfZA7r E8ocAwf/R8St/2QeZIWL1X0jOb1h2hPMmBoKzucwS2d3r1WTKCdTnGduwWM9DAR6 b/qZ8AEwTu217yi8HOPDZ5wXp9WjXVn7RaUcXC6ZO+olgfaxMTrwVQy6YYQOoF6/ eZ/Vncmr4U3Jov5birwQG3OGjP6CyDKKuURlOeOqS4SuMjbEhPgel4qlEx+NjXq7 x1YWxfCcDtUwgpTfcCtiUl7QeOKp6cO5IkwuATAvFegWXic2YudKaIe088b2r/n+ w2iak08KCpYcL+R/0lt4rsryvz4wEUZWdOl/gtLIA+9Bi+IIhk3rrpUG1FS6UVAg YV9FmNpzzrNwByUMho7noyqvKv097A== =L8yv -----END PGP SIGNATURE----- Merge tag 'drm-intel-fixes-2022-08-26' of git://anongit.freedesktop.org/drm/drm-intel into drm-fixes - GVT fixes including fix for a CommetLake regression in mmio table and misc doc and typo fixes - Fix CCS handling (Matt) - Fix for guc requests after reset (Daniele) - Display DSI related fixes (Jani) - Display backlight related fixes (Arun, Jouni) Signed-off-by: Dave Airlie <airlied@redhat.com> From: Rodrigo Vivi <rodrigo.vivi@intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/YwjCTDFm7clXPgEu@intel.com
This commit is contained in:
commit
a54569b1f9
@ -2070,7 +2070,14 @@ void icl_dsi_init(struct drm_i915_private *dev_priv)
|
||||
else
|
||||
intel_dsi->ports = BIT(port);
|
||||
|
||||
if (drm_WARN_ON(&dev_priv->drm, intel_connector->panel.vbt.dsi.bl_ports & ~intel_dsi->ports))
|
||||
intel_connector->panel.vbt.dsi.bl_ports &= intel_dsi->ports;
|
||||
|
||||
intel_dsi->dcs_backlight_ports = intel_connector->panel.vbt.dsi.bl_ports;
|
||||
|
||||
if (drm_WARN_ON(&dev_priv->drm, intel_connector->panel.vbt.dsi.cabc_ports & ~intel_dsi->ports))
|
||||
intel_connector->panel.vbt.dsi.cabc_ports &= intel_dsi->ports;
|
||||
|
||||
intel_dsi->dcs_cabc_ports = intel_connector->panel.vbt.dsi.cabc_ports;
|
||||
|
||||
for_each_dsi_port(port, intel_dsi->ports) {
|
||||
|
@ -16,6 +16,7 @@
|
||||
#include "intel_dsi_dcs_backlight.h"
|
||||
#include "intel_panel.h"
|
||||
#include "intel_pci_config.h"
|
||||
#include "intel_pps.h"
|
||||
|
||||
/**
|
||||
* scale - scale values from one range to another
|
||||
@ -971,26 +972,24 @@ int intel_backlight_device_register(struct intel_connector *connector)
|
||||
if (!name)
|
||||
return -ENOMEM;
|
||||
|
||||
bd = backlight_device_register(name, connector->base.kdev, connector,
|
||||
&intel_backlight_device_ops, &props);
|
||||
|
||||
/*
|
||||
* Using the same name independent of the drm device or connector
|
||||
* prevents registration of multiple backlight devices in the
|
||||
* driver. However, we need to use the default name for backward
|
||||
* compatibility. Use unique names for subsequent backlight devices as a
|
||||
* fallback when the default name already exists.
|
||||
*/
|
||||
if (IS_ERR(bd) && PTR_ERR(bd) == -EEXIST) {
|
||||
bd = backlight_device_get_by_name(name);
|
||||
if (bd) {
|
||||
put_device(&bd->dev);
|
||||
/*
|
||||
* Using the same name independent of the drm device or connector
|
||||
* prevents registration of multiple backlight devices in the
|
||||
* driver. However, we need to use the default name for backward
|
||||
* compatibility. Use unique names for subsequent backlight devices as a
|
||||
* fallback when the default name already exists.
|
||||
*/
|
||||
kfree(name);
|
||||
name = kasprintf(GFP_KERNEL, "card%d-%s-backlight",
|
||||
i915->drm.primary->index, connector->base.name);
|
||||
if (!name)
|
||||
return -ENOMEM;
|
||||
|
||||
bd = backlight_device_register(name, connector->base.kdev, connector,
|
||||
&intel_backlight_device_ops, &props);
|
||||
}
|
||||
bd = backlight_device_register(name, connector->base.kdev, connector,
|
||||
&intel_backlight_device_ops, &props);
|
||||
|
||||
if (IS_ERR(bd)) {
|
||||
drm_err(&i915->drm,
|
||||
@ -1773,9 +1772,13 @@ void intel_backlight_init_funcs(struct intel_panel *panel)
|
||||
panel->backlight.pwm_funcs = &i9xx_pwm_funcs;
|
||||
}
|
||||
|
||||
if (connector->base.connector_type == DRM_MODE_CONNECTOR_eDP &&
|
||||
intel_dp_aux_init_backlight_funcs(connector) == 0)
|
||||
return;
|
||||
if (connector->base.connector_type == DRM_MODE_CONNECTOR_eDP) {
|
||||
if (intel_dp_aux_init_backlight_funcs(connector) == 0)
|
||||
return;
|
||||
|
||||
if (!(dev_priv->quirks & QUIRK_NO_PPS_BACKLIGHT_POWER_HOOK))
|
||||
connector->panel.backlight.power = intel_pps_backlight_power;
|
||||
}
|
||||
|
||||
/* We're using a standard PWM backlight interface */
|
||||
panel->backlight.funcs = &pwm_bl_funcs;
|
||||
|
@ -1596,6 +1596,8 @@ static void parse_dsi_backlight_ports(struct drm_i915_private *i915,
|
||||
struct intel_panel *panel,
|
||||
enum port port)
|
||||
{
|
||||
enum port port_bc = DISPLAY_VER(i915) >= 11 ? PORT_B : PORT_C;
|
||||
|
||||
if (!panel->vbt.dsi.config->dual_link || i915->vbt.version < 197) {
|
||||
panel->vbt.dsi.bl_ports = BIT(port);
|
||||
if (panel->vbt.dsi.config->cabc_supported)
|
||||
@ -1609,11 +1611,11 @@ static void parse_dsi_backlight_ports(struct drm_i915_private *i915,
|
||||
panel->vbt.dsi.bl_ports = BIT(PORT_A);
|
||||
break;
|
||||
case DL_DCS_PORT_C:
|
||||
panel->vbt.dsi.bl_ports = BIT(PORT_C);
|
||||
panel->vbt.dsi.bl_ports = BIT(port_bc);
|
||||
break;
|
||||
default:
|
||||
case DL_DCS_PORT_A_AND_C:
|
||||
panel->vbt.dsi.bl_ports = BIT(PORT_A) | BIT(PORT_C);
|
||||
panel->vbt.dsi.bl_ports = BIT(PORT_A) | BIT(port_bc);
|
||||
break;
|
||||
}
|
||||
|
||||
@ -1625,12 +1627,12 @@ static void parse_dsi_backlight_ports(struct drm_i915_private *i915,
|
||||
panel->vbt.dsi.cabc_ports = BIT(PORT_A);
|
||||
break;
|
||||
case DL_DCS_PORT_C:
|
||||
panel->vbt.dsi.cabc_ports = BIT(PORT_C);
|
||||
panel->vbt.dsi.cabc_ports = BIT(port_bc);
|
||||
break;
|
||||
default:
|
||||
case DL_DCS_PORT_A_AND_C:
|
||||
panel->vbt.dsi.cabc_ports =
|
||||
BIT(PORT_A) | BIT(PORT_C);
|
||||
BIT(PORT_A) | BIT(port_bc);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
@ -5293,8 +5293,6 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
|
||||
|
||||
intel_panel_init(intel_connector);
|
||||
|
||||
if (!(dev_priv->quirks & QUIRK_NO_PPS_BACKLIGHT_POWER_HOOK))
|
||||
intel_connector->panel.backlight.power = intel_pps_backlight_power;
|
||||
intel_backlight_setup(intel_connector, pipe);
|
||||
|
||||
intel_edp_add_properties(intel_dp);
|
||||
|
@ -1933,7 +1933,14 @@ void vlv_dsi_init(struct drm_i915_private *dev_priv)
|
||||
else
|
||||
intel_dsi->ports = BIT(port);
|
||||
|
||||
if (drm_WARN_ON(&dev_priv->drm, intel_connector->panel.vbt.dsi.bl_ports & ~intel_dsi->ports))
|
||||
intel_connector->panel.vbt.dsi.bl_ports &= intel_dsi->ports;
|
||||
|
||||
intel_dsi->dcs_backlight_ports = intel_connector->panel.vbt.dsi.bl_ports;
|
||||
|
||||
if (drm_WARN_ON(&dev_priv->drm, intel_connector->panel.vbt.dsi.cabc_ports & ~intel_dsi->ports))
|
||||
intel_connector->panel.vbt.dsi.cabc_ports &= intel_dsi->ports;
|
||||
|
||||
intel_dsi->dcs_cabc_ports = intel_connector->panel.vbt.dsi.cabc_ports;
|
||||
|
||||
/* Create a DSI host (and a device) for each port. */
|
||||
|
@ -638,9 +638,9 @@ static int emit_copy(struct i915_request *rq,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int scatter_list_length(struct scatterlist *sg)
|
||||
static u64 scatter_list_length(struct scatterlist *sg)
|
||||
{
|
||||
int len = 0;
|
||||
u64 len = 0;
|
||||
|
||||
while (sg && sg_dma_len(sg)) {
|
||||
len += sg_dma_len(sg);
|
||||
@ -650,28 +650,26 @@ static int scatter_list_length(struct scatterlist *sg)
|
||||
return len;
|
||||
}
|
||||
|
||||
static void
|
||||
static int
|
||||
calculate_chunk_sz(struct drm_i915_private *i915, bool src_is_lmem,
|
||||
int *src_sz, u32 bytes_to_cpy, u32 ccs_bytes_to_cpy)
|
||||
u64 bytes_to_cpy, u64 ccs_bytes_to_cpy)
|
||||
{
|
||||
if (ccs_bytes_to_cpy) {
|
||||
if (!src_is_lmem)
|
||||
/*
|
||||
* When CHUNK_SZ is passed all the pages upto CHUNK_SZ
|
||||
* will be taken for the blt. in Flat-ccs supported
|
||||
* platform Smem obj will have more pages than required
|
||||
* for main meory hence limit it to the required size
|
||||
* for main memory
|
||||
*/
|
||||
*src_sz = min_t(int, bytes_to_cpy, CHUNK_SZ);
|
||||
} else { /* ccs handling is not required */
|
||||
*src_sz = CHUNK_SZ;
|
||||
}
|
||||
if (ccs_bytes_to_cpy && !src_is_lmem)
|
||||
/*
|
||||
* When CHUNK_SZ is passed all the pages upto CHUNK_SZ
|
||||
* will be taken for the blt. in Flat-ccs supported
|
||||
* platform Smem obj will have more pages than required
|
||||
* for main meory hence limit it to the required size
|
||||
* for main memory
|
||||
*/
|
||||
return min_t(u64, bytes_to_cpy, CHUNK_SZ);
|
||||
else
|
||||
return CHUNK_SZ;
|
||||
}
|
||||
|
||||
static void get_ccs_sg_sgt(struct sgt_dma *it, u32 bytes_to_cpy)
|
||||
static void get_ccs_sg_sgt(struct sgt_dma *it, u64 bytes_to_cpy)
|
||||
{
|
||||
u32 len;
|
||||
u64 len;
|
||||
|
||||
do {
|
||||
GEM_BUG_ON(!it->sg || !sg_dma_len(it->sg));
|
||||
@ -702,12 +700,12 @@ intel_context_migrate_copy(struct intel_context *ce,
|
||||
{
|
||||
struct sgt_dma it_src = sg_sgt(src), it_dst = sg_sgt(dst), it_ccs;
|
||||
struct drm_i915_private *i915 = ce->engine->i915;
|
||||
u32 ccs_bytes_to_cpy = 0, bytes_to_cpy;
|
||||
u64 ccs_bytes_to_cpy = 0, bytes_to_cpy;
|
||||
enum i915_cache_level ccs_cache_level;
|
||||
u32 src_offset, dst_offset;
|
||||
u8 src_access, dst_access;
|
||||
struct i915_request *rq;
|
||||
int src_sz, dst_sz;
|
||||
u64 src_sz, dst_sz;
|
||||
bool ccs_is_src, overwrite_ccs;
|
||||
int err;
|
||||
|
||||
@ -790,8 +788,8 @@ intel_context_migrate_copy(struct intel_context *ce,
|
||||
if (err)
|
||||
goto out_rq;
|
||||
|
||||
calculate_chunk_sz(i915, src_is_lmem, &src_sz,
|
||||
bytes_to_cpy, ccs_bytes_to_cpy);
|
||||
src_sz = calculate_chunk_sz(i915, src_is_lmem,
|
||||
bytes_to_cpy, ccs_bytes_to_cpy);
|
||||
|
||||
len = emit_pte(rq, &it_src, src_cache_level, src_is_lmem,
|
||||
src_offset, src_sz);
|
||||
|
@ -4026,6 +4026,13 @@ static inline void guc_init_lrc_mapping(struct intel_guc *guc)
|
||||
/* make sure all descriptors are clean... */
|
||||
xa_destroy(&guc->context_lookup);
|
||||
|
||||
/*
|
||||
* A reset might have occurred while we had a pending stalled request,
|
||||
* so make sure we clean that up.
|
||||
*/
|
||||
guc->stalled_request = NULL;
|
||||
guc->submission_stall_reason = STALL_NONE;
|
||||
|
||||
/*
|
||||
* Some contexts might have been pinned before we enabled GuC
|
||||
* submission, so we need to add them to the GuC bookeeping.
|
||||
|
@ -298,7 +298,7 @@ no_enough_resource:
|
||||
}
|
||||
|
||||
/**
|
||||
* inte_gvt_free_vgpu_resource - free HW resource owned by a vGPU
|
||||
* intel_vgpu_free_resource() - free HW resource owned by a vGPU
|
||||
* @vgpu: a vGPU
|
||||
*
|
||||
* This function is used to free the HW resource owned by a vGPU.
|
||||
@ -328,7 +328,7 @@ void intel_vgpu_reset_resource(struct intel_vgpu *vgpu)
|
||||
}
|
||||
|
||||
/**
|
||||
* intel_alloc_vgpu_resource - allocate HW resource for a vGPU
|
||||
* intel_vgpu_alloc_resource() - allocate HW resource for a vGPU
|
||||
* @vgpu: vGPU
|
||||
* @param: vGPU creation params
|
||||
*
|
||||
|
@ -2341,7 +2341,7 @@ static int emulate_ggtt_mmio_write(struct intel_vgpu *vgpu, unsigned int off,
|
||||
gvt_vgpu_err("fail to populate guest ggtt entry\n");
|
||||
/* guest driver may read/write the entry when partial
|
||||
* update the entry in this situation p2m will fail
|
||||
* settting the shadow entry to point to a scratch page
|
||||
* setting the shadow entry to point to a scratch page
|
||||
*/
|
||||
ops->set_pfn(&m, gvt->gtt.scratch_mfn);
|
||||
} else
|
||||
|
@ -905,7 +905,7 @@ static int update_fdi_rx_iir_status(struct intel_vgpu *vgpu,
|
||||
else if (FDI_RX_IMR_TO_PIPE(offset) != INVALID_INDEX)
|
||||
index = FDI_RX_IMR_TO_PIPE(offset);
|
||||
else {
|
||||
gvt_vgpu_err("Unsupport registers %x\n", offset);
|
||||
gvt_vgpu_err("Unsupported registers %x\n", offset);
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
@ -3052,7 +3052,7 @@ int intel_vgpu_default_mmio_read(struct intel_vgpu *vgpu, unsigned int offset,
|
||||
}
|
||||
|
||||
/**
|
||||
* intel_t_default_mmio_write - default MMIO write handler
|
||||
* intel_vgpu_default_mmio_write() - default MMIO write handler
|
||||
* @vgpu: a vGPU
|
||||
* @offset: access offset
|
||||
* @p_data: write data buffer
|
||||
|
@ -546,7 +546,7 @@ static void switch_mmio(struct intel_vgpu *pre,
|
||||
}
|
||||
|
||||
/**
|
||||
* intel_gvt_switch_render_mmio - switch mmio context of specific engine
|
||||
* intel_gvt_switch_mmio - switch mmio context of specific engine
|
||||
* @pre: the last vGPU that own the engine
|
||||
* @next: the vGPU to switch to
|
||||
* @engine: the engine
|
||||
|
@ -1076,7 +1076,8 @@ static int iterate_skl_plus_mmio(struct intel_gvt_mmio_table_iter *iter)
|
||||
MMIO_D(GEN8_HDC_CHICKEN1);
|
||||
MMIO_D(GEN9_WM_CHICKEN3);
|
||||
|
||||
if (IS_KABYLAKE(dev_priv) || IS_COFFEELAKE(dev_priv))
|
||||
if (IS_KABYLAKE(dev_priv) ||
|
||||
IS_COFFEELAKE(dev_priv) || IS_COMETLAKE(dev_priv))
|
||||
MMIO_D(GAMT_CHKN_BIT_REG);
|
||||
if (!IS_BROXTON(dev_priv))
|
||||
MMIO_D(GEN9_CTX_PREEMPT_REG);
|
||||
|
Loading…
Reference in New Issue
Block a user