mbox series

[0/1] fw_setenv always locks flash whenever it tries to write

Message ID 20200710165418.15071-1-fr0st61te@gmail.com
Headers show
Series fw_setenv always locks flash whenever it tries to write | expand

Message

Ivan Mikhaylov July 10, 2020, 4:54 p.m. UTC
fw_setenv usage always locks u-boot-env mtd device without questions.
Locking of flash can be disruptive and may affect not only u-boot-env
region due to different problems with chips and lock callbacks on kernel
side. I'm not sure if my fix is right, but also I thought about possible option
in fw_env config about locking/unlocking or even option into
fw_setenv/printenv. Any ideas?

Ivan Mikhaylov (1):
  fw_setenv: lock the flash only if it was locked before

 tools/env/fw_env.c | 24 +++++++++++++++++++-----
 1 file changed, 19 insertions(+), 5 deletions(-)

Comments

Ivan Mikhaylov July 23, 2020, 10:20 p.m. UTC | #1
On Fri, 2020-07-10 at 19:54 +0300, Ivan Mikhaylov wrote:
> fw_setenv usage always locks u-boot-env mtd device without questions.

> Locking of flash can be disruptive and may affect not only u-boot-env

> region due to different problems with chips and lock callbacks on

> kernel

> side. I'm not sure if my fix is right, but also I thought about

> possible option

> in fw_env config about locking/unlocking or even option into

> fw_setenv/printenv. Any ideas?

> 

> Ivan Mikhaylov (1):

>   fw_setenv: lock the flash only if it was locked before

> 

>  tools/env/fw_env.c | 24 +++++++++++++++++++-----

>  1 file changed, 19 insertions(+), 5 deletions(-)

> 


A little bit more description:

With current implementation of fw_setenv, it is always locks u-boot-env 
region if lock interface is implemented for such mtd device. You can
not control lock of this region with fw_setenv, there is no option for
it in config or in application itself. Because of this situation may
happen problems like in this thread on xilinx forum:
https://forums.xilinx.com/t5/Embedded-Linux/Flash-be-locked-after-use-fw-setenv-from-user-space/td-p/1027851

Short desc link: some person has issue with some spi chip which has
lock interface but doesn't locks properly which leads to lock of whole
flash memory on lock of u-boot-env region. As resulted solution hack
was added into spi-nor.c driver for this chip with lock disablement.

And for solving such issue usually:
1. do manual unlock after each fw_setenv usage.
2. do hacks inside driver representing your device, as example in spi-
nor.c linux driver.

And, yes, in this case it is problem of two sides:
1. driver lock implementation for some chips.
2. fw_setenv's way of work which is not trying be convenient in this
case and is not providing any option for not doing locks.

I want to implement some mechanism which will help user do not lock
flash when it's not needed. So there is some points how it can be:
1. lock this region if it's already locked.
2. add option into fw_setenv application.
3. add some option about locks into fw_env.config.

Patch what I've, just dirty implementation of first one.
Any ideas or suggestions?
Tom Rini July 30, 2020, 2:24 p.m. UTC | #2
On Thu, Jul 23, 2020 at 10:20:55PM +0000, Ivan Mikhaylov wrote:
> On Fri, 2020-07-10 at 19:54 +0300, Ivan Mikhaylov wrote:

> > fw_setenv usage always locks u-boot-env mtd device without questions.

> > Locking of flash can be disruptive and may affect not only u-boot-env

> > region due to different problems with chips and lock callbacks on

> > kernel

> > side. I'm not sure if my fix is right, but also I thought about

> > possible option

> > in fw_env config about locking/unlocking or even option into

> > fw_setenv/printenv. Any ideas?

> > 

> > Ivan Mikhaylov (1):

> >   fw_setenv: lock the flash only if it was locked before

> > 

> >  tools/env/fw_env.c | 24 +++++++++++++++++++-----

> >  1 file changed, 19 insertions(+), 5 deletions(-)

> > 

> 

> A little bit more description:

> 

> With current implementation of fw_setenv, it is always locks u-boot-env 

> region if lock interface is implemented for such mtd device. You can

> not control lock of this region with fw_setenv, there is no option for

> it in config or in application itself. Because of this situation may

> happen problems like in this thread on xilinx forum:

> https://forums.xilinx.com/t5/Embedded-Linux/Flash-be-locked-after-use-fw-setenv-from-user-space/td-p/1027851

> 

> Short desc link: some person has issue with some spi chip which has

> lock interface but doesn't locks properly which leads to lock of whole

> flash memory on lock of u-boot-env region. As resulted solution hack

> was added into spi-nor.c driver for this chip with lock disablement.

> 

> And for solving such issue usually:

> 1. do manual unlock after each fw_setenv usage.

> 2. do hacks inside driver representing your device, as example in spi-

> nor.c linux driver.

> 

> And, yes, in this case it is problem of two sides:

> 1. driver lock implementation for some chips.

> 2. fw_setenv's way of work which is not trying be convenient in this

> case and is not providing any option for not doing locks.

> 

> I want to implement some mechanism which will help user do not lock

> flash when it's not needed. So there is some points how it can be:

> 1. lock this region if it's already locked.

> 2. add option into fw_setenv application.

> 3. add some option about locks into fw_env.config.

> 

> Patch what I've, just dirty implementation of first one.

> Any ideas or suggestions?


Thanks.  I've taken the above and updated the commit message more.  I'm
currently reviewing the patch with other env changes now.

-- 
Tom