* [PATCHv2 net-next 00/18] ibm: emac: more cleanups
@ 2024-10-01 20:58 Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 01/18] net: ibm: emac: use netif_receive_skb_list Rosen Penev
` (18 more replies)
0 siblings, 19 replies; 20+ messages in thread
From: Rosen Penev @ 2024-10-01 20:58 UTC (permalink / raw)
To: netdev
Cc: andrew, davem, edumazet, kuba, pabeni, linux-kernel,
jacob.e.keller, horms, sd, chunkeey
Added devm for the submodules and removed custom init/exit functions as
EPROBE_DEFER is handled now.
v2: fixed build errors. Also added extra commits to clean the driver up
further.
Rosen Penev (18):
net: ibm: emac: use netif_receive_skb_list
net: ibm: emac: remove custom init/exit functions
net: ibm: emac: use module_platform_driver for modules
net: ibm: emac: use devm_platform_ioremap_resource
net: ibm: emac: use platform_get_irq
net: ibm: emac: remove bootlist support
net: ibm: emac: tah: use devm for kzalloc
net: ibm: emac: tah: devm_platform_get_resources
net: ibm: emac: rgmii: use devm for kzalloc
net: ibm: emac: rgmii: devm_platform_get_resource
net: ibm: emac: zmii: use devm for kzalloc
net: ibm: emac: zmii: devm_platform_get_resource
net: ibm: emac: mal: use devm for kzalloc
net: ibm: emac: mal: use devm for request_irq
net: ibm: emac: mal: move irq maps down
net: ibm: emac: mal: move alloc_netdev_dummy down
net: ibm: emac: add dcr_unmap to _remove
net: ibm: emac: mal: move dcr map down
drivers/net/ethernet/ibm/emac/core.c | 175 +++-----------------------
drivers/net/ethernet/ibm/emac/mal.c | 139 ++++++++------------
drivers/net/ethernet/ibm/emac/mal.h | 4 -
drivers/net/ethernet/ibm/emac/rgmii.c | 53 ++------
drivers/net/ethernet/ibm/emac/rgmii.h | 4 -
drivers/net/ethernet/ibm/emac/tah.c | 53 ++------
drivers/net/ethernet/ibm/emac/tah.h | 4 -
drivers/net/ethernet/ibm/emac/zmii.c | 53 ++------
drivers/net/ethernet/ibm/emac/zmii.h | 4 -
9 files changed, 94 insertions(+), 395 deletions(-)
--
2.46.2
^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCHv2 net-next 01/18] net: ibm: emac: use netif_receive_skb_list
2024-10-01 20:58 [PATCHv2 net-next 00/18] ibm: emac: more cleanups Rosen Penev
@ 2024-10-01 20:58 ` Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 02/18] net: ibm: emac: remove custom init/exit functions Rosen Penev
` (17 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Rosen Penev @ 2024-10-01 20:58 UTC (permalink / raw)
To: netdev
Cc: andrew, davem, edumazet, kuba, pabeni, linux-kernel,
jacob.e.keller, horms, sd, chunkeey
Small rx improvement. Would use napi_gro_receive instead but that's a
lot more involved than netif_receive_skb_list because of how the
function is implemented.
Before:
> iperf -c 192.168.1.1
------------------------------------------------------------
Client connecting to 192.168.1.1, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[ 1] local 192.168.1.101 port 51556 connected with 192.168.1.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 1] 0.00-10.04 sec 559 MBytes 467 Mbits/sec
> iperf -c 192.168.1.1
------------------------------------------------------------
Client connecting to 192.168.1.1, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[ 1] local 192.168.1.101 port 48228 connected with 192.168.1.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 1] 0.00-10.03 sec 558 MBytes 467 Mbits/sec
> iperf -c 192.168.1.1
------------------------------------------------------------
Client connecting to 192.168.1.1, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[ 1] local 192.168.1.101 port 47600 connected with 192.168.1.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 1] 0.00-10.04 sec 557 MBytes 466 Mbits/sec
> iperf -c 192.168.1.1
------------------------------------------------------------
Client connecting to 192.168.1.1, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[ 1] local 192.168.1.101 port 37252 connected with 192.168.1.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 1] 0.00-10.05 sec 559 MBytes 467 Mbits/sec
After:
> iperf -c 192.168.1.1
------------------------------------------------------------
Client connecting to 192.168.1.1, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[ 1] local 192.168.1.101 port 40786 connected with 192.168.1.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 1] 0.00-10.05 sec 572 MBytes 478 Mbits/sec
> iperf -c 192.168.1.1
------------------------------------------------------------
Client connecting to 192.168.1.1, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[ 1] local 192.168.1.101 port 52482 connected with 192.168.1.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 1] 0.00-10.04 sec 571 MBytes 477 Mbits/sec
> iperf -c 192.168.1.1
------------------------------------------------------------
Client connecting to 192.168.1.1, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[ 1] local 192.168.1.101 port 48370 connected with 192.168.1.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 1] 0.00-10.04 sec 572 MBytes 478 Mbits/sec
> iperf -c 192.168.1.1
------------------------------------------------------------
Client connecting to 192.168.1.1, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[ 1] local 192.168.1.101 port 46086 connected with 192.168.1.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 1] 0.00-10.05 sec 571 MBytes 476 Mbits/sec
> iperf -c 192.168.1.1
------------------------------------------------------------
Client connecting to 192.168.1.1, TCP port 5001
TCP window size: 16.0 KByte (default)
------------------------------------------------------------
[ 1] local 192.168.1.101 port 46062 connected with 192.168.1.1 port 5001
[ ID] Interval Transfer Bandwidth
[ 1] 0.00-10.04 sec 572 MBytes 478 Mbits/sec
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/net/ethernet/ibm/emac/core.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c
index dac570f3c110..d476844bae3e 100644
--- a/drivers/net/ethernet/ibm/emac/core.c
+++ b/drivers/net/ethernet/ibm/emac/core.c
@@ -1727,6 +1727,7 @@ static inline int emac_rx_sg_append(struct emac_instance *dev, int slot)
/* NAPI poll context */
static int emac_poll_rx(void *param, int budget)
{
+ LIST_HEAD(rx_list);
struct emac_instance *dev = param;
int slot = dev->rx_slot, received = 0;
@@ -1783,8 +1784,7 @@ static int emac_poll_rx(void *param, int budget)
skb->protocol = eth_type_trans(skb, dev->ndev);
emac_rx_csum(dev, skb, ctrl);
- if (unlikely(netif_receive_skb(skb) == NET_RX_DROP))
- ++dev->estats.rx_dropped_stack;
+ list_add_tail(&skb->list, &rx_list);
next:
++dev->stats.rx_packets;
skip:
@@ -1828,6 +1828,8 @@ static int emac_poll_rx(void *param, int budget)
goto next;
}
+ netif_receive_skb_list(&rx_list);
+
if (received) {
DBG2(dev, "rx %d BDs" NL, received);
dev->rx_slot = slot;
--
2.46.2
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCHv2 net-next 02/18] net: ibm: emac: remove custom init/exit functions
2024-10-01 20:58 [PATCHv2 net-next 00/18] ibm: emac: more cleanups Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 01/18] net: ibm: emac: use netif_receive_skb_list Rosen Penev
@ 2024-10-01 20:58 ` Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 03/18] net: ibm: emac: use module_platform_driver for modules Rosen Penev
` (16 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Rosen Penev @ 2024-10-01 20:58 UTC (permalink / raw)
To: netdev
Cc: andrew, davem, edumazet, kuba, pabeni, linux-kernel,
jacob.e.keller, horms, sd, chunkeey
Now that we're using EPROBE_DEFER, we don't have to do custom
initialization and we can let the core handle this for us.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/net/ethernet/ibm/emac/core.c | 39 +--------------------------
drivers/net/ethernet/ibm/emac/mal.h | 4 ---
drivers/net/ethernet/ibm/emac/rgmii.h | 4 ---
drivers/net/ethernet/ibm/emac/tah.h | 4 ---
drivers/net/ethernet/ibm/emac/zmii.h | 4 ---
5 files changed, 1 insertion(+), 54 deletions(-)
diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c
index d476844bae3e..97ae0b7ccb0d 100644
--- a/drivers/net/ethernet/ibm/emac/core.c
+++ b/drivers/net/ethernet/ibm/emac/core.c
@@ -3283,42 +3283,10 @@ static void __init emac_make_bootlist(void)
static int __init emac_init(void)
{
- int rc;
-
- printk(KERN_INFO DRV_DESC ", version " DRV_VERSION "\n");
-
/* Build EMAC boot list */
emac_make_bootlist();
- /* Init submodules */
- rc = mal_init();
- if (rc)
- goto err;
- rc = zmii_init();
- if (rc)
- goto err_mal;
- rc = rgmii_init();
- if (rc)
- goto err_zmii;
- rc = tah_init();
- if (rc)
- goto err_rgmii;
- rc = platform_driver_register(&emac_driver);
- if (rc)
- goto err_tah;
-
- return 0;
-
- err_tah:
- tah_exit();
- err_rgmii:
- rgmii_exit();
- err_zmii:
- zmii_exit();
- err_mal:
- mal_exit();
- err:
- return rc;
+ return platform_driver_register(&emac_driver);
}
static void __exit emac_exit(void)
@@ -3327,11 +3295,6 @@ static void __exit emac_exit(void)
platform_driver_unregister(&emac_driver);
- tah_exit();
- rgmii_exit();
- zmii_exit();
- mal_exit();
-
/* Destroy EMAC boot list */
for (i = 0; i < EMAC_BOOT_LIST_SIZE; i++)
of_node_put(emac_boot_list[i]);
diff --git a/drivers/net/ethernet/ibm/emac/mal.h b/drivers/net/ethernet/ibm/emac/mal.h
index e0ddc41186a2..2963b36be6f5 100644
--- a/drivers/net/ethernet/ibm/emac/mal.h
+++ b/drivers/net/ethernet/ibm/emac/mal.h
@@ -252,10 +252,6 @@ static inline int mal_has_feature(struct mal_instance *dev,
(MAL_FTRS_POSSIBLE & dev->features & feature);
}
-/* Register MAL devices */
-int mal_init(void);
-void mal_exit(void);
-
int mal_register_commac(struct mal_instance *mal,
struct mal_commac *commac);
void mal_unregister_commac(struct mal_instance *mal,
diff --git a/drivers/net/ethernet/ibm/emac/rgmii.h b/drivers/net/ethernet/ibm/emac/rgmii.h
index 8e4e36eed172..170bcd35039b 100644
--- a/drivers/net/ethernet/ibm/emac/rgmii.h
+++ b/drivers/net/ethernet/ibm/emac/rgmii.h
@@ -52,8 +52,6 @@ struct rgmii_instance {
#ifdef CONFIG_IBM_EMAC_RGMII
-int rgmii_init(void);
-void rgmii_exit(void);
int rgmii_attach(struct platform_device *ofdev, int input, int mode);
void rgmii_detach(struct platform_device *ofdev, int input);
void rgmii_get_mdio(struct platform_device *ofdev, int input);
@@ -64,8 +62,6 @@ void *rgmii_dump_regs(struct platform_device *ofdev, void *buf);
#else
-# define rgmii_init() 0
-# define rgmii_exit() do { } while(0)
# define rgmii_attach(x,y,z) (-ENXIO)
# define rgmii_detach(x,y) do { } while(0)
# define rgmii_get_mdio(o,i) do { } while (0)
diff --git a/drivers/net/ethernet/ibm/emac/tah.h b/drivers/net/ethernet/ibm/emac/tah.h
index 86c2b6b9d460..60c16cf7a41a 100644
--- a/drivers/net/ethernet/ibm/emac/tah.h
+++ b/drivers/net/ethernet/ibm/emac/tah.h
@@ -68,8 +68,6 @@ struct tah_instance {
#ifdef CONFIG_IBM_EMAC_TAH
-int tah_init(void);
-void tah_exit(void);
int tah_attach(struct platform_device *ofdev, int channel);
void tah_detach(struct platform_device *ofdev, int channel);
void tah_reset(struct platform_device *ofdev);
@@ -78,8 +76,6 @@ void *tah_dump_regs(struct platform_device *ofdev, void *buf);
#else
-# define tah_init() 0
-# define tah_exit() do { } while(0)
# define tah_attach(x,y) (-ENXIO)
# define tah_detach(x,y) do { } while(0)
# define tah_reset(x) do { } while(0)
diff --git a/drivers/net/ethernet/ibm/emac/zmii.h b/drivers/net/ethernet/ibm/emac/zmii.h
index 65daedc78594..213de06d8ea2 100644
--- a/drivers/net/ethernet/ibm/emac/zmii.h
+++ b/drivers/net/ethernet/ibm/emac/zmii.h
@@ -48,8 +48,6 @@ struct zmii_instance {
#ifdef CONFIG_IBM_EMAC_ZMII
-int zmii_init(void);
-void zmii_exit(void);
int zmii_attach(struct platform_device *ofdev, int input,
phy_interface_t *mode);
void zmii_detach(struct platform_device *ofdev, int input);
@@ -60,8 +58,6 @@ int zmii_get_regs_len(struct platform_device *ocpdev);
void *zmii_dump_regs(struct platform_device *ofdev, void *buf);
#else
-# define zmii_init() 0
-# define zmii_exit() do { } while(0)
# define zmii_attach(x,y,z) (-ENXIO)
# define zmii_detach(x,y) do { } while(0)
# define zmii_get_mdio(x,y) do { } while(0)
--
2.46.2
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCHv2 net-next 03/18] net: ibm: emac: use module_platform_driver for modules
2024-10-01 20:58 [PATCHv2 net-next 00/18] ibm: emac: more cleanups Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 01/18] net: ibm: emac: use netif_receive_skb_list Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 02/18] net: ibm: emac: remove custom init/exit functions Rosen Penev
@ 2024-10-01 20:58 ` Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 04/18] net: ibm: emac: use devm_platform_ioremap_resource Rosen Penev
` (15 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Rosen Penev @ 2024-10-01 20:58 UTC (permalink / raw)
To: netdev
Cc: andrew, davem, edumazet, kuba, pabeni, linux-kernel,
jacob.e.keller, horms, sd, chunkeey
These init and exit functions don't do anything special. Just macro it
away.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/net/ethernet/ibm/emac/mal.c | 10 +---------
drivers/net/ethernet/ibm/emac/rgmii.c | 10 +---------
drivers/net/ethernet/ibm/emac/tah.c | 10 +---------
drivers/net/ethernet/ibm/emac/zmii.c | 10 +---------
4 files changed, 4 insertions(+), 36 deletions(-)
diff --git a/drivers/net/ethernet/ibm/emac/mal.c b/drivers/net/ethernet/ibm/emac/mal.c
index d92dd9c83031..a632d3a207d3 100644
--- a/drivers/net/ethernet/ibm/emac/mal.c
+++ b/drivers/net/ethernet/ibm/emac/mal.c
@@ -779,12 +779,4 @@ static struct platform_driver mal_of_driver = {
.remove_new = mal_remove,
};
-int __init mal_init(void)
-{
- return platform_driver_register(&mal_of_driver);
-}
-
-void mal_exit(void)
-{
- platform_driver_unregister(&mal_of_driver);
-}
+module_platform_driver(mal_of_driver);
diff --git a/drivers/net/ethernet/ibm/emac/rgmii.c b/drivers/net/ethernet/ibm/emac/rgmii.c
index e1712fdc3c31..52f080661f87 100644
--- a/drivers/net/ethernet/ibm/emac/rgmii.c
+++ b/drivers/net/ethernet/ibm/emac/rgmii.c
@@ -303,12 +303,4 @@ static struct platform_driver rgmii_driver = {
.remove_new = rgmii_remove,
};
-int __init rgmii_init(void)
-{
- return platform_driver_register(&rgmii_driver);
-}
-
-void rgmii_exit(void)
-{
- platform_driver_unregister(&rgmii_driver);
-}
+module_platform_driver(rgmii_driver);
diff --git a/drivers/net/ethernet/ibm/emac/tah.c b/drivers/net/ethernet/ibm/emac/tah.c
index fa3488258ca2..8407ff83b1d3 100644
--- a/drivers/net/ethernet/ibm/emac/tah.c
+++ b/drivers/net/ethernet/ibm/emac/tah.c
@@ -161,12 +161,4 @@ static struct platform_driver tah_driver = {
.remove_new = tah_remove,
};
-int __init tah_init(void)
-{
- return platform_driver_register(&tah_driver);
-}
-
-void tah_exit(void)
-{
- platform_driver_unregister(&tah_driver);
-}
+module_platform_driver(tah_driver);
diff --git a/drivers/net/ethernet/ibm/emac/zmii.c b/drivers/net/ethernet/ibm/emac/zmii.c
index 26e86cdee2f6..97cea64abe55 100644
--- a/drivers/net/ethernet/ibm/emac/zmii.c
+++ b/drivers/net/ethernet/ibm/emac/zmii.c
@@ -309,12 +309,4 @@ static struct platform_driver zmii_driver = {
.remove_new = zmii_remove,
};
-int __init zmii_init(void)
-{
- return platform_driver_register(&zmii_driver);
-}
-
-void zmii_exit(void)
-{
- platform_driver_unregister(&zmii_driver);
-}
+module_platform_driver(zmii_driver);
--
2.46.2
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCHv2 net-next 04/18] net: ibm: emac: use devm_platform_ioremap_resource
2024-10-01 20:58 [PATCHv2 net-next 00/18] ibm: emac: more cleanups Rosen Penev
` (2 preceding siblings ...)
2024-10-01 20:58 ` [PATCHv2 net-next 03/18] net: ibm: emac: use module_platform_driver for modules Rosen Penev
@ 2024-10-01 20:58 ` Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 05/18] net: ibm: emac: use platform_get_irq Rosen Penev
` (14 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Rosen Penev @ 2024-10-01 20:58 UTC (permalink / raw)
To: netdev
Cc: andrew, davem, edumazet, kuba, pabeni, linux-kernel,
jacob.e.keller, horms, sd, chunkeey
No need to have a struct resource. Gets rid of the TODO.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/net/ethernet/ibm/emac/core.c | 8 +++-----
1 file changed, 3 insertions(+), 5 deletions(-)
diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c
index 97ae0b7ccb0d..205ba7aa02d4 100644
--- a/drivers/net/ethernet/ibm/emac/core.c
+++ b/drivers/net/ethernet/ibm/emac/core.c
@@ -3050,12 +3050,10 @@ static int emac_probe(struct platform_device *ofdev)
ndev->irq = dev->emac_irq;
- /* Map EMAC regs */
- // TODO : platform_get_resource() and devm_ioremap_resource()
- dev->emacp = devm_of_iomap(&ofdev->dev, np, 0, NULL);
- if (!dev->emacp) {
+ dev->emacp = devm_platform_ioremap_resource(ofdev, 0);
+ if (IS_ERR(dev->emacp)) {
dev_err(&ofdev->dev, "can't map device registers");
- err = -ENOMEM;
+ err = PTR_ERR(dev->emacp);
goto err_gone;
}
--
2.46.2
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCHv2 net-next 05/18] net: ibm: emac: use platform_get_irq
2024-10-01 20:58 [PATCHv2 net-next 00/18] ibm: emac: more cleanups Rosen Penev
` (3 preceding siblings ...)
2024-10-01 20:58 ` [PATCHv2 net-next 04/18] net: ibm: emac: use devm_platform_ioremap_resource Rosen Penev
@ 2024-10-01 20:58 ` Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 06/18] net: ibm: emac: remove bootlist support Rosen Penev
` (13 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Rosen Penev @ 2024-10-01 20:58 UTC (permalink / raw)
To: netdev
Cc: andrew, davem, edumazet, kuba, pabeni, linux-kernel,
jacob.e.keller, horms, sd, chunkeey
No need for irq_of_parse_and_map since we have platform_device.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/net/ethernet/ibm/emac/core.c | 9 +--------
1 file changed, 1 insertion(+), 8 deletions(-)
diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c
index 205ba7aa02d4..a55e84eb1d4d 100644
--- a/drivers/net/ethernet/ibm/emac/core.c
+++ b/drivers/net/ethernet/ibm/emac/core.c
@@ -3031,15 +3031,8 @@ static int emac_probe(struct platform_device *ofdev)
if (err)
goto err_gone;
- /* Get interrupts. EMAC irq is mandatory */
- dev->emac_irq = irq_of_parse_and_map(np, 0);
- if (!dev->emac_irq) {
- printk(KERN_ERR "%pOF: Can't map main interrupt\n", np);
- err = -ENODEV;
- goto err_gone;
- }
-
/* Setup error IRQ handler */
+ dev->emac_irq = platform_get_irq(ofdev, 0);
err = devm_request_irq(&ofdev->dev, dev->emac_irq, emac_irq, 0, "EMAC",
dev);
if (err) {
--
2.46.2
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCHv2 net-next 06/18] net: ibm: emac: remove bootlist support
2024-10-01 20:58 [PATCHv2 net-next 00/18] ibm: emac: more cleanups Rosen Penev
` (4 preceding siblings ...)
2024-10-01 20:58 ` [PATCHv2 net-next 05/18] net: ibm: emac: use platform_get_irq Rosen Penev
@ 2024-10-01 20:58 ` Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 07/18] net: ibm: emac: tah: use devm for kzalloc Rosen Penev
` (12 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Rosen Penev @ 2024-10-01 20:58 UTC (permalink / raw)
To: netdev
Cc: andrew, davem, edumazet, kuba, pabeni, linux-kernel,
jacob.e.keller, horms, sd, chunkeey
This seems to be mainly used for deterministic interfaces. systemd
already does this in userspace.
Allows simplifying the driver with a single module_platform_driver.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/net/ethernet/ibm/emac/core.c | 117 +++------------------------
1 file changed, 9 insertions(+), 108 deletions(-)
diff --git a/drivers/net/ethernet/ibm/emac/core.c b/drivers/net/ethernet/ibm/emac/core.c
index a55e84eb1d4d..a4701e2f9f73 100644
--- a/drivers/net/ethernet/ibm/emac/core.c
+++ b/drivers/net/ethernet/ibm/emac/core.c
@@ -95,21 +95,6 @@ MODULE_LICENSE("GPL");
static u32 busy_phy_map;
static DEFINE_MUTEX(emac_phy_map_lock);
-/* Having stable interface names is a doomed idea. However, it would be nice
- * if we didn't have completely random interface names at boot too :-) It's
- * just a matter of making everybody's life easier. Since we are doing
- * threaded probing, it's a bit harder though. The base idea here is that
- * we make up a list of all emacs in the device-tree before we register the
- * driver. Every emac will then wait for the previous one in the list to
- * initialize before itself. We should also keep that list ordered by
- * cell_index.
- * That list is only 4 entries long, meaning that additional EMACs don't
- * get ordering guarantees unless EMAC_BOOT_LIST_SIZE is increased.
- */
-
-#define EMAC_BOOT_LIST_SIZE 4
-static struct device_node *emac_boot_list[EMAC_BOOT_LIST_SIZE];
-
/* I don't want to litter system log with timeout errors
* when we have brain-damaged PHY.
*/
@@ -2330,14 +2315,12 @@ struct emac_depentry {
#define EMAC_DEP_RGMII_IDX 2
#define EMAC_DEP_TAH_IDX 3
#define EMAC_DEP_MDIO_IDX 4
-#define EMAC_DEP_PREV_IDX 5
-#define EMAC_DEP_COUNT 6
+#define EMAC_DEP_COUNT 5
static int emac_check_deps(struct emac_instance *dev,
struct emac_depentry *deps)
{
int i, there = 0;
- struct device_node *np;
for (i = 0; i < EMAC_DEP_COUNT; i++) {
/* no dependency on that item, allright */
@@ -2345,17 +2328,6 @@ static int emac_check_deps(struct emac_instance *dev,
there++;
continue;
}
- /* special case for blist as the dependency might go away */
- if (i == EMAC_DEP_PREV_IDX) {
- np = *(dev->blist - 1);
- if (np == NULL) {
- deps[i].phandle = 0;
- there++;
- continue;
- }
- if (deps[i].node == NULL)
- deps[i].node = of_node_get(np);
- }
if (deps[i].node == NULL)
deps[i].node = of_find_node_by_phandle(deps[i].phandle);
if (deps[i].node == NULL)
@@ -2397,8 +2369,6 @@ static int emac_wait_deps(struct emac_instance *dev)
deps[EMAC_DEP_TAH_IDX].phandle = dev->tah_ph;
if (dev->mdio_ph)
deps[EMAC_DEP_MDIO_IDX].phandle = dev->mdio_ph;
- if (dev->blist && dev->blist > emac_boot_list)
- deps[EMAC_DEP_PREV_IDX].phandle = 0xffffffffu;
err = emac_check_deps(dev, deps);
for (i = 0; i < EMAC_DEP_COUNT; i++) {
of_node_put(deps[i].node);
@@ -2412,7 +2382,6 @@ static int emac_wait_deps(struct emac_instance *dev)
dev->tah_dev = deps[EMAC_DEP_TAH_IDX].ofdev;
dev->mdio_dev = deps[EMAC_DEP_MDIO_IDX].ofdev;
}
- platform_device_put(deps[EMAC_DEP_PREV_IDX].ofdev);
return err;
}
@@ -2993,8 +2962,7 @@ static int emac_probe(struct platform_device *ofdev)
struct net_device *ndev;
struct emac_instance *dev;
struct device_node *np = ofdev->dev.of_node;
- struct device_node **blist = NULL;
- int err, i;
+ int err;
/* Skip unused/unwired EMACS. We leave the check for an unused
* property here for now, but new flat device trees should set a
@@ -3003,21 +2971,14 @@ static int emac_probe(struct platform_device *ofdev)
if (of_property_read_bool(np, "unused") || !of_device_is_available(np))
return -ENODEV;
- /* Find ourselves in the bootlist if we are there */
- for (i = 0; i < EMAC_BOOT_LIST_SIZE; i++)
- if (emac_boot_list[i] == np)
- blist = &emac_boot_list[i];
-
/* Allocate our net_device structure */
- err = -ENOMEM;
ndev = devm_alloc_etherdev(&ofdev->dev, sizeof(struct emac_instance));
if (!ndev)
- goto err_gone;
+ return -ENOMEM;
dev = netdev_priv(ndev);
dev->ndev = ndev;
dev->ofdev = ofdev;
- dev->blist = blist;
SET_NETDEV_DEV(ndev, &ofdev->dev);
/* Initialize some embedded data structures */
@@ -3029,16 +2990,15 @@ static int emac_probe(struct platform_device *ofdev)
/* Init various config data based on device-tree */
err = emac_init_config(dev);
if (err)
- goto err_gone;
+ return err;
/* Setup error IRQ handler */
dev->emac_irq = platform_get_irq(ofdev, 0);
err = devm_request_irq(&ofdev->dev, dev->emac_irq, emac_irq, 0, "EMAC",
dev);
if (err) {
- dev_err_probe(&ofdev->dev, err, "failed to request IRQ %d",
- dev->emac_irq);
- goto err_gone;
+ return dev_err_probe(&ofdev->dev, err,
+ "failed to request IRQ %d", dev->emac_irq);
}
ndev->irq = dev->emac_irq;
@@ -3046,14 +3006,13 @@ static int emac_probe(struct platform_device *ofdev)
dev->emacp = devm_platform_ioremap_resource(ofdev, 0);
if (IS_ERR(dev->emacp)) {
dev_err(&ofdev->dev, "can't map device registers");
- err = PTR_ERR(dev->emacp);
- goto err_gone;
+ return PTR_ERR(dev->emacp);
}
/* Wait for dependent devices */
err = emac_wait_deps(dev);
if (err)
- goto err_gone;
+ return err;
dev->mal = platform_get_drvdata(dev->mal_dev);
if (dev->mdio_dev != NULL)
dev->mdio_instance = platform_get_drvdata(dev->mdio_dev);
@@ -3181,9 +3140,6 @@ static int emac_probe(struct platform_device *ofdev)
mal_unregister_commac(dev->mal, &dev->commac);
err_rel_deps:
emac_put_deps(dev);
- err_gone:
- if (blist)
- *blist = NULL;
return err;
}
@@ -3237,59 +3193,4 @@ static struct platform_driver emac_driver = {
.remove_new = emac_remove,
};
-static void __init emac_make_bootlist(void)
-{
- struct device_node *np = NULL;
- int j, max, i = 0;
- int cell_indices[EMAC_BOOT_LIST_SIZE];
-
- /* Collect EMACs */
- while((np = of_find_all_nodes(np)) != NULL) {
- u32 idx;
-
- if (of_match_node(emac_match, np) == NULL)
- continue;
- if (of_property_read_bool(np, "unused"))
- continue;
- if (of_property_read_u32(np, "cell-index", &idx))
- continue;
- cell_indices[i] = idx;
- emac_boot_list[i++] = of_node_get(np);
- if (i >= EMAC_BOOT_LIST_SIZE) {
- of_node_put(np);
- break;
- }
- }
- max = i;
-
- /* Bubble sort them (doh, what a creative algorithm :-) */
- for (i = 0; max > 1 && (i < (max - 1)); i++)
- for (j = i; j < max; j++) {
- if (cell_indices[i] > cell_indices[j]) {
- swap(emac_boot_list[i], emac_boot_list[j]);
- swap(cell_indices[i], cell_indices[j]);
- }
- }
-}
-
-static int __init emac_init(void)
-{
- /* Build EMAC boot list */
- emac_make_bootlist();
-
- return platform_driver_register(&emac_driver);
-}
-
-static void __exit emac_exit(void)
-{
- int i;
-
- platform_driver_unregister(&emac_driver);
-
- /* Destroy EMAC boot list */
- for (i = 0; i < EMAC_BOOT_LIST_SIZE; i++)
- of_node_put(emac_boot_list[i]);
-}
-
-module_init(emac_init);
-module_exit(emac_exit);
+module_platform_driver(emac_driver);
--
2.46.2
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCHv2 net-next 07/18] net: ibm: emac: tah: use devm for kzalloc
2024-10-01 20:58 [PATCHv2 net-next 00/18] ibm: emac: more cleanups Rosen Penev
` (5 preceding siblings ...)
2024-10-01 20:58 ` [PATCHv2 net-next 06/18] net: ibm: emac: remove bootlist support Rosen Penev
@ 2024-10-01 20:58 ` Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 08/18] net: ibm: emac: tah: devm_platform_get_resources Rosen Penev
` (11 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Rosen Penev @ 2024-10-01 20:58 UTC (permalink / raw)
To: netdev
Cc: andrew, davem, edumazet, kuba, pabeni, linux-kernel,
jacob.e.keller, horms, sd, chunkeey
Simplifies the probe function by removing gotos.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/net/ethernet/ibm/emac/tah.c | 21 ++++++---------------
1 file changed, 6 insertions(+), 15 deletions(-)
diff --git a/drivers/net/ethernet/ibm/emac/tah.c b/drivers/net/ethernet/ibm/emac/tah.c
index 8407ff83b1d3..03e0a4445569 100644
--- a/drivers/net/ethernet/ibm/emac/tah.c
+++ b/drivers/net/ethernet/ibm/emac/tah.c
@@ -90,28 +90,25 @@ static int tah_probe(struct platform_device *ofdev)
struct device_node *np = ofdev->dev.of_node;
struct tah_instance *dev;
struct resource regs;
- int rc;
- rc = -ENOMEM;
- dev = kzalloc(sizeof(struct tah_instance), GFP_KERNEL);
- if (dev == NULL)
- goto err_gone;
+ dev = devm_kzalloc(&ofdev->dev, sizeof(struct tah_instance),
+ GFP_KERNEL);
+ if (!dev)
+ return -ENOMEM;
mutex_init(&dev->lock);
dev->ofdev = ofdev;
- rc = -ENXIO;
if (of_address_to_resource(np, 0, ®s)) {
printk(KERN_ERR "%pOF: Can't get registers address\n", np);
- goto err_free;
+ return -ENXIO;
}
- rc = -ENOMEM;
dev->base = (struct tah_regs __iomem *)ioremap(regs.start,
sizeof(struct tah_regs));
if (dev->base == NULL) {
printk(KERN_ERR "%pOF: Can't map device registers!\n", np);
- goto err_free;
+ return -ENOMEM;
}
platform_set_drvdata(ofdev, dev);
@@ -123,11 +120,6 @@ static int tah_probe(struct platform_device *ofdev)
wmb();
return 0;
-
- err_free:
- kfree(dev);
- err_gone:
- return rc;
}
static void tah_remove(struct platform_device *ofdev)
@@ -137,7 +129,6 @@ static void tah_remove(struct platform_device *ofdev)
WARN_ON(dev->users != 0);
iounmap(dev->base);
- kfree(dev);
}
static const struct of_device_id tah_match[] =
--
2.46.2
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCHv2 net-next 08/18] net: ibm: emac: tah: devm_platform_get_resources
2024-10-01 20:58 [PATCHv2 net-next 00/18] ibm: emac: more cleanups Rosen Penev
` (6 preceding siblings ...)
2024-10-01 20:58 ` [PATCHv2 net-next 07/18] net: ibm: emac: tah: use devm for kzalloc Rosen Penev
@ 2024-10-01 20:58 ` Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 09/18] net: ibm: emac: rgmii: use devm for kzalloc Rosen Penev
` (10 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Rosen Penev @ 2024-10-01 20:58 UTC (permalink / raw)
To: netdev
Cc: andrew, davem, edumazet, kuba, pabeni, linux-kernel,
jacob.e.keller, horms, sd, chunkeey
Simplifies the probe function by a bit and allows removing the _remove
function such that devm now handles all cleanup.
printk gets converted to dev_err as np is now gone.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/net/ethernet/ibm/emac/tah.c | 26 ++++----------------------
1 file changed, 4 insertions(+), 22 deletions(-)
diff --git a/drivers/net/ethernet/ibm/emac/tah.c b/drivers/net/ethernet/ibm/emac/tah.c
index 03e0a4445569..27c1b3f77125 100644
--- a/drivers/net/ethernet/ibm/emac/tah.c
+++ b/drivers/net/ethernet/ibm/emac/tah.c
@@ -87,9 +87,7 @@ void *tah_dump_regs(struct platform_device *ofdev, void *buf)
static int tah_probe(struct platform_device *ofdev)
{
- struct device_node *np = ofdev->dev.of_node;
struct tah_instance *dev;
- struct resource regs;
dev = devm_kzalloc(&ofdev->dev, sizeof(struct tah_instance),
GFP_KERNEL);
@@ -99,16 +97,10 @@ static int tah_probe(struct platform_device *ofdev)
mutex_init(&dev->lock);
dev->ofdev = ofdev;
- if (of_address_to_resource(np, 0, ®s)) {
- printk(KERN_ERR "%pOF: Can't get registers address\n", np);
- return -ENXIO;
- }
-
- dev->base = (struct tah_regs __iomem *)ioremap(regs.start,
- sizeof(struct tah_regs));
- if (dev->base == NULL) {
- printk(KERN_ERR "%pOF: Can't map device registers!\n", np);
- return -ENOMEM;
+ dev->base = devm_platform_ioremap_resource(ofdev, 0);
+ if (IS_ERR(dev->base)) {
+ dev_err(&ofdev->dev, "can't map device registers");
+ return PTR_ERR(dev->base);
}
platform_set_drvdata(ofdev, dev);
@@ -122,15 +114,6 @@ static int tah_probe(struct platform_device *ofdev)
return 0;
}
-static void tah_remove(struct platform_device *ofdev)
-{
- struct tah_instance *dev = platform_get_drvdata(ofdev);
-
- WARN_ON(dev->users != 0);
-
- iounmap(dev->base);
-}
-
static const struct of_device_id tah_match[] =
{
{
@@ -149,7 +132,6 @@ static struct platform_driver tah_driver = {
.of_match_table = tah_match,
},
.probe = tah_probe,
- .remove_new = tah_remove,
};
module_platform_driver(tah_driver);
--
2.46.2
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCHv2 net-next 09/18] net: ibm: emac: rgmii: use devm for kzalloc
2024-10-01 20:58 [PATCHv2 net-next 00/18] ibm: emac: more cleanups Rosen Penev
` (7 preceding siblings ...)
2024-10-01 20:58 ` [PATCHv2 net-next 08/18] net: ibm: emac: tah: devm_platform_get_resources Rosen Penev
@ 2024-10-01 20:58 ` Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 10/18] net: ibm: emac: rgmii: devm_platform_get_resource Rosen Penev
` (9 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Rosen Penev @ 2024-10-01 20:58 UTC (permalink / raw)
To: netdev
Cc: andrew, davem, edumazet, kuba, pabeni, linux-kernel,
jacob.e.keller, horms, sd, chunkeey
Simplifies the probe function by removing gotos.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/net/ethernet/ibm/emac/rgmii.c | 21 ++++++---------------
1 file changed, 6 insertions(+), 15 deletions(-)
diff --git a/drivers/net/ethernet/ibm/emac/rgmii.c b/drivers/net/ethernet/ibm/emac/rgmii.c
index 52f080661f87..8c646a5e5c56 100644
--- a/drivers/net/ethernet/ibm/emac/rgmii.c
+++ b/drivers/net/ethernet/ibm/emac/rgmii.c
@@ -219,28 +219,25 @@ static int rgmii_probe(struct platform_device *ofdev)
struct device_node *np = ofdev->dev.of_node;
struct rgmii_instance *dev;
struct resource regs;
- int rc;
- rc = -ENOMEM;
- dev = kzalloc(sizeof(struct rgmii_instance), GFP_KERNEL);
- if (dev == NULL)
- goto err_gone;
+ dev = devm_kzalloc(&ofdev->dev, sizeof(struct rgmii_instance),
+ GFP_KERNEL);
+ if (!dev)
+ return -ENOMEM;
mutex_init(&dev->lock);
dev->ofdev = ofdev;
- rc = -ENXIO;
if (of_address_to_resource(np, 0, ®s)) {
printk(KERN_ERR "%pOF: Can't get registers address\n", np);
- goto err_free;
+ return -ENXIO;
}
- rc = -ENOMEM;
dev->base = (struct rgmii_regs __iomem *)ioremap(regs.start,
sizeof(struct rgmii_regs));
if (dev->base == NULL) {
printk(KERN_ERR "%pOF: Can't map device registers!\n", np);
- goto err_free;
+ return -ENOMEM;
}
/* Check for RGMII flags */
@@ -266,11 +263,6 @@ static int rgmii_probe(struct platform_device *ofdev)
platform_set_drvdata(ofdev, dev);
return 0;
-
- err_free:
- kfree(dev);
- err_gone:
- return rc;
}
static void rgmii_remove(struct platform_device *ofdev)
@@ -280,7 +272,6 @@ static void rgmii_remove(struct platform_device *ofdev)
WARN_ON(dev->users != 0);
iounmap(dev->base);
- kfree(dev);
}
static const struct of_device_id rgmii_match[] =
--
2.46.2
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCHv2 net-next 10/18] net: ibm: emac: rgmii: devm_platform_get_resource
2024-10-01 20:58 [PATCHv2 net-next 00/18] ibm: emac: more cleanups Rosen Penev
` (8 preceding siblings ...)
2024-10-01 20:58 ` [PATCHv2 net-next 09/18] net: ibm: emac: rgmii: use devm for kzalloc Rosen Penev
@ 2024-10-01 20:58 ` Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 11/18] net: ibm: emac: zmii: use devm for kzalloc Rosen Penev
` (8 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Rosen Penev @ 2024-10-01 20:58 UTC (permalink / raw)
To: netdev
Cc: andrew, davem, edumazet, kuba, pabeni, linux-kernel,
jacob.e.keller, horms, sd, chunkeey
Simplifies the probe function by a bit and allows removing the _remove
function such that devm now handles all cleanup.
printk gets converted to dev_err as np is now gone.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/net/ethernet/ibm/emac/rgmii.c | 26 ++++----------------------
1 file changed, 4 insertions(+), 22 deletions(-)
diff --git a/drivers/net/ethernet/ibm/emac/rgmii.c b/drivers/net/ethernet/ibm/emac/rgmii.c
index 8c646a5e5c56..25a13a00a614 100644
--- a/drivers/net/ethernet/ibm/emac/rgmii.c
+++ b/drivers/net/ethernet/ibm/emac/rgmii.c
@@ -216,9 +216,7 @@ void *rgmii_dump_regs(struct platform_device *ofdev, void *buf)
static int rgmii_probe(struct platform_device *ofdev)
{
- struct device_node *np = ofdev->dev.of_node;
struct rgmii_instance *dev;
- struct resource regs;
dev = devm_kzalloc(&ofdev->dev, sizeof(struct rgmii_instance),
GFP_KERNEL);
@@ -228,16 +226,10 @@ static int rgmii_probe(struct platform_device *ofdev)
mutex_init(&dev->lock);
dev->ofdev = ofdev;
- if (of_address_to_resource(np, 0, ®s)) {
- printk(KERN_ERR "%pOF: Can't get registers address\n", np);
- return -ENXIO;
- }
-
- dev->base = (struct rgmii_regs __iomem *)ioremap(regs.start,
- sizeof(struct rgmii_regs));
- if (dev->base == NULL) {
- printk(KERN_ERR "%pOF: Can't map device registers!\n", np);
- return -ENOMEM;
+ dev->base = devm_platform_ioremap_resource(ofdev, 0);
+ if (IS_ERR(dev->base)) {
+ dev_err(&ofdev->dev, "can't map device registers");
+ return PTR_ERR(dev->base);
}
/* Check for RGMII flags */
@@ -265,15 +257,6 @@ static int rgmii_probe(struct platform_device *ofdev)
return 0;
}
-static void rgmii_remove(struct platform_device *ofdev)
-{
- struct rgmii_instance *dev = platform_get_drvdata(ofdev);
-
- WARN_ON(dev->users != 0);
-
- iounmap(dev->base);
-}
-
static const struct of_device_id rgmii_match[] =
{
{
@@ -291,7 +274,6 @@ static struct platform_driver rgmii_driver = {
.of_match_table = rgmii_match,
},
.probe = rgmii_probe,
- .remove_new = rgmii_remove,
};
module_platform_driver(rgmii_driver);
--
2.46.2
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCHv2 net-next 11/18] net: ibm: emac: zmii: use devm for kzalloc
2024-10-01 20:58 [PATCHv2 net-next 00/18] ibm: emac: more cleanups Rosen Penev
` (9 preceding siblings ...)
2024-10-01 20:58 ` [PATCHv2 net-next 10/18] net: ibm: emac: rgmii: devm_platform_get_resource Rosen Penev
@ 2024-10-01 20:58 ` Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 12/18] net: ibm: emac: zmii: devm_platform_get_resource Rosen Penev
` (7 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Rosen Penev @ 2024-10-01 20:58 UTC (permalink / raw)
To: netdev
Cc: andrew, davem, edumazet, kuba, pabeni, linux-kernel,
jacob.e.keller, horms, sd, chunkeey
Simplifies the probe function by removing gotos.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/net/ethernet/ibm/emac/zmii.c | 23 +++++++----------------
1 file changed, 7 insertions(+), 16 deletions(-)
diff --git a/drivers/net/ethernet/ibm/emac/zmii.c b/drivers/net/ethernet/ibm/emac/zmii.c
index 97cea64abe55..c38eb6b3173e 100644
--- a/drivers/net/ethernet/ibm/emac/zmii.c
+++ b/drivers/net/ethernet/ibm/emac/zmii.c
@@ -235,29 +235,26 @@ static int zmii_probe(struct platform_device *ofdev)
struct device_node *np = ofdev->dev.of_node;
struct zmii_instance *dev;
struct resource regs;
- int rc;
- rc = -ENOMEM;
- dev = kzalloc(sizeof(struct zmii_instance), GFP_KERNEL);
- if (dev == NULL)
- goto err_gone;
+ dev = devm_kzalloc(&ofdev->dev, sizeof(struct zmii_instance),
+ GFP_KERNEL);
+ if (!dev)
+ return -ENOMEM;
mutex_init(&dev->lock);
dev->ofdev = ofdev;
dev->mode = PHY_INTERFACE_MODE_NA;
- rc = -ENXIO;
if (of_address_to_resource(np, 0, ®s)) {
printk(KERN_ERR "%pOF: Can't get registers address\n", np);
- goto err_free;
+ return -ENXIO;
}
- rc = -ENOMEM;
dev->base = (struct zmii_regs __iomem *)ioremap(regs.start,
sizeof(struct zmii_regs));
- if (dev->base == NULL) {
+ if (!dev->base) {
printk(KERN_ERR "%pOF: Can't map device registers!\n", np);
- goto err_free;
+ return -ENOMEM;
}
/* We may need FER value for autodetection later */
@@ -271,11 +268,6 @@ static int zmii_probe(struct platform_device *ofdev)
platform_set_drvdata(ofdev, dev);
return 0;
-
- err_free:
- kfree(dev);
- err_gone:
- return rc;
}
static void zmii_remove(struct platform_device *ofdev)
@@ -285,7 +277,6 @@ static void zmii_remove(struct platform_device *ofdev)
WARN_ON(dev->users != 0);
iounmap(dev->base);
- kfree(dev);
}
static const struct of_device_id zmii_match[] =
--
2.46.2
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCHv2 net-next 12/18] net: ibm: emac: zmii: devm_platform_get_resource
2024-10-01 20:58 [PATCHv2 net-next 00/18] ibm: emac: more cleanups Rosen Penev
` (10 preceding siblings ...)
2024-10-01 20:58 ` [PATCHv2 net-next 11/18] net: ibm: emac: zmii: use devm for kzalloc Rosen Penev
@ 2024-10-01 20:58 ` Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 13/18] net: ibm: emac: mal: use devm for kzalloc Rosen Penev
` (6 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Rosen Penev @ 2024-10-01 20:58 UTC (permalink / raw)
To: netdev
Cc: andrew, davem, edumazet, kuba, pabeni, linux-kernel,
jacob.e.keller, horms, sd, chunkeey
Simplifies the probe function by a bit and allows removing the _remove
function such that devm now handles all cleanup.
printk gets converted to dev_err as np is now gone.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/net/ethernet/ibm/emac/zmii.c | 26 ++++----------------------
1 file changed, 4 insertions(+), 22 deletions(-)
diff --git a/drivers/net/ethernet/ibm/emac/zmii.c b/drivers/net/ethernet/ibm/emac/zmii.c
index c38eb6b3173e..abe14f4a8ea6 100644
--- a/drivers/net/ethernet/ibm/emac/zmii.c
+++ b/drivers/net/ethernet/ibm/emac/zmii.c
@@ -232,9 +232,7 @@ void *zmii_dump_regs(struct platform_device *ofdev, void *buf)
static int zmii_probe(struct platform_device *ofdev)
{
- struct device_node *np = ofdev->dev.of_node;
struct zmii_instance *dev;
- struct resource regs;
dev = devm_kzalloc(&ofdev->dev, sizeof(struct zmii_instance),
GFP_KERNEL);
@@ -245,16 +243,10 @@ static int zmii_probe(struct platform_device *ofdev)
dev->ofdev = ofdev;
dev->mode = PHY_INTERFACE_MODE_NA;
- if (of_address_to_resource(np, 0, ®s)) {
- printk(KERN_ERR "%pOF: Can't get registers address\n", np);
- return -ENXIO;
- }
-
- dev->base = (struct zmii_regs __iomem *)ioremap(regs.start,
- sizeof(struct zmii_regs));
- if (!dev->base) {
- printk(KERN_ERR "%pOF: Can't map device registers!\n", np);
- return -ENOMEM;
+ dev->base = devm_platform_ioremap_resource(ofdev, 0);
+ if (IS_ERR(dev->base)) {
+ dev_err(&ofdev->dev, "can't map device registers");
+ return PTR_ERR(dev->base);
}
/* We may need FER value for autodetection later */
@@ -270,15 +262,6 @@ static int zmii_probe(struct platform_device *ofdev)
return 0;
}
-static void zmii_remove(struct platform_device *ofdev)
-{
- struct zmii_instance *dev = platform_get_drvdata(ofdev);
-
- WARN_ON(dev->users != 0);
-
- iounmap(dev->base);
-}
-
static const struct of_device_id zmii_match[] =
{
{
@@ -297,7 +280,6 @@ static struct platform_driver zmii_driver = {
.of_match_table = zmii_match,
},
.probe = zmii_probe,
- .remove_new = zmii_remove,
};
module_platform_driver(zmii_driver);
--
2.46.2
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCHv2 net-next 13/18] net: ibm: emac: mal: use devm for kzalloc
2024-10-01 20:58 [PATCHv2 net-next 00/18] ibm: emac: more cleanups Rosen Penev
` (11 preceding siblings ...)
2024-10-01 20:58 ` [PATCHv2 net-next 12/18] net: ibm: emac: zmii: devm_platform_get_resource Rosen Penev
@ 2024-10-01 20:58 ` Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 14/18] net: ibm: emac: mal: use devm for request_irq Rosen Penev
` (5 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Rosen Penev @ 2024-10-01 20:58 UTC (permalink / raw)
To: netdev
Cc: andrew, davem, edumazet, kuba, pabeni, linux-kernel,
jacob.e.keller, horms, sd, chunkeey
Simplifies the probe function by removing gotos.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/net/ethernet/ibm/emac/mal.c | 28 ++++++++++------------------
1 file changed, 10 insertions(+), 18 deletions(-)
diff --git a/drivers/net/ethernet/ibm/emac/mal.c b/drivers/net/ethernet/ibm/emac/mal.c
index a632d3a207d3..70019ced47ff 100644
--- a/drivers/net/ethernet/ibm/emac/mal.c
+++ b/drivers/net/ethernet/ibm/emac/mal.c
@@ -524,7 +524,8 @@ static int mal_probe(struct platform_device *ofdev)
unsigned long irqflags;
irq_handler_t hdlr_serr, hdlr_txde, hdlr_rxde;
- mal = kzalloc(sizeof(struct mal_instance), GFP_KERNEL);
+ mal = devm_kzalloc(&ofdev->dev, sizeof(struct mal_instance),
+ GFP_KERNEL);
if (!mal)
return -ENOMEM;
@@ -539,8 +540,7 @@ static int mal_probe(struct platform_device *ofdev)
printk(KERN_ERR
"mal%d: can't find MAL num-tx-chans property!\n",
index);
- err = -ENODEV;
- goto fail;
+ return -ENODEV;
}
mal->num_tx_chans = prop[0];
@@ -549,8 +549,7 @@ static int mal_probe(struct platform_device *ofdev)
printk(KERN_ERR
"mal%d: can't find MAL num-rx-chans property!\n",
index);
- err = -ENODEV;
- goto fail;
+ return -ENODEV;
}
mal->num_rx_chans = prop[0];
@@ -558,15 +557,13 @@ static int mal_probe(struct platform_device *ofdev)
if (dcr_base == 0) {
printk(KERN_ERR
"mal%d: can't find DCR resource!\n", index);
- err = -ENODEV;
- goto fail;
+ return -ENODEV;
}
mal->dcr_host = dcr_map(ofdev->dev.of_node, dcr_base, 0x100);
if (!DCR_MAP_OK(mal->dcr_host)) {
printk(KERN_ERR
"mal%d: failed to map DCRs !\n", index);
- err = -ENODEV;
- goto fail;
+ return -ENODEV;
}
if (of_device_is_compatible(ofdev->dev.of_node, "ibm,mcmal-405ez")) {
@@ -577,8 +574,7 @@ static int mal_probe(struct platform_device *ofdev)
#else
printk(KERN_ERR "%pOF: Support for 405EZ not enabled!\n",
ofdev->dev.of_node);
- err = -ENODEV;
- goto fail;
+ return -ENODEV;
#endif
}
@@ -711,9 +707,6 @@ static int mal_probe(struct platform_device *ofdev)
free_netdev(mal->dummy_dev);
fail_unmap:
dcr_unmap(mal->dcr_host, 0x100);
- fail:
- kfree(mal);
-
return err;
}
@@ -744,10 +737,9 @@ static void mal_remove(struct platform_device *ofdev)
dma_free_coherent(&ofdev->dev,
sizeof(struct mal_descriptor) *
- (NUM_TX_BUFF * mal->num_tx_chans +
- NUM_RX_BUFF * mal->num_rx_chans), mal->bd_virt,
- mal->bd_dma);
- kfree(mal);
+ (NUM_TX_BUFF * mal->num_tx_chans +
+ NUM_RX_BUFF * mal->num_rx_chans),
+ mal->bd_virt, mal->bd_dma);
}
static const struct of_device_id mal_platform_match[] =
--
2.46.2
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCHv2 net-next 14/18] net: ibm: emac: mal: use devm for request_irq
2024-10-01 20:58 [PATCHv2 net-next 00/18] ibm: emac: more cleanups Rosen Penev
` (12 preceding siblings ...)
2024-10-01 20:58 ` [PATCHv2 net-next 13/18] net: ibm: emac: mal: use devm for kzalloc Rosen Penev
@ 2024-10-01 20:58 ` Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 15/18] net: ibm: emac: mal: move irq maps down Rosen Penev
` (4 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Rosen Penev @ 2024-10-01 20:58 UTC (permalink / raw)
To: netdev
Cc: andrew, davem, edumazet, kuba, pabeni, linux-kernel,
jacob.e.keller, horms, sd, chunkeey
Avoids manual frees. Also replaced irq_of_parse_and_map with
platform_get_irq since it's simpler and does the same thing.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/net/ethernet/ibm/emac/mal.c | 51 ++++++++++++-----------------
1 file changed, 21 insertions(+), 30 deletions(-)
diff --git a/drivers/net/ethernet/ibm/emac/mal.c b/drivers/net/ethernet/ibm/emac/mal.c
index 70019ced47ff..b07b2e0ce478 100644
--- a/drivers/net/ethernet/ibm/emac/mal.c
+++ b/drivers/net/ethernet/ibm/emac/mal.c
@@ -578,19 +578,19 @@ static int mal_probe(struct platform_device *ofdev)
#endif
}
- mal->txeob_irq = irq_of_parse_and_map(ofdev->dev.of_node, 0);
- mal->rxeob_irq = irq_of_parse_and_map(ofdev->dev.of_node, 1);
- mal->serr_irq = irq_of_parse_and_map(ofdev->dev.of_node, 2);
+ mal->txeob_irq = platform_get_irq(ofdev, 0);
+ mal->rxeob_irq = platform_get_irq(ofdev, 1);
+ mal->serr_irq = platform_get_irq(ofdev, 2);
if (mal_has_feature(mal, MAL_FTR_COMMON_ERR_INT)) {
mal->txde_irq = mal->rxde_irq = mal->serr_irq;
} else {
- mal->txde_irq = irq_of_parse_and_map(ofdev->dev.of_node, 3);
- mal->rxde_irq = irq_of_parse_and_map(ofdev->dev.of_node, 4);
+ mal->txde_irq = platform_get_irq(ofdev, 3);
+ mal->rxde_irq = platform_get_irq(ofdev, 4);
}
- if (!mal->txeob_irq || !mal->rxeob_irq || !mal->serr_irq ||
- !mal->txde_irq || !mal->rxde_irq) {
+ if (mal->txeob_irq < 0 || mal->rxeob_irq < 0 || mal->serr_irq < 0 ||
+ mal->txde_irq < 0 || mal->rxde_irq < 0) {
printk(KERN_ERR
"mal%d: failed to map interrupts !\n", index);
err = -ENODEV;
@@ -660,21 +660,26 @@ static int mal_probe(struct platform_device *ofdev)
hdlr_rxde = mal_rxde;
}
- err = request_irq(mal->serr_irq, hdlr_serr, irqflags, "MAL SERR", mal);
+ err = devm_request_irq(&ofdev->dev, mal->serr_irq, hdlr_serr, irqflags,
+ "MAL SERR", mal);
if (err)
goto fail2;
- err = request_irq(mal->txde_irq, hdlr_txde, irqflags, "MAL TX DE", mal);
+ err = devm_request_irq(&ofdev->dev, mal->txde_irq, hdlr_txde, irqflags,
+ "MAL TX DE", mal);
if (err)
- goto fail3;
- err = request_irq(mal->txeob_irq, mal_txeob, 0, "MAL TX EOB", mal);
+ goto fail2;
+ err = devm_request_irq(&ofdev->dev, mal->txeob_irq, mal_txeob, 0,
+ "MAL TX EOB", mal);
if (err)
- goto fail4;
- err = request_irq(mal->rxde_irq, hdlr_rxde, irqflags, "MAL RX DE", mal);
+ goto fail2;
+ err = devm_request_irq(&ofdev->dev, mal->rxde_irq, hdlr_rxde, irqflags,
+ "MAL RX DE", mal);
if (err)
- goto fail5;
- err = request_irq(mal->rxeob_irq, mal_rxeob, 0, "MAL RX EOB", mal);
+ goto fail2;
+ err = devm_request_irq(&ofdev->dev, mal->rxeob_irq, mal_rxeob, 0,
+ "MAL RX EOB", mal);
if (err)
- goto fail6;
+ goto fail2;
/* Enable all MAL SERR interrupt sources */
set_mal_dcrn(mal, MAL_IER, MAL_IER_EVENTS);
@@ -693,14 +698,6 @@ static int mal_probe(struct platform_device *ofdev)
return 0;
- fail6:
- free_irq(mal->rxde_irq, mal);
- fail5:
- free_irq(mal->txeob_irq, mal);
- fail4:
- free_irq(mal->txde_irq, mal);
- fail3:
- free_irq(mal->serr_irq, mal);
fail2:
dma_free_coherent(&ofdev->dev, bd_size, mal->bd_virt, mal->bd_dma);
fail_dummy:
@@ -725,12 +722,6 @@ static void mal_remove(struct platform_device *ofdev)
"mal%d: commac list is not empty on remove!\n",
mal->index);
- free_irq(mal->serr_irq, mal);
- free_irq(mal->txde_irq, mal);
- free_irq(mal->txeob_irq, mal);
- free_irq(mal->rxde_irq, mal);
- free_irq(mal->rxeob_irq, mal);
-
mal_reset(mal);
free_netdev(mal->dummy_dev);
--
2.46.2
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCHv2 net-next 15/18] net: ibm: emac: mal: move irq maps down
2024-10-01 20:58 [PATCHv2 net-next 00/18] ibm: emac: more cleanups Rosen Penev
` (13 preceding siblings ...)
2024-10-01 20:58 ` [PATCHv2 net-next 14/18] net: ibm: emac: mal: use devm for request_irq Rosen Penev
@ 2024-10-01 20:58 ` Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 16/18] net: ibm: emac: mal: move alloc_netdev_dummy down Rosen Penev
` (3 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Rosen Penev @ 2024-10-01 20:58 UTC (permalink / raw)
To: netdev
Cc: andrew, davem, edumazet, kuba, pabeni, linux-kernel,
jacob.e.keller, horms, sd, chunkeey
Moves the handling right before they are used and allows merging a
branch.
Also get rid of the error handling as devm_request_irq can handle that.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/net/ethernet/ibm/emac/mal.c | 26 +++++++-------------------
1 file changed, 7 insertions(+), 19 deletions(-)
diff --git a/drivers/net/ethernet/ibm/emac/mal.c b/drivers/net/ethernet/ibm/emac/mal.c
index b07b2e0ce478..3fae1f0ec020 100644
--- a/drivers/net/ethernet/ibm/emac/mal.c
+++ b/drivers/net/ethernet/ibm/emac/mal.c
@@ -578,25 +578,6 @@ static int mal_probe(struct platform_device *ofdev)
#endif
}
- mal->txeob_irq = platform_get_irq(ofdev, 0);
- mal->rxeob_irq = platform_get_irq(ofdev, 1);
- mal->serr_irq = platform_get_irq(ofdev, 2);
-
- if (mal_has_feature(mal, MAL_FTR_COMMON_ERR_INT)) {
- mal->txde_irq = mal->rxde_irq = mal->serr_irq;
- } else {
- mal->txde_irq = platform_get_irq(ofdev, 3);
- mal->rxde_irq = platform_get_irq(ofdev, 4);
- }
-
- if (mal->txeob_irq < 0 || mal->rxeob_irq < 0 || mal->serr_irq < 0 ||
- mal->txde_irq < 0 || mal->rxde_irq < 0) {
- printk(KERN_ERR
- "mal%d: failed to map interrupts !\n", index);
- err = -ENODEV;
- goto fail_unmap;
- }
-
INIT_LIST_HEAD(&mal->poll_list);
INIT_LIST_HEAD(&mal->list);
spin_lock_init(&mal->lock);
@@ -650,10 +631,17 @@ static int mal_probe(struct platform_device *ofdev)
sizeof(struct mal_descriptor) *
mal_rx_bd_offset(mal, i));
+ mal->txeob_irq = platform_get_irq(ofdev, 0);
+ mal->rxeob_irq = platform_get_irq(ofdev, 1);
+ mal->serr_irq = platform_get_irq(ofdev, 2);
+
if (mal_has_feature(mal, MAL_FTR_COMMON_ERR_INT)) {
+ mal->txde_irq = mal->rxde_irq = mal->serr_irq;
irqflags = IRQF_SHARED;
hdlr_serr = hdlr_txde = hdlr_rxde = mal_int;
} else {
+ mal->txde_irq = platform_get_irq(ofdev, 3);
+ mal->rxde_irq = platform_get_irq(ofdev, 4);
irqflags = 0;
hdlr_serr = mal_serr;
hdlr_txde = mal_txde;
--
2.46.2
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCHv2 net-next 16/18] net: ibm: emac: mal: move alloc_netdev_dummy down
2024-10-01 20:58 [PATCHv2 net-next 00/18] ibm: emac: more cleanups Rosen Penev
` (14 preceding siblings ...)
2024-10-01 20:58 ` [PATCHv2 net-next 15/18] net: ibm: emac: mal: move irq maps down Rosen Penev
@ 2024-10-01 20:58 ` Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 17/18] net: ibm: emac: add dcr_unmap to _remove Rosen Penev
` (2 subsequent siblings)
18 siblings, 0 replies; 20+ messages in thread
From: Rosen Penev @ 2024-10-01 20:58 UTC (permalink / raw)
To: netdev
Cc: andrew, davem, edumazet, kuba, pabeni, linux-kernel,
jacob.e.keller, horms, sd, chunkeey
Removes a goto from the probe function.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/net/ethernet/ibm/emac/mal.c | 22 ++++++++++------------
1 file changed, 10 insertions(+), 12 deletions(-)
diff --git a/drivers/net/ethernet/ibm/emac/mal.c b/drivers/net/ethernet/ibm/emac/mal.c
index 3fae1f0ec020..71781c7f6dcf 100644
--- a/drivers/net/ethernet/ibm/emac/mal.c
+++ b/drivers/net/ethernet/ibm/emac/mal.c
@@ -582,15 +582,6 @@ static int mal_probe(struct platform_device *ofdev)
INIT_LIST_HEAD(&mal->list);
spin_lock_init(&mal->lock);
- mal->dummy_dev = alloc_netdev_dummy(0);
- if (!mal->dummy_dev) {
- err = -ENOMEM;
- goto fail_unmap;
- }
-
- netif_napi_add_weight(mal->dummy_dev, &mal->napi, mal_poll,
- CONFIG_IBM_EMAC_POLL_WEIGHT);
-
/* Load power-on reset defaults */
mal_reset(mal);
@@ -618,7 +609,7 @@ static int mal_probe(struct platform_device *ofdev)
GFP_KERNEL);
if (mal->bd_virt == NULL) {
err = -ENOMEM;
- goto fail_dummy;
+ goto fail_unmap;
}
for (i = 0; i < mal->num_tx_chans; ++i)
@@ -684,12 +675,19 @@ static int mal_probe(struct platform_device *ofdev)
wmb();
platform_set_drvdata(ofdev, mal);
+ mal->dummy_dev = alloc_netdev_dummy(0);
+ if (!mal->dummy_dev) {
+ err = -ENOMEM;
+ goto fail2;
+ }
+
+ netif_napi_add_weight(mal->dummy_dev, &mal->napi, mal_poll,
+ CONFIG_IBM_EMAC_POLL_WEIGHT);
+
return 0;
fail2:
dma_free_coherent(&ofdev->dev, bd_size, mal->bd_virt, mal->bd_dma);
- fail_dummy:
- free_netdev(mal->dummy_dev);
fail_unmap:
dcr_unmap(mal->dcr_host, 0x100);
return err;
--
2.46.2
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCHv2 net-next 17/18] net: ibm: emac: add dcr_unmap to _remove
2024-10-01 20:58 [PATCHv2 net-next 00/18] ibm: emac: more cleanups Rosen Penev
` (15 preceding siblings ...)
2024-10-01 20:58 ` [PATCHv2 net-next 16/18] net: ibm: emac: mal: move alloc_netdev_dummy down Rosen Penev
@ 2024-10-01 20:58 ` Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 18/18] net: ibm: emac: mal: move dcr map down Rosen Penev
2024-10-02 12:35 ` [PATCHv2 net-next 00/18] ibm: emac: more cleanups Jakub Kicinski
18 siblings, 0 replies; 20+ messages in thread
From: Rosen Penev @ 2024-10-01 20:58 UTC (permalink / raw)
To: netdev
Cc: andrew, davem, edumazet, kuba, pabeni, linux-kernel,
jacob.e.keller, horms, sd, chunkeey
It's done in probe so it should be done here.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/net/ethernet/ibm/emac/mal.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/net/ethernet/ibm/emac/mal.c b/drivers/net/ethernet/ibm/emac/mal.c
index 71781c7f6dcf..2434673ed00b 100644
--- a/drivers/net/ethernet/ibm/emac/mal.c
+++ b/drivers/net/ethernet/ibm/emac/mal.c
@@ -712,6 +712,8 @@ static void mal_remove(struct platform_device *ofdev)
free_netdev(mal->dummy_dev);
+ dcr_unmap(mal->dcr_host, 0x100);
+
dma_free_coherent(&ofdev->dev,
sizeof(struct mal_descriptor) *
(NUM_TX_BUFF * mal->num_tx_chans +
--
2.46.2
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCHv2 net-next 18/18] net: ibm: emac: mal: move dcr map down
2024-10-01 20:58 [PATCHv2 net-next 00/18] ibm: emac: more cleanups Rosen Penev
` (16 preceding siblings ...)
2024-10-01 20:58 ` [PATCHv2 net-next 17/18] net: ibm: emac: add dcr_unmap to _remove Rosen Penev
@ 2024-10-01 20:58 ` Rosen Penev
2024-10-02 12:35 ` [PATCHv2 net-next 00/18] ibm: emac: more cleanups Jakub Kicinski
18 siblings, 0 replies; 20+ messages in thread
From: Rosen Penev @ 2024-10-01 20:58 UTC (permalink / raw)
To: netdev
Cc: andrew, davem, edumazet, kuba, pabeni, linux-kernel,
jacob.e.keller, horms, sd, chunkeey
There's actually a bug above where it returns instead of calling goto.
Instead of calling goto, move dcr_map and friends down as they're used
right after the spinlock in mal_reset.
Signed-off-by: Rosen Penev <rosenp@gmail.com>
---
drivers/net/ethernet/ibm/emac/mal.c | 24 ++++++++++++------------
1 file changed, 12 insertions(+), 12 deletions(-)
diff --git a/drivers/net/ethernet/ibm/emac/mal.c b/drivers/net/ethernet/ibm/emac/mal.c
index 2434673ed00b..259f38950b6a 100644
--- a/drivers/net/ethernet/ibm/emac/mal.c
+++ b/drivers/net/ethernet/ibm/emac/mal.c
@@ -553,6 +553,18 @@ static int mal_probe(struct platform_device *ofdev)
}
mal->num_rx_chans = prop[0];
+ if (of_device_is_compatible(ofdev->dev.of_node, "ibm,mcmal-405ez")) {
+#if defined(CONFIG_IBM_EMAC_MAL_CLR_ICINTSTAT) && \
+ defined(CONFIG_IBM_EMAC_MAL_COMMON_ERR)
+ mal->features |= (MAL_FTR_CLEAR_ICINTSTAT |
+ MAL_FTR_COMMON_ERR_INT);
+#else
+ printk(KERN_ERR "%pOF: Support for 405EZ not enabled!\n",
+ ofdev->dev.of_node);
+ return -ENODEV;
+#endif
+ }
+
dcr_base = dcr_resource_start(ofdev->dev.of_node, 0);
if (dcr_base == 0) {
printk(KERN_ERR
@@ -566,18 +578,6 @@ static int mal_probe(struct platform_device *ofdev)
return -ENODEV;
}
- if (of_device_is_compatible(ofdev->dev.of_node, "ibm,mcmal-405ez")) {
-#if defined(CONFIG_IBM_EMAC_MAL_CLR_ICINTSTAT) && \
- defined(CONFIG_IBM_EMAC_MAL_COMMON_ERR)
- mal->features |= (MAL_FTR_CLEAR_ICINTSTAT |
- MAL_FTR_COMMON_ERR_INT);
-#else
- printk(KERN_ERR "%pOF: Support for 405EZ not enabled!\n",
- ofdev->dev.of_node);
- return -ENODEV;
-#endif
- }
-
INIT_LIST_HEAD(&mal->poll_list);
INIT_LIST_HEAD(&mal->list);
spin_lock_init(&mal->lock);
--
2.46.2
^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCHv2 net-next 00/18] ibm: emac: more cleanups
2024-10-01 20:58 [PATCHv2 net-next 00/18] ibm: emac: more cleanups Rosen Penev
` (17 preceding siblings ...)
2024-10-01 20:58 ` [PATCHv2 net-next 18/18] net: ibm: emac: mal: move dcr map down Rosen Penev
@ 2024-10-02 12:35 ` Jakub Kicinski
18 siblings, 0 replies; 20+ messages in thread
From: Jakub Kicinski @ 2024-10-02 12:35 UTC (permalink / raw)
To: Rosen Penev
Cc: netdev, andrew, davem, edumazet, pabeni, linux-kernel,
jacob.e.keller, horms, sd, chunkeey
On Tue, 1 Oct 2024 13:58:26 -0700 Rosen Penev wrote:
> Added devm for the submodules and removed custom init/exit functions as
> EPROBE_DEFER is handled now.
>
> v2: fixed build errors. Also added extra commits to clean the driver up
> further.
Please include info on how this was tested
--
pw-bot: cr
^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2024-10-02 12:35 UTC | newest]
Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2024-10-01 20:58 [PATCHv2 net-next 00/18] ibm: emac: more cleanups Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 01/18] net: ibm: emac: use netif_receive_skb_list Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 02/18] net: ibm: emac: remove custom init/exit functions Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 03/18] net: ibm: emac: use module_platform_driver for modules Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 04/18] net: ibm: emac: use devm_platform_ioremap_resource Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 05/18] net: ibm: emac: use platform_get_irq Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 06/18] net: ibm: emac: remove bootlist support Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 07/18] net: ibm: emac: tah: use devm for kzalloc Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 08/18] net: ibm: emac: tah: devm_platform_get_resources Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 09/18] net: ibm: emac: rgmii: use devm for kzalloc Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 10/18] net: ibm: emac: rgmii: devm_platform_get_resource Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 11/18] net: ibm: emac: zmii: use devm for kzalloc Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 12/18] net: ibm: emac: zmii: devm_platform_get_resource Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 13/18] net: ibm: emac: mal: use devm for kzalloc Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 14/18] net: ibm: emac: mal: use devm for request_irq Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 15/18] net: ibm: emac: mal: move irq maps down Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 16/18] net: ibm: emac: mal: move alloc_netdev_dummy down Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 17/18] net: ibm: emac: add dcr_unmap to _remove Rosen Penev
2024-10-01 20:58 ` [PATCHv2 net-next 18/18] net: ibm: emac: mal: move dcr map down Rosen Penev
2024-10-02 12:35 ` [PATCHv2 net-next 00/18] ibm: emac: more cleanups Jakub Kicinski
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.