diff --git a/minichlink/minichlink.c b/minichlink/minichlink.c index 2e193b7de54dbdce34946f64c91858e1924bcc06..331447433f44fa38c70d026a78767ed7e4892e15 100644 --- a/minichlink/minichlink.c +++ b/minichlink/minichlink.c @@ -1825,9 +1825,17 @@ int DefaultUnbrick( void * dev ) MCF.WriteReg32( dev, DMSHDWCFGR, 0x5aa50000 | (1<<10) ); // Shadow Config Reg MCF.WriteReg32( dev, DMCFGR, 0x5aa50000 | (1<<10) ); // CFGR (1<<10 == Allow output from slave) MCF.WriteReg32( dev, DMCFGR, 0x5aa50000 | (1<<10) ); // Bug in silicon? If coming out of cold boot, and we don't do our little "song and dance" this has to be called. + MCF.WriteReg32( dev, DMCONTROL, 0x80000001 ); // Make the debug module work properly. + MCF.WriteReg32( dev, DMCONTROL, 0x80000001 ); // Initiate a halt request. + MCF.WriteReg32( dev, DMCONTROL, 0x80000001 ); // No, really make sure. + MCF.WriteReg32( dev, DMCONTROL, 0x80000001 ); MCF.FlushLLCommands( dev ); int r = MCF.ReadReg32( dev, DMSTATUS, &ds ); - printf( "/%d/%08x\n", r, ds ); + if( r ) + { + fprintf( stderr, "Error: Could not read DMSTATUS from programmers (%d)\n", r ); + return -99; + } MCF.FlushLLCommands( dev ); if( ds != 0xffffffff && ds != 0x00000000 ) break; } @@ -1838,6 +1846,9 @@ int DefaultUnbrick( void * dev ) MCF.WriteReg32( dev, DMCONTROL, 0x80000001 ); // No, really make sure. MCF.WriteReg32( dev, DMCONTROL, 0x80000001 ); + int r = MCF.ReadReg32( dev, DMSTATUS, &ds ); + printf( "DMStatus After Halt: /%d/%08x\n", r, ds ); + // Many times we would clear the halt request, but in this case, we want to just leave it here, to prevent it from booting. // TODO: Experiment and see if this is needed/wanted in cases. NOTE: If you don't clear halt request, progarmmers can get stuck. // MCF.WriteReg32( dev, DMCONTROL, 0x00000001 ); // Clear Halt Request. diff --git a/minichlink/minichlink.exe b/minichlink/minichlink.exe index 41c7a0961ea714c1698c7f42a519ef9283b9b923..00156360a8812835d0315bc1fb393d4578737778 100644 Binary files a/minichlink/minichlink.exe and b/minichlink/minichlink.exe differ