Reset the flash is not absolutely necessary, this command should reset all the register, but some flash donot exit 4byte address mode with it.Of cause, <br>SPINOR_OP_EX4B is already sufficient to resolve the soft reboot problem, I want to reset every register not only the address mode bit.Well, I will export a function from spi-nor.c and call it.<br><br>Cheers<br>Shonn<br/><div style="font-size:12px;padding:2px 0;">---原始邮件---</div><div style="font-size:12px;background:#f0f0f0;color:#212121;padding:8px!important;border-radius:4px;line-height:1.5;"><div><b>发件人:</b> "Daniel Golle"<daniel@makrotopia.org></div><div><b>发送时间:</b> 2015年11月22日 09:26:02</div><div><b>收件人:</b> "John Crispin"<blogic@openwrt.org>;</div><div><b>抄送:</b> "openwrt-devel"<openwrt-devel@lists.openwrt.org>;"未命名"<countrysideboy@qq.com>;</div><div><b>主题:</b> Re: [OpenWrt-Devel]  回复:[PATCH]ramips: reset m25p80 when shutdown</div></div><br/>On Sat, Nov 21, 2015 at 09:41:25PM +0100, John Crispin wrote:<br/>> Hi,<br/>> <br/>> one more request<br/>> <br/>> On 16/11/2015 18:03, 未命名 wrote:<br/>> > Instead of use the set_4byte function in spi-nor.c, I use this patch<br/>> > for simplest modification. In fact, set_4byte also send 0xe9 command to<br/>> > the spi flash.<br/><br/>Using set_4byte also already contains the logic to check which vendor-<br/>specific 4-byte mode to use (EN4B/EX4B or via explicite read4/write4<br/>commands). Surely, having spi-nor provide a generic shutdown functions<br/>using set_4byte and then using that in m25p80 is less simple than<br/>implementing the work-around only in m25p80...<br/><br/><br/>> > <br/>> > Signed-off-by: Shonn Lu <countrysideboy@qq.com><br/>> > ---<br/>> >  .../0064-reset-m25p80-when-shutdown.patch          | 27<br/>> > ++++++++++++++++++++++<br/>> >  1 file changed, 27 insertions(+)<br/>> >  create mode 100644<br/>> > target/linux/ramips/patches-3.18/0064-reset-m25p80-when-shutdown.patch<br/>> > <br/>> > diff --git<br/>> > a/target/linux/ramips/patches-3.18/0064-reset-m25p80-when-shutdown.patch<br/>> > b/target/linux/ramips/patches-3.18/0064-reset-m25p80-when-shutdown.patch<br/>> > new file mode 100644<br/>> > index 0000000..aca758d<br/>> > --- /dev/null<br/>> > +++ b/target/linux/ramips/patches-3.18/0064-reset-m25p80-when-shutdown.patch<br/>> > @@ -0,0 +1,27 @@<br/>> > +--- a/drivers/mtd/devices/m25p80.c<br/>> > ++++ b/drivers/mtd/devices/m25p80.c<br/>> > +@@ -322,6 +322,16 @@<br/>> > + {<br/>> > + struct m25p *flash = spi_get_drvdata(spi);<br/>> > +<br/>> > ++ if ((&flash->spi_nor)->addr_width > 3) {<br/>> > ++ printk(KERN_INFO "m25p80: exit 4-byte address mode\n");<br/>> > ++ flash->command[0] = SPINOR_OP_EX4B;  // exit 4-byte address mode: 0xe9<br/>> > ++ spi_write(flash->spi, flash->command, 1);<br/>> > ++ flash->command[0] = 0x66;  // enable reset<br/>> > ++ spi_write(flash->spi, flash->command, 1); <br/>> > ++ flash->command[0] = 0x99;  // reset<br/>> > ++ spi_write(flash->spi, flash->command, 1);<br/><br/>Are you sure the reset is actually needed?<br/>When I tested on some Rt5350 boards, SPINOR_OP_EX4B (0xE9) did the job<br/>and no subsequent reset was needed.<br/><br/>> <br/>> this needs to be indented with tabs<br/>> <br/>> John<br/>> <br/><br/><br/>Cheers<br/><br/><br/>Daniel<br/>