Message ID | 3a708bb0-af78-4d31-b61f-8cff1612be8d@zimbra |
---|---|
State | New, archived |
Headers | show |
于 2013年02月20日 06:23, Aaron Sierra 写道: > Author: Joe Schaack<jschaack@xes-inc.com> > > Previously, partitions were limited to less than 4 GB in size because > the address and size were read as 32-bit values. Add support for 64-bit > values to support devices of 4 GB and larger. > > Signed-off-by: Joe Schaack<jschaack@xes-inc.com> > Signed-off-by: Nate Case<ncase@xes-inc.com> > Signed-off-by: Aaron Sierra<asierra@xes-inc.com> > --- > drivers/mtd/ofpart.c | 7 +++++-- > 1 file changed, 5 insertions(+), 2 deletions(-) > > diff --git a/drivers/mtd/ofpart.c b/drivers/mtd/ofpart.c > index 30bd907..553d6d6 100644 > --- a/drivers/mtd/ofpart.c > +++ b/drivers/mtd/ofpart.c > @@ -55,6 +55,7 @@ static int parse_ofpart_partitions(struct mtd_info *master, > while ((pp = of_get_next_child(node, pp))) { > const __be32 *reg; > int len; > + int a_cells, s_cells; > > reg = of_get_property(pp, "reg",&len); > if (!reg) { > @@ -62,8 +63,10 @@ static int parse_ofpart_partitions(struct mtd_info *master, > continue; > } > > - (*pparts)[i].offset = be32_to_cpu(reg[0]); > - (*pparts)[i].size = be32_to_cpu(reg[1]); > + a_cells = of_n_addr_cells(pp); > + s_cells = of_n_size_cells(pp); > + (*pparts)[i].offset = of_read_number(reg, a_cells); > + (*pparts)[i].size = of_read_number(reg + a_cells, s_cells); > > partname = of_get_property(pp, "label",&len); > if (!partname) I think it's better to update the Documentation/devicetree/bindings/mtd/partition.txt too. for example, add a example for the partition larger then 4G. thanks Huang Shijie
> > Previously, partitions were limited to less than 4 GB in size > > because > > the address and size were read as 32-bit values. Add support for > > 64-bit > > values to support devices of 4 GB and larger. > > > > Signed-off-by: Joe Schaack<jschaack@xes-inc.com> > > Signed-off-by: Nate Case<ncase@xes-inc.com> > > Signed-off-by: Aaron Sierra<asierra@xes-inc.com> > > --- > > drivers/mtd/ofpart.c | 7 +++++-- > > 1 file changed, 5 insertions(+), 2 deletions(-) > I think it's better to update the > Documentation/devicetree/bindings/mtd/partition.txt too. for example, > add a example for the partition larger then 4G. > > thanks > Huang Shijie > Good idea Huang, I'm on it. -Aaron S.
diff --git a/drivers/mtd/ofpart.c b/drivers/mtd/ofpart.c index 30bd907..553d6d6 100644 --- a/drivers/mtd/ofpart.c +++ b/drivers/mtd/ofpart.c @@ -55,6 +55,7 @@ static int parse_ofpart_partitions(struct mtd_info *master, while ((pp = of_get_next_child(node, pp))) { const __be32 *reg; int len; + int a_cells, s_cells; reg = of_get_property(pp, "reg", &len); if (!reg) { @@ -62,8 +63,10 @@ static int parse_ofpart_partitions(struct mtd_info *master, continue; } - (*pparts)[i].offset = be32_to_cpu(reg[0]); - (*pparts)[i].size = be32_to_cpu(reg[1]); + a_cells = of_n_addr_cells(pp); + s_cells = of_n_size_cells(pp); + (*pparts)[i].offset = of_read_number(reg, a_cells); + (*pparts)[i].size = of_read_number(reg + a_cells, s_cells); partname = of_get_property(pp, "label", &len); if (!partname)