writel_relaxed(buffer, &desc->hw_buffer);
        writel_relaxed(len, &desc->hw_len);
        writel_relaxed(mode | len, &desc->hw_mode);
-       writel_relaxed(token, &desc->sw_token);
+       writel_relaxed((uintptr_t)token, &desc->sw_token);
        writel_relaxed(buffer, &desc->sw_buffer);
        writel_relaxed(len, &desc->sw_len);
        desc_read(desc, sw_len);
        struct cpdma_desc_pool          *pool = ctlr->pool;
        dma_addr_t                      buff_dma;
        int                             origlen;
-       void                            *token;
+       uintptr_t                       token;
 
-       token      = (void *)desc_read(desc, sw_token);
+       token      = desc_read(desc, sw_token);
        buff_dma   = desc_read(desc, sw_buffer);
        origlen    = desc_read(desc, sw_len);
 
        dma_unmap_single(ctlr->dev, buff_dma, origlen, chan->dir);
        cpdma_desc_free(pool, desc, 1);
-       (*chan->handler)(token, outlen, status);
+       (*chan->handler)((void *)token, outlen, status);
 }
 
 static int __cpdma_chan_process(struct cpdma_chan *chan)