Messages in this thread | | | Date | Sat, 4 Apr 2015 18:38:14 +0200 | From | Andrew Lunn <> | Subject | Re: [PATCH] net: dsa: fix filling rtable from OF description |
| |
Hi Pavel
There is the code after applying your patch:
static int dsa_of_setup_routing_table(struct dsa_platform_data *pd, struct dsa_chip_data *cd, int chip_index, int port_index, struct device_node *link) { const __be32 *reg; int link_sw_addr; struct device_node *parent_sw; int len;
parent_sw = of_get_parent(link); if (!parent_sw) return -EINVAL;
link is the phandle to the port in other switch. parent_sw is then the switch property.
reg = of_get_property(parent_sw, "reg", &len); if (!reg || (len != sizeof(*reg) * 2)) return -EINVAL;
So now you get the reg property. This is documented as:
- reg : Describes the switch address on the MII bus
link_sw_addr = be32_to_cpup(reg + 1);
if (link_sw_addr >= pd->nr_chips) return -EINVAL;
This is now not making much sense.
Looking up the MII bus address seems wrong. You want the chip number, not its address.
Andrew
/* First time routing table allocation */ if (!cd->rtable) { cd->rtable = kmalloc_array(pd->nr_chips, sizeof(s8), GFP_KERNEL); if (!cd->rtable) return -ENOMEM;
/* default to no valid uplink/downlink */ memset(cd->rtable, -1, pd->nr_chips * sizeof(s8)); }
cd->rtable[link_sw_addr] = port_index;
return 0; }
| |