diff options
author | Hauke Mehrtens <hauke@hauke-m.de> | 2017-10-29 19:32:10 +0100 |
---|---|---|
committer | Hauke Mehrtens <hauke@hauke-m.de> | 2017-12-16 22:11:19 +0100 |
commit | b3f95490b9bec020314eb32016988ee262d52884 (patch) | |
tree | f8289c19587108bb3b687575776f559eee6f01fd /target/linux/generic/pending-4.14/701-phy_extension.patch | |
parent | a362df6f253e4460504fd870d6a7af40ef86ad70 (diff) | |
download | upstream-b3f95490b9bec020314eb32016988ee262d52884.tar.gz upstream-b3f95490b9bec020314eb32016988ee262d52884.tar.bz2 upstream-b3f95490b9bec020314eb32016988ee262d52884.zip |
kernel: generic: Add kernel 4.14 support
This adds initial support for kernel 4.14 based on the patches for
kernel 4.9.
In the configuration I deactivated some of the new possible security
features like:
CONFIG_REFCOUNT_FULL
CONFIG_SLAB_FREELIST_HARDENED
CONFIG_SOFTLOCKUP_DETECTOR
CONFIG_WARN_ALL_UNSEEDED_RANDOM
And these overlay FS options are also deactivated:
CONFIG_OVERLAY_FS_INDEX
CONFIG_OVERLAY_FS_REDIRECT_DIR
I activated this:
CONFIG_FORTIFY_SOURCE
CONFIG_POSIX_TIMERS
CONFIG_SLAB_MERGE_DEFAULT
CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED
I am not sure if I did the porting correct for the following patches:
target/linux/generic/backport-4.14/020-backport_netfilter_rtcache.patch
target/linux/generic/hack-4.14/220-gc_sections.patch
target/linux/generic/hack-4.14/321-powerpc_crtsavres_prereq.patch
target/linux/generic/pending-4.14/305-mips_module_reloc.patch
target/linux/generic/pending-4.14/611-netfilter_match_bypass_default_table.patch
target/linux/generic/pending-4.14/680-NET-skip-GRO-for-foreign-MAC-addresses.patch
Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Diffstat (limited to 'target/linux/generic/pending-4.14/701-phy_extension.patch')
-rw-r--r-- | target/linux/generic/pending-4.14/701-phy_extension.patch | 95 |
1 files changed, 95 insertions, 0 deletions
diff --git a/target/linux/generic/pending-4.14/701-phy_extension.patch b/target/linux/generic/pending-4.14/701-phy_extension.patch new file mode 100644 index 0000000000..1b380e24a9 --- /dev/null +++ b/target/linux/generic/pending-4.14/701-phy_extension.patch @@ -0,0 +1,95 @@ +From: John Crispin <john@phrozen.org> +Subject: net: phy: add phy_ethtool_ioctl() + +Signed-off-by: John Crispin <john@phrozen.org> +--- + drivers/net/phy/phy.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ + include/linux/phy.h | 1 + + 2 files changed, 45 insertions(+) + +--- a/drivers/net/phy/phy.c ++++ b/drivers/net/phy/phy.c +@@ -382,6 +382,73 @@ void phy_ethtool_ksettings_get(struct ph + } + EXPORT_SYMBOL(phy_ethtool_ksettings_get); + ++static int phy_ethtool_gset(struct phy_device *phydev, struct ethtool_cmd *cmd) ++{ ++ cmd->supported = phydev->supported; ++ ++ cmd->advertising = phydev->advertising; ++ cmd->lp_advertising = phydev->lp_advertising; ++ ++ ethtool_cmd_speed_set(cmd, phydev->speed); ++ cmd->duplex = phydev->duplex; ++ if (phydev->interface == PHY_INTERFACE_MODE_MOCA) ++ cmd->port = PORT_BNC; ++ else ++ cmd->port = PORT_MII; ++ cmd->phy_address = phydev->mdio.addr; ++ cmd->transceiver = phy_is_internal(phydev) ? ++ XCVR_INTERNAL : XCVR_EXTERNAL; ++ cmd->autoneg = phydev->autoneg; ++ cmd->eth_tp_mdix_ctrl = phydev->mdix_ctrl; ++ cmd->eth_tp_mdix = phydev->mdix; ++ ++ return 0; ++} ++ ++int phy_ethtool_ioctl(struct phy_device *phydev, void *useraddr) ++{ ++ u32 cmd; ++ int tmp; ++ struct ethtool_cmd ecmd = { ETHTOOL_GSET }; ++ struct ethtool_value edata = { ETHTOOL_GLINK }; ++ ++ if (get_user(cmd, (u32 *) useraddr)) ++ return -EFAULT; ++ ++ switch (cmd) { ++ case ETHTOOL_GSET: ++ phy_ethtool_gset(phydev, &ecmd); ++ if (copy_to_user(useraddr, &ecmd, sizeof(ecmd))) ++ return -EFAULT; ++ return 0; ++ ++ case ETHTOOL_SSET: ++ if (copy_from_user(&ecmd, useraddr, sizeof(ecmd))) ++ return -EFAULT; ++ return phy_ethtool_sset(phydev, &ecmd); ++ ++ case ETHTOOL_NWAY_RST: ++ /* if autoneg is off, it's an error */ ++ tmp = phy_read(phydev, MII_BMCR); ++ if (tmp & BMCR_ANENABLE) { ++ tmp |= (BMCR_ANRESTART); ++ phy_write(phydev, MII_BMCR, tmp); ++ return 0; ++ } ++ return -EINVAL; ++ ++ case ETHTOOL_GLINK: ++ edata.data = (phy_read(phydev, ++ MII_BMSR) & BMSR_LSTATUS) ? 1 : 0; ++ if (copy_to_user(useraddr, &edata, sizeof(edata))) ++ return -EFAULT; ++ return 0; ++ } ++ ++ return -EOPNOTSUPP; ++} ++EXPORT_SYMBOL(phy_ethtool_ioctl); ++ + /** + * phy_mii_ioctl - generic PHY MII ioctl interface + * @phydev: the phy_device struct +--- a/include/linux/phy.h ++++ b/include/linux/phy.h +@@ -905,6 +905,7 @@ void phy_ethtool_ksettings_get(struct ph + struct ethtool_link_ksettings *cmd); + int phy_ethtool_ksettings_set(struct phy_device *phydev, + const struct ethtool_link_ksettings *cmd); ++int phy_ethtool_ioctl(struct phy_device *phydev, void *useraddr); + int phy_mii_ioctl(struct phy_device *phydev, struct ifreq *ifr, int cmd); + int phy_start_interrupts(struct phy_device *phydev); + void phy_print_status(struct phy_device *phydev); |