diff options
Diffstat (limited to 'drivers/net')
-rw-r--r-- | drivers/net/ethernet/freescale/dpa/dpaa_eth_base.c | 41 |
1 files changed, 17 insertions, 24 deletions
diff --git a/drivers/net/ethernet/freescale/dpa/dpaa_eth_base.c b/drivers/net/ethernet/freescale/dpa/dpaa_eth_base.c index 760718e..9c2204d 100644 --- a/drivers/net/ethernet/freescale/dpa/dpaa_eth_base.c +++ b/drivers/net/ethernet/freescale/dpa/dpaa_eth_base.c @@ -69,33 +69,24 @@ static int dpa_bp_cmp(const void *dpa_bp0, const void *dpa_bp1) struct dpa_bp * __cold __must_check /* __attribute__((nonnull)) */ dpa_bp_probe(struct platform_device *_of_dev, size_t *count) { - int i, lenp, na, ns; + int i, lenp, na, ns, err; struct device *dev; struct device_node *dev_node; - const phandle *phandle_prop; - const uint32_t *bpid; - const uint32_t *bpool_cfg; + const __be32 *bpool_cfg; struct dpa_bp *dpa_bp; + u32 bpid; dev = &_of_dev->dev; - /* The default is one, if there's no property */ - *count = 1; - - /* Get the buffer pools to be used */ - phandle_prop = of_get_property(dev->of_node, - "fsl,bman-buffer-pools", &lenp); - - if (phandle_prop) - *count = lenp / sizeof(phandle); - else { - dev_err(dev, - "missing fsl,bman-buffer-pools device tree entry\n"); + *count = of_count_phandle_with_args(dev->of_node, + "fsl,bman-buffer-pools", NULL); + if (*count < 1) { + dev_err(dev, "missing fsl,bman-buffer-pools device tree entry\n"); return ERR_PTR(-EINVAL); } dpa_bp = devm_kzalloc(dev, *count * sizeof(*dpa_bp), GFP_KERNEL); - if (unlikely(dpa_bp == NULL)) { + if (dpa_bp == NULL) { dev_err(dev, "devm_kzalloc() failed\n"); return ERR_PTR(-ENOMEM); } @@ -109,10 +100,12 @@ dpa_bp_probe(struct platform_device *_of_dev, size_t *count) na = of_n_addr_cells(dev_node); ns = of_n_size_cells(dev_node); - for (i = 0; i < *count && phandle_prop; i++) { + for (i = 0; i < *count; i++) { of_node_put(dev_node); - dev_node = of_find_node_by_phandle(phandle_prop[i]); - if (unlikely(dev_node == NULL)) { + + dev_node = of_parse_phandle(dev->of_node, + "fsl,bman-buffer-pools", i); + if (dev_node == NULL) { dev_err(dev, "of_find_node_by_phandle() failed\n"); return ERR_PTR(-EFAULT); } @@ -125,13 +118,13 @@ dpa_bp_probe(struct platform_device *_of_dev, size_t *count) goto _return_of_node_put; } - bpid = of_get_property(dev_node, "fsl,bpid", &lenp); - if ((bpid == NULL) || (lenp != sizeof(*bpid))) { - dev_err(dev, "fsl,bpid property not found.\n"); + err = of_property_read_u32(dev_node, "fsl,bpid", &bpid); + if (err) { + dev_err(dev, "Cannot find buffer pool ID in the device tree\n"); dpa_bp = ERR_PTR(-EINVAL); goto _return_of_node_put; } - dpa_bp[i].bpid = (uint8_t)*bpid; + dpa_bp[i].bpid = (uint8_t)bpid; bpool_cfg = of_get_property(dev_node, "fsl,bpool-ethernet-cfg", &lenp); |