Subject: Re: [PATCH] remove vlan tags in CPSW dual emac mode

From: Mugunthan V N <[email-masked]>
Date: Sat, 13 Jul 2013 00:05:53 +0530

On 7/12/2013 7:27 PM, Mark Jackson wrote:
> On 23/04/13 18:29, Mugunthan V N wrote:
>> On 4/23/2013 9:48 PM, Markus Brunner wrote:
>>> If operating in dual emac mode all packets sent by the CPSW contain vlan headers with the reserved VID 0,
>>> which gets stripped away by all somewhat recent Linux versions. Operating systems without that behaviour will fail to communicate.
>>> This patch fixes that behaviour by disabling the VLAN_AWARE mode as already described by the comment above.
>>>
>>> Signed-off-by: Markus Brunner <[email-masked]>
>>> Tested-by: Mark Jackson <[email-masked]>
>>>
>>> ---
>>> --- linux-3.9-rc8.orig/drivers/net/ethernet/ti/cpsw.c    2013-04-23 17:26:11.000000000 +0200
>>> +++ linux-3.9-rc8/drivers/net/ethernet/ti/cpsw.c    2013-04-23 17:36:25.000000000 +0200
>>> @@ -751,9 +751,9 @@ static void cpsw_init_host_port(struct c
>>>       /* switch to vlan unaware mode */
>>>       cpsw_ale_control_set(priv->ale, priv->host_port, ALE_VLAN_AWARE,
>>>                    CPSW_ALE_VLAN_AWARE);
>>>       control_reg = readl(&priv->regs->control);
>>> -    control_reg |= CPSW_VLAN_AWARE;
>>> +    control_reg &= ~CPSW_VLAN_AWARE;
>>>       writel(control_reg, &priv->regs->control);
>>>       fifo_mode = (priv->data.dual_emac) ? CPSW_FIFO_DUAL_MAC_MODE :
>>>                CPSW_FIFO_NORMAL_MODE;
>>>       writel(fifo_mode, &priv->host_port_regs->tx_in_ctl);
>> Disabling VLAN aware mode will enable switching mode and the feature of
>> separating the two down stream port is lost with this patch
>> Please check TRM for more info in *14.3.2.10.2 Dual Mac Mode* chapter
> Just to update this (old) thread ...
>
> I can still confirm that *without* the above patch, I am *unable* to use both network
> ports on our AM335x board.
>
> My .dts file contains:-
>
> mac: ethernet@4a100000 {
> 	dual_emac = <1>;
>
> 	cpsw_emac0: slave@4a100200 {
> 		dual_emac_res_vlan = <1>;
> 	};
>
> 	cpsw_emac1: slave@4a100300 {
> 		dual_emac_res_vlan = <2>;
> 	};
> };
>
> &cpsw_emac0 {
> 	phy_id = <&davinci_mdio>, <0>;
> };
>
> &cpsw_emac1 {
> 	phy_id = <&davinci_mdio>, <1>;
> };
>
> My /etc/network/interfaces file is:-
>
> auto lo eth0 eth1
> iface lo inet loopback
> iface eth0 inet static
> address 10.0.101.3
> netmask 255.255.0.0
> gateway 10.0.0.1
> iface eth1 inet static
> address 10.1.101.3
> netmask 255.255.0.0
>
> So I'm not sure what's wrong, but it's *definitely* not correct.
>
>
I am sure that current code in mainline works for Dual EMAC. I can test it
again and share the images with you if are interested. But had tested with DHCP
on both the interfaces.

Regards
Mugunthan V N