diff --git a/target/linux/ath79/patches-6.12/730-ar8216-make-reg-access-atomic.patch b/target/linux/ath79/patches-6.12/730-ar8216-make-reg-access-atomic.patch index 16d9005699..1bbe3a0a57 100644 --- a/target/linux/ath79/patches-6.12/730-ar8216-make-reg-access-atomic.patch +++ b/target/linux/ath79/patches-6.12/730-ar8216-make-reg-access-atomic.patch @@ -14,7 +14,7 @@ with interrupts used. --- --- a/drivers/net/phy/ar8216.c +++ b/drivers/net/phy/ar8216.c -@@ -251,6 +251,7 @@ ar8xxx_mii_write32(struct ar8xxx_priv *p +@@ -250,6 +250,7 @@ ar8xxx_mii_write32(struct ar8xxx_priv *p u32 ar8xxx_read(struct ar8xxx_priv *priv, int reg) { @@ -22,7 +22,7 @@ with interrupts used. struct mii_bus *bus = priv->mii_bus; u16 r1, r2, page; u32 val; -@@ -258,11 +259,13 @@ ar8xxx_read(struct ar8xxx_priv *priv, in +@@ -257,11 +258,13 @@ ar8xxx_read(struct ar8xxx_priv *priv, in split_addr((u32) reg, &r1, &r2, &page); mutex_lock(&bus->mdio_lock); @@ -36,7 +36,7 @@ with interrupts used. mutex_unlock(&bus->mdio_lock); return val; -@@ -271,17 +274,20 @@ ar8xxx_read(struct ar8xxx_priv *priv, in +@@ -270,17 +273,20 @@ ar8xxx_read(struct ar8xxx_priv *priv, in void ar8xxx_write(struct ar8xxx_priv *priv, int reg, u32 val) { diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.c b/target/linux/generic/files/drivers/net/phy/ar8216.c index 84b923ffc1..33b17cea4f 100644 --- a/target/linux/generic/files/drivers/net/phy/ar8216.c +++ b/target/linux/generic/files/drivers/net/phy/ar8216.c @@ -33,7 +33,6 @@ #include #include #include -#include #include #include "ar8216.h" diff --git a/target/linux/generic/files/drivers/net/phy/ar8327.c b/target/linux/generic/files/drivers/net/phy/ar8327.c index d6749ad70e..b22e958f62 100644 --- a/target/linux/generic/files/drivers/net/phy/ar8327.c +++ b/target/linux/generic/files/drivers/net/phy/ar8327.c @@ -21,7 +21,6 @@ #include #include #include -#include #include #include #include @@ -531,89 +530,6 @@ ar8327_leds_cleanup(struct ar8xxx_priv *priv) kfree(data->leds); } -static int -ar8327_hw_config_pdata(struct ar8xxx_priv *priv, - struct ar8327_platform_data *pdata) -{ - struct ar8327_led_cfg *led_cfg; - struct ar8327_data *data = priv->chip_data; - u32 pos, new_pos; - u32 t; - - if (!pdata) - return -EINVAL; - - priv->get_port_link = pdata->get_port_link; - - data->port0_status = ar8327_get_port_init_status(&pdata->port0_cfg); - data->port6_status = ar8327_get_port_init_status(&pdata->port6_cfg); - - t = ar8327_get_pad_cfg(pdata->pad0_cfg); - if (chip_is_ar8337(priv) && !pdata->pad0_cfg->mac06_exchange_dis) - t |= AR8337_PAD_MAC06_EXCHANGE_EN; - ar8xxx_write(priv, AR8327_REG_PAD0_MODE, t); - - t = ar8327_get_pad_cfg(pdata->pad5_cfg); - ar8xxx_write(priv, AR8327_REG_PAD5_MODE, t); - t = ar8327_get_pad_cfg(pdata->pad6_cfg); - ar8xxx_write(priv, AR8327_REG_PAD6_MODE, t); - - pos = ar8xxx_read(priv, AR8327_REG_POWER_ON_STRAP); - new_pos = pos; - - led_cfg = pdata->led_cfg; - if (led_cfg) { - if (led_cfg->open_drain) - new_pos |= AR8327_POWER_ON_STRAP_LED_OPEN_EN; - else - new_pos &= ~AR8327_POWER_ON_STRAP_LED_OPEN_EN; - - ar8xxx_write(priv, AR8327_REG_LED_CTRL0, led_cfg->led_ctrl0); - ar8xxx_write(priv, AR8327_REG_LED_CTRL1, led_cfg->led_ctrl1); - ar8xxx_write(priv, AR8327_REG_LED_CTRL2, led_cfg->led_ctrl2); - ar8xxx_write(priv, AR8327_REG_LED_CTRL3, led_cfg->led_ctrl3); - - if (new_pos != pos) - new_pos |= AR8327_POWER_ON_STRAP_POWER_ON_SEL; - } - - if (pdata->sgmii_cfg) { - t = pdata->sgmii_cfg->sgmii_ctrl; - if (priv->chip_rev == 1) - t |= AR8327_SGMII_CTRL_EN_PLL | - AR8327_SGMII_CTRL_EN_RX | - AR8327_SGMII_CTRL_EN_TX; - else - t &= ~(AR8327_SGMII_CTRL_EN_PLL | - AR8327_SGMII_CTRL_EN_RX | - AR8327_SGMII_CTRL_EN_TX); - - ar8xxx_write(priv, AR8327_REG_SGMII_CTRL, t); - - if (pdata->sgmii_cfg->serdes_aen) - new_pos &= ~AR8327_POWER_ON_STRAP_SERDES_AEN; - else - new_pos |= AR8327_POWER_ON_STRAP_SERDES_AEN; - } - - ar8xxx_write(priv, AR8327_REG_POWER_ON_STRAP, new_pos); - - if (pdata->leds && pdata->num_leds) { - int i; - - data->leds = kzalloc(pdata->num_leds * sizeof(void *), - GFP_KERNEL); - if (!data->leds) - return -ENOMEM; - - for (i = 0; i < pdata->num_leds; i++) - ar8327_led_create(priv, &pdata->leds[i]); - } - - return 0; -} - -#ifdef CONFIG_OF static int ar8327_hw_config_of(struct ar8xxx_priv *priv, struct device_node *np) { @@ -684,13 +600,6 @@ ar8327_hw_config_of(struct ar8xxx_priv *priv, struct device_node *np) of_node_put(leds); return 0; } -#else -static inline int -ar8327_hw_config_of(struct ar8xxx_priv *priv, struct device_node *np) -{ - return -EINVAL; -} -#endif static int ar8327_hw_init(struct ar8xxx_priv *priv) @@ -701,12 +610,7 @@ ar8327_hw_init(struct ar8xxx_priv *priv) if (!priv->chip_data) return -ENOMEM; - if (priv->pdev->of_node) - ret = ar8327_hw_config_of(priv, priv->pdev->of_node); - else - ret = ar8327_hw_config_pdata(priv, - priv->phy->mdio.dev.platform_data); - + ret = ar8327_hw_config_of(priv, priv->pdev->of_node); if (ret) return ret; diff --git a/target/linux/generic/files/drivers/net/phy/ar8327.h b/target/linux/generic/files/drivers/net/phy/ar8327.h index 53a82d1f76..d6e84960d7 100644 --- a/target/linux/generic/files/drivers/net/phy/ar8327.h +++ b/target/linux/generic/files/drivers/net/phy/ar8327.h @@ -303,6 +303,90 @@ struct ar8327_led_entry { unsigned shift; }; +enum ar8327_pad_mode { + AR8327_PAD_NC = 0, + AR8327_PAD_MAC2MAC_MII, + AR8327_PAD_MAC2MAC_GMII, + AR8327_PAD_MAC_SGMII, + AR8327_PAD_MAC2PHY_MII, + AR8327_PAD_MAC2PHY_GMII, + AR8327_PAD_MAC_RGMII, + AR8327_PAD_PHY_GMII, + AR8327_PAD_PHY_RGMII, + AR8327_PAD_PHY_MII, +}; + +enum ar8327_clk_delay_sel { + AR8327_CLK_DELAY_SEL0 = 0, + AR8327_CLK_DELAY_SEL1, + AR8327_CLK_DELAY_SEL2, + AR8327_CLK_DELAY_SEL3, +}; + +struct ar8327_pad_cfg { + enum ar8327_pad_mode mode; + bool rxclk_sel; + bool txclk_sel; + bool pipe_rxclk_sel; + bool txclk_delay_en; + bool rxclk_delay_en; + bool sgmii_delay_en; + enum ar8327_clk_delay_sel txclk_delay_sel; + enum ar8327_clk_delay_sel rxclk_delay_sel; + bool mac06_exchange_dis; +}; + +enum ar8327_port_speed { + AR8327_PORT_SPEED_10 = 0, + AR8327_PORT_SPEED_100, + AR8327_PORT_SPEED_1000, +}; + +struct ar8327_port_cfg { + int force_link:1; + enum ar8327_port_speed speed; + int txpause:1; + int rxpause:1; + int duplex:1; +}; + +struct ar8327_sgmii_cfg { + u32 sgmii_ctrl; + bool serdes_aen; +}; + +enum ar8327_led_num { + AR8327_LED_PHY0_0 = 0, + AR8327_LED_PHY0_1, + AR8327_LED_PHY0_2, + AR8327_LED_PHY1_0, + AR8327_LED_PHY1_1, + AR8327_LED_PHY1_2, + AR8327_LED_PHY2_0, + AR8327_LED_PHY2_1, + AR8327_LED_PHY2_2, + AR8327_LED_PHY3_0, + AR8327_LED_PHY3_1, + AR8327_LED_PHY3_2, + AR8327_LED_PHY4_0, + AR8327_LED_PHY4_1, + AR8327_LED_PHY4_2, +}; + +enum ar8327_led_mode { + AR8327_LED_MODE_HW = 0, + AR8327_LED_MODE_SW, +}; + +struct ar8327_led_info { + const char *name; + const char *default_trigger; + bool active_low; + enum ar8327_led_num led_num; + enum ar8327_led_mode mode; + struct fwnode_handle *fwnode; +}; + struct ar8327_led { struct led_classdev cdev; struct ar8xxx_priv *sw_priv; diff --git a/target/linux/generic/files/include/linux/ar8216_platform.h b/target/linux/generic/files/include/linux/ar8216_platform.h deleted file mode 100644 index fff05ffb5c..0000000000 --- a/target/linux/generic/files/include/linux/ar8216_platform.h +++ /dev/null @@ -1,134 +0,0 @@ -/* - * AR8216 switch driver platform data - * - * Copyright (C) 2012 Gabor Juhos - * - * This program is free software; you can redistribute it and/or - * modify it under the terms of the GNU General Public License - * as published by the Free Software Foundation; either version 2 - * of the License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - */ - -#ifndef AR8216_PLATFORM_H -#define AR8216_PLATFORM_H - -enum ar8327_pad_mode { - AR8327_PAD_NC = 0, - AR8327_PAD_MAC2MAC_MII, - AR8327_PAD_MAC2MAC_GMII, - AR8327_PAD_MAC_SGMII, - AR8327_PAD_MAC2PHY_MII, - AR8327_PAD_MAC2PHY_GMII, - AR8327_PAD_MAC_RGMII, - AR8327_PAD_PHY_GMII, - AR8327_PAD_PHY_RGMII, - AR8327_PAD_PHY_MII, -}; - -enum ar8327_clk_delay_sel { - AR8327_CLK_DELAY_SEL0 = 0, - AR8327_CLK_DELAY_SEL1, - AR8327_CLK_DELAY_SEL2, - AR8327_CLK_DELAY_SEL3, -}; - -struct ar8327_pad_cfg { - enum ar8327_pad_mode mode; - bool rxclk_sel; - bool txclk_sel; - bool pipe_rxclk_sel; - bool txclk_delay_en; - bool rxclk_delay_en; - bool sgmii_delay_en; - enum ar8327_clk_delay_sel txclk_delay_sel; - enum ar8327_clk_delay_sel rxclk_delay_sel; - bool mac06_exchange_dis; -}; - -enum ar8327_port_speed { - AR8327_PORT_SPEED_10 = 0, - AR8327_PORT_SPEED_100, - AR8327_PORT_SPEED_1000, -}; - -struct ar8327_port_cfg { - int force_link:1; - enum ar8327_port_speed speed; - int txpause:1; - int rxpause:1; - int duplex:1; -}; - -struct ar8327_sgmii_cfg { - u32 sgmii_ctrl; - bool serdes_aen; -}; - -struct ar8327_led_cfg { - u32 led_ctrl0; - u32 led_ctrl1; - u32 led_ctrl2; - u32 led_ctrl3; - bool open_drain; -}; - -enum ar8327_led_num { - AR8327_LED_PHY0_0 = 0, - AR8327_LED_PHY0_1, - AR8327_LED_PHY0_2, - AR8327_LED_PHY1_0, - AR8327_LED_PHY1_1, - AR8327_LED_PHY1_2, - AR8327_LED_PHY2_0, - AR8327_LED_PHY2_1, - AR8327_LED_PHY2_2, - AR8327_LED_PHY3_0, - AR8327_LED_PHY3_1, - AR8327_LED_PHY3_2, - AR8327_LED_PHY4_0, - AR8327_LED_PHY4_1, - AR8327_LED_PHY4_2, -}; - -enum ar8327_led_mode { - AR8327_LED_MODE_HW = 0, - AR8327_LED_MODE_SW, -}; - -struct ar8327_led_info { - const char *name; - const char *default_trigger; - bool active_low; - enum ar8327_led_num led_num; - enum ar8327_led_mode mode; - struct fwnode_handle *fwnode; -}; - -#define AR8327_LED_INFO(_led, _mode, _name) { \ - .name = (_name), \ - .led_num = AR8327_LED_ ## _led, \ - .mode = AR8327_LED_MODE_ ## _mode \ -} - -struct ar8327_platform_data { - struct ar8327_pad_cfg *pad0_cfg; - struct ar8327_pad_cfg *pad5_cfg; - struct ar8327_pad_cfg *pad6_cfg; - struct ar8327_sgmii_cfg *sgmii_cfg; - struct ar8327_port_cfg port0_cfg; - struct ar8327_port_cfg port6_cfg; - struct ar8327_led_cfg *led_cfg; - - int (*get_port_link)(unsigned port); - - unsigned num_leds; - const struct ar8327_led_info *leds; -}; - -#endif /* AR8216_PLATFORM_H */ -