fet: different exit procedure for FRAM devices.
This is a partial revert to 0e5c38231b
.
We detect whether the chip is an FRAM device at exit, and use a
different reset type if it is. The referenced commit broke the RST pin
on older chips.
This commit is contained in:
parent
907ef86156
commit
4ab905751c
|
@ -768,12 +768,17 @@ static void fet_destroy(device_t dev_base)
|
||||||
{
|
{
|
||||||
struct fet_device *dev = (struct fet_device *)dev_base;
|
struct fet_device *dev = (struct fet_device *)dev_base;
|
||||||
|
|
||||||
if (xfer(dev, C_RESET, NULL, 0, 3, FET_RESET_ALL, 0, 0) < 0)
|
/* The second argument to C_RESET is a boolean which specifies
|
||||||
|
* whether the chip should run or not. The final argument is
|
||||||
|
* also a boolean. Setting it non-zero is required to get the
|
||||||
|
* RST pin working on the G2231, but it must be zero on the
|
||||||
|
* FR5739, or else the value of the reset vector gets set to
|
||||||
|
* 0xffff at the start of the next JTAG session.
|
||||||
|
*/
|
||||||
|
if (xfer(dev, C_RESET, NULL, 0, 3, FET_RESET_ALL, 1,
|
||||||
|
!device_is_fram(dev_base)) < 0)
|
||||||
printc_err("fet: final reset failed\n");
|
printc_err("fet: final reset failed\n");
|
||||||
|
|
||||||
if (xfer(dev, C_RUN, NULL, 0, 2, FET_RUN_FREE, 0) < 0)
|
|
||||||
printc_err("fet: failed to restart CPU\n");
|
|
||||||
|
|
||||||
if (xfer(dev, C_CLOSE, NULL, 0, 1, 0) < 0)
|
if (xfer(dev, C_CLOSE, NULL, 0, 1, 0) < 0)
|
||||||
printc_err("fet: close command failed\n");
|
printc_err("fet: close command failed\n");
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue