|
113 | 113 | #define XILINX_DPDMA_CH_VDO 0x020 |
114 | 114 | #define XILINX_DPDMA_CH_PYLD_SZ 0x024 |
115 | 115 | #define XILINX_DPDMA_CH_DESC_ID 0x028 |
| 116 | +#define XILINX_DPDMA_CH_DESC_ID_MASK GENMASK(15, 0) |
116 | 117 |
|
117 | 118 | /* DPDMA descriptor fields */ |
118 | 119 | #define XILINX_DPDMA_DESC_CONTROL_PREEMBLE 0xa5 |
@@ -866,7 +867,8 @@ static void xilinx_dpdma_chan_queue_transfer(struct xilinx_dpdma_chan *chan) |
866 | 867 | * will be used, but it should be enough. |
867 | 868 | */ |
868 | 869 | list_for_each_entry(sw_desc, &desc->descriptors, node) |
869 | | - sw_desc->hw.desc_id = desc->vdesc.tx.cookie; |
| 870 | + sw_desc->hw.desc_id = desc->vdesc.tx.cookie |
| 871 | + & XILINX_DPDMA_CH_DESC_ID_MASK; |
870 | 872 |
|
871 | 873 | sw_desc = list_first_entry(&desc->descriptors, |
872 | 874 | struct xilinx_dpdma_sw_desc, node); |
@@ -1086,7 +1088,8 @@ static void xilinx_dpdma_chan_vsync_irq(struct xilinx_dpdma_chan *chan) |
1086 | 1088 | if (!chan->running || !pending) |
1087 | 1089 | goto out; |
1088 | 1090 |
|
1089 | | - desc_id = dpdma_read(chan->reg, XILINX_DPDMA_CH_DESC_ID); |
| 1091 | + desc_id = dpdma_read(chan->reg, XILINX_DPDMA_CH_DESC_ID) |
| 1092 | + & XILINX_DPDMA_CH_DESC_ID_MASK; |
1090 | 1093 |
|
1091 | 1094 | /* If the retrigger raced with vsync, retry at the next frame. */ |
1092 | 1095 | sw_desc = list_first_entry(&pending->descriptors, |
|
0 commit comments