mbox series

[RFC,v2,net-next,0/9] Convert xpcs to phylink_pcs_ops

Message ID 20210601003325.1631980-1-olteanv@gmail.com (mailing list archive)
Headers show
Series Convert xpcs to phylink_pcs_ops | expand

Message

Vladimir Oltean June 1, 2021, 12:33 a.m. UTC
From: Vladimir Oltean <vladimir.oltean@nxp.com>

This patch series is partially tested (some code paths have been covered
on the NXP SJA1105) but since I don't have stmmac hardware, it would
still be appreciated if people from Intel could give this another run.

Background: the sja1105 DSA driver currently drives a Designware XPCS
for SGMII and 2500base-X, and it would be nice to reuse some code with
the xpcs module. This would also help consolidate the phylink_pcs_ops,
since the only other dedicated PCS driver, currently, is the lynx_pcs.

Therefore, this series makes the xpcs expose the same kind of API that
the lynx_pcs module does. The main changes are getting rid of struct
mdio_xpcs_ops, being compatible with struct phylink_pcs_ops and being
less reliant on the phy_interface_t passed to xpcs_probe (now renamed to
xpcs_create).

Vladimir Oltean (9):
  net: pcs: xpcs: delete shim definition for mdio_xpcs_get_ops()
  net: pcs: xpcs: there is only one PHY ID
  net: pcs: xpcs: make the checks related to the PHY interface mode
    stateless
  net: pcs: xpcs: export xpcs_validate
  net: pcs: xpcs: export xpcs_config_eee
  net: pcs: xpcs: export xpcs_probe
  net: pcs: xpcs: use mdiobus_c45_addr in xpcs_{read,write}
  net: pcs: xpcs: convert to mdio_device
  net: pcs: xpcs: convert to phylink_pcs_ops

 drivers/net/ethernet/stmicro/stmmac/common.h  |   3 +-
 drivers/net/ethernet/stmicro/stmmac/hwif.h    |  14 -
 .../ethernet/stmicro/stmmac/stmmac_ethtool.c  |  12 +-
 .../net/ethernet/stmicro/stmmac/stmmac_main.c |  44 +--
 .../net/ethernet/stmicro/stmmac/stmmac_mdio.c |  47 ++-
 drivers/net/pcs/pcs-xpcs.c                    | 371 ++++++++++++------
 include/linux/pcs/pcs-xpcs.h                  |  40 +-
 7 files changed, 306 insertions(+), 225 deletions(-)

Comments

Wong Vee Khee June 1, 2021, 8:20 a.m. UTC | #1
On Tue, Jun 01, 2021 at 03:33:16AM +0300, Vladimir Oltean wrote:
> From: Vladimir Oltean <vladimir.oltean@nxp.com>
> 
> This patch series is partially tested (some code paths have been covered
> on the NXP SJA1105) but since I don't have stmmac hardware, it would
> still be appreciated if people from Intel could give this another run.
> 
> Background: the sja1105 DSA driver currently drives a Designware XPCS
> for SGMII and 2500base-X, and it would be nice to reuse some code with
> the xpcs module. This would also help consolidate the phylink_pcs_ops,
> since the only other dedicated PCS driver, currently, is the lynx_pcs.
> 
> Therefore, this series makes the xpcs expose the same kind of API that
> the lynx_pcs module does. The main changes are getting rid of struct
> mdio_xpcs_ops, being compatible with struct phylink_pcs_ops and being
> less reliant on the phy_interface_t passed to xpcs_probe (now renamed to
> xpcs_create).
> 
> Vladimir Oltean (9):
>   net: pcs: xpcs: delete shim definition for mdio_xpcs_get_ops()
>   net: pcs: xpcs: there is only one PHY ID
>   net: pcs: xpcs: make the checks related to the PHY interface mode
>     stateless
>   net: pcs: xpcs: export xpcs_validate
>   net: pcs: xpcs: export xpcs_config_eee
>   net: pcs: xpcs: export xpcs_probe
>   net: pcs: xpcs: use mdiobus_c45_addr in xpcs_{read,write}
>   net: pcs: xpcs: convert to mdio_device
>   net: pcs: xpcs: convert to phylink_pcs_ops
> 
>  drivers/net/ethernet/stmicro/stmmac/common.h  |   3 +-
>  drivers/net/ethernet/stmicro/stmmac/hwif.h    |  14 -
>  .../ethernet/stmicro/stmmac/stmmac_ethtool.c  |  12 +-
>  .../net/ethernet/stmicro/stmmac/stmmac_main.c |  44 +--
>  .../net/ethernet/stmicro/stmmac/stmmac_mdio.c |  47 ++-
>  drivers/net/pcs/pcs-xpcs.c                    | 371 ++++++++++++------
>  include/linux/pcs/pcs-xpcs.h                  |  40 +-
>  7 files changed, 306 insertions(+), 225 deletions(-)

I am seeing kernel panic after applying this patch series on my Intel
Tigerlake board:

[   12.770067] intel-eth-pci 0000:00:1e.4 enp0s30f4: FPE workqueue start
[   12.776481] intel-eth-pci 0000:00:1e.4 enp0s30f4: configuring for inband/sgmii link mode
[   12.784527] BUG: kernel NULL pointer dereference, address: 0000000000000000
[   12.791454] #PF: supervisor instruction fetch in kernel mode
[   12.797083] #PF: error_code(0x0010) - not-present page
[   12.802203] PGD 0 P4D 0
[   12.804739] Oops: 0010 [#1] PREEMPT SMP NOPTI
[   12.809080] CPU: 2 PID: 2023 Comm: connmand Tainted: G     U            5.13.0-rc3-intel-lts #73
[   12.817813] Hardware name: Intel Corporation Tiger Lake Client Platform/TigerLake U DDR4 SODIMM RVP, BIOS TGLIFUI1.R00.3373.AF0.2009230546 09/23/2020
[   12.831105] RIP: 0010:0x0
[   12.833732] Code: Unable to access opcode bytes at RIP 0xffffffffffffffd6.
[   12.840566] RSP: 0018:ffff9f404052bb78 EFLAGS: 00010246
[   12.845771] RAX: 0000000000000000 RBX: ffff93e489bdda00 RCX: 0000000000000000
[   12.852867] RDX: ffff9f404052bba0 RSI: 0000000000000002 RDI: ffff93e4891244d8
[   12.859963] RBP: ffff9f404052bba0 R08: 0000000000000000 R09: ffff9f404052b888
[   12.867054] R10: 0000000000000001 R11: 0000000000000001 R12: 0000000000000001
[   12.874145] R13: ffff93e4891208c0 R14: 0000000000000006 R15: 0000000000000001
[   12.881242] FS:  00007fd656ece7c0(0000) GS:ffff93e617f00000(0000) knlGS:0000000000000000
[   12.889286] CS:  0010 DS: 0000 ES: 0000 CR0: 0000000080050033
[   12.895000] CR2: ffffffffffffffd6 CR3: 000000010e674004 CR4: 0000000000770ee0
[   12.902094] PKRU: 55555554
[   12.904796] Call Trace:
[   12.907245]  phylink_major_config+0x5e/0x1a0 [phylink]
[   12.912368]  phylink_start+0x204/0x2c0 [phylink]
[   12.916971]  stmmac_open+0x3d0/0x9f0 [stmmac]
[   12.921317]  __dev_open+0xe7/0x180
[   12.924710]  __dev_change_flags+0x174/0x1d0
[   12.928882]  ? __thaw_task+0x40/0x40
[   12.932453]  ? arch_stack_walk+0x9e/0xf0
[   12.936363]  dev_change_flags+0x21/0x60
[   12.940188]  devinet_ioctl+0x5e8/0x750
[   12.943925]  ? common_interrupt+0xc0/0xe0
[   12.947927]  inet_ioctl+0x190/0x1c0
[   12.951408]  ? dev_ioctl+0x26d/0x4c0
[   12.954972]  sock_do_ioctl+0x44/0x140
[   12.958627]  ? alloc_empty_file+0x61/0xb0
[   12.962628]  sock_ioctl+0x22c/0x320
[   12.966111]  __x64_sys_ioctl+0x80/0xb0
[   12.969852]  do_syscall_64+0x42/0x80
[   12.973418]  entry_SYSCALL_64_after_hwframe+0x44/0xae
[   12.978446] RIP: 0033:0x7fd65741b4bb
[   12.982015] Code: 0f 1e fa 48 8b 05 c5 69 0c 00 64 c7 00 26 00 00 00 48 c7 c0 ff ff ff ff c3 66 0f 1f 44 00 00 f3 0f 1e fa b8 10 00 00 00 0f 05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d 95 69 0c 00 f7 d8 64 89 01 48
[   13.000645] RSP: 002b:00007ffda8ca3288 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
[   13.008170] RAX: ffffffffffffffda RBX: 00005576e8ee2100 RCX: 00007fd65741b4bb
[   13.015262] RDX: 00007ffda8ca3290 RSI: 0000000000008914 RDI: 0000000000000010
[   13.022355] RBP: 0000000000000010 R08: 00005576e8ee2100 R09: 0000000000000000
[   13.029447] R10: 00005576e8e8f010 R11: 0000000000000246 R12: 0000000000000000
[   13.036539] R13: 00007ffda8ca3290 R14: 0000000000000001 R15: 00007ffda8ca39d0
[   13.043633] Modules linked in: bluetooth ecryptfs hid_sensor_gyro_3d hid_sensor_incl_3d hid_sensor_magn_3d hid_sensor_accel_3d hid_sensor_als hid_sensor_trigger hid_sensor_iio_common hid_sensor_custom hid_sensor_hub intel_ishtp_loader intel_ishtp_hid intel_gpy ax88179_178a usbnet dwmac_intel mii x86_pkg_temp_thermal stmmac dwc3 kvm_intel pcs_xpcs mei_wdt mei_hdcp atkbd udc_core libps2 phylink kvm libphy i915 spi_pxa2xx_platform irqbypass intel_rapl_msr mei_me wdat_wdt i2c_i801 pcspkr dw_dmac dw_dmac_core intel_ish_ipc i2c_smbus mei intel_ishtp dwc3_pci tpm_crb thermal parport_pc i8042 tpm_tis parport tpm_tis_core tpm intel_pmc_core sch_fq_codel uhid fuse configfs snd_hda_intel snd_intel_dspcfg snd_intel_sdw_acpi snd_hda_codec snd_hda_core snd_pcm snd_timer snd soundcore
[   13.111247] CR2: 0000000000000000
[   13.114556] ---[ end trace aef3fc6d992073a6 ]---