199
199
#define OCP_EEE_AR 0xa41a
200
200
#define OCP_EEE_DATA 0xa41c
201
201
#define OCP_PHY_STATUS 0xa420
202
+ #define OCP_INTR_EN 0xa424
202
203
#define OCP_NCTL_CFG 0xa42c
203
204
#define OCP_POWER_CFG 0xa430
204
205
#define OCP_EEE_CFG 0xa432
@@ -620,6 +621,9 @@ enum spd_duplex {
620
621
#define PHY_STAT_LAN_ON 3
621
622
#define PHY_STAT_PWRDN 5
622
623
624
+ /* OCP_INTR_EN */
625
+ #define INTR_SPEED_FORCE BIT(3)
626
+
623
627
/* OCP_NCTL_CFG */
624
628
#define PGA_RETURN_EN BIT(1)
625
629
@@ -3023,12 +3027,16 @@ static int rtl_enable(struct r8152 *tp)
3023
3027
ocp_write_byte (tp , MCU_TYPE_PLA , PLA_CR , ocp_data );
3024
3028
3025
3029
switch (tp -> version ) {
3026
- case RTL_VER_08 :
3027
- case RTL_VER_09 :
3028
- case RTL_VER_14 :
3029
- r8153b_rx_agg_chg_indicate (tp );
3030
+ case RTL_VER_01 :
3031
+ case RTL_VER_02 :
3032
+ case RTL_VER_03 :
3033
+ case RTL_VER_04 :
3034
+ case RTL_VER_05 :
3035
+ case RTL_VER_06 :
3036
+ case RTL_VER_07 :
3030
3037
break ;
3031
3038
default :
3039
+ r8153b_rx_agg_chg_indicate (tp );
3032
3040
break ;
3033
3041
}
3034
3042
@@ -3082,7 +3090,6 @@ static void r8153_set_rx_early_timeout(struct r8152 *tp)
3082
3090
640 / 8 );
3083
3091
ocp_write_word (tp , MCU_TYPE_USB , USB_RX_EXTRA_AGGR_TMR ,
3084
3092
ocp_data );
3085
- r8153b_rx_agg_chg_indicate (tp );
3086
3093
break ;
3087
3094
3088
3095
default :
@@ -3116,7 +3123,6 @@ static void r8153_set_rx_early_size(struct r8152 *tp)
3116
3123
case RTL_VER_15 :
3117
3124
ocp_write_word (tp , MCU_TYPE_USB , USB_RX_EARLY_SIZE ,
3118
3125
ocp_data / 8 );
3119
- r8153b_rx_agg_chg_indicate (tp );
3120
3126
break ;
3121
3127
default :
3122
3128
WARN_ON_ONCE (1 );
@@ -5986,6 +5992,25 @@ static void rtl8153_disable(struct r8152 *tp)
5986
5992
r8153_aldps_en (tp , true);
5987
5993
}
5988
5994
5995
+ static u32 fc_pause_on_auto (struct r8152 * tp )
5996
+ {
5997
+ return (ALIGN (mtu_to_size (tp -> netdev -> mtu ), 1024 ) + 6 * 1024 );
5998
+ }
5999
+
6000
+ static u32 fc_pause_off_auto (struct r8152 * tp )
6001
+ {
6002
+ return (ALIGN (mtu_to_size (tp -> netdev -> mtu ), 1024 ) + 14 * 1024 );
6003
+ }
6004
+
6005
+ static void r8156_fc_parameter (struct r8152 * tp )
6006
+ {
6007
+ u32 pause_on = tp -> fc_pause_on ? tp -> fc_pause_on : fc_pause_on_auto (tp );
6008
+ u32 pause_off = tp -> fc_pause_off ? tp -> fc_pause_off : fc_pause_off_auto (tp );
6009
+
6010
+ ocp_write_word (tp , MCU_TYPE_PLA , PLA_RX_FIFO_FULL , pause_on / 16 );
6011
+ ocp_write_word (tp , MCU_TYPE_PLA , PLA_RX_FIFO_EMPTY , pause_off / 16 );
6012
+ }
6013
+
5989
6014
static int rtl8156_enable (struct r8152 * tp )
5990
6015
{
5991
6016
u32 ocp_data ;
@@ -5994,6 +6019,7 @@ static int rtl8156_enable(struct r8152 *tp)
5994
6019
if (test_bit (RTL8152_UNPLUG , & tp -> flags ))
5995
6020
return - ENODEV ;
5996
6021
6022
+ r8156_fc_parameter (tp );
5997
6023
set_tx_qlen (tp );
5998
6024
rtl_set_eee_plus (tp );
5999
6025
r8153_set_rx_early_timeout (tp );
@@ -6025,9 +6051,24 @@ static int rtl8156_enable(struct r8152 *tp)
6025
6051
ocp_write_word (tp , MCU_TYPE_USB , USB_L1_CTRL , ocp_data );
6026
6052
}
6027
6053
6054
+ ocp_data = ocp_read_word (tp , MCU_TYPE_USB , USB_FW_TASK );
6055
+ ocp_data &= ~FC_PATCH_TASK ;
6056
+ ocp_write_word (tp , MCU_TYPE_USB , USB_FW_TASK , ocp_data );
6057
+ usleep_range (1000 , 2000 );
6058
+ ocp_data |= FC_PATCH_TASK ;
6059
+ ocp_write_word (tp , MCU_TYPE_USB , USB_FW_TASK , ocp_data );
6060
+
6028
6061
return rtl_enable (tp );
6029
6062
}
6030
6063
6064
+ static void rtl8156_disable (struct r8152 * tp )
6065
+ {
6066
+ ocp_write_word (tp , MCU_TYPE_PLA , PLA_RX_FIFO_FULL , 0 );
6067
+ ocp_write_word (tp , MCU_TYPE_PLA , PLA_RX_FIFO_EMPTY , 0 );
6068
+
6069
+ rtl8153_disable (tp );
6070
+ }
6071
+
6031
6072
static int rtl8156b_enable (struct r8152 * tp )
6032
6073
{
6033
6074
u32 ocp_data ;
@@ -6429,25 +6470,6 @@ static void rtl8153c_up(struct r8152 *tp)
6429
6470
r8153b_u1u2en (tp , true);
6430
6471
}
6431
6472
6432
- static inline u32 fc_pause_on_auto (struct r8152 * tp )
6433
- {
6434
- return (ALIGN (mtu_to_size (tp -> netdev -> mtu ), 1024 ) + 6 * 1024 );
6435
- }
6436
-
6437
- static inline u32 fc_pause_off_auto (struct r8152 * tp )
6438
- {
6439
- return (ALIGN (mtu_to_size (tp -> netdev -> mtu ), 1024 ) + 14 * 1024 );
6440
- }
6441
-
6442
- static void r8156_fc_parameter (struct r8152 * tp )
6443
- {
6444
- u32 pause_on = tp -> fc_pause_on ? tp -> fc_pause_on : fc_pause_on_auto (tp );
6445
- u32 pause_off = tp -> fc_pause_off ? tp -> fc_pause_off : fc_pause_off_auto (tp );
6446
-
6447
- ocp_write_word (tp , MCU_TYPE_PLA , PLA_RX_FIFO_FULL , pause_on / 16 );
6448
- ocp_write_word (tp , MCU_TYPE_PLA , PLA_RX_FIFO_EMPTY , pause_off / 16 );
6449
- }
6450
-
6451
6473
static void rtl8156_change_mtu (struct r8152 * tp )
6452
6474
{
6453
6475
u32 rx_max_size = mtu_to_size (tp -> netdev -> mtu );
@@ -7538,6 +7560,11 @@ static void r8156_hw_phy_cfg(struct r8152 *tp)
7538
7560
((swap_a & 0x1f ) << 8 ) |
7539
7561
((swap_a >> 8 ) & 0x1f ));
7540
7562
}
7563
+
7564
+ /* Notify the MAC when the speed is changed to force mode. */
7565
+ data = ocp_reg_read (tp , OCP_INTR_EN );
7566
+ data |= INTR_SPEED_FORCE ;
7567
+ ocp_reg_write (tp , OCP_INTR_EN , data );
7541
7568
break ;
7542
7569
default :
7543
7570
break ;
@@ -7933,6 +7960,11 @@ static void r8156b_hw_phy_cfg(struct r8152 *tp)
7933
7960
break ;
7934
7961
}
7935
7962
7963
+ /* Notify the MAC when the speed is changed to force mode. */
7964
+ data = ocp_reg_read (tp , OCP_INTR_EN );
7965
+ data |= INTR_SPEED_FORCE ;
7966
+ ocp_reg_write (tp , OCP_INTR_EN , data );
7967
+
7936
7968
if (rtl_phy_patch_request (tp , true, true))
7937
7969
return ;
7938
7970
@@ -9340,7 +9372,7 @@ static int rtl_ops_init(struct r8152 *tp)
9340
9372
case RTL_VER_10 :
9341
9373
ops -> init = r8156_init ;
9342
9374
ops -> enable = rtl8156_enable ;
9343
- ops -> disable = rtl8153_disable ;
9375
+ ops -> disable = rtl8156_disable ;
9344
9376
ops -> up = rtl8156_up ;
9345
9377
ops -> down = rtl8156_down ;
9346
9378
ops -> unload = rtl8153_unload ;
0 commit comments