--- mips32_pracc.c.orig	2009-01-16 08:02:25.000000000 +0100
+++ mips32_pracc.c	2009-04-08 12:52:51.000000000 +0200
@@ -63,6 +63,7 @@
 {
 	mips_ejtag_t *ejtag_info = ctx->ejtag_info;
 	int offset;
+	int i;
 	u32 ejtag_ctrl, data;
 
 	if ((address >= MIPS32_PRACC_PARAM_IN)
@@ -103,10 +104,16 @@
 	mips_ejtag_drscan_32(ctx->ejtag_info, &data);
 
 	/* Clear the access pending bit (let the processor eat!) */
-	ejtag_ctrl = ejtag_info->ejtag_ctrl & ~EJTAG_CTRL_PRACC;
-	mips_ejtag_set_instr(ctx->ejtag_info, EJTAG_INST_CONTROL, NULL);
-	mips_ejtag_drscan_32(ctx->ejtag_info, &ejtag_ctrl);
+
+	i=0;	
+	do {
+	    ejtag_ctrl = ejtag_info->ejtag_ctrl & ~EJTAG_CTRL_PRACC;
+	    mips_ejtag_set_instr(ctx->ejtag_info, EJTAG_INST_CONTROL, NULL);
+	    mips_ejtag_drscan_32(ctx->ejtag_info, &ejtag_ctrl);
+	    i++;
+	} while ( ((ejtag_ctrl & EJTAG_CTRL_PRACC)!=0) && (i<10000));
 	
+
 	return ERROR_OK;
 }
 
@@ -114,15 +121,22 @@
 {
 	u32 ejtag_ctrl,data;
 	int offset;
+	int i;
 	mips_ejtag_t *ejtag_info = ctx->ejtag_info;
-	
+
 	mips_ejtag_set_instr(ctx->ejtag_info, EJTAG_INST_DATA, NULL);
 	mips_ejtag_drscan_32(ctx->ejtag_info, &data);
 	
 	/* Clear access pending bit */
-	ejtag_ctrl = ejtag_info->ejtag_ctrl & ~EJTAG_CTRL_PRACC;
-	mips_ejtag_set_instr(ctx->ejtag_info, EJTAG_INST_CONTROL, NULL);
-	mips_ejtag_drscan_32(ctx->ejtag_info, &ejtag_ctrl);
+	i=0;	
+	do {
+	    ejtag_ctrl = ejtag_info->ejtag_ctrl & ~EJTAG_CTRL_PRACC;
+	    mips_ejtag_set_instr(ctx->ejtag_info, EJTAG_INST_CONTROL, NULL);
+	    mips_ejtag_drscan_32(ctx->ejtag_info, &ejtag_ctrl);
+
+	    i++;
+	} while ( ((ejtag_ctrl & EJTAG_CTRL_PRACC)!=0) && (i<10000));
+
 	
 	if ((address >= MIPS32_PRACC_PARAM_IN)
 		&& (address <= MIPS32_PRACC_PARAM_IN + ctx->num_iparam * 4))
