realtek: rtl83xx-phy: fix RTL8214FC media change
authorJan Hoffmann <jan@3e8.eu>
Sat, 23 Jul 2022 20:53:13 +0000 (22:53 +0200)
committerDaniel Golle <daniel@makrotopia.org>
Thu, 28 Jul 2022 12:07:10 +0000 (14:07 +0200)
Toggle power on the individual PHY instead of the package. Otherwise
a media change always toggles power on the first port, and not the one
that is being configured.

Signed-off-by: Jan Hoffmann <jan@3e8.eu>
target/linux/realtek/files-5.10/drivers/net/phy/rtl83xx-phy.c

index f0c30b36555e7f7252f9ff750ed4309fa9cd92b3..252389489106c70d046269d9bdcf48f16808662e 100644 (file)
@@ -949,19 +949,20 @@ static void rtl8380_rtl8214fc_media_set(struct phy_device *phydev, bool set_fibr
        pr_info("Current media %x\n", media);
        if (media & 0x2) {
                pr_info("Powering off COPPER\n");
-               phy_package_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_COPPER);
+               phy_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_COPPER);
                /* Ensure power is off */
-               power = phy_package_read_paged(phydev, RTL821X_PAGE_POWER, 0x10);
+               power = phy_read_paged(phydev, RTL821X_PAGE_POWER, 0x10);
                if (!(power & (1 << 11)))
-                       phy_package_write_paged(phydev, RTL821X_PAGE_POWER, 0x10, power | (1 << 11));
+                       phy_write_paged(phydev, RTL821X_PAGE_POWER, 0x10, power | (1 << 11));
        } else {
-               pr_info("Powering off FIBRE");
-               phy_package_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_FIBRE);
+               pr_info("Powering off FIBRE\n");
+               phy_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_FIBRE);
                /* Ensure power is off */
-               power = phy_package_read_paged(phydev, RTL821X_PAGE_POWER, 0x10);
+               power = phy_read_paged(phydev, RTL821X_PAGE_POWER, 0x10);
                if (!(power & (1 << 11)))
-                       phy_package_write_paged(phydev, RTL821X_PAGE_POWER, 0x10, power | (1 << 11));
+                       phy_write_paged(phydev, RTL821X_PAGE_POWER, 0x10, power | (1 << 11));
        }
+       phy_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_AUTO);
 
        if (set_fibre) {
                val |= 1 << 10;
@@ -975,22 +976,21 @@ static void rtl8380_rtl8214fc_media_set(struct phy_device *phydev, bool set_fibr
        phy_package_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_AUTO);
 
        if (set_fibre) {
-               pr_info("Powering on FIBRE");
-               phy_package_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_FIBRE);
+               pr_info("Powering on FIBRE\n");
+               phy_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_FIBRE);
                /* Ensure power is off */
-               power = phy_package_read_paged(phydev, RTL821X_PAGE_POWER, 0x10);
+               power = phy_read_paged(phydev, RTL821X_PAGE_POWER, 0x10);
                if (power & (1 << 11))
-                       phy_package_write_paged(phydev, RTL821X_PAGE_POWER, 0x10, power & ~(1 << 11));
+                       phy_write_paged(phydev, RTL821X_PAGE_POWER, 0x10, power & ~(1 << 11));
        } else {
                pr_info("Powering on COPPER\n");
-               phy_package_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_COPPER);
+               phy_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_COPPER);
                /* Ensure power is off */
-               power = phy_package_read_paged(phydev, RTL821X_PAGE_POWER, 0x10);
+               power = phy_read_paged(phydev, RTL821X_PAGE_POWER, 0x10);
                if (power & (1 << 11))
-                       phy_package_write_paged(phydev, RTL821X_PAGE_POWER, 0x10, power & ~(1 << 11));
+                       phy_write_paged(phydev, RTL821X_PAGE_POWER, 0x10, power & ~(1 << 11));
        }
-
-       phy_package_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_AUTO);
+       phy_write_paged(phydev, RTL83XX_PAGE_RAW, RTL821XINT_MEDIA_PAGE_SELECT, RTL821X_MEDIA_PAGE_AUTO);
 }
 
 static bool rtl8380_rtl8214fc_media_is_fibre(struct phy_device *phydev)