* [PATCH v6 1/6] phy: core: Fix that API devm_phy_put() fails to release the phy
2024-12-13 12:36 [PATCH v6 0/6] phy: core: Fix bugs for several APIs and simplify an API Zijun Hu
@ 2024-12-13 12:36 ` Zijun Hu
2024-12-13 12:36 ` [PATCH v6 2/6] phy: core: Fix that API devm_of_phy_provider_unregister() fails to unregister the phy provider Zijun Hu
` (6 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Zijun Hu @ 2024-12-13 12:36 UTC (permalink / raw)
To: Vinod Koul, Kishon Vijay Abraham I, Felipe Balbi,
Greg Kroah-Hartman, Rob Herring, Arnd Bergmann, Lee Jones
Cc: Greg Kroah-Hartman, Lorenzo Pieralisi, Krzysztof Wilczyński,
Bjorn Helgaas, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Christophe JAILLET, Johan Hovold, Zijun Hu, stable,
linux-phy, linux-kernel, Zijun Hu, Johan Hovold
From: Zijun Hu <quic_zijuhu@quicinc.com>
For devm_phy_put(), its comment says it needs to invoke phy_put() to
release the phy, but it will not actually invoke the function since
devres_destroy() does not call devm_phy_release(), and the missing
phy_put() call will cause:
- The phy fails to be released.
- devm_phy_put() can not fully undo what API devm_phy_get() does.
- Leak refcount of both the module and device for below typical usage:
devm_phy_get(); // or its variant
...
err = do_something();
if (err)
goto err_out;
...
err_out:
devm_phy_put(); // leak refcount here
The file(s) affected by this issue are shown below since they have such
typical usage.
drivers/pci/controller/cadence/pcie-cadence.c
drivers/net/ethernet/ti/am65-cpsw-nuss.c
Fix by using devres_release() instead of devres_destroy() within the API.
Fixes: ff764963479a ("drivers: phy: add generic PHY framework")
Cc: stable@vger.kernel.org
Cc: Lorenzo Pieralisi <lpieralisi@kernel.org>
Cc: Krzysztof Wilczyński <kw@linux.com>
Cc: Bjorn Helgaas <bhelgaas@google.com>
Cc: David S. Miller <davem@davemloft.net>
Cc: Eric Dumazet <edumazet@google.com>
Cc: Jakub Kicinski <kuba@kernel.org>
Cc: Paolo Abeni <pabeni@redhat.com>
Reviewed-by: Johan Hovold <johan+linaro@kernel.org>
Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
---
drivers/phy/phy-core.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
index f053b525ccffab1629f5e09581a6ebcc35e47f79..f190d7126613ad253b4820b9e4167dda8623439d 100644
--- a/drivers/phy/phy-core.c
+++ b/drivers/phy/phy-core.c
@@ -737,7 +737,7 @@ void devm_phy_put(struct device *dev, struct phy *phy)
if (!phy)
return;
- r = devres_destroy(dev, devm_phy_release, devm_phy_match, phy);
+ r = devres_release(dev, devm_phy_release, devm_phy_match, phy);
dev_WARN_ONCE(dev, r, "couldn't find PHY resource\n");
}
EXPORT_SYMBOL_GPL(devm_phy_put);
--
2.34.1
^ permalink raw reply [flat|nested] 9+ messages in thread* [PATCH v6 2/6] phy: core: Fix that API devm_of_phy_provider_unregister() fails to unregister the phy provider
2024-12-13 12:36 [PATCH v6 0/6] phy: core: Fix bugs for several APIs and simplify an API Zijun Hu
2024-12-13 12:36 ` [PATCH v6 1/6] phy: core: Fix that API devm_phy_put() fails to release the phy Zijun Hu
@ 2024-12-13 12:36 ` Zijun Hu
2024-12-13 12:36 ` [PATCH v6 3/6] phy: core: Fix that API devm_phy_destroy() fails to destroy the phy Zijun Hu
` (5 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Zijun Hu @ 2024-12-13 12:36 UTC (permalink / raw)
To: Vinod Koul, Kishon Vijay Abraham I, Felipe Balbi,
Greg Kroah-Hartman, Rob Herring, Arnd Bergmann, Lee Jones
Cc: Greg Kroah-Hartman, Lorenzo Pieralisi, Krzysztof Wilczyński,
Bjorn Helgaas, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Christophe JAILLET, Johan Hovold, Zijun Hu, stable,
linux-phy, linux-kernel, Zijun Hu, Johan Hovold
From: Zijun Hu <quic_zijuhu@quicinc.com>
For devm_of_phy_provider_unregister(), its comment says it needs to invoke
of_phy_provider_unregister() to unregister the phy provider, but it will
not actually invoke the function since devres_destroy() does not call
devm_phy_provider_release(), and the missing of_phy_provider_unregister()
call will cause:
- The phy provider fails to be unregistered.
- Leak both memory and the OF node refcount.
Fortunately, the faulty API has not been used by current kernel tree.
Fix by using devres_release() instead of devres_destroy() within the API.
Fixes: ff764963479a ("drivers: phy: add generic PHY framework")
Reviewed-by: Johan Hovold <johan+linaro@kernel.org>
Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
---
Why to fix the API here instead of directly deleting it?
1) it is simpler, just one line change.
2) it may be used in future.
3) ensure this restored API right if need to restore it in future
after deleting.
Anyone may remove such APIs separately later if he/she cares.
---
drivers/phy/phy-core.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
index f190d7126613ad253b4820b9e4167dda8623439d..de07e1616b34d12056024558124f3ea2469c0323 100644
--- a/drivers/phy/phy-core.c
+++ b/drivers/phy/phy-core.c
@@ -1259,12 +1259,12 @@ EXPORT_SYMBOL_GPL(of_phy_provider_unregister);
* of_phy_provider_unregister to unregister the phy provider.
*/
void devm_of_phy_provider_unregister(struct device *dev,
- struct phy_provider *phy_provider)
+ struct phy_provider *phy_provider)
{
int r;
- r = devres_destroy(dev, devm_phy_provider_release, devm_phy_match,
- phy_provider);
+ r = devres_release(dev, devm_phy_provider_release, devm_phy_match,
+ phy_provider);
dev_WARN_ONCE(dev, r, "couldn't find PHY provider device resource\n");
}
EXPORT_SYMBOL_GPL(devm_of_phy_provider_unregister);
--
2.34.1
^ permalink raw reply [flat|nested] 9+ messages in thread* [PATCH v6 3/6] phy: core: Fix that API devm_phy_destroy() fails to destroy the phy
2024-12-13 12:36 [PATCH v6 0/6] phy: core: Fix bugs for several APIs and simplify an API Zijun Hu
2024-12-13 12:36 ` [PATCH v6 1/6] phy: core: Fix that API devm_phy_put() fails to release the phy Zijun Hu
2024-12-13 12:36 ` [PATCH v6 2/6] phy: core: Fix that API devm_of_phy_provider_unregister() fails to unregister the phy provider Zijun Hu
@ 2024-12-13 12:36 ` Zijun Hu
2024-12-13 12:36 ` [PATCH v6 4/6] phy: core: Fix an OF node refcount leakage in _of_phy_get() Zijun Hu
` (4 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Zijun Hu @ 2024-12-13 12:36 UTC (permalink / raw)
To: Vinod Koul, Kishon Vijay Abraham I, Felipe Balbi,
Greg Kroah-Hartman, Rob Herring, Arnd Bergmann, Lee Jones
Cc: Greg Kroah-Hartman, Lorenzo Pieralisi, Krzysztof Wilczyński,
Bjorn Helgaas, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Christophe JAILLET, Johan Hovold, Zijun Hu, stable,
linux-phy, linux-kernel, Zijun Hu, Johan Hovold
From: Zijun Hu <quic_zijuhu@quicinc.com>
For devm_phy_destroy(), its comment says it needs to invoke phy_destroy()
to destroy the phy, but it will not actually invoke the function since
devres_destroy() does not call devm_phy_consume(), and the missing
phy_destroy() call will cause that the phy fails to be destroyed.
Fortunately, the faulty API has not been used by current kernel tree.
Fix by using devres_release() instead of devres_destroy() within the API.
Fixes: ff764963479a ("drivers: phy: add generic PHY framework")
Reviewed-by: Johan Hovold <johan+linaro@kernel.org>
Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
---
Why to fix the API here instead of directly deleting it?
1) it is simpler, just one line change.
2) it may be used in future.
3) ensure this restored API right if need to restore it in future
after deleting.
Anyone may remove such APIs separately later if he/she cares.
---
drivers/phy/phy-core.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
index de07e1616b34d12056024558124f3ea2469c0323..52ca590a58b9c303b21bf892565612a7ab92c095 100644
--- a/drivers/phy/phy-core.c
+++ b/drivers/phy/phy-core.c
@@ -1121,7 +1121,7 @@ void devm_phy_destroy(struct device *dev, struct phy *phy)
{
int r;
- r = devres_destroy(dev, devm_phy_consume, devm_phy_match, phy);
+ r = devres_release(dev, devm_phy_consume, devm_phy_match, phy);
dev_WARN_ONCE(dev, r, "couldn't find PHY resource\n");
}
EXPORT_SYMBOL_GPL(devm_phy_destroy);
--
2.34.1
^ permalink raw reply [flat|nested] 9+ messages in thread* [PATCH v6 4/6] phy: core: Fix an OF node refcount leakage in _of_phy_get()
2024-12-13 12:36 [PATCH v6 0/6] phy: core: Fix bugs for several APIs and simplify an API Zijun Hu
` (2 preceding siblings ...)
2024-12-13 12:36 ` [PATCH v6 3/6] phy: core: Fix that API devm_phy_destroy() fails to destroy the phy Zijun Hu
@ 2024-12-13 12:36 ` Zijun Hu
2024-12-13 12:36 ` [PATCH v6 5/6] phy: core: Fix an OF node refcount leakage in of_phy_provider_lookup() Zijun Hu
` (3 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Zijun Hu @ 2024-12-13 12:36 UTC (permalink / raw)
To: Vinod Koul, Kishon Vijay Abraham I, Felipe Balbi,
Greg Kroah-Hartman, Rob Herring, Arnd Bergmann, Lee Jones
Cc: Greg Kroah-Hartman, Lorenzo Pieralisi, Krzysztof Wilczyński,
Bjorn Helgaas, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Christophe JAILLET, Johan Hovold, Zijun Hu, stable,
linux-phy, linux-kernel, Zijun Hu, Johan Hovold
From: Zijun Hu <quic_zijuhu@quicinc.com>
_of_phy_get() will directly return when suffers of_device_is_compatible()
error, but it forgets to decrease refcount of OF node @args.np before error
return, the refcount was increased by previous of_parse_phandle_with_args()
so causes the OF node's refcount leakage.
Fix by decreasing the refcount via of_node_put() before the error return.
Fixes: b7563e2796f8 ("phy: work around 'phys' references to usb-nop-xceiv devices")
Cc: stable@vger.kernel.org
Reviewed-by: Johan Hovold <johan+linaro@kernel.org>
Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
---
drivers/phy/phy-core.c | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
index 52ca590a58b9c303b21bf892565612a7ab92c095..b88fbda6c046174b7abd0a0435ec54763e9f42bc 100644
--- a/drivers/phy/phy-core.c
+++ b/drivers/phy/phy-core.c
@@ -629,8 +629,10 @@ static struct phy *_of_phy_get(struct device_node *np, int index)
return ERR_PTR(-ENODEV);
/* This phy type handled by the usb-phy subsystem for now */
- if (of_device_is_compatible(args.np, "usb-nop-xceiv"))
- return ERR_PTR(-ENODEV);
+ if (of_device_is_compatible(args.np, "usb-nop-xceiv")) {
+ phy = ERR_PTR(-ENODEV);
+ goto out_put_node;
+ }
mutex_lock(&phy_provider_mutex);
phy_provider = of_phy_provider_lookup(args.np);
@@ -652,6 +654,7 @@ static struct phy *_of_phy_get(struct device_node *np, int index)
out_unlock:
mutex_unlock(&phy_provider_mutex);
+out_put_node:
of_node_put(args.np);
return phy;
--
2.34.1
^ permalink raw reply [flat|nested] 9+ messages in thread* [PATCH v6 5/6] phy: core: Fix an OF node refcount leakage in of_phy_provider_lookup()
2024-12-13 12:36 [PATCH v6 0/6] phy: core: Fix bugs for several APIs and simplify an API Zijun Hu
` (3 preceding siblings ...)
2024-12-13 12:36 ` [PATCH v6 4/6] phy: core: Fix an OF node refcount leakage in _of_phy_get() Zijun Hu
@ 2024-12-13 12:36 ` Zijun Hu
2024-12-13 12:36 ` [PATCH v6 6/6] phy: core: Simplify API of_phy_simple_xlate() implementation Zijun Hu
` (2 subsequent siblings)
7 siblings, 0 replies; 9+ messages in thread
From: Zijun Hu @ 2024-12-13 12:36 UTC (permalink / raw)
To: Vinod Koul, Kishon Vijay Abraham I, Felipe Balbi,
Greg Kroah-Hartman, Rob Herring, Arnd Bergmann, Lee Jones
Cc: Greg Kroah-Hartman, Lorenzo Pieralisi, Krzysztof Wilczyński,
Bjorn Helgaas, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Christophe JAILLET, Johan Hovold, Zijun Hu, stable,
linux-phy, linux-kernel, Zijun Hu, Johan Hovold
From: Zijun Hu <quic_zijuhu@quicinc.com>
For macro for_each_child_of_node(parent, child), refcount of @child has
been increased before entering its loop body, so normally needs to call
of_node_put(@child) before returning from the loop body to avoid refcount
leakage.
of_phy_provider_lookup() has such usage but does not call of_node_put()
before returning, so cause leakage of the OF node refcount.
Fix by simply calling of_node_put() before returning from the loop body.
The APIs affected by this issue are shown below since they indirectly
invoke problematic of_phy_provider_lookup().
phy_get()
of_phy_get()
devm_phy_get()
devm_of_phy_get()
devm_of_phy_get_by_index()
Fixes: 2a4c37016ca9 ("phy: core: Fix of_phy_provider_lookup to return PHY provider for sub node")
Cc: stable@vger.kernel.org
Reviewed-by: Johan Hovold <johan+linaro@kernel.org>
Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
---
The following kernel mainline commit fixes a similar issue:
Commit: b337cc3ce475 ("backlight: lm3509_bl: Fix early returns in for_each_child_of_node()")
---
drivers/phy/phy-core.c | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
index b88fbda6c046174b7abd0a0435ec54763e9f42bc..413f76e2d1744dd8ffb63a6c3a093f5c6cbead7b 100644
--- a/drivers/phy/phy-core.c
+++ b/drivers/phy/phy-core.c
@@ -145,8 +145,10 @@ static struct phy_provider *of_phy_provider_lookup(struct device_node *node)
return phy_provider;
for_each_child_of_node(phy_provider->children, child)
- if (child == node)
+ if (child == node) {
+ of_node_put(child);
return phy_provider;
+ }
}
return ERR_PTR(-EPROBE_DEFER);
--
2.34.1
^ permalink raw reply [flat|nested] 9+ messages in thread* [PATCH v6 6/6] phy: core: Simplify API of_phy_simple_xlate() implementation
2024-12-13 12:36 [PATCH v6 0/6] phy: core: Fix bugs for several APIs and simplify an API Zijun Hu
` (4 preceding siblings ...)
2024-12-13 12:36 ` [PATCH v6 5/6] phy: core: Fix an OF node refcount leakage in of_phy_provider_lookup() Zijun Hu
@ 2024-12-13 12:36 ` Zijun Hu
2024-12-24 14:03 ` [PATCH v6 0/6] phy: core: Fix bugs for several APIs and simplify an API Zijun Hu
2024-12-24 15:25 ` (subset) " Vinod Koul
7 siblings, 0 replies; 9+ messages in thread
From: Zijun Hu @ 2024-12-13 12:36 UTC (permalink / raw)
To: Vinod Koul, Kishon Vijay Abraham I, Felipe Balbi,
Greg Kroah-Hartman, Rob Herring, Arnd Bergmann, Lee Jones
Cc: Greg Kroah-Hartman, Lorenzo Pieralisi, Krzysztof Wilczyński,
Bjorn Helgaas, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Christophe JAILLET, Johan Hovold, Zijun Hu, stable,
linux-phy, linux-kernel, Zijun Hu, Simon Horman
From: Zijun Hu <quic_zijuhu@quicinc.com>
Simplify of_phy_simple_xlate() implementation by API
class_find_device_by_of_node().
Also correct comments to mark its parameter @dev as unused instead of
@args in passing.
Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
Cc: Simon Horman <horms@kernel.org>
---
drivers/phy/phy-core.c | 23 ++++++++---------------
1 file changed, 8 insertions(+), 15 deletions(-)
diff --git a/drivers/phy/phy-core.c b/drivers/phy/phy-core.c
index 413f76e2d1744dd8ffb63a6c3a093f5c6cbead7b..8dfdce605a905d7f38205727151258af41f807a9 100644
--- a/drivers/phy/phy-core.c
+++ b/drivers/phy/phy-core.c
@@ -749,8 +749,8 @@ EXPORT_SYMBOL_GPL(devm_phy_put);
/**
* of_phy_simple_xlate() - returns the phy instance from phy provider
- * @dev: the PHY provider device
- * @args: of_phandle_args (not used here)
+ * @dev: the PHY provider device (not used here)
+ * @args: of_phandle_args
*
* Intended to be used by phy provider for the common case where #phy-cells is
* 0. For other cases where #phy-cells is greater than '0', the phy provider
@@ -760,21 +760,14 @@ EXPORT_SYMBOL_GPL(devm_phy_put);
struct phy *of_phy_simple_xlate(struct device *dev,
const struct of_phandle_args *args)
{
- struct phy *phy;
- struct class_dev_iter iter;
-
- class_dev_iter_init(&iter, &phy_class, NULL, NULL);
- while ((dev = class_dev_iter_next(&iter))) {
- phy = to_phy(dev);
- if (args->np != phy->dev.of_node)
- continue;
+ struct device *target_dev;
- class_dev_iter_exit(&iter);
- return phy;
- }
+ target_dev = class_find_device_by_of_node(&phy_class, args->np);
+ if (!target_dev)
+ return ERR_PTR(-ENODEV);
- class_dev_iter_exit(&iter);
- return ERR_PTR(-ENODEV);
+ put_device(target_dev);
+ return to_phy(target_dev);
}
EXPORT_SYMBOL_GPL(of_phy_simple_xlate);
--
2.34.1
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: [PATCH v6 0/6] phy: core: Fix bugs for several APIs and simplify an API
2024-12-13 12:36 [PATCH v6 0/6] phy: core: Fix bugs for several APIs and simplify an API Zijun Hu
` (5 preceding siblings ...)
2024-12-13 12:36 ` [PATCH v6 6/6] phy: core: Simplify API of_phy_simple_xlate() implementation Zijun Hu
@ 2024-12-24 14:03 ` Zijun Hu
2024-12-24 15:25 ` (subset) " Vinod Koul
7 siblings, 0 replies; 9+ messages in thread
From: Zijun Hu @ 2024-12-24 14:03 UTC (permalink / raw)
To: Vinod Koul
Cc: Lorenzo Pieralisi, Krzysztof Wilczyński, Bjorn Helgaas,
David S. Miller, Eric Dumazet, Jakub Kicinski, Paolo Abeni,
Christophe JAILLET, Johan Hovold, stable, linux-phy,
linux-kernel, Zijun Hu, Johan Hovold, Simon Horman,
Kishon Vijay Abraham I, Felipe Balbi, Greg Kroah-Hartman,
Rob Herring, Arnd Bergmann, Lee Jones
On 2024/12/13 20:36, Zijun Hu wrote:
> This patch series is to fix bugs for below APIs:
>
> devm_phy_put()
> devm_of_phy_provider_unregister()
> devm_phy_destroy()
> phy_get()
> of_phy_get()
> devm_phy_get()
> devm_of_phy_get()
> devm_of_phy_get_by_index()
>
> And simplify below API:
>
> of_phy_simple_xlate().
>
> Signed-off-by: Zijun Hu <quic_zijuhu@quicinc.com>
> ---
> Changes in v6:
> - Use non-error path solution for patch 6/6.
> - Remove stable tag for both patch 2/6 and 3/6.
> - Link to v5: https://lore.kernel.org/r/20241106-phy_core_fix-v5-0-9771652eb88c@quicinc.com
Hi Vinod,
These patch series has no response for more than 1.5 months.
could you would like to have a code review ?
Sorry for this noise.
Mainline and linux-next have fixes of similar issues for your references
shown below:
For patch [1/6, 3/6]:
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=fdce49b5da6e0fb6d077986dec3e90ef2b094b50
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=d4929755e4d02bd3de3ae5569dab69cb9502c54f
For patch 6/6:
https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=dcacb364772eb463bde225176086bd7738b7102f
^ permalink raw reply [flat|nested] 9+ messages in thread* Re: (subset) [PATCH v6 0/6] phy: core: Fix bugs for several APIs and simplify an API
2024-12-13 12:36 [PATCH v6 0/6] phy: core: Fix bugs for several APIs and simplify an API Zijun Hu
` (6 preceding siblings ...)
2024-12-24 14:03 ` [PATCH v6 0/6] phy: core: Fix bugs for several APIs and simplify an API Zijun Hu
@ 2024-12-24 15:25 ` Vinod Koul
7 siblings, 0 replies; 9+ messages in thread
From: Vinod Koul @ 2024-12-24 15:25 UTC (permalink / raw)
To: Kishon Vijay Abraham I, Felipe Balbi, Greg Kroah-Hartman,
Rob Herring, Arnd Bergmann, Lee Jones, Zijun Hu
Cc: Greg Kroah-Hartman, Lorenzo Pieralisi, Krzysztof Wilczyński,
Bjorn Helgaas, David S. Miller, Eric Dumazet, Jakub Kicinski,
Paolo Abeni, Christophe JAILLET, Johan Hovold, stable, linux-phy,
linux-kernel, Zijun Hu, Johan Hovold, Simon Horman
On Fri, 13 Dec 2024 20:36:40 +0800, Zijun Hu wrote:
> This patch series is to fix bugs for below APIs:
>
> devm_phy_put()
> devm_of_phy_provider_unregister()
> devm_phy_destroy()
> phy_get()
> of_phy_get()
> devm_phy_get()
> devm_of_phy_get()
> devm_of_phy_get_by_index()
>
> [...]
Applied, thanks!
[6/6] phy: core: Simplify API of_phy_simple_xlate() implementation
commit: e6625db662120572c32ac34c371f9deefb321411
Best regards,
--
~Vinod
^ permalink raw reply [flat|nested] 9+ messages in thread