diff -Naur a/drivers/net/phy/mtk/mt753x/mt753x_common.c b/drivers/net/phy/mtk/mt753x/mt753x_common.c
--- a/drivers/net/phy/mtk/mt753x/mt753x_common.c	2022-11-25 14:12:06.308223474 +0800
+++ b/drivers/net/phy/mtk/mt753x/mt753x_common.c	2022-11-25 14:21:52.038450276 +0800
@@ -49,6 +49,9 @@
 	case MAC_SPD_2500:
 		speed = "2.5Gbps";
 		break;
+	default:
+		dev_info(gsw->dev, "Invalid speed\n");
+		return;
 	}
 
 	if (pmsr & MAC_LNK_STS) {
diff -Naur a/drivers/net/phy/mtk/mt753x/mt753x_phy.c b/drivers/net/phy/mtk/mt753x/mt753x_phy.c
--- a/drivers/net/phy/mtk/mt753x/mt753x_phy.c	2022-11-25 14:12:34.160149995 +0800
+++ b/drivers/net/phy/mtk/mt753x/mt753x_phy.c	2022-11-29 14:12:28.261884707 +0800
@@ -141,7 +141,7 @@
 	u16 dev1e_17a_tmp, dev1e_e0_tmp;
 
 	/* *** Iext/Rext Cal start ************ */
-	all_ana_cal_status = ANACAL_INIT;
+	//all_ana_cal_status = ANACAL_INIT;
 	/* analog calibration enable, Rext calibration enable */
 	/* 1e_db[12]:rg_cal_ckinv, [8]:rg_ana_calen, [4]:rg_rext_calen, [0]:rg_zcalen_a */
 	/* 1e_dc[0]:rg_txvos_calen */
@@ -185,7 +185,7 @@
 			all_ana_cal_status = ANACAL_FINISH;
 			//printk("  GE Rext AnaCal Done! (%d)(0x%x)  \r\n", cnt, rg_zcal_ctrl);
 		} else {
-			dev1e_17a_tmp = tc_phy_read_dev_reg(gsw, PHY0, 0x1e, 0x017a);
+			//dev1e_17a_tmp = tc_phy_read_dev_reg(gsw, PHY0, 0x1e, 0x017a);
 			dev1e_e0_tmp =	tc_phy_read_dev_reg(gsw, PHY0, 0x1e, 0xe0);
 			if ((rg_zcal_ctrl == 0x3F) || (rg_zcal_ctrl == 0x00)) {
 				all_ana_cal_status = ANACAL_SATURATION;  /* need to FT(IC fail?) */
@@ -580,33 +580,35 @@
 				} else if (phyaddr == 1) {
 					if (calibration_pair == ANACAL_PAIR_A)
 						tx_amp_temp = tx_amp_temp - 1;
-					else if(calibration_pair == ANACAL_PAIR_B)
-						tx_amp_temp = tx_amp_temp ;
+					//else if(calibration_pair == ANACAL_PAIR_B)
+					//	tx_amp_temp = tx_amp_temp;
 					else if(calibration_pair == ANACAL_PAIR_C)
 						tx_amp_temp = tx_amp_temp - 1;
 					else if(calibration_pair == ANACAL_PAIR_D)
 						tx_amp_temp = tx_amp_temp - 1;
 				} else if (phyaddr == 2) {
-					if (calibration_pair == ANACAL_PAIR_A)
-						tx_amp_temp = tx_amp_temp;
-					else if(calibration_pair == ANACAL_PAIR_B)
+					//if (calibration_pair == ANACAL_PAIR_A)
+					//	tx_amp_temp = tx_amp_temp;
+					//else if(calibration_pair == ANACAL_PAIR_B)
+					if(calibration_pair == ANACAL_PAIR_B)
 						tx_amp_temp = tx_amp_temp - 1;
-					else if(calibration_pair == ANACAL_PAIR_C)
-						tx_amp_temp = tx_amp_temp;
+					//else if(calibration_pair == ANACAL_PAIR_C)
+					//	tx_amp_temp = tx_amp_temp;
 					else if(calibration_pair == ANACAL_PAIR_D)
 						tx_amp_temp = tx_amp_temp - 1;
-				} else if (phyaddr == 3) {
-					tx_amp_temp = tx_amp_temp;
+				//} else if (phyaddr == 3) {
+				//	tx_amp_temp = tx_amp_temp;
 				} else if (phyaddr == 4) {
-					if (calibration_pair == ANACAL_PAIR_A)
-						tx_amp_temp = tx_amp_temp;
-					else if(calibration_pair == ANACAL_PAIR_B)
+					//if (calibration_pair == ANACAL_PAIR_A)
+					//	tx_amp_temp = tx_amp_temp;
+					//else if(calibration_pair == ANACAL_PAIR_B)
+					if(calibration_pair == ANACAL_PAIR_B)
 						tx_amp_temp = tx_amp_temp - 1;
-					else if(calibration_pair == ANACAL_PAIR_C)
-						tx_amp_temp = tx_amp_temp;
-					else if(calibration_pair == ANACAL_PAIR_D)
-						tx_amp_temp = tx_amp_temp;
-				}								
+					//else if(calibration_pair == ANACAL_PAIR_C)
+					//	tx_amp_temp = tx_amp_temp;
+					//else if(calibration_pair == ANACAL_PAIR_D)
+					//	tx_amp_temp = tx_amp_temp;
+				}
 				reg_temp = tc_phy_read_dev_reg(gsw,  phyaddr, 0x1e, tx_amp_reg)&(~0xff00);
 				tc_phy_write_dev_reg(gsw, phyaddr, 0x1e, tx_amp_reg_100,(tx_amp_temp|((tx_amp_temp)<<tx_amp_reg_shift)));
 				tc_phy_write_dev_reg(gsw, phyaddr, 0x1e, tx_amp_reg, (tx_amp_temp|((tx_amp_temp)<<tx_amp_reg_shift)));
@@ -704,7 +706,7 @@
                                        reg_backup = 0x0000;
                                        reg_backup |= ((reg_tmp << 10) | (reg_tmp << 0));
 					tc_phy_write_dev_reg(gsw, phyaddr, 0x1e, 0x12, reg_backup);
-					reg_backup = tc_phy_read_dev_reg(gsw,  phyaddr, 0x1e, 0x12);
+					//reg_backup = tc_phy_read_dev_reg(gsw,  phyaddr, 0x1e, 0x12);
 					//printk("PORT[%d] 1e.012 = %x (OFFSET_1000M_PAIR_A)\n", phyaddr, reg_backup);
 					reg_backup = tc_phy_read_dev_reg(gsw,  phyaddr, 0x1e, 0x16);
 					reg_tmp = ((reg_backup & 0x3f) >> 0);
@@ -712,7 +714,7 @@
 					reg_backup = (reg_backup & (~0x3f));
 					reg_backup |= (reg_tmp << 0);
 					tc_phy_write_dev_reg(gsw, phyaddr, 0x1e, 0x16, reg_backup);
-					reg_backup = tc_phy_read_dev_reg(gsw,  phyaddr, 0x1e, 0x16);
+					//reg_backup = tc_phy_read_dev_reg(gsw,  phyaddr, 0x1e, 0x16);
 					//printk("PORT[%d] 1e.016 = %x (OFFSET_TESTMODE_1000M_PAIR_A)\n", phyaddr, reg_backup);
 				}
 				else if(calibration_pair == ANACAL_PAIR_B){
@@ -722,7 +724,7 @@
                                        reg_backup = 0x0000;
                                        reg_backup |= ((reg_tmp << 8) | (reg_tmp << 0));
 					tc_phy_write_dev_reg(gsw, phyaddr, 0x1e, 0x17, reg_backup);
-					reg_backup = tc_phy_read_dev_reg(gsw,  phyaddr, 0x1e, 0x17);
+					//reg_backup = tc_phy_read_dev_reg(gsw,  phyaddr, 0x1e, 0x17);
 					//printk("PORT[%d] 1e.017 = %x (OFFSET_1000M_PAIR_B)\n", phyaddr, reg_backup);
 					reg_backup = tc_phy_read_dev_reg(gsw,  phyaddr, 0x1e, 0x18);
 					reg_tmp = ((reg_backup & 0x3f) >> 0);
@@ -730,7 +732,7 @@
 					reg_backup = (reg_backup & (~0x3f));
 					reg_backup |= (reg_tmp << 0);
 					tc_phy_write_dev_reg(gsw, phyaddr, 0x1e, 0x18, reg_backup);
-					reg_backup = tc_phy_read_dev_reg(gsw,  phyaddr, 0x1e, 0x18);
+					//reg_backup = tc_phy_read_dev_reg(gsw,  phyaddr, 0x1e, 0x18);
 					//printk("PORT[%d] 1e.018 = %x (OFFSET_TESTMODE_1000M_PAIR_B)\n", phyaddr, reg_backup);
 				}
 				else if(calibration_pair == ANACAL_PAIR_C){
@@ -740,7 +742,7 @@
 					reg_backup = (reg_backup & (~0x3f00));
 					reg_backup |= (reg_tmp << 8);
 					tc_phy_write_dev_reg(gsw, phyaddr, 0x1e, 0x19, reg_backup);
-					reg_backup = tc_phy_read_dev_reg(gsw,  phyaddr, 0x1e, 0x19);
+					//reg_backup = tc_phy_read_dev_reg(gsw,  phyaddr, 0x1e, 0x19);
 					//printk("PORT[%d] 1e.019 = %x (OFFSET_1000M_PAIR_C)\n", phyaddr, reg_backup);
 					reg_backup = tc_phy_read_dev_reg(gsw,  phyaddr, 0x1e, 0x20);
 					reg_tmp = ((reg_backup & 0x3f) >> 0);
@@ -748,7 +750,7 @@
 					reg_backup = (reg_backup & (~0x3f));
 					reg_backup |= (reg_tmp << 0);
 					tc_phy_write_dev_reg(gsw, phyaddr, 0x1e, 0x20, reg_backup);
-					reg_backup = tc_phy_read_dev_reg(gsw,  phyaddr, 0x1e, 0x20);
+					//reg_backup = tc_phy_read_dev_reg(gsw,  phyaddr, 0x1e, 0x20);
 					//printk("PORT[%d] 1e.020 = %x (OFFSET_TESTMODE_1000M_PAIR_C)\n", phyaddr, reg_backup);
 				}
 				else if(calibration_pair == ANACAL_PAIR_D){
@@ -758,7 +760,7 @@
 					reg_backup = (reg_backup & (~0x3f00));
 					reg_backup |= (reg_tmp << 8);
 					tc_phy_write_dev_reg(gsw, phyaddr, 0x1e, 0x21, reg_backup);
-					reg_backup = tc_phy_read_dev_reg(gsw,  phyaddr, 0x1e, 0x21);
+					//reg_backup = tc_phy_read_dev_reg(gsw,  phyaddr, 0x1e, 0x21);
 					//printk("PORT[%d] 1e.021 = %x (OFFSET_1000M_PAIR_D)\n", phyaddr, reg_backup);
 					reg_backup = tc_phy_read_dev_reg(gsw,  phyaddr, 0x1e, 0x22);
 					reg_tmp = ((reg_backup & 0x3f) >> 0);
@@ -766,7 +768,7 @@
 					reg_backup = (reg_backup & (~0x3f));
 					reg_backup |= (reg_tmp << 0);
 					tc_phy_write_dev_reg(gsw, phyaddr, 0x1e, 0x22, reg_backup);
-					reg_backup = tc_phy_read_dev_reg(gsw,  phyaddr, 0x1e, 0x22);
+					//reg_backup = tc_phy_read_dev_reg(gsw,  phyaddr, 0x1e, 0x22);
 					//printk("PORT[%d] 1e.022 = %x (OFFSET_TESTMODE_1000M_PAIR_D)\n", phyaddr, reg_backup);
 				}
 
