Skip to content

Commit a54569b

Browse files
committed
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
2 parents b90cb10 + 6067c82 commit a54569b

12 files changed

Lines changed: 76 additions & 53 deletions

File tree

drivers/gpu/drm/i915/display/icl_dsi.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2070,7 +2070,14 @@ void icl_dsi_init(struct drm_i915_private *dev_priv)
20702070
else
20712071
intel_dsi->ports = BIT(port);
20722072

2073+
if (drm_WARN_ON(&dev_priv->drm, intel_connector->panel.vbt.dsi.bl_ports & ~intel_dsi->ports))
2074+
intel_connector->panel.vbt.dsi.bl_ports &= intel_dsi->ports;
2075+
20732076
intel_dsi->dcs_backlight_ports = intel_connector->panel.vbt.dsi.bl_ports;
2077+
2078+
if (drm_WARN_ON(&dev_priv->drm, intel_connector->panel.vbt.dsi.cabc_ports & ~intel_dsi->ports))
2079+
intel_connector->panel.vbt.dsi.cabc_ports &= intel_dsi->ports;
2080+
20742081
intel_dsi->dcs_cabc_ports = intel_connector->panel.vbt.dsi.cabc_ports;
20752082

20762083
for_each_dsi_port(port, intel_dsi->ports) {

drivers/gpu/drm/i915/display/intel_backlight.c

Lines changed: 20 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
#include "intel_dsi_dcs_backlight.h"
1717
#include "intel_panel.h"
1818
#include "intel_pci_config.h"
19+
#include "intel_pps.h"
1920

2021
/**
2122
* scale - scale values from one range to another
@@ -971,26 +972,24 @@ int intel_backlight_device_register(struct intel_connector *connector)
971972
if (!name)
972973
return -ENOMEM;
973974

974-
bd = backlight_device_register(name, connector->base.kdev, connector,
975-
&intel_backlight_device_ops, &props);
976-
977-
/*
978-
* Using the same name independent of the drm device or connector
979-
* prevents registration of multiple backlight devices in the
980-
* driver. However, we need to use the default name for backward
981-
* compatibility. Use unique names for subsequent backlight devices as a
982-
* fallback when the default name already exists.
983-
*/
984-
if (IS_ERR(bd) && PTR_ERR(bd) == -EEXIST) {
975+
bd = backlight_device_get_by_name(name);
976+
if (bd) {
977+
put_device(&bd->dev);
978+
/*
979+
* Using the same name independent of the drm device or connector
980+
* prevents registration of multiple backlight devices in the
981+
* driver. However, we need to use the default name for backward
982+
* compatibility. Use unique names for subsequent backlight devices as a
983+
* fallback when the default name already exists.
984+
*/
985985
kfree(name);
986986
name = kasprintf(GFP_KERNEL, "card%d-%s-backlight",
987987
i915->drm.primary->index, connector->base.name);
988988
if (!name)
989989
return -ENOMEM;
990-
991-
bd = backlight_device_register(name, connector->base.kdev, connector,
992-
&intel_backlight_device_ops, &props);
993990
}
991+
bd = backlight_device_register(name, connector->base.kdev, connector,
992+
&intel_backlight_device_ops, &props);
994993

995994
if (IS_ERR(bd)) {
996995
drm_err(&i915->drm,
@@ -1773,9 +1772,13 @@ void intel_backlight_init_funcs(struct intel_panel *panel)
17731772
panel->backlight.pwm_funcs = &i9xx_pwm_funcs;
17741773
}
17751774

1776-
if (connector->base.connector_type == DRM_MODE_CONNECTOR_eDP &&
1777-
intel_dp_aux_init_backlight_funcs(connector) == 0)
1778-
return;
1775+
if (connector->base.connector_type == DRM_MODE_CONNECTOR_eDP) {
1776+
if (intel_dp_aux_init_backlight_funcs(connector) == 0)
1777+
return;
1778+
1779+
if (!(dev_priv->quirks & QUIRK_NO_PPS_BACKLIGHT_POWER_HOOK))
1780+
connector->panel.backlight.power = intel_pps_backlight_power;
1781+
}
17791782

17801783
/* We're using a standard PWM backlight interface */
17811784
panel->backlight.funcs = &pwm_bl_funcs;

drivers/gpu/drm/i915/display/intel_bios.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1596,6 +1596,8 @@ static void parse_dsi_backlight_ports(struct drm_i915_private *i915,
15961596
struct intel_panel *panel,
15971597
enum port port)
15981598
{
1599+
enum port port_bc = DISPLAY_VER(i915) >= 11 ? PORT_B : PORT_C;
1600+
15991601
if (!panel->vbt.dsi.config->dual_link || i915->vbt.version < 197) {
16001602
panel->vbt.dsi.bl_ports = BIT(port);
16011603
if (panel->vbt.dsi.config->cabc_supported)
@@ -1609,11 +1611,11 @@ static void parse_dsi_backlight_ports(struct drm_i915_private *i915,
16091611
panel->vbt.dsi.bl_ports = BIT(PORT_A);
16101612
break;
16111613
case DL_DCS_PORT_C:
1612-
panel->vbt.dsi.bl_ports = BIT(PORT_C);
1614+
panel->vbt.dsi.bl_ports = BIT(port_bc);
16131615
break;
16141616
default:
16151617
case DL_DCS_PORT_A_AND_C:
1616-
panel->vbt.dsi.bl_ports = BIT(PORT_A) | BIT(PORT_C);
1618+
panel->vbt.dsi.bl_ports = BIT(PORT_A) | BIT(port_bc);
16171619
break;
16181620
}
16191621

@@ -1625,12 +1627,12 @@ static void parse_dsi_backlight_ports(struct drm_i915_private *i915,
16251627
panel->vbt.dsi.cabc_ports = BIT(PORT_A);
16261628
break;
16271629
case DL_DCS_PORT_C:
1628-
panel->vbt.dsi.cabc_ports = BIT(PORT_C);
1630+
panel->vbt.dsi.cabc_ports = BIT(port_bc);
16291631
break;
16301632
default:
16311633
case DL_DCS_PORT_A_AND_C:
16321634
panel->vbt.dsi.cabc_ports =
1633-
BIT(PORT_A) | BIT(PORT_C);
1635+
BIT(PORT_A) | BIT(port_bc);
16341636
break;
16351637
}
16361638
}

drivers/gpu/drm/i915/display/intel_dp.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5293,8 +5293,6 @@ static bool intel_edp_init_connector(struct intel_dp *intel_dp,
52935293

52945294
intel_panel_init(intel_connector);
52955295

5296-
if (!(dev_priv->quirks & QUIRK_NO_PPS_BACKLIGHT_POWER_HOOK))
5297-
intel_connector->panel.backlight.power = intel_pps_backlight_power;
52985296
intel_backlight_setup(intel_connector, pipe);
52995297

53005298
intel_edp_add_properties(intel_dp);

drivers/gpu/drm/i915/display/vlv_dsi.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1933,7 +1933,14 @@ void vlv_dsi_init(struct drm_i915_private *dev_priv)
19331933
else
19341934
intel_dsi->ports = BIT(port);
19351935

1936+
if (drm_WARN_ON(&dev_priv->drm, intel_connector->panel.vbt.dsi.bl_ports & ~intel_dsi->ports))
1937+
intel_connector->panel.vbt.dsi.bl_ports &= intel_dsi->ports;
1938+
19361939
intel_dsi->dcs_backlight_ports = intel_connector->panel.vbt.dsi.bl_ports;
1940+
1941+
if (drm_WARN_ON(&dev_priv->drm, intel_connector->panel.vbt.dsi.cabc_ports & ~intel_dsi->ports))
1942+
intel_connector->panel.vbt.dsi.cabc_ports &= intel_dsi->ports;
1943+
19371944
intel_dsi->dcs_cabc_ports = intel_connector->panel.vbt.dsi.cabc_ports;
19381945

19391946
/* Create a DSI host (and a device) for each port. */

drivers/gpu/drm/i915/gt/intel_migrate.c

Lines changed: 21 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -638,9 +638,9 @@ static int emit_copy(struct i915_request *rq,
638638
return 0;
639639
}
640640

641-
static int scatter_list_length(struct scatterlist *sg)
641+
static u64 scatter_list_length(struct scatterlist *sg)
642642
{
643-
int len = 0;
643+
u64 len = 0;
644644

645645
while (sg && sg_dma_len(sg)) {
646646
len += sg_dma_len(sg);
@@ -650,28 +650,26 @@ static int scatter_list_length(struct scatterlist *sg)
650650
return len;
651651
}
652652

653-
static void
653+
static int
654654
calculate_chunk_sz(struct drm_i915_private *i915, bool src_is_lmem,
655-
int *src_sz, u32 bytes_to_cpy, u32 ccs_bytes_to_cpy)
655+
u64 bytes_to_cpy, u64 ccs_bytes_to_cpy)
656656
{
657-
if (ccs_bytes_to_cpy) {
658-
if (!src_is_lmem)
659-
/*
660-
* When CHUNK_SZ is passed all the pages upto CHUNK_SZ
661-
* will be taken for the blt. in Flat-ccs supported
662-
* platform Smem obj will have more pages than required
663-
* for main meory hence limit it to the required size
664-
* for main memory
665-
*/
666-
*src_sz = min_t(int, bytes_to_cpy, CHUNK_SZ);
667-
} else { /* ccs handling is not required */
668-
*src_sz = CHUNK_SZ;
669-
}
657+
if (ccs_bytes_to_cpy && !src_is_lmem)
658+
/*
659+
* When CHUNK_SZ is passed all the pages upto CHUNK_SZ
660+
* will be taken for the blt. in Flat-ccs supported
661+
* platform Smem obj will have more pages than required
662+
* for main meory hence limit it to the required size
663+
* for main memory
664+
*/
665+
return min_t(u64, bytes_to_cpy, CHUNK_SZ);
666+
else
667+
return CHUNK_SZ;
670668
}
671669

672-
static void get_ccs_sg_sgt(struct sgt_dma *it, u32 bytes_to_cpy)
670+
static void get_ccs_sg_sgt(struct sgt_dma *it, u64 bytes_to_cpy)
673671
{
674-
u32 len;
672+
u64 len;
675673

676674
do {
677675
GEM_BUG_ON(!it->sg || !sg_dma_len(it->sg));
@@ -702,12 +700,12 @@ intel_context_migrate_copy(struct intel_context *ce,
702700
{
703701
struct sgt_dma it_src = sg_sgt(src), it_dst = sg_sgt(dst), it_ccs;
704702
struct drm_i915_private *i915 = ce->engine->i915;
705-
u32 ccs_bytes_to_cpy = 0, bytes_to_cpy;
703+
u64 ccs_bytes_to_cpy = 0, bytes_to_cpy;
706704
enum i915_cache_level ccs_cache_level;
707705
u32 src_offset, dst_offset;
708706
u8 src_access, dst_access;
709707
struct i915_request *rq;
710-
int src_sz, dst_sz;
708+
u64 src_sz, dst_sz;
711709
bool ccs_is_src, overwrite_ccs;
712710
int err;
713711

@@ -790,8 +788,8 @@ intel_context_migrate_copy(struct intel_context *ce,
790788
if (err)
791789
goto out_rq;
792790

793-
calculate_chunk_sz(i915, src_is_lmem, &src_sz,
794-
bytes_to_cpy, ccs_bytes_to_cpy);
791+
src_sz = calculate_chunk_sz(i915, src_is_lmem,
792+
bytes_to_cpy, ccs_bytes_to_cpy);
795793

796794
len = emit_pte(rq, &it_src, src_cache_level, src_is_lmem,
797795
src_offset, src_sz);

drivers/gpu/drm/i915/gt/uc/intel_guc_submission.c

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4026,6 +4026,13 @@ static inline void guc_init_lrc_mapping(struct intel_guc *guc)
40264026
/* make sure all descriptors are clean... */
40274027
xa_destroy(&guc->context_lookup);
40284028

4029+
/*
4030+
* A reset might have occurred while we had a pending stalled request,
4031+
* so make sure we clean that up.
4032+
*/
4033+
guc->stalled_request = NULL;
4034+
guc->submission_stall_reason = STALL_NONE;
4035+
40294036
/*
40304037
* Some contexts might have been pinned before we enabled GuC
40314038
* submission, so we need to add them to the GuC bookeeping.

drivers/gpu/drm/i915/gvt/aperture_gm.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -298,7 +298,7 @@ static int alloc_resource(struct intel_vgpu *vgpu,
298298
}
299299

300300
/**
301-
* inte_gvt_free_vgpu_resource - free HW resource owned by a vGPU
301+
* intel_vgpu_free_resource() - free HW resource owned by a vGPU
302302
* @vgpu: a vGPU
303303
*
304304
* 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)
328328
}
329329

330330
/**
331-
* intel_alloc_vgpu_resource - allocate HW resource for a vGPU
331+
* intel_vgpu_alloc_resource() - allocate HW resource for a vGPU
332332
* @vgpu: vGPU
333333
* @param: vGPU creation params
334334
*

drivers/gpu/drm/i915/gvt/gtt.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2341,7 +2341,7 @@ static int emulate_ggtt_mmio_write(struct intel_vgpu *vgpu, unsigned int off,
23412341
gvt_vgpu_err("fail to populate guest ggtt entry\n");
23422342
/* guest driver may read/write the entry when partial
23432343
* update the entry in this situation p2m will fail
2344-
* settting the shadow entry to point to a scratch page
2344+
* setting the shadow entry to point to a scratch page
23452345
*/
23462346
ops->set_pfn(&m, gvt->gtt.scratch_mfn);
23472347
} else

drivers/gpu/drm/i915/gvt/handlers.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -905,7 +905,7 @@ static int update_fdi_rx_iir_status(struct intel_vgpu *vgpu,
905905
else if (FDI_RX_IMR_TO_PIPE(offset) != INVALID_INDEX)
906906
index = FDI_RX_IMR_TO_PIPE(offset);
907907
else {
908-
gvt_vgpu_err("Unsupport registers %x\n", offset);
908+
gvt_vgpu_err("Unsupported registers %x\n", offset);
909909
return -EINVAL;
910910
}
911911

@@ -3052,7 +3052,7 @@ int intel_vgpu_default_mmio_read(struct intel_vgpu *vgpu, unsigned int offset,
30523052
}
30533053

30543054
/**
3055-
* intel_t_default_mmio_write - default MMIO write handler
3055+
* intel_vgpu_default_mmio_write() - default MMIO write handler
30563056
* @vgpu: a vGPU
30573057
* @offset: access offset
30583058
* @p_data: write data buffer

0 commit comments

Comments
 (0)