* drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:2730 dm_resume() error: we previously assumed 'aconnector->dc_link' could be null (see line 2717)
@ 2022-10-25 7:05 Dan Carpenter
0 siblings, 0 replies; only message in thread
From: Dan Carpenter @ 2022-10-25 7:05 UTC (permalink / raw)
To: kbuild, Roman Li; +Cc: lkp, kbuild-all, linux-kernel, Alex Deucher, Wayne Lin
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
head: 337a0a0b63f1c30195733eaacf39e4310a592a68
commit: f4346fb3edf7720db3f7f5e1cab1f667cd024280 drm/amd/display: Fix allocate_mst_payload assert on resume
config: mips-randconfig-m031-20221018
compiler: mips64el-linux-gcc (GCC) 12.1.0
If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <lkp@intel.com>
| Reported-by: Dan Carpenter <dan.carpenter@oracle.com>
New smatch warnings:
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:2730 dm_resume() error: we previously assumed 'aconnector->dc_link' could be null (see line 2717)
Old smatch warnings:
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:1747 amdgpu_dm_fini() warn: variable dereferenced before check 'adev->dm.dc' (see line 1720)
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:4019 amdgpu_dm_backlight_update_status() error: testing array offset 'i' after use.
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:4061 amdgpu_dm_backlight_get_brightness() error: testing array offset 'i' after use.
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:6530 create_stream_for_sink() error: we previously assumed 'aconnector->dc_sink' could be null (see line 6429)
drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:8918 handle_cursor_update() error: we previously assumed 'afb' could be null (see line 8877)
vim +2730 drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c
4562236b3bc0a2 Harry Wentland 2017-09-12 2606 static int dm_resume(void *handle)
4562236b3bc0a2 Harry Wentland 2017-09-12 2607 {
4562236b3bc0a2 Harry Wentland 2017-09-12 2608 struct amdgpu_device *adev = handle;
4a580877bdcb83 Luben Tuikov 2020-08-24 2609 struct drm_device *ddev = adev_to_drm(adev);
4562236b3bc0a2 Harry Wentland 2017-09-12 2610 struct amdgpu_display_manager *dm = &adev->dm;
c84dec2fe8837f Harry Wentland 2017-09-05 2611 struct amdgpu_dm_connector *aconnector;
4562236b3bc0a2 Harry Wentland 2017-09-12 2612 struct drm_connector *connector;
f8d2d39eb40694 Lyude Paul 2019-09-03 2613 struct drm_connector_list_iter iter;
4562236b3bc0a2 Harry Wentland 2017-09-12 2614 struct drm_crtc *crtc;
c2cea7063b85fc Leo (Sunpeng Li 2017-10-12 2615) struct drm_crtc_state *new_crtc_state;
fcb4019e090b95 Leo (Sunpeng Li 2017-11-01 2616) struct dm_crtc_state *dm_new_crtc_state;
fcb4019e090b95 Leo (Sunpeng Li 2017-11-01 2617) struct drm_plane *plane;
fcb4019e090b95 Leo (Sunpeng Li 2017-11-01 2618) struct drm_plane_state *new_plane_state;
fcb4019e090b95 Leo (Sunpeng Li 2017-11-01 2619) struct dm_plane_state *dm_new_plane_state;
113b7a01087211 Leo Li 2019-03-19 2620 struct dm_atomic_state *dm_state = to_dm_atomic_state(dm->atomic_obj.state);
fbbdadf2faf17c Bhawanpreet Lakha 2018-09-26 2621 enum dc_connection_type new_connection_type = dc_connection_none;
cdaae8371aa9d4 Bhawanpreet Lakha 2020-05-11 2622 struct dc_state *dc_state;
cdaae8371aa9d4 Bhawanpreet Lakha 2020-05-11 2623 int i, r, j;
cdaae8371aa9d4 Bhawanpreet Lakha 2020-05-11 2624
53b3f8f40e6cff Dennis Li 2020-08-19 2625 if (amdgpu_in_reset(adev)) {
cdaae8371aa9d4 Bhawanpreet Lakha 2020-05-11 2626 dc_state = dm->cached_dc_state;
cdaae8371aa9d4 Bhawanpreet Lakha 2020-05-11 2627
6d63fcc2a334f7 Nicholas Kazlauskas 2021-11-09 2628 /*
6d63fcc2a334f7 Nicholas Kazlauskas 2021-11-09 2629 * The dc->current_state is backed up into dm->cached_dc_state
6d63fcc2a334f7 Nicholas Kazlauskas 2021-11-09 2630 * before we commit 0 streams.
6d63fcc2a334f7 Nicholas Kazlauskas 2021-11-09 2631 *
6d63fcc2a334f7 Nicholas Kazlauskas 2021-11-09 2632 * DC will clear link encoder assignments on the real state
6d63fcc2a334f7 Nicholas Kazlauskas 2021-11-09 2633 * but the changes won't propagate over to the copy we made
6d63fcc2a334f7 Nicholas Kazlauskas 2021-11-09 2634 * before the 0 streams commit.
6d63fcc2a334f7 Nicholas Kazlauskas 2021-11-09 2635 *
6d63fcc2a334f7 Nicholas Kazlauskas 2021-11-09 2636 * DC expects that link encoder assignments are *not* valid
32685b32d825ca Nicholas Kazlauskas 2022-02-28 2637 * when committing a state, so as a workaround we can copy
32685b32d825ca Nicholas Kazlauskas 2022-02-28 2638 * off of the current state.
32685b32d825ca Nicholas Kazlauskas 2022-02-28 2639 *
32685b32d825ca Nicholas Kazlauskas 2022-02-28 2640 * We lose the previous assignments, but we had already
32685b32d825ca Nicholas Kazlauskas 2022-02-28 2641 * commit 0 streams anyway.
6d63fcc2a334f7 Nicholas Kazlauskas 2021-11-09 2642 */
32685b32d825ca Nicholas Kazlauskas 2022-02-28 2643 link_enc_cfg_copy(adev->dm.dc->current_state, dc_state);
6d63fcc2a334f7 Nicholas Kazlauskas 2021-11-09 2644
af6902ec415655 Nicholas Kazlauskas 2021-11-23 2645 if (dc_enable_dmub_notifications(adev->dm.dc))
524a0ba6fab955 Nicholas Kazlauskas 2021-11-08 2646 amdgpu_dm_outbox_init(adev);
524a0ba6fab955 Nicholas Kazlauskas 2021-11-08 2647
cdaae8371aa9d4 Bhawanpreet Lakha 2020-05-11 2648 r = dm_dmub_hw_init(adev);
cdaae8371aa9d4 Bhawanpreet Lakha 2020-05-11 2649 if (r)
cdaae8371aa9d4 Bhawanpreet Lakha 2020-05-11 2650 DRM_ERROR("DMUB interface failed to initialize: status=%d\n", r);
cdaae8371aa9d4 Bhawanpreet Lakha 2020-05-11 2651
cdaae8371aa9d4 Bhawanpreet Lakha 2020-05-11 2652 dc_set_power_state(dm->dc, DC_ACPI_CM_POWER_STATE_D0);
cdaae8371aa9d4 Bhawanpreet Lakha 2020-05-11 2653 dc_resume(dm->dc);
cdaae8371aa9d4 Bhawanpreet Lakha 2020-05-11 2654
cdaae8371aa9d4 Bhawanpreet Lakha 2020-05-11 2655 amdgpu_dm_irq_resume_early(adev);
4562236b3bc0a2 Harry Wentland 2017-09-12 2656
cdaae8371aa9d4 Bhawanpreet Lakha 2020-05-11 2657 for (i = 0; i < dc_state->stream_count; i++) {
cdaae8371aa9d4 Bhawanpreet Lakha 2020-05-11 2658 dc_state->streams[i]->mode_changed = true;
6984fa418b8efd Nicholas Kazlauskas 2021-11-09 2659 for (j = 0; j < dc_state->stream_status[i].plane_count; j++) {
6984fa418b8efd Nicholas Kazlauskas 2021-11-09 2660 dc_state->stream_status[i].plane_states[j]->update_flags.raw
cdaae8371aa9d4 Bhawanpreet Lakha 2020-05-11 2661 = 0xffffffff;
cdaae8371aa9d4 Bhawanpreet Lakha 2020-05-11 2662 }
cdaae8371aa9d4 Bhawanpreet Lakha 2020-05-11 2663 }
cdaae8371aa9d4 Bhawanpreet Lakha 2020-05-11 2664
cdaae8371aa9d4 Bhawanpreet Lakha 2020-05-11 2665 WARN_ON(!dc_commit_state(dm->dc, dc_state));
cdaae8371aa9d4 Bhawanpreet Lakha 2020-05-11 2666
cdaae8371aa9d4 Bhawanpreet Lakha 2020-05-11 2667 dm_gpureset_commit_state(dm->cached_dc_state, dm);
cdaae8371aa9d4 Bhawanpreet Lakha 2020-05-11 2668
cdaae8371aa9d4 Bhawanpreet Lakha 2020-05-11 2669 dm_gpureset_toggle_interrupts(adev, dm->cached_dc_state, true);
cdaae8371aa9d4 Bhawanpreet Lakha 2020-05-11 2670
cdaae8371aa9d4 Bhawanpreet Lakha 2020-05-11 2671 dc_release_state(dm->cached_dc_state);
cdaae8371aa9d4 Bhawanpreet Lakha 2020-05-11 2672 dm->cached_dc_state = NULL;
cdaae8371aa9d4 Bhawanpreet Lakha 2020-05-11 2673
cdaae8371aa9d4 Bhawanpreet Lakha 2020-05-11 2674 amdgpu_dm_irq_resume_late(adev);
cdaae8371aa9d4 Bhawanpreet Lakha 2020-05-11 2675
cdaae8371aa9d4 Bhawanpreet Lakha 2020-05-11 2676 mutex_unlock(&dm->dc_lock);
4562236b3bc0a2 Harry Wentland 2017-09-12 2677
cdaae8371aa9d4 Bhawanpreet Lakha 2020-05-11 2678 return 0;
cdaae8371aa9d4 Bhawanpreet Lakha 2020-05-11 2679 }
113b7a01087211 Leo Li 2019-03-19 2680 /* Recreate dc_state - DC invalidates it when setting power state to S3. */
113b7a01087211 Leo Li 2019-03-19 2681 dc_release_state(dm_state->context);
113b7a01087211 Leo Li 2019-03-19 2682 dm_state->context = dc_create_state(dm->dc);
113b7a01087211 Leo Li 2019-03-19 2683 /* TODO: Remove dc_state->dccg, use dc->dccg directly. */
113b7a01087211 Leo Li 2019-03-19 2684 dc_resource_state_construct(dm->dc, dm_state->context);
113b7a01087211 Leo Li 2019-03-19 2685
af6902ec415655 Nicholas Kazlauskas 2021-11-23 2686 /* Re-enable outbox interrupts for DPIA. */
af6902ec415655 Nicholas Kazlauskas 2021-11-23 2687 if (dc_enable_dmub_notifications(adev->dm.dc))
af6902ec415655 Nicholas Kazlauskas 2021-11-23 2688 amdgpu_dm_outbox_init(adev);
af6902ec415655 Nicholas Kazlauskas 2021-11-23 2689
8c7aea404d55da Nicholas Kazlauskas 2019-11-25 2690 /* Before powering on DC we need to re-initialize DMUB. */
79d6b9351f086e Nicholas Kazlauskas 2021-12-15 2691 dm_dmub_hw_resume(adev);
8c7aea404d55da Nicholas Kazlauskas 2019-11-25 2692
a80aa93de1a0e6 Mikita Lipski 2018-02-03 2693 /* power on hardware */
a80aa93de1a0e6 Mikita Lipski 2018-02-03 2694 dc_set_power_state(dm->dc, DC_ACPI_CM_POWER_STATE_D0);
a80aa93de1a0e6 Mikita Lipski 2018-02-03 2695
4562236b3bc0a2 Harry Wentland 2017-09-12 2696 /* program HPD filter */
4562236b3bc0a2 Harry Wentland 2017-09-12 2697 dc_resume(dm->dc);
4562236b3bc0a2 Harry Wentland 2017-09-12 2698
4562236b3bc0a2 Harry Wentland 2017-09-12 2699 /*
4562236b3bc0a2 Harry Wentland 2017-09-12 2700 * early enable HPD Rx IRQ, should be done before set mode as short
4562236b3bc0a2 Harry Wentland 2017-09-12 2701 * pulse interrupts are used for MST
4562236b3bc0a2 Harry Wentland 2017-09-12 2702 */
4562236b3bc0a2 Harry Wentland 2017-09-12 2703 amdgpu_dm_irq_resume_early(adev);
4562236b3bc0a2 Harry Wentland 2017-09-12 2704
684cd480fd4e6d Lyude Paul 2019-09-25 2705 /* On resume we need to rewrite the MSTM control bits to enable MST*/
684cd480fd4e6d Lyude Paul 2019-09-25 2706 s3_handle_mst(ddev, false);
684cd480fd4e6d Lyude Paul 2019-09-25 2707
4562236b3bc0a2 Harry Wentland 2017-09-12 2708 /* Do detection*/
f8d2d39eb40694 Lyude Paul 2019-09-03 2709 drm_connector_list_iter_begin(ddev, &iter);
f8d2d39eb40694 Lyude Paul 2019-09-03 2710 drm_for_each_connector_iter(connector, &iter) {
c84dec2fe8837f Harry Wentland 2017-09-05 2711 aconnector = to_amdgpu_dm_connector(connector);
4562236b3bc0a2 Harry Wentland 2017-09-12 2712
4562236b3bc0a2 Harry Wentland 2017-09-12 2713 /*
4562236b3bc0a2 Harry Wentland 2017-09-12 2714 * this is the case when traversing through already created
4562236b3bc0a2 Harry Wentland 2017-09-12 2715 * MST connectors, should be skipped
4562236b3bc0a2 Harry Wentland 2017-09-12 2716 */
f4346fb3edf772 Roman Li 2022-03-17 @2717 if (aconnector->dc_link &&
^^^^^^^^^^^^^^^^^^^
Probably this check can be deleted...
f4346fb3edf772 Roman Li 2022-03-17 2718 aconnector->dc_link->type == dc_connection_mst_branch)
4562236b3bc0a2 Harry Wentland 2017-09-12 2719 continue;
4562236b3bc0a2 Harry Wentland 2017-09-12 2720
03ea364c8e156b Arindam Nath 2017-04-26 2721 mutex_lock(&aconnector->hpd_lock);
fbbdadf2faf17c Bhawanpreet Lakha 2018-09-26 2722 if (!dc_link_detect_sink(aconnector->dc_link, &new_connection_type))
fbbdadf2faf17c Bhawanpreet Lakha 2018-09-26 2723 DRM_ERROR("KMS: Failed to detect connector\n");
fbbdadf2faf17c Bhawanpreet Lakha 2018-09-26 2724
fbbdadf2faf17c Bhawanpreet Lakha 2018-09-26 2725 if (aconnector->base.force && new_connection_type == dc_connection_none)
fbbdadf2faf17c Bhawanpreet Lakha 2018-09-26 2726 emulated_link_detect(aconnector->dc_link);
fbbdadf2faf17c Bhawanpreet Lakha 2018-09-26 2727 else
8f38b66c826188 Hersen Wu 2017-09-11 2728 dc_link_detect(aconnector->dc_link, DETECT_REASON_HPD);
3eb4eba42263cc Roman Li 2017-10-20 2729
3eb4eba42263cc Roman Li 2017-10-20 @2730 if (aconnector->fake_enable && aconnector->dc_link->local_sink)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
The other code does not bother to check.
3eb4eba42263cc Roman Li 2017-10-20 2731 aconnector->fake_enable = false;
3eb4eba42263cc Roman Li 2017-10-20 2732
dcd5fb82ffb484 Mathias Fröhlich 2019-02-10 2733 if (aconnector->dc_sink)
--
0-DAY CI Kernel Test Service
https://01.org/lkp
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2022-10-25 7:06 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-25 7:05 drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:2730 dm_resume() error: we previously assumed 'aconnector->dc_link' could be null (see line 2717) Dan Carpenter
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.