Re: [PATCH v2] PCI: imx6: Add suspend/resume support for i.MX6QDL

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Frank,

On Thu, Oct 10, 2024 at 06:45:17PM -0400, Frank Li wrote:
> On Thu, Oct 10, 2024 at 10:11:21PM +0200, Francesco Dolcini wrote:
> > Hello Frank,
> >
> > On Thu, Oct 10, 2024 at 04:01:21PM -0400, Frank Li wrote:
> > > On Wed, Oct 09, 2024 at 03:14:05PM +0200, Stefan Eichenberger wrote:
> > > > From: Stefan Eichenberger <stefan.eichenberger@xxxxxxxxxxx>
> > > >
> > > > The suspend/resume support is broken on the i.MX6QDL platform. This
> > > > patch resets the link upon resuming to recover functionality. It shares
> > > > most of the sequences with other i.MX devices but does not touch the
> > > > critical registers, which might break PCIe. This patch addresses the
> > > > same issue as the following downstream commit:
> > > > https://github.com/nxp-imx/linux-imx/commit/4e92355e1f79d225ea842511fcfd42b343b32995
> > > > In comparison this patch will also reset the device if possible. Without
> > > > this patch suspend/resume will not work if a PCIe device is connected.
> > > > The kernel will hang on resume and print an error:
> > > > ath10k_pci 0000:01:00.0: Unable to change power state from D3hot to D0, device inaccessible
> > > > 8<--- cut here ---
> > > > Unhandled fault: imprecise external abort (0x1406) at 0x0106f944
> > > >
> > > > Signed-off-by: Stefan Eichenberger <stefan.eichenberger@xxxxxxxxxxx>
> > > > ---
> > >
> > > Thank you for your patch.
> > >
> > > But it may conflict with another suspend/resume patch
> > > https://lore.kernel.org/imx/1727245477-15961-8-git-send-email-hongxing.zhu@xxxxxxx/
> >
> > Thanks for the head-up.
> >
> > Do you see any issue with this patch apart that? Because this patch is
> > fixing a crash, so I would expect this to be merged, once ready, and
> > such a series rebased afterward.
> >
> > I am writing this explicitly since you wrote a similar comment on the
> > v1 (https://lore.kernel.org/all/ZsNXDq%2FkidZdyhvD@lizhi-Precision-Tower-5810/)
> > and I would like to prevent to have this fix starving for long just because
> > multiple people is working on the same driver.
> 
> My key comment for this patch is use flags IMX_PCIE_FLAG_SKIP_TURN_OFF
> in suspend()/resume(), it is up to kw to pick which one firstly.

I will try to implement it as you proposed with the new flag. 

However, what I figured out with kernel v6.12-rc1 I get the following
warning when booting on an i.MX6QDL even without my patch applied:
[    1.901199] PCI: bus0: Fast back to back transfers disabled
[    1.904754] mmc1: SDHCI controller on 2190000.mmc [2190000.mmc] using ADMA
[    1.904914] mmc2: SDHCI controller on 2194000.mmc [2194000.mmc] using ADMA
[    1.910686] pci 0000:01:00.0: [168c:003c] type 00 class 0x028000 PCIe Endpoint
[    1.918390] NET: Registered PF_PACKET protocol family
[    1.918573] mmc0: SDHCI controller on 2198000.mmc [2198000.mmc] using ADMA
[    1.924322] pci 0000:01:00.0: BAR 0 [mem 0x00000000-0x001fffff 64bit]
[    1.931635] Key type dns_resolver registered
[    1.936764] pci 0000:01:00.0: ROM [mem 0x00000000-0x0000ffff pref]
[    1.961043] pci 0000:01:00.0: supports D1 D2
[    1.961526] Registering SWP/SWPB emulation handler
[    1.965601] mmc0: new DDR MMC card at address 0001
[    1.976575] mmcblk0: mmc0:0001 Q2J54A 3.59 GiB
[    1.979794] Loading compiled-in X.509 certificates
[    1.985036] PCI: bus1: Fast back to back transfers disabled
[    1.991531] pci 0000:00:00.0: bridge window [mem 0x01000000-0x011fffff]: assigned
[    1.998742]  mmcblk0: p1 p2 p3
[    1.999163] pci 0000:00:00.0: BAR 0 [mem 0x01200000-0x012fffff]: assigned
[    2.003947] mmcblk0boot0: mmc0:0001 Q2J54A 16.0 MiB
[    2.008990] pci 0000:00:00.0: bridge window [mem 0x01300000-0x013fffff pref]: assigned
[    2.009023] pci 0000:00:00.0: ROM [mem 0x01400000-0x0140ffff pref]: assigned
[    2.009054] pci 0000:01:00.0: BAR 0 [mem 0x01000000-0x011fffff 64bit]: assigned
[    2.017526] mmcblk0boot1: mmc0:0001 Q2J54A 16.0 MiB
[    2.022015] pci 0000:01:00.0: ROM [mem 0x01300000-0x0130ffff pref]: assigned
[    2.032133] mmcblk0rpmb: mmc0:0001 Q2J54A 512 KiB, chardev (242:0)
[    2.036347] pci 0000:00:00.0: PCI bridge to [bus 01-ff]
[    2.036370] pci 0000:00:00.0:   bridge window [mem 0x01000000-0x011fffff]
[    2.036384] pci 0000:00:00.0:   bridge window [mem 0x01300000-0x013fffff pref]
[    2.042552] pps pps0: new PPS source ptp0
[    2.048338] pci_bus 0000:00: resource 4 [io  0x0000-0xffff]
[    2.083626] pci_bus 0000:00: resource 5 [mem 0x01000000-0x01efffff]
[    2.089972] pci_bus 0000:01: resource 1 [mem 0x01000000-0x011fffff]
[    2.093461] fec 2188000.ethernet eth0: registered PHC device 0
[    2.096283] pci_bus 0000:01: resource 2 [mem 0x01300000-0x013fffff pref]
[    2.096352] sysfs: cannot create duplicate filename '/devices/platform/soc/1ffc000.pcie/pci0000:00/0000:00:00.0/resource0'
[    2.096365] CPU: 3 UID: 0 PID: 52 Comm: kworker/u19:2 Not tainted 6.12.0-rc1 #54
[    2.096381] Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
[    2.096391] Workqueue: async async_run_entry_fn
[    2.103025] imx_thermal 20c8000.anatop:tempmon: Industrial CPU temperature grade - max:105C critical:100C passive:95C
[    2.108932]
[    2.108940] Call trace:
[    2.108950]  unwind_backtrace from show_stack+0x10/0x14
[    2.121391] clk: Disabling unused clocks
[    2.127423]  show_stack from dump_stack_lvl+0x54/0x68
[    2.127451]  dump_stack_lvl from sysfs_warn_dup+0x58/0x64
[    2.134265] PM: genpd: Disabling unused power domains
[    2.138525]  sysfs_warn_dup from sysfs_add_bin_file_mode_ns+0xbc/0xcc
[    2.138547]  sysfs_add_bin_file_mode_ns from sysfs_create_bin_file+0xac/0xb4
[    2.149242] ALSA device list:
[    2.150647]  sysfs_create_bin_file from pci_create_resource_files+0x84/0x148
[    2.153183]   No soundcards found.
[    2.158407]  pci_create_resource_files from pci_bus_add_device+0x24/0xe4
[    2.211699]  pci_bus_add_device from pci_bus_add_devices+0x2c/0x70
[    2.217930]  pci_bus_add_devices from pci_host_probe+0x7c/0xa4
[    2.223806]  pci_host_probe from dw_pcie_host_init+0x4ec/0x71c
[    2.229682]  dw_pcie_host_init from imx_pcie_probe+0x3a8/0x75c
[    2.235559]  imx_pcie_probe from platform_probe+0x5c/0xb0
[    2.241010]  platform_probe from really_probe+0xd0/0x3a4
[    2.246364]  really_probe from __driver_probe_device+0x8c/0x1d4
[    2.252321]  __driver_probe_device from driver_probe_device+0x30/0xc0
[    2.258803]  driver_probe_device from __driver_attach_async_helper+0x50/0xd8
[    2.265892]  __driver_attach_async_helper from async_run_entry_fn+0x30/0x144
[    2.272980]  async_run_entry_fn from process_one_work+0x154/0x2dc
[    2.279115]  process_one_work from worker_thread+0x250/0x3f0
[    2.284811]  worker_thread from kthread+0x110/0x12c
[    2.289726]  kthread from ret_from_fork+0x14/0x28
[    2.294461] Exception stack(0xe6a0dfb0 to 0xe6a0dff8)
[    2.299535] dfa0:                                     00000000 00000000 00000000 00000000
[    2.307740] dfc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[    2.315942] dfe0: 00000000 00000000 00000000 00000000 00000013 00000000
[    2.323156] pcieport 0000:00:00.0: PME: Signaling with IRQ 293
[    2.329645] pcieport 0000:00:00.0: AER: enabled with IRQ 293
[    2.335553] sysfs: cannot create duplicate filename '/devices/platform/soc/1ffc000.pcie/pci0000:00/0000:00:00.0/0000:01:00.0/resource0'
[    2.347794] CPU: 3 UID: 0 PID: 52 Comm: kworker/u19:2 Not tainted 6.12.0-rc1 #54
[    2.355229] Hardware name: Freescale i.MX6 Quad/DualLite (Device Tree)
[    2.361779] Workqueue: async async_run_entry_fn
[    2.366349] Call trace:
[    2.366362]  unwind_backtrace from show_stack+0x10/0x14
[    2.374183]  show_stack from dump_stack_lvl+0x54/0x68
[    2.379273]  dump_stack_lvl from sysfs_warn_dup+0x58/0x64
[    2.384706]  sysfs_warn_dup from sysfs_add_bin_file_mode_ns+0xbc/0xcc
[    2.391183]  sysfs_add_bin_file_mode_ns from sysfs_create_bin_file+0xac/0xb4
[    2.398270]  sysfs_create_bin_file from pci_create_resource_files+0x84/0x148
[    2.405360]  pci_create_resource_files from pci_bus_add_device+0x24/0xe4
[    2.412113]  pci_bus_add_device from pci_bus_add_devices+0x2c/0x70
[    2.418334]  pci_bus_add_devices from pci_bus_add_devices+0x60/0x70
[    2.424642]  pci_bus_add_devices from pci_host_probe+0x7c/0xa4
[    2.430511]  pci_host_probe from dw_pcie_host_init+0x4ec/0x71c
[    2.436384]  dw_pcie_host_init from imx_pcie_probe+0x3a8/0x75c
[    2.442258]  imx_pcie_probe from platform_probe+0x5c/0xb0
[    2.447704]  platform_probe from really_probe+0xd0/0x3a4
[    2.453057]  really_probe from __driver_probe_device+0x8c/0x1d4
[    2.459014]  __driver_probe_device from driver_probe_device+0x30/0xc0
[    2.465493]  driver_probe_device from __driver_attach_async_helper+0x50/0xd8
[    2.472580]  __driver_attach_async_helper from async_run_entry_fn+0x30/0x144
[    2.479666]  async_run_entry_fn from process_one_work+0x154/0x2dc
[    2.485800]  process_one_work from worker_thread+0x250/0x3f0
[    2.491494]  worker_thread from kthread+0x110/0x12c
[    2.496408]  kthread from ret_from_fork+0x14/0x28
[    2.501140] Exception stack(0xe6a0dfb0 to 0xe6a0dff8)
[    2.506214] dfa0:                                     00000000 00000000 00000000 00000000
[    2.514418] dfc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
[    2.522620] dfe0: 00000000 00000000 00000000 00000000 00000013 00000000

This was not the case with kernel v6.11, do you have an idea where this
comes from? I did not dig into more detail yet but it looks a bit like a
regression. The driver still works, it just prints this duplicate
filename warning.

Regards,
Stefan




[Index of Archives]     [DMA Engine]     [Linux Coverity]     [Linux USB]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Greybus]

  Powered by Linux