Subversion Repositories Kolibri OS

Rev

Rev 5078 | Rev 5271 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5078 Rev 5179
Line 6314... Line 6314...
6314
		wptr = le32_to_cpu(rdev->wb.wb[R600_WB_IH_WPTR_OFFSET/4]);
6314
		wptr = le32_to_cpu(rdev->wb.wb[R600_WB_IH_WPTR_OFFSET/4]);
6315
	else
6315
	else
6316
		wptr = RREG32(IH_RB_WPTR);
6316
		wptr = RREG32(IH_RB_WPTR);
Line 6317... Line 6317...
6317
 
6317
 
-
 
6318
	if (wptr & RB_OVERFLOW) {
6318
	if (wptr & RB_OVERFLOW) {
6319
		wptr &= ~RB_OVERFLOW;
6319
		/* When a ring buffer overflow happen start parsing interrupt
6320
		/* When a ring buffer overflow happen start parsing interrupt
6320
		 * from the last not overwritten vector (wptr + 16). Hopefully
6321
		 * from the last not overwritten vector (wptr + 16). Hopefully
6321
		 * this should allow us to catchup.
6322
		 * this should allow us to catchup.
6322
		 */
6323
		 */
6323
		dev_warn(rdev->dev, "IH ring buffer overflow (0x%08X, %d, %d)\n",
6324
		dev_warn(rdev->dev, "IH ring buffer overflow (0x%08X, 0x%08X, 0x%08X)\n",
6324
			wptr, rdev->ih.rptr, (wptr + 16) + rdev->ih.ptr_mask);
6325
			 wptr, rdev->ih.rptr, (wptr + 16) & rdev->ih.ptr_mask);
6325
		rdev->ih.rptr = (wptr + 16) & rdev->ih.ptr_mask;
6326
		rdev->ih.rptr = (wptr + 16) & rdev->ih.ptr_mask;
6326
		tmp = RREG32(IH_RB_CNTL);
6327
		tmp = RREG32(IH_RB_CNTL);
6327
		tmp |= IH_WPTR_OVERFLOW_CLEAR;
6328
		tmp |= IH_WPTR_OVERFLOW_CLEAR;
6328
		WREG32(IH_RB_CNTL, tmp);
-
 
6329
		wptr &= ~RB_OVERFLOW;
6329
		WREG32(IH_RB_CNTL, tmp);
6330
	}
6330
	}
6331
	return (wptr & rdev->ih.ptr_mask);
6331
	return (wptr & rdev->ih.ptr_mask);
Line 6332... Line 6332...
6332
}
6332
}
Line 6660... Line 6660...
6660
		}
6660
		}
Line 6661... Line 6661...
6661
 
6661
 
6662
		/* wptr/rptr are in bytes! */
6662
		/* wptr/rptr are in bytes! */
6663
		rptr += 16;
6663
		rptr += 16;
-
 
6664
		rptr &= rdev->ih.ptr_mask;
6664
		rptr &= rdev->ih.ptr_mask;
6665
		WREG32(IH_RB_RPTR, rptr);
6665
	}
6666
	}
6666
//   if (queue_hotplug)
6667
//   if (queue_hotplug)
6667
//       schedule_work(&rdev->hotplug_work);
6668
//       schedule_work(&rdev->hotplug_work);
6668
	rdev->ih.rptr = rptr;
-
 
6669
	WREG32(IH_RB_RPTR, rdev->ih.rptr);
6669
	rdev->ih.rptr = rptr;
Line 6670... Line 6670...
6670
	atomic_set(&rdev->ih.lock, 0);
6670
	atomic_set(&rdev->ih.lock, 0);
6671
 
6671
 
6672
	/* make sure wptr hasn't changed while processing */
6672
	/* make sure wptr hasn't changed while processing */