2015-06-03 23:41:36

by Marek Vasut

[permalink] [raw]
Subject: Re: [PATCH 04/11] mtd: ofpart: do not fail probe when no partitions exist

On Wednesday, June 03, 2015 at 11:26:40 PM, Michal Suchanek wrote:
> On Exynos it is necessary to set SPI controller parameters that apply to
> a SPI slave in a DT subnode of the slave device. The ofpart code returns
> an error when there are subnodes of the SPI flash but no partitions are
> found. Change this condition to a warning so that flash without
> partitions can be accessed on Exynos.

I have to admit the rationale for this patch is not very clear to me, sorry.
Can you please explain this a bit more ?

Best regards,
Marek Vasut


2015-06-04 04:54:49

by Michal Suchanek

[permalink] [raw]
Subject: Re: [PATCH 04/11] mtd: ofpart: do not fail probe when no partitions exist

On 4 June 2015 at 00:58, Marek Vasut <[email protected]> wrote:
> On Wednesday, June 03, 2015 at 11:26:40 PM, Michal Suchanek wrote:
>> On Exynos it is necessary to set SPI controller parameters that apply to
>> a SPI slave in a DT subnode of the slave device. The ofpart code returns
>> an error when there are subnodes of the SPI flash but no partitions are
>> found. Change this condition to a warning so that flash without
>> partitions can be accessed on Exynos.
>
> I have to admit the rationale for this patch is not very clear to me, sorry.
> Can you please explain this a bit more ?

This is how the DT entry for SPI slave looks with s3c64xx:
flash: m25p80@0 {
#address-cells = <1>;
#size-cells = <1>;
compatible = "jedec,spi-nor";
reg = <0>;
spi-max-frequency = <40000000>;
linux,max_tx_len = <65536>;
m25p,fast-read;
controller-data {
samsung,spi-feedback-delay = <0>;
};
};

this is example of flash partitions:
flash@0 {
#address-cells = <1>;
#size-cells = <1>;

partition@0 {
label = "u-boot";
reg = <0x0000000 0x100000>;
read-only;
};

uimage@100000 {
reg = <0x0100000 0x200000>;
};
};

The parser ignores any flash without subnodes and returns 0 (no
partititon). When there is a subnode it assumes the flash is
partitioned and tries to parse the subnodes as partitions. When there
are subnodes and none parses as partition an error is returned. As
shown above it is valid to have subnodes on unpartitioned flash.

When an error is returned from a partition parser the mtdpart code
passes on this error to the flash probe function and the proble of the
flash fails.

Thanks

Michal

2015-06-04 15:30:01

by Marek Vasut

[permalink] [raw]
Subject: Re: [PATCH 04/11] mtd: ofpart: do not fail probe when no partitions exist

On Thursday, June 04, 2015 at 06:54:00 AM, Michal Suchanek wrote:
> On 4 June 2015 at 00:58, Marek Vasut <[email protected]> wrote:
> > On Wednesday, June 03, 2015 at 11:26:40 PM, Michal Suchanek wrote:
> >> On Exynos it is necessary to set SPI controller parameters that apply to
> >> a SPI slave in a DT subnode of the slave device. The ofpart code returns
> >> an error when there are subnodes of the SPI flash but no partitions are
> >> found. Change this condition to a warning so that flash without
> >> partitions can be accessed on Exynos.
> >
> > I have to admit the rationale for this patch is not very clear to me,
> > sorry. Can you please explain this a bit more ?
>
> This is how the DT entry for SPI slave looks with s3c64xx:
> flash: m25p80@0 {
> #address-cells = <1>;
> #size-cells = <1>;
> compatible = "jedec,spi-nor";
> reg = <0>;
> spi-max-frequency = <40000000>;
> linux,max_tx_len = <65536>;

SIDENOTE: I thought this was actually added by your patch #8 in this
series. The underscores in the name of the property are not really
consistent with the rest of the names.

> m25p,fast-read;
> controller-data {
> samsung,spi-feedback-delay = <0>;
> };
> };
>
> this is example of flash partitions:
> flash@0 {
> #address-cells = <1>;
> #size-cells = <1>;
>
> partition@0 {
> label = "u-boot";
> reg = <0x0000000 0x100000>;
> read-only;
> };
>
> uimage@100000 {
> reg = <0x0100000 0x200000>;
> };
> };
>
> The parser ignores any flash without subnodes and returns 0 (no
> partititon). When there is a subnode it assumes the flash is
> partitioned and tries to parse the subnodes as partitions. When there
> are subnodes and none parses as partition an error is returned. As
> shown above it is valid to have subnodes on unpartitioned flash.
>
> When an error is returned from a partition parser the mtdpart code
> passes on this error to the flash probe function and the proble of the
> flash fails.

What does /proc/mtd tell you when you have no partitions defined
in the DT ? It should provide you with the entire MTD device and
the code shouldn't even try to parse any OF partitions, since you
don't have any.

Best regards,
Marek Vasut

2015-06-04 15:41:45

by Michal Suchanek

[permalink] [raw]
Subject: Re: [PATCH 04/11] mtd: ofpart: do not fail probe when no partitions exist

On 4 June 2015 at 17:28, Marek Vasut <[email protected]> wrote:
> On Thursday, June 04, 2015 at 06:54:00 AM, Michal Suchanek wrote:
>> On 4 June 2015 at 00:58, Marek Vasut <[email protected]> wrote:
>> > On Wednesday, June 03, 2015 at 11:26:40 PM, Michal Suchanek wrote:
>> >> On Exynos it is necessary to set SPI controller parameters that apply to
>> >> a SPI slave in a DT subnode of the slave device. The ofpart code returns
>> >> an error when there are subnodes of the SPI flash but no partitions are
>> >> found. Change this condition to a warning so that flash without
>> >> partitions can be accessed on Exynos.
>> >
>> > I have to admit the rationale for this patch is not very clear to me,
>> > sorry. Can you please explain this a bit more ?
>>
>> This is how the DT entry for SPI slave looks with s3c64xx:
>> flash: m25p80@0 {
>> #address-cells = <1>;
>> #size-cells = <1>;
>> compatible = "jedec,spi-nor";
>> reg = <0>;
>> spi-max-frequency = <40000000>;
>> linux,max_tx_len = <65536>;
>
> SIDENOTE: I thought this was actually added by your patch #8 in this
> series. The underscores in the name of the property are not really
> consistent with the rest of the names.
>
>> m25p,fast-read;
>> controller-data {
>> samsung,spi-feedback-delay = <0>;
>> };
>> };
>>
>> this is example of flash partitions:
>> flash@0 {
>> #address-cells = <1>;
>> #size-cells = <1>;
>>
>> partition@0 {
>> label = "u-boot";
>> reg = <0x0000000 0x100000>;
>> read-only;
>> };
>>
>> uimage@100000 {
>> reg = <0x0100000 0x200000>;
>> };
>> };
>>
>> The parser ignores any flash without subnodes and returns 0 (no
>> partititon). When there is a subnode it assumes the flash is
>> partitioned and tries to parse the subnodes as partitions. When there
>> are subnodes and none parses as partition an error is returned. As
>> shown above it is valid to have subnodes on unpartitioned flash.
>>
>> When an error is returned from a partition parser the mtdpart code
>> passes on this error to the flash probe function and the proble of the
>> flash fails.
>
> What does /proc/mtd tell you when you have no partitions defined
> in the DT ? It should provide you with the entire MTD device and
> the code shouldn't even try to parse any OF partitions, since you
> don't have any.

mtdinfo shows I have no mtd devices and the log shows that probe
failed unless I patch the kernel.

When there is *support* for of partitions the ofparser is run on mtd
probe. If it fails because it considers

>> controller-data {
>> samsung,spi-feedback-delay = <0>;
>> };

an invalid partition and does not find any valid partition the probe fails.

There are two problems here

1) the above is not invalid. It just is not a partition. The parser
should not fail seeing this

2) the mtd probe should not fail when a partition parser fails and
should present the unpartitioned device

Both are addressed in separate patches.

Thanks

Michal

2015-06-05 14:39:13

by Marek Vasut

[permalink] [raw]
Subject: Re: [PATCH 04/11] mtd: ofpart: do not fail probe when no partitions exist

On Thursday, June 04, 2015 at 05:40:58 PM, Michal Suchanek wrote:
> On 4 June 2015 at 17:28, Marek Vasut <[email protected]> wrote:
> > On Thursday, June 04, 2015 at 06:54:00 AM, Michal Suchanek wrote:
> >> On 4 June 2015 at 00:58, Marek Vasut <[email protected]> wrote:
> >> > On Wednesday, June 03, 2015 at 11:26:40 PM, Michal Suchanek wrote:
> >> >> On Exynos it is necessary to set SPI controller parameters that apply
> >> >> to a SPI slave in a DT subnode of the slave device. The ofpart code
> >> >> returns an error when there are subnodes of the SPI flash but no
> >> >> partitions are found. Change this condition to a warning so that
> >> >> flash without partitions can be accessed on Exynos.
> >> >
> >> > I have to admit the rationale for this patch is not very clear to me,
> >> > sorry. Can you please explain this a bit more ?
> >>
> >> This is how the DT entry for SPI slave looks with s3c64xx:
> >> flash: m25p80@0 {
> >>
> >> #address-cells = <1>;
> >> #size-cells = <1>;
> >> compatible = "jedec,spi-nor";
> >> reg = <0>;
> >> spi-max-frequency = <40000000>;
> >> linux,max_tx_len = <65536>;
> >
> > SIDENOTE: I thought this was actually added by your patch #8 in this
> > series. The underscores in the name of the property are not really
> > consistent with the rest of the names.
> >
> >> m25p,fast-read;
> >> controller-data {
> >>
> >> samsung,spi-feedback-delay = <0>;
> >>
> >> };
> >>
> >> };
> >>
> >> this is example of flash partitions:
> >> flash@0 {
> >>
> >> #address-cells = <1>;
> >> #size-cells = <1>;
> >>
> >> partition@0 {
> >>
> >> label = "u-boot";
> >> reg = <0x0000000 0x100000>;
> >> read-only;
> >>
> >> };
> >>
> >> uimage@100000 {
> >>
> >> reg = <0x0100000 0x200000>;
> >>
> >> };
> >>
> >> };
> >>
> >> The parser ignores any flash without subnodes and returns 0 (no
> >> partititon). When there is a subnode it assumes the flash is
> >> partitioned and tries to parse the subnodes as partitions. When there
> >> are subnodes and none parses as partition an error is returned. As
> >> shown above it is valid to have subnodes on unpartitioned flash.
> >>
> >> When an error is returned from a partition parser the mtdpart code
> >> passes on this error to the flash probe function and the proble of the
> >> flash fails.
> >
> > What does /proc/mtd tell you when you have no partitions defined
> > in the DT ? It should provide you with the entire MTD device and
> > the code shouldn't even try to parse any OF partitions, since you
> > don't have any.
>
> mtdinfo shows I have no mtd devices and the log shows that probe
> failed unless I patch the kernel.
>
> When there is *support* for of partitions the ofparser is run on mtd
> probe. If it fails because it considers
>
> >> controller-data {
> >>
> >> samsung,spi-feedback-delay = <0>;
> >>
> >> };
>
> an invalid partition and does not find any valid partition the probe fails.

OK, now it has become clearer to me, thanks!

> There are two problems here
>
> 1) the above is not invalid. It just is not a partition. The parser
> should not fail seeing this

The parser should complain verbosely and ignore this I guess ?

> 2) the mtd probe should not fail when a partition parser fails and
> should present the unpartitioned device

OK

> Both are addressed in separate patches.
>
> Thanks
>
> Michal