This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

DP83867IS: SGMII 10M Mode Settings and Master/Slave Resolutoin

Part Number: DP83867IS

Hi team,

My customer is working with the DP83867IS and running into issues setting up the SGMII 10M mode as well as seeing a master/slave resolution fault in their Linux Kernel.

The two main questions are:

  1. What are the correct settings to turn-on SGMII 10M mode?
  2. In fixed mode on the switch, how to avoid master/slave resolution issue?
    1. Error Code: [  219.942105] TI DP83867 ff0c0000.ethernet-ffffffff:03: Master/Slave resolution?

Thanks,

Jacob

  • Hi Jacob,

    1. SGMII can be enabled by strapping pin 47 to either mode 2 or 4 (see section 8.5.1, table 6 of the datasheet for more details) OR by setting bit[11] of register 0x0010 to 1. For setting the device to fixed 10M mode, you first have to disable auto-negotiation by strapping pin 38 to mode 4 OR by clearing bit[12] of register 0x0000. Then, clear both bit[13] and bit[6] of register 0x0000 in order to configure 10M as the speed.
    2. As for the error, can you try forcing the DP83867 to be a slave device and see if the error goes away? This can be done by setting bit[12] of register 0x0009 to 1, then clearing bit[11] of register 0x0009. You can also read bit[14] of register 0x000A to check if the configuration resolved to master or slave.

    Regards,

    Adrian Kam

  • Hi Adrian,

    Thanks for the response! Apologies that I may have caused some confusion on the first question. I've provided some more background below.

    They are using SGMII mode, which is working fine. The Ethernet interface is working correctly in the 100/1000 mode but for 10M it does not work. They have done BIT(7) clear in reg 0x016F and SGMII auto-neg is enabled. The link comes up as 10M and the MAC is able to send packets to network but not able to receive network side response. What are the correct settings to turn-on SGMII 10M mode along with 100/1000 has to work? The DUT has to work 10/100/1000 without any special handling with or without auto-neg.

    Thanks,

    Jacob

  • Hi Jacob,

    According to the datasheet, bit[7] of register 0x016F should not be changed; it should be the default value of 1. Since you mentioned clearing that bit, can you try setting that bit back to the default value and see if that fixes your issue?

    Regards,

    Adrian Kam

  • Hi Adrian,

    We have tried both ways. Default value of Bit(7) set to 1 and then to set to 0.

    Thanks,

    Arvind Sharma

  • Hi Arvind,

    Can you provide two sets of register values of registers 0x00 to 0x1F, 0x6E, and 0x6F?

    1. One set of register values when the Ethernet interface is working correctly at 100/1000.
    2. One set of register values when the Ethernet interface is not working correctly at 10M.

    Regards,

    Adrian Kam

  • Ethernet interface working correctly at 1000M

    [ 1.368217] REG 0 read value = 1140
    [ 1.370967] REG 1 read value = 7949
    [ 1.374503] REG 2 read value = 2000
    [ 1.378054] REG 3 read value = a231
    [ 1.381611] REG 4 read value = 1e1
    [ 1.385056] REG 5 read value = 0
    [ 1.388346] REG 6 read value = 64
    [ 1.391726] REG 7 read value = 2001
    [ 1.395263] REG 8 read value = 0
    [ 1.398553] REG 9 read value = 300
    [ 1.402020] REG a read value = 0
    [ 1.405298] REG b read value = 0
    [ 1.408588] REG c read value = 0
    [ 1.411881] REG d read value = 401f
    [ 1.415418] REG e read value = 1170
    [ 1.418977] REG f read value = 3000
    [ 1.422511] REG 10 read value = f840
    [ 1.426144] REG 11 read value = 2
    [ 1.429534] REG 12 read value = 0
    [ 1.432891] REG 13 read value = 0
    [ 1.436264] REG 14 read value = 29c7
    [ 1.439910] REG 15 read value = 0
    [ 1.443271] REG 16 read value = 0
    [ 1.446644] REG 17 read value = 40
    [ 1.450124] REG 18 read value = 6150
    [ 1.453738] REG 19 read value = 4444
    [ 1.457371] REG 1a read value = 2
    [ 1.460754] REG 1b read value = 0
    [ 1.464118] REG 1c read value = 0
    [ 1.467491] REG 1d read value = 0
    [ 1.470874] REG 1e read value = 2
    [ 1.474238] REG 1f read value = 0
    [ 1.477708] REG 0x006E read value = 800
    [ 1.481615] REG 0x006F read value = 100
    [ 1.485493] REG 0x016f value read = 95

  • Ethernet interface working correctly at 100M has same register values values as 1000M.

    [ 1.368217] REG 0 read value = 1140
    [ 1.370967] REG 1 read value = 7949
    [ 1.374503] REG 2 read value = 2000
    [ 1.378054] REG 3 read value = a231
    [ 1.381611] REG 4 read value = 1e1
    [ 1.385056] REG 5 read value = 0
    [ 1.388346] REG 6 read value = 64
    [ 1.391726] REG 7 read value = 2001
    [ 1.395263] REG 8 read value = 0
    [ 1.398553] REG 9 read value = 300
    [ 1.402020] REG a read value = 0
    [ 1.405298] REG b read value = 0
    [ 1.408588] REG c read value = 0
    [ 1.411881] REG d read value = 401f
    [ 1.415418] REG e read value = 1170
    [ 1.418977] REG f read value = 3000
    [ 1.422511] REG 10 read value = f840
    [ 1.426144] REG 11 read value = 2
    [ 1.429534] REG 12 read value = 0
    [ 1.432891] REG 13 read value = 0
    [ 1.436264] REG 14 read value = 29c7
    [ 1.439910] REG 15 read value = 0
    [ 1.443271] REG 16 read value = 0
    [ 1.446644] REG 17 read value = 40
    [ 1.450124] REG 18 read value = 6150
    [ 1.453738] REG 19 read value = 4444
    [ 1.457371] REG 1a read value = 2
    [ 1.460754] REG 1b read value = 0
    [ 1.464118] REG 1c read value = 0
    [ 1.467491] REG 1d read value = 0
    [ 1.470874] REG 1e read value = 2
    [ 1.474238] REG 1f read value = 0
    [ 1.477708] REG 0x006E read value = 800
    [ 1.481615] REG 0x006F read value = 100
    [ 1.485493] REG 0x016f value read = 95

  • 2. Register values when Ethernet interface NOT working correctly at 10M

    [ 1.374956] REG 0 read value = 1140
    [ 1.377707] REG 1 read value = 7949
    [ 1.381243] REG 2 read value = 2000
    [ 1.384789] REG 3 read value = a231
    [ 1.388350] REG 4 read value = 1e1
    [ 1.391796] REG 5 read value = 0
    [ 1.395083] REG 6 read value = 64
    [ 1.398466] REG 7 read value = 2001
    [ 1.402003] REG 8 read value = 0
    [ 1.405290] REG 9 read value = 300
    [ 1.408759] REG a read value = 0
    [ 1.412037] REG b read value = 0
    [ 1.415324] REG c read value = 0
    [ 1.418624] REG d read value = 401f
    [ 1.422158] REG e read value = 1170
    [ 1.425704] REG f read value = 3000
    [ 1.429260] REG 10 read value = f840
    [ 1.432884] REG 11 read value = 2
    [ 1.436257] REG 12 read value = 0
    [ 1.439644] REG 13 read value = 0
    [ 1.443004] REG 14 read value = 29c7
    [ 1.446637] REG 15 read value = 0
    [ 1.450028] REG 16 read value = 0
    [ 1.453384] REG 17 read value = 40
    [ 1.456844] REG 18 read value = 6150
    [ 1.460487] REG 19 read value = 4444
    [ 1.464110] REG 1a read value = 2
    [ 1.467494] REG 1b read value = 0
    [ 1.470857] REG 1c read value = 0
    [ 1.474231] REG 1d read value = 0
    [ 1.477615] REG 1e read value = 2
    [ 1.480977] REG 1f read value = 0
    [ 1.484448] REG 0x006E read value = 800
    [ 1.488355] REG 0x006F read value = 100
    [ 1.492232] REG 0x016f value read = 95

    I see no change in values for the above registers when using 100/1000M or 10M.

  • Hi Arvind,

    1. Can you double check that the register values you provided are correct? Looking at register 0x0001, it seems like link is down for all of them. In addition, bits[15:14] of register 0x0011 should be different for each speed. There are the same in this case because there is no link established.
    2. Can you also provide a schematic? If it cannot upload to a public forum like E2E, you can email it to me instead.

    Regards,

    Adrian Kam

  • 1. I may have read registers too early after initialization. I will try to read them at a later stage. The DUT is working ok and we can run traffic in 100/1000 case so I can certainly tell that link is up. The other reason for these bits showing different behavior could be our test setup. To test 10M we are using a NETGEAR Switch GS108T. The switch port connected to DUT Ethernet interface is fixed at 10M. The DUT interface link is UP and RUNNING. The “ethtool” command  shows 10M Half with auto-neg enabled. Since the Switch is in the fixed 10M mode and does not participate in auto-neg, the DUT comes in default 10M half-duplex mode even if we set the Switch port to fixed 10M Full. Please share your email.

  • Hi Arvind,

    1. If you click on my E2E profile, there should be an email to which you can send the schematic.
    2. To reiterate the issue, the DUT is linking up a 10M, and the MAC is able to transmit packets but not receive them. Is that correct? Can you clarify a bit more? When you state that the DUT interface link is up and running at 10M, it sounds like everything is fine.

    Regards,

    Adrian Kam

  • Yes the DUT link at 10M and is up and running, I have confirmed using Wireshark that MAC is able to send messages towards the network side. I am also running tcpdump on the MAC and no packet is received here. The DUT is continuously broadcasting DHCP Discover message and DHCP server is also reverting DHCP offer. Since SGMII RX towards MAC is not working so MAC never receives the offer and instead of sending DHCP request for the offered IP address it keeps sending DHCP Discover towards network.

    You are correct it sounds like there is no problem.  But the problem is that since no packets are received by MAC at 10M so DUT is not able to select an IP using DHCP. We thought there is a separate setting for 10M as stated in rev-B or the datasheet. Now rev-C of datasheet says PHY will auto adjust at 10M. So the question is what can cause PHY not to work on the rx side towards MAC? Since there are no loopback available at 10M how do I confirm that it is a problem on the MAC or PHY?

    I have taken the register values for 1000/100/10M again and they now showing link up.

    [    9.314756] ethernet eth0: link up (1000/Full)
    [    9.320499] REG 0 read value = 1140
    [    9.324220] REG 1 read value = 796d
    [    9.327597] REG 2 read value = 2000
    [    9.331134] REG 3 read value = a231
    [    9.334939] REG 4 read value = 1e1
    [    9.338145] REG 5 read value = c1e1
    [    9.341680] REG 6 read value = 6f
    [    9.345211] REG 7 read value = 2001
    [    9.348606] REG 8 read value = 6801
    [    9.352224] REG 9 read value = 300
    [    9.355610] REG a read value = 3800
    [    9.359180] REG b read value = 0
    [    9.362552] REG c read value = 0
    [    9.365729] REG d read value = 401f
    [    9.369284] REG e read value = 95
    [    9.372773] REG f read value = 3000
    [    9.376214] REG 10 read value = 5840
    [    9.379829] REG 11 read value = bc02
    [    9.383585] REG 12 read value = 0
    [    9.386835] REG 13 read value = 1d46
    [    9.390520] REG 14 read value = 29c7
    [    9.394273] REG 15 read value = 0
    [    9.397480] REG 16 read value = 0
    [    9.400843] REG 17 read value = 40
    [    9.404434] REG 18 read value = 6150
    [    9.407940] REG 19 read value = 4444
    [    9.411612] REG 1a read value = 2
    [    9.415036] REG 1b read value = 0
    [    9.420403] REG 1c read value = 0
    [    9.421682] REG 1d read value = 0
    [    9.425188] REG 1e read value = 2
    [    9.428454] REG 1f read value = 0
    [    9.431956] REG 0x006E read value = 800
    [    9.436032] REG 0x006F read value = 100
    [    9.439715] REG 0x016f value read = 95
    
    [    4.350456] ethernet eth0: link up (100/Half)
    [    4.356108] REG 0 read value = 1140
    [    4.359867] REG 1 read value = 796d
    [    4.363195] REG 2 read value = 2000
    [    4.366743] REG 3 read value = a231
    [    4.370483] REG 4 read value = 1e1
    [    4.373748] REG 5 read value = 81
    [    4.377123] REG 6 read value = 64
    [    4.380665] REG 7 read value = 2001
    [    4.384040] REG 8 read value = 0
    [    4.387489] REG 9 read value = 300
    [    4.390786] REG a read value = 0
    [    4.394072] REG b read value = 0
    [    4.397516] REG c read value = 0
    [    4.400647] REG d read value = 401f
    [    4.404193] REG e read value = 95
    [    4.407735] REG f read value = 3000
    [    4.411115] REG 10 read value = 5840
    [    4.414996] REG 11 read value = 4f02
    [    4.418546] REG 12 read value = 0
    [    4.421755] REG 13 read value = c42
    [    4.425299] REG 14 read value = 29c7
    [    4.429087] REG 15 read value = 0
    [    4.432306] REG 16 read value = 0
    [    4.435678] REG 17 read value = 40
    [    4.439308] REG 18 read value = 6150
    [    4.442774] REG 19 read value = 4444
    [    4.446405] REG 1a read value = 2
    [    4.449945] REG 1b read value = 0
    [    4.453154] REG 1c read value = 0
    [    4.456525] REG 1d read value = 0
    [    4.460075] REG 1e read value = 2
    [    4.463273] REG 1f read value = 0
    [    4.466744] REG 0x006E read value = 800
    [    4.470828] REG 0x006F read value = 100
    [    4.474530] REG 0x016f value read = 95
    
    [    4.190211] ethernet eth0: link up (10/Half)
    [    4.195774] REG 0 read value = 1140
    [    4.217299] REG 1 read value = 796d
    [    4.217378] REG 2 read value = 2000
    [    4.218824] REG 3 read value = a231
    [    4.222372] REG 4 read value = 1e1
    [    4.225837] REG 5 read value = 21
    [    4.229240] REG 6 read value = 64
    [    4.232583] REG 7 read value = 2001
    [    4.236221] REG 8 read value = 0
    [    4.239449] REG 9 read value = 300
    [    4.242876] REG a read value = 0
    [    4.246164] REG b read value = 0
    [    4.249479] REG c read value = 0
    [    4.252736] REG d read value = 401f
    [    4.256530] REG e read value = 95
    [    4.259694] REG f read value = 3000
    [    4.263204] REG 10 read value = 5840
    [    4.266942] REG 11 read value = c02
    [    4.270423] REG 12 read value = 0
    [    4.273755] REG 13 read value = c00
    [    4.277353] REG 14 read value = 29c7
    [    4.280936] REG 15 read value = 0
    [    4.284307] REG 16 read value = 0
    [    4.287719] REG 17 read value = 40
    [    4.291142] REG 18 read value = 6150
    [    4.294774] REG 19 read value = 4444
    [    4.298478] REG 1a read value = 2
    [    4.301782] REG 1b read value = 0
    [    4.305153] REG 1c read value = 0
    [    4.308583] REG 1d read value = 0
    [    4.311902] REG 1e read value = 2
    [    4.315274] REG 1f read value = 0
    [    4.318782] REG 0x006E read value = 800
    [    4.322638] REG 0x006F read value = 100
    [    4.326530] REG 0x016f value read = 95
    

  • Hi Arvind,

    In addition, can you try to perform an external loopback in 10M mode and see if the MAC device can read back the transmitted packets? Also, can you check if you can see signals/data on the scope on the TX/RX pins while operating in 10M mode?

    Regards,

    Adrian Kam

  • I tried external loopback and DUT interface did receive packets on the interface, confirmed using tcpdump on MAC. I then also connected the interface with an another existing product (DUT2) that had 10M half only interface and I was able to receive ARP from DUT2 on the DUT MAC and also was able to ping the DUT2 by assigning an IP address to both DUT and DUT2. So we can say that there are no hardware issue at the moment. We have concluded that the problem occurs only when fixing the speed to 10M either at the DUT or the switch. But 100M works fine when we fix speed on the switch or the DUT. As mentioned earlier we are using Netgear Prosafe  GS108T switch for testing 10M at fixed rates and mostly DUT has autoneg ON. Any ideas?

  • Hi Arvind,

    If the external loopback test worked at 10M, that means the PHY has no trouble receiving packets from the link partner and sending it to the MAC. The fact that you were able to properly connect and communicate with another DUT seems to further indicate that the PHY is working properly. If I am misinterpreting something, let me know. Based on the results, it would seem like the link partner (the switch) is not properly transmitting the packets. Can you check if the link partner is transmitting the right packets or any packets in general?

    Regards,

    Adrian Kam

  • The problem only seems specific to GS108T. The following scenarios has been noted as non-operational:

    1. When we use switch at the 10M fixed speed and the DUT is auto-neg ON. The DUT negotiates to 10M half, link is UP and Running but DHCP fails.

    2. When the DUT is fixed at 10M half and the switch is in auto-neg ON, doesn't work. The link is UP and Running but DHCP fails.

    3. When the DUT is fixed at 10M half and the switch port is set to the fixed 10M half, doesn't work. The link is UP and Running but DHCP fails.

    FYI, I tried Test 2 above with Netgear FS105 and it did work! The difference is it is an 10/100 Fast Ethernet Switch. I hope this gives you some clue?

  • Hi Arvind,

    If you had no issues with the external loopback experiment, that indicates that there is nothing wrong with the PHY. The fact that you encountered no issues with another DUT or with another link partner like the FS105 shows that there is nothing wrong with the PHY as well. It seems as though the issues are with the GS108T. 

    Regards,

    Adrian Kam