net: altera_tse: get numbers of fdt address and size cells
PATCH 1/1 net: altera_tse: get numbers of fdt address and size cells
Get numbers of fdt address and size cells in altera_tse_probe(), thereby remove the assumption of one address cell and one size cell.
Signed-off-by Thomas Chou <[email protected]>
--- drivers/net/altera_tse.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-)
drivers/net/altera_tse.c +8 -6
@@ -409,20 +409,22 @@ static int altera_tse_probe(struct udevice *dev) {struct eth_pdata *pdata =dev_get_platdata (dev);struct altera_tse_priv *priv =dev_get_priv (dev); -const void *blob = gd->fdt_blob; +void *blob = (void *)gd->fdt_blob;int node = dev->of_offset;const char *list, *end;const fdt32_t *cell;void *base, *desc_mem =NULL ;unsigned long addr, size; +int parent, addrc, sizec;int len, idx;int ret;/* -* decode regs, assume address-cells and size-cells are both one. -* there are multiple reg tuples, and they need to match with -* reg-names. +* decode regs. there are multiple reg tuples, and they need to +* match with reg-names. */ + parent =fdt_parent_offset (blob, node); +of_bus_default_count_cells (blob, parent, &addrc, &sizec); list =fdt_getprop (blob, node,"reg-names" , &len);if (!list)return -ENOENT ;
@@ -434,7 +436,7 @@ static int altera_tse_probe(struct udevice *dev)while (list < end) { addr =fdt_translate_address ((void *)blob, node, cell + idx); - size =fdt_addr_to_cpu (cell[idx +1 ]); + size =fdt_addr_to_cpu (cell[idx + addrc]); base =ioremap (addr, size); len =strlen (list);if (strcmp (list,"control_port" ) ==0 )
@@ -445,7 +447,7 @@ static int altera_tse_probe(struct udevice *dev) priv->sgdma_tx = base; else if (strcmp(list, "s1") == 0) desc_mem = base; - idx +=2 ; + idx += addrc + sizec; list += (len +1 ); }/* decode fifo depth */
Signature · 1 line
2.5.0
PATCH 1/1 net: altera_tse: get numbers of fdt address and size cells
Hi Thomas,
Quoted 6 lines · Thomas Chou
Get numbers of fdt address and size cells in
altera_tse_probe(), thereby remove the assumption of one address cell and one size cell.Signed-off-by Thomas Chou <[email protected]>---
Acked-by Joe Hershberger <[email protected]>
PATCH 1/1 net: altera_tse: get numbers of fdt address and size cells
In reply to Thomas ChouQuoted 9 lines · Thomas Chou
Get numbers of fdt address and size cells in
altera_tse_probe(), thereby remove the assumption of one address cell and one size cell.Signed-off-by Thomas Chou <[email protected]>--- drivers/net/altera_tse.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-)
Applied to u-boot-nios.
Quoted 50 lines
drivers/net/altera_tse.c +8
-6@@ -409,20 +409,22 @@ static int altera_tse_probe(struct udevice *dev) {struct eth_pdata *pdata =dev_get_platdata (dev);struct altera_tse_priv *priv =dev_get_priv (dev); -const void *blob = gd->fdt_blob; +void *blob = (void *)gd->fdt_blob;int node = dev->of_offset;const char *list, *end;const fdt32_t *cell;void *base, *desc_mem =NULL ;unsigned long addr, size; +int parent, addrc, sizec;int len, idx;int ret;/* -* decode regs, assume address-cells and size-cells are both one. -* there are multiple reg tuples, and they need to match with -* reg-names. +* decode regs. there are multiple reg tuples, and they need to +* match with reg-names. */ + parent =fdt_parent_offset (blob, node); +of_bus_default_count_cells (blob, parent, &addrc, &sizec); list =fdt_getprop (blob, node,"reg-names" , &len);if (!list)return -ENOENT ;@@ -434,7 +436,7 @@ static int altera_tse_probe(struct udevice *dev)while (list < end) { addr =fdt_translate_address ((void *)blob, node, cell + idx); - size =fdt_addr_to_cpu (cell[idx +1 ]); + size =fdt_addr_to_cpu (cell[idx + addrc]); base =ioremap (addr, size); len =strlen (list);if (strcmp (list,"control_port" ) ==0 )@@ -445,7 +447,7 @@ static int altera_tse_probe(struct udevice *dev) priv->sgdma_tx = base; else if (strcmp(list, "s1") == 0) desc_mem = base; - idx +=2 ; + idx += addrc + sizec; list += (len +1 ); }/* decode fifo depth */