sam9x5: MTD numbering changed

Boris Brezillon boris.brezillon at free-electrons.com
Thu Nov 2 05:39:54 PDT 2017


+Nicolas

Hi Richard,

On Thu, 02 Nov 2017 12:17:16 +0100
Richard Genoud <richard.genoud at gmail.com> wrote:

> Hi,
> 
> I've got an at91sam9g35-cm based board, with 4 partition on the spi-
> dataflas and 5 partitions on the NAND flash.
> Before commit 1004a2977bdc ("ARM: dts: at91: Switch to the new NAND bindings"),
> the NAND partitions were mtd0-4 and spi-dataflash partitions mtd5-8.
> 
> Since commit 1004a2977bdc ("ARM: dts: at91: Switch to the new NAND bindings"),
> the spi-dataflash partitions are discovered before the NAND partitions.
> So NAND partition became mtd4-8 and spi-dataflash partition mtd0-3.
> 
> This broke some script that relied on the mtd numbering.
> 
> Updating those scripts to rely on the mtd device name instead of
> number is not really a problem. The real problem is when an older
> script using mtd numbering is run on the new system : I expect dead
> kittens everywhere !

Crap! That was one of the thing I was afraid of when changing the
binding: probe order has an impact on ids assigned to MTD devs, and
since things are not defined at the same place in the DT, it changes
the probe order.

> 
> So, I'd like to know if there's a way to force the older numbering ?

Reverting the patches is probably the easiest way (and it's easily
backportable). Now, if we want to switch to the new bindings at some
point we'll need to support DT aliases for mtd devs:

aliases {
	mtdX = &flashpartN;
	mtdY = &flashdevM;
};

The problem with this solution is that it only works if all partitions
are defined in the DT, which is not always the case (they can be defined
on the command line with mtdparts=).

> (I tried poking around the DTS without succès).
> 
> any idea ?

I don't have a perfect solution, but the problem you report clearly
shows that relying on MTD numbering is unsafe and should be avoided.

Regards,

Boris

> 
> regards,
> Richard.
> 
> 
> PS:
> DTS looks like that:
> /dts-v1/;
> #include "at91sam9g35.dtsi"
> #include "at91sam9x5cm.dtsi"
> 
> / {
> 	ahb {
> 		apb {
> 			spi0: spi at f0000000 {
> 				pinctrl-0 = <&pinctrl_spi0 &pinctrl_spi0_cs>;
> 				status = "okay";
> 				cs-gpios = <&pioA 14 GPIO_ACTIVE_HIGH>, <0>, <0>, <0>;
> 				m25p80 at 0 {
> 					#address-cells = <1>;
> 					#size-cells = <1>;
> 					compatible = "atmel,at25df321a";
> 					spi-max-frequency = <50000000>;
> 					m25p,fast-read;
> 					reg = <0>;
> 
> 					partitions {
> 						compatible = "fixed-partitions";
> 						#address-cells = <1>;
> 						#size-cells = <1>;
> 
> 						bootpri at 0000000 {
> 							label = "bootpri";
> 							reg = <0x00000000 0x00008000>;
> 						};
> 
> 						bootsec at 0008000 {
> 							label = "bootsec";
> 							reg = <0x00008000 0x00100000>;
> 						};
> 
> 						bootenv at 00108000 {
> 							label = "bootenv";
> 							reg = <0x00108000 0x00110000>;
> 						};
> 
> 						free at 00110000 {
> 							label = "free";
> 							reg = <0x00110000 0x002f0000>;
> 						};
> 					};
> 				};
> 			};
> 		};
> 
>                 ebi: ebi at 10000000 {
>                         nand_controller: nand-controller {
>                                 nand at 3 {
>                                         status = "okay";
>                                         nand-ecc-strength = <4>;
>                                 };
>                         };
>                 };
> 	};
> };




More information about the linux-mtd mailing list