* [PATCH u-boot-net 0/3] A tiny batch of keystone_net changes
@ 2022-04-11 19:20 Marek Behún
2022-04-11 19:20 ` [PATCH u-boot-net 1/3] driver: net: ti: keystone_net: Deduplicate code Marek Behún
` (3 more replies)
0 siblings, 4 replies; 8+ messages in thread
From: Marek Behún @ 2022-04-11 19:20 UTC (permalink / raw)
To: Ramon Fried; +Cc: Joe Hershberger, u-boot, Marek Behún
From: Marek Behún <marek.behun@nic.cz>
Hello Ramon,
here comes a tiny batch of changes for keystone_net.
Applicable on top of net/next.
Marek
Marek Behún (3):
driver: net: ti: keystone_net: Deduplicate code
driver: net: ti: keystone_net: Convert to ofnode functions
driver: net: ti: keystone_net: Change priv member type
drivers/net/ti/keystone_net.c | 172 +++++++++++++++-------------------
1 file changed, 74 insertions(+), 98 deletions(-)
--
2.35.1
^ permalink raw reply [flat|nested] 8+ messages in thread
* [PATCH u-boot-net 1/3] driver: net: ti: keystone_net: Deduplicate code
2022-04-11 19:20 [PATCH u-boot-net 0/3] A tiny batch of keystone_net changes Marek Behún
@ 2022-04-11 19:20 ` Marek Behún
2022-04-12 19:53 ` Ramon Fried
2022-04-11 19:20 ` [PATCH u-boot-net 2/3] driver: net: ti: keystone_net: Convert to ofnode functions Marek Behún
` (2 subsequent siblings)
3 siblings, 1 reply; 8+ messages in thread
From: Marek Behún @ 2022-04-11 19:20 UTC (permalink / raw)
To: Ramon Fried
Cc: Joe Hershberger, u-boot, Marek Behún, Grygorii Strashko,
Murali Karicheri
From: Marek Behún <marek.behun@nic.cz>
Deduplicate common code in ks2_eth_bind_slaves().
Signed-off-by: Marek Behún <marek.behun@nic.cz>
---
drivers/net/ti/keystone_net.c | 75 ++++++++++++++++-------------------
1 file changed, 34 insertions(+), 41 deletions(-)
diff --git a/drivers/net/ti/keystone_net.c b/drivers/net/ti/keystone_net.c
index 16e3f32bb0..3ee4740ec5 100644
--- a/drivers/net/ti/keystone_net.c
+++ b/drivers/net/ti/keystone_net.c
@@ -621,58 +621,51 @@ static const struct eth_ops ks2_eth_ops = {
.write_hwaddr = ks2_eth_write_hwaddr,
};
-static int ks2_eth_bind_slaves(struct udevice *dev, int gbe, int *gbe_0)
+static int ks2_bind_one_slave(struct udevice *dev, int slave, int *gbe_0)
{
const void *fdt = gd->fdt_blob;
- struct udevice *sl_dev;
- int interfaces;
- int sec_slave;
- int slave;
- int ret;
char *slave_name;
+ int slave_no;
+ int ret;
+
+ slave_no = fdtdec_get_int(fdt, slave, "slave-port", -ENOENT);
+ if (slave_no == -ENOENT)
+ return 0;
+
+ if (gbe_0 && slave_no == 0) {
+ /* This is the current eth device */
+ *gbe_0 = slave;
+ return 0;
+ }
+
+ /* Slave devices to be registered */
+ slave_name = malloc(20);
+ snprintf(slave_name, 20, "netcp@slave-%d", slave_no);
+ ret = device_bind_driver_to_node(dev, "eth_ks2_sl", slave_name,
+ offset_to_ofnode(slave), NULL);
+ if (ret)
+ pr_err("ks2_net - not able to bind slave interfaces\n");
+
+ return ret;
+}
+
+static int ks2_eth_bind_slaves(struct udevice *dev, int gbe, int *gbe_0)
+{
+ int interfaces, sec_slave, slave, ret;
+ const void *fdt = gd->fdt_blob;
interfaces = fdt_subnode_offset(fdt, gbe, "interfaces");
fdt_for_each_subnode(slave, fdt, interfaces) {
- int slave_no;
-
- slave_no = fdtdec_get_int(fdt, slave, "slave-port", -ENOENT);
- if (slave_no == -ENOENT)
- continue;
-
- if (slave_no == 0) {
- /* This is the current eth device */
- *gbe_0 = slave;
- } else {
- /* Slave devices to be registered */
- slave_name = malloc(20);
- snprintf(slave_name, 20, "netcp@slave-%d", slave_no);
- ret = device_bind_driver_to_node(dev, "eth_ks2_sl",
- slave_name, offset_to_ofnode(slave),
- &sl_dev);
- if (ret) {
- pr_err("ks2_net - not able to bind slave interfaces\n");
- return ret;
- }
- }
+ ret = ks2_bind_one_slave(dev, slave, gbe_0);
+ if (ret)
+ return ret;
}
sec_slave = fdt_subnode_offset(fdt, gbe, "secondary-slave-ports");
fdt_for_each_subnode(slave, fdt, sec_slave) {
- int slave_no;
-
- slave_no = fdtdec_get_int(fdt, slave, "slave-port", -ENOENT);
- if (slave_no == -ENOENT)
- continue;
-
- /* Slave devices to be registered */
- slave_name = malloc(20);
- snprintf(slave_name, 20, "netcp@slave-%d", slave_no);
- ret = device_bind_driver_to_node(dev, "eth_ks2_sl", slave_name,
- offset_to_ofnode(slave), &sl_dev);
- if (ret) {
- pr_err("ks2_net - not able to bind slave interfaces\n");
+ ret = ks2_bind_one_slave(dev, slave, NULL);
+ if (ret)
return ret;
- }
}
return 0;
--
2.35.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH u-boot-net 2/3] driver: net: ti: keystone_net: Convert to ofnode functions
2022-04-11 19:20 [PATCH u-boot-net 0/3] A tiny batch of keystone_net changes Marek Behún
2022-04-11 19:20 ` [PATCH u-boot-net 1/3] driver: net: ti: keystone_net: Deduplicate code Marek Behún
@ 2022-04-11 19:20 ` Marek Behún
2022-04-12 19:54 ` Ramon Fried
2022-04-11 19:20 ` [PATCH u-boot-net 3/3] driver: net: ti: keystone_net: Change priv member type Marek Behún
2022-04-12 19:57 ` [PATCH u-boot-net 0/3] A tiny batch of keystone_net changes Ramon Fried
3 siblings, 1 reply; 8+ messages in thread
From: Marek Behún @ 2022-04-11 19:20 UTC (permalink / raw)
To: Ramon Fried
Cc: Joe Hershberger, u-boot, Marek Behún, Grygorii Strashko,
Murali Karicheri
From: Marek Behún <marek.behun@nic.cz>
Convert fdt parsing functions to ofnode parsing functions.
Signed-off-by: Marek Behún <marek.behun@nic.cz>
---
drivers/net/ti/keystone_net.c | 113 +++++++++++++++-------------------
1 file changed, 48 insertions(+), 65 deletions(-)
diff --git a/drivers/net/ti/keystone_net.c b/drivers/net/ti/keystone_net.c
index 3ee4740ec5..3c1f616086 100644
--- a/drivers/net/ti/keystone_net.c
+++ b/drivers/net/ti/keystone_net.c
@@ -23,7 +23,6 @@
#include <asm/ti-common/keystone_net.h>
#include <asm/ti-common/keystone_serdes.h>
#include <asm/arch/psc_defs.h>
-#include <linux/libfdt.h>
#include "cpsw_mdio.h"
@@ -91,9 +90,9 @@ struct ks2_eth_priv {
struct mii_dev *mdio_bus;
int phy_addr;
phy_interface_t phy_if;
- int phy_of_handle;
+ ofnode phy_ofnode;
int sgmii_link_type;
- void *mdio_base;
+ void * mdio_base;
struct rx_buff_desc net_rx_buffs;
struct pktdma_cfg *netcp_pktdma;
void *hd;
@@ -593,8 +592,8 @@ static int ks2_eth_probe(struct udevice *dev)
priv->phydev = phy_connect(priv->mdio_bus, priv->phy_addr,
dev, priv->phy_if);
#ifdef CONFIG_DM_ETH
- if (priv->phy_of_handle)
- priv->phydev->node = offset_to_ofnode(priv->phy_of_handle);
+ if (ofnode_valid(priv->phy_ofnode))
+ priv->phydev->node = priv->phy_ofnode;
#endif
phy_config(priv->phydev);
}
@@ -621,15 +620,13 @@ static const struct eth_ops ks2_eth_ops = {
.write_hwaddr = ks2_eth_write_hwaddr,
};
-static int ks2_bind_one_slave(struct udevice *dev, int slave, int *gbe_0)
+static int ks2_bind_one_slave(struct udevice *dev, ofnode slave, ofnode *gbe_0)
{
- const void *fdt = gd->fdt_blob;
char *slave_name;
- int slave_no;
+ u32 slave_no;
int ret;
- slave_no = fdtdec_get_int(fdt, slave, "slave-port", -ENOENT);
- if (slave_no == -ENOENT)
+ if (ofnode_read_u32(slave, "slave-port", &slave_no))
return 0;
if (gbe_0 && slave_no == 0) {
@@ -641,28 +638,28 @@ static int ks2_bind_one_slave(struct udevice *dev, int slave, int *gbe_0)
/* Slave devices to be registered */
slave_name = malloc(20);
snprintf(slave_name, 20, "netcp@slave-%d", slave_no);
- ret = device_bind_driver_to_node(dev, "eth_ks2_sl", slave_name,
- offset_to_ofnode(slave), NULL);
+ ret = device_bind_driver_to_node(dev, "eth_ks2_sl", slave_name, slave,
+ NULL);
if (ret)
pr_err("ks2_net - not able to bind slave interfaces\n");
return ret;
}
-static int ks2_eth_bind_slaves(struct udevice *dev, int gbe, int *gbe_0)
+static int ks2_eth_bind_slaves(struct udevice *dev, ofnode gbe, ofnode *gbe_0)
{
- int interfaces, sec_slave, slave, ret;
- const void *fdt = gd->fdt_blob;
+ ofnode interfaces, sec_slave, slave;
+ int ret;
- interfaces = fdt_subnode_offset(fdt, gbe, "interfaces");
- fdt_for_each_subnode(slave, fdt, interfaces) {
+ interfaces = ofnode_find_subnode(gbe, "interfaces");
+ ofnode_for_each_subnode(slave, interfaces) {
ret = ks2_bind_one_slave(dev, slave, gbe_0);
if (ret)
return ret;
}
- sec_slave = fdt_subnode_offset(fdt, gbe, "secondary-slave-ports");
- fdt_for_each_subnode(slave, fdt, sec_slave) {
+ sec_slave = ofnode_find_subnode(gbe, "secondary-slave-ports");
+ ofnode_for_each_subnode(slave, sec_slave) {
ret = ks2_bind_one_slave(dev, slave, NULL);
if (ret)
return ret;
@@ -671,47 +668,40 @@ static int ks2_eth_bind_slaves(struct udevice *dev, int gbe, int *gbe_0)
return 0;
}
-static int ks2_eth_parse_slave_interface(int netcp, int slave,
+static int ks2_eth_parse_slave_interface(ofnode netcp, ofnode slave,
struct ks2_eth_priv *priv,
struct eth_pdata *pdata)
{
- const void *fdt = gd->fdt_blob;
- int mdio;
- int phy;
+ struct ofnode_phandle_args dma_args;
+ ofnode phy, mdio;
int dma_count;
- u32 dma_channel[8];
- priv->slave_port = fdtdec_get_int(fdt, slave, "slave-port", -1);
+ priv->slave_port = ofnode_read_s32_default(slave, "slave-port", -1);
priv->net_rx_buffs.rx_flow = priv->slave_port * 8;
/* U-Boot slave port number starts with 1 instead of 0 */
priv->slave_port += 1;
- dma_count = fdtdec_get_int_array_count(fdt, netcp,
- "ti,navigator-dmas",
- dma_channel, 8);
-
- if (dma_count > (2 * priv->slave_port)) {
- int dma_idx;
-
- dma_idx = priv->slave_port * 2 - 1;
- priv->net_rx_buffs.rx_flow = dma_channel[dma_idx];
- }
-
- priv->link_type = fdtdec_get_int(fdt, slave, "link-interface", -1);
+ dma_count = ofnode_count_phandle_with_args(netcp, "ti,navigator-dmas",
+ NULL, 1);
+ if (priv->slave_port < dma_count &&
+ !ofnode_parse_phandle_with_args(netcp, "ti,navigator-dmas", NULL, 1,
+ priv->slave_port - 1, &dma_args))
+ priv->net_rx_buffs.rx_flow = dma_args.args[0];
- phy = fdtdec_lookup_phandle(fdt, slave, "phy-handle");
+ priv->link_type = ofnode_read_s32_default(slave, "link-interface", -1);
- if (phy >= 0) {
- priv->phy_of_handle = phy;
- priv->phy_addr = fdtdec_get_int(fdt, phy, "reg", -1);
+ phy = ofnode_get_phy_node(slave);
+ priv->phy_ofnode = phy;
+ if (ofnode_valid(phy)) {
+ priv->phy_addr = ofnode_read_s32_default(phy, "reg", -1);
- mdio = fdt_parent_offset(fdt, phy);
- if (mdio < 0) {
+ mdio = ofnode_get_parent(phy);
+ if (!ofnode_valid(mdio)) {
pr_err("mdio dt not found\n");
return -ENODEV;
}
- priv->mdio_base = (void *)fdtdec_get_addr(fdt, mdio, "reg");
+ priv->mdio_base = (void *)ofnode_get_addr(mdio);
}
if (priv->link_type == LINK_TYPE_SGMII_MAC_TO_PHY_MODE) {
@@ -720,7 +710,7 @@ static int ks2_eth_parse_slave_interface(int netcp, int slave,
priv->sgmii_link_type = SGMII_LINK_MAC_PHY;
priv->has_mdio = true;
} else if (priv->link_type == LINK_TYPE_RGMII_LINK_MAC_PHY) {
- priv->phy_if = ofnode_read_phy_mode(offset_to_ofnode(slave));
+ priv->phy_if = ofnode_read_phy_mode(slave);
if (priv->phy_if == PHY_INTERFACE_MODE_NA)
priv->phy_if = PHY_INTERFACE_MODE_RGMII;
pdata->phy_interface = priv->phy_if;
@@ -741,23 +731,19 @@ static int ks2_eth_parse_slave_interface(int netcp, int slave,
static int ks2_sl_eth_of_to_plat(struct udevice *dev)
{
+ ofnode slave, interfaces, gbe, netcp_devices, netcp;
struct ks2_eth_priv *priv = dev_get_priv(dev);
struct eth_pdata *pdata = dev_get_plat(dev);
- const void *fdt = gd->fdt_blob;
- int slave = dev_of_offset(dev);
- int interfaces;
- int gbe;
- int netcp_devices;
- int netcp;
-
- interfaces = fdt_parent_offset(fdt, slave);
- gbe = fdt_parent_offset(fdt, interfaces);
- netcp_devices = fdt_parent_offset(fdt, gbe);
- netcp = fdt_parent_offset(fdt, netcp_devices);
+
+ slave = dev_ofnode(dev);
+ interfaces = ofnode_get_parent(slave);
+ gbe = ofnode_get_parent(interfaces);
+ netcp_devices = ofnode_get_parent(gbe);
+ netcp = ofnode_get_parent(netcp_devices);
ks2_eth_parse_slave_interface(netcp, slave, priv, pdata);
- pdata->iobase = fdtdec_get_addr(fdt, netcp, "reg");
+ pdata->iobase = ofnode_get_addr(netcp);
return 0;
}
@@ -766,18 +752,15 @@ static int ks2_eth_of_to_plat(struct udevice *dev)
{
struct ks2_eth_priv *priv = dev_get_priv(dev);
struct eth_pdata *pdata = dev_get_plat(dev);
- const void *fdt = gd->fdt_blob;
- int gbe_0 = -ENODEV;
- int netcp_devices;
- int gbe;
+ ofnode netcp_devices, gbe, gbe_0;
- netcp_devices = fdt_subnode_offset(fdt, dev_of_offset(dev),
- "netcp-devices");
- gbe = fdt_subnode_offset(fdt, netcp_devices, "gbe");
+ netcp_devices = dev_read_subnode(dev, "netcp-devices");
+ gbe = ofnode_find_subnode(netcp_devices, "gbe");
+ gbe_0 = ofnode_null();
ks2_eth_bind_slaves(dev, gbe, &gbe_0);
- ks2_eth_parse_slave_interface(dev_of_offset(dev), gbe_0, priv, pdata);
+ ks2_eth_parse_slave_interface(dev_ofnode(dev), gbe_0, priv, pdata);
pdata->iobase = dev_read_addr(dev);
--
2.35.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* [PATCH u-boot-net 3/3] driver: net: ti: keystone_net: Change priv member type
2022-04-11 19:20 [PATCH u-boot-net 0/3] A tiny batch of keystone_net changes Marek Behún
2022-04-11 19:20 ` [PATCH u-boot-net 1/3] driver: net: ti: keystone_net: Deduplicate code Marek Behún
2022-04-11 19:20 ` [PATCH u-boot-net 2/3] driver: net: ti: keystone_net: Convert to ofnode functions Marek Behún
@ 2022-04-11 19:20 ` Marek Behún
2022-04-12 19:54 ` Ramon Fried
2022-04-12 19:57 ` [PATCH u-boot-net 0/3] A tiny batch of keystone_net changes Ramon Fried
3 siblings, 1 reply; 8+ messages in thread
From: Marek Behún @ 2022-04-11 19:20 UTC (permalink / raw)
To: Ramon Fried
Cc: Joe Hershberger, u-boot, Marek Behún, Grygorii Strashko,
Murali Karicheri
From: Marek Behún <marek.behun@nic.cz>
Change type of private struct member mdio_base from void * to
phys_addr_t. This allows us to drop 2 casts.
Signed-off-by: Marek Behún <marek.behun@nic.cz>
---
drivers/net/ti/keystone_net.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/drivers/net/ti/keystone_net.c b/drivers/net/ti/keystone_net.c
index 3c1f616086..fbec69f571 100644
--- a/drivers/net/ti/keystone_net.c
+++ b/drivers/net/ti/keystone_net.c
@@ -92,7 +92,7 @@ struct ks2_eth_priv {
phy_interface_t phy_if;
ofnode phy_ofnode;
int sgmii_link_type;
- void * mdio_base;
+ phys_addr_t mdio_base;
struct rx_buff_desc net_rx_buffs;
struct pktdma_cfg *netcp_pktdma;
void *hd;
@@ -569,7 +569,7 @@ static int ks2_eth_probe(struct udevice *dev)
* to re-use the same
*/
mdio_bus = cpsw_mdio_init("ethernet-mdio",
- (u32)priv->mdio_base,
+ priv->mdio_base,
EMAC_MDIO_CLOCK_FREQ,
EMAC_MDIO_BUS_FREQ);
if (!mdio_bus) {
@@ -701,7 +701,7 @@ static int ks2_eth_parse_slave_interface(ofnode netcp, ofnode slave,
pr_err("mdio dt not found\n");
return -ENODEV;
}
- priv->mdio_base = (void *)ofnode_get_addr(mdio);
+ priv->mdio_base = ofnode_get_addr(mdio);
}
if (priv->link_type == LINK_TYPE_SGMII_MAC_TO_PHY_MODE) {
--
2.35.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH u-boot-net 1/3] driver: net: ti: keystone_net: Deduplicate code
2022-04-11 19:20 ` [PATCH u-boot-net 1/3] driver: net: ti: keystone_net: Deduplicate code Marek Behún
@ 2022-04-12 19:53 ` Ramon Fried
0 siblings, 0 replies; 8+ messages in thread
From: Ramon Fried @ 2022-04-12 19:53 UTC (permalink / raw)
To: Marek Behún
Cc: Joe Hershberger, U-Boot Mailing List, Marek Behún,
Grygorii Strashko, Murali Karicheri
On Mon, Apr 11, 2022 at 10:21 PM Marek Behún <kabel@kernel.org> wrote:
>
> From: Marek Behún <marek.behun@nic.cz>
>
> Deduplicate common code in ks2_eth_bind_slaves().
>
> Signed-off-by: Marek Behún <marek.behun@nic.cz>
> ---
> drivers/net/ti/keystone_net.c | 75 ++++++++++++++++-------------------
> 1 file changed, 34 insertions(+), 41 deletions(-)
>
> diff --git a/drivers/net/ti/keystone_net.c b/drivers/net/ti/keystone_net.c
> index 16e3f32bb0..3ee4740ec5 100644
> --- a/drivers/net/ti/keystone_net.c
> +++ b/drivers/net/ti/keystone_net.c
> @@ -621,58 +621,51 @@ static const struct eth_ops ks2_eth_ops = {
> .write_hwaddr = ks2_eth_write_hwaddr,
> };
>
> -static int ks2_eth_bind_slaves(struct udevice *dev, int gbe, int *gbe_0)
> +static int ks2_bind_one_slave(struct udevice *dev, int slave, int *gbe_0)
> {
> const void *fdt = gd->fdt_blob;
> - struct udevice *sl_dev;
> - int interfaces;
> - int sec_slave;
> - int slave;
> - int ret;
> char *slave_name;
> + int slave_no;
> + int ret;
> +
> + slave_no = fdtdec_get_int(fdt, slave, "slave-port", -ENOENT);
> + if (slave_no == -ENOENT)
> + return 0;
> +
> + if (gbe_0 && slave_no == 0) {
> + /* This is the current eth device */
> + *gbe_0 = slave;
> + return 0;
> + }
> +
> + /* Slave devices to be registered */
> + slave_name = malloc(20);
> + snprintf(slave_name, 20, "netcp@slave-%d", slave_no);
> + ret = device_bind_driver_to_node(dev, "eth_ks2_sl", slave_name,
> + offset_to_ofnode(slave), NULL);
> + if (ret)
> + pr_err("ks2_net - not able to bind slave interfaces\n");
> +
> + return ret;
> +}
> +
> +static int ks2_eth_bind_slaves(struct udevice *dev, int gbe, int *gbe_0)
> +{
> + int interfaces, sec_slave, slave, ret;
> + const void *fdt = gd->fdt_blob;
>
> interfaces = fdt_subnode_offset(fdt, gbe, "interfaces");
> fdt_for_each_subnode(slave, fdt, interfaces) {
> - int slave_no;
> -
> - slave_no = fdtdec_get_int(fdt, slave, "slave-port", -ENOENT);
> - if (slave_no == -ENOENT)
> - continue;
> -
> - if (slave_no == 0) {
> - /* This is the current eth device */
> - *gbe_0 = slave;
> - } else {
> - /* Slave devices to be registered */
> - slave_name = malloc(20);
> - snprintf(slave_name, 20, "netcp@slave-%d", slave_no);
> - ret = device_bind_driver_to_node(dev, "eth_ks2_sl",
> - slave_name, offset_to_ofnode(slave),
> - &sl_dev);
> - if (ret) {
> - pr_err("ks2_net - not able to bind slave interfaces\n");
> - return ret;
> - }
> - }
> + ret = ks2_bind_one_slave(dev, slave, gbe_0);
> + if (ret)
> + return ret;
> }
>
> sec_slave = fdt_subnode_offset(fdt, gbe, "secondary-slave-ports");
> fdt_for_each_subnode(slave, fdt, sec_slave) {
> - int slave_no;
> -
> - slave_no = fdtdec_get_int(fdt, slave, "slave-port", -ENOENT);
> - if (slave_no == -ENOENT)
> - continue;
> -
> - /* Slave devices to be registered */
> - slave_name = malloc(20);
> - snprintf(slave_name, 20, "netcp@slave-%d", slave_no);
> - ret = device_bind_driver_to_node(dev, "eth_ks2_sl", slave_name,
> - offset_to_ofnode(slave), &sl_dev);
> - if (ret) {
> - pr_err("ks2_net - not able to bind slave interfaces\n");
> + ret = ks2_bind_one_slave(dev, slave, NULL);
> + if (ret)
> return ret;
> - }
> }
>
> return 0;
> --
> 2.35.1
>
Reviewed-by: Ramon Fried <rfried.dev@gmail.com>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH u-boot-net 2/3] driver: net: ti: keystone_net: Convert to ofnode functions
2022-04-11 19:20 ` [PATCH u-boot-net 2/3] driver: net: ti: keystone_net: Convert to ofnode functions Marek Behún
@ 2022-04-12 19:54 ` Ramon Fried
0 siblings, 0 replies; 8+ messages in thread
From: Ramon Fried @ 2022-04-12 19:54 UTC (permalink / raw)
To: Marek Behún
Cc: Joe Hershberger, U-Boot Mailing List, Marek Behún,
Grygorii Strashko, Murali Karicheri
On Mon, Apr 11, 2022 at 10:21 PM Marek Behún <kabel@kernel.org> wrote:
>
> From: Marek Behún <marek.behun@nic.cz>
>
> Convert fdt parsing functions to ofnode parsing functions.
>
> Signed-off-by: Marek Behún <marek.behun@nic.cz>
> ---
> drivers/net/ti/keystone_net.c | 113 +++++++++++++++-------------------
> 1 file changed, 48 insertions(+), 65 deletions(-)
>
> diff --git a/drivers/net/ti/keystone_net.c b/drivers/net/ti/keystone_net.c
> index 3ee4740ec5..3c1f616086 100644
> --- a/drivers/net/ti/keystone_net.c
> +++ b/drivers/net/ti/keystone_net.c
> @@ -23,7 +23,6 @@
> #include <asm/ti-common/keystone_net.h>
> #include <asm/ti-common/keystone_serdes.h>
> #include <asm/arch/psc_defs.h>
> -#include <linux/libfdt.h>
>
> #include "cpsw_mdio.h"
>
> @@ -91,9 +90,9 @@ struct ks2_eth_priv {
> struct mii_dev *mdio_bus;
> int phy_addr;
> phy_interface_t phy_if;
> - int phy_of_handle;
> + ofnode phy_ofnode;
> int sgmii_link_type;
> - void *mdio_base;
> + void * mdio_base;
> struct rx_buff_desc net_rx_buffs;
> struct pktdma_cfg *netcp_pktdma;
> void *hd;
> @@ -593,8 +592,8 @@ static int ks2_eth_probe(struct udevice *dev)
> priv->phydev = phy_connect(priv->mdio_bus, priv->phy_addr,
> dev, priv->phy_if);
> #ifdef CONFIG_DM_ETH
> - if (priv->phy_of_handle)
> - priv->phydev->node = offset_to_ofnode(priv->phy_of_handle);
> + if (ofnode_valid(priv->phy_ofnode))
> + priv->phydev->node = priv->phy_ofnode;
> #endif
> phy_config(priv->phydev);
> }
> @@ -621,15 +620,13 @@ static const struct eth_ops ks2_eth_ops = {
> .write_hwaddr = ks2_eth_write_hwaddr,
> };
>
> -static int ks2_bind_one_slave(struct udevice *dev, int slave, int *gbe_0)
> +static int ks2_bind_one_slave(struct udevice *dev, ofnode slave, ofnode *gbe_0)
> {
> - const void *fdt = gd->fdt_blob;
> char *slave_name;
> - int slave_no;
> + u32 slave_no;
> int ret;
>
> - slave_no = fdtdec_get_int(fdt, slave, "slave-port", -ENOENT);
> - if (slave_no == -ENOENT)
> + if (ofnode_read_u32(slave, "slave-port", &slave_no))
> return 0;
>
> if (gbe_0 && slave_no == 0) {
> @@ -641,28 +638,28 @@ static int ks2_bind_one_slave(struct udevice *dev, int slave, int *gbe_0)
> /* Slave devices to be registered */
> slave_name = malloc(20);
> snprintf(slave_name, 20, "netcp@slave-%d", slave_no);
> - ret = device_bind_driver_to_node(dev, "eth_ks2_sl", slave_name,
> - offset_to_ofnode(slave), NULL);
> + ret = device_bind_driver_to_node(dev, "eth_ks2_sl", slave_name, slave,
> + NULL);
> if (ret)
> pr_err("ks2_net - not able to bind slave interfaces\n");
>
> return ret;
> }
>
> -static int ks2_eth_bind_slaves(struct udevice *dev, int gbe, int *gbe_0)
> +static int ks2_eth_bind_slaves(struct udevice *dev, ofnode gbe, ofnode *gbe_0)
> {
> - int interfaces, sec_slave, slave, ret;
> - const void *fdt = gd->fdt_blob;
> + ofnode interfaces, sec_slave, slave;
> + int ret;
>
> - interfaces = fdt_subnode_offset(fdt, gbe, "interfaces");
> - fdt_for_each_subnode(slave, fdt, interfaces) {
> + interfaces = ofnode_find_subnode(gbe, "interfaces");
> + ofnode_for_each_subnode(slave, interfaces) {
> ret = ks2_bind_one_slave(dev, slave, gbe_0);
> if (ret)
> return ret;
> }
>
> - sec_slave = fdt_subnode_offset(fdt, gbe, "secondary-slave-ports");
> - fdt_for_each_subnode(slave, fdt, sec_slave) {
> + sec_slave = ofnode_find_subnode(gbe, "secondary-slave-ports");
> + ofnode_for_each_subnode(slave, sec_slave) {
> ret = ks2_bind_one_slave(dev, slave, NULL);
> if (ret)
> return ret;
> @@ -671,47 +668,40 @@ static int ks2_eth_bind_slaves(struct udevice *dev, int gbe, int *gbe_0)
> return 0;
> }
>
> -static int ks2_eth_parse_slave_interface(int netcp, int slave,
> +static int ks2_eth_parse_slave_interface(ofnode netcp, ofnode slave,
> struct ks2_eth_priv *priv,
> struct eth_pdata *pdata)
> {
> - const void *fdt = gd->fdt_blob;
> - int mdio;
> - int phy;
> + struct ofnode_phandle_args dma_args;
> + ofnode phy, mdio;
> int dma_count;
> - u32 dma_channel[8];
>
> - priv->slave_port = fdtdec_get_int(fdt, slave, "slave-port", -1);
> + priv->slave_port = ofnode_read_s32_default(slave, "slave-port", -1);
> priv->net_rx_buffs.rx_flow = priv->slave_port * 8;
>
> /* U-Boot slave port number starts with 1 instead of 0 */
> priv->slave_port += 1;
>
> - dma_count = fdtdec_get_int_array_count(fdt, netcp,
> - "ti,navigator-dmas",
> - dma_channel, 8);
> -
> - if (dma_count > (2 * priv->slave_port)) {
> - int dma_idx;
> -
> - dma_idx = priv->slave_port * 2 - 1;
> - priv->net_rx_buffs.rx_flow = dma_channel[dma_idx];
> - }
> -
> - priv->link_type = fdtdec_get_int(fdt, slave, "link-interface", -1);
> + dma_count = ofnode_count_phandle_with_args(netcp, "ti,navigator-dmas",
> + NULL, 1);
> + if (priv->slave_port < dma_count &&
> + !ofnode_parse_phandle_with_args(netcp, "ti,navigator-dmas", NULL, 1,
> + priv->slave_port - 1, &dma_args))
> + priv->net_rx_buffs.rx_flow = dma_args.args[0];
>
> - phy = fdtdec_lookup_phandle(fdt, slave, "phy-handle");
> + priv->link_type = ofnode_read_s32_default(slave, "link-interface", -1);
>
> - if (phy >= 0) {
> - priv->phy_of_handle = phy;
> - priv->phy_addr = fdtdec_get_int(fdt, phy, "reg", -1);
> + phy = ofnode_get_phy_node(slave);
> + priv->phy_ofnode = phy;
> + if (ofnode_valid(phy)) {
> + priv->phy_addr = ofnode_read_s32_default(phy, "reg", -1);
>
> - mdio = fdt_parent_offset(fdt, phy);
> - if (mdio < 0) {
> + mdio = ofnode_get_parent(phy);
> + if (!ofnode_valid(mdio)) {
> pr_err("mdio dt not found\n");
> return -ENODEV;
> }
> - priv->mdio_base = (void *)fdtdec_get_addr(fdt, mdio, "reg");
> + priv->mdio_base = (void *)ofnode_get_addr(mdio);
> }
>
> if (priv->link_type == LINK_TYPE_SGMII_MAC_TO_PHY_MODE) {
> @@ -720,7 +710,7 @@ static int ks2_eth_parse_slave_interface(int netcp, int slave,
> priv->sgmii_link_type = SGMII_LINK_MAC_PHY;
> priv->has_mdio = true;
> } else if (priv->link_type == LINK_TYPE_RGMII_LINK_MAC_PHY) {
> - priv->phy_if = ofnode_read_phy_mode(offset_to_ofnode(slave));
> + priv->phy_if = ofnode_read_phy_mode(slave);
> if (priv->phy_if == PHY_INTERFACE_MODE_NA)
> priv->phy_if = PHY_INTERFACE_MODE_RGMII;
> pdata->phy_interface = priv->phy_if;
> @@ -741,23 +731,19 @@ static int ks2_eth_parse_slave_interface(int netcp, int slave,
>
> static int ks2_sl_eth_of_to_plat(struct udevice *dev)
> {
> + ofnode slave, interfaces, gbe, netcp_devices, netcp;
> struct ks2_eth_priv *priv = dev_get_priv(dev);
> struct eth_pdata *pdata = dev_get_plat(dev);
> - const void *fdt = gd->fdt_blob;
> - int slave = dev_of_offset(dev);
> - int interfaces;
> - int gbe;
> - int netcp_devices;
> - int netcp;
> -
> - interfaces = fdt_parent_offset(fdt, slave);
> - gbe = fdt_parent_offset(fdt, interfaces);
> - netcp_devices = fdt_parent_offset(fdt, gbe);
> - netcp = fdt_parent_offset(fdt, netcp_devices);
> +
> + slave = dev_ofnode(dev);
> + interfaces = ofnode_get_parent(slave);
> + gbe = ofnode_get_parent(interfaces);
> + netcp_devices = ofnode_get_parent(gbe);
> + netcp = ofnode_get_parent(netcp_devices);
>
> ks2_eth_parse_slave_interface(netcp, slave, priv, pdata);
>
> - pdata->iobase = fdtdec_get_addr(fdt, netcp, "reg");
> + pdata->iobase = ofnode_get_addr(netcp);
>
> return 0;
> }
> @@ -766,18 +752,15 @@ static int ks2_eth_of_to_plat(struct udevice *dev)
> {
> struct ks2_eth_priv *priv = dev_get_priv(dev);
> struct eth_pdata *pdata = dev_get_plat(dev);
> - const void *fdt = gd->fdt_blob;
> - int gbe_0 = -ENODEV;
> - int netcp_devices;
> - int gbe;
> + ofnode netcp_devices, gbe, gbe_0;
>
> - netcp_devices = fdt_subnode_offset(fdt, dev_of_offset(dev),
> - "netcp-devices");
> - gbe = fdt_subnode_offset(fdt, netcp_devices, "gbe");
> + netcp_devices = dev_read_subnode(dev, "netcp-devices");
> + gbe = ofnode_find_subnode(netcp_devices, "gbe");
>
> + gbe_0 = ofnode_null();
> ks2_eth_bind_slaves(dev, gbe, &gbe_0);
>
> - ks2_eth_parse_slave_interface(dev_of_offset(dev), gbe_0, priv, pdata);
> + ks2_eth_parse_slave_interface(dev_ofnode(dev), gbe_0, priv, pdata);
>
> pdata->iobase = dev_read_addr(dev);
>
> --
> 2.35.1
>
Reviewed-by: Ramon Fried <rfried.dev@gmail.com>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH u-boot-net 3/3] driver: net: ti: keystone_net: Change priv member type
2022-04-11 19:20 ` [PATCH u-boot-net 3/3] driver: net: ti: keystone_net: Change priv member type Marek Behún
@ 2022-04-12 19:54 ` Ramon Fried
0 siblings, 0 replies; 8+ messages in thread
From: Ramon Fried @ 2022-04-12 19:54 UTC (permalink / raw)
To: Marek Behún
Cc: Joe Hershberger, U-Boot Mailing List, Marek Behún,
Grygorii Strashko, Murali Karicheri
On Mon, Apr 11, 2022 at 10:21 PM Marek Behún <kabel@kernel.org> wrote:
>
> From: Marek Behún <marek.behun@nic.cz>
>
> Change type of private struct member mdio_base from void * to
> phys_addr_t. This allows us to drop 2 casts.
>
> Signed-off-by: Marek Behún <marek.behun@nic.cz>
> ---
> drivers/net/ti/keystone_net.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/net/ti/keystone_net.c b/drivers/net/ti/keystone_net.c
> index 3c1f616086..fbec69f571 100644
> --- a/drivers/net/ti/keystone_net.c
> +++ b/drivers/net/ti/keystone_net.c
> @@ -92,7 +92,7 @@ struct ks2_eth_priv {
> phy_interface_t phy_if;
> ofnode phy_ofnode;
> int sgmii_link_type;
> - void * mdio_base;
> + phys_addr_t mdio_base;
> struct rx_buff_desc net_rx_buffs;
> struct pktdma_cfg *netcp_pktdma;
> void *hd;
> @@ -569,7 +569,7 @@ static int ks2_eth_probe(struct udevice *dev)
> * to re-use the same
> */
> mdio_bus = cpsw_mdio_init("ethernet-mdio",
> - (u32)priv->mdio_base,
> + priv->mdio_base,
> EMAC_MDIO_CLOCK_FREQ,
> EMAC_MDIO_BUS_FREQ);
> if (!mdio_bus) {
> @@ -701,7 +701,7 @@ static int ks2_eth_parse_slave_interface(ofnode netcp, ofnode slave,
> pr_err("mdio dt not found\n");
> return -ENODEV;
> }
> - priv->mdio_base = (void *)ofnode_get_addr(mdio);
> + priv->mdio_base = ofnode_get_addr(mdio);
> }
>
> if (priv->link_type == LINK_TYPE_SGMII_MAC_TO_PHY_MODE) {
> --
> 2.35.1
>
Reviewed-by: Ramon Fried <rfried.dev@gmail.com>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH u-boot-net 0/3] A tiny batch of keystone_net changes
2022-04-11 19:20 [PATCH u-boot-net 0/3] A tiny batch of keystone_net changes Marek Behún
` (2 preceding siblings ...)
2022-04-11 19:20 ` [PATCH u-boot-net 3/3] driver: net: ti: keystone_net: Change priv member type Marek Behún
@ 2022-04-12 19:57 ` Ramon Fried
3 siblings, 0 replies; 8+ messages in thread
From: Ramon Fried @ 2022-04-12 19:57 UTC (permalink / raw)
To: Marek Behún; +Cc: Joe Hershberger, U-Boot Mailing List, Marek Behún
On Mon, Apr 11, 2022 at 10:21 PM Marek Behún <kabel@kernel.org> wrote:
>
> From: Marek Behún <marek.behun@nic.cz>
>
> Hello Ramon,
>
> here comes a tiny batch of changes for keystone_net.
> Applicable on top of net/next.
>
> Marek
>
> Marek Behún (3):
> driver: net: ti: keystone_net: Deduplicate code
> driver: net: ti: keystone_net: Convert to ofnode functions
> driver: net: ti: keystone_net: Change priv member type
>
> drivers/net/ti/keystone_net.c | 172 +++++++++++++++-------------------
> 1 file changed, 74 insertions(+), 98 deletions(-)
>
> --
> 2.35.1
>
Applied to u-boot-net/next,
Thanks,
Ramon
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2022-04-12 19:57 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-04-11 19:20 [PATCH u-boot-net 0/3] A tiny batch of keystone_net changes Marek Behún
2022-04-11 19:20 ` [PATCH u-boot-net 1/3] driver: net: ti: keystone_net: Deduplicate code Marek Behún
2022-04-12 19:53 ` Ramon Fried
2022-04-11 19:20 ` [PATCH u-boot-net 2/3] driver: net: ti: keystone_net: Convert to ofnode functions Marek Behún
2022-04-12 19:54 ` Ramon Fried
2022-04-11 19:20 ` [PATCH u-boot-net 3/3] driver: net: ti: keystone_net: Change priv member type Marek Behún
2022-04-12 19:54 ` Ramon Fried
2022-04-12 19:57 ` [PATCH u-boot-net 0/3] A tiny batch of keystone_net changes Ramon Fried
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox