MARVELLの88E1111後継の88E1112はレジスタ周りの仕様が88E1111とは異なっています。

88E1111では動作モードの設定はregister 27(0x1B)ですが、88E1112ではregister 16であり、ビット構成も異なります。

root@as7712:/home/admin# i2cget -y -f 22 0x56 3 w
0x970c
root@as7712:/home/admin# i2cget -y -f 22 0x56 16 w
0x6060

root@as7712:/home/admin# i2cset -y -f 22 0x56 22 0x0200 w
root@as7712:/home/admin# i2cget -y -f 22 0x56 16 w
0x8800
root@as7712:/home/admin# i2cset -y -f 22 0x56 22 0x0100 w
root@as7712:/home/admin# i2cget -y -f 22 0x56 16 w
0x0000
root@as7712:/home/admin# i2cset -y -f 22 0x56 22 0x0000 w
root@as7712:/home/admin# i2cget -y -f 22 0x56 16 w
0x6060
root@as7712:/home/admin# i2cset -y -f 22 0x56 22 0x0300 w
root@as7712:/home/admin# i2cget -y -f 22 0x56 16 w
0x1e02

register 3 Table 43: PHY Identifier 2 Page Any, Register 3

Bits Field Mode HW Rst SW Rst Description 88E1111
15:10 OUI LSb RO Always 000011 Always 000011 Organizationally Unique Identifier bits 19:24 00 0011 ^.........^ bit 19...bit24 000011
9:4 Model Number RO Always 001001 Always 001001 Model Number 001001 001100
3:0 Revision Number RO See Descr See Descr

Rev Number Contact Marvell FAEs for information on the device revision number.

 

0x970c : revision number 7

register 16_0

0x6060 (0110-0000-0110-0000)

bit 88E1112 88E1111
7 0 = Normal 10BASE-T receive threshold  
6:5 11 = Enable automatic crossover for all modes  
3 0 = Transmitter Enable 0=can power down
2    
1 0 = Polarity Reversal Enabled  
0 0 = Enable jabber function  

register 16_1

0x0000

register 16_2

0x8800 (1000-1000-0000-0000)

bit  
  00
  00
  00
9:7 001 = Copper GBIC
6:4 000
3 1 = Always power up
2 0 = Do not pass flow control bits through SGMII AutoNegotiation
1:0 00

register 16_3

0x1e02 (0000-0010-0001-1110)

bit  
15;12 0000 = Normal LOS operation
11:8 0010 = Normal INIT operation
7:4 0001 = On - Link, Blink - Activity, Off - No Link
3:0 1110 = MODE 3
 

SerDesからSGMII triple speedへの変更操作

88E1111 88E1112
0x1B, 0x9084 0x16,0x0200(page 2)
  0x10,0x0803(SGMII)
   
   

88E1112:reg 16_2, bit 9:7 110 = SGMII media interface only

Linuxのdriverでの初期化方法が異なる

phy.c

PHY ID PHY ID MASK DESC
0x0282f000 0xffffff00 ET1011C
0x000fc410 0x000ffff0 CIS8201 Gigabit Ethernet
0x01410CC0 0x0ffffff0 Marvell 88E1111 Ethernet
0x01410C90 0x0ffffff0 Marvell 88E1112 Ethernet

static int m88e1111_init(struct mii_phy *phy){ 
    pr_debug("%s: Marvell 88E1111 Ethernet\n", __func__); 
    phy_write(phy, 0x14, 0x0ce3); 
    phy_write(phy, 0x18, 0x4101); 
    phy_write(phy, 0x09, 0x0e00); 
    phy_write(phy, 0x04, 0x01e1); 
    phy_write(phy, 0x00, 0x9140); 
    phy_write(phy, 0x00, 0x1140); 

    return 0;
}

static int m88e1112_init(struct mii_phy *phy){
/* * Marvell 88E1112 PHY needs to have the SGMII MAC * interace (page 2) properly configured to * communicate with the 460EX/GT GPCS interface. */

    u16 reg_short;

    pr_debug("%s: Marvell 88E1112 Ethernet\n", __func__); /* Set access to Page 2 */ phy_write(phy, 0x16, 0x0002);
    phy_write(phy, 0x00, 0x0040); /* 1Gbps */

    reg_short = (u16)(phy_read(phy, 0x1a));
    reg_short |= 0x8000; /* bypass Auto-Negotiation */
    phy_write(phy, 0x1a, reg_short);

    emac_mii_reset_phy(phy); /* reset MAC interface */

/* Reset access to Page 0 */
    phy_write(phy, 0x16, 0x0000);

    return 0;
}

コメント欄を読み込み中