diff mbox series

[1/2] drm/i915/pps: added get_pps_idx() hook as part of pps_get_register() cleanup

Message ID 20220906071457.28881-1-animesh.manna@intel.com (mailing list archive)
State New, archived
Headers show
Series [1/2] drm/i915/pps: added get_pps_idx() hook as part of pps_get_register() cleanup | expand

Commit Message

Animesh Manna Sept. 6, 2022, 7:14 a.m. UTC
Simplified pps_get_register() which use get_pps_idx() hook to derive the
pps instance and get_pps_idx() will be initialized at pps_init().

Signed-off-by: Animesh Manna <animesh.manna@intel.com>
---
 drivers/gpu/drm/i915/display/intel_display_types.h |  1 +
 drivers/gpu/drm/i915/display/intel_pps.c           | 12 ++++++------
 2 files changed, 7 insertions(+), 6 deletions(-)

Comments

Jani Nikula Sept. 6, 2022, 7:39 a.m. UTC | #1
On Tue, 06 Sep 2022, Animesh Manna <animesh.manna@intel.com> wrote:
> Simplified pps_get_register() which use get_pps_idx() hook to derive the
> pps instance and get_pps_idx() will be initialized at pps_init().

Please use the imperative mood, i.e. "add" in subject, "simplify" here.

Reviewed-by: Jani Nikula <jani.nikula@intel.com>

>
> Signed-off-by: Animesh Manna <animesh.manna@intel.com>
> ---
>  drivers/gpu/drm/i915/display/intel_display_types.h |  1 +
>  drivers/gpu/drm/i915/display/intel_pps.c           | 12 ++++++------
>  2 files changed, 7 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
> index 0da9b208d56e..b78b29951241 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_types.h
> +++ b/drivers/gpu/drm/i915/display/intel_display_types.h
> @@ -1693,6 +1693,7 @@ struct intel_dp {
>  	u8 (*preemph_max)(struct intel_dp *intel_dp);
>  	u8 (*voltage_max)(struct intel_dp *intel_dp,
>  			  const struct intel_crtc_state *crtc_state);
> +	int (*get_pps_idx)(struct intel_dp *intel_dp);
>  
>  	/* Displayport compliance testing */
>  	struct intel_dp_compliance compliance;
> diff --git a/drivers/gpu/drm/i915/display/intel_pps.c b/drivers/gpu/drm/i915/display/intel_pps.c
> index 21944f5bf3a8..4e770218e29f 100644
> --- a/drivers/gpu/drm/i915/display/intel_pps.c
> +++ b/drivers/gpu/drm/i915/display/intel_pps.c
> @@ -362,15 +362,10 @@ static void intel_pps_get_registers(struct intel_dp *intel_dp,
>  				    struct pps_registers *regs)
>  {
>  	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
> -	int pps_idx = 0;
> +	int pps_idx = intel_dp->get_pps_idx(intel_dp);
>  
>  	memset(regs, 0, sizeof(*regs));
>  
> -	if (IS_GEMINILAKE(dev_priv) || IS_BROXTON(dev_priv))
> -		pps_idx = bxt_power_sequencer_idx(intel_dp);
> -	else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
> -		pps_idx = vlv_power_sequencer_pipe(intel_dp);
> -
>  	regs->pp_ctrl = PP_CONTROL(pps_idx);
>  	regs->pp_stat = PP_STATUS(pps_idx);
>  	regs->pp_on = PP_ON_DELAYS(pps_idx);
> @@ -1432,6 +1427,11 @@ void intel_pps_init(struct intel_dp *intel_dp)
>  	intel_dp->pps.initializing = true;
>  	INIT_DELAYED_WORK(&intel_dp->pps.panel_vdd_work, edp_panel_vdd_work);
>  
> +	if (IS_GEMINILAKE(i915) || IS_BROXTON(i915))
> +		intel_dp->get_pps_idx = bxt_power_sequencer_idx;
> +	else if (IS_VALLEYVIEW(i915) || IS_CHERRYVIEW(i915))
> +		intel_dp->get_pps_idx = vlv_power_sequencer_pipe;
> +
>  	pps_init_timestamps(intel_dp);
>  
>  	with_intel_pps_lock(intel_dp, wakeref) {
Yujie Liu Sept. 21, 2022, 8:02 a.m. UTC | #2
Greeting,

FYI, we noticed the following commit (built with gcc-11):

commit: 9049e3541669439ad54fd8eea147a1447a648af6 ("[Intel-gfx] [PATCH 1/2] drm/i915/pps: added get_pps_idx() hook as part of pps_get_register() cleanup")
url: https://github.com/intel-lab-lkp/linux/commits/Animesh-Manna/drm-i915-pps-added-get_pps_idx-hook-as-part-of-pps_get_register-cleanup/20220906-152024
base: git://anongit.freedesktop.org/drm/drm-tip drm-tip
patch link: https://lore.kernel.org/intel-gfx/20220906071457.28881-1-animesh.manna@intel.com

in testcase: phoronix-test-suite
version: 
with following parameters:

	need_x: true
	test: jxrendermark-1.2.4
	option_a: 12pt Text Grayscale
	option_b: 1024x1024
	cpufreq_governor: performance

test-description: The Phoronix Test Suite is the most comprehensive testing and benchmarking platform available that provides an extensible framework for which new tests can be easily added.
test-url: http://www.phoronix-test-suite.com/


on test machine: 12 threads 1 sockets Intel(R) Core(TM) i7-8700 CPU @ 3.20GHz (Coffee Lake) with 32G memory

caused below changes (please refer to attached dmesg/kmsg for entire log/backtrace):


If you fix the issue, kindly add following tag
| Reported-by: kernel test robot <yujie.liu@intel.com>
| Link: https://lore.kernel.org/r/202209211544.660c8485-yujie.liu@intel.com


[   25.085807][  T263] BUG: kernel NULL pointer dereference, address: 0000000000000000
[   25.093813][  T124] i915 0000:00:02.0: [drm] Failed to load DMC firmware i915/kbl_dmc_ver1_04.bin. Disabling runtime power management.
[   25.101389][  T263] #PF: supervisor instruction fetch in kernel mode
[   25.101390][  T263] #PF: error_code(0x0010) - not-present page
[   25.101391][  T263] PGD 0
[   25.113339][  T124] i915 0000:00:02.0: [drm] DMC firmware homepage: https://git.kernel.org/pub/scm/linux/kernel/git/firmware/linux-firmware.git/tree/i915
[   25.119622][  T263] P4D 0
[   25.119623][  T263] Oops: 0010 [#1] SMP PTI
[   25.148480][  T263] CPU: 6 PID: 263 Comm: systemd-udevd Not tainted 6.0.0-rc4-00599-g9049e3541669 #1
[   25.157520][  T263] Hardware name: Dell Inc. OptiPlex 7060/0C96W1, BIOS 1.4.2 06/11/2019
[   25.165518][  T263] RIP: 0010:0x0
[ 25.168806][ T263] Code: Unable to access opcode bytes at RIP 0xffffffffffffffd6.
[   25.176294][  T263] RSP: 0018:ffffc90000db3958 EFLAGS: 00010246
[   25.182148][  T263] RAX: 0000000000000000 RBX: ffffc90000db397c RCX: 0000000000000002
[   25.189892][  T263] RDX: ffff888879125100 RSI: ffffc90000db397c RDI: ffff888874292170
[   25.197638][  T263] RBP: ffff8888767b0000 R08: 0000000000000000 R09: ffffffff82858240
[   25.205378][  T263] R10: ffffffffffffffff R11: ffff8881010d3fcd R12: ffff888874292170
[   25.213120][  T263] R13: ffff8888767b0000 R14: ffff888874292170 R15: 0000000000000000
[   25.220862][  T263] FS:  00007f51727748c0(0000) GS:ffff888853d80000(0000) knlGS:0000000000000000
[   25.229550][  T263] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   25.235921][  T263] CR2: ffffffffffffffd6 CR3: 0000000105a1a001 CR4: 00000000003706e0
[   25.243667][  T263] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000
[   25.251444][  T263] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400
[   25.259293][  T263] Call Trace:
[   25.262404][  T263]  <TASK>
[ 25.265171][ T263] intel_pps_get_registers (drivers/gpu/drm/i915/display/intel_pps.c:365) i915
[ 25.270930][ T263] intel_pps_readout_hw_state (drivers/gpu/drm/i915/display/intel_pps.c:1110) i915
[ 25.277023][ T263] ? intel_display_power_grab_async_put_ref (arch/x86/include/asm/bitops.h:240 include/asm-generic/bitops/instrumented-non-atomic.h:142 drivers/gpu/drm/i915/display/intel_display_power.c:454) i915
[ 25.284319][ T263] pps_init_delays (drivers/gpu/drm/i915/display/intel_pps.c:1180 drivers/gpu/drm/i915/display/intel_pps.c:1251) i915
[ 25.289464][ T263] intel_pps_init (drivers/gpu/drm/i915/display/intel_pps.c:1442 (discriminator 2)) i915
[ 25.294526][ T263] intel_edp_init_connector (drivers/gpu/drm/i915/display/intel_dp.c:5228) i915
[ 25.300443][ T263] ? pm_qos_update_target (arch/x86/include/asm/jump_label.h:27 include/linux/jump_label.h:207 include/trace/events/power.h:454 kernel/power/qos.c:137) 
[ 25.305531][ T263] intel_dp_init_connector (drivers/gpu/drm/i915/display/intel_dp.c:5416) i915
[ 25.311453][ T263] intel_ddi_init (drivers/gpu/drm/i915/display/intel_ddi.c:3844 drivers/gpu/drm/i915/display/intel_ddi.c:4500) i915
[ 25.316606][ T263] intel_setup_outputs (drivers/gpu/drm/i915/display/intel_display.c:7998) i915
[ 25.322184][ T263] intel_modeset_init_nogem (drivers/gpu/drm/i915/display/intel_display.c:8782) i915
[ 25.328199][ T263] i915_driver_probe (drivers/gpu/drm/i915/i915_driver.c:931) i915
[ 25.333594][ T263] ? i915_pci_probe (drivers/gpu/drm/i915/i915_pci.c:1318) i915
[ 25.338823][ T263] local_pci_probe (drivers/pci/pci-driver.c:324) 
[ 25.343236][ T263] pci_call_probe (drivers/pci/pci-driver.c:392) 
[ 25.347639][ T263] ? kernfs_create_link (fs/kernfs/symlink.c:48) 
[ 25.352470][ T263] pci_device_probe (drivers/pci/pci-driver.c:461) 
[ 25.357041][ T263] really_probe (drivers/base/dd.c:560 drivers/base/dd.c:639) 
[ 25.361271][ T263] ? pm_runtime_barrier (arch/x86/include/asm/paravirt.h:596 arch/x86/include/asm/qspinlock.h:57 include/linux/spinlock.h:202 include/linux/spinlock_api_smp.h:158 include/linux/spinlock.h:399 drivers/base/power/runtime.c:1410) 
[ 25.366100][ T263] __driver_probe_device (drivers/base/dd.c:778) 
[ 25.371102][ T263] driver_probe_device (drivers/base/dd.c:808) 
[ 25.375848][ T263] __driver_attach (drivers/base/dd.c:1191) 
[ 25.380332][ T263] ? __device_attach_driver (drivers/base/dd.c:1135) 
[ 25.385674][ T263] ? __device_attach_driver (drivers/base/dd.c:1135) 
[ 25.391019][ T263] bus_for_each_dev (drivers/base/bus.c:301) 
[ 25.395504][ T263] bus_add_driver (drivers/base/bus.c:618) 
[ 25.399991][ T263] driver_register (drivers/base/driver.c:240) 
[ 25.404478][ T263] i915_init (drivers/gpu/drm/i915/i915_driver.c:1788) i915
[   25.409012][  T263]  ? 0xffffffffa06c4000
[ 25.412980][ T263] do_one_initcall (init/main.c:1296) 
[ 25.417463][ T263] ? __cond_resched (kernel/sched/core.c:8317) 
[ 25.421946][ T263] ? kmem_cache_alloc_trace (mm/slub.c:3245 mm/slub.c:3251 mm/slub.c:3282) 
[ 25.427291][ T263] do_init_module (kernel/module/main.c:2457) 
[ 25.431694][ T263] __do_sys_finit_module (kernel/module/main.c:2956) 
[ 25.436692][ T263] do_syscall_64 (arch/x86/entry/common.c:50 arch/x86/entry/common.c:80) 
[ 25.440921][ T263] entry_SYSCALL_64_after_hwframe (arch/x86/entry/entry_64.S:120) 
[   25.446609][  T263] RIP: 0033:0x7f51715ee229
[ 25.450837][ T263] Code: 00 f3 c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 40 00 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 3f 4c 2b 00 f7 d8 64 89 01 48
All code
========
   0:	00 f3                	add    %dh,%bl
   2:	c3                   	retq   
   3:	66 2e 0f 1f 84 00 00 	nopw   %cs:0x0(%rax,%rax,1)
   a:	00 00 00 
   d:	0f 1f 40 00          	nopl   0x0(%rax)
  11:	48 89 f8             	mov    %rdi,%rax
  14:	48 89 f7             	mov    %rsi,%rdi
  17:	48 89 d6             	mov    %rdx,%rsi
  1a:	48 89 ca             	mov    %rcx,%rdx
  1d:	4d 89 c2             	mov    %r8,%r10
  20:	4d 89 c8             	mov    %r9,%r8
  23:	4c 8b 4c 24 08       	mov    0x8(%rsp),%r9
  28:	0f 05                	syscall 
  2a:*	48 3d 01 f0 ff ff    	cmp    $0xfffffffffffff001,%rax		<-- trapping instruction
  30:	73 01                	jae    0x33
  32:	c3                   	retq   
  33:	48 8b 0d 3f 4c 2b 00 	mov    0x2b4c3f(%rip),%rcx        # 0x2b4c79
  3a:	f7 d8                	neg    %eax
  3c:	64 89 01             	mov    %eax,%fs:(%rcx)
  3f:	48                   	rex.W

Code starting with the faulting instruction
===========================================
   0:	48 3d 01 f0 ff ff    	cmp    $0xfffffffffffff001,%rax
   6:	73 01                	jae    0x9
   8:	c3                   	retq   
   9:	48 8b 0d 3f 4c 2b 00 	mov    0x2b4c3f(%rip),%rcx        # 0x2b4c4f
  10:	f7 d8                	neg    %eax
  12:	64 89 01             	mov    %eax,%fs:(%rcx)
  15:	48                   	rex.W
[   25.470070][  T263] RSP: 002b:00007fffa9a6cac8 EFLAGS: 00000246 ORIG_RAX: 0000000000000139
[   25.478241][  T263] RAX: ffffffffffffffda RBX: 0000555d50475120 RCX: 00007f51715ee229
[   25.485984][  T263] RDX: 0000000000000000 RSI: 00007f5171f07265 RDI: 0000000000000017
[   25.493728][  T263] RBP: 00007f5171f07265 R08: 0000000000000000 R09: 00007fffa9a6d040
[   25.501470][  T263] R10: 0000000000000017 R11: 0000000000000246 R12: 0000000000000000
[   25.509212][  T263] R13: 0000555d5046b550 R14: 0000000000020000 R15: 0000555d4f1c2cbc
[   25.516958][  T263]  </TASK>
[   25.519811][  T263] Modules linked in: i915(+) drm_buddy intel_gtt drm_display_helper sd_mod t10_pi crc64_rocksoft_generic ttm crc64_rocksoft crc64 intel_rapl_msr intel_rapl_common x86_pkg_temp_thermal intel_powerclamp coretemp kvm_intel kvm irqbypass crct10dif_pclmul drm_kms_helper crc32_pclmul crc32c_intel ghash_clmulni_intel mei_wdt intel_wmi_thunderbolt wmi_bmof syscopyarea sysfillrect ahci sysimgblt rapl fb_sys_fops intel_cstate libahci mei_me intel_uncore i2c_designware_platform libata drm mei i2c_designware_core idma64 intel_pch_thermal wmi video intel_pmc_core acpi_pad
[   25.570311][  T263] CR2: 0000000000000000
[   25.574287][  T263] ---[ end trace 0000000000000000 ]---


If you fix the issue, kindly add following tag
| Reported-by: kernel test robot <yujie.liu@intel.com>
| Link: https://lore.kernel.org/r/202209211544.660c8485-yujie.liu@intel.com


To reproduce:

        git clone https://github.com/intel/lkp-tests.git
        cd lkp-tests
        sudo bin/lkp install job.yaml           # job file is attached in this email
        bin/lkp split-job --compatible job.yaml # generate the yaml file for lkp run
        sudo bin/lkp run generated-yaml-file

        # if come across any failure that blocks the test,
        # please remove ~/.lkp and /lkp dir to run from a clean state.
diff mbox series

Patch

diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h b/drivers/gpu/drm/i915/display/intel_display_types.h
index 0da9b208d56e..b78b29951241 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -1693,6 +1693,7 @@  struct intel_dp {
 	u8 (*preemph_max)(struct intel_dp *intel_dp);
 	u8 (*voltage_max)(struct intel_dp *intel_dp,
 			  const struct intel_crtc_state *crtc_state);
+	int (*get_pps_idx)(struct intel_dp *intel_dp);
 
 	/* Displayport compliance testing */
 	struct intel_dp_compliance compliance;
diff --git a/drivers/gpu/drm/i915/display/intel_pps.c b/drivers/gpu/drm/i915/display/intel_pps.c
index 21944f5bf3a8..4e770218e29f 100644
--- a/drivers/gpu/drm/i915/display/intel_pps.c
+++ b/drivers/gpu/drm/i915/display/intel_pps.c
@@ -362,15 +362,10 @@  static void intel_pps_get_registers(struct intel_dp *intel_dp,
 				    struct pps_registers *regs)
 {
 	struct drm_i915_private *dev_priv = dp_to_i915(intel_dp);
-	int pps_idx = 0;
+	int pps_idx = intel_dp->get_pps_idx(intel_dp);
 
 	memset(regs, 0, sizeof(*regs));
 
-	if (IS_GEMINILAKE(dev_priv) || IS_BROXTON(dev_priv))
-		pps_idx = bxt_power_sequencer_idx(intel_dp);
-	else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv))
-		pps_idx = vlv_power_sequencer_pipe(intel_dp);
-
 	regs->pp_ctrl = PP_CONTROL(pps_idx);
 	regs->pp_stat = PP_STATUS(pps_idx);
 	regs->pp_on = PP_ON_DELAYS(pps_idx);
@@ -1432,6 +1427,11 @@  void intel_pps_init(struct intel_dp *intel_dp)
 	intel_dp->pps.initializing = true;
 	INIT_DELAYED_WORK(&intel_dp->pps.panel_vdd_work, edp_panel_vdd_work);
 
+	if (IS_GEMINILAKE(i915) || IS_BROXTON(i915))
+		intel_dp->get_pps_idx = bxt_power_sequencer_idx;
+	else if (IS_VALLEYVIEW(i915) || IS_CHERRYVIEW(i915))
+		intel_dp->get_pps_idx = vlv_power_sequencer_pipe;
+
 	pps_init_timestamps(intel_dp);
 
 	with_intel_pps_lock(intel_dp, wakeref) {