On Mon, May 07, 2018 at 05:09:21PM +0200, Daniel Vetter wrote: > On Mon, May 07, 2018 at 02:33:25PM +0100, Chris Wilson wrote: > > Quoting Feng Tang (2018-05-07 22:26:34) > > > Hi Chris, > > > > > > Thanks for the prompt review! > > > > > > On Mon, May 07, 2018 at 11:40:45AM +0100, Chris Wilson wrote: > > > > Quoting Feng Tang (2018-05-07 11:36:09) > > > > > To fulfil the Dell 4K monitor, the dpcd max retries has been bumped > > > > > from 7 to 32, which may hurt the boot/init time for some platforms, > > > > > as the 32 retries may take hundreds of ms. > > > > > > > > If we need that many retries, so be it. No modparam, the driver just has > > > > to work. > > > > > > I understand your point. The retry numer was originally 7, and worked > > > fine untill the Dell 4K monitor which changes to 32. According to my test, > > > each retry will take about 8ms on the A3960 based NUC. > > > > > > One of our product need to boot up within a given time limit, this > > > 32 retries will take about 1/3 of the budget (about 270ms), that's > > > why I would try to make it a parameter. > > > > The essence is that probing whether a monitor is connected should not be > > blocking boot. If an async probe tries and fails to find a monitor, > > fine - no one will notice. If it does take 270ms to find a monitor, it > > turns on 200ms after userspace kicks in, just like any other hotplug. > > Yeah, the fix here is to get the probing out of the driver load path, not > to break the driver for some funky monitors. And definitely not using a > modparam. Hi Chris and Daniel, After reading the i915 modeset init code, I did some experiments: 1. make the intel_modeset_init() function async (here async means creating a async func wrapper and call async_schedul() for it) 2. make the intel_setup_outpus()+intel_modeset_setup_hw_state() async But both of them will trigger kernel panic (log msg pasted in the end), did I made some mistakes, or maybe the i915 codes following these functions has dependency over them? IIUC the dpcd access first happens in i915_driver_load --> i915_load_modeset_init --> intel_modeset_init --> intel_setup_outputs --> intel_ddi_init --> intel_edp_init_connector --> intel_edp_init_dpcd (to check if DPCD exist) Should we postpone it to later phase or even after user space kick in? Thanks, Feng --- Error msg for my async experiment: [ 0.715706] No backend configured for hyper_dmabuf in kernel config [ 0.716079] Hyper_dmabuf: no backend found [ 0.736361] intel_powerclamp: CPU does not support MWAIT [ 0.737643] [drm:wait_panel_status] *ERROR* PPS state mismatch [ 0.741381] genirq: Setting trigger mode 3 for irq 127 failed (intel_gpio_irq_type+0x0/0x110) [ 0.743244] dmi-sysfs: dmi entry is absent. [ 0.765116] [edp_panel_vdd_on()]: exit [ 0.765360] BUG: unable to handle kernel NULL pointer dereference at (null) [ 0.765809] IP: (null) [ 0.766005] PGD 0 P4D 0 [ 0.766168] Oops: 0010 [#1] PREEMPT SMP [ 0.766401] Modules linked in: [ 0.766592] CPU: 0 PID: 28 Comm: kworker/u8:1 Tainted: G U W 4.14.39-sos+ #26 [ 0.767075] Workqueue: events_unbound async_run_entry_fn [ 0.767392] task: ffff88027433c240 task.stack: ffff880274340000 [ 0.767743] RIP: 0010: (null) [ 0.767969] RSP: 0000:ffff880274343ab8 EFLAGS: 00010246 [ 0.768281] RAX: 0000000000000000 RBX: 000000002d4003ff RCX: 0000000000000001 [ 0.768701] RDX: 0000000080000000 RSI: 0000000000000000 RDI: ffff880272f21100 [ 0.769121] RBP: 0000000000000000 R08: 000000002d4003ff R09: 0000000000000001 [ 0.769541] R10: ffff880274343a60 R11: ffffffff82e7fe0d R12: 0000000000000001 [ 0.769961] R13: ffff880273038000 R14: 0000000000000004 R15: ffff880272f21100 [ 0.770383] FS: 0000000000000000(0000) GS:ffff88027dc00000(0000) knlGS:0000000000000000 [ 0.770858] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 0.771199] CR2: 0000000000000000 CR3: 0000000002613000 CR4: 00000000003426f0 [ 0.771619] Call Trace: [ 0.771779] ? intel_dp_aux_ch+0x1a7/0x770 [ 0.772031] ? remove_wait_queue+0x60/0x60 [ 0.772281] ? intel_dp_aux_transfer+0xa6/0x200 [ 0.772556] ? drm_dp_dpcd_access+0x9d/0x150 [ 0.772815] ? drm_dp_dpcd_read+0x2c/0x60 [ 0.773059] ? drm_dp_read_desc+0x43/0xf0 [ 0.773303] ? intel_dp_detect+0x346/0x6a0 [ 0.773554] ? drm_helper_probe_single_connector_modes+0xcd/0x6b0 [ 0.773920] ? _raw_spin_unlock+0x14/0x30 [ 0.774165] ? vt_console_print+0x22a/0x3d0 [ 0.774420] ? preempt_count_add+0x56/0xa0 [ 0.774669] ? _raw_spin_lock_irqsave+0x32/0x40 [ 0.774944] ? drm_setup_crtcs+0x143/0x9e0 [ 0.775195] ? __drm_fb_helper_initial_config_and_unlock+0x3f/0x410 [ 0.775567] ? mutex_lock+0x1c/0x40 [ 0.775783] ? intel_fbdev_initial_config+0x14/0x30 [ 0.776076] ? async_run_entry_fn+0x39/0x160 [ 0.776335] ? process_one_work+0x14a/0x3c0 [ 0.776588] ? worker_thread+0x4d/0x3e0 [ 0.776823] ? kthread+0x10a/0x140 [ 0.777031] ? process_one_work+0x3c0/0x3c0 [ 0.777284] ? kthread_create_on_node+0x40/0x40 [ 0.777557] ? ret_from_fork+0x3a/0x50 [ 0.777785] Code: Bad RIP value. [ 0.777995] RIP: (null) RSP: ffff880274343ab8 [ 0.778305] CR2: 0000000000000000 [ 0.778508] ---[ end trace f4e157ae338a4060 ]--- [ 0.778786] Kernel panic - not syncing: Fatal exception [ 0.779160] Kernel Offset: disabled [ 0.779376] Rebooting in 10 seconds.. _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel