diff mbox series

[v3,1/6] drm/i915: Initialize dkl_phy spin lock from display code path

Message ID 20230410183219.191543-1-jose.souza@intel.com (mailing list archive)
State New, archived
Headers show
Series [v3,1/6] drm/i915: Initialize dkl_phy spin lock from display code path | expand

Commit Message

Souza, Jose April 10, 2023, 6:32 p.m. UTC
Start to move the initialization of some lock from
i915_driver_early_probe().
No dkl function is called prior to intel_setup_outputs(), so this is
a good place to initialize it.

This will also fix a warning in Xe kmd:

[  201.894839] xe 0000:00:02.0: [drm] [ENCODER:235:DDI A/PHY A] failed to retrieve link info, disabling eDP
[  202.136336] xe 0000:00:02.0: [drm] *ERROR* Failed to write source OUI
[  202.175346] INFO: trying to register non-static key.
[  202.175347] irq event stamp: 754060
[  202.175359] hardirqs last  enabled at (754059): [<ffffffff8122cf79>] tick_nohz_idle_enter+0x59/0x80
[  202.180294] The code is fine but needs lockdep annotation, or maybe
[  202.183774] hardirqs last disabled at (754060): [<ffffffff811a5539>] do_idle+0x99/0x230
[  202.192734] you didn't initialize this object before use?
[  202.198951] softirqs last  enabled at (753948): [<ffffffff8114abae>] irq_exit_rcu+0xbe/0x130
[  202.206882] turning off the locking correctness validator.
[  202.212236] softirqs last disabled at (753943): [<ffffffff8114abae>] irq_exit_rcu+0xbe/0x130
[  202.220592] CPU: 2 PID: 1415 Comm: modprobe Tainted: G        W          6.3.0-rc4+zeh-xe+ #909
[  202.243002] Hardware name: Intel Corporation Raptor Lake Client Platform/RaptorLake-P LP5 RVP, BIOS RPLPFWI1.R00.3361.A14.2211151548 11/15/2022
[  202.255737] Call Trace:
[  202.258179]  <TASK>
[  202.260275]  dump_stack_lvl+0x58/0xc0
[  202.263922]  register_lock_class+0x756/0x7d0
[  202.268165]  ? find_held_lock+0x2b/0x80
[  202.271975]  __lock_acquire+0x72/0x28b0
[  202.275786]  ? debug_object_free+0xb4/0x160
[  202.279946]  lock_acquire+0xd1/0x2d0
[  202.283503]  ? intel_dkl_phy_read+0x18/0x60 [xe]
[  202.288181]  _raw_spin_lock+0x2a/0x40
[  202.291825]  ? intel_dkl_phy_read+0x18/0x60 [xe]
[  202.296475]  intel_dkl_phy_read+0x18/0x60 [xe]
[  202.300949]  icl_aux_power_well_enable+0x2bd/0x400 [xe]
[  202.306202]  ? intel_display_power_grab_async_put_ref+0x75/0x120 [xe]
[  202.312649]  intel_power_well_enable+0x1c/0x70 [xe]
[  202.317543]  __intel_display_power_get_domain.part.0+0x4d/0x70 [xe]
[  202.323812]  intel_display_power_get+0x43/0x70 [xe]
[  202.328708]  intel_tc_port_init+0x199/0x2a0 [xe]
[  202.333363]  intel_ddi_init+0x6ad/0xb00 [xe]
[  202.337678]  intel_modeset_init_nogem+0x536/0x6d0 [xe]
[  202.342838]  xe_display_init_noaccel+0x19/0x40 [xe]
[  202.347743]  xe_device_probe+0x1f5/0x2a0 [xe]
[  202.352127]  xe_pci_probe+0x28c/0x480 [xe]
[  202.356260]  pci_device_probe+0x9d/0x150
[  202.360164]  really_probe+0x19a/0x400
[  202.363809]  ? __pfx___driver_attach+0x10/0x10
[  202.368226]  __driver_probe_device+0x73/0x170
[  202.372558]  driver_probe_device+0x1a/0x90
[  202.376632]  __driver_attach+0xcd/0x1c0
[  202.380442]  bus_for_each_dev+0x72/0xc0
[  202.384253]  bus_add_driver+0x110/0x210
[  202.388063]  driver_register+0x50/0x100
[  202.391873]  ? __pfx_init_module+0x10/0x10 [xe]
[  202.396431]  do_one_initcall+0x55/0x260
[  202.400245]  ? rcu_is_watching+0xd/0x40
[  202.404058]  ? kmalloc_trace+0xa0/0xb0
[  202.407786]  do_init_module+0x45/0x1e0
[  202.411512]  __do_sys_finit_module+0xac/0x120
[  202.415838]  do_syscall_64+0x37/0x90
[  202.419397]  entry_SYSCALL_64_after_hwframe+0x72/0xdc
[  202.424409] RIP: 0033:0x7fd11291ea3d
[  202.427967] Code: 5b 41 5c c3 66 0f 1f 84 00 00 00 00 00 f3 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d c3 a3 0f 00 f7 d8 64 89 01 48
[  202.446530] RSP: 002b:00007ffffde11368 EFLAGS: 00000246 ORIG_RAX: 0000000000000139
[  202.454031] RAX: ffffffffffffffda RBX: 00005616a617f210 RCX: 00007fd11291ea3d
[  202.461106] RDX: 0000000000000000 RSI: 00005616a617fe60 RDI: 000000000000000e
[  202.468182] RBP: 0000000000040000 R08: 0000000000000000 R09: 0000000000000002
[  202.475250] R10: 000000000000000e R11: 0000000000000246 R12: 00005616a617fe60
[  202.482319] R13: 00005616a617f340 R14: 0000000000000000 R15: 00005616a6180650
[  202.489396]  </TASK>

Cc: intel-gfx@lists.freedesktop.org
Cc: intel-xe@lists.freedesktop.org
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
---
 drivers/gpu/drm/i915/display/intel_display.c | 3 +++
 drivers/gpu/drm/i915/display/intel_dkl_phy.c | 6 ++++++
 drivers/gpu/drm/i915/display/intel_dkl_phy.h | 2 ++
 drivers/gpu/drm/i915/i915_driver.c           | 1 -
 4 files changed, 11 insertions(+), 1 deletion(-)

Comments

Jani Nikula April 11, 2023, 8:32 a.m. UTC | #1
On Mon, 10 Apr 2023, José Roberto de Souza <jose.souza@intel.com> wrote:
> Start to move the initialization of some lock from
> i915_driver_early_probe().

Please send this as standalone patch to i915. It won't get merged to
i915 as part of series only parts of which apply to i915.

BR,
Jani.


> No dkl function is called prior to intel_setup_outputs(), so this is
> a good place to initialize it.
>
> This will also fix a warning in Xe kmd:
>
> [  201.894839] xe 0000:00:02.0: [drm] [ENCODER:235:DDI A/PHY A] failed to retrieve link info, disabling eDP
> [  202.136336] xe 0000:00:02.0: [drm] *ERROR* Failed to write source OUI
> [  202.175346] INFO: trying to register non-static key.
> [  202.175347] irq event stamp: 754060
> [  202.175359] hardirqs last  enabled at (754059): [<ffffffff8122cf79>] tick_nohz_idle_enter+0x59/0x80
> [  202.180294] The code is fine but needs lockdep annotation, or maybe
> [  202.183774] hardirqs last disabled at (754060): [<ffffffff811a5539>] do_idle+0x99/0x230
> [  202.192734] you didn't initialize this object before use?
> [  202.198951] softirqs last  enabled at (753948): [<ffffffff8114abae>] irq_exit_rcu+0xbe/0x130
> [  202.206882] turning off the locking correctness validator.
> [  202.212236] softirqs last disabled at (753943): [<ffffffff8114abae>] irq_exit_rcu+0xbe/0x130
> [  202.220592] CPU: 2 PID: 1415 Comm: modprobe Tainted: G        W          6.3.0-rc4+zeh-xe+ #909
> [  202.243002] Hardware name: Intel Corporation Raptor Lake Client Platform/RaptorLake-P LP5 RVP, BIOS RPLPFWI1.R00.3361.A14.2211151548 11/15/2022
> [  202.255737] Call Trace:
> [  202.258179]  <TASK>
> [  202.260275]  dump_stack_lvl+0x58/0xc0
> [  202.263922]  register_lock_class+0x756/0x7d0
> [  202.268165]  ? find_held_lock+0x2b/0x80
> [  202.271975]  __lock_acquire+0x72/0x28b0
> [  202.275786]  ? debug_object_free+0xb4/0x160
> [  202.279946]  lock_acquire+0xd1/0x2d0
> [  202.283503]  ? intel_dkl_phy_read+0x18/0x60 [xe]
> [  202.288181]  _raw_spin_lock+0x2a/0x40
> [  202.291825]  ? intel_dkl_phy_read+0x18/0x60 [xe]
> [  202.296475]  intel_dkl_phy_read+0x18/0x60 [xe]
> [  202.300949]  icl_aux_power_well_enable+0x2bd/0x400 [xe]
> [  202.306202]  ? intel_display_power_grab_async_put_ref+0x75/0x120 [xe]
> [  202.312649]  intel_power_well_enable+0x1c/0x70 [xe]
> [  202.317543]  __intel_display_power_get_domain.part.0+0x4d/0x70 [xe]
> [  202.323812]  intel_display_power_get+0x43/0x70 [xe]
> [  202.328708]  intel_tc_port_init+0x199/0x2a0 [xe]
> [  202.333363]  intel_ddi_init+0x6ad/0xb00 [xe]
> [  202.337678]  intel_modeset_init_nogem+0x536/0x6d0 [xe]
> [  202.342838]  xe_display_init_noaccel+0x19/0x40 [xe]
> [  202.347743]  xe_device_probe+0x1f5/0x2a0 [xe]
> [  202.352127]  xe_pci_probe+0x28c/0x480 [xe]
> [  202.356260]  pci_device_probe+0x9d/0x150
> [  202.360164]  really_probe+0x19a/0x400
> [  202.363809]  ? __pfx___driver_attach+0x10/0x10
> [  202.368226]  __driver_probe_device+0x73/0x170
> [  202.372558]  driver_probe_device+0x1a/0x90
> [  202.376632]  __driver_attach+0xcd/0x1c0
> [  202.380442]  bus_for_each_dev+0x72/0xc0
> [  202.384253]  bus_add_driver+0x110/0x210
> [  202.388063]  driver_register+0x50/0x100
> [  202.391873]  ? __pfx_init_module+0x10/0x10 [xe]
> [  202.396431]  do_one_initcall+0x55/0x260
> [  202.400245]  ? rcu_is_watching+0xd/0x40
> [  202.404058]  ? kmalloc_trace+0xa0/0xb0
> [  202.407786]  do_init_module+0x45/0x1e0
> [  202.411512]  __do_sys_finit_module+0xac/0x120
> [  202.415838]  do_syscall_64+0x37/0x90
> [  202.419397]  entry_SYSCALL_64_after_hwframe+0x72/0xdc
> [  202.424409] RIP: 0033:0x7fd11291ea3d
> [  202.427967] Code: 5b 41 5c c3 66 0f 1f 84 00 00 00 00 00 f3 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d c3 a3 0f 00 f7 d8 64 89 01 48
> [  202.446530] RSP: 002b:00007ffffde11368 EFLAGS: 00000246 ORIG_RAX: 0000000000000139
> [  202.454031] RAX: ffffffffffffffda RBX: 00005616a617f210 RCX: 00007fd11291ea3d
> [  202.461106] RDX: 0000000000000000 RSI: 00005616a617fe60 RDI: 000000000000000e
> [  202.468182] RBP: 0000000000040000 R08: 0000000000000000 R09: 0000000000000002
> [  202.475250] R10: 000000000000000e R11: 0000000000000246 R12: 00005616a617fe60
> [  202.482319] R13: 00005616a617f340 R14: 0000000000000000 R15: 00005616a6180650
> [  202.489396]  </TASK>
>
> Cc: intel-gfx@lists.freedesktop.org
> Cc: intel-xe@lists.freedesktop.org
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_display.c | 3 +++
>  drivers/gpu/drm/i915/display/intel_dkl_phy.c | 6 ++++++
>  drivers/gpu/drm/i915/display/intel_dkl_phy.h | 2 ++
>  drivers/gpu/drm/i915/i915_driver.c           | 1 -
>  4 files changed, 11 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index 24c96f388d521..cf3a3b3afdd13 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -83,6 +83,7 @@
>  #include "intel_display_debugfs.h"
>  #include "intel_display_power.h"
>  #include "intel_display_types.h"
> +#include "intel_dkl_phy.h"
>  #include "intel_dmc.h"
>  #include "intel_dp.h"
>  #include "intel_dp_link_training.h"
> @@ -7883,6 +7884,8 @@ static void intel_setup_outputs(struct drm_i915_private *dev_priv)
>  	if (!HAS_DISPLAY(dev_priv))
>  		return;
>  
> +	intel_dkl_phy_init(dev_priv);
> +
>  	if (IS_DG2(dev_priv)) {
>  		intel_ddi_init(dev_priv, PORT_A);
>  		intel_ddi_init(dev_priv, PORT_B);
> diff --git a/drivers/gpu/drm/i915/display/intel_dkl_phy.c b/drivers/gpu/drm/i915/display/intel_dkl_phy.c
> index 57cc3edba0163..5bce7b5b27bc7 100644
> --- a/drivers/gpu/drm/i915/display/intel_dkl_phy.c
> +++ b/drivers/gpu/drm/i915/display/intel_dkl_phy.c
> @@ -104,3 +104,9 @@ intel_dkl_phy_posting_read(struct drm_i915_private *i915, struct intel_dkl_phy_r
>  
>  	spin_unlock(&i915->display.dkl.phy_lock);
>  }
> +
> +void
> +intel_dkl_phy_init(struct drm_i915_private *i915)
> +{
> +	spin_lock_init(&i915->display.dkl.phy_lock);
> +}
> diff --git a/drivers/gpu/drm/i915/display/intel_dkl_phy.h b/drivers/gpu/drm/i915/display/intel_dkl_phy.h
> index 570ee36f9386f..615429b6392c5 100644
> --- a/drivers/gpu/drm/i915/display/intel_dkl_phy.h
> +++ b/drivers/gpu/drm/i915/display/intel_dkl_phy.h
> @@ -20,5 +20,7 @@ void
>  intel_dkl_phy_rmw(struct drm_i915_private *i915, struct intel_dkl_phy_reg reg, u32 clear, u32 set);
>  void
>  intel_dkl_phy_posting_read(struct drm_i915_private *i915, struct intel_dkl_phy_reg reg);
> +void
> +intel_dkl_phy_init(struct drm_i915_private *i915);
>  
>  #endif /* __INTEL_DKL_PHY_H__ */
> diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c
> index 066d79c2069c4..6fe1a97cc246d 100644
> --- a/drivers/gpu/drm/i915/i915_driver.c
> +++ b/drivers/gpu/drm/i915/i915_driver.c
> @@ -224,7 +224,6 @@ static int i915_driver_early_probe(struct drm_i915_private *dev_priv)
>  	mutex_init(&dev_priv->display.wm.wm_mutex);
>  	mutex_init(&dev_priv->display.pps.mutex);
>  	mutex_init(&dev_priv->display.hdcp.comp_mutex);
> -	spin_lock_init(&dev_priv->display.dkl.phy_lock);
>  
>  	i915_memcpy_init_early(dev_priv);
>  	intel_runtime_pm_init_early(&dev_priv->runtime_pm);
Jani Nikula April 11, 2023, 8:33 a.m. UTC | #2
On Tue, 11 Apr 2023, Jani Nikula <jani.nikula@linux.intel.com> wrote:
> On Mon, 10 Apr 2023, José Roberto de Souza <jose.souza@intel.com> wrote:
>> Start to move the initialization of some lock from
>> i915_driver_early_probe().
>
> Please send this as standalone patch to i915. It won't get merged to
> i915 as part of series only parts of which apply to i915.

Not to mention drm-xe-next is *not* the path to upstream i915
changes. Each i915 merged there is a potential problem in upstreaming
xe.

BR,
Jani.
Ville Syrjälä April 11, 2023, 8:39 a.m. UTC | #3
On Mon, Apr 10, 2023 at 11:32:14AM -0700, José Roberto de Souza wrote:
> Start to move the initialization of some lock from
> i915_driver_early_probe().
> No dkl function is called prior to intel_setup_outputs(), so this is
> a good place to initialize it.

I disagree. We don't want to sprinke these all over the place.

> This will also fix a warning in Xe kmd:
> 
> [  201.894839] xe 0000:00:02.0: [drm] [ENCODER:235:DDI A/PHY A] failed to retrieve link info, disabling eDP
> [  202.136336] xe 0000:00:02.0: [drm] *ERROR* Failed to write source OUI
> [  202.175346] INFO: trying to register non-static key.
> [  202.175347] irq event stamp: 754060
> [  202.175359] hardirqs last  enabled at (754059): [<ffffffff8122cf79>] tick_nohz_idle_enter+0x59/0x80
> [  202.180294] The code is fine but needs lockdep annotation, or maybe
> [  202.183774] hardirqs last disabled at (754060): [<ffffffff811a5539>] do_idle+0x99/0x230
> [  202.192734] you didn't initialize this object before use?
> [  202.198951] softirqs last  enabled at (753948): [<ffffffff8114abae>] irq_exit_rcu+0xbe/0x130
> [  202.206882] turning off the locking correctness validator.
> [  202.212236] softirqs last disabled at (753943): [<ffffffff8114abae>] irq_exit_rcu+0xbe/0x130
> [  202.220592] CPU: 2 PID: 1415 Comm: modprobe Tainted: G        W          6.3.0-rc4+zeh-xe+ #909
> [  202.243002] Hardware name: Intel Corporation Raptor Lake Client Platform/RaptorLake-P LP5 RVP, BIOS RPLPFWI1.R00.3361.A14.2211151548 11/15/2022
> [  202.255737] Call Trace:
> [  202.258179]  <TASK>
> [  202.260275]  dump_stack_lvl+0x58/0xc0
> [  202.263922]  register_lock_class+0x756/0x7d0
> [  202.268165]  ? find_held_lock+0x2b/0x80
> [  202.271975]  __lock_acquire+0x72/0x28b0
> [  202.275786]  ? debug_object_free+0xb4/0x160
> [  202.279946]  lock_acquire+0xd1/0x2d0
> [  202.283503]  ? intel_dkl_phy_read+0x18/0x60 [xe]
> [  202.288181]  _raw_spin_lock+0x2a/0x40
> [  202.291825]  ? intel_dkl_phy_read+0x18/0x60 [xe]
> [  202.296475]  intel_dkl_phy_read+0x18/0x60 [xe]
> [  202.300949]  icl_aux_power_well_enable+0x2bd/0x400 [xe]
> [  202.306202]  ? intel_display_power_grab_async_put_ref+0x75/0x120 [xe]
> [  202.312649]  intel_power_well_enable+0x1c/0x70 [xe]
> [  202.317543]  __intel_display_power_get_domain.part.0+0x4d/0x70 [xe]
> [  202.323812]  intel_display_power_get+0x43/0x70 [xe]
> [  202.328708]  intel_tc_port_init+0x199/0x2a0 [xe]
> [  202.333363]  intel_ddi_init+0x6ad/0xb00 [xe]
> [  202.337678]  intel_modeset_init_nogem+0x536/0x6d0 [xe]
> [  202.342838]  xe_display_init_noaccel+0x19/0x40 [xe]
> [  202.347743]  xe_device_probe+0x1f5/0x2a0 [xe]
> [  202.352127]  xe_pci_probe+0x28c/0x480 [xe]
> [  202.356260]  pci_device_probe+0x9d/0x150
> [  202.360164]  really_probe+0x19a/0x400
> [  202.363809]  ? __pfx___driver_attach+0x10/0x10
> [  202.368226]  __driver_probe_device+0x73/0x170
> [  202.372558]  driver_probe_device+0x1a/0x90
> [  202.376632]  __driver_attach+0xcd/0x1c0
> [  202.380442]  bus_for_each_dev+0x72/0xc0
> [  202.384253]  bus_add_driver+0x110/0x210
> [  202.388063]  driver_register+0x50/0x100
> [  202.391873]  ? __pfx_init_module+0x10/0x10 [xe]
> [  202.396431]  do_one_initcall+0x55/0x260
> [  202.400245]  ? rcu_is_watching+0xd/0x40
> [  202.404058]  ? kmalloc_trace+0xa0/0xb0
> [  202.407786]  do_init_module+0x45/0x1e0
> [  202.411512]  __do_sys_finit_module+0xac/0x120
> [  202.415838]  do_syscall_64+0x37/0x90
> [  202.419397]  entry_SYSCALL_64_after_hwframe+0x72/0xdc
> [  202.424409] RIP: 0033:0x7fd11291ea3d
> [  202.427967] Code: 5b 41 5c c3 66 0f 1f 84 00 00 00 00 00 f3 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d c3 a3 0f 00 f7 d8 64 89 01 48
> [  202.446530] RSP: 002b:00007ffffde11368 EFLAGS: 00000246 ORIG_RAX: 0000000000000139
> [  202.454031] RAX: ffffffffffffffda RBX: 00005616a617f210 RCX: 00007fd11291ea3d
> [  202.461106] RDX: 0000000000000000 RSI: 00005616a617fe60 RDI: 000000000000000e
> [  202.468182] RBP: 0000000000040000 R08: 0000000000000000 R09: 0000000000000002
> [  202.475250] R10: 000000000000000e R11: 0000000000000246 R12: 00005616a617fe60
> [  202.482319] R13: 00005616a617f340 R14: 0000000000000000 R15: 00005616a6180650
> [  202.489396]  </TASK>
> 
> Cc: intel-gfx@lists.freedesktop.org
> Cc: intel-xe@lists.freedesktop.org
> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
> Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_display.c | 3 +++
>  drivers/gpu/drm/i915/display/intel_dkl_phy.c | 6 ++++++
>  drivers/gpu/drm/i915/display/intel_dkl_phy.h | 2 ++
>  drivers/gpu/drm/i915/i915_driver.c           | 1 -
>  4 files changed, 11 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
> index 24c96f388d521..cf3a3b3afdd13 100644
> --- a/drivers/gpu/drm/i915/display/intel_display.c
> +++ b/drivers/gpu/drm/i915/display/intel_display.c
> @@ -83,6 +83,7 @@
>  #include "intel_display_debugfs.h"
>  #include "intel_display_power.h"
>  #include "intel_display_types.h"
> +#include "intel_dkl_phy.h"
>  #include "intel_dmc.h"
>  #include "intel_dp.h"
>  #include "intel_dp_link_training.h"
> @@ -7883,6 +7884,8 @@ static void intel_setup_outputs(struct drm_i915_private *dev_priv)
>  	if (!HAS_DISPLAY(dev_priv))
>  		return;
>  
> +	intel_dkl_phy_init(dev_priv);
> +
>  	if (IS_DG2(dev_priv)) {
>  		intel_ddi_init(dev_priv, PORT_A);
>  		intel_ddi_init(dev_priv, PORT_B);
> diff --git a/drivers/gpu/drm/i915/display/intel_dkl_phy.c b/drivers/gpu/drm/i915/display/intel_dkl_phy.c
> index 57cc3edba0163..5bce7b5b27bc7 100644
> --- a/drivers/gpu/drm/i915/display/intel_dkl_phy.c
> +++ b/drivers/gpu/drm/i915/display/intel_dkl_phy.c
> @@ -104,3 +104,9 @@ intel_dkl_phy_posting_read(struct drm_i915_private *i915, struct intel_dkl_phy_r
>  
>  	spin_unlock(&i915->display.dkl.phy_lock);
>  }
> +
> +void
> +intel_dkl_phy_init(struct drm_i915_private *i915)
> +{
> +	spin_lock_init(&i915->display.dkl.phy_lock);
> +}
> diff --git a/drivers/gpu/drm/i915/display/intel_dkl_phy.h b/drivers/gpu/drm/i915/display/intel_dkl_phy.h
> index 570ee36f9386f..615429b6392c5 100644
> --- a/drivers/gpu/drm/i915/display/intel_dkl_phy.h
> +++ b/drivers/gpu/drm/i915/display/intel_dkl_phy.h
> @@ -20,5 +20,7 @@ void
>  intel_dkl_phy_rmw(struct drm_i915_private *i915, struct intel_dkl_phy_reg reg, u32 clear, u32 set);
>  void
>  intel_dkl_phy_posting_read(struct drm_i915_private *i915, struct intel_dkl_phy_reg reg);
> +void
> +intel_dkl_phy_init(struct drm_i915_private *i915);
>  
>  #endif /* __INTEL_DKL_PHY_H__ */
> diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c
> index 066d79c2069c4..6fe1a97cc246d 100644
> --- a/drivers/gpu/drm/i915/i915_driver.c
> +++ b/drivers/gpu/drm/i915/i915_driver.c
> @@ -224,7 +224,6 @@ static int i915_driver_early_probe(struct drm_i915_private *dev_priv)
>  	mutex_init(&dev_priv->display.wm.wm_mutex);
>  	mutex_init(&dev_priv->display.pps.mutex);
>  	mutex_init(&dev_priv->display.hdcp.comp_mutex);
> -	spin_lock_init(&dev_priv->display.dkl.phy_lock);
>  
>  	i915_memcpy_init_early(dev_priv);
>  	intel_runtime_pm_init_early(&dev_priv->runtime_pm);
> -- 
> 2.40.0
Jani Nikula April 11, 2023, 8:51 a.m. UTC | #4
On Tue, 11 Apr 2023, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> On Mon, Apr 10, 2023 at 11:32:14AM -0700, José Roberto de Souza wrote:
>> Start to move the initialization of some lock from
>> i915_driver_early_probe().
>> No dkl function is called prior to intel_setup_outputs(), so this is
>> a good place to initialize it.
>
> I disagree. We don't want to sprinke these all over the place.

I'm thinking if only foo.c uses a lock, foo.c should initialize it, not
someone else.

BR,
Jani.



>
>> This will also fix a warning in Xe kmd:
>> 
>> [  201.894839] xe 0000:00:02.0: [drm] [ENCODER:235:DDI A/PHY A] failed to retrieve link info, disabling eDP
>> [  202.136336] xe 0000:00:02.0: [drm] *ERROR* Failed to write source OUI
>> [  202.175346] INFO: trying to register non-static key.
>> [  202.175347] irq event stamp: 754060
>> [  202.175359] hardirqs last  enabled at (754059): [<ffffffff8122cf79>] tick_nohz_idle_enter+0x59/0x80
>> [  202.180294] The code is fine but needs lockdep annotation, or maybe
>> [  202.183774] hardirqs last disabled at (754060): [<ffffffff811a5539>] do_idle+0x99/0x230
>> [  202.192734] you didn't initialize this object before use?
>> [  202.198951] softirqs last  enabled at (753948): [<ffffffff8114abae>] irq_exit_rcu+0xbe/0x130
>> [  202.206882] turning off the locking correctness validator.
>> [  202.212236] softirqs last disabled at (753943): [<ffffffff8114abae>] irq_exit_rcu+0xbe/0x130
>> [  202.220592] CPU: 2 PID: 1415 Comm: modprobe Tainted: G        W          6.3.0-rc4+zeh-xe+ #909
>> [  202.243002] Hardware name: Intel Corporation Raptor Lake Client Platform/RaptorLake-P LP5 RVP, BIOS RPLPFWI1.R00.3361.A14.2211151548 11/15/2022
>> [  202.255737] Call Trace:
>> [  202.258179]  <TASK>
>> [  202.260275]  dump_stack_lvl+0x58/0xc0
>> [  202.263922]  register_lock_class+0x756/0x7d0
>> [  202.268165]  ? find_held_lock+0x2b/0x80
>> [  202.271975]  __lock_acquire+0x72/0x28b0
>> [  202.275786]  ? debug_object_free+0xb4/0x160
>> [  202.279946]  lock_acquire+0xd1/0x2d0
>> [  202.283503]  ? intel_dkl_phy_read+0x18/0x60 [xe]
>> [  202.288181]  _raw_spin_lock+0x2a/0x40
>> [  202.291825]  ? intel_dkl_phy_read+0x18/0x60 [xe]
>> [  202.296475]  intel_dkl_phy_read+0x18/0x60 [xe]
>> [  202.300949]  icl_aux_power_well_enable+0x2bd/0x400 [xe]
>> [  202.306202]  ? intel_display_power_grab_async_put_ref+0x75/0x120 [xe]
>> [  202.312649]  intel_power_well_enable+0x1c/0x70 [xe]
>> [  202.317543]  __intel_display_power_get_domain.part.0+0x4d/0x70 [xe]
>> [  202.323812]  intel_display_power_get+0x43/0x70 [xe]
>> [  202.328708]  intel_tc_port_init+0x199/0x2a0 [xe]
>> [  202.333363]  intel_ddi_init+0x6ad/0xb00 [xe]
>> [  202.337678]  intel_modeset_init_nogem+0x536/0x6d0 [xe]
>> [  202.342838]  xe_display_init_noaccel+0x19/0x40 [xe]
>> [  202.347743]  xe_device_probe+0x1f5/0x2a0 [xe]
>> [  202.352127]  xe_pci_probe+0x28c/0x480 [xe]
>> [  202.356260]  pci_device_probe+0x9d/0x150
>> [  202.360164]  really_probe+0x19a/0x400
>> [  202.363809]  ? __pfx___driver_attach+0x10/0x10
>> [  202.368226]  __driver_probe_device+0x73/0x170
>> [  202.372558]  driver_probe_device+0x1a/0x90
>> [  202.376632]  __driver_attach+0xcd/0x1c0
>> [  202.380442]  bus_for_each_dev+0x72/0xc0
>> [  202.384253]  bus_add_driver+0x110/0x210
>> [  202.388063]  driver_register+0x50/0x100
>> [  202.391873]  ? __pfx_init_module+0x10/0x10 [xe]
>> [  202.396431]  do_one_initcall+0x55/0x260
>> [  202.400245]  ? rcu_is_watching+0xd/0x40
>> [  202.404058]  ? kmalloc_trace+0xa0/0xb0
>> [  202.407786]  do_init_module+0x45/0x1e0
>> [  202.411512]  __do_sys_finit_module+0xac/0x120
>> [  202.415838]  do_syscall_64+0x37/0x90
>> [  202.419397]  entry_SYSCALL_64_after_hwframe+0x72/0xdc
>> [  202.424409] RIP: 0033:0x7fd11291ea3d
>> [  202.427967] Code: 5b 41 5c c3 66 0f 1f 84 00 00 00 00 00 f3 0f 1e fa 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d c3 a3 0f 00 f7 d8 64 89 01 48
>> [  202.446530] RSP: 002b:00007ffffde11368 EFLAGS: 00000246 ORIG_RAX: 0000000000000139
>> [  202.454031] RAX: ffffffffffffffda RBX: 00005616a617f210 RCX: 00007fd11291ea3d
>> [  202.461106] RDX: 0000000000000000 RSI: 00005616a617fe60 RDI: 000000000000000e
>> [  202.468182] RBP: 0000000000040000 R08: 0000000000000000 R09: 0000000000000002
>> [  202.475250] R10: 000000000000000e R11: 0000000000000246 R12: 00005616a617fe60
>> [  202.482319] R13: 00005616a617f340 R14: 0000000000000000 R15: 00005616a6180650
>> [  202.489396]  </TASK>
>> 
>> Cc: intel-gfx@lists.freedesktop.org
>> Cc: intel-xe@lists.freedesktop.org
>> Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
>> Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
>> ---
>>  drivers/gpu/drm/i915/display/intel_display.c | 3 +++
>>  drivers/gpu/drm/i915/display/intel_dkl_phy.c | 6 ++++++
>>  drivers/gpu/drm/i915/display/intel_dkl_phy.h | 2 ++
>>  drivers/gpu/drm/i915/i915_driver.c           | 1 -
>>  4 files changed, 11 insertions(+), 1 deletion(-)
>> 
>> diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
>> index 24c96f388d521..cf3a3b3afdd13 100644
>> --- a/drivers/gpu/drm/i915/display/intel_display.c
>> +++ b/drivers/gpu/drm/i915/display/intel_display.c
>> @@ -83,6 +83,7 @@
>>  #include "intel_display_debugfs.h"
>>  #include "intel_display_power.h"
>>  #include "intel_display_types.h"
>> +#include "intel_dkl_phy.h"
>>  #include "intel_dmc.h"
>>  #include "intel_dp.h"
>>  #include "intel_dp_link_training.h"
>> @@ -7883,6 +7884,8 @@ static void intel_setup_outputs(struct drm_i915_private *dev_priv)
>>  	if (!HAS_DISPLAY(dev_priv))
>>  		return;
>>  
>> +	intel_dkl_phy_init(dev_priv);
>> +
>>  	if (IS_DG2(dev_priv)) {
>>  		intel_ddi_init(dev_priv, PORT_A);
>>  		intel_ddi_init(dev_priv, PORT_B);
>> diff --git a/drivers/gpu/drm/i915/display/intel_dkl_phy.c b/drivers/gpu/drm/i915/display/intel_dkl_phy.c
>> index 57cc3edba0163..5bce7b5b27bc7 100644
>> --- a/drivers/gpu/drm/i915/display/intel_dkl_phy.c
>> +++ b/drivers/gpu/drm/i915/display/intel_dkl_phy.c
>> @@ -104,3 +104,9 @@ intel_dkl_phy_posting_read(struct drm_i915_private *i915, struct intel_dkl_phy_r
>>  
>>  	spin_unlock(&i915->display.dkl.phy_lock);
>>  }
>> +
>> +void
>> +intel_dkl_phy_init(struct drm_i915_private *i915)
>> +{
>> +	spin_lock_init(&i915->display.dkl.phy_lock);
>> +}
>> diff --git a/drivers/gpu/drm/i915/display/intel_dkl_phy.h b/drivers/gpu/drm/i915/display/intel_dkl_phy.h
>> index 570ee36f9386f..615429b6392c5 100644
>> --- a/drivers/gpu/drm/i915/display/intel_dkl_phy.h
>> +++ b/drivers/gpu/drm/i915/display/intel_dkl_phy.h
>> @@ -20,5 +20,7 @@ void
>>  intel_dkl_phy_rmw(struct drm_i915_private *i915, struct intel_dkl_phy_reg reg, u32 clear, u32 set);
>>  void
>>  intel_dkl_phy_posting_read(struct drm_i915_private *i915, struct intel_dkl_phy_reg reg);
>> +void
>> +intel_dkl_phy_init(struct drm_i915_private *i915);
>>  
>>  #endif /* __INTEL_DKL_PHY_H__ */
>> diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c
>> index 066d79c2069c4..6fe1a97cc246d 100644
>> --- a/drivers/gpu/drm/i915/i915_driver.c
>> +++ b/drivers/gpu/drm/i915/i915_driver.c
>> @@ -224,7 +224,6 @@ static int i915_driver_early_probe(struct drm_i915_private *dev_priv)
>>  	mutex_init(&dev_priv->display.wm.wm_mutex);
>>  	mutex_init(&dev_priv->display.pps.mutex);
>>  	mutex_init(&dev_priv->display.hdcp.comp_mutex);
>> -	spin_lock_init(&dev_priv->display.dkl.phy_lock);
>>  
>>  	i915_memcpy_init_early(dev_priv);
>>  	intel_runtime_pm_init_early(&dev_priv->runtime_pm);
>> -- 
>> 2.40.0
Ville Syrjälä April 11, 2023, 9:12 a.m. UTC | #5
On Tue, Apr 11, 2023 at 11:51:33AM +0300, Jani Nikula wrote:
> On Tue, 11 Apr 2023, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> > On Mon, Apr 10, 2023 at 11:32:14AM -0700, José Roberto de Souza wrote:
> >> Start to move the initialization of some lock from
> >> i915_driver_early_probe().
> >> No dkl function is called prior to intel_setup_outputs(), so this is
> >> a good place to initialize it.
> >
> > I disagree. We don't want to sprinke these all over the place.
> 
> I'm thinking if only foo.c uses a lock, foo.c should initialize it, not
> someone else.

Perhaps. But I think there should be some consistent place in the higher
level code where all such things get called instead of dropping each one
individually into some random spot in the overlall display init flow.
Jani Nikula April 11, 2023, 9:14 a.m. UTC | #6
On Tue, 11 Apr 2023, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> On Tue, Apr 11, 2023 at 11:51:33AM +0300, Jani Nikula wrote:
>> On Tue, 11 Apr 2023, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
>> > On Mon, Apr 10, 2023 at 11:32:14AM -0700, José Roberto de Souza wrote:
>> >> Start to move the initialization of some lock from
>> >> i915_driver_early_probe().
>> >> No dkl function is called prior to intel_setup_outputs(), so this is
>> >> a good place to initialize it.
>> >
>> > I disagree. We don't want to sprinke these all over the place.
>> 
>> I'm thinking if only foo.c uses a lock, foo.c should initialize it, not
>> someone else.
>
> Perhaps. But I think there should be some consistent place in the higher
> level code where all such things get called instead of dropping each one
> individually into some random spot in the overlall display init flow.

Agreed.
Souza, Jose April 11, 2023, 1:24 p.m. UTC | #7
On Tue, 2023-04-11 at 11:33 +0300, Jani Nikula wrote:
> On Tue, 11 Apr 2023, Jani Nikula <jani.nikula@linux.intel.com> wrote:
> > On Mon, 10 Apr 2023, José Roberto de Souza <jose.souza@intel.com> wrote:
> > > Start to move the initialization of some lock from
> > > i915_driver_early_probe().
> > 
> > Please send this as standalone patch to i915. It won't get merged to
> > i915 as part of series only parts of which apply to i915.
> 
> Not to mention drm-xe-next is *not* the path to upstream i915
> changes. Each i915 merged there is a potential problem in upstreaming
> xe.

Already sent it https://patchwork.freedesktop.org/series/116272/

> 
> BR,
> Jani.
> 
>
Rodrigo Vivi April 11, 2023, 2:51 p.m. UTC | #8
On Tue, Apr 11, 2023 at 12:14:36PM +0300, Jani Nikula wrote:
> On Tue, 11 Apr 2023, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> > On Tue, Apr 11, 2023 at 11:51:33AM +0300, Jani Nikula wrote:
> >> On Tue, 11 Apr 2023, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> >> > On Mon, Apr 10, 2023 at 11:32:14AM -0700, José Roberto de Souza wrote:
> >> >> Start to move the initialization of some lock from
> >> >> i915_driver_early_probe().
> >> >> No dkl function is called prior to intel_setup_outputs(), so this is
> >> >> a good place to initialize it.
> >> >
> >> > I disagree. We don't want to sprinke these all over the place.
> >> 
> >> I'm thinking if only foo.c uses a lock, foo.c should initialize it, not
> >> someone else.
> >
> > Perhaps. But I think there should be some consistent place in the higher
> > level code where all such things get called instead of dropping each one
> > individually into some random spot in the overlall display init flow.
> 
> Agreed.

Ops, I just saw this now, right after I cc'ed you in the other thread.

So, probably good to hold this and do the entire refactor together of all
those locks initialization so we find this common consistent place apparently...

> 
> -- 
> Jani Nikula, Intel Open Source Graphics Center
Lucas De Marchi April 11, 2023, 7:59 p.m. UTC | #9
On Tue, Apr 11, 2023 at 10:51:04AM -0400, Rodrigo Vivi wrote:
>On Tue, Apr 11, 2023 at 12:14:36PM +0300, Jani Nikula wrote:
>> On Tue, 11 Apr 2023, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
>> > On Tue, Apr 11, 2023 at 11:51:33AM +0300, Jani Nikula wrote:
>> >> On Tue, 11 Apr 2023, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
>> >> > On Mon, Apr 10, 2023 at 11:32:14AM -0700, José Roberto de Souza wrote:
>> >> >> Start to move the initialization of some lock from
>> >> >> i915_driver_early_probe().
>> >> >> No dkl function is called prior to intel_setup_outputs(), so this is
>> >> >> a good place to initialize it.
>> >> >
>> >> > I disagree. We don't want to sprinke these all over the place.
>> >>
>> >> I'm thinking if only foo.c uses a lock, foo.c should initialize it, not
>> >> someone else.
>> >
>> > Perhaps. But I think there should be some consistent place in the higher
>> > level code where all such things get called instead of dropping each one
>> > individually into some random spot in the overlall display init flow.
>>
>> Agreed.
>
>Ops, I just saw this now, right after I cc'ed you in the other thread.
>
>So, probably good to hold this and do the entire refactor together of all
>those locks initialization so we find this common consistent place apparently...

"internal" sw initialization of display-related stuff. It doesn't belong in
i915_driver_early_probe(), it makes harder to follow the sequence if we sprinkle
them around, like here in intel_setup_outputs.

But I don't see why this couldn't be done in a higher level "sw
initialization of display-related stuff".  Should we add an equivalent
of i915_driver_early_probe(), e.g.  intel_display_early_probe()[1],  and
move the display-related things from i915_driver_early_probe()?

In that case, from xe we would call this function rather than
initializing these fields in xe_display_create()

Lucas De Marchi

[1] I don't like the name, but it follows what is already there

>
>>
>> --
>> Jani Nikula, Intel Open Source Graphics Center
Souza, Jose April 11, 2023, 8:07 p.m. UTC | #10
On Tue, 2023-04-11 at 12:59 -0700, Lucas De Marchi wrote:
> On Tue, Apr 11, 2023 at 10:51:04AM -0400, Rodrigo Vivi wrote:
> > On Tue, Apr 11, 2023 at 12:14:36PM +0300, Jani Nikula wrote:
> > > On Tue, 11 Apr 2023, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> > > > On Tue, Apr 11, 2023 at 11:51:33AM +0300, Jani Nikula wrote:
> > > > > On Tue, 11 Apr 2023, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> > > > > > On Mon, Apr 10, 2023 at 11:32:14AM -0700, José Roberto de Souza wrote:
> > > > > > > Start to move the initialization of some lock from
> > > > > > > i915_driver_early_probe().
> > > > > > > No dkl function is called prior to intel_setup_outputs(), so this is
> > > > > > > a good place to initialize it.
> > > > > > 
> > > > > > I disagree. We don't want to sprinke these all over the place.
> > > > > 
> > > > > I'm thinking if only foo.c uses a lock, foo.c should initialize it, not
> > > > > someone else.
> > > > 
> > > > Perhaps. But I think there should be some consistent place in the higher
> > > > level code where all such things get called instead of dropping each one
> > > > individually into some random spot in the overlall display init flow.
> > > 
> > > Agreed.
> > 
> > Ops, I just saw this now, right after I cc'ed you in the other thread.
> > 
> > So, probably good to hold this and do the entire refactor together of all
> > those locks initialization so we find this common consistent place apparently...
> 
> "internal" sw initialization of display-related stuff. It doesn't belong in
> i915_driver_early_probe(), it makes harder to follow the sequence if we sprinkle
> them around, like here in intel_setup_outputs.
> 
> But I don't see why this couldn't be done in a higher level "sw
> initialization of display-related stuff".  Should we add an equivalent
> of i915_driver_early_probe(), e.g.  intel_display_early_probe()[1],  and
> move the display-related things from i915_driver_early_probe()?
> 
> In that case, from xe we would call this function rather than
> initializing these fields in xe_display_create()

Sent another version, added intel_display_locks_init() that is called in the beginning of intel_modeset_init_noirq().
https://patchwork.freedesktop.org/series/116326/

If this is accepted we can then move the other display locks from i915_driver_early_probe().

> 
> Lucas De Marchi
> 
> [1] I don't like the name, but it follows what is already there
> 
> > 
> > > 
> > > --
> > > Jani Nikula, Intel Open Source Graphics Center
Lucas De Marchi April 11, 2023, 9:20 p.m. UTC | #11
On Tue, Apr 11, 2023 at 08:07:12PM +0000, Jose Souza wrote:
>On Tue, 2023-04-11 at 12:59 -0700, Lucas De Marchi wrote:
>> On Tue, Apr 11, 2023 at 10:51:04AM -0400, Rodrigo Vivi wrote:
>> > On Tue, Apr 11, 2023 at 12:14:36PM +0300, Jani Nikula wrote:
>> > > On Tue, 11 Apr 2023, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
>> > > > On Tue, Apr 11, 2023 at 11:51:33AM +0300, Jani Nikula wrote:
>> > > > > On Tue, 11 Apr 2023, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
>> > > > > > On Mon, Apr 10, 2023 at 11:32:14AM -0700, José Roberto de Souza wrote:
>> > > > > > > Start to move the initialization of some lock from
>> > > > > > > i915_driver_early_probe().
>> > > > > > > No dkl function is called prior to intel_setup_outputs(), so this is
>> > > > > > > a good place to initialize it.
>> > > > > >
>> > > > > > I disagree. We don't want to sprinke these all over the place.
>> > > > >
>> > > > > I'm thinking if only foo.c uses a lock, foo.c should initialize it, not
>> > > > > someone else.
>> > > >
>> > > > Perhaps. But I think there should be some consistent place in the higher
>> > > > level code where all such things get called instead of dropping each one
>> > > > individually into some random spot in the overlall display init flow.
>> > >
>> > > Agreed.
>> >
>> > Ops, I just saw this now, right after I cc'ed you in the other thread.
>> >
>> > So, probably good to hold this and do the entire refactor together of all
>> > those locks initialization so we find this common consistent place apparently...
>>
>> "internal" sw initialization of display-related stuff. It doesn't belong in
>> i915_driver_early_probe(), it makes harder to follow the sequence if we sprinkle
>> them around, like here in intel_setup_outputs.
>>
>> But I don't see why this couldn't be done in a higher level "sw
>> initialization of display-related stuff".  Should we add an equivalent
>> of i915_driver_early_probe(), e.g.  intel_display_early_probe()[1],  and
>> move the display-related things from i915_driver_early_probe()?
>>
>> In that case, from xe we would call this function rather than
>> initializing these fields in xe_display_create()
>
>Sent another version, added intel_display_locks_init() that is called in the beginning of intel_modeset_init_noirq().
>https://patchwork.freedesktop.org/series/116326/

modeset? why? That is after we are already probing the hw....
and what does that have to do with modeset?

Lucas De Marchi

>
>If this is accepted we can then move the other display locks from i915_driver_early_probe().
>
>>
>> Lucas De Marchi
>>
>> [1] I don't like the name, but it follows what is already there
>>
>> >
>> > >
>> > > --
>> > > Jani Nikula, Intel Open Source Graphics Center
>
Souza, Jose April 12, 2023, 5:13 p.m. UTC | #12
On Tue, 2023-04-11 at 14:20 -0700, Lucas De Marchi wrote:
> On Tue, Apr 11, 2023 at 08:07:12PM +0000, Jose Souza wrote:
> > On Tue, 2023-04-11 at 12:59 -0700, Lucas De Marchi wrote:
> > > On Tue, Apr 11, 2023 at 10:51:04AM -0400, Rodrigo Vivi wrote:
> > > > On Tue, Apr 11, 2023 at 12:14:36PM +0300, Jani Nikula wrote:
> > > > > On Tue, 11 Apr 2023, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> > > > > > On Tue, Apr 11, 2023 at 11:51:33AM +0300, Jani Nikula wrote:
> > > > > > > On Tue, 11 Apr 2023, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
> > > > > > > > On Mon, Apr 10, 2023 at 11:32:14AM -0700, José Roberto de Souza wrote:
> > > > > > > > > Start to move the initialization of some lock from
> > > > > > > > > i915_driver_early_probe().
> > > > > > > > > No dkl function is called prior to intel_setup_outputs(), so this is
> > > > > > > > > a good place to initialize it.
> > > > > > > > 
> > > > > > > > I disagree. We don't want to sprinke these all over the place.
> > > > > > > 
> > > > > > > I'm thinking if only foo.c uses a lock, foo.c should initialize it, not
> > > > > > > someone else.
> > > > > > 
> > > > > > Perhaps. But I think there should be some consistent place in the higher
> > > > > > level code where all such things get called instead of dropping each one
> > > > > > individually into some random spot in the overlall display init flow.
> > > > > 
> > > > > Agreed.
> > > > 
> > > > Ops, I just saw this now, right after I cc'ed you in the other thread.
> > > > 
> > > > So, probably good to hold this and do the entire refactor together of all
> > > > those locks initialization so we find this common consistent place apparently...
> > > 
> > > "internal" sw initialization of display-related stuff. It doesn't belong in
> > > i915_driver_early_probe(), it makes harder to follow the sequence if we sprinkle
> > > them around, like here in intel_setup_outputs.
> > > 
> > > But I don't see why this couldn't be done in a higher level "sw
> > > initialization of display-related stuff".  Should we add an equivalent
> > > of i915_driver_early_probe(), e.g.  intel_display_early_probe()[1],  and
> > > move the display-related things from i915_driver_early_probe()?
> > > 
> > > In that case, from xe we would call this function rather than
> > > initializing these fields in xe_display_create()
> > 
> > Sent another version, added intel_display_locks_init() that is called in the beginning of intel_modeset_init_noirq().
> > https://patchwork.freedesktop.org/series/116326/
> 
> modeset? why? That is after we are already probing the hw....

That called during probe, called from i915_driver_probe().

> and what does that have to do with modeset?

The name is misleading but intel_modeset_init_noirq() is the first generic display initialization function called.
There is other display functions called before it but they are very specific(intel_dram_detect(), intel_bw_init_hw() and
intel_device_info_runtime_init()).

> 
> Lucas De Marchi
> 
> > 
> > If this is accepted we can then move the other display locks from i915_driver_early_probe().
> > 
> > > 
> > > Lucas De Marchi
> > > 
> > > [1] I don't like the name, but it follows what is already there
> > > 
> > > > 
> > > > > 
> > > > > --
> > > > > Jani Nikula, Intel Open Source Graphics Center
> >
Jani Nikula April 13, 2023, 8:22 a.m. UTC | #13
On Wed, 12 Apr 2023, "Souza, Jose" <jose.souza@intel.com> wrote:
> On Tue, 2023-04-11 at 14:20 -0700, Lucas De Marchi wrote:
>> On Tue, Apr 11, 2023 at 08:07:12PM +0000, Jose Souza wrote:
>> > On Tue, 2023-04-11 at 12:59 -0700, Lucas De Marchi wrote:
>> > > On Tue, Apr 11, 2023 at 10:51:04AM -0400, Rodrigo Vivi wrote:
>> > > > On Tue, Apr 11, 2023 at 12:14:36PM +0300, Jani Nikula wrote:
>> > > > > On Tue, 11 Apr 2023, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
>> > > > > > On Tue, Apr 11, 2023 at 11:51:33AM +0300, Jani Nikula wrote:
>> > > > > > > On Tue, 11 Apr 2023, Ville Syrjälä <ville.syrjala@linux.intel.com> wrote:
>> > > > > > > > On Mon, Apr 10, 2023 at 11:32:14AM -0700, José Roberto de Souza wrote:
>> > > > > > > > > Start to move the initialization of some lock from
>> > > > > > > > > i915_driver_early_probe().
>> > > > > > > > > No dkl function is called prior to intel_setup_outputs(), so this is
>> > > > > > > > > a good place to initialize it.
>> > > > > > > > 
>> > > > > > > > I disagree. We don't want to sprinke these all over the place.
>> > > > > > > 
>> > > > > > > I'm thinking if only foo.c uses a lock, foo.c should initialize it, not
>> > > > > > > someone else.
>> > > > > > 
>> > > > > > Perhaps. But I think there should be some consistent place in the higher
>> > > > > > level code where all such things get called instead of dropping each one
>> > > > > > individually into some random spot in the overlall display init flow.
>> > > > > 
>> > > > > Agreed.
>> > > > 
>> > > > Ops, I just saw this now, right after I cc'ed you in the other thread.
>> > > > 
>> > > > So, probably good to hold this and do the entire refactor together of all
>> > > > those locks initialization so we find this common consistent place apparently...
>> > > 
>> > > "internal" sw initialization of display-related stuff. It doesn't belong in
>> > > i915_driver_early_probe(), it makes harder to follow the sequence if we sprinkle
>> > > them around, like here in intel_setup_outputs.
>> > > 
>> > > But I don't see why this couldn't be done in a higher level "sw
>> > > initialization of display-related stuff".  Should we add an equivalent
>> > > of i915_driver_early_probe(), e.g.  intel_display_early_probe()[1],  and
>> > > move the display-related things from i915_driver_early_probe()?
>> > > 
>> > > In that case, from xe we would call this function rather than
>> > > initializing these fields in xe_display_create()
>> > 
>> > Sent another version, added intel_display_locks_init() that is called in the beginning of intel_modeset_init_noirq().
>> > https://patchwork.freedesktop.org/series/116326/
>> 
>> modeset? why? That is after we are already probing the hw....
>
> That called during probe, called from i915_driver_probe().
>
>> and what does that have to do with modeset?
>
> The name is misleading but intel_modeset_init_noirq() is the first generic display initialization function called.
> There is other display functions called before it but they are very specific(intel_dram_detect(), intel_bw_init_hw() and
> intel_device_info_runtime_init()).

See [1].

BR,
Jani.


[1] https://lore.kernel.org/r/87ile1cjh8.fsf@intel.com

>
>> 
>> Lucas De Marchi
>> 
>> > 
>> > If this is accepted we can then move the other display locks from i915_driver_early_probe().
>> > 
>> > > 
>> > > Lucas De Marchi
>> > > 
>> > > [1] I don't like the name, but it follows what is already there
>> > > 
>> > > > 
>> > > > > 
>> > > > > --
>> > > > > Jani Nikula, Intel Open Source Graphics Center
>> > 
>
Jani Nikula April 13, 2023, 9:49 a.m. UTC | #14
On Thu, 13 Apr 2023, Jani Nikula <jani.nikula@linux.intel.com> wrote:
> On Wed, 12 Apr 2023, "Souza, Jose" <jose.souza@intel.com> wrote:
>> The name is misleading but intel_modeset_init_noirq() is the first generic display initialization function called.
>> There is other display functions called before it but they are very specific(intel_dram_detect(), intel_bw_init_hw() and
>> intel_device_info_runtime_init()).
>
> See [1].
>
> BR,
> Jani.
>
>
> [1] https://lore.kernel.org/r/87ile1cjh8.fsf@intel.com

All of this is cleaned up in
https://patchwork.freedesktop.org/series/116431/

BR,
Jani.
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/display/intel_display.c b/drivers/gpu/drm/i915/display/intel_display.c
index 24c96f388d521..cf3a3b3afdd13 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -83,6 +83,7 @@ 
 #include "intel_display_debugfs.h"
 #include "intel_display_power.h"
 #include "intel_display_types.h"
+#include "intel_dkl_phy.h"
 #include "intel_dmc.h"
 #include "intel_dp.h"
 #include "intel_dp_link_training.h"
@@ -7883,6 +7884,8 @@  static void intel_setup_outputs(struct drm_i915_private *dev_priv)
 	if (!HAS_DISPLAY(dev_priv))
 		return;
 
+	intel_dkl_phy_init(dev_priv);
+
 	if (IS_DG2(dev_priv)) {
 		intel_ddi_init(dev_priv, PORT_A);
 		intel_ddi_init(dev_priv, PORT_B);
diff --git a/drivers/gpu/drm/i915/display/intel_dkl_phy.c b/drivers/gpu/drm/i915/display/intel_dkl_phy.c
index 57cc3edba0163..5bce7b5b27bc7 100644
--- a/drivers/gpu/drm/i915/display/intel_dkl_phy.c
+++ b/drivers/gpu/drm/i915/display/intel_dkl_phy.c
@@ -104,3 +104,9 @@  intel_dkl_phy_posting_read(struct drm_i915_private *i915, struct intel_dkl_phy_r
 
 	spin_unlock(&i915->display.dkl.phy_lock);
 }
+
+void
+intel_dkl_phy_init(struct drm_i915_private *i915)
+{
+	spin_lock_init(&i915->display.dkl.phy_lock);
+}
diff --git a/drivers/gpu/drm/i915/display/intel_dkl_phy.h b/drivers/gpu/drm/i915/display/intel_dkl_phy.h
index 570ee36f9386f..615429b6392c5 100644
--- a/drivers/gpu/drm/i915/display/intel_dkl_phy.h
+++ b/drivers/gpu/drm/i915/display/intel_dkl_phy.h
@@ -20,5 +20,7 @@  void
 intel_dkl_phy_rmw(struct drm_i915_private *i915, struct intel_dkl_phy_reg reg, u32 clear, u32 set);
 void
 intel_dkl_phy_posting_read(struct drm_i915_private *i915, struct intel_dkl_phy_reg reg);
+void
+intel_dkl_phy_init(struct drm_i915_private *i915);
 
 #endif /* __INTEL_DKL_PHY_H__ */
diff --git a/drivers/gpu/drm/i915/i915_driver.c b/drivers/gpu/drm/i915/i915_driver.c
index 066d79c2069c4..6fe1a97cc246d 100644
--- a/drivers/gpu/drm/i915/i915_driver.c
+++ b/drivers/gpu/drm/i915/i915_driver.c
@@ -224,7 +224,6 @@  static int i915_driver_early_probe(struct drm_i915_private *dev_priv)
 	mutex_init(&dev_priv->display.wm.wm_mutex);
 	mutex_init(&dev_priv->display.pps.mutex);
 	mutex_init(&dev_priv->display.hdcp.comp_mutex);
-	spin_lock_init(&dev_priv->display.dkl.phy_lock);
 
 	i915_memcpy_init_early(dev_priv);
 	intel_runtime_pm_init_early(&dev_priv->runtime_pm);