Commit ed4d421a authored by Fin Maaß's avatar Fin Maaß Committed by Dan Kalowsky
Browse files

drivers: ethernet: remove phy related configs from eth config



remove phy related configs from eth config.
phy related configs chould go directly into the phy.
Most ethernet drivers didn't support the now removed
functions yet. Users should instead use `phy_configure_link()`
together with the `net_eth_get_phy()` function.

Signed-off-by: default avatarFin Maaß <f.maass@vogl-electronic.com>
parent c169ac07
Loading
Loading
Loading
Loading
+1 −84
Original line number Diff line number Diff line
@@ -49,8 +49,6 @@ struct eth_dwc_xgmac_dev_data {
	bool dev_started;
	/* This field specifies the ethernet link type full duplex or half duplex. */
	bool enable_full_duplex;
	/* Ethernet auto-negotiation status. */
	bool auto_neg;
	/* Ethernet promiscuous mode status. */
	bool promisc_mode;
	/* Ethernet interface structure associated with this device. */
@@ -1478,41 +1476,6 @@ abort_tx:
	return -EIO;
}

static enum phy_link_speed get_phy_adv_speeds(bool auto_neg, bool duplex_mode,
					      enum eth_dwc_xgmac_link_speed link_speed)
{
	enum phy_link_speed adv_speeds = 0u;

	if (auto_neg) {
		adv_speeds = LINK_HALF_1000BASE | LINK_HALF_1000BASE | LINK_HALF_100BASE |
			     LINK_FULL_100BASE | LINK_HALF_10BASE | LINK_FULL_10BASE;
	} else {
		if (duplex_mode) {
			switch (link_speed) {
			case LINK_1GBIT:
				adv_speeds = LINK_FULL_1000BASE;
				break;
			case LINK_100MBIT:
				adv_speeds = LINK_FULL_100BASE;
				break;
			default:
				adv_speeds = LINK_FULL_10BASE;
			}
		} else {
			switch (link_speed) {
			case LINK_1GBIT:
				adv_speeds = LINK_HALF_1000BASE;
				break;
			case LINK_100MBIT:
				adv_speeds = LINK_HALF_100BASE;
				break;
			default:
				adv_speeds = LINK_HALF_10BASE;
			}
		}
	}
	return adv_speeds;
}
#ifdef CONFIG_ETH_DWC_XGMAC_HW_FILTERING
static inline uint32_t get_free_mac_addr_indx(const struct device *dev)
{
@@ -1561,56 +1524,12 @@ static inline void disable_filter_for_mac_addr(const struct device *dev, uint8_t
static int eth_dwc_xgmac_set_config(const struct device *dev, enum ethernet_config_type type,
				    const struct ethernet_config *config)
{
	const struct eth_dwc_xgmac_config *dev_conf = (struct eth_dwc_xgmac_config *)dev->config;
	struct eth_dwc_xgmac_dev_data *dev_data = (struct eth_dwc_xgmac_dev_data *)dev->data;
	const struct device *phy = dev_conf->phy_dev;
	enum phy_link_speed adv_speeds;

	int retval = 0;

	(void)k_mutex_lock(&dev_data->dev_cfg_lock, K_FOREVER);
	switch (type) {
	case ETHERNET_CONFIG_TYPE_AUTO_NEG:
		if (dev_data->auto_neg != config->auto_negotiation) {
			dev_data->auto_neg = config->auto_negotiation;
			adv_speeds =
				get_phy_adv_speeds(dev_data->auto_neg, dev_data->enable_full_duplex,
						   dev_data->link_speed);
			retval = phy_configure_link(phy, adv_speeds);
		} else {
			retval = -EALREADY;
		}
		break;
	case ETHERNET_CONFIG_TYPE_LINK:
		if ((config->l.link_10bt && dev_data->link_speed == LINK_10MBIT) ||
		    (config->l.link_100bt && dev_data->link_speed == LINK_100MBIT) ||
		    (config->l.link_1000bt && dev_data->link_speed == LINK_1GBIT)) {
			retval = -EALREADY;
			break;
		}

		if (config->l.link_1000bt) {
			dev_data->link_speed = LINK_1GBIT;
		} else if (config->l.link_100bt) {
			dev_data->link_speed = LINK_100MBIT;
		} else if (config->l.link_10bt) {
			dev_data->link_speed = LINK_10MBIT;
		}
		adv_speeds = get_phy_adv_speeds(dev_data->auto_neg, dev_data->enable_full_duplex,
						dev_data->link_speed);
		retval = phy_configure_link(phy, adv_speeds);
		break;
	case ETHERNET_CONFIG_TYPE_DUPLEX:
		if (config->full_duplex == dev_data->enable_full_duplex) {
			retval = -EALREADY;
			break;
		}
		dev_data->enable_full_duplex = config->full_duplex;

		adv_speeds = get_phy_adv_speeds(dev_data->auto_neg, dev_data->enable_full_duplex,
						dev_data->link_speed);
		retval = phy_configure_link(phy, adv_speeds);
		break;
	case ETHERNET_CONFIG_TYPE_MAC_ADDRESS:
		memcpy(dev_data->mac_addr, config->mac_address.addr, ETH_MAC_ADDRESS_SIZE);
		retval = net_if_set_link_addr(dev_data->iface, dev_data->mac_addr,
@@ -1682,8 +1601,7 @@ static enum ethernet_hw_caps eth_dwc_xgmac_get_capabilities(const struct device
	ARG_UNUSED(dev);
	enum ethernet_hw_caps caps = (enum ethernet_hw_caps)0;

	caps = (ETHERNET_LINK_1000BASE | ETHERNET_LINK_100BASE | ETHERNET_LINK_10BASE |
		ETHERNET_AUTO_NEGOTIATION_SET | ETHERNET_DUPLEX_SET);
	caps = (ETHERNET_LINK_1000BASE | ETHERNET_LINK_100BASE | ETHERNET_LINK_10BASE);

#ifdef CONFIG_ETH_DWC_XGMAC_RX_CS_OFFLOAD
	caps |= ETHERNET_HW_RX_CHKSUM_OFFLOAD;
@@ -1783,7 +1701,6 @@ static const struct ethernet_api eth_dwc_xgmac_apis = {
	static struct eth_dwc_xgmac_dev_data eth_dwc_xgmac##port##_dev_data = {                    \
		.mac_addr = DT_INST_PROP(port, local_mac_address),                                 \
		.link_speed = DT_INST_PROP(port, max_speed),                                       \
		.auto_neg = true,                                                                  \
		.enable_full_duplex = DT_INST_PROP(port, full_duplex_mode_en),                     \
		.dma_rx_desc = &eth_dwc_xgmac##port##_rx_desc[0u][0u],                             \
		.dma_tx_desc = &eth_dwc_xgmac##port##_tx_desc[0u][0u],                             \
+1 −2
Original line number Diff line number Diff line
@@ -631,8 +631,7 @@ static enum ethernet_hw_caps eth_gecko_get_capabilities(const struct device *dev
{
	ARG_UNUSED(dev);

	return (ETHERNET_AUTO_NEGOTIATION_SET | ETHERNET_LINK_10BASE |
			ETHERNET_LINK_100BASE | ETHERNET_DUPLEX_SET);
	return (ETHERNET_LINK_10BASE | ETHERNET_LINK_100BASE);
}

static const struct ethernet_api eth_api = {
+0 −1
Original line number Diff line number Diff line
@@ -564,7 +564,6 @@ static enum ethernet_hw_caps eth_nxp_s32_get_capabilities(const struct device *d
#if (FEATURE_GMAC_RGMII_EN == 1U)
		| ETHERNET_LINK_1000BASE
#endif
		| ETHERNET_DUPLEX_SET
		| ETHERNET_HW_TX_CHKSUM_OFFLOAD
		| ETHERNET_HW_RX_CHKSUM_OFFLOAD
#if defined(CONFIG_NET_VLAN)
+0 −4
Original line number Diff line number Diff line
@@ -649,10 +649,6 @@ static enum ethernet_hw_caps eth_xlnx_gem_get_capabilities(
		caps |= ETHERNET_HW_TX_CHKSUM_OFFLOAD;
	}

	if (dev_conf->enable_fdx) {
		caps |= ETHERNET_DUPLEX_SET;
	}

	caps |= ETHERNET_PROMISC_MODE;

	return caps;
+8 −25
Original line number Diff line number Diff line
@@ -149,20 +149,20 @@ enum ethernet_hw_caps {
	/** VLAN supported */
	ETHERNET_HW_VLAN		= BIT(2),

	/** Enabling/disabling auto negotiation supported */
	ETHERNET_AUTO_NEGOTIATION_SET	= BIT(3),

	/** 10 Mbits link supported */
	ETHERNET_LINK_10BASE		= BIT(4),
	ETHERNET_LINK_10BASE		= BIT(3),

	/** 100 Mbits link supported */
	ETHERNET_LINK_100BASE		= BIT(5),
	ETHERNET_LINK_100BASE		= BIT(4),

	/** 1 Gbits link supported */
	ETHERNET_LINK_1000BASE	= BIT(6),
	ETHERNET_LINK_1000BASE		= BIT(5),

	/** Changing duplex (half/full) supported */
	ETHERNET_DUPLEX_SET		= BIT(7),
	/** 2.5 Gbits link supported */
	ETHERNET_LINK_2500BASE		= BIT(6),

	/** 5 Gbits link supported */
	ETHERNET_LINK_5000BASE		= BIT(7),

	/** IEEE 802.1AS (gPTP) clock supported */
	ETHERNET_PTP			= BIT(8),
@@ -202,20 +202,11 @@ enum ethernet_hw_caps {

	/** TX-Injection supported */
	ETHERNET_TXINJECTION_MODE	= BIT(20),

	/** 2.5 Gbits link supported */
	ETHERNET_LINK_2500BASE	= BIT(21),

	/** 5 Gbits link supported */
	ETHERNET_LINK_5000BASE	= BIT(22),
};

/** @cond INTERNAL_HIDDEN */

enum ethernet_config_type {
	ETHERNET_CONFIG_TYPE_AUTO_NEG,
	ETHERNET_CONFIG_TYPE_LINK,
	ETHERNET_CONFIG_TYPE_DUPLEX,
	ETHERNET_CONFIG_TYPE_MAC_ADDRESS,
	ETHERNET_CONFIG_TYPE_QAV_PARAM,
	ETHERNET_CONFIG_TYPE_QBV_PARAM,
@@ -499,17 +490,9 @@ enum ethernet_checksum_support {

struct ethernet_config {
	union {
		bool auto_negotiation;
		bool full_duplex;
		bool promisc_mode;
		bool txinjection_mode;

		struct {
			bool link_10bt;
			bool link_100bt;
			bool link_1000bt;
		} l;

		struct net_eth_addr mac_address;

		struct ethernet_t1s_param t1s_param;
Loading