|
@@ -864,3 +864,99 @@ static inline void iop_chan_enable(struct iop_adma_chan *chan)
|
|
u32 dma_chan_ctrl = __raw_readl(DMA_CCR(chan));
|
|
u32 dma_chan_ctrl = __raw_readl(DMA_CCR(chan));
|
|
|
|
|
|
dma_chan_ctrl |= 1;
|
|
dma_chan_ctrl |= 1;
|
|
|
|
+ __raw_writel(dma_chan_ctrl, DMA_CCR(chan));
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline void iop_adma_device_clear_eot_status(struct iop_adma_chan *chan)
|
|
|
|
+{
|
|
|
|
+ u32 status = __raw_readl(DMA_CSR(chan));
|
|
|
|
+ status &= (1 << 9);
|
|
|
|
+ __raw_writel(status, DMA_CSR(chan));
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline void iop_adma_device_clear_eoc_status(struct iop_adma_chan *chan)
|
|
|
|
+{
|
|
|
|
+ u32 status = __raw_readl(DMA_CSR(chan));
|
|
|
|
+ status &= (1 << 8);
|
|
|
|
+ __raw_writel(status, DMA_CSR(chan));
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline void iop_adma_device_clear_err_status(struct iop_adma_chan *chan)
|
|
|
|
+{
|
|
|
|
+ u32 status = __raw_readl(DMA_CSR(chan));
|
|
|
|
+
|
|
|
|
+ switch (chan->device->id) {
|
|
|
|
+ case DMA0_ID:
|
|
|
|
+ case DMA1_ID:
|
|
|
|
+ status &= (1 << 5) | (1 << 3) | (1 << 2) | (1 << 1);
|
|
|
|
+ break;
|
|
|
|
+ case AAU_ID:
|
|
|
|
+ status &= (1 << 5);
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ BUG();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ __raw_writel(status, DMA_CSR(chan));
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline int
|
|
|
|
+iop_is_err_int_parity(unsigned long status, struct iop_adma_chan *chan)
|
|
|
|
+{
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline int
|
|
|
|
+iop_is_err_mcu_abort(unsigned long status, struct iop_adma_chan *chan)
|
|
|
|
+{
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline int
|
|
|
|
+iop_is_err_int_tabort(unsigned long status, struct iop_adma_chan *chan)
|
|
|
|
+{
|
|
|
|
+ return 0;
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline int
|
|
|
|
+iop_is_err_int_mabort(unsigned long status, struct iop_adma_chan *chan)
|
|
|
|
+{
|
|
|
|
+ return test_bit(5, &status);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline int
|
|
|
|
+iop_is_err_pci_tabort(unsigned long status, struct iop_adma_chan *chan)
|
|
|
|
+{
|
|
|
|
+ switch (chan->device->id) {
|
|
|
|
+ case DMA0_ID:
|
|
|
|
+ case DMA1_ID:
|
|
|
|
+ return test_bit(2, &status);
|
|
|
|
+ default:
|
|
|
|
+ return 0;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline int
|
|
|
|
+iop_is_err_pci_mabort(unsigned long status, struct iop_adma_chan *chan)
|
|
|
|
+{
|
|
|
|
+ switch (chan->device->id) {
|
|
|
|
+ case DMA0_ID:
|
|
|
|
+ case DMA1_ID:
|
|
|
|
+ return test_bit(3, &status);
|
|
|
|
+ default:
|
|
|
|
+ return 0;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+static inline int
|
|
|
|
+iop_is_err_split_tx(unsigned long status, struct iop_adma_chan *chan)
|
|
|
|
+{
|
|
|
|
+ switch (chan->device->id) {
|
|
|
|
+ case DMA0_ID:
|
|
|
|
+ case DMA1_ID:
|
|
|
|
+ return test_bit(1, &status);
|
|
|
|
+ default:
|
|
|
|
+ return 0;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
+#endif /* _ADMA_H */
|