LCOV - code coverage report
Current view: top level - drivers/net/r8169/base - rtl8168ep.c (source / functions) Hit Total Coverage
Test: Code coverage Lines: 0 151 0.0 %
Date: 2025-08-01 17:49:26 Functions: 0 4 0.0 %
Legend: Lines: hit not hit | Branches: + taken - not taken # not executed Branches: 0 12 0.0 %

           Branch data     Line data    Source code
       1                 :            : /* SPDX-License-Identifier: BSD-3-Clause
       2                 :            :  * Copyright(c) 2024 Realtek Corporation. All rights reserved
       3                 :            :  */
       4                 :            : 
       5                 :            : #include "../r8169_compat.h"
       6                 :            : #include "../r8169_hw.h"
       7                 :            : #include "../r8169_phy.h"
       8                 :            : #include "rtl8168ep.h"
       9                 :            : 
      10                 :            : /* For RTL8168EP, CFG_METHOD_23,27,28 */
      11                 :            : 
      12                 :            : static void
      13                 :          0 : hw_init_rxcfg_8168ep(struct rtl_hw *hw)
      14                 :            : {
      15                 :          0 :         RTL_W32(hw, RxConfig, Rx_Single_fetch_V2 |
      16                 :            :                 (RX_DMA_BURST_unlimited << RxCfgDMAShift) | RxEarly_off_V2);
      17                 :          0 : }
      18                 :            : 
      19                 :            : static void
      20                 :          0 : hw_ephy_config_8168ep(struct rtl_hw *hw)
      21                 :            : {
      22                 :            :         u16 ephy_data;
      23                 :            : 
      24   [ #  #  #  # ]:          0 :         switch (hw->mcfg) {
      25                 :          0 :         case CFG_METHOD_23:
      26                 :          0 :                 rtl_ephy_write(hw, 0x00, 0x10AB);
      27                 :          0 :                 rtl_ephy_write(hw, 0x06, 0xf030);
      28                 :          0 :                 rtl_ephy_write(hw, 0x08, 0x2006);
      29                 :          0 :                 rtl_ephy_write(hw, 0x0D, 0x1666);
      30                 :            : 
      31                 :          0 :                 ephy_data = rtl_ephy_read(hw, 0x0C);
      32                 :          0 :                 ephy_data &= ~(BIT_13 | BIT_12 | BIT_11 | BIT_10 | BIT_9 |
      33                 :            :                                BIT_8 | BIT_7 | BIT_6 | BIT_5 | BIT_4);
      34                 :          0 :                 rtl_ephy_write(hw, 0x0C, ephy_data);
      35                 :          0 :                 break;
      36                 :          0 :         case CFG_METHOD_27:
      37                 :          0 :                 rtl_ephy_write(hw, 0x00, 0x10A3);
      38                 :          0 :                 rtl_ephy_write(hw, 0x19, 0xFC00);
      39                 :          0 :                 rtl_ephy_write(hw, 0x1E, 0x20EA);
      40                 :          0 :                 break;
      41                 :          0 :         case CFG_METHOD_28:
      42                 :          0 :                 rtl_ephy_write(hw, 0x00, 0x10AB);
      43                 :          0 :                 rtl_ephy_write(hw, 0x19, 0xFC00);
      44                 :          0 :                 rtl_ephy_write(hw, 0x1E, 0x20EB);
      45                 :          0 :                 rtl_ephy_write(hw, 0x0D, 0x1666);
      46                 :          0 :                 rtl_clear_pcie_phy_bit(hw, 0x0B, BIT_0);
      47                 :          0 :                 rtl_set_pcie_phy_bit(hw, 0x1D, BIT_14);
      48                 :          0 :                 rtl_clear_and_set_pcie_phy_bit(hw, 0x0C, (BIT_13 | BIT_12 | BIT_11 |
      49                 :            :                                                BIT_10 | BIT_8 | BIT_7 | BIT_6 | BIT_5),
      50                 :            :                                                BIT_9 | BIT_4);
      51                 :          0 :                 break;
      52                 :            :         default:
      53                 :            :                 break;
      54                 :            :         }
      55                 :          0 : }
      56                 :            : 
      57                 :            : static void
      58                 :          0 : hw_phy_config_8168ep(struct rtl_hw *hw)
      59                 :            : {
      60         [ #  # ]:          0 :         if (hw->mcfg == CFG_METHOD_23) {
      61                 :          0 :                 rtl_mdio_write(hw, 0x1F, 0x0A44);
      62                 :          0 :                 rtl_mdio_write(hw, 0x11, rtl_mdio_read(hw, 0x11) |
      63                 :            :                                          (BIT_3 | BIT_2));
      64                 :          0 :                 rtl_mdio_write(hw, 0x1F, 0x0000);
      65                 :            : 
      66                 :          0 :                 rtl_mdio_write(hw, 0x1F, 0x0BCC);
      67                 :          0 :                 rtl_mdio_write(hw, 0x14, rtl_mdio_read(hw, 0x14) & ~BIT_8);
      68                 :          0 :                 rtl_mdio_write(hw, 0x1F, 0x0A44);
      69                 :          0 :                 rtl_mdio_write(hw, 0x11, rtl_mdio_read(hw, 0x11) | BIT_7);
      70                 :          0 :                 rtl_mdio_write(hw, 0x11, rtl_mdio_read(hw, 0x11) | BIT_6);
      71                 :          0 :                 rtl_mdio_write(hw, 0x1F, 0x0A43);
      72                 :          0 :                 rtl_mdio_write(hw, 0x13, 0x8084);
      73                 :          0 :                 rtl_mdio_write(hw, 0x14, rtl_mdio_read(hw, 0x14) &
      74                 :            :                                          ~(BIT_14 | BIT_13));
      75                 :          0 :                 rtl_mdio_write(hw, 0x10, rtl_mdio_read(hw, 0x10) | BIT_12);
      76                 :          0 :                 rtl_mdio_write(hw, 0x10, rtl_mdio_read(hw, 0x10) | BIT_1);
      77                 :          0 :                 rtl_mdio_write(hw, 0x10, rtl_mdio_read(hw, 0x10) | BIT_0);
      78                 :            : 
      79                 :          0 :                 rtl_mdio_write(hw, 0x1F, 0x0A4B);
      80                 :          0 :                 rtl_mdio_write(hw, 0x11, rtl_mdio_read(hw, 0x11) | BIT_2);
      81                 :          0 :                 rtl_mdio_write(hw, 0x1F, 0x0000);
      82                 :            : 
      83                 :          0 :                 rtl_mdio_write(hw, 0x1F, 0x0A43);
      84                 :          0 :                 rtl_mdio_write(hw, 0x13, 0x8012);
      85                 :          0 :                 rtl_mdio_write(hw, 0x14, rtl_mdio_read(hw, 0x14) | BIT_15);
      86                 :          0 :                 rtl_mdio_write(hw, 0x1F, 0x0000);
      87                 :            : 
      88                 :          0 :                 rtl_mdio_write(hw, 0x1F, 0x0C42);
      89                 :          0 :                 rtl_clear_and_set_eth_phy_bit(hw, 0x11, BIT_13, BIT_14);
      90                 :          0 :                 rtl_mdio_write(hw, 0x1F, 0x0000);
      91                 :            : 
      92         [ #  # ]:          0 :         } else if (hw->mcfg == CFG_METHOD_27 || hw->mcfg == CFG_METHOD_28) {
      93                 :          0 :                 rtl_mdio_write(hw, 0x1F, 0x0BCC);
      94                 :          0 :                 rtl_mdio_write(hw, 0x14, rtl_mdio_read(hw, 0x14) & ~BIT_8);
      95                 :          0 :                 rtl_mdio_write(hw, 0x1F, 0x0A44);
      96                 :          0 :                 rtl_mdio_write(hw, 0x11, rtl_mdio_read(hw, 0x11) | BIT_7);
      97                 :          0 :                 rtl_mdio_write(hw, 0x11, rtl_mdio_read(hw, 0x11) | BIT_6);
      98                 :          0 :                 rtl_mdio_write(hw, 0x1F, 0x0A43);
      99                 :          0 :                 rtl_mdio_write(hw, 0x13, 0x8084);
     100                 :          0 :                 rtl_mdio_write(hw, 0x14, rtl_mdio_read(hw, 0x14) & ~(BIT_14 | BIT_13));
     101                 :          0 :                 rtl_mdio_write(hw, 0x10, rtl_mdio_read(hw, 0x10) | BIT_12);
     102                 :          0 :                 rtl_mdio_write(hw, 0x10, rtl_mdio_read(hw, 0x10) | BIT_1);
     103                 :          0 :                 rtl_mdio_write(hw, 0x10, rtl_mdio_read(hw, 0x10) | BIT_0);
     104                 :            : 
     105                 :          0 :                 rtl_mdio_write(hw, 0x1F, 0x0A43);
     106                 :          0 :                 rtl_mdio_write(hw, 0x13, 0x8012);
     107                 :          0 :                 rtl_mdio_write(hw, 0x14, rtl_mdio_read(hw, 0x14) | BIT_15);
     108                 :            : 
     109                 :          0 :                 rtl_mdio_write(hw, 0x1F, 0x0C42);
     110                 :          0 :                 rtl_mdio_write(hw, 0x11, (rtl_mdio_read(hw, 0x11) & ~BIT_13) | BIT_14);
     111                 :            : 
     112                 :          0 :                 rtl_mdio_write(hw, 0x1F, 0x0A43);
     113                 :          0 :                 rtl_mdio_write(hw, 0x13, 0x80F3);
     114                 :          0 :                 rtl_mdio_write(hw, 0x14, (rtl_mdio_read(hw, 0x14) & ~0xFF00) | 0x8B00);
     115                 :          0 :                 rtl_mdio_write(hw, 0x13, 0x80F0);
     116                 :          0 :                 rtl_mdio_write(hw, 0x14, (rtl_mdio_read(hw, 0x14) & ~0xFF00) | 0x3A00);
     117                 :          0 :                 rtl_mdio_write(hw, 0x13, 0x80EF);
     118                 :          0 :                 rtl_mdio_write(hw, 0x14, (rtl_mdio_read(hw, 0x14) & ~0xFF00) | 0x0500);
     119                 :          0 :                 rtl_mdio_write(hw, 0x13, 0x80F6);
     120                 :          0 :                 rtl_mdio_write(hw, 0x14, (rtl_mdio_read(hw, 0x14) & ~0xFF00) | 0x6E00);
     121                 :          0 :                 rtl_mdio_write(hw, 0x13, 0x80EC);
     122                 :          0 :                 rtl_mdio_write(hw, 0x14, (rtl_mdio_read(hw, 0x14) & ~0xFF00) | 0x6800);
     123                 :          0 :                 rtl_mdio_write(hw, 0x13, 0x80ED);
     124                 :          0 :                 rtl_mdio_write(hw, 0x14, (rtl_mdio_read(hw, 0x14) & ~0xFF00) | 0x7C00);
     125                 :          0 :                 rtl_mdio_write(hw, 0x13, 0x80F2);
     126                 :          0 :                 rtl_mdio_write(hw, 0x14, (rtl_mdio_read(hw, 0x14) & ~0xFF00) | 0xF400);
     127                 :          0 :                 rtl_mdio_write(hw, 0x13, 0x80F4);
     128                 :          0 :                 rtl_mdio_write(hw, 0x14, (rtl_mdio_read(hw, 0x14) & ~0xFF00) | 0x8500);
     129                 :          0 :                 rtl_mdio_write(hw, 0x1F, 0x0A43);
     130                 :          0 :                 rtl_mdio_write(hw, 0x13, 0x8110);
     131                 :          0 :                 rtl_mdio_write(hw, 0x14, (rtl_mdio_read(hw, 0x14) & ~0xFF00) | 0xA800);
     132                 :          0 :                 rtl_mdio_write(hw, 0x13, 0x810F);
     133                 :          0 :                 rtl_mdio_write(hw, 0x14, (rtl_mdio_read(hw, 0x14) & ~0xFF00) | 0x1D00);
     134                 :          0 :                 rtl_mdio_write(hw, 0x13, 0x8111);
     135                 :          0 :                 rtl_mdio_write(hw, 0x14, (rtl_mdio_read(hw, 0x14) & ~0xFF00) | 0xF500);
     136                 :          0 :                 rtl_mdio_write(hw, 0x13, 0x8113);
     137                 :          0 :                 rtl_mdio_write(hw, 0x14, (rtl_mdio_read(hw, 0x14) & ~0xFF00) | 0x6100);
     138                 :          0 :                 rtl_mdio_write(hw, 0x13, 0x8115);
     139                 :          0 :                 rtl_mdio_write(hw, 0x14, (rtl_mdio_read(hw, 0x14) & ~0xFF00) | 0x9200);
     140                 :          0 :                 rtl_mdio_write(hw, 0x13, 0x810E);
     141                 :          0 :                 rtl_mdio_write(hw, 0x14, (rtl_mdio_read(hw, 0x14) & ~0xFF00) | 0x0400);
     142                 :          0 :                 rtl_mdio_write(hw, 0x13, 0x810C);
     143                 :          0 :                 rtl_mdio_write(hw, 0x14, (rtl_mdio_read(hw, 0x14) & ~0xFF00) | 0x7C00);
     144                 :          0 :                 rtl_mdio_write(hw, 0x13, 0x810B);
     145                 :          0 :                 rtl_mdio_write(hw, 0x14, (rtl_mdio_read(hw, 0x14) & ~0xFF00) | 0x5A00);
     146                 :          0 :                 rtl_mdio_write(hw, 0x1F, 0x0A43);
     147                 :          0 :                 rtl_mdio_write(hw, 0x13, 0x80D1);
     148                 :          0 :                 rtl_mdio_write(hw, 0x14, (rtl_mdio_read(hw, 0x14) & ~0xFF00) | 0xFF00);
     149                 :          0 :                 rtl_mdio_write(hw, 0x13, 0x80CD);
     150                 :          0 :                 rtl_mdio_write(hw, 0x14, (rtl_mdio_read(hw, 0x14) & ~0xFF00) | 0x9E00);
     151                 :          0 :                 rtl_mdio_write(hw, 0x13, 0x80D3);
     152                 :          0 :                 rtl_mdio_write(hw, 0x14, (rtl_mdio_read(hw, 0x14) & ~0xFF00) | 0x0E00);
     153                 :          0 :                 rtl_mdio_write(hw, 0x13, 0x80D5);
     154                 :          0 :                 rtl_mdio_write(hw, 0x14, (rtl_mdio_read(hw, 0x14) & ~0xFF00) | 0xCA00);
     155                 :          0 :                 rtl_mdio_write(hw, 0x13, 0x80D7);
     156                 :          0 :                 rtl_mdio_write(hw, 0x14, (rtl_mdio_read(hw, 0x14) & ~0xFF00) | 0x8400);
     157                 :            :         }
     158                 :          0 : }
     159                 :            : 
     160                 :            : static void
     161                 :          0 : hw_config_8168ep(struct rtl_hw *hw)
     162                 :            : {
     163                 :            :         u16 mac_ocp_data;
     164                 :            :         u32 csi_tmp;
     165                 :            : 
     166                 :          0 :         rtl_eri_write(hw, 0xC8, 4, 0x00080002, ERIAR_ExGMAC);
     167                 :          0 :         rtl_eri_write(hw, 0xCC, 1, 0x2F, ERIAR_ExGMAC);
     168                 :          0 :         rtl_eri_write(hw, 0xD0, 1, 0x5F, ERIAR_ExGMAC);
     169                 :          0 :         rtl_eri_write(hw, 0xE8, 4, 0x00100006, ERIAR_ExGMAC);
     170                 :            : 
     171                 :            :         /* Adjust the trx fifo */
     172                 :          0 :         rtl_eri_write(hw, 0xCA, 2, 0x0370, ERIAR_ExGMAC);
     173                 :          0 :         rtl_eri_write(hw, 0xEA, 1, 0x10, ERIAR_ExGMAC);
     174                 :            : 
     175                 :            :         /* Disable share fifo */
     176                 :          0 :         RTL_W32(hw, TxConfig, RTL_R32(hw, TxConfig) & ~BIT_7);
     177                 :            : 
     178                 :          0 :         csi_tmp = rtl_eri_read(hw, 0xDC, 1, ERIAR_ExGMAC);
     179                 :          0 :         csi_tmp &= ~BIT_0;
     180                 :          0 :         rtl_eri_write(hw, 0xDC, 1, csi_tmp, ERIAR_ExGMAC);
     181                 :          0 :         csi_tmp |= BIT_0;
     182                 :          0 :         rtl_eri_write(hw, 0xDC, 1, csi_tmp, ERIAR_ExGMAC);
     183                 :            : 
     184                 :          0 :         RTL_W8(hw, Config3, RTL_R8(hw, Config3) & ~Beacon_en);
     185                 :            : 
     186                 :            :         /* EEE led enable */
     187                 :          0 :         RTL_W8(hw, 0x1B, RTL_R8(hw, 0x1B) & ~0x07);
     188                 :            : 
     189         [ #  # ]:          0 :         if (hw->mcfg == CFG_METHOD_27 || hw->mcfg == CFG_METHOD_28) {
     190                 :          0 :                 rtl_oob_mutex_lock(hw);
     191                 :          0 :                 rtl_eri_write(hw, 0x5F0, 2, 0x4F87, ERIAR_ExGMAC);
     192                 :          0 :                 rtl_oob_mutex_unlock(hw);
     193                 :            :         }
     194                 :            : 
     195                 :          0 :         rtl_mac_ocp_write(hw, 0xC140, 0xFFFF);
     196                 :          0 :         rtl_mac_ocp_write(hw, 0xC142, 0xFFFF);
     197                 :            : 
     198         [ #  # ]:          0 :         if (hw->mcfg == CFG_METHOD_28) {
     199                 :          0 :                 mac_ocp_data = rtl_mac_ocp_read(hw, 0xD3E2);
     200                 :          0 :                 mac_ocp_data &= 0xF000;
     201                 :          0 :                 mac_ocp_data |= 0xAFD;
     202                 :          0 :                 rtl_mac_ocp_write(hw, 0xD3E2, mac_ocp_data);
     203                 :            : 
     204                 :          0 :                 mac_ocp_data = rtl_mac_ocp_read(hw, 0xD3E4);
     205                 :          0 :                 mac_ocp_data &= 0xFF00;
     206                 :          0 :                 rtl_mac_ocp_write(hw, 0xD3E4, mac_ocp_data);
     207                 :            : 
     208                 :          0 :                 mac_ocp_data = rtl_mac_ocp_read(hw, 0xE860);
     209                 :          0 :                 mac_ocp_data |= BIT_7;
     210                 :          0 :                 rtl_mac_ocp_write(hw, 0xE860, mac_ocp_data);
     211                 :            :         }
     212                 :          0 : }
     213                 :            : 
     214                 :            : const struct rtl_hw_ops rtl8168ep_ops = {
     215                 :            :         .hw_config         = hw_config_8168ep,
     216                 :            :         .hw_init_rxcfg     = hw_init_rxcfg_8168ep,
     217                 :            :         .hw_ephy_config    = hw_ephy_config_8168ep,
     218                 :            :         .hw_phy_config     = hw_phy_config_8168ep,
     219                 :            :         .hw_mac_mcu_config = hw_mac_mcu_config_8168ep,
     220                 :            :         .hw_phy_mcu_config = hw_phy_mcu_config_8168ep,
     221                 :            : };

Generated by: LCOV version 1.14