mirror of https://gitee.com/openkylin/linux.git
Merge branch 'topic/hsu' into for-linus
This commit is contained in:
commit
d38e45aa17
|
@ -200,10 +200,9 @@ EXPORT_SYMBOL_GPL(hsu_dma_get_status);
|
||||||
* is not a normal timeout interrupt, ie. hsu_dma_get_status() returned 0.
|
* is not a normal timeout interrupt, ie. hsu_dma_get_status() returned 0.
|
||||||
*
|
*
|
||||||
* Return:
|
* Return:
|
||||||
* IRQ_NONE for invalid channel number, IRQ_HANDLED otherwise.
|
* 0 for invalid channel number, 1 otherwise.
|
||||||
*/
|
*/
|
||||||
irqreturn_t hsu_dma_do_irq(struct hsu_dma_chip *chip, unsigned short nr,
|
int hsu_dma_do_irq(struct hsu_dma_chip *chip, unsigned short nr, u32 status)
|
||||||
u32 status)
|
|
||||||
{
|
{
|
||||||
struct hsu_dma_chan *hsuc;
|
struct hsu_dma_chan *hsuc;
|
||||||
struct hsu_dma_desc *desc;
|
struct hsu_dma_desc *desc;
|
||||||
|
@ -211,7 +210,7 @@ irqreturn_t hsu_dma_do_irq(struct hsu_dma_chip *chip, unsigned short nr,
|
||||||
|
|
||||||
/* Sanity check */
|
/* Sanity check */
|
||||||
if (nr >= chip->hsu->nr_channels)
|
if (nr >= chip->hsu->nr_channels)
|
||||||
return IRQ_NONE;
|
return 0;
|
||||||
|
|
||||||
hsuc = &chip->hsu->chan[nr];
|
hsuc = &chip->hsu->chan[nr];
|
||||||
|
|
||||||
|
@ -230,7 +229,7 @@ irqreturn_t hsu_dma_do_irq(struct hsu_dma_chip *chip, unsigned short nr,
|
||||||
}
|
}
|
||||||
spin_unlock_irqrestore(&hsuc->vchan.lock, flags);
|
spin_unlock_irqrestore(&hsuc->vchan.lock, flags);
|
||||||
|
|
||||||
return IRQ_HANDLED;
|
return 1;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(hsu_dma_do_irq);
|
EXPORT_SYMBOL_GPL(hsu_dma_do_irq);
|
||||||
|
|
||||||
|
|
|
@ -29,7 +29,7 @@ static irqreturn_t hsu_pci_irq(int irq, void *dev)
|
||||||
u32 dmaisr;
|
u32 dmaisr;
|
||||||
u32 status;
|
u32 status;
|
||||||
unsigned short i;
|
unsigned short i;
|
||||||
irqreturn_t ret = IRQ_NONE;
|
int ret = 0;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
dmaisr = readl(chip->regs + HSU_PCI_DMAISR);
|
dmaisr = readl(chip->regs + HSU_PCI_DMAISR);
|
||||||
|
@ -37,14 +37,14 @@ static irqreturn_t hsu_pci_irq(int irq, void *dev)
|
||||||
if (dmaisr & 0x1) {
|
if (dmaisr & 0x1) {
|
||||||
err = hsu_dma_get_status(chip, i, &status);
|
err = hsu_dma_get_status(chip, i, &status);
|
||||||
if (err > 0)
|
if (err > 0)
|
||||||
ret |= IRQ_HANDLED;
|
ret |= 1;
|
||||||
else if (err == 0)
|
else if (err == 0)
|
||||||
ret |= hsu_dma_do_irq(chip, i, status);
|
ret |= hsu_dma_do_irq(chip, i, status);
|
||||||
}
|
}
|
||||||
dmaisr >>= 1;
|
dmaisr >>= 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
return ret;
|
return IRQ_RETVAL(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int hsu_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
static int hsu_pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
|
||||||
|
|
|
@ -99,27 +99,27 @@ static int dnv_handle_irq(struct uart_port *p)
|
||||||
struct uart_8250_port *up = up_to_u8250p(p);
|
struct uart_8250_port *up = up_to_u8250p(p);
|
||||||
unsigned int fisr = serial_port_in(p, INTEL_MID_UART_DNV_FISR);
|
unsigned int fisr = serial_port_in(p, INTEL_MID_UART_DNV_FISR);
|
||||||
u32 status;
|
u32 status;
|
||||||
int ret = IRQ_NONE;
|
int ret = 0;
|
||||||
int err;
|
int err;
|
||||||
|
|
||||||
if (fisr & BIT(2)) {
|
if (fisr & BIT(2)) {
|
||||||
err = hsu_dma_get_status(&mid->dma_chip, 1, &status);
|
err = hsu_dma_get_status(&mid->dma_chip, 1, &status);
|
||||||
if (err > 0) {
|
if (err > 0) {
|
||||||
serial8250_rx_dma_flush(up);
|
serial8250_rx_dma_flush(up);
|
||||||
ret |= IRQ_HANDLED;
|
ret |= 1;
|
||||||
} else if (err == 0)
|
} else if (err == 0)
|
||||||
ret |= hsu_dma_do_irq(&mid->dma_chip, 1, status);
|
ret |= hsu_dma_do_irq(&mid->dma_chip, 1, status);
|
||||||
}
|
}
|
||||||
if (fisr & BIT(1)) {
|
if (fisr & BIT(1)) {
|
||||||
err = hsu_dma_get_status(&mid->dma_chip, 0, &status);
|
err = hsu_dma_get_status(&mid->dma_chip, 0, &status);
|
||||||
if (err > 0)
|
if (err > 0)
|
||||||
ret |= IRQ_HANDLED;
|
ret |= 1;
|
||||||
else if (err == 0)
|
else if (err == 0)
|
||||||
ret |= hsu_dma_do_irq(&mid->dma_chip, 0, status);
|
ret |= hsu_dma_do_irq(&mid->dma_chip, 0, status);
|
||||||
}
|
}
|
||||||
if (fisr & BIT(0))
|
if (fisr & BIT(0))
|
||||||
ret |= serial8250_handle_irq(p, serial_port_in(p, UART_IIR));
|
ret |= serial8250_handle_irq(p, serial_port_in(p, UART_IIR));
|
||||||
return ret;
|
return IRQ_RETVAL(ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
#define DNV_DMA_CHAN_OFFSET 0x80
|
#define DNV_DMA_CHAN_OFFSET 0x80
|
||||||
|
|
|
@ -41,8 +41,7 @@ struct hsu_dma_chip {
|
||||||
/* Export to the internal users */
|
/* Export to the internal users */
|
||||||
int hsu_dma_get_status(struct hsu_dma_chip *chip, unsigned short nr,
|
int hsu_dma_get_status(struct hsu_dma_chip *chip, unsigned short nr,
|
||||||
u32 *status);
|
u32 *status);
|
||||||
irqreturn_t hsu_dma_do_irq(struct hsu_dma_chip *chip, unsigned short nr,
|
int hsu_dma_do_irq(struct hsu_dma_chip *chip, unsigned short nr, u32 status);
|
||||||
u32 status);
|
|
||||||
|
|
||||||
/* Export to the platform drivers */
|
/* Export to the platform drivers */
|
||||||
int hsu_dma_probe(struct hsu_dma_chip *chip);
|
int hsu_dma_probe(struct hsu_dma_chip *chip);
|
||||||
|
@ -53,10 +52,10 @@ static inline int hsu_dma_get_status(struct hsu_dma_chip *chip,
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
static inline irqreturn_t hsu_dma_do_irq(struct hsu_dma_chip *chip,
|
static inline int hsu_dma_do_irq(struct hsu_dma_chip *chip, unsigned short nr,
|
||||||
unsigned short nr, u32 status)
|
u32 status)
|
||||||
{
|
{
|
||||||
return IRQ_NONE;
|
return 0;
|
||||||
}
|
}
|
||||||
static inline int hsu_dma_probe(struct hsu_dma_chip *chip) { return -ENODEV; }
|
static inline int hsu_dma_probe(struct hsu_dma_chip *chip) { return -ENODEV; }
|
||||||
static inline int hsu_dma_remove(struct hsu_dma_chip *chip) { return 0; }
|
static inline int hsu_dma_remove(struct hsu_dma_chip *chip) { return 0; }
|
||||||
|
|
Loading…
Reference in New Issue