Quantcast
Channel: Forum - Recent Threads
Viewing all articles
Browse latest Browse all 1583

RE: Ethernet Issues on RSK RZA1H:

$
0
0

If you look in file drivers/net/ethernet/renesas/sh_eth.c, you will find function "sh_eth_interrupt".

The driver should only return "IRQ_NONE" if the driver thinks an interrupt has occurred that was not caused by the hardware.

See lines:

	/* Get interrupt status */
	intr_status = sh_eth_read(ndev, EESR);
	/* Mask it with the interrupt mask, forcing ECI interrupt to be always
	 * enabled since it's the one that  comes thru regardless of the mask,
	 * and we need to fully handle it in sh_eth_error() in order to quench
	 * it as it doesn't get cleared by just writing 1 to the ECI bit...
	 */
	intr_enable = sh_eth_read(ndev, EESIPR);
	intr_status &= intr_enable | DMAC_M_ECI;
	if (intr_status & (EESR_RX_CHECK | cd->tx_check | cd->eesr_err_check))
		ret = IRQ_HANDLED;
	else
		goto other_irq;

What values do you get when you print registers EESR and EESIPR when this happens?

For example:

	intr_enable = sh_eth_read(ndev, EESIPR);
	intr_status &= intr_enable | DMAC_M_ECI;
	if (intr_status & (EESR_RX_CHECK | cd->tx_check | cd->eesr_err_check))
		ret = IRQ_HANDLED;
	else
	{
		printk("EESR=%04lX, EESIPR=%04lX\n",
			sh_eth_read(ndev, EESR), sh_eth_read(ndev, EESIPR));
		goto other_irq;
	}

Side note, in the upstream version, the warning messages "Receive Descriptor Empty" and "Receive FIFO Overflow" were removed:

https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/commit/drivers/net/ethernet/renesas/sh_eth.c?id=dc1d0e6d55006a48ebc0f40a74485ca430f05046

Also, if you keep running into a lot of buffer under runs, you can try adjusting the buffer settings at the top of the file sh_eth.h


Viewing all articles
Browse latest Browse all 1583

Trending Articles