I guess a correct fix may be 

bfin_write_SWRST(_bfin_swrst & 0xfff0 & ~DOUBLE_FAULT);
bfin_write_SWRST(_bfin_swrst & 0xfff0 | DOUBLE_FAULT);


Sonic


-----Original Message-----
From: Zhang, Sonic [mailto:[email protected]] 
Sent: Monday, June 15, 2009 3:24 PM
To: Mike Frysinger; [email protected]
Cc: [email protected]
Subject: RE: [Linux-kernel-commits] [6709]
trunk/arch/blackfin/kernel/setup.c: Fix bug[#5223] Get bfin_swrst value
from SYSCR instead of SWRST only

That's because 

bfin_write_SWRST(_bfin_swrst & ~DOUBLE_FAULT);
bfin_write_SWRST(_bfin_swrst | DOUBLE_FAULT);

cause system hang if _bfin_swrst is read from SYSCR and the boot mode is
7.

Sonic 

-----Original Message-----
From: Mike Frysinger [mailto:[email protected]]
Sent: Monday, June 15, 2009 3:08 PM
To: [email protected]
Cc: [email protected]
Subject: Re: [Linux-kernel-commits] [6709]
trunk/arch/blackfin/kernel/setup.c: Fix bug[#5223] Get bfin_swrst value
from SYSCR instead of SWRST only

On Mon, Jun 15, 2009 at 02:50, <[email protected]> wrote:
> Log Message
>
> Fix bug[#5223] Get bfin_swrst value from SYSCR instead of SWRST only 
> after double fault failure.

this change is incorrect and your changelog doesnt really explain at all
why reading this core mmr is a problem

> Modified: trunk/arch/blackfin/kernel/setup.c (6708 => 6709)
>
> -     /* Newer parts mirror SWRST bits in SYSCR */
> -#if defined(CONFIG_BF53x) || defined(CONFIG_BF561) || \
> -    defined(CONFIG_BF538) || defined(CONFIG_BF539)
>       _bfin_swrst = bfin_read_SWRST();
> -#else
> -     _bfin_swrst = bfin_read_SYSCR();
> -#endif

SWRST is read-to-clear and we specifically do not want to clear it.
that is why we read SYSCR on all newer parts instead of SWRST -- so the
bits remain unchanged.
-mike

_______________________________________________
Linux-kernel-commits mailing list
[email protected]
https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits

Reply via email to