Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

Commit 20ef6d0

Browse files
committed
Merge tag 'drm-fixes-2018年11月11日' of git://anongit.freedesktop.org/drm/drm
Pull drm fixes from Dave Airlie: "drm: i915, amdgpu, sun4i, exynos and etnaviv fixes: - amdgpu has some display fixes, KFD ioctl fixes and a Vega20 bios interaction fix. - sun4i has some NULL checks added - i915 has a 32-bit system fix, LPE audio oops, and HDMI2.0 clock fixes. - Exynos has a 3 regression fixes (one frame counter, fbdev missing, dsi->panel check) - Etnaviv has a single fencing fix for GPU recovery" * tag 'drm-fixes-2018年11月11日' of git://anongit.freedesktop.org/drm/drm: (39 commits) drm/amd/amdgpu/dm: Fix dm_dp_create_fake_mst_encoder() drm/amd/display: Drop reusing drm connector for MST drm/amd/display: Cleanup MST non-atomic code workaround drm/amd/powerplay: always use fast UCLK switching when UCLK DPM enabled drm/amd/powerplay: set a default fclk/gfxclk ratio drm/amdgpu/display/dce11: only enable FBC when selected drm/amdgpu/display/dm: handle FBC dc feature parameter drm/amdgpu/display/dc: add FBC to dc_config drm/amdgpu: add DC feature mask module parameter drm/amdgpu/display: check if fbc is available in set_static_screen_control (v2) drm/amdgpu/vega20: add CLK base offset drm/amd/display: Stop leaking planes drm/amd/display: Fix misleading buffer information Revert "drm/amd/display: set backlight level limit to 1" drm/amd: Update atom_smu_info_v3_3 structure drm/i915: Fix ilk+ watermarks when disabling pipes drm/sun4i: tcon: prevent tcon->panel dereference if NULL drm/sun4i: tcon: fix check of tcon->panel null pointer drm/i915: Don't oops during modeset shutdown after lpe audio deinit drm/i915: Mark pin flags as u64 ...
2 parents 1de4f2e + 73b6f96 commit 20ef6d0

43 files changed

Lines changed: 258 additions & 297 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎drivers/gpu/drm/amd/amdgpu/amdgpu.h‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,6 +151,7 @@ extern int amdgpu_compute_multipipe;
151151
extern int amdgpu_gpu_recovery;
152152
extern int amdgpu_emu_mode;
153153
extern uint amdgpu_smu_memory_pool_size;
154+
extern uint amdgpu_dc_feature_mask;
154155
extern struct amdgpu_mgpu_info mgpu_info;
155156

156157
#ifdef CONFIG_DRM_AMDGPU_SI

‎drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c‎

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -127,6 +127,9 @@ int amdgpu_compute_multipipe = -1;
127127
int amdgpu_gpu_recovery = -1; /* auto */
128128
int amdgpu_emu_mode = 0;
129129
uint amdgpu_smu_memory_pool_size = 0;
130+
/* FBC (bit 0) disabled by default*/
131+
uint amdgpu_dc_feature_mask = 0;
132+
130133
struct amdgpu_mgpu_info mgpu_info = {
131134
.mutex = __MUTEX_INITIALIZER(mgpu_info.mutex),
132135
};
@@ -631,6 +634,14 @@ module_param(halt_if_hws_hang, int, 0644);
631634
MODULE_PARM_DESC(halt_if_hws_hang, "Halt if HWS hang is detected (0 = off (default), 1 = on)");
632635
#endif
633636

637+
/**
638+
* DOC: dcfeaturemask (uint)
639+
* Override display features enabled. See enum DC_FEATURE_MASK in drivers/gpu/drm/amd/include/amd_shared.h.
640+
* The default is the current set of stable display features.
641+
*/
642+
MODULE_PARM_DESC(dcfeaturemask, "all stable DC features enabled (default))");
643+
module_param_named(dcfeaturemask, amdgpu_dc_feature_mask, uint, 0444);
644+
634645
static const struct pci_device_id pciidlist[] = {
635646
#ifdef CONFIG_DRM_AMDGPU_SI
636647
{0x1002, 0x6780, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_TAHITI},

‎drivers/gpu/drm/amd/amdgpu/vega20_reg_init.c‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ int vega20_reg_base_init(struct amdgpu_device *adev)
4949
adev->reg_offset[SMUIO_HWIP][i] = (uint32_t *)(&(SMUIO_BASE.instance[i]));
5050
adev->reg_offset[NBIF_HWIP][i] = (uint32_t *)(&(NBIO_BASE.instance[i]));
5151
adev->reg_offset[THM_HWIP][i] = (uint32_t *)(&(THM_BASE.instance[i]));
52+
adev->reg_offset[CLK_HWIP][i] = (uint32_t *)(&(CLK_BASE.instance[i]));
5253
}
5354
return 0;
5455
}

‎drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c‎

Lines changed: 8 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -429,6 +429,9 @@ static int amdgpu_dm_init(struct amdgpu_device *adev)
429429
adev->asic_type < CHIP_RAVEN)
430430
init_data.flags.gpu_vm_support = true;
431431

432+
if (amdgpu_dc_feature_mask & DC_FBC_MASK)
433+
init_data.flags.fbc_support = true;
434+
432435
/* Display Core create. */
433436
adev->dm.dc = dc_create(&init_data);
434437

@@ -1524,13 +1527,6 @@ static int amdgpu_dm_backlight_update_status(struct backlight_device *bd)
15241527
{
15251528
struct amdgpu_display_manager *dm = bl_get_data(bd);
15261529

1527-
/*
1528-
* PWM interperts 0 as 100% rather than 0% because of HW
1529-
* limitation for level 0.So limiting minimum brightness level
1530-
* to 1.
1531-
*/
1532-
if (bd->props.brightness < 1)
1533-
return 1;
15341530
if (dc_link_set_backlight_level(dm->backlight_link,
15351531
bd->props.brightness, 0, 0))
15361532
return 0;
@@ -2707,18 +2703,11 @@ create_stream_for_sink(struct amdgpu_dm_connector *aconnector,
27072703
drm_connector = &aconnector->base;
27082704

27092705
if (!aconnector->dc_sink) {
2710-
/*
2711-
* Create dc_sink when necessary to MST
2712-
* Don't apply fake_sink to MST
2713-
*/
2714-
if (aconnector->mst_port) {
2715-
dm_dp_mst_dc_sink_create(drm_connector);
2716-
return stream;
2706+
if (!aconnector->mst_port) {
2707+
sink = create_fake_sink(aconnector);
2708+
if (!sink)
2709+
return stream;
27172710
}
2718-
2719-
sink = create_fake_sink(aconnector);
2720-
if (!sink)
2721-
return stream;
27222711
} else {
27232712
sink = aconnector->dc_sink;
27242713
}
@@ -3308,7 +3297,7 @@ void dm_drm_plane_destroy_state(struct drm_plane *plane,
33083297
static const struct drm_plane_funcs dm_plane_funcs = {
33093298
.update_plane = drm_atomic_helper_update_plane,
33103299
.disable_plane = drm_atomic_helper_disable_plane,
3311-
.destroy = drm_plane_cleanup,
3300+
.destroy = drm_primary_helper_destroy,
33123301
.reset = dm_drm_plane_reset,
33133302
.atomic_duplicate_state = dm_drm_plane_duplicate_state,
33143303
.atomic_destroy_state = dm_drm_plane_destroy_state,

‎drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h‎

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -160,8 +160,6 @@ struct amdgpu_dm_connector {
160160
struct mutex hpd_lock;
161161

162162
bool fake_enable;
163-
164-
bool mst_connected;
165163
};
166164

167165
#define to_amdgpu_dm_connector(x) container_of(x, struct amdgpu_dm_connector, base)

‎drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.c‎

Lines changed: 7 additions & 72 deletions
Original file line numberDiff line numberDiff line change
@@ -205,40 +205,6 @@ static const struct drm_connector_funcs dm_dp_mst_connector_funcs = {
205205
.atomic_get_property = amdgpu_dm_connector_atomic_get_property
206206
};
207207

208-
void dm_dp_mst_dc_sink_create(struct drm_connector *connector)
209-
{
210-
struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
211-
struct dc_sink *dc_sink;
212-
struct dc_sink_init_data init_params = {
213-
.link = aconnector->dc_link,
214-
.sink_signal = SIGNAL_TYPE_DISPLAY_PORT_MST };
215-
216-
/* FIXME none of this is safe. we shouldn't touch aconnector here in
217-
* atomic_check
218-
*/
219-
220-
/*
221-
* TODO: Need to further figure out why ddc.algo is NULL while MST port exists
222-
*/
223-
if (!aconnector->port || !aconnector->port->aux.ddc.algo)
224-
return;
225-
226-
ASSERT(aconnector->edid);
227-
228-
dc_sink = dc_link_add_remote_sink(
229-
aconnector->dc_link,
230-
(uint8_t *)aconnector->edid,
231-
(aconnector->edid->extensions + 1) * EDID_LENGTH,
232-
&init_params);
233-
234-
dc_sink->priv = aconnector;
235-
aconnector->dc_sink = dc_sink;
236-
237-
if (aconnector->dc_sink)
238-
amdgpu_dm_update_freesync_caps(
239-
connector, aconnector->edid);
240-
}
241-
242208
static int dm_dp_mst_get_modes(struct drm_connector *connector)
243209
{
244210
struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
@@ -319,12 +285,7 @@ dm_dp_create_fake_mst_encoder(struct amdgpu_dm_connector *connector)
319285
struct amdgpu_device *adev = dev->dev_private;
320286
struct amdgpu_encoder *amdgpu_encoder;
321287
struct drm_encoder *encoder;
322-
const struct drm_connector_helper_funcs *connector_funcs =
323-
connector->base.helper_private;
324-
struct drm_encoder *enc_master =
325-
connector_funcs->best_encoder(&connector->base);
326288

327-
DRM_DEBUG_KMS("enc master is %p\n", enc_master);
328289
amdgpu_encoder = kzalloc(sizeof(*amdgpu_encoder), GFP_KERNEL);
329290
if (!amdgpu_encoder)
330291
return NULL;
@@ -354,25 +315,6 @@ dm_dp_add_mst_connector(struct drm_dp_mst_topology_mgr *mgr,
354315
struct amdgpu_device *adev = dev->dev_private;
355316
struct amdgpu_dm_connector *aconnector;
356317
struct drm_connector *connector;
357-
struct drm_connector_list_iter conn_iter;
358-
359-
drm_connector_list_iter_begin(dev, &conn_iter);
360-
drm_for_each_connector_iter(connector, &conn_iter) {
361-
aconnector = to_amdgpu_dm_connector(connector);
362-
if (aconnector->mst_port == master
363-
&& !aconnector->port) {
364-
DRM_INFO("DM_MST: reusing connector: %p [id: %d] [master: %p]\n",
365-
aconnector, connector->base.id, aconnector->mst_port);
366-
367-
aconnector->port = port;
368-
drm_connector_set_path_property(connector, pathprop);
369-
370-
drm_connector_list_iter_end(&conn_iter);
371-
aconnector->mst_connected = true;
372-
return &aconnector->base;
373-
}
374-
}
375-
drm_connector_list_iter_end(&conn_iter);
376318

377319
aconnector = kzalloc(sizeof(*aconnector), GFP_KERNEL);
378320
if (!aconnector)
@@ -421,8 +363,6 @@ dm_dp_add_mst_connector(struct drm_dp_mst_topology_mgr *mgr,
421363
*/
422364
amdgpu_dm_connector_funcs_reset(connector);
423365

424-
aconnector->mst_connected = true;
425-
426366
DRM_INFO("DM_MST: added connector: %p [id: %d] [master: %p]\n",
427367
aconnector, connector->base.id, aconnector->mst_port);
428368

@@ -434,6 +374,9 @@ dm_dp_add_mst_connector(struct drm_dp_mst_topology_mgr *mgr,
434374
static void dm_dp_destroy_mst_connector(struct drm_dp_mst_topology_mgr *mgr,
435375
struct drm_connector *connector)
436376
{
377+
struct amdgpu_dm_connector *master = container_of(mgr, struct amdgpu_dm_connector, mst_mgr);
378+
struct drm_device *dev = master->base.dev;
379+
struct amdgpu_device *adev = dev->dev_private;
437380
struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
438381

439382
DRM_INFO("DM_MST: Disabling connector: %p [id: %d] [master: %p]\n",
@@ -447,7 +390,10 @@ static void dm_dp_destroy_mst_connector(struct drm_dp_mst_topology_mgr *mgr,
447390
aconnector->dc_sink = NULL;
448391
}
449392

450-
aconnector->mst_connected = false;
393+
drm_connector_unregister(connector);
394+
if (adev->mode_info.rfbdev)
395+
drm_fb_helper_remove_one_connector(&adev->mode_info.rfbdev->helper, connector);
396+
drm_connector_put(connector);
451397
}
452398

453399
static void dm_dp_mst_hotplug(struct drm_dp_mst_topology_mgr *mgr)
@@ -458,28 +404,17 @@ static void dm_dp_mst_hotplug(struct drm_dp_mst_topology_mgr *mgr)
458404
drm_kms_helper_hotplug_event(dev);
459405
}
460406

461-
static void dm_dp_mst_link_status_reset(struct drm_connector *connector)
462-
{
463-
mutex_lock(&connector->dev->mode_config.mutex);
464-
drm_connector_set_link_status_property(connector, DRM_MODE_LINK_STATUS_BAD);
465-
mutex_unlock(&connector->dev->mode_config.mutex);
466-
}
467-
468407
static void dm_dp_mst_register_connector(struct drm_connector *connector)
469408
{
470409
struct drm_device *dev = connector->dev;
471410
struct amdgpu_device *adev = dev->dev_private;
472-
struct amdgpu_dm_connector *aconnector = to_amdgpu_dm_connector(connector);
473411

474412
if (adev->mode_info.rfbdev)
475413
drm_fb_helper_add_one_connector(&adev->mode_info.rfbdev->helper, connector);
476414
else
477415
DRM_ERROR("adev->mode_info.rfbdev is NULL\n");
478416

479417
drm_connector_register(connector);
480-
481-
if (aconnector->mst_connected)
482-
dm_dp_mst_link_status_reset(connector);
483418
}
484419

485420
static const struct drm_dp_mst_topology_cbs dm_mst_cbs = {

‎drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_mst_types.h‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,5 @@ struct amdgpu_dm_connector;
3131

3232
void amdgpu_dm_initialize_dp_connector(struct amdgpu_display_manager *dm,
3333
struct amdgpu_dm_connector *aconnector);
34-
void dm_dp_mst_dc_sink_create(struct drm_connector *connector);
3534

3635
#endif

‎drivers/gpu/drm/amd/display/dc/core/dc_link.c‎

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1722,7 +1722,7 @@ static void write_i2c_retimer_setting(
17221722
i2c_success = i2c_write(pipe_ctx, slave_address,
17231723
buffer, sizeof(buffer));
17241724
RETIMER_REDRIVER_INFO("retimer write to slave_address = 0x%x,\
1725-
offset = 0x%d, reg_val = 0x%d, i2c_success = %d\n",
1725+
offset = 0x%x, reg_val = 0x%x, i2c_success = %d\n",
17261726
slave_address, buffer[0], buffer[1], i2c_success?1:0);
17271727
if (!i2c_success)
17281728
/* Write failure */
@@ -1734,7 +1734,7 @@ static void write_i2c_retimer_setting(
17341734
i2c_success = i2c_write(pipe_ctx, slave_address,
17351735
buffer, sizeof(buffer));
17361736
RETIMER_REDRIVER_INFO("retimer write to slave_address = 0x%x,\
1737-
offset = 0x%d, reg_val = 0x%d, i2c_success = %d\n",
1737+
offset = 0x%x, reg_val = 0x%x, i2c_success = %d\n",
17381738
slave_address, buffer[0], buffer[1], i2c_success?1:0);
17391739
if (!i2c_success)
17401740
/* Write failure */

‎drivers/gpu/drm/amd/display/dc/dc.h‎

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ struct link_training_settings;
169169
struct dc_config {
170170
bool gpu_vm_support;
171171
bool disable_disp_pll_sharing;
172+
bool fbc_support;
172173
};
173174

174175
enum visual_confirm {

‎drivers/gpu/drm/amd/display/dc/dce110/dce110_hw_sequencer.c‎

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1736,7 +1736,12 @@ static void set_static_screen_control(struct pipe_ctx **pipe_ctx,
17361736
if (events->force_trigger)
17371737
value |= 0x1;
17381738

1739-
value |= 0x84;
1739+
if (num_pipes) {
1740+
struct dc *dc = pipe_ctx[0]->stream->ctx->dc;
1741+
1742+
if (dc->fbc_compressor)
1743+
value |= 0x84;
1744+
}
17401745

17411746
for (i = 0; i < num_pipes; i++)
17421747
pipe_ctx[i]->stream_res.tg->funcs->

0 commit comments

Comments
(0)

AltStyle によって変換されたページ (->オリジナル) /