Merge git://git.kernel.org/pub/scm/linux/kernel/git/netdev/net
Minor overlapping changes in xfrm_device.c, between the double ESP trailing bug fix setting the XFRM_INIT flag and the changes in net-next preparing for bonding encryption support. Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
@@ -480,8 +480,7 @@ config MICROCHIP_T1_PHY
|
||||
config MICROSEMI_PHY
|
||||
tristate "Microsemi PHYs"
|
||||
depends on MACSEC || MACSEC=n
|
||||
select CRYPTO_AES
|
||||
select CRYPTO_ECB
|
||||
select CRYPTO_LIB_AES if MACSEC
|
||||
help
|
||||
Currently supports VSC8514, VSC8530, VSC8531, VSC8540 and VSC8541 PHYs
|
||||
|
||||
|
@@ -10,7 +10,7 @@
|
||||
#include <linux/phy.h>
|
||||
#include <dt-bindings/net/mscc-phy-vsc8531.h>
|
||||
|
||||
#include <crypto/skcipher.h>
|
||||
#include <crypto/aes.h>
|
||||
|
||||
#include <net/macsec.h>
|
||||
|
||||
@@ -504,39 +504,17 @@ static u32 vsc8584_macsec_flow_context_id(struct macsec_flow *flow)
|
||||
static int vsc8584_macsec_derive_key(const u8 key[MACSEC_KEYID_LEN],
|
||||
u16 key_len, u8 hkey[16])
|
||||
{
|
||||
struct crypto_skcipher *tfm = crypto_alloc_skcipher("ecb(aes)", 0, 0);
|
||||
struct skcipher_request *req = NULL;
|
||||
struct scatterlist src, dst;
|
||||
DECLARE_CRYPTO_WAIT(wait);
|
||||
u32 input[4] = {0};
|
||||
const u8 input[AES_BLOCK_SIZE] = {0};
|
||||
struct crypto_aes_ctx ctx;
|
||||
int ret;
|
||||
|
||||
if (IS_ERR(tfm))
|
||||
return PTR_ERR(tfm);
|
||||
ret = aes_expandkey(&ctx, key, key_len);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
req = skcipher_request_alloc(tfm, GFP_KERNEL);
|
||||
if (!req) {
|
||||
ret = -ENOMEM;
|
||||
goto out;
|
||||
}
|
||||
|
||||
skcipher_request_set_callback(req, CRYPTO_TFM_REQ_MAY_BACKLOG |
|
||||
CRYPTO_TFM_REQ_MAY_SLEEP, crypto_req_done,
|
||||
&wait);
|
||||
ret = crypto_skcipher_setkey(tfm, key, key_len);
|
||||
if (ret < 0)
|
||||
goto out;
|
||||
|
||||
sg_init_one(&src, input, 16);
|
||||
sg_init_one(&dst, hkey, 16);
|
||||
skcipher_request_set_crypt(req, &src, &dst, 16, NULL);
|
||||
|
||||
ret = crypto_wait_req(crypto_skcipher_encrypt(req), &wait);
|
||||
|
||||
out:
|
||||
skcipher_request_free(req);
|
||||
crypto_free_skcipher(tfm);
|
||||
return ret;
|
||||
aes_encrypt(&ctx, hkey, input);
|
||||
memzero_explicit(&ctx, sizeof(ctx));
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int vsc8584_macsec_transformation(struct phy_device *phydev,
|
||||
|
@@ -840,7 +840,7 @@ static void phy_error(struct phy_device *phydev)
|
||||
* phy_disable_interrupts - Disable the PHY interrupts from the PHY side
|
||||
* @phydev: target phy_device struct
|
||||
*/
|
||||
static int phy_disable_interrupts(struct phy_device *phydev)
|
||||
int phy_disable_interrupts(struct phy_device *phydev)
|
||||
{
|
||||
int err;
|
||||
|
||||
|
@@ -832,8 +832,10 @@ static int get_phy_c22_id(struct mii_bus *bus, int addr, u32 *phy_id)
|
||||
|
||||
/* Grab the bits from PHYIR2, and put them in the lower half */
|
||||
phy_reg = mdiobus_read(bus, addr, MII_PHYSID2);
|
||||
if (phy_reg < 0)
|
||||
return -EIO;
|
||||
if (phy_reg < 0) {
|
||||
/* returning -ENODEV doesn't stop bus scanning */
|
||||
return (phy_reg == -EIO || phy_reg == -ENODEV) ? -ENODEV : -EIO;
|
||||
}
|
||||
|
||||
*phy_id |= phy_reg;
|
||||
|
||||
@@ -1142,6 +1144,10 @@ int phy_init_hw(struct phy_device *phydev)
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ret = phy_disable_interrupts(phydev);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
if (phydev->drv->config_init)
|
||||
ret = phydev->drv->config_init(phydev);
|
||||
|
||||
|
@@ -1464,6 +1464,8 @@ int phylink_ethtool_set_pauseparam(struct phylink *pl,
|
||||
struct ethtool_pauseparam *pause)
|
||||
{
|
||||
struct phylink_link_state *config = &pl->link_config;
|
||||
bool manual_changed;
|
||||
int pause_state;
|
||||
|
||||
ASSERT_RTNL();
|
||||
|
||||
@@ -1478,15 +1480,15 @@ int phylink_ethtool_set_pauseparam(struct phylink *pl,
|
||||
!pause->autoneg && pause->rx_pause != pause->tx_pause)
|
||||
return -EINVAL;
|
||||
|
||||
mutex_lock(&pl->state_mutex);
|
||||
config->pause = 0;
|
||||
pause_state = 0;
|
||||
if (pause->autoneg)
|
||||
config->pause |= MLO_PAUSE_AN;
|
||||
pause_state |= MLO_PAUSE_AN;
|
||||
if (pause->rx_pause)
|
||||
config->pause |= MLO_PAUSE_RX;
|
||||
pause_state |= MLO_PAUSE_RX;
|
||||
if (pause->tx_pause)
|
||||
config->pause |= MLO_PAUSE_TX;
|
||||
pause_state |= MLO_PAUSE_TX;
|
||||
|
||||
mutex_lock(&pl->state_mutex);
|
||||
/*
|
||||
* See the comments for linkmode_set_pause(), wrt the deficiencies
|
||||
* with the current implementation. A solution to this issue would
|
||||
@@ -1503,18 +1505,35 @@ int phylink_ethtool_set_pauseparam(struct phylink *pl,
|
||||
linkmode_set_pause(config->advertising, pause->tx_pause,
|
||||
pause->rx_pause);
|
||||
|
||||
/* If we have a PHY, phylib will call our link state function if the
|
||||
* mode has changed, which will trigger a resolve and update the MAC
|
||||
* configuration.
|
||||
manual_changed = (config->pause ^ pause_state) & MLO_PAUSE_AN ||
|
||||
(!(pause_state & MLO_PAUSE_AN) &&
|
||||
(config->pause ^ pause_state) & MLO_PAUSE_TXRX_MASK);
|
||||
|
||||
config->pause = pause_state;
|
||||
|
||||
if (!pl->phydev && !test_bit(PHYLINK_DISABLE_STOPPED,
|
||||
&pl->phylink_disable_state))
|
||||
phylink_pcs_config(pl, true, &pl->link_config);
|
||||
|
||||
mutex_unlock(&pl->state_mutex);
|
||||
|
||||
/* If we have a PHY, a change of the pause frame advertisement will
|
||||
* cause phylib to renegotiate (if AN is enabled) which will in turn
|
||||
* call our phylink_phy_change() and trigger a resolve. Note that
|
||||
* we can't hold our state mutex while calling phy_set_asym_pause().
|
||||
*/
|
||||
if (pl->phydev) {
|
||||
if (pl->phydev)
|
||||
phy_set_asym_pause(pl->phydev, pause->rx_pause,
|
||||
pause->tx_pause);
|
||||
} else if (!test_bit(PHYLINK_DISABLE_STOPPED,
|
||||
&pl->phylink_disable_state)) {
|
||||
phylink_pcs_config(pl, true, &pl->link_config);
|
||||
|
||||
/* If the manual pause settings changed, make sure we trigger a
|
||||
* resolve to update their state; we can not guarantee that the
|
||||
* link will cycle.
|
||||
*/
|
||||
if (manual_changed) {
|
||||
pl->mac_link_dropped = true;
|
||||
phylink_run_resolve(pl);
|
||||
}
|
||||
mutex_unlock(&pl->state_mutex);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
@@ -122,10 +122,13 @@ static int lan87xx_read_status(struct phy_device *phydev)
|
||||
if (rc < 0)
|
||||
return rc;
|
||||
|
||||
/* Wait max 640 ms to detect energy */
|
||||
phy_read_poll_timeout(phydev, MII_LAN83C185_CTRL_STATUS, rc,
|
||||
rc & MII_LAN83C185_ENERGYON, 10000,
|
||||
640000, true);
|
||||
/* Wait max 640 ms to detect energy and the timeout is not
|
||||
* an actual error.
|
||||
*/
|
||||
read_poll_timeout(phy_read, rc,
|
||||
rc & MII_LAN83C185_ENERGYON || rc < 0,
|
||||
10000, 640000, true, phydev,
|
||||
MII_LAN83C185_CTRL_STATUS);
|
||||
if (rc < 0)
|
||||
return rc;
|
||||
|
||||
|
مرجع در شماره جدید
Block a user