|
@@ -40,6 +40,8 @@ struct coh901318_desc {
|
|
|
struct coh901318_lli *lli;
|
|
|
enum dma_data_direction dir;
|
|
|
unsigned long flags;
|
|
|
+ u32 head_config;
|
|
|
+ u32 head_ctrl;
|
|
|
};
|
|
|
|
|
|
struct coh901318_base {
|
|
@@ -660,6 +662,9 @@ static struct coh901318_desc *coh901318_queue_start(struct coh901318_chan *cohc)
|
|
|
|
|
|
coh901318_desc_submit(cohc, cohd);
|
|
|
|
|
|
+ /* Program the transaction head */
|
|
|
+ coh901318_set_conf(cohc, cohd->head_config);
|
|
|
+ coh901318_set_ctrl(cohc, cohd->head_ctrl);
|
|
|
coh901318_prep_linked_list(cohc, cohd->lli);
|
|
|
|
|
|
/* start dma job on this channel */
|
|
@@ -1090,8 +1095,6 @@ coh901318_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl,
|
|
|
} else
|
|
|
goto err_direction;
|
|
|
|
|
|
- coh901318_set_conf(cohc, config);
|
|
|
-
|
|
|
/* The dma only supports transmitting packages up to
|
|
|
* MAX_DMA_PACKET_SIZE. Calculate to total number of
|
|
|
* dma elemts required to send the entire sg list
|
|
@@ -1128,16 +1131,18 @@ coh901318_prep_slave_sg(struct dma_chan *chan, struct scatterlist *sgl,
|
|
|
if (ret)
|
|
|
goto err_lli_fill;
|
|
|
|
|
|
- /*
|
|
|
- * Set the default ctrl for the channel to the one from the lli,
|
|
|
- * things may have changed due to odd buffer alignment etc.
|
|
|
- */
|
|
|
- coh901318_set_ctrl(cohc, lli->control);
|
|
|
|
|
|
COH_DBG(coh901318_list_print(cohc, lli));
|
|
|
|
|
|
/* Pick a descriptor to handle this transfer */
|
|
|
cohd = coh901318_desc_get(cohc);
|
|
|
+ cohd->head_config = config;
|
|
|
+ /*
|
|
|
+ * Set the default head ctrl for the channel to the one from the
|
|
|
+ * lli, things may have changed due to odd buffer alignment
|
|
|
+ * etc.
|
|
|
+ */
|
|
|
+ cohd->head_ctrl = lli->control;
|
|
|
cohd->dir = direction;
|
|
|
cohd->flags = flags;
|
|
|
cohd->desc.tx_submit = coh901318_tx_submit;
|