[U-Boot] cpsw not working with slave2 port defined only

Hi,
I have custom am33xx board with phy connected to slave2 port. I copy'n'paste cpsw setup from /board/BuR/common/common.c but I'm using only slave2 port (RMII mode) so my cpsw_slave_data looks like:
static struct cpsw_slave_data cpsw_slaves[] = { { .slave_reg_ofs = 0x308, .sliver_reg_ofs = 0xdc0, .phy_addr = 4, }, };
with this configuration cpsw driver can detect link but it cannot establish any communication (tested with dhcp command). When I add to cpsw_slaves dummy slave1 port definition (with e.g. phy_addr = 0) it start working.
mdio bus is working fine (tested with mdio list + mdio read). Pinmux is good as it works with dummy slave1 config. Any ideas what I'm doing wrong or why only slave2 port cannot be used? I grep whole source code but all boards using cpsw use slave1 only or slave1/slave2 configurations. Many thanks.
BR,
marek

hi marek:
please check your cpsw_data.slaves change it to 1
and you can set cpsw_data.active_slave = 0 before cpsw_register ,if cpsw_data.slaves is 2.
------------------ Original ------------------ From: "Belisko Marek";marek.belisko@gmail.com; Date: Tue, May 26, 2015 03:30 AM To: "U-Boot Mailing List"u-boot@lists.denx.de;
Subject: [U-Boot] cpsw not working with slave2 port defined only
Hi,
I have custom am33xx board with phy connected to slave2 port. I copy'n'paste cpsw setup from /board/BuR/common/common.c but I'm using only slave2 port (RMII mode) so my cpsw_slave_data looks like:
static struct cpsw_slave_data cpsw_slaves[] = { { .slave_reg_ofs = 0x308, .sliver_reg_ofs = 0xdc0, .phy_addr = 4, }, };
with this configuration cpsw driver can detect link but it cannot establish any communication (tested with dhcp command). When I add to cpsw_slaves dummy slave1 port definition (with e.g. phy_addr = 0) it start working.
mdio bus is working fine (tested with mdio list + mdio read). Pinmux is good as it works with dummy slave1 config. Any ideas what I'm doing wrong or why only slave2 port cannot be used? I grep whole source code but all boards using cpsw use slave1 only or slave1/slave2 configurations. Many thanks.
BR,
marek

Hi,
On Tue, May 26, 2015 at 4:51 AM, Mx21 dillonhua@qq.com wrote:
hi marek:
please check your cpsw_data.slaves change it to 1
I have already cpsw_data.slaves = 1 as I have only one slave port (port 2).
and you can set cpsw_data.active_slave = 0 before cpsw_register ,if cpsw_data.slaves is 2.
This is when you have more slaves and want to have preferred one to be primary ethernet. It's not my case also.
P.S.: please don't top post
BR,
marek
------------------ Original ------------------ From: "Belisko Marek";marek.belisko@gmail.com; Date: Tue, May 26, 2015 03:30 AM To: "U-Boot Mailing List"u-boot@lists.denx.de; Subject: [U-Boot] cpsw not working with slave2 port defined only
Hi,
I have custom am33xx board with phy connected to slave2 port. I copy'n'paste cpsw setup from /board/BuR/common/common.c but I'm using only slave2 port (RMII mode) so my cpsw_slave_data looks like:
static struct cpsw_slave_data cpsw_slaves[] = { { .slave_reg_ofs = 0x308, .sliver_reg_ofs = 0xdc0, .phy_addr = 4, }, };
with this configuration cpsw driver can detect link but it cannot establish any communication (tested with dhcp command). When I add to cpsw_slaves dummy slave1 port definition (with e.g. phy_addr = 0) it start working.
mdio bus is working fine (tested with mdio list + mdio read). Pinmux is good as it works with dummy slave1 config. Any ideas what I'm doing wrong or why only slave2 port cannot be used? I grep whole source code but all boards using cpsw use slave1 only or slave1/slave2 configurations. Many thanks.
BR,
marek
-- as simple and primitive as possible
Marek Belisko - OPEN-NANDRA Freelance Developer
Ruska Nova Ves 219 | Presov, 08005 Slovak Republic Tel: +421 915 052 184 skype: marekwhite twitter: #opennandra web: http://open-nandra.com _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot

On Mon, May 25, 2015 at 9:30 PM, Belisko Marek marek.belisko@gmail.com wrote:
Hi,
I have custom am33xx board with phy connected to slave2 port. I copy'n'paste cpsw setup from /board/BuR/common/common.c but I'm using only slave2 port (RMII mode) so my cpsw_slave_data looks like:
static struct cpsw_slave_data cpsw_slaves[] = { { .slave_reg_ofs = 0x308, .sliver_reg_ofs = 0xdc0, .phy_addr = 4, }, };
with this configuration cpsw driver can detect link but it cannot establish any communication (tested with dhcp command). When I add to cpsw_slaves dummy slave1 port definition (with e.g. phy_addr = 0) it start working.
I forgot to mention that I also update mii_sel register following way: writel(RMII2_MODE_ENABLE | MII2_CLK_FROM_CHIP_PIN | RGMII2_NO_INTERNAL_DELAY | MII1_MODE_NOT_USED , &cdev->miisel);
mdio bus is working fine (tested with mdio list + mdio read). Pinmux is good as it works with dummy slave1 config. Any ideas what I'm doing wrong or why only slave2 port cannot be used? I grep whole source code but all boards using cpsw use slave1 only or slave1/slave2 configurations. Many thanks.
BR,
marek
-- as simple and primitive as possible
Marek Belisko - OPEN-NANDRA Freelance Developer
Ruska Nova Ves 219 | Presov, 08005 Slovak Republic Tel: +421 915 052 184 skype: marekwhite twitter: #opennandra web: http://open-nandra.com
BR,
marek

On Mon, May 25, 2015 at 9:30 PM, Belisko Marek marek.belisko@gmail.com wrote:
Hi,
I have custom am33xx board with phy connected to slave2 port. I copy'n'paste cpsw setup from /board/BuR/common/common.c but I'm using only slave2 port (RMII mode) so my cpsw_slave_data looks like:
static struct cpsw_slave_data cpsw_slaves[] = { { .slave_reg_ofs = 0x308, .sliver_reg_ofs = 0xdc0, .phy_addr = 4, }, };
with this configuration cpsw driver can detect link but it cannot establish any communication (tested with dhcp command). When I add to cpsw_slaves dummy slave1 port definition (with e.g. phy_addr = 0) it start working.
I forgot to mention that I also update mii_sel register following way: writel(RMII2_MODE_ENABLE | MII2_CLK_FROM_CHIP_PIN | RGMII2_NO_INTERNAL_DELAY | MII1_MODE_NOT_USED , &cdev->miisel);
from ref manul, MII2_CLK_FROM_CHIP_PIN(default is from chip pin),RGMII2_NO_INTERNAL_DELAY(just for rgmii mode),MII1_MODE_NOT_USED(suggest to set as same as gmii2_sel) like this: writel(RMII_MODE_ENABLE, &cdev->miisel);
mdio bus is working fine (tested with mdio list + mdio read). Pinmux is good as it works with dummy slave1 config. Any ideas what I'm doing wrong or why only slave2 port cannot be used? I grep whole source code but all boards using cpsw use slave1 only or slave1/slave2 configurations. Many thanks.
BR,
marek
-- as simple and primitive as possible
Marek Belisko - OPEN-NANDRA Freelance Developer
Ruska Nova Ves 219 | Presov, 08005 Slovak Republic Tel: +421 915 052 184 skype: marekwhite twitter: #opennandra web: http://open-nandra.com
BR,
marek

On Tue, May 26, 2015 at 3:51 PM, Mx21 dillonhua@qq.com wrote:
On Mon, May 25, 2015 at 9:30 PM, Belisko Marek marek.belisko@gmail.com wrote:
Hi,
I have custom am33xx board with phy connected to slave2 port. I copy'n'paste cpsw setup from /board/BuR/common/common.c but I'm using only slave2 port (RMII mode) so my cpsw_slave_data looks like:
static struct cpsw_slave_data cpsw_slaves[] = { { .slave_reg_ofs = 0x308, .sliver_reg_ofs = 0xdc0, .phy_addr = 4, }, };
with this configuration cpsw driver can detect link but it cannot establish any communication (tested with dhcp command). When I add to cpsw_slaves dummy slave1 port definition (with e.g. phy_addr = 0) it start working.
I forgot to mention that I also update mii_sel register following way: writel(RMII2_MODE_ENABLE | MII2_CLK_FROM_CHIP_PIN | RGMII2_NO_INTERNAL_DELAY | MII1_MODE_NOT_USED , &cdev->miisel);
from ref manul, MII2_CLK_FROM_CHIP_PIN(default is from chip pin),RGMII2_NO_INTERNAL_DELAY(just for rgmii mode),MII1_MODE_NOT_USED(suggest to set as same as gmii2_sel) like this: writel(RMII_MODE_ENABLE, &cdev->miisel);
I tried but it still not working. I have doubt that it must be something in cpsw driver handling. Maybe some TI people can comment on? Many thanks.
mdio bus is working fine (tested with mdio list + mdio read). Pinmux is good as it works with dummy slave1 config. Any ideas what I'm doing wrong or why only slave2 port cannot be used? I grep whole source code but all boards using cpsw use slave1 only or slave1/slave2 configurations. Many thanks.
BR,
marek
-- as simple and primitive as possible
Marek Belisko - OPEN-NANDRA Freelance Developer
Ruska Nova Ves 219 | Presov, 08005 Slovak Republic Tel: +421 915 052 184 skype: marekwhite twitter: #opennandra web: http://open-nandra.com
BR,
marek
-- as simple and primitive as possible
Marek Belisko - OPEN-NANDRA Freelance Developer
Ruska Nova Ves 219 | Presov, 08005 Slovak Republic Tel: +421 915 052 184 skype: marekwhite twitter: #opennandra web: http://open-nandra.com _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
BR,
marek

On Tuesday 26 May 2015 01:00 AM, Belisko Marek wrote:
Hi,
I have custom am33xx board with phy connected to slave2 port. I copy'n'paste cpsw setup from /board/BuR/common/common.c but I'm using only slave2 port (RMII mode) so my cpsw_slave_data looks like:
static struct cpsw_slave_data cpsw_slaves[] = { { .slave_reg_ofs = 0x308, .sliver_reg_ofs = 0xdc0, .phy_addr = 4, }, };
with this configuration cpsw driver can detect link but it cannot establish any communication (tested with dhcp command). When I add to cpsw_slaves dummy slave1 port definition (with e.g. phy_addr = 0) it start working.
mdio bus is working fine (tested with mdio list + mdio read). Pinmux is good as it works with dummy slave1 config. Any ideas what I'm doing wrong or why only slave2 port cannot be used? I grep whole source code but all boards using cpsw use slave1 only or slave1/slave2 configurations. Many thanks.
Do not remove slave 0 structures and have no of slaves as 2 and set active slave to 1 as done in the following commit 4c8014b9429b593c28fbf0384a6c7ded8587806a in mainline u-boot.
The driver uses the slave numbers to add mac address to ALE, which will fail when you remove slaves from the salve structures.
Regards Mugunthan V N

Hi Mugunthan,
On Mon, Jun 1, 2015 at 11:10 AM, Mugunthan V N mugunthanvnm@ti.com wrote:
On Tuesday 26 May 2015 01:00 AM, Belisko Marek wrote:
Hi,
I have custom am33xx board with phy connected to slave2 port. I copy'n'paste cpsw setup from /board/BuR/common/common.c but I'm using only slave2 port (RMII mode) so my cpsw_slave_data looks like:
static struct cpsw_slave_data cpsw_slaves[] = { { .slave_reg_ofs = 0x308, .sliver_reg_ofs = 0xdc0, .phy_addr = 4, }, };
with this configuration cpsw driver can detect link but it cannot establish any communication (tested with dhcp command). When I add to cpsw_slaves dummy slave1 port definition (with e.g. phy_addr = 0) it start working.
mdio bus is working fine (tested with mdio list + mdio read). Pinmux is good as it works with dummy slave1 config. Any ideas what I'm doing wrong or why only slave2 port cannot be used? I grep whole source code but all boards using cpsw use slave1 only or slave1/slave2 configurations. Many thanks.
Do not remove slave 0 structures and have no of slaves as 2 and set active slave to 1 as done in the following commit 4c8014b9429b593c28fbf0384a6c7ded8587806a in mainline u-boot.
Thanks it works now. I picked 7a0227534dfc17c96bb02529fb69971d079a85f0 and setup everything as you suggested and it works fine.
The driver uses the slave numbers to add mac address to ALE, which will fail when you remove slaves from the salve structures.
I think this should be fixed to avoid problems when you have only slave2. When I have time I'll look on it.
Regards Mugunthan V N
BR,
marek
participants (3)
-
Belisko Marek
-
Mugunthan V N
-
Mx21