* [U-Boot] Reg. CFI flash_init and hardware write protected devices @ 2011-05-31 8:35 Frank Svendsbøe 2011-05-31 12:49 ` Mike Frysinger 2011-05-31 13:10 ` Stefan Roese 0 siblings, 2 replies; 20+ messages in thread From: Frank Svendsbøe @ 2011-05-31 8:35 UTC (permalink / raw) To: u-boot We have a board that feature NOR flash and hardware write protection is handled by controlling the write enable pin. When write protection is enabled, the nWE pin is forced high by external logic. The memory controller and/or CFI logic is unaware of this, and since CFI uses write enable as part of the CFI command set, a CFI probing will fail when write protection is enabled. The rationale for controlling nWE and not WP (write protection) is that WP only protects the first sector of the device. In our case this is less than the size of the bootloader (U-boot), since that occupies two sectors. Due to this the built-in NOR write protection is rather useless. Our current solution based on controlling nWE is to hardcode flash geometry in board code when flash protection is enabled. In order to use CFI as intended when write protection is disabled, we call the generic flash_init function as defined in drivers/mtd/cfi_flash.c. When protection is enabled we hardcode the geometry info in board code. In order separate our flash_init and the generic flash_init, and be able to call both, we've introduced a new ifdef to cfi_flash.c called CONFIG_CFI_FLASH_OVERRIDE_INIT. Like this: ---- diff --git a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c index 6039e1f..772096e 100644 --- a/drivers/mtd/cfi_flash.c +++ b/drivers/mtd/cfi_flash.c @@ -176,6 +176,10 @@ u64 flash_read64(void *addr)__attribute__((weak, alias("__flash_read64"))); #define flash_read64 __flash_read64 #endif +#ifdef CONFIG_CFI_FLASH_OVERRIDE_INIT +#define flash_init __flash_init +#endif + /*----------------------------------------------------------------------- */ #if defined(CONFIG_ENV_IS_IN_FLASH) || defined(CONFIG_ENV_ADDR_REDUND) || (CONFIG_SYS_MONITOR_BASE >= ---- Now, in board code our redefined flash_init will be called. But if write protection is off, we call the original function, eg. __flash_init. Using the preprocessor is often considered bad design. However, the alternatives here such as adding a weak attribute to flash_init will not make us able to call the generic/original function. Therefore we consider adding an ifdef as better design than making the function weak, and it'll reduce the amount of redundant code in board code. What do you think about this? Best regards, Frank E. Svendsb?e ^ permalink raw reply related [flat|nested] 20+ messages in thread
* [U-Boot] Reg. CFI flash_init and hardware write protected devices 2011-05-31 8:35 [U-Boot] Reg. CFI flash_init and hardware write protected devices Frank Svendsbøe @ 2011-05-31 12:49 ` Mike Frysinger 2011-05-31 13:25 ` Frank Svendsbøe 2011-05-31 13:10 ` Stefan Roese 1 sibling, 1 reply; 20+ messages in thread From: Mike Frysinger @ 2011-05-31 12:49 UTC (permalink / raw) To: u-boot On Tuesday, May 31, 2011 04:35:17 Frank Svendsb?e wrote: > Now, in board code our redefined flash_init will be called. But if > write protection is off, we call the original function, > eg. __flash_init. if your code is simply setting the pin high at init time and then never bringing it back down, then just do that in your board_early_init_f func. -mike -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 836 bytes Desc: This is a digitally signed message part. Url : http://lists.denx.de/pipermail/u-boot/attachments/20110531/581bb348/attachment.pgp ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot] Reg. CFI flash_init and hardware write protected devices 2011-05-31 12:49 ` Mike Frysinger @ 2011-05-31 13:25 ` Frank Svendsbøe 2011-05-31 14:01 ` Mike Frysinger 0 siblings, 1 reply; 20+ messages in thread From: Frank Svendsbøe @ 2011-05-31 13:25 UTC (permalink / raw) To: u-boot Hi Mike, On Tue, May 31, 2011 at 2:49 PM, Mike Frysinger <vapier@gentoo.org> wrote: > On Tuesday, May 31, 2011 04:35:17 Frank Svendsb?e wrote: >> Now, in board code our redefined flash_init will be called. But if >> write protection is off, we call the original function, >> eg. __flash_init. > > if your code is simply setting the pin high at init time and then never > bringing it back down, then just do that in your board_early_init_f func. > -mike > No this is not possible, and I'm sorry for not explaining it better. The pin is not controlled by me. It is implicitly set/cleared via the memory controller, but it doesn't matter because we have external logic forcing it high. Having the possibility to control this pin in software wouldn't make it "hardware write protection" would it? The protection state is kept by an external AVR and in order to enable write access both a jumper and a write protection flag must be set. Best regards, Frank ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot] Reg. CFI flash_init and hardware write protected devices 2011-05-31 13:25 ` Frank Svendsbøe @ 2011-05-31 14:01 ` Mike Frysinger 0 siblings, 0 replies; 20+ messages in thread From: Mike Frysinger @ 2011-05-31 14:01 UTC (permalink / raw) To: u-boot On Tuesday, May 31, 2011 09:25:54 Frank Svendsb?e wrote: > Having the possibility to control this pin in software wouldn't make it > "hardware write protection" would it? yes, it would. "software write protection" is what u-boot offers today -- the software checks the addresses before allowing writes. hardware write protection is where u-boot puts out the write command anyways the request is rejected by the hardware. just because you have a knob to toggle the hardware write protection doesnt mean it is no longer protected in hardware. -mike -------------- next part -------------- A non-text attachment was scrubbed... Name: not available Type: application/pgp-signature Size: 836 bytes Desc: This is a digitally signed message part. Url : http://lists.denx.de/pipermail/u-boot/attachments/20110531/72c79c2c/attachment.pgp ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot] Reg. CFI flash_init and hardware write protected devices 2011-05-31 8:35 [U-Boot] Reg. CFI flash_init and hardware write protected devices Frank Svendsbøe 2011-05-31 12:49 ` Mike Frysinger @ 2011-05-31 13:10 ` Stefan Roese 2011-05-31 13:55 ` Frank Svendsbøe 1 sibling, 1 reply; 20+ messages in thread From: Stefan Roese @ 2011-05-31 13:10 UTC (permalink / raw) To: u-boot Hi Frank, On Tuesday 31 May 2011 10:35:17 Frank Svendsb?e wrote: > We have a board that feature NOR flash and hardware write protection > is handled by controlling the write enable pin. When write protection > is enabled, the nWE pin is forced high by external logic. The memory > controller and/or CFI logic is unaware of this, and since CFI uses > write enable as part of the CFI command set, a CFI probing will fail > when write protection is enabled. > > The rationale for controlling nWE and not WP (write protection) is > that WP only protects the first sector of the device. In our case this > is less than the size of the bootloader (U-boot), since that occupies > two sectors. Due to this the built-in NOR write protection is rather > useless. Understood. But why don't you disable write-protection when you first call flash_init()? And enable the write-protection after the chip is correctly detected? > Our current solution based on controlling nWE is to hardcode flash > geometry in board code when flash protection is enabled. In order to > use CFI as intended when write protection is disabled, we call the > generic flash_init function as defined in > drivers/mtd/cfi_flash.c. How is write-protection enabled/disabled on your board? > When protection is enabled we hardcode the > geometry info in board code. In order separate our flash_init and the > generic flash_init, and be able to call both, we've introduced a new > ifdef to cfi_flash.c called CONFIG_CFI_FLASH_OVERRIDE_INIT. Like > this: > > ---- > > diff --git a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c > index 6039e1f..772096e 100644 > --- a/drivers/mtd/cfi_flash.c > +++ b/drivers/mtd/cfi_flash.c > @@ -176,6 +176,10 @@ u64 flash_read64(void *addr)__attribute__((weak, > alias("__flash_read64"))); > #define flash_read64 __flash_read64 > #endif > > +#ifdef CONFIG_CFI_FLASH_OVERRIDE_INIT > +#define flash_init __flash_init > +#endif > + > /*----------------------------------------------------------------------- > */ > #if defined(CONFIG_ENV_IS_IN_FLASH) || > defined(CONFIG_ENV_ADDR_REDUND) || (CONFIG_SYS_MONITOR_BASE >= > > ---- > > Now, in board code our redefined flash_init will be called. But if > write protection is off, we call the original function, > eg. __flash_init. > > Using the preprocessor is often considered bad design. However, the > alternatives here such as adding a weak attribute to flash_init will > not make us able to call the generic/original function. Therefore we > consider adding an ifdef as better design than making the function > weak, and it'll reduce the amount of redundant code in board code. Why don't you think that you can't access the original function if it's defined as a weak default? This should work just fine, see for example ft_board_setup() in arch/powerpc/cpu/ppc4xx/fdt.c: void __ft_board_setup(void *blob, bd_t *bd) { ... } void ft_board_setup(void *blob, bd_t *bd) __attribute__((weak, alias("__ft_board_setup"))); And then this weak default is overridden and still referenced in board/amcc/canyonlands/canyonlands.c: void ft_board_setup(void *blob, bd_t *bd) { __ft_board_setup(blob, bd); ... So no need for this ifdef in the common CFI driver. Or am I missing something here? Best regards, Stefan -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-0 Fax: (+49)-8142-66989-80 Email: office at denx.de ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot] Reg. CFI flash_init and hardware write protected devices 2011-05-31 13:10 ` Stefan Roese @ 2011-05-31 13:55 ` Frank Svendsbøe 2011-05-31 14:37 ` Stefan Roese 0 siblings, 1 reply; 20+ messages in thread From: Frank Svendsbøe @ 2011-05-31 13:55 UTC (permalink / raw) To: u-boot Hi Stefan, On Tue, May 31, 2011 at 3:10 PM, Stefan Roese <sr@denx.de> wrote: > Hi Frank, > > On Tuesday 31 May 2011 10:35:17 Frank Svendsb?e wrote: >> We have a board that feature NOR flash and hardware write protection >> is handled by controlling the write enable pin. When write protection >> is enabled, the nWE pin is forced high by external logic. The memory >> controller and/or CFI logic is unaware of this, and since CFI uses >> write enable as part of the CFI command set, a CFI probing will fail >> when write protection is enabled. >> >> The rationale for controlling nWE and not WP (write protection) is >> that WP only protects the first sector of the device. In our case this >> is less than the size of the bootloader (U-boot), since that occupies >> two sectors. Due to this the built-in NOR write protection is rather >> useless. > > Understood. But why don't you disable write-protection when you first call > flash_init()? And enable the write-protection after the chip is correctly > detected? > Simply because disabling write-protection is not impossible after installation. Our device will be located 3000m below sea level. As I explained Mike Frysinger, the write-protection settings is not controlled by the PPC device running U-Boot. We can enable write-protection in the lab (by setting a jumper), but not write software. The whole purpose of this is to keep it "impossible" to destroy a factory default version. For "mutable" software, we utilize another flash. >> Our current solution based on controlling nWE is to hardcode flash >> geometry in board code when flash protection is enabled. In order to >> use CFI as intended when write protection is disabled, we call the >> generic flash_init function as defined in >> drivers/mtd/cfi_flash.c. > > How is write-protection enabled/disabled on your board? > Two ways/levels: 1) A hardware jumper on the factory default flash. 2) On the non-factory default flash, write protection is enabled/disabled by an FPGA and implicitly and AVR. To make it short, we cannot change protection scheme from U-Boot (but we can via an SPI driver I wrote for Linux). >> When protection is enabled we hardcode the >> geometry info in board code. In order separate our flash_init and the >> generic flash_init, and be able to call both, we've introduced a new >> ifdef to cfi_flash.c called CONFIG_CFI_FLASH_OVERRIDE_INIT. ?Like >> this: >> >> ---- >> >> diff --git a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c >> index 6039e1f..772096e 100644 >> --- a/drivers/mtd/cfi_flash.c >> +++ b/drivers/mtd/cfi_flash.c >> @@ -176,6 +176,10 @@ u64 flash_read64(void *addr)__attribute__((weak, >> alias("__flash_read64"))); >> ?#define flash_read64 ? __flash_read64 >> ?#endif >> >> +#ifdef CONFIG_CFI_FLASH_OVERRIDE_INIT >> +#define flash_init __flash_init >> +#endif >> + >> ?/*----------------------------------------------------------------------- >> ? */ >> ?#if defined(CONFIG_ENV_IS_IN_FLASH) || >> defined(CONFIG_ENV_ADDR_REDUND) || (CONFIG_SYS_MONITOR_BASE >= >> >> ---- >> >> Now, in board code our redefined flash_init will be called. But if >> write protection is off, we call the original function, >> eg. __flash_init. >> >> Using the preprocessor is often considered bad design. However, the >> alternatives here such as adding a weak attribute to flash_init will >> not make us able to call the generic/original function. ?Therefore we >> consider adding an ifdef as better design than making the function >> weak, and it'll reduce the amount of redundant code in board code. > > Why don't you think that you can't access the original function if it's > defined as a weak default? This should work just fine, see for example > ft_board_setup() in arch/powerpc/cpu/ppc4xx/fdt.c: > > void __ft_board_setup(void *blob, bd_t *bd) > { > ? ? ? ?... > } > void ft_board_setup(void *blob, bd_t *bd) __attribute__((weak, > alias("__ft_board_setup"))); > > > And then this weak default is overridden and still referenced in > board/amcc/canyonlands/canyonlands.c: > > void ft_board_setup(void *blob, bd_t *bd) > { > ? ? ? ?__ft_board_setup(blob, bd); > ? ? ? ?... > > > So no need for this ifdef in the common CFI driver. Or am I missing something > here? > Oh. I didn't knew I could access the function that was overridden by the weak attribute. I guess that's the alias is for right? If both can be called, I'm happy to remove the ifdef. I'll test that tomorrow and provide a patch if it works. Best regards, Frank ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot] Reg. CFI flash_init and hardware write protected devices 2011-05-31 13:55 ` Frank Svendsbøe @ 2011-05-31 14:37 ` Stefan Roese 2011-06-01 14:33 ` Frank Svendsbøe 0 siblings, 1 reply; 20+ messages in thread From: Stefan Roese @ 2011-05-31 14:37 UTC (permalink / raw) To: u-boot Hi Frank, On Tuesday 31 May 2011 15:55:56 Frank Svendsb?e wrote: > > Understood. But why don't you disable write-protection when you first > > call flash_init()? And enable the write-protection after the chip is > > correctly detected? > > Simply because disabling write-protection is not impossible after > installation. Our device will be located 3000m below sea level. I see. > As I explained Mike Frysinger, the write-protection settings is not > controlled by the PPC device running U-Boot. We can enable > write-protection in the lab (by setting a jumper), but not write software. > > The whole purpose of this is to keep it "impossible" to destroy a factory > default version. For "mutable" software, we utilize another flash. > > >> Our current solution based on controlling nWE is to hardcode flash > >> geometry in board code when flash protection is enabled. In order to > >> use CFI as intended when write protection is disabled, we call the > >> generic flash_init function as defined in > >> drivers/mtd/cfi_flash.c. > > > > How is write-protection enabled/disabled on your board? > > Two ways/levels: 1) A hardware jumper on the factory default flash. 2) > On the non-factory default flash, write protection is enabled/disabled > by an FPGA and implicitly and AVR. To make it short, we cannot > change protection scheme from U-Boot (but we can via an SPI driver I > wrote for Linux). Theoretically also possible with U-Boot. But I understand that you don't want to do this. <snip> > > Why don't you think that you can't access the original function if it's > > defined as a weak default? This should work just fine, see for example > > ft_board_setup() in arch/powerpc/cpu/ppc4xx/fdt.c: > > > > void __ft_board_setup(void *blob, bd_t *bd) > > { > > ... > > } > > void ft_board_setup(void *blob, bd_t *bd) __attribute__((weak, > > alias("__ft_board_setup"))); > > > > > > And then this weak default is overridden and still referenced in > > board/amcc/canyonlands/canyonlands.c: > > > > void ft_board_setup(void *blob, bd_t *bd) > > { > > __ft_board_setup(blob, bd); > > ... > > > > > > So no need for this ifdef in the common CFI driver. Or am I missing > > something here? > > Oh. I didn't knew I could access the function that was overridden by the > weak attribute. I guess that's the alias is for right? Yep. > If both can be > called, I'm happy to remove the ifdef. > > I'll test that tomorrow and provide a patch if it works. Good luck... Best regards, Stefan -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-0 Fax: (+49)-8142-66989-80 Email: office at denx.de ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot] Reg. CFI flash_init and hardware write protected devices 2011-05-31 14:37 ` Stefan Roese @ 2011-06-01 14:33 ` Frank Svendsbøe 2011-06-01 15:34 ` Stefan Roese 0 siblings, 1 reply; 20+ messages in thread From: Frank Svendsbøe @ 2011-06-01 14:33 UTC (permalink / raw) To: u-boot Hi Stefan, On Tue, May 31, 2011 at 4:37 PM, Stefan Roese <sr@denx.de> wrote: > Hi Frank, > > On Tuesday 31 May 2011 15:55:56 Frank Svendsb?e wrote: >> > Understood. But why don't you disable write-protection when you first >> > call flash_init()? And enable the write-protection after the chip is >> > correctly detected? >> >> Simply because disabling write-protection is not impossible after >> installation. Our device will be located 3000m below sea level. > > I see. > Hmm.. then you read my mind :) I meant to say "is not possible" and not "is not impossible" :) >> As I explained Mike Frysinger, the write-protection settings is not >> controlled by the PPC device running U-Boot. We can enable >> write-protection in the lab (by setting a jumper), but not write software. >> .. and here I meant to say "explained to", and "but not via software". >> Two ways/levels: 1) A hardware jumper on the factory default flash. 2) >> On the non-factory default flash, write protection is enabled/disabled >> by an FPGA and implicitly and AVR. To make it short, we cannot >> change protection scheme from U-Boot (but we can via an SPI driver I >> wrote for Linux). > .. and yet another self-correction: s/and implicitly and/and implicitly an/ .. guess I had too much coffee yesterday :) > Theoretically also possible with U-Boot. But I understand that you don't want > to do this. > True. We could write a driver for U-Boot that could access the AVR and command the FPGA to disable write protection. But in the case for the "default factory flash" where the flash write protection is enabled by a demounted jumper, and cannot be modified after installation, CFI probing wouldn't work anyway. So I think the use for such a driver would be limited. Note that for normal operation, our system is running from a non-hardware protected flash. But even in this mode, we must command the AVR to enable write access before we're permitted to write to it. This is one of the features supported by the SPI driver running in GNU/Linux. In addition to this, we have the usual CFI/MTD protection scheme where the filesystems are mounted as read-only, etc. > <snip> > >> > Why don't you think that you can't access the original function if it's >> > defined as a weak default? This should work just fine, see for example >> > ft_board_setup() in arch/powerpc/cpu/ppc4xx/fdt.c: >> > >> > void __ft_board_setup(void *blob, bd_t *bd) >> > { >> > ? ? ? ?... >> > } >> > void ft_board_setup(void *blob, bd_t *bd) __attribute__((weak, >> > alias("__ft_board_setup"))); >> > >> > >> > And then this weak default is overridden and still referenced in >> > board/amcc/canyonlands/canyonlands.c: >> > >> > void ft_board_setup(void *blob, bd_t *bd) >> > { >> > ? ? ? ?__ft_board_setup(blob, bd); >> > ? ? ? ?... >> > >> > >> > So no need for this ifdef in the common CFI driver. Or am I missing >> > something here? >> >> Oh. I didn't knew I could access the function that was overridden by the >> weak attribute. I guess that's the alias is for right? > > Yep. > >> If both can be >> called, I'm happy to remove the ifdef. >> >> I'll test that tomorrow and provide a patch if it works. > > Good luck... > Thanks, this worked for me. Is it ok for you too? diff --git a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c index 6039e1f..99360af 100644 --- a/drivers/mtd/cfi_flash.c +++ b/drivers/mtd/cfi_flash.c @@ -176,6 +176,7 @@ u64 flash_read64(void *addr)__attribute__((weak, alias("__flash_read64"))); #define flash_read64 __flash_read64 #endif + /*----------------------------------------------------------------------- */ #if defined(CONFIG_ENV_IS_IN_FLASH) || defined(CONFIG_ENV_ADDR_REDUND) || (CONFIG_SYS_MONITOR_BASE >= CONFIG_SYS_FLASH_BASE) @@ -2151,7 +2152,8 @@ void flash_protect_default(void) #endif } -unsigned long flash_init (void) +unsigned long flash_init(void) __attribute__((weak, alias("__flash_init"))); +unsigned long __flash_init (void) { unsigned long size = 0; int i; ^ permalink raw reply related [flat|nested] 20+ messages in thread
* [U-Boot] Reg. CFI flash_init and hardware write protected devices 2011-06-01 14:33 ` Frank Svendsbøe @ 2011-06-01 15:34 ` Stefan Roese 2011-06-01 16:59 ` Frank Svendsbøe 0 siblings, 1 reply; 20+ messages in thread From: Stefan Roese @ 2011-06-01 15:34 UTC (permalink / raw) To: u-boot Hi Frank, On Wednesday 01 June 2011 16:33:14 Frank Svendsb?e wrote: > >> Simply because disabling write-protection is not impossible after > >> installation. Our device will be located 3000m below sea level. > > > > I see. > > Hmm.. then you read my mind :) I meant to say "is not possible" and not "is > not impossible" :) Yep. I read so fast, that I didn't catch the misspelled words. ;) > Thanks, this worked for me. Is it ok for you too? > > diff --git a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c > index 6039e1f..99360af 100644 > --- a/drivers/mtd/cfi_flash.c > +++ b/drivers/mtd/cfi_flash.c > @@ -176,6 +176,7 @@ u64 flash_read64(void *addr)__attribute__((weak, > alias("__flash_read64"))); > #define flash_read64 __flash_read64 > #endif > > + Don't add this empty line. > /*----------------------------------------------------------------------- > */ > #if defined(CONFIG_ENV_IS_IN_FLASH) || > defined(CONFIG_ENV_ADDR_REDUND) || (CONFIG_SYS_MONITOR_BASE >= > CONFIG_SYS_FLASH_BASE) > @@ -2151,7 +2152,8 @@ void flash_protect_default(void) > #endif > } > > -unsigned long flash_init (void) > +unsigned long flash_init(void) __attribute__((weak, > alias("__flash_init"))); +unsigned long __flash_init (void) > { > unsigned long size = 0; > int i; Looks good. I have no objections. Please go ahead and send this as a "proper" patch. Best regards, Stefan -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-0 Fax: (+49)-8142-66989-80 Email: office at denx.de ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot] Reg. CFI flash_init and hardware write protected devices 2011-06-01 15:34 ` Stefan Roese @ 2011-06-01 16:59 ` Frank Svendsbøe 2011-06-23 13:50 ` Frank Svendsbøe 0 siblings, 1 reply; 20+ messages in thread From: Frank Svendsbøe @ 2011-06-01 16:59 UTC (permalink / raw) To: u-boot On Wed, Jun 1, 2011 at 5:34 PM, Stefan Roese <sr@denx.de> wrote: > Hi Frank, > > On Wednesday 01 June 2011 16:33:14 Frank Svendsb?e wrote: >> >> Simply because disabling write-protection is not impossible after >> >> installation. Our device will be located 3000m below sea level. >> > >> > I see. >> >> Hmm.. then you read my mind :) I meant to say "is not possible" and not "is >> not impossible" :) > > Yep. I read so fast, that I didn't catch the misspelled words. ;) > >> Thanks, this worked for me. Is it ok for you too? >> >> diff --git a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c >> index 6039e1f..99360af 100644 >> --- a/drivers/mtd/cfi_flash.c >> +++ b/drivers/mtd/cfi_flash.c >> @@ -176,6 +176,7 @@ u64 flash_read64(void *addr)__attribute__((weak, >> alias("__flash_read64"))); >> ?#define flash_read64 __flash_read64 >> ?#endif >> >> + > > Don't add this empty line. > Thanks for spotting this. I'll remove this of course. >> ?/*----------------------------------------------------------------------- >> ? */ >> ?#if defined(CONFIG_ENV_IS_IN_FLASH) || >> defined(CONFIG_ENV_ADDR_REDUND) || (CONFIG_SYS_MONITOR_BASE >= >> CONFIG_SYS_FLASH_BASE) >> @@ -2151,7 +2152,8 @@ void flash_protect_default(void) >> ?#endif >> ?} >> >> -unsigned long flash_init (void) >> +unsigned long flash_init(void) __attribute__((weak, >> alias("__flash_init"))); +unsigned long __flash_init (void) >> ?{ >> ? ? ? unsigned long size = 0; >> ? ? ? int i; > > Looks good. I have no objections. Please go ahead and send this as a "proper" > patch. > Will do (as soon as I get back to work). Best regards, Frank. ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot] Reg. CFI flash_init and hardware write protected devices 2011-06-01 16:59 ` Frank Svendsbøe @ 2011-06-23 13:50 ` Frank Svendsbøe 2011-06-23 15:21 ` Wolfgang Denk 0 siblings, 1 reply; 20+ messages in thread From: Frank Svendsbøe @ 2011-06-23 13:50 UTC (permalink / raw) To: u-boot On Wed, Jun 1, 2011 at 6:59 PM, Frank Svendsb?e <frank.svendsboe@gmail.com> wrote: > On Wed, Jun 1, 2011 at 5:34 PM, Stefan Roese <sr@denx.de> wrote: >> Hi Frank, >> >> On Wednesday 01 June 2011 16:33:14 Frank Svendsb?e wrote: >>> >> Simply because disabling write-protection is not impossible after >>> >> installation. Our device will be located 3000m below sea level. >>> > >>> > I see. >>> >>> Hmm.. then you read my mind :) I meant to say "is not possible" and not "is >>> not impossible" :) >> >> Yep. I read so fast, that I didn't catch the misspelled words. ;) >> >>> Thanks, this worked for me. Is it ok for you too? >>> >>> diff --git a/drivers/mtd/cfi_flash.c b/drivers/mtd/cfi_flash.c >>> index 6039e1f..99360af 100644 >>> --- a/drivers/mtd/cfi_flash.c >>> +++ b/drivers/mtd/cfi_flash.c >>> @@ -176,6 +176,7 @@ u64 flash_read64(void *addr)__attribute__((weak, >>> alias("__flash_read64"))); >>> ?#define flash_read64 __flash_read64 >>> ?#endif >>> >>> + >> >> Don't add this empty line. >> > > Thanks for spotting this. I'll remove this of course. > >>> ?/*----------------------------------------------------------------------- >>> ? */ >>> ?#if defined(CONFIG_ENV_IS_IN_FLASH) || >>> defined(CONFIG_ENV_ADDR_REDUND) || (CONFIG_SYS_MONITOR_BASE >= >>> CONFIG_SYS_FLASH_BASE) >>> @@ -2151,7 +2152,8 @@ void flash_protect_default(void) >>> ?#endif >>> ?} >>> >>> -unsigned long flash_init (void) >>> +unsigned long flash_init(void) __attribute__((weak, >>> alias("__flash_init"))); +unsigned long __flash_init (void) >>> ?{ >>> ? ? ? unsigned long size = 0; >>> ? ? ? int i; >> >> Looks good. I have no objections. Please go ahead and send this as a "proper" >> patch. >> > > Will do (as soon as I get back to work). > > Best regards, > Frank. > Hi Stefan, A few weeks ago, I applied this change and everything worked fine in U-Boot. However, I didn't succeed doing the same hack in Linux. I've done some hardcoding experiments in drivers/mtd/chips/cfi_probe.c, but so far no success. After reading some CFI manuals, it seems CFI will/should use bus write operations even during CFI read operations. Can you confirm this? Then my next question is how come U-Boot read operations works by just hardcoding the flash geometry. It seems U-Boot utilize just plain localbus accesses to read flash data, ie. not the "CFI protocol". What did I miss here.. ? Now I'm considering two options: 1) Either write a custom flash map driver, and access the flash the same way U-Boot does, or 2) try to convince the FPGA designers that our way of forcing write protection is not according the the CFI specifications, and should be done otherwise. What do you think is the best solution? Is there anybody else out there supporting hardware write protection on CFI devices? Best regards, Frank ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot] Reg. CFI flash_init and hardware write protected devices 2011-06-23 13:50 ` Frank Svendsbøe @ 2011-06-23 15:21 ` Wolfgang Denk 2011-06-23 16:15 ` Frank Svendsbøe 0 siblings, 1 reply; 20+ messages in thread From: Wolfgang Denk @ 2011-06-23 15:21 UTC (permalink / raw) To: u-boot Dear Frank, In message <BANLkTinFMA7FN-BD7z2-ZYAT+-ubWn7S9Q@mail.gmail.com> you wrote: > > A few weeks ago, I applied this change and everything worked fine in > U-Boot. However, I didn't succeed doing the same hack in Linux. I've > done some hardcoding experiments in drivers/mtd/chips/cfi_probe.c, but > so far no success. After reading some CFI manuals, it seems CFI > will/should use bus write operations even during CFI read operations. What exactly do you mean by "CFI read operations"? > Can you confirm this? Then my next question is how come U-Boot read > operations works by just hardcoding the flash geometry. It seems > U-Boot utilize just plain localbus accesses to read flash data, ie. > not the "CFI protocol". What did I miss here.. ? It seems you misunderstand the different modes. In command mode, you will use the specific command sequences defined in the CFI protocol to talk to the controller poart of the flash chip. In this mode, you can read for example query information, flash geometry data, status information, etc. Yes, any such command sequence includes write operations to the flash device, even when you actually want to read some specific data. In data mode, flash is working just as normal real-only memory. No specific protocol is used, you just use plain read accesses to read the user data programmed into the flash chip. Any kind of probing, auto-identification etc. of the flash chip will need to use CFI command sequences, and thus write access to the device. As long as you just want to read the data or execute code from the flash no write accesses are needed. > Now I'm considering two options: 1) Either write a custom flash map > driver, and access the flash the same way U-Boot does, or 2) try to > convince the FPGA designers that our way of forcing write protection > is not according the the CFI specifications, and should be done > otherwise. What do you think is the best solution? Linux can also read from ROM memory. You just have to make sure that you do not try to run the normal CFI flash drivers on your flash devices - these will not work, because they will try to probe the flash chips. > Is there anybody else out there supporting hardware write protection > on CFI devices? CFI flash chips with the level of write protection you implemented have to be dealt with in the same way as other ROM memory. Normal CFI driver are not appropriate here. Best regards, Wolfgang Denk -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de And now remains That we find out the cause of this effect, Or rather say, the cause of this defect... -- Hamlet, Act II, Scene 2 ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot] Reg. CFI flash_init and hardware write protected devices 2011-06-23 15:21 ` Wolfgang Denk @ 2011-06-23 16:15 ` Frank Svendsbøe 2011-06-23 17:55 ` Wolfgang Denk 0 siblings, 1 reply; 20+ messages in thread From: Frank Svendsbøe @ 2011-06-23 16:15 UTC (permalink / raw) To: u-boot On Thu, Jun 23, 2011 at 5:21 PM, Wolfgang Denk <wd@denx.de> wrote: > Dear Frank, > > In message <BANLkTinFMA7FN-BD7z2-ZYAT+-ubWn7S9Q@mail.gmail.com> you wrote: >> >> A few weeks ago, I applied this change and everything worked fine in >> U-Boot. However, I didn't succeed doing the same hack in Linux. I've >> done some hardcoding experiments in drivers/mtd/chips/cfi_probe.c, but >> so far no success. After reading some CFI manuals, it seems CFI >> will/should use bus write operations even during CFI read operations. > > What exactly do you mean by "CFI read operations"? > Good question. When reading Intels CFI manual I was referring to something called "read array" which used bus write commands. I guess normal byte/word read access don't utilize this then. >> Can you confirm this? Then my next question is how come U-Boot read >> operations works by just hardcoding the flash geometry. It seems >> U-Boot utilize just plain localbus accesses to read flash data, ie. >> not the "CFI protocol". What did I miss here.. ? > > It seems you misunderstand the different modes. ?In command mode, you > will use the specific command sequences defined in the CFI protocol to > talk to the controller poart of the flash chip. In this mode, you can > read for example query information, flash geometry data, status > information, etc. ?Yes, any such command sequence includes write > operations to the flash device, even when you actually want to read > some specific data. ?In data mode, flash is working just as normal > real-only memory. No specific protocol is used, you just use plain > read accesses to read the user data programmed into the flash chip. > Right, and thanks for the explanation. What I've done to U-Boot is bypass the probing which uses the command mode and thus avoid getting problems with bus write accesses when flash protection is on. > Any kind of probing, auto-identification etc. of the flash chip will > need to use CFI command sequences, and thus write access to the > device. ?As long as you just want to read the data or execute code > from the flash no write accesses are needed. > >> Now I'm considering two options: 1) Either write a custom flash map >> driver, and access the flash the same way U-Boot does, or 2) try to >> convince the FPGA designers that our way of forcing write protection >> is not according the the CFI specifications, and should be done >> otherwise. What do you think is the best solution? > > Linux can also read from ROM memory. You just have to make sure that > you do not try to run the normal CFI flash drivers on your flash > devices - these will not work, because they will try to probe the > flash chips. > Yes, well I tried to fool Linux's CFI driver too, but no luck so far. It was after this I started reading about CFI and came to the (wrong) conclusion that CFI uses bus write operations during read accesses too. >> Is there anybody else out there supporting hardware write protection >> on CFI devices? > > CFI flash chips with the level of write protection you implemented > have to be dealt with in the same way as other ROM memory. ?Normal CFI > driver are not appropriate here. > Ok. So you recommend I stop "hacking" the CFI probing and instead write a custom flash map driver? Best regards, Frank ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot] Reg. CFI flash_init and hardware write protected devices 2011-06-23 16:15 ` Frank Svendsbøe @ 2011-06-23 17:55 ` Wolfgang Denk 2011-06-23 19:05 ` Frank Svendsbøe 2011-06-24 13:59 ` Frank Svendsbøe 0 siblings, 2 replies; 20+ messages in thread From: Wolfgang Denk @ 2011-06-23 17:55 UTC (permalink / raw) To: u-boot Dear Frank, In message <BANLkTi=p9gdOGOETWojRqkmrxXM7Do_tBg@mail.gmail.com> you wrote: > > > CFI flash chips with the level of write protection you implemented > > have to be dealt with in the same way as other ROM memory. =A0Normal CFI > > driver are not appropriate here. > > Ok. So you recommend I stop "hacking" the CFI probing and instead > write a custom flash map driver? No. Never write new drivers when you can use existing ones :-) Describe the flash memory as "mtd-ram" (instead of "cfi-flash") in the device tree and select the physmap driver in your kernel config. Best regards, Wolfgang Denk -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de The only way to get rid of a temptation is to yield to it. - Oscar Wilde ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot] Reg. CFI flash_init and hardware write protected devices 2011-06-23 17:55 ` Wolfgang Denk @ 2011-06-23 19:05 ` Frank Svendsbøe 2011-06-24 13:59 ` Frank Svendsbøe 1 sibling, 0 replies; 20+ messages in thread From: Frank Svendsbøe @ 2011-06-23 19:05 UTC (permalink / raw) To: u-boot On Thu, Jun 23, 2011 at 7:55 PM, Wolfgang Denk <wd@denx.de> wrote: > Dear Frank, > > In message <BANLkTi=p9gdOGOETWojRqkmrxXM7Do_tBg@mail.gmail.com> you wrote: >> >> > CFI flash chips with the level of write protection you implemented >> > have to be dealt with in the same way as other ROM memory. =A0Normal CFI >> > driver are not appropriate here. >> >> Ok. So you recommend I stop "hacking" the CFI probing and instead >> write a custom flash map driver? > > No. ?Never write new drivers when you can use existing ones :-) > > Describe the flash memory as "mtd-ram" (instead of "cfi-flash") in > the device tree and select the physmap driver in your kernel config. > Oh. I will try that. Thanks a lot for this tip :) .. and sorry for asking about Linux related topics on the U-Boot ML. Best regards, Frank ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot] Reg. CFI flash_init and hardware write protected devices 2011-06-23 17:55 ` Wolfgang Denk 2011-06-23 19:05 ` Frank Svendsbøe @ 2011-06-24 13:59 ` Frank Svendsbøe 2011-06-24 14:26 ` Wolfgang Denk 1 sibling, 1 reply; 20+ messages in thread From: Frank Svendsbøe @ 2011-06-24 13:59 UTC (permalink / raw) To: u-boot >> Ok. So you recommend I stop "hacking" the CFI probing and instead >> write a custom flash map driver? > > No. ?Never write new drivers when you can use existing ones :-) > > Describe the flash memory as "mtd-ram" (instead of "cfi-flash") in > the device tree and select the physmap driver in your kernel config. > Hi Wolfgang, I did as you recommended and replaced cfi-flash with mtd-ram in the device tree. I also defined CONFIG_MTD_PHYSMAP_OF, CONFIG_MTD_MTDRAM, CONFIG_MTDRAM_TOTAL_SIZE according to our specifications. The default erase-size was 128k, which is what we have too, so I didn't touch that. Now when I boot the kernel recognizes all the partitions I've defined in the dts. But, when mounting a jffs2-filesystem, it ends with a jffs2_scan_eraseblock(): Magic bitmask 0x1985 not found... Do you have any other tips? When working with this, I realised that if I could get it to work we'd still might have a problem. You see, we need write access for one of the flashes when upgrading software. We can't treat this as a simple ROM. So do we need CFI working in order to set the device into write-mode, erase flash sectors, etc.? Or do mtd-ram handle flash write operations too? In theory, I guess I could unmount the root fs, unload the mtd module, insert the cfi-flash module, mount the filesystem, then write, etc.. But isn't that harder than write a custom map driver? Best regards, Frank ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot] Reg. CFI flash_init and hardware write protected devices 2011-06-24 13:59 ` Frank Svendsbøe @ 2011-06-24 14:26 ` Wolfgang Denk 2011-06-24 19:58 ` Frank Svendsbøe 0 siblings, 1 reply; 20+ messages in thread From: Wolfgang Denk @ 2011-06-24 14:26 UTC (permalink / raw) To: u-boot Dear =?ISO-8859-1?Q?Frank_Svendsb=F8e?=, In message <BANLkTimt0LYXr-B5PAr1ONEaEoWKCyEHbw@mail.gmail.com> you wrote: > > Hi Wolfgang, I did as you recommended and replaced cfi-flash with > mtd-ram in the device tree. I also defined CONFIG_MTD_PHYSMAP_OF, > CONFIG_MTD_MTDRAM, CONFIG_MTDRAM_TOTAL_SIZE according to our > specifications. The default erase-size was 128k, which is what we have > too, so I didn't touch that. Now when I boot the kernel recognizes all > the partitions I've defined in the dts. But, when mounting a > jffs2-filesystem, it ends with a jffs2_scan_eraseblock(): Magic > bitmask 0x1985 not found... > > Do you have any other tips? Difficult to speculate - I don't know your hardware (eventually you have two 16 bit flash chips in parallel to build a 32 bit bus, and have to double the chip's erase block size?), and I don;t know how you created the JFFS2 file system. Are you sure you want to use JFFS2? UBIFS is considered to be a better choice these days... > When working with this, I realised that if I could get it to work we'd > still might have a problem. You see, we need write access for one of > the flashes when upgrading software. We can't treat this as a simple > ROM. So do we need CFI working in order to set the device into > write-mode, erase flash sectors, etc.? Or do mtd-ram handle flash > write operations too? mtd-ram provides a pure memory interface, i. e. you cannot use this to erase or program any blocks in a CFI flash device. To do so, you need the CFI driver. > In theory, I guess I could unmount the root fs, unload the mtd module, > insert the cfi-flash module, mount the filesystem, then write, etc.. Yes, or you could start with the CFI driver in the first place. > But isn't that harder than write a custom map driver? I consider your chances to get such a customdriver into mainline to be epsilon. And you don't really want to use any out of tree drivers. Best regards, Wolfgang Denk -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de If you're out of tree, you don't exist. - David Woodhouse in <1304620350.2398.29.camel@i7.infradead.org> ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot] Reg. CFI flash_init and hardware write protected devices 2011-06-24 14:26 ` Wolfgang Denk @ 2011-06-24 19:58 ` Frank Svendsbøe 2011-06-24 20:26 ` Wolfgang Denk 0 siblings, 1 reply; 20+ messages in thread From: Frank Svendsbøe @ 2011-06-24 19:58 UTC (permalink / raw) To: u-boot On Fri, Jun 24, 2011 at 4:26 PM, Wolfgang Denk <wd@denx.de> wrote: > Dear =?ISO-8859-1?Q?Frank_Svendsb=F8e?=, > > In message <BANLkTimt0LYXr-B5PAr1ONEaEoWKCyEHbw@mail.gmail.com> you wrote: >> >> Hi Wolfgang, I did as you recommended and replaced cfi-flash with >> mtd-ram in the device tree. I also defined CONFIG_MTD_PHYSMAP_OF, >> CONFIG_MTD_MTDRAM, CONFIG_MTDRAM_TOTAL_SIZE according to our >> specifications. The default erase-size was 128k, which is what we have >> too, so I didn't touch that. Now when I boot the kernel recognizes all >> the partitions I've defined in the dts. But, when mounting a >> jffs2-filesystem, it ends with a jffs2_scan_eraseblock(): Magic >> bitmask 0x1985 not found... >> >> Do you have any other tips? > > Difficult to speculate - I don't know your hardware (eventually you > have two 16 bit flash chips in parallel to build a 32 bit bus, and > have to double the chip's erase block size?), and I don;t know how you > created the JFFS2 file system. > Yes I know, and I don't expect you to find the answer based on so little data. FYI: We have two flash chips yes, but not to build a 32-bit bus, we have two for redundancy issues (one is storing a factory default version). 16 bits databus and each sector is 64k words, ie. 128k bytes. I created the jffs2 images using ELDKs mkfs.jffs2. Thanks for providing me this tool :) > Are you sure you want to use JFFS2? ?UBIFS is considered to be a > better choice these days... > No, not sure. I've got two reasons for staying with JFFS2. 1) We normally don't write to flash except when upgrading, so flash performance/duration isn't very critical 2) I discovered UBIFS after I had JFFS2 working and haven't seen the real need for it yet. >> When working with this, I realised that if I could get it to work we'd >> still might have a problem. You see, we need write access for one of >> the flashes when upgrading software. We can't treat this as a simple >> ROM. So do we need CFI working in order to set the device into >> write-mode, erase flash sectors, etc.? Or do mtd-ram handle flash >> write operations too? > > mtd-ram provides a pure memory interface, i. e. you cannot use this to > erase or program any blocks in a CFI flash device. ?To do so, you need > the CFI driver. > Right. mtd-ram is thus a dead-end solution for our purpose. We need to be able to write in some specific cases. >> In theory, I guess I could unmount the root fs, unload the mtd module, >> insert the cfi-flash module, mount the filesystem, then write, etc.. > > Yes, or you could start with the CFI driver in the first place. > That's what I did before you started interrupting me about mtd-ram... No, just kidding :-) Did you mean I should adapt the general CFI driver to support our configuration, or... Based on what you say below I'm not sure what you actually mean. >> But isn't that harder than write a custom map driver? > > I consider your chances to get such a customdriver into mainline to be > epsilon. ?And you don't really want to use any out of tree drivers. > Me too. Small chances. So we have two options I guess: 1) Ditch hardware write protection and use CFI as it is supposed to be used, or 2) write a custom out-of-tree driver. What would you go for? I'll consider if and how to get things into mainline once we have things working as we want. If my port isn't accepted I will at least learn why. Maybe the next will :) Best regards, Frank ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot] Reg. CFI flash_init and hardware write protected devices 2011-06-24 19:58 ` Frank Svendsbøe @ 2011-06-24 20:26 ` Wolfgang Denk 2011-06-24 21:12 ` Frank Svendsbøe 0 siblings, 1 reply; 20+ messages in thread From: Wolfgang Denk @ 2011-06-24 20:26 UTC (permalink / raw) To: u-boot Dear Frank, In message <BANLkTindk4f2An2VqhSftPcGuvsEqLY7wQ@mail.gmail.com> you wrote: > > > Difficult to speculate - I don't know your hardware (eventually you > > have two 16 bit flash chips in parallel to build a 32 bit bus, and > > have to double the chip's erase block size?), and I don;t know how you > > created the JFFS2 file system. ... > factory default version). 16 bits databus and each sector is 64k > words, ie. 128k bytes. I created the jffs2 images using ELDKs > mkfs.jffs2. Thanks for providing me this tool :) You need to provide the correct parameters to mkfs.jffs2... > No, not sure. I've got two reasons for staying with JFFS2. 1) We > normally don't write to flash except when upgrading, so flash > performance/duration isn't very critical 2) I discovered UBIFS after I Hm... JFFS2 is probaly not a good choice anyway. On NOR, where you don't have to deal with bad blocks, you might use ext2 or cramfs or ... - all of them are more efficient than JFFS2 then. > had JFFS2 working and haven't seen the real need for it yet. Mount time? > Did you mean I should adapt the general CFI driver to support our > configuration, or... Based on what you say below I'm not sure what you > actually mean. You have two different use cases that require (if we don't want to use a proprietary driver) two different, mutually exclusive drivers. I would load the driver I need as module, and unload it if I need the other one. This is pretty simple in principle, but a bit ore of a challange in your case as you use this as a root file system (including to load the modules from). > Me too. Small chances. So we have two options I guess: 1) Ditch > hardware write protection and use CFI as it is supposed to be used, or > 2) write a custom out-of-tree driver. What would you go for? If this is an option: 1) Best regards, Wolfgang Denk -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de Do not simplify the design of a program if a way can be found to make it complex and wonderful. ^ permalink raw reply [flat|nested] 20+ messages in thread
* [U-Boot] Reg. CFI flash_init and hardware write protected devices 2011-06-24 20:26 ` Wolfgang Denk @ 2011-06-24 21:12 ` Frank Svendsbøe 0 siblings, 0 replies; 20+ messages in thread From: Frank Svendsbøe @ 2011-06-24 21:12 UTC (permalink / raw) To: u-boot On Fri, Jun 24, 2011 at 10:26 PM, Wolfgang Denk <wd@denx.de> wrote: > Dear Frank, > > In message <BANLkTindk4f2An2VqhSftPcGuvsEqLY7wQ@mail.gmail.com> you wrote: >> >> > Difficult to speculate - I don't know your hardware (eventually you >> > have two 16 bit flash chips in parallel to build a 32 bit bus, and >> > have to double the chip's erase block size?), and I don;t know how you >> > created the JFFS2 file system. > ... >> factory default version). 16 bits databus and each sector is 64k >> words, ie. 128k bytes. I created the jffs2 images using ELDKs >> mkfs.jffs2. Thanks for providing me this tool :) > > You need to provide the correct parameters to mkfs.jffs2... > Of course, but I don't see how changing from CFI to raw memory accesses on target change the way the jffs2 image should be created. What didn't I understand? I'm currently using: mkfs.jss2 -U -b -d /${input} -e 0x20000 -o ${output} >> No, not sure. I've got two reasons for staying with JFFS2. 1) We >> normally don't write to flash except when upgrading, so flash >> performance/duration isn't very critical 2) I discovered UBIFS after I > > Hm... JFFS2 is probaly not a good choice anyway. ?On NOR, where you > don't have to deal with bad blocks, you might use ext2 or cramfs or > ... - all of them are more efficient than JFFS2 then. > Oh. Thanks for letting me know. I knew cramfs would be more efficient, but surprised that ext2 would be too. Thought ext2 was "heavier". >> had JFFS2 working and haven't seen the real need for it yet. > > Mount time? > Maybe 1-2 seconds. Haven't measured it yet. Maybe boot-time could've been improved yes. >> Did you mean I should adapt the general CFI driver to support our >> configuration, or... Based on what you say below I'm not sure what you >> actually mean. > > You have two different use cases that require (if we don't want to use > a proprietary driver) two different, mutually exclusive drivers. ?I > would load the driver I need as module, and unload it if I need the > other one. This is pretty simple in principle, but a bit ore of a > challange in your case as you use this as a root file system > (including to load the modules from). > When thinking a bit more about this, I realize we don't need to support writing to the current filesystem in use. I've partitioned our device into three region, where each "region" consists of four partitions (dtb, kernel, rootfs and "home"). When upgrading we write a complete "region image" into another flash region, which is not part of the region we're running. So maybe we could have both mtd-ram and cfi-flash running at the same time, since we don't actually need CFI for the flash we're currently booting from. I currently use mtd-utils' flash_erase to erase, and 'dd if=/dev/mtdX' to write. The mtds is created based on info in the dts.. Regarding DTS: Is it possible to have different partitions within the same physical flash using different drivers? Like this: flash at 0,0 { compatible = "amd,s29gl512n", "cfi-flash", reg = <0x0 0x0 0x4000000>; partition at ... } ... into something like this: flash at 0,0 { compatible = "amd,s29gl512n", "cfi-flash", reg = <0x0, 0x0 0x2000000>; partition at .. } flash at 0,2000000 { compatible = "amd,s29gl512n", "mtd-ram", reg = <0x2000000, 0x0, 0x2000000>; partition@ } In other words, partition a flash to use different drivers when accessing different partitions? I think that could solve the problems. >> Me too. Small chances. So we have two options I guess: 1) Ditch >> hardware write protection and use CFI as it is supposed to be used, or >> 2) write a custom out-of-tree driver. What would you go for? > > If this is an option: 1) > Good to know your opinion on this. > Best regards, > > Wolfgang Denk > > -- > DENX Software Engineering GmbH, ? ? MD: Wolfgang Denk & Detlev Zundel > HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany > Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de > Do not simplify the design of a program if a way can be found to make > it complex and wonderful. > Hehe. Who wrote that? Best regards, Frank ^ permalink raw reply [flat|nested] 20+ messages in thread
end of thread, other threads:[~2011-06-24 21:12 UTC | newest] Thread overview: 20+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2011-05-31 8:35 [U-Boot] Reg. CFI flash_init and hardware write protected devices Frank Svendsbøe 2011-05-31 12:49 ` Mike Frysinger 2011-05-31 13:25 ` Frank Svendsbøe 2011-05-31 14:01 ` Mike Frysinger 2011-05-31 13:10 ` Stefan Roese 2011-05-31 13:55 ` Frank Svendsbøe 2011-05-31 14:37 ` Stefan Roese 2011-06-01 14:33 ` Frank Svendsbøe 2011-06-01 15:34 ` Stefan Roese 2011-06-01 16:59 ` Frank Svendsbøe 2011-06-23 13:50 ` Frank Svendsbøe 2011-06-23 15:21 ` Wolfgang Denk 2011-06-23 16:15 ` Frank Svendsbøe 2011-06-23 17:55 ` Wolfgang Denk 2011-06-23 19:05 ` Frank Svendsbøe 2011-06-24 13:59 ` Frank Svendsbøe 2011-06-24 14:26 ` Wolfgang Denk 2011-06-24 19:58 ` Frank Svendsbøe 2011-06-24 20:26 ` Wolfgang Denk 2011-06-24 21:12 ` Frank Svendsbøe
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox