diff mbox

[U-Boot] net: davinci_emac: don't teardown inactive rx channel

Message ID 1433691038-21078-1-git-send-email-jeroen@myspectrum.nl
State Accepted
Delegated to: Joe Hershberger
Headers show

Commit Message

Jeroen Hofstee June 7, 2015, 3:30 p.m. UTC
Tearing down an unitialized rx channel causes a pending address hole
event to be queued. When booting linux it will report this pending
as something like "Address Hole seen by USB_OTG  at address 57fff584",
since u-boot did not handled this interrupt. Prevent that by not
tearing down the rx channel, when not receiving.

Signed-off-by: Jeroen Hofstee <jeroen@myspectrum.nl>
---
To replicate this:
 - ROMcode must not use the emac
 - U-Boot must use the emac
 - only on cold start
---
 drivers/net/davinci_emac.c | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

Comments

Jeroen Hofstee June 8, 2015, 9:05 a.m. UTC | #1
+cc (forget them somehow)

On 07-06-15 17:30, Jeroen Hofstee wrote:
> Tearing down an unitialized rx channel causes a pending address hole
> event to be queued. When booting linux it will report this pending
> as something like "Address Hole seen by USB_OTG  at address 57fff584",
> since u-boot did not handled this interrupt. Prevent that by not
> tearing down the rx channel, when not receiving.
>
> Signed-off-by: Jeroen Hofstee <jeroen@myspectrum.nl>
> ---
> To replicate this:
>   - ROMcode must not use the emac
>   - U-Boot must use the emac
>   - only on cold start
> ---
>   drivers/net/davinci_emac.c | 3 ++-
>   1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/davinci_emac.c b/drivers/net/davinci_emac.c
> index 427ad3e..0444795 100644
> --- a/drivers/net/davinci_emac.c
> +++ b/drivers/net/davinci_emac.c
> @@ -598,7 +598,8 @@ static void davinci_eth_close(struct eth_device *dev)
>   	debug_emac("+ emac_close\n");
>   
>   	davinci_eth_ch_teardown(EMAC_CH_TX);	/* TX Channel teardown */
> -	davinci_eth_ch_teardown(EMAC_CH_RX);	/* RX Channel teardown */
> +	if (readl(&adap_emac->RXCONTROL) & 1)
> +		davinci_eth_ch_teardown(EMAC_CH_RX); /* RX Channel teardown */
>   
>   	/* Reset EMAC module and disable interrupts in wrapper */
>   	writel(1, &adap_emac->SOFTRESET);
Joe Hershberger June 10, 2015, 2:24 p.m. UTC | #2
Hi Jeroen,

On Sun, Jun 7, 2015 at 10:30 AM, Jeroen Hofstee <jeroen@myspectrum.nl> wrote:
> Tearing down an unitialized rx channel causes a pending address hole
> event to be queued. When booting linux it will report this pending
> as something like "Address Hole seen by USB_OTG  at address 57fff584",
> since u-boot did not handled this interrupt. Prevent that by not
> tearing down the rx channel, when not receiving.
>
> Signed-off-by: Jeroen Hofstee <jeroen@myspectrum.nl>
> ---
> To replicate this:
>  - ROMcode must not use the emac
>  - U-Boot must use the emac
>  - only on cold start
> ---

I don't know the hardware, but it sounds like a reasonable
explanation. Look good to you, Tony?

Thanks,
-Joe
Tony Lindgren June 11, 2015, 5:51 a.m. UTC | #3
* Joe Hershberger <joe.hershberger@gmail.com> [150610 07:26]:
> Hi Jeroen,
> 
> On Sun, Jun 7, 2015 at 10:30 AM, Jeroen Hofstee <jeroen@myspectrum.nl> wrote:
> > Tearing down an unitialized rx channel causes a pending address hole
> > event to be queued. When booting linux it will report this pending
> > as something like "Address Hole seen by USB_OTG  at address 57fff584",
> > since u-boot did not handled this interrupt. Prevent that by not
> > tearing down the rx channel, when not receiving.
> >
> > Signed-off-by: Jeroen Hofstee <jeroen@myspectrum.nl>
> > ---
> > To replicate this:
> >  - ROMcode must not use the emac
> >  - U-Boot must use the emac
> >  - only on cold start
> > ---
> 
> I don't know the hardware, but it sounds like a reasonable
> explanation. Look good to you, Tony?

Sure.

Tony
Joe Hershberger June 11, 2015, 2:28 p.m. UTC | #4
Hi Jeroen,

On Thu, Jun 11, 2015 at 12:51 AM, Tony Lindgren <tony@atomide.com> wrote:
> * Joe Hershberger <joe.hershberger@gmail.com> [150610 07:26]:
>> Hi Jeroen,
>>
>> On Sun, Jun 7, 2015 at 10:30 AM, Jeroen Hofstee <jeroen@myspectrum.nl> wrote:
>> > Tearing down an unitialized rx channel causes a pending address hole
>> > event to be queued. When booting linux it will report this pending
>> > as something like "Address Hole seen by USB_OTG  at address 57fff584",
>> > since u-boot did not handled this interrupt. Prevent that by not
>> > tearing down the rx channel, when not receiving.
>> >
>> > Signed-off-by: Jeroen Hofstee <jeroen@myspectrum.nl>
>> > ---
>> > To replicate this:
>> >  - ROMcode must not use the emac
>> >  - U-Boot must use the emac
>> >  - only on cold start
>> > ---
>>
>> I don't know the hardware, but it sounds like a reasonable
>> explanation. Look good to you, Tony?
>
> Sure.
>
> Tony

OK, I'll pull this into u-boot-net.

Cheers,
-Joe
Joe Hershberger Aug. 12, 2015, 7:26 p.m. UTC | #5
Hi Jeroen,

On Sun, Jun 7, 2015 at 10:30 AM, Jeroen Hofstee <jeroen@myspectrum.nl> wrote:
> Tearing down an unitialized rx channel causes a pending address hole
> event to be queued. When booting linux it will report this pending
> as something like "Address Hole seen by USB_OTG  at address 57fff584",
> since u-boot did not handled this interrupt. Prevent that by not
> tearing down the rx channel, when not receiving.
>
> Signed-off-by: Jeroen Hofstee <jeroen@myspectrum.nl>

Applied to u-boot-net, thanks!
-Joe
diff mbox

Patch

diff --git a/drivers/net/davinci_emac.c b/drivers/net/davinci_emac.c
index 427ad3e..0444795 100644
--- a/drivers/net/davinci_emac.c
+++ b/drivers/net/davinci_emac.c
@@ -598,7 +598,8 @@  static void davinci_eth_close(struct eth_device *dev)
 	debug_emac("+ emac_close\n");
 
 	davinci_eth_ch_teardown(EMAC_CH_TX);	/* TX Channel teardown */
-	davinci_eth_ch_teardown(EMAC_CH_RX);	/* RX Channel teardown */
+	if (readl(&adap_emac->RXCONTROL) & 1)
+		davinci_eth_ch_teardown(EMAC_CH_RX); /* RX Channel teardown */
 
 	/* Reset EMAC module and disable interrupts in wrapper */
 	writel(1, &adap_emac->SOFTRESET);