linux-usb.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jarkko Nikula <jarkko.nikula@linux.intel.com>
To: Oleksij Rempel <o.rempel@pengutronix.de>
Cc: Jakub Kicinski <kuba@kernel.org>,
	Oleksij Rempel <linux@rempel-privat.de>,
	netdev@vger.kernel.org, linux-usb@vger.kernel.org,
	"David S. Miller" <davem@davemloft.net>
Subject: Re: Regression with commit e532a096be0e ("net: usb: asix: ax88772: add phylib support")
Date: Fri, 20 Aug 2021 11:38:36 +0300	[thread overview]
Message-ID: <b2d1a679-156f-33e2-6297-219e58dbec45@linux.intel.com> (raw)
In-Reply-To: <20210820040635.GA3573@pengutronix.de>

[-- Attachment #1: Type: text/plain, Size: 638 bytes --]

On 8/20/21 7:06 AM, Oleksij Rempel wrote:
> Can you please test attached patch.
> And may be add some prints to the ax88772_hw_reset() and ax88772a_hw_reset().
> It would be interesting to know, which variant is actually affected.
> 
It works! Looks like it goes through ax88772_hw_reset() here. I added on 
top of your patch "netdev_dbg(dev->net, "%s\n", __func__);" to beginning 
of both x88772_hw_reset() and ax88772a_hw_reset().

I attached the "dmesg | grep -i asix". This time no ifconfig down/up 
jump since machine got the link up and IP from the DHCP server.

You may add
Tested-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>

[-- Attachment #2: dmesg-asix --]
[-- Type: text/plain, Size: 15292 bytes --]

[    0.000000] Command line: noinitrd console=ttyS0,115200n8 buildroot_hostname=ehl07 module_blacklist=dw_dmac root=PARTUUID=dcd1314f-692a-8749-8b66-c2a1f1ee46e6 resume=PARTUUID=3a0bb9e6-27ae-46d3-a380-43f04fde12ee i2c_designware_core.dyndbg=+p m_can.dyndbg=+p m_can_pci.dyndbg=+p asix.dyndbg=+p ax88179_178a.dyndbg=+p dmi_entry_point=0x748cd000
[    0.022619] Kernel command line: noinitrd console=ttyS0,115200n8 buildroot_hostname=ehl07 module_blacklist=dw_dmac root=PARTUUID=dcd1314f-692a-8749-8b66-c2a1f1ee46e6 resume=PARTUUID=3a0bb9e6-27ae-46d3-a380-43f04fde12ee i2c_designware_core.dyndbg=+p m_can.dyndbg=+p m_can_pci.dyndbg=+p asix.dyndbg=+p ax88179_178a.dyndbg=+p dmi_entry_point=0x748cd000
[    5.126770] usbcore: registered new interface driver asix
[    5.712789] asix 1-8:1.0 (unnamed net_device) (uninitialized): internal PHY address 0x10
[    5.723591] asix 1-8:1.0 (unnamed net_device) (uninitialized): ax88772_hw_reset
[    5.735668] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_write_gpio() - value = 0x00b0
[    6.010792] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_write_rx_ctl() - mode = 0x0088
[    6.010915] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_write_medium_mode() - mode = 0x0336
[    6.011120] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_write_rx_ctl() - mode = 0x0088
[    6.011227] asix 1-8:1.0 (unnamed net_device) (uninitialized): RX_CTL is 0x0088 after all initializations
[    6.011309] asix 1-8:1.0 (unnamed net_device) (uninitialized): Medium Status is 0x0336 after all initializations
[    6.013405] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x00, loc=0x02, returns=0x0000
[    6.014910] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x00, loc=0x03, returns=0x0000
[    6.021857] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x01, loc=0x02, returns=0x0000
[    6.023376] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x01, loc=0x03, returns=0x0000
[    6.030024] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x02, loc=0x02, returns=0x0000
[    6.031391] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x02, loc=0x03, returns=0x0000
[    6.035294] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x03, loc=0x02, returns=0x0000
[    6.036789] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x03, loc=0x03, returns=0x0000
[    6.040771] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x04, loc=0x02, returns=0x0000
[    6.042139] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x04, loc=0x03, returns=0x0000
[    6.046118] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x05, loc=0x02, returns=0x0000
[    6.047560] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x05, loc=0x03, returns=0x0000
[    6.051306] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x06, loc=0x02, returns=0x0000
[    6.052747] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x06, loc=0x03, returns=0x0000
[    6.056534] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x07, loc=0x02, returns=0x0000
[    6.057962] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x07, loc=0x03, returns=0x0000
[    6.061899] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x08, loc=0x02, returns=0x0000
[    6.068703] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x08, loc=0x03, returns=0x0000
[    6.072668] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x09, loc=0x02, returns=0x0000
[    6.074123] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x09, loc=0x03, returns=0x0000
[    6.078067] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x0a, loc=0x02, returns=0x0000
[    6.079596] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x0a, loc=0x03, returns=0x0000
[    6.083303] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x0b, loc=0x02, returns=0x0000
[    6.084738] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x0b, loc=0x03, returns=0x0000
[    6.088636] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x0c, loc=0x02, returns=0x0000
[    6.090062] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x0c, loc=0x03, returns=0x0000
[    6.093646] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x0d, loc=0x02, returns=0x0000
[    6.095177] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x0d, loc=0x03, returns=0x0000
[    6.098943] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x0e, loc=0x02, returns=0x0000
[    6.100484] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x0e, loc=0x03, returns=0x0000
[    6.104265] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x0f, loc=0x02, returns=0x0000
[    6.105690] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x0f, loc=0x03, returns=0x0000
[    6.109293] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x10, loc=0x02, returns=0x003b
[    6.110716] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x10, loc=0x03, returns=0x1811
[    6.114312] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x11, loc=0x02, returns=0x1811
[    6.115813] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x11, loc=0x03, returns=0x1811
[    6.119522] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x12, loc=0x02, returns=0x1811
[    6.120948] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x12, loc=0x03, returns=0x1811
[    6.124645] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x13, loc=0x02, returns=0x1811
[    6.126067] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x13, loc=0x03, returns=0x1811
[    6.129873] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x14, loc=0x02, returns=0x1811
[    6.131390] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x14, loc=0x03, returns=0x1811
[    6.135109] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x15, loc=0x02, returns=0x1811
[    6.136647] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x15, loc=0x03, returns=0x1811
[    6.140356] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x16, loc=0x02, returns=0x1811
[    6.141912] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x16, loc=0x03, returns=0x1811
[    6.145746] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x17, loc=0x02, returns=0x1811
[    6.147348] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x17, loc=0x03, returns=0x1811
[    6.151305] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x18, loc=0x02, returns=0x1811
[    6.152820] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x18, loc=0x03, returns=0x1811
[    6.156801] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x19, loc=0x02, returns=0x1811
[    6.158270] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x19, loc=0x03, returns=0x1811
[    6.162402] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x1a, loc=0x02, returns=0x1811
[    6.163922] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x1a, loc=0x03, returns=0x1811
[    6.167757] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x1b, loc=0x02, returns=0x1811
[    6.169351] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x1b, loc=0x03, returns=0x1811
[    6.173259] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x1c, loc=0x02, returns=0x1811
[    6.174907] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x1c, loc=0x03, returns=0x1811
[    6.178790] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x1d, loc=0x02, returns=0x1811
[    6.180451] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x1d, loc=0x03, returns=0x1811
[    6.184342] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x1e, loc=0x02, returns=0x1811
[    6.185965] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x1e, loc=0x03, returns=0x1811
[    6.189861] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x1f, loc=0x02, returns=0x1811
[    6.191433] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x1f, loc=0x03, returns=0x1811
[    6.193647] libphy: Asix MDIO Bus: probed
[    6.199983] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x10, loc=0x01, returns=0x7809
[    6.201581] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x10, loc=0x00, returns=0x3100
[    6.209848] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_read() phy_id=0x10, loc=0x00, returns=0x3100
[    6.209853] asix 1-8:1.0 (unnamed net_device) (uninitialized): asix_mdio_write() phy_id=0x10, loc=0x00, val=0x3900
[    6.222519] asix 1-8:1.0 eth0: register 'asix' at usb-0000:00:14.0-8, ASIX AX88772 USB 2.0 Ethernet, 00:10:60:31:d5:f8
[    8.349551] asix 1-8:1.0 eth0: asix_write_rx_ctl() - mode = 0x0088
[    8.349611] asix 1-8:1.0 eth0: asix_write_medium_mode() - mode = 0x0336
[    8.351536] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x00, returns=0x3900
[    8.351551] asix 1-8:1.0 eth0: asix_mdio_write() phy_id=0x10, loc=0x00, val=0x3100
[    8.354707] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x04, returns=0x01e1
[    8.356264] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x01, returns=0x7809
[    8.357770] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x00, returns=0x3100
[    8.359269] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x00, returns=0x3100
[    8.360677] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x01, returns=0x7809
[    8.362076] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x01, returns=0x7809
[    8.362080] asix 1-8:1.0 eth0: asix_write_medium_mode() - mode = 0x0000
[    8.362145] asix 1-8:1.0 eth0: Link is Down
[    9.388904] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x00, returns=0x3100
[    9.390510] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x01, returns=0x7809
[    9.392454] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x01, returns=0x7809
[   10.265292] asix 1-8:1.0 eth0: Link Status is: 1
[   10.393301] asix 1-8:1.0 eth0: Link Status is: 1
[   10.413595] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x00, returns=0x3100
[   10.415556] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x01, returns=0x782d
[   10.417402] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x05, returns=0xc1e1
[   10.417536] asix 1-8:1.0 eth0: asix_write_medium_mode() - mode = 0x0336
[   10.418225] asix 1-8:1.0 eth0: Link is Up - 100Mbps/Full - flow control off
[   11.437384] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x00, returns=0x3100
[   11.439584] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x01, returns=0x782d
[   12.461627] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x00, returns=0x3100
[   12.463740] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x01, returns=0x782d
[   13.485618] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x00, returns=0x3100
[   13.487713] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x01, returns=0x782d
[   14.509668] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x00, returns=0x3100
[   14.511712] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x01, returns=0x782d
[   15.533691] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x00, returns=0x3100
[   15.537704] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x01, returns=0x782d
[   16.557690] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x00, returns=0x3100
[   16.561641] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x01, returns=0x782d
[   17.581726] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x00, returns=0x3100
[   17.585550] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x01, returns=0x782d
[   18.605660] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x00, returns=0x3100
[   18.607662] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x01, returns=0x782d
[   19.629989] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x00, returns=0x3100
[   19.632010] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x01, returns=0x782d
[   20.653657] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x00, returns=0x3100
[   20.655648] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x01, returns=0x782d
[   21.677710] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x00, returns=0x3100
[   21.679696] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x01, returns=0x782d
[   22.701718] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x00, returns=0x3100
[   22.703702] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x01, returns=0x782d
[   23.726345] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x00, returns=0x3100
[   23.728774] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x01, returns=0x782d
[   24.749636] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x00, returns=0x3100
[   24.752064] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x01, returns=0x782d
[   25.773655] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x00, returns=0x3100
[   25.775642] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x01, returns=0x782d
[   26.797688] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x00, returns=0x3100
[   26.799674] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x01, returns=0x782d
[   27.821728] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x00, returns=0x3100
[   27.823704] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x01, returns=0x782d
[   28.845634] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x00, returns=0x3100
[   28.847683] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x01, returns=0x782d
[   29.869654] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x00, returns=0x3100
[   29.871646] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x01, returns=0x782d
[   30.894304] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x00, returns=0x3100
[   30.896681] asix 1-8:1.0 eth0: asix_mdio_read() phy_id=0x10, loc=0x01, returns=0x782d

      reply	other threads:[~2021-08-20  8:38 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-11 14:55 Jarkko Nikula
2021-08-16 15:13 ` Jakub Kicinski
2021-08-16 16:18   ` Oleksij Rempel
2021-08-17  8:23     ` Jarkko Nikula
2021-08-17  9:09       ` Oleksij Rempel
2021-08-17 11:55         ` Jarkko Nikula
2021-08-20  4:06           ` Oleksij Rempel
2021-08-20  8:38             ` Jarkko Nikula [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=b2d1a679-156f-33e2-6297-219e58dbec45@linux.intel.com \
    --to=jarkko.nikula@linux.intel.com \
    --cc=davem@davemloft.net \
    --cc=kuba@kernel.org \
    --cc=linux-usb@vger.kernel.org \
    --cc=linux@rempel-privat.de \
    --cc=netdev@vger.kernel.org \
    --cc=o.rempel@pengutronix.de \
    --subject='Re: Regression with commit e532a096be0e ("net: usb: asix: ax88772: add phylib support")' \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).