1. 20 Nov, 2019 21 commits
  2. 19 Nov, 2019 15 commits
  3. 18 Nov, 2019 4 commits
    • Lucas De Marchi's avatar
      drm/i915/dsb: fix extra warning on error path handling · 03cea610
      Lucas De Marchi authored
      When we call intel_dsb_get(), the dsb initialization may fail for
      various reasons. We already log the error message in that path, making
      it unnecessary to trigger a warning that refcount == 0 when calling
      intel_dsb_put().
      
      So here we simplify the logic and do lazy shutdown: leaving the extra
      refcount alive so when we call intel_dsb_put() we end up calling
      i915_vma_unpin_and_release().
      Signed-off-by: default avatarLucas De Marchi <lucas.demarchi@intel.com>
      Reviewed-by: default avatarMatt Roper <matthew.d.roper@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191111205024.22853-3-lucas.demarchi@intel.com
      03cea610
    • Lucas De Marchi's avatar
      drm/i915/dsb: remove atomic operations · ac4eead3
      Lucas De Marchi authored
      The current dsb API is not really prepared to handle multithread access.
      I was debugging an issue that ended up fixed by commit a096883d
      ("drm/i915/dsb: Remove PIN_MAPPABLE from the DSB object VMA") and was
      puzzled how these atomic operations were guaranteeing atomicity.
      
      	if (atomic_add_return(1, &dsb->refcount) != 1)
      		return dsb;
      
      Thread A could still be initializing dsb struct (and even fail in the
      middle) while thread B would take a reference and use it (even
      derefencing a NULL cmd_buf).
      
      I don't think the atomic operations here will help much if this were
      to support multithreaded scenario in future, so just remove them to
      avoid confusion.
      
      v2: Use refcount++ != 0 instead of ++refcount != 1 (from Ville)
      Signed-off-by: default avatarLucas De Marchi <lucas.demarchi@intel.com>
      Reviewed-by: default avatarMatt Roper <matthew.d.roper@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191111205024.22853-2-lucas.demarchi@intel.com
      Link: https://patchwork.freedesktop.org/patch/msgid/20191116011539.18230-1-lucas.demarchi@intel.com
      ac4eead3
    • José Roberto de Souza's avatar
      drm/i915/mst: Check uapi enable not intel one during mst atomic check · c50bb4dd
      José Roberto de Souza authored
      When the connector has VCPI allocated and is being moved to another
      pipe it causes drm_dp_atomic_release_vcpi_slots() and
      drm_dp_atomic_find_vcpi_slots() to be called in the same atomic check
      causing the error bellow.
      This happens because at this point Intel's hw.enable(and all other
      flags in the same struct) is not set but checking to on the uapi one
      it have the expected value.
      
      [  580.804430] ------------[ cut here ]------------
      [  580.804436] WARNING: CPU: 0 PID: 1221 at drivers/gpu/drm/drm_dp_mst_topology.c:4094 drm_dp_atomic_find_vcpi_slots+0x157/0x180
      [  580.804439] Modules linked in: cdc_ether r8152 i915 prime_numbers snd_hda_codec_hdmi snd_hda_intel snd_intel_dspcfg snd_hda_codec snd_hwdep asix snd_hda_core x86_pkg_temp_thermal usbnet mei_hdcp coretemp mii mei_me crct10dif_pclmul snd_pcm crc32_pclmul mei ghash_clmulni_intel i2c_i801 [last unloaded: prime_numbers]
      [  580.804462] CPU: 0 PID: 1221 Comm: kworker/0:0 Tainted: G        W         5.4.0-rc7-zeh+ #1226
      [  580.804465] Hardware name: Intel Corporation Tiger Lake Client Platform/TigerLake U DDR4 SODIMM RVP, BIOS TGLSFWI1.D00.2321.A09.1909250226 09/25/2019
      [  580.804470] Workqueue: events output_poll_execute
      [  580.804476] RIP: 0010:drm_dp_atomic_find_vcpi_slots+0x157/0x180
      [  580.804481] Code: 6a ff ff ff 49 89 6d 08 4c 89 6b 10 4c 89 63 18 49 89 6e 08 e9 55 ff ff ff 41 89 c7 5b 5d 44 89 f8 41 5c 41 5d 41 5e 41 5f c3 <0f> 0b 48 c7 c7 08 73 11 82 48 89 ee 41 bf ea ff ff ff e8 b2 e3 02
      [  580.804484] RSP: 0018:ffffc900009b7ab8 EFLAGS: 00010246
      [  580.804488] RAX: ffff88848c04ef50 RBX: ffff88848c04ef40 RCX: 0000000000000214
      [  580.804492] RDX: ffff88848c04f5e0 RSI: ffff888486eb2c68 RDI: ffff88848e518800
      [  580.804495] RBP: ffff88849d339000 R08: 00000000bc4e1092 R09: 0000000000000000
      [  580.804498] R10: 0000000000000000 R11: 0000000000000000 R12: ffff88848c04e728
      [  580.804501] R13: 0000000000000214 R14: ffff88848c04e720 R15: ffff888486eb2c68
      [  580.804504] FS:  0000000000000000(0000) GS:ffff8884a0000000(0000) knlGS:0000000000000000
      [  580.804507] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [  580.804510] CR2: 00007ff6bf1ba680 CR3: 0000000005210003 CR4: 0000000000760ef0
      [  580.804512] PKRU: 55555554
      [  580.804515] Call Trace:
      [  580.804574]  intel_dp_mst_compute_config+0x193/0x2b0 [i915]
      [  580.804636]  intel_atomic_check+0x10cc/0x20b0 [i915]
      [  580.804644]  ? drm_atomic_print_old_state+0xf1/0x130
      [  580.804655]  drm_atomic_check_only+0x56a/0x810
      [  580.804663]  drm_atomic_commit+0xe/0x50
      [  580.804668]  drm_client_modeset_commit_atomic+0x18b/0x220
      [  580.804680]  drm_client_modeset_commit_force+0x4d/0x180
      [  580.804685]  drm_fb_helper_restore_fbdev_mode_unlocked+0x46/0xa0
      [  580.804689]  drm_fb_helper_set_par+0x27/0x50
      [  580.804692]  drm_fb_helper_hotplug_event.part.0+0xa7/0xc0
      [  580.804696]  drm_kms_helper_hotplug_event+0x21/0x30
      [  580.804699]  output_poll_execute+0x1a4/0x1c0
      [  580.804706]  process_one_work+0x25b/0x5b0
      [  580.804713]  worker_thread+0x4b/0x3b0
      [  580.804720]  kthread+0x100/0x140
      [  580.804723]  ? process_one_work+0x5b0/0x5b0
      [  580.804725]  ? kthread_park+0x80/0x80
      [  580.804730]  ret_from_fork+0x24/0x50
      [  580.804740] irq event stamp: 40988
      [  580.804743] hardirqs last  enabled at (40987): [<ffffffff81128567>] console_unlock+0x437/0x590
      [  580.804746] hardirqs last disabled at (40988): [<ffffffff81001cfa>] trace_hardirqs_off_thunk+0x1a/0x20
      [  580.804749] softirqs last  enabled at (40972): [<ffffffff81c00389>] __do_softirq+0x389/0x47f
      [  580.804752] softirqs last disabled at (40959): [<ffffffff810b6f19>] irq_exit+0xa9/0xc0
      [  580.804754] ---[ end trace 80052e0c60463c67 ]---
      [  580.804758] [drm:drm_dp_atomic_find_vcpi_slots] *ERROR* cannot allocate and release VCPI on [MST PORT:000000007880692e] in the same state
      [  580.811370] [drm:intel_dp_hpd_pulse [i915]] got esi2 02 00 00
      [  580.817239] [drm:intel_dp_hpd_pulse [i915]] got esi 02 00 00
      [  580.817313] ------------[ cut here ]------------
      [  580.817318] WARNING: CPU: 0 PID: 1221 at drivers/gpu/drm/drm_dp_mst_topology.c:4094 drm_dp_atomic_find_vcpi_slots+0x157/0x180
      [  580.817321] Modules linked in: cdc_ether r8152 i915 prime_numbers snd_hda_codec_hdmi snd_hda_intel snd_intel_dspcfg snd_hda_codec snd_hwdep asix snd_hda_core x86_pkg_temp_thermal
      [  580.817412] [drm:intel_dp_hpd_pulse [i915]] got hpd irq on [ENCODER:306:DDI E] - short
      [  580.817413]  usbnet mei_hdcp coretemp mii mei_me crct10dif_pclmul snd_pcm crc32_pclmul
      [  580.817490] [drm:intel_dp_hpd_pulse [i915]]  is_mst
      [  580.817491]  mei ghash_clmulni_intel i2c_i801 [last unloaded: prime_numbers]
      [  580.817498] CPU: 0 PID: 1221 Comm: kworker/0:0 Tainted: G        W         5.4.0-rc7-zeh+ #1226
      [  580.817503] Hardware name: Intel Corporation Tiger Lake Client Platform/TigerLake U DDR4 SODIMM RVP, BIOS TGLSFWI1.D00.2321.A09.1909250226 09/25/2019
      [  580.817506] Workqueue: events output_poll_execute
      [  580.817511] RIP: 0010:drm_dp_atomic_find_vcpi_slots+0x157/0x180
      [  580.817514] Code: 6a ff ff ff 49 89 6d 08 4c 89 6b 10 4c 89 63 18 49 89 6e 08 e9 55 ff ff ff 41 89 c7 5b 5d 44 89 f8 41 5c 41 5d 41 5e 41 5f c3 <0f> 0b 48 c7 c7 08 73 11 82 48 89 ee 41 bf ea ff ff ff e8 b2 e3 02
      [  580.817516] RSP: 0018:ffffc900009b7ab8 EFLAGS: 00010246
      [  580.817519] RAX: ffff88848c04ef50 RBX: ffff88848c04ef40 RCX: 000000000000018f
      [  580.817521] RDX: ffff88848c04f5e0 RSI: ffff888486eb2c68 RDI: ffff88848e518800
      [  580.817523] RBP: ffff88849d339000 R08: 00000000bc4e1092 R09: 0000000000000000
      [  580.817525] R10: 0000000000000000 R11: 0000000000000000 R12: ffff88848c04e728
      [  580.817528] R13: 000000000000018f R14: ffff88848c04e720 R15: ffff888486eb2c68
      [  580.817532] FS:  0000000000000000(0000) GS:ffff8884a0000000(0000) knlGS:0000000000000000
      [  580.817534] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
      [  580.817535] CR2: 00007ff6bf1ba680 CR3: 0000000005210003 CR4: 0000000000760ef0
      [  580.817537] PKRU: 55555554
      [  580.817538] Call Trace:
      [  580.817620]  intel_dp_mst_compute_config+0x193/0x2b0 [i915]
      [  580.817690]  intel_atomic_check+0x10cc/0x20b0 [i915]
      [  580.817697]  ? drm_atomic_print_old_state+0xf1/0x130
      [  580.817711]  drm_atomic_check_only+0x56a/0x810
      [  580.817721]  drm_atomic_commit+0xe/0x50
      [  580.817726]  drm_client_modeset_commit_atomic+0x18b/0x220
      [  580.817744]  drm_client_modeset_commit_force+0x4d/0x180
      [  580.817751]  drm_fb_helper_restore_fbdev_mode_unlocked+0x46/0xa0
      [  580.817756]  drm_fb_helper_set_par+0x27/0x50
      [  580.817762]  drm_fb_helper_hotplug_event.part.0+0xa7/0xc0
      [  580.817767]  drm_kms_helper_hotplug_event+0x21/0x30
      [  580.817771]  output_poll_execute+0x1a4/0x1c0
      [  580.817780]  process_one_work+0x25b/0x5b0
      [  580.817791]  worker_thread+0x4b/0x3b0
      [  580.817800]  kthread+0x100/0x140
      [  580.817804]  ? process_one_work+0x5b0/0x5b0
      [  580.817807]  ? kthread_park+0x80/0x80
      [  580.817813]  ret_from_fork+0x24/0x50
      [  580.817832] irq event stamp: 41028
      [  580.817838] hardirqs last  enabled at (41027): [<ffffffff81128567>] console_unlock+0x437/0x590
      [  580.817841] hardirqs last disabled at (41028): [<ffffffff81001cfa>] trace_hardirqs_off_thunk+0x1a/0x20
      [  580.817846] softirqs last  enabled at (41022): [<ffffffff81c00389>] __do_softirq+0x389/0x47f
      [  580.817851] softirqs last disabled at (41013): [<ffffffff810b6f19>] irq_exit+0xa9/0xc0
      [  580.817854] ---[ end trace 80052e0c60463c68 ]---
      [  580.817858] [drm:drm_dp_atomic_find_vcpi_slots] *ERROR* cannot allocate and release VCPI on [MST PORT:000000007880692e] in the same state
      [  580.830767] [drm:intel_dp_mst_compute_config [i915]] failed finding vcpi slots:-22
      [  580.830821] [drm:intel_atomic_check [i915]] Encoder config failure: -22
      
      Cc: Lyude Paul <lyude@redhat.com>
      Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
      Cc: Ville Syrjälä <ville.syrjala@linux.intel.com>
      Cc: Lucas De Marchi <lucas.demarchi@intel.com>
      Signed-off-by: default avatarJosé Roberto de Souza <jose.souza@intel.com>
      Reviewed-by: default avatarLyude Paul <lyude@redhat.com>
      Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191115200430.53146-1-jose.souza@intel.com
      c50bb4dd
    • Matt Roper's avatar
      drm/i915/vbt: Handle generic DTD block · 33ef6d4f
      Matt Roper authored
      VBT revision 229 adds a new "Generic DTD" block 58 and deprecates the
      old LFP panel mode data in block 42.  Let's start parsing this block to
      fill in the panel fixed mode on devices with a >=229 VBT.
      
      v2:
       * Update according to the recent updates:
          - DTD size is now 16 bits instead of 24
          - polarity is now just a single bit for hsync and vsync and is
            properly documented
       * Minor checkpatch fix
      
      v3:
       * Now that panel options are parsed separately from the previous patch,
         move generic DTD parsing into a function parallel to
         parse_lfp_panel_dtd.  We'll still fall back to looking at the legacy
         LVDS timing block if the generic DTD fails.  (Jani)
       * Don't forget to actually set lfp_lvds_vbt_mode!  (Jani)
       * Drop "bdb_" prefix from dtd entry structure.  (Jani)
       * Follow C99 standard for structure's flexible array member.  (Jani)
      
      v4:
       * Add "positive" to polarity field names for clarity.  (Jani)
       * Move VBT version check and fallback to legacy DTD parsing logic to a
         helper to keep top-level VBT parsing uncluttered.  (Jani)
       * Restructure reserved bit packing at end of generic_dtd_entry from
         "u32 rsvd:24" to "u8 rsvd[3]" to prevent copy/paste mistakes in the
         future.  (Jani)
      
      Bspec: 54751
      Bspec: 20148
      Cc: Jani Nikula <jani.nikula@intel.com>
      Signed-off-by: default avatarMatt Roper <matthew.d.roper@intel.com>
      Reviewed-by: default avatarJani Nikula <jani.nikula@intel.com>
      Link: https://patchwork.freedesktop.org/patch/msgid/20191115165132.9472-3-matthew.d.roper@intel.com
      33ef6d4f