* [PATCH 1/2] ethoc: inline regs access
@ 2009-10-08 0:16 Thomas Chou
2009-10-08 0:16 ` [PATCH 2/2] ethoc: clear only pending irqs Thomas Chou
2009-10-19 4:24 ` [PATCH 1/2] ethoc: inline regs access David Miller
0 siblings, 2 replies; 4+ messages in thread
From: Thomas Chou @ 2009-10-08 0:16 UTC (permalink / raw)
To: netdev; +Cc: thierry.reding, Nios2 development list, linux-kernel, Thomas Chou
Signed-off-by: Thomas Chou <thomas@wytron.com.tw>
---
drivers/net/ethoc.c | 19 ++++++++++---------
1 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/drivers/net/ethoc.c b/drivers/net/ethoc.c
index 22df0a6..6b39723 100644
--- a/drivers/net/ethoc.c
+++ b/drivers/net/ethoc.c
@@ -222,24 +222,25 @@ struct ethoc_bd {
u32 addr;
};
-static u32 ethoc_read(struct ethoc *dev, loff_t offset)
+static inline u32 ethoc_read(struct ethoc *dev, loff_t offset)
{
return ioread32(dev->iobase + offset);
}
-static void ethoc_write(struct ethoc *dev, loff_t offset, u32 data)
+static inline void ethoc_write(struct ethoc *dev, loff_t offset, u32 data)
{
iowrite32(data, dev->iobase + offset);
}
-static void ethoc_read_bd(struct ethoc *dev, int index, struct ethoc_bd *bd)
+static inline void ethoc_read_bd(struct ethoc *dev, int index,
+ struct ethoc_bd *bd)
{
loff_t offset = ETHOC_BD_BASE + (index * sizeof(struct ethoc_bd));
bd->stat = ethoc_read(dev, offset + 0);
bd->addr = ethoc_read(dev, offset + 4);
}
-static void ethoc_write_bd(struct ethoc *dev, int index,
+static inline void ethoc_write_bd(struct ethoc *dev, int index,
const struct ethoc_bd *bd)
{
loff_t offset = ETHOC_BD_BASE + (index * sizeof(struct ethoc_bd));
@@ -247,33 +248,33 @@ static void ethoc_write_bd(struct ethoc *dev, int index,
ethoc_write(dev, offset + 4, bd->addr);
}
-static void ethoc_enable_irq(struct ethoc *dev, u32 mask)
+static inline void ethoc_enable_irq(struct ethoc *dev, u32 mask)
{
u32 imask = ethoc_read(dev, INT_MASK);
imask |= mask;
ethoc_write(dev, INT_MASK, imask);
}
-static void ethoc_disable_irq(struct ethoc *dev, u32 mask)
+static inline void ethoc_disable_irq(struct ethoc *dev, u32 mask)
{
u32 imask = ethoc_read(dev, INT_MASK);
imask &= ~mask;
ethoc_write(dev, INT_MASK, imask);
}
-static void ethoc_ack_irq(struct ethoc *dev, u32 mask)
+static inline void ethoc_ack_irq(struct ethoc *dev, u32 mask)
{
ethoc_write(dev, INT_SOURCE, mask);
}
-static void ethoc_enable_rx_and_tx(struct ethoc *dev)
+static inline void ethoc_enable_rx_and_tx(struct ethoc *dev)
{
u32 mode = ethoc_read(dev, MODER);
mode |= MODER_RXEN | MODER_TXEN;
ethoc_write(dev, MODER, mode);
}
-static void ethoc_disable_rx_and_tx(struct ethoc *dev)
+static inline void ethoc_disable_rx_and_tx(struct ethoc *dev)
{
u32 mode = ethoc_read(dev, MODER);
mode &= ~(MODER_RXEN | MODER_TXEN);
--
1.6.2.5
^ permalink raw reply related [flat|nested] 4+ messages in thread* [PATCH 2/2] ethoc: clear only pending irqs
2009-10-08 0:16 [PATCH 1/2] ethoc: inline regs access Thomas Chou
@ 2009-10-08 0:16 ` Thomas Chou
2009-10-19 4:24 ` David Miller
2009-10-19 4:24 ` [PATCH 1/2] ethoc: inline regs access David Miller
1 sibling, 1 reply; 4+ messages in thread
From: Thomas Chou @ 2009-10-08 0:16 UTC (permalink / raw)
To: netdev; +Cc: thierry.reding, Nios2 development list, linux-kernel, Thomas Chou
This patch fixed the problem of dropped packets due to lost of
interrupt requests. We should only clear what was pending at the
moment we read the irq source reg.
Signed-off-by: Thomas Chou <thomas@wytron.com.tw>
---
drivers/net/ethoc.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/net/ethoc.c b/drivers/net/ethoc.c
index 6b39723..ecc53d9 100644
--- a/drivers/net/ethoc.c
+++ b/drivers/net/ethoc.c
@@ -509,7 +509,7 @@ static irqreturn_t ethoc_interrupt(int irq, void *dev_id)
return IRQ_NONE;
}
- ethoc_ack_irq(priv, INT_MASK_ALL);
+ ethoc_ack_irq(priv, pending);
if (pending & INT_MASK_BUSY) {
dev_err(&dev->dev, "packet dropped\n");
--
1.6.2.5
^ permalink raw reply related [flat|nested] 4+ messages in thread* Re: [PATCH 1/2] ethoc: inline regs access
2009-10-08 0:16 [PATCH 1/2] ethoc: inline regs access Thomas Chou
2009-10-08 0:16 ` [PATCH 2/2] ethoc: clear only pending irqs Thomas Chou
@ 2009-10-19 4:24 ` David Miller
1 sibling, 0 replies; 4+ messages in thread
From: David Miller @ 2009-10-19 4:24 UTC (permalink / raw)
To: thomas; +Cc: netdev, thierry.reding, nios2-dev, linux-kernel
From: Thomas Chou <thomas@wytron.com.tw>
Date: Thu, 8 Oct 2009 08:16:42 +0800
> Signed-off-by: Thomas Chou <thomas@wytron.com.tw>
Applied.
^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2009-10-19 4:24 UTC | newest]
Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-10-08 0:16 [PATCH 1/2] ethoc: inline regs access Thomas Chou
2009-10-08 0:16 ` [PATCH 2/2] ethoc: clear only pending irqs Thomas Chou
2009-10-19 4:24 ` David Miller
2009-10-19 4:24 ` [PATCH 1/2] ethoc: inline regs access David Miller
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox