|
@@ -3654,6 +3654,7 @@ EXPORT_SYMBOL(gsi_query_channel_info);
|
|
|
int gsi_is_channel_empty(unsigned long chan_hdl, bool *is_empty)
|
|
|
{
|
|
|
struct gsi_chan_ctx *ctx;
|
|
|
+ struct gsi_evt_ctx *ev_ctx;
|
|
|
spinlock_t *slock;
|
|
|
unsigned long flags;
|
|
|
uint64_t rp;
|
|
@@ -3689,8 +3690,11 @@ int gsi_is_channel_empty(unsigned long chan_hdl, bool *is_empty)
|
|
|
spin_lock_irqsave(slock, flags);
|
|
|
|
|
|
if (ctx->props.dir == GSI_CHAN_DIR_FROM_GSI && ctx->evtr) {
|
|
|
- rp = gsihal_read_reg_nk(GSI_EE_n_EV_CH_k_CNTXT_4,
|
|
|
- ee, ctx->evtr->id);
|
|
|
+ ev_ctx = &gsi_ctx->evtr[ctx->evtr->id];
|
|
|
+ /* Read the event ring rp from DDR to avoid mismatch */
|
|
|
+ rp = ev_ctx->props.gsi_read_event_ring_rp(&ev_ctx->props,
|
|
|
+ ev_ctx->id, ee);
|
|
|
+
|
|
|
rp |= ctx->evtr->ring.rp & GSI_MSB_MASK;
|
|
|
ctx->evtr->ring.rp = rp;
|
|
|
|