RE: [PATCH 6/6] ptp_ocelot: support 4 programmable pins
From: "Y.b. Lu" <yangbo.lu@nxp.com>
Date: 2020-03-26 09:34:58
Also in:
lkml
Hi Richard,
-----Original Message----- From: Richard Cochran <richardcochran@gmail.com> Sent: Wednesday, March 25, 2020 9:42 PM To: Y.b. Lu <yangbo.lu@nxp.com> Cc: linux-kernel@vger.kernel.org; netdev@vger.kernel.org; David S . Miller [off-list ref]; Vladimir Oltean [off-list ref]; Claudiu Manoil [off-list ref]; Andrew Lunn [off-list ref]; Vivien Didelot [off-list ref]; Florian Fainelli [off-list ref]; Alexandre Belloni [off-list ref]; Microchip Linux Driver Support [off-list ref] Subject: Re: [PATCH 6/6] ptp_ocelot: support 4 programmable pins On Wed, Mar 25, 2020 at 03:08:46AM +0000, Y.b. Lu wrote:quoted
The calling should be like this, ptp_set_pinfunc (hold pincfg_mux) ---> ptp_disable_pinfunc ---> .enable ---> ptp_find_pin (hold pincfg_mux)I see. The call ptp_disable_pinfunc() --> .enable() is really ptp_disable_pinfunc() --> .enable(on=0) or disable. All of the other drivers (except mv88e6xxx which has a bug) avoid the deadlock by only calling ptp_find_pin() when invoked by .enable(on=1); Of course, that is horrible, and I am going to find a way to fix it.
Thanks a lot. Do you think it is ok to move protection into ptp_set_pinfunc() to protect just pin_config accessing? ptp_disable_pinfunc() not touching pin_config could be out of protection. But it seems indeed total ptp_set_pinfunc() should be under protection...
For now, maybe you can drop the "programmable pins" feature for your driver? After all, the pins are not programmable.
I still want to confirm, did you mean the deadlock issue? Or you thought the pin supports only PTP_PF_PEROUT in hardware? I could modify commit messages to indicate the pin supports both PTP_PF_PEROUT and PTP_PF_EXTTS, and PTP_PF_EXTTS support will be added in the future. Thanks a lot.
Thanks, Richard