+ __FIELD_GET(_mask, _reg, "FIELD_GET: "); \
})
- extern void __compiletime_error("value doesn't fit into mask")
+ /**
--- a/include/linux/bitfield.h
+++ b/include/linux/bitfield.h
-@@ -16,6 +16,7 @@
+@@ -17,6 +17,7 @@
* FIELD_{GET,PREP} macros take as first parameter shifted mask
* from which they extract the base mask and shift amount.
* Mask must be a compilation time constant.
*
* Example:
*
-@@ -223,4 +224,62 @@ __MAKE_OP(64)
+@@ -240,4 +241,62 @@ __MAKE_OP(64)
#undef __MAKE_OP
#undef ____MAKE_OP
--- a/drivers/mtd/nand/spi/core.c
+++ b/drivers/mtd/nand/spi/core.c
-@@ -1184,6 +1184,7 @@ static const struct nand_ops spinand_ops
+@@ -1235,6 +1235,7 @@ static const struct nand_ops spinand_ops
static const struct spinand_manufacturer *spinand_manufacturers[] = {
&alliancememory_spinand_manufacturer,
&ato_spinand_manufacturer,
&foresee_spinand_manufacturer,
--- a/drivers/mtd/nand/spi/esmt.c
+++ b/drivers/mtd/nand/spi/esmt.c
-@@ -11,6 +11,7 @@
+@@ -12,6 +12,7 @@
/* ESMT uses GigaDevice 0xc8 JECDEC ID on some SPI NANDs */
#define SPINAND_MFR_ESMT_C8 0xc8
+#define SPINAND_MFR_ESMT_8C 0x8c
- static SPINAND_OP_VARIANTS(read_cache_variants,
- SPINAND_PAGE_READ_FROM_CACHE_X4_OP(0, 1, NULL, 0),
-@@ -102,6 +103,19 @@ static const struct mtd_ooblayout_ops f5
- .free = f50l1g41lb_ooblayout_free,
+ #define ESMT_F50L1G41LB_CFG_OTP_PROTECT BIT(7)
+ #define ESMT_F50L1G41LB_CFG_OTP_LOCK \
+@@ -184,6 +185,19 @@ static const struct spinand_fact_otp_ops
+ .read = spinand_fact_otp_read,
};
+
static const struct spinand_info esmt_c8_spinand_table[] = {
SPINAND_INFO("F50L1G41LB",
SPINAND_ID(SPINAND_READID_METHOD_OPCODE_ADDR, 0x01, 0x7f,
-@@ -138,6 +152,14 @@ static const struct spinand_info esmt_c8
+@@ -224,6 +238,14 @@ static const struct spinand_info esmt_c8
static const struct spinand_manufacturer_ops esmt_spinand_manuf_ops = {
};
.name = "ESMT",
--- a/include/linux/mtd/spinand.h
+++ b/include/linux/mtd/spinand.h
-@@ -262,6 +262,7 @@ struct spinand_manufacturer {
+@@ -354,6 +354,7 @@ struct spinand_manufacturer {
/* SPI NAND manufacturers */
extern const struct spinand_manufacturer alliancememory_spinand_manufacturer;
extern const struct spinand_manufacturer ato_spinand_manufacturer;
--- a/drivers/net/ppp/ppp_generic.c
+++ b/drivers/net/ppp/ppp_generic.c
-@@ -1632,6 +1632,8 @@ static void ppp_setup(struct net_device
+@@ -1641,6 +1641,8 @@ static void ppp_setup(struct net_device
dev->flags = IFF_POINTOPOINT | IFF_NOARP | IFF_MULTICAST;
dev->priv_destructor = ppp_dev_priv_destructor;
dev->pcpu_stat_type = NETDEV_PCPU_STAT_TSTATS;
netif_keep_dst(dev);
}
-@@ -1696,6 +1698,10 @@ pad_compress_skb(struct ppp *ppp, struct
+@@ -1710,6 +1712,10 @@ pad_compress_skb(struct ppp *ppp, struct
ppp->xcomp->comp_extra + ppp->dev->hard_header_len;
int compressor_skb_size = ppp->dev->mtu +
ppp->xcomp->comp_extra + PPP_HDRLEN;
new_skb = alloc_skb(new_skb_size, GFP_ATOMIC);
if (!new_skb) {
if (net_ratelimit())
-@@ -1783,6 +1789,10 @@ ppp_send_frame(struct ppp *ppp, struct s
+@@ -1797,6 +1803,10 @@ ppp_send_frame(struct ppp *ppp, struct s
case PPP_IP:
if (!ppp->vj || (ppp->flags & SC_COMP_TCP) == 0)
break;
/* try to do VJ TCP header compression */
new_skb = alloc_skb(skb->len + ppp->dev->hard_header_len - 2,
GFP_ATOMIC);
-@@ -1880,19 +1890,26 @@ ppp_push(struct ppp *ppp)
+@@ -1894,19 +1904,26 @@ ppp_push(struct ppp *ppp)
}
if ((ppp->flags & SC_MULTILINK) == 0) {
spin_unlock(&pch->downl);
return;
}
-@@ -1977,6 +1994,8 @@ static int ppp_mp_explode(struct ppp *pp
+@@ -1991,6 +2008,8 @@ static int ppp_mp_explode(struct ppp *pp
return 0; /* can't take now, leave it in xmit_pending */
/* Do protocol field compression */
p = skb->data;
len = skb->len;
if (*p == 0 && mp_protocol_compress) {
-@@ -2135,6 +2154,7 @@ static int ppp_mp_explode(struct ppp *pp
+@@ -2149,6 +2168,7 @@ static int ppp_mp_explode(struct ppp *pp
noskb:
spin_unlock(&pch->downl);
#include <net/pkt_cls.h>
#include <net/tcp.h>
#include <net/flow_dissector.h>
-@@ -3154,14 +3155,89 @@ static struct Qdisc_ops cake_qdisc_ops _
+@@ -3160,14 +3161,89 @@ static struct Qdisc_ops cake_qdisc_ops _
};
MODULE_ALIAS_NET_SCH("cake");
}
module_init(cake_module_init)
-@@ -3169,3 +3245,4 @@ module_exit(cake_module_exit)
+@@ -3175,3 +3251,4 @@ module_exit(cake_module_exit)
MODULE_AUTHOR("Jonathan Morton");
MODULE_LICENSE("Dual BSD/GPL");
MODULE_DESCRIPTION("The CAKE shaper.");
-+MODULE_IMPORT_NS(NET_SCHED_INTERNAL);
++MODULE_IMPORT_NS("NET_SCHED_INTERNAL");
};
struct cake_sched_data {
-@@ -2586,14 +2587,12 @@ static void cake_reconfigure(struct Qdis
+@@ -2592,14 +2593,12 @@ static void cake_reconfigure(struct Qdis
q->buffer_config_limit));
}
int err;
err = nla_parse_nested_deprecated(tb, TCA_CAKE_MAX, opt, cake_policy,
-@@ -2601,7 +2600,6 @@ static int cake_change(struct Qdisc *sch
+@@ -2607,7 +2606,6 @@ static int cake_change(struct Qdisc *sch
if (err < 0)
return err;
if (tb[TCA_CAKE_NAT]) {
#if IS_ENABLED(CONFIG_NF_CONNTRACK)
flow_mode &= ~CAKE_FLOW_NAT_FLAG;
-@@ -2614,6 +2612,19 @@ static int cake_change(struct Qdisc *sch
+@@ -2620,6 +2618,19 @@ static int cake_change(struct Qdisc *sch
#endif
}
if (tb[TCA_CAKE_BASE_RATE64])
WRITE_ONCE(q->rate_bps,
nla_get_u64(tb[TCA_CAKE_BASE_RATE64]));
-@@ -2622,7 +2633,6 @@ static int cake_change(struct Qdisc *sch
+@@ -2628,7 +2639,6 @@ static int cake_change(struct Qdisc *sch
WRITE_ONCE(q->tin_mode,
nla_get_u32(tb[TCA_CAKE_DIFFSERV_MODE]));
if (tb[TCA_CAKE_WASH]) {
if (!!nla_get_u32(tb[TCA_CAKE_WASH]))
rate_flags |= CAKE_FLAG_WASH;
-@@ -2643,20 +2653,12 @@ static int cake_change(struct Qdisc *sch
+@@ -2649,20 +2659,12 @@ static int cake_change(struct Qdisc *sch
WRITE_ONCE(q->rate_overhead,
nla_get_s32(tb[TCA_CAKE_OVERHEAD]));
rate_flags |= CAKE_FLAG_OVERHEAD;
}
if (tb[TCA_CAKE_MPU])
-@@ -2675,13 +2677,6 @@ static int cake_change(struct Qdisc *sch
+@@ -2681,13 +2683,6 @@ static int cake_change(struct Qdisc *sch
WRITE_ONCE(q->target, max(target, 1U));
}
if (tb[TCA_CAKE_INGRESS]) {
if (!!nla_get_u32(tb[TCA_CAKE_INGRESS]))
rate_flags |= CAKE_FLAG_INGRESS;
-@@ -2712,6 +2707,34 @@ static int cake_change(struct Qdisc *sch
+@@ -2718,6 +2713,34 @@ static int cake_change(struct Qdisc *sch
WRITE_ONCE(q->rate_flags, rate_flags);
WRITE_ONCE(q->flow_mode, flow_mode);
if (qd->tins) {
sch_tree_lock(sch);
cake_reconfigure(sch);
-@@ -2728,7 +2751,23 @@ static void cake_destroy(struct Qdisc *s
+@@ -2734,7 +2757,23 @@ static void cake_destroy(struct Qdisc *s
qdisc_watchdog_cancel(&q->watchdog);
tcf_block_put(q->block);
kvfree(q->tins);
}
static int cake_init(struct Qdisc *sch, struct nlattr *opt,
-@@ -2742,17 +2781,9 @@ static int cake_init(struct Qdisc *sch,
+@@ -2748,17 +2787,9 @@ static int cake_init(struct Qdisc *sch,
if (!q)
return -ENOMEM;
qd->cur_tin = 0;
qd->cur_flow = 0;
qd->config = q;
-@@ -2815,10 +2846,21 @@ err:
+@@ -2821,10 +2852,21 @@ err:
return err;
}
struct nlattr *opts;
u16 rate_flags;
u8 flow_mode;
-@@ -2894,6 +2936,13 @@ nla_put_failure:
+@@ -2900,6 +2942,13 @@ nla_put_failure:
return -1;
}
static int cake_dump_stats(struct Qdisc *sch, struct gnet_dump *d)
{
struct nlattr *stats = nla_nest_start_noflag(d->skb, TCA_STATS_APP);
-@@ -3157,6 +3206,7 @@ MODULE_ALIAS_NET_SCH("cake");
+@@ -3163,6 +3212,7 @@ MODULE_ALIAS_NET_SCH("cake");
struct cake_mq_sched {
struct mq_sched mq_priv; /* must be first */
};
static void cake_mq_destroy(struct Qdisc *sch)
-@@ -3167,25 +3217,68 @@ static void cake_mq_destroy(struct Qdisc
+@@ -3173,25 +3223,68 @@ static void cake_mq_destroy(struct Qdisc
static int cake_mq_init(struct Qdisc *sch, struct nlattr *opt,
struct netlink_ext_ack *extack)
{
--- a/Documentation/netlink/specs/tc.yaml
+++ b/Documentation/netlink/specs/tc.yaml
-@@ -2161,6 +2161,9 @@ attribute-sets:
+@@ -2207,6 +2207,9 @@ attribute-sets:
-
name: blue-timer-us
type: s32
+ name: active-queues
+ type: u32
-
- name: tc-cake-tin-stats-attrs
- attributes:
+ name: cake-tin-stats-attrs
+ name-prefix: tca-cake-tin-stats-
--- a/include/uapi/linux/pkt_sched.h
+++ b/include/uapi/linux/pkt_sched.h
-@@ -1034,6 +1034,7 @@ enum {
+@@ -1036,6 +1036,7 @@ enum {
TCA_CAKE_STATS_DROP_NEXT_US,
TCA_CAKE_STATS_P_DROP,
TCA_CAKE_STATS_BLUE_TIMER_US,
/* http://en.wikipedia.org/wiki/Methods_of_computing_square_roots
* new_invsqrt = (invsqrt / 2) * (3 - count * invsqrt^2)
*
-@@ -2003,6 +2011,40 @@ static struct sk_buff *cake_dequeue(stru
+@@ -2009,6 +2017,40 @@ static struct sk_buff *cake_dequeue(stru
u64 delay;
u32 len;
begin:
if (!sch->q.qlen)
return NULL;
-@@ -2202,6 +2244,7 @@ retry:
+@@ -2208,6 +2250,7 @@ retry:
b->tin_ecn_mark += !!flow->cvars.ecn_marked;
qdisc_bstats_update(sch, skb);
/* collect delay stats */
delay = ktime_to_ns(ktime_sub(now, cobalt_get_enqueue_time(skb)));
-@@ -2302,6 +2345,9 @@ static void cake_set_rate(struct cake_ti
+@@ -2308,6 +2351,9 @@ static void cake_set_rate(struct cake_ti
b->tin_rate_ns = rate_ns;
b->tin_rate_shft = rate_shft;
byte_target_ns = (byte_target * rate_ns) >> rate_shft;
b->cparams.target = max((byte_target_ns * 3) / 2, target_ns);
-@@ -2768,6 +2814,7 @@ static void cake_config_init(struct cake
+@@ -2774,6 +2820,7 @@ static void cake_config_init(struct cake
*/
q->rate_flags |= CAKE_FLAG_SPLIT_GSO;
q->is_shared = is_shared;
}
static int cake_init(struct Qdisc *sch, struct nlattr *opt,
-@@ -2839,6 +2886,9 @@ static int cake_init(struct Qdisc *sch,
+@@ -2845,6 +2892,9 @@ static int cake_init(struct Qdisc *sch,
qd->avg_peak_bandwidth = q->rate_bps;
qd->min_netlen = ~0;
qd->min_adjlen = ~0;
return 0;
err:
kvfree(qd->config);
-@@ -2971,6 +3021,7 @@ static int cake_dump_stats(struct Qdisc
+@@ -2977,6 +3027,7 @@ static int cake_dump_stats(struct Qdisc
PUT_STAT_U32(MAX_ADJLEN, q->max_adjlen);
PUT_STAT_U32(MIN_NETLEN, q->min_netlen);
PUT_STAT_U32(MIN_ADJLEN, q->min_adjlen);
struct cake_heap_entry overflow_heap[CAKE_QUEUES * CAKE_MAX_TINS];
-@@ -2797,8 +2798,6 @@ static void cake_destroy(struct Qdisc *s
+@@ -2803,8 +2804,6 @@ static void cake_destroy(struct Qdisc *s
qdisc_watchdog_cancel(&q->watchdog);
tcf_block_put(q->block);
kvfree(q->tins);
}
static void cake_config_init(struct cake_sched_config *q, bool is_shared)
-@@ -2821,13 +2820,9 @@ static int cake_init(struct Qdisc *sch,
+@@ -2827,13 +2826,9 @@ static int cake_init(struct Qdisc *sch,
struct netlink_ext_ack *extack)
{
struct cake_sched_data *qd = qdisc_priv(sch);
cake_config_init(q, false);
sch->limit = 10240;
-@@ -2839,14 +2834,13 @@ static int cake_init(struct Qdisc *sch,
+@@ -2845,14 +2840,13 @@ static int cake_init(struct Qdisc *sch,
if (opt) {
err = cake_change(sch, opt, extack);
quantum_div[0] = ~0;
for (i = 1; i <= CAKE_QUEUES; i++)
-@@ -2854,10 +2848,8 @@ static int cake_init(struct Qdisc *sch,
+@@ -2860,10 +2854,8 @@ static int cake_init(struct Qdisc *sch,
qd->tins = kvcalloc(CAKE_MAX_TINS, sizeof(struct cake_tin_data),
GFP_KERNEL);
for (i = 0; i < CAKE_MAX_TINS; i++) {
struct cake_tin_data *b = qd->tins + i;
-@@ -2890,22 +2882,13 @@ static int cake_init(struct Qdisc *sch,
+@@ -2896,22 +2888,13 @@ static int cake_init(struct Qdisc *sch,
qd->last_checked_active = 0;
return 0;
--- a/net/sched/sch_cake.c
+++ b/net/sched/sch_cake.c
-@@ -2012,7 +2012,8 @@ static struct sk_buff *cake_dequeue(stru
+@@ -2018,7 +2018,8 @@ static struct sk_buff *cake_dequeue(stru
u64 delay;
u32 len;
/* http://en.wikipedia.org/wiki/Methods_of_computing_square_roots
* new_invsqrt = (invsqrt / 2) * (3 - count * invsqrt^2)
*
-@@ -2039,12 +2039,9 @@ static struct sk_buff *cake_dequeue(stru
+@@ -2045,12 +2045,9 @@ static struct sk_buff *cake_dequeue(stru
if (num_active_qs > 1)
new_rate = div64_u64(q->config->rate_bps, num_active_qs);
}
begin:
-@@ -2361,12 +2358,10 @@ static void cake_set_rate(struct cake_ti
+@@ -2367,12 +2364,10 @@ static void cake_set_rate(struct cake_ti
b->cparams.p_dec = 1 << 20; /* 1/4096 */
}
q->tin_cnt = 1;
-@@ -2380,12 +2375,10 @@ static int cake_config_besteffort(struct
+@@ -2386,12 +2381,10 @@ static int cake_config_besteffort(struct
return 0;
}
u32 quantum = 256;
u32 i;
-@@ -2456,7 +2449,7 @@ static int cake_config_precedence(struct
+@@ -2462,7 +2455,7 @@ static int cake_config_precedence(struct
* Total 12 traffic classes.
*/
{
/* Pruned list of traffic classes for typical applications:
*
-@@ -2473,8 +2466,6 @@ static int cake_config_diffserv8(struct
+@@ -2479,8 +2472,6 @@ static int cake_config_diffserv8(struct
*/
struct cake_sched_data *q = qdisc_priv(sch);
u32 quantum = 256;
u32 i;
-@@ -2504,7 +2495,7 @@ static int cake_config_diffserv8(struct
+@@ -2510,7 +2501,7 @@ static int cake_config_diffserv8(struct
return 0;
}
{
/* Further pruned list of traffic classes for four-class system:
*
-@@ -2517,8 +2508,6 @@ static int cake_config_diffserv4(struct
+@@ -2523,8 +2514,6 @@ static int cake_config_diffserv4(struct
*/
struct cake_sched_data *q = qdisc_priv(sch);
u32 quantum = 1024;
q->tin_cnt = 4;
-@@ -2546,7 +2535,7 @@ static int cake_config_diffserv4(struct
+@@ -2552,7 +2541,7 @@ static int cake_config_diffserv4(struct
return 0;
}
{
/* Simplified Diffserv structure with 3 tins.
* Latency Sensitive (CS7, CS6, EF, VA, TOS4)
-@@ -2554,8 +2543,6 @@ static int cake_config_diffserv3(struct
+@@ -2560,8 +2549,6 @@ static int cake_config_diffserv3(struct
* Low Priority (LE, CS1)
*/
struct cake_sched_data *q = qdisc_priv(sch);
u32 quantum = 1024;
q->tin_cnt = 3;
-@@ -2580,32 +2567,33 @@ static int cake_config_diffserv3(struct
+@@ -2586,32 +2573,33 @@ static int cake_config_diffserv3(struct
return 0;
}
break;
}
-@@ -2616,6 +2604,14 @@ static void cake_reconfigure(struct Qdis
+@@ -2622,6 +2610,14 @@ static void cake_reconfigure(struct Qdis
qd->rate_ns = qd->tins[ft].tin_rate_ns;
qd->rate_shft = qd->tins[ft].tin_rate_shft;
#define PHY_CTL1 0x13
#define PHY_CTL1_MDICD BIT(3)
-@@ -1275,6 +1276,28 @@ static struct phy_driver gpy_drivers[] =
+@@ -1272,6 +1273,28 @@ static struct phy_driver gpy_drivers[] =
.get_wol = gpy_get_wol,
.set_loopback = gpy_loopback,
},
};
module_phy_driver(gpy_drivers);
-@@ -1291,6 +1314,7 @@ static const struct mdio_device_id __may
+@@ -1288,6 +1311,7 @@ static const struct mdio_device_id __may
{PHY_ID_MATCH_MODEL(PHY_ID_GPY241B)},
{PHY_ID_MATCH_MODEL(PHY_ID_GPY241BM)},
{PHY_ID_MATCH_MODEL(PHY_ID_GPY245B)},
--- a/drivers/net/phy/mxl-gpy.c
+++ b/drivers/net/phy/mxl-gpy.c
-@@ -568,20 +568,6 @@ static int gpy_update_interface(struct p
+@@ -562,20 +562,6 @@ static int gpy_update_interface(struct p
case SPEED_100:
case SPEED_10:
phydev->interface = PHY_INTERFACE_MODE_SGMII;
break;
}
-@@ -1022,6 +1008,27 @@ static int gpy_led_polarity_set(struct p
- unreachable();
+@@ -1019,6 +1005,27 @@ static int gpy_led_polarity_set(struct p
+ return -EINVAL;
}
+static unsigned int gpy_inband_caps(struct phy_device *phydev,
static struct phy_driver gpy_drivers[] = {
{
PHY_ID_MATCH_MODEL(PHY_ID_GPY2xx),
-@@ -1029,6 +1036,8 @@ static struct phy_driver gpy_drivers[] =
+@@ -1026,6 +1033,8 @@ static struct phy_driver gpy_drivers[] =
.get_features = genphy_c45_pma_read_abilities,
.config_init = gpy_config_init,
.probe = gpy_probe,
.suspend = genphy_suspend,
.resume = genphy_resume,
.config_aneg = gpy_config_aneg,
-@@ -1052,6 +1061,8 @@ static struct phy_driver gpy_drivers[] =
+@@ -1049,6 +1058,8 @@ static struct phy_driver gpy_drivers[] =
.get_features = genphy_c45_pma_read_abilities,
.config_init = gpy_config_init,
.probe = gpy_probe,
.suspend = genphy_suspend,
.resume = genphy_resume,
.config_aneg = gpy_config_aneg,
-@@ -1074,6 +1085,8 @@ static struct phy_driver gpy_drivers[] =
+@@ -1071,6 +1082,8 @@ static struct phy_driver gpy_drivers[] =
.get_features = genphy_c45_pma_read_abilities,
.config_init = gpy_config_init,
.probe = gpy_probe,
.suspend = genphy_suspend,
.resume = genphy_resume,
.config_aneg = gpy_config_aneg,
-@@ -1097,6 +1110,8 @@ static struct phy_driver gpy_drivers[] =
+@@ -1094,6 +1107,8 @@ static struct phy_driver gpy_drivers[] =
.get_features = genphy_c45_pma_read_abilities,
.config_init = gpy21x_config_init,
.probe = gpy_probe,
.suspend = genphy_suspend,
.resume = genphy_resume,
.config_aneg = gpy_config_aneg,
-@@ -1119,6 +1134,8 @@ static struct phy_driver gpy_drivers[] =
+@@ -1116,6 +1131,8 @@ static struct phy_driver gpy_drivers[] =
.get_features = genphy_c45_pma_read_abilities,
.config_init = gpy21x_config_init,
.probe = gpy_probe,
.suspend = genphy_suspend,
.resume = genphy_resume,
.config_aneg = gpy_config_aneg,
-@@ -1141,6 +1158,8 @@ static struct phy_driver gpy_drivers[] =
+@@ -1138,6 +1155,8 @@ static struct phy_driver gpy_drivers[] =
.name = "Maxlinear Ethernet GPY212B",
.get_features = genphy_c45_pma_read_abilities,
.config_init = gpy21x_config_init,
.probe = gpy_probe,
.suspend = genphy_suspend,
.resume = genphy_resume,
-@@ -1164,6 +1183,8 @@ static struct phy_driver gpy_drivers[] =
+@@ -1161,6 +1180,8 @@ static struct phy_driver gpy_drivers[] =
.get_features = genphy_c45_pma_read_abilities,
.config_init = gpy21x_config_init,
.probe = gpy_probe,
.suspend = genphy_suspend,
.resume = genphy_resume,
.config_aneg = gpy_config_aneg,
-@@ -1187,6 +1208,8 @@ static struct phy_driver gpy_drivers[] =
+@@ -1184,6 +1205,8 @@ static struct phy_driver gpy_drivers[] =
.get_features = genphy_c45_pma_read_abilities,
.config_init = gpy21x_config_init,
.probe = gpy_probe,
.suspend = genphy_suspend,
.resume = genphy_resume,
.config_aneg = gpy_config_aneg,
-@@ -1209,6 +1232,8 @@ static struct phy_driver gpy_drivers[] =
+@@ -1206,6 +1229,8 @@ static struct phy_driver gpy_drivers[] =
.get_features = genphy_c45_pma_read_abilities,
.config_init = gpy21x_config_init,
.probe = gpy_probe,
.suspend = genphy_suspend,
.resume = genphy_resume,
.config_aneg = gpy_config_aneg,
-@@ -1231,6 +1256,8 @@ static struct phy_driver gpy_drivers[] =
+@@ -1228,6 +1253,8 @@ static struct phy_driver gpy_drivers[] =
.get_features = genphy_c45_pma_read_abilities,
.config_init = gpy_config_init,
.probe = gpy_probe,
.suspend = genphy_suspend,
.resume = genphy_resume,
.config_aneg = gpy_config_aneg,
-@@ -1248,6 +1275,8 @@ static struct phy_driver gpy_drivers[] =
+@@ -1245,6 +1272,8 @@ static struct phy_driver gpy_drivers[] =
.get_features = genphy_c45_pma_read_abilities,
.config_init = gpy_config_init,
.probe = gpy_probe,
.suspend = genphy_suspend,
.resume = genphy_resume,
.config_aneg = gpy_config_aneg,
-@@ -1265,6 +1294,8 @@ static struct phy_driver gpy_drivers[] =
+@@ -1262,6 +1291,8 @@ static struct phy_driver gpy_drivers[] =
.get_features = genphy_c45_pma_read_abilities,
.config_init = gpy_config_init,
.probe = gpy_probe,
.suspend = genphy_suspend,
.resume = genphy_resume,
.config_aneg = gpy_config_aneg,
-@@ -1282,6 +1313,8 @@ static struct phy_driver gpy_drivers[] =
+@@ -1279,6 +1310,8 @@ static struct phy_driver gpy_drivers[] =
.get_features = genphy_c45_pma_read_abilities,
.config_init = gpy_config_init,
.probe = gpy_probe,
--- a/include/linux/mdio.h
+++ b/include/linux/mdio.h
-@@ -668,6 +668,19 @@ static inline int mdiodev_modify_changed
+@@ -648,6 +648,19 @@ static inline int mdiodev_modify_changed
mask, set);
}
--- a/drivers/net/dsa/Kconfig
+++ b/drivers/net/dsa/Kconfig
-@@ -79,6 +79,8 @@ source "drivers/net/dsa/microchip/Kconfi
+@@ -74,6 +74,8 @@ source "drivers/net/dsa/microchip/Kconfi
source "drivers/net/dsa/mv88e6xxx/Kconfig"
source "drivers/net/dsa/qca/Kconfig"
--- a/drivers/net/dsa/Makefile
+++ b/drivers/net/dsa/Makefile
-@@ -21,6 +21,7 @@ obj-y += b53/
- obj-y += hirschmann/
+@@ -19,6 +19,7 @@ obj-y += hirschmann/
+ obj-y += lantiq/
obj-y += microchip/
obj-y += mv88e6xxx/
+obj-y += mxl862xx/
#include <linux/of.h>
#include <linux/phy.h>
#include <linux/pm_wakeirq.h>
-@@ -127,6 +128,27 @@
+@@ -135,6 +136,27 @@
*/
#define RTL822X_VND2_C22_REG(reg) (0xa400 + 2 * (reg))
#define RTL8366RB_POWER_SAVE 0x15
#define RTL8366RB_POWER_SAVE_ON BIT(12)
-@@ -1453,6 +1475,168 @@ static int rtl822xb_c45_read_status(stru
+@@ -1494,6 +1516,168 @@ static int rtl822xb_c45_read_status(stru
return 0;
}
static bool rtlgen_supports_2_5gbps(struct phy_device *phydev)
{
int val;
-@@ -1930,11 +2114,14 @@ static struct phy_driver realtek_drvs[]
+@@ -1971,11 +2155,14 @@ static struct phy_driver realtek_drvs[]
}, {
PHY_ID_MATCH_EXACT(0x001ccad0),
.name = "RTL8224 2.5Gbps PHY",
--- a/drivers/net/phy/realtek/realtek_main.c
+++ b/drivers/net/phy/realtek/realtek_main.c
-@@ -128,6 +128,11 @@
+@@ -136,6 +136,11 @@
*/
#define RTL822X_VND2_C22_REG(reg) (0xa400 + 2 * (reg))
#define RTL8224_MII_RTCT 0x11
#define RTL8224_MII_RTCT_ENABLE BIT(0)
#define RTL8224_MII_RTCT_PAIR_A BIT(4)
-@@ -1880,6 +1885,53 @@ static irqreturn_t rtl9000a_handle_inter
+@@ -1921,6 +1926,53 @@ static irqreturn_t rtl9000a_handle_inter
return IRQ_HANDLED;
}
static struct phy_driver realtek_drvs[] = {
{
PHY_ID_MATCH_EXACT(0x00008201),
-@@ -2054,6 +2106,8 @@ static struct phy_driver realtek_drvs[]
+@@ -2095,6 +2147,8 @@ static struct phy_driver realtek_drvs[]
}, {
.match_phy_device = rtl8221b_vb_cg_c45_match_phy_device,
.name = "RTL8221B-VB-CG 2.5Gbps PHY (C45)",
.probe = rtl822x_probe,
.config_init = rtl822xb_config_init,
.get_rate_matching = rtl822xb_get_rate_matching,
-@@ -2078,6 +2132,8 @@ static struct phy_driver realtek_drvs[]
+@@ -2119,6 +2173,8 @@ static struct phy_driver realtek_drvs[]
}, {
.match_phy_device = rtl8221b_vm_cg_c45_match_phy_device,
.name = "RTL8221B-VM-CG 2.5Gbps PHY (C45)",
--- a/MAINTAINERS
+++ b/MAINTAINERS
-@@ -8459,6 +8459,7 @@ F: include/linux/phy_link_topology.h
+@@ -9300,6 +9300,7 @@ F: include/linux/phy_link_topology.h
F: include/linux/phylib_stubs.h
F: include/linux/platform_data/mdio-bcm-unimac.h
F: include/linux/platform_data/mdio-gpio.h
--- a/MAINTAINERS
+++ b/MAINTAINERS
-@@ -9704,6 +9704,12 @@ S: Maintained
+@@ -10656,6 +10656,12 @@ S: Maintained
F: Documentation/devicetree/bindings/leds/irled/gpio-ir-tx.yaml
F: drivers/media/rc/gpio-ir-tx.c
L: linux-gpio@vger.kernel.org
--- a/drivers/gpio/Kconfig
+++ b/drivers/gpio/Kconfig
-@@ -1866,6 +1866,15 @@ config GPIO_LATCH
+@@ -1985,6 +1985,15 @@ config GPIO_LATCH
Say yes here to enable a driver for GPIO multiplexers based on latches
connected to other GPIOs.
select IRQ_SIM
--- a/drivers/gpio/Makefile
+++ b/drivers/gpio/Makefile
-@@ -84,6 +84,7 @@ obj-$(CONFIG_GPIO_IXP4XX) += gpio-ixp4x
+@@ -89,6 +89,7 @@ obj-$(CONFIG_GPIO_IXP4XX) += gpio-ixp4x
obj-$(CONFIG_GPIO_JANZ_TTL) += gpio-janz-ttl.o
obj-$(CONFIG_GPIO_KEMPLD) += gpio-kempld.o
obj-$(CONFIG_GPIO_LATCH) += gpio-latch.o
--- a/sound/usb/mixer_quirks.c
+++ b/sound/usb/mixer_quirks.c
-@@ -3367,10 +3367,6 @@ static int snd_bbfpro_controls_create(st
+@@ -3306,10 +3306,6 @@ static int snd_bbfpro_controls_create(st
#define RME_DIGIFACE_REGISTER(reg, mask) (((reg) << 16) | (mask))
#define RME_DIGIFACE_INVERT BIT(31)
#include <linux/clkdev.h>
--- a/drivers/clk/at91/pmc.h
+++ b/drivers/clk/at91/pmc.h
-@@ -116,9 +116,6 @@ struct at91_clk_pms {
+@@ -117,9 +117,6 @@ struct at91_clk_pms {
unsigned int parent;
};
--- a/crypto/testmgr.c
+++ b/crypto/testmgr.c
-@@ -4453,6 +4453,13 @@ static const struct alg_test_desc alg_te
+@@ -4272,6 +4272,13 @@ static const struct alg_test_desc alg_te
.test = alg_test_null,
.fips_allowed = 1,
}, {
+ }
+ }, {
.alg = "authenc(hmac(sha384),cbc(des))",
+ .generic_driver = "authenc(hmac-sha384-lib,cbc(des-generic))",
.test = alg_test_aead,
- .suite = {
--- a/crypto/testmgr.h
+++ b/crypto/testmgr.h
-@@ -17773,6 +17773,317 @@ static const struct aead_testvec hmac_sh
+@@ -16466,6 +16466,317 @@ static const struct aead_testvec hmac_sh
},
};
--- a/crypto/testmgr.c
+++ b/crypto/testmgr.c
-@@ -4414,6 +4414,13 @@ static const struct alg_test_desc alg_te
+@@ -4221,6 +4221,13 @@ static const struct alg_test_desc alg_te
.test = alg_test_null,
.fips_allowed = 1,
}, {
+ }
+ }, {
.alg = "authenc(hmac(sha224),cbc(des))",
+ .generic_driver = "authenc(hmac-sha224-lib,cbc(des-generic))",
.test = alg_test_aead,
- .suite = {
--- a/crypto/testmgr.h
+++ b/crypto/testmgr.h
-@@ -17490,6 +17490,291 @@ static const struct aead_testvec hmac_sh
+@@ -16183,6 +16183,291 @@ static const struct aead_testvec hmac_sh
},
};
--- a/crypto/testmgr.c
+++ b/crypto/testmgr.c
-@@ -4375,6 +4375,13 @@ static const struct alg_test_desc alg_te
+@@ -4177,6 +4177,13 @@ static const struct alg_test_desc alg_te
.cprng = __VECS(ansi_cprng_aes_tv_template)
}
}, {
+ }
+ }, {
.alg = "authenc(hmac(md5),ecb(cipher_null))",
+ .generic_driver = "authenc(hmac-md5-lib,ecb-cipher_null)",
.test = alg_test_aead,
- .suite = {
--- a/crypto/testmgr.h
+++ b/crypto/testmgr.h
-@@ -19021,6 +19021,65 @@ static const struct aead_testvec hmac_sh
+@@ -17714,6 +17714,65 @@ static const struct aead_testvec hmac_sh
},
};
--- a/crypto/testmgr.c
+++ b/crypto/testmgr.c
-@@ -4440,6 +4440,10 @@ static const struct alg_test_desc alg_te
+@@ -4249,6 +4249,10 @@ static const struct alg_test_desc alg_te
.aead = __VECS(hmac_sha224_des3_ede_cbc_tv_temp)
}
}, {
+ .fips_allowed = 1,
+ }, {
.alg = "authenc(hmac(sha256),cbc(aes))",
+ .generic_driver = "authenc(hmac-sha256-lib,cbc(aes-generic))",
.test = alg_test_aead,
- .fips_allowed = 1,
--- a/crypto/testmgr.c
+++ b/crypto/testmgr.c
-@@ -4375,6 +4375,13 @@ static const struct alg_test_desc alg_te
+@@ -4177,6 +4177,13 @@ static const struct alg_test_desc alg_te
.cprng = __VECS(ansi_cprng_aes_tv_template)
}
}, {
.test = alg_test_aead,
--- a/crypto/testmgr.h
+++ b/crypto/testmgr.h
-@@ -18708,6 +18708,63 @@ static const struct aead_testvec hmac_sh
+@@ -17401,6 +17401,63 @@ static const struct aead_testvec hmac_sh
},
};
--- a/crypto/testmgr.c
+++ b/crypto/testmgr.c
-@@ -4425,8 +4425,12 @@ static const struct alg_test_desc alg_te
+@@ -4232,8 +4232,12 @@ static const struct alg_test_desc alg_te
}
}, {
.alg = "authenc(hmac(sha1),rfc3686(ctr(aes)))",
.generic_driver = "authenc(hmac-sha224-lib,cbc(aes-generic))",
--- a/crypto/testmgr.h
+++ b/crypto/testmgr.h
-@@ -17444,6 +17444,227 @@ static const struct aead_testvec hmac_sh
+@@ -16137,6 +16137,227 @@ static const struct aead_testvec hmac_sh
},
};
--- a/crypto/testmgr.c
+++ b/crypto/testmgr.c
-@@ -4452,8 +4452,12 @@ static const struct alg_test_desc alg_te
+@@ -4261,8 +4261,12 @@ static const struct alg_test_desc alg_te
}
}, {
.alg = "authenc(hmac(sha224),rfc3686(ctr(aes)))",
+ }
}, {
.alg = "authenc(hmac(sha256),cbc(aes))",
- .test = alg_test_aead,
+ .generic_driver = "authenc(hmac-sha256-lib,cbc(aes-generic))",
--- a/crypto/testmgr.h
+++ b/crypto/testmgr.h
-@@ -17996,6 +17996,241 @@ static const struct aead_testvec hmac_sh
+@@ -16689,6 +16689,241 @@ static const struct aead_testvec hmac_sh
},
};
--- a/crypto/testmgr.c
+++ b/crypto/testmgr.c
-@@ -4483,8 +4483,12 @@ static const struct alg_test_desc alg_te
- .fips_allowed = 1,
+@@ -4302,8 +4302,12 @@ static const struct alg_test_desc alg_te
+ }
}, {
.alg = "authenc(hmac(sha256),rfc3686(ctr(aes)))",
- .test = alg_test_null,
.generic_driver = "authenc(hmac-sha384-lib,cbc(aes-generic))",
--- a/crypto/testmgr.h
+++ b/crypto/testmgr.h
-@@ -18514,6 +18514,241 @@ static const struct aead_testvec hmac_sh
+@@ -17207,6 +17207,241 @@ static const struct aead_testvec hmac_sh
},
};
--- a/crypto/testmgr.c
+++ b/crypto/testmgr.c
-@@ -4514,8 +4514,12 @@ static const struct alg_test_desc alg_te
- .fips_allowed = 1,
+@@ -4342,8 +4342,12 @@ static const struct alg_test_desc alg_te
+ }
}, {
.alg = "authenc(hmac(sha384),rfc3686(ctr(aes)))",
- .test = alg_test_null,
+ }
}, {
.alg = "authenc(hmac(sha512),cbc(aes))",
- .fips_allowed = 1,
+ .generic_driver = "authenc(hmac-sha512-lib,cbc(aes-generic))",
--- a/crypto/testmgr.h
+++ b/crypto/testmgr.h
-@@ -19060,6 +19060,269 @@ static const struct aead_testvec hmac_sh
+@@ -17753,6 +17753,269 @@ static const struct aead_testvec hmac_sh
},
};
--- a/crypto/testmgr.c
+++ b/crypto/testmgr.c
-@@ -4545,8 +4545,12 @@ static const struct alg_test_desc alg_te
+@@ -4376,8 +4376,12 @@ static const struct alg_test_desc alg_te
.fips_allowed = 1,
}, {
.alg = "authenc(hmac(sha512),rfc3686(ctr(aes)))",
.test = alg_test_hash,
--- a/crypto/testmgr.h
+++ b/crypto/testmgr.h
-@@ -19719,6 +19719,297 @@ static const struct aead_testvec hmac_md
+@@ -18412,6 +18412,297 @@ static const struct aead_testvec hmac_md
},
};
&safexcel_alg_authenc_hmac_sha1_ctr_aes,
&safexcel_alg_authenc_hmac_sha224_ctr_aes,
&safexcel_alg_authenc_hmac_sha256_ctr_aes,
-@@ -1242,11 +1241,12 @@ static struct safexcel_alg_template *saf
+@@ -1241,11 +1240,12 @@ static struct safexcel_alg_template *saf
&safexcel_alg_hmac_sha3_256,
&safexcel_alg_hmac_sha3_384,
&safexcel_alg_hmac_sha3_512,
extern struct safexcel_alg_template safexcel_alg_authenc_hmac_sha1_ctr_aes;
extern struct safexcel_alg_template safexcel_alg_authenc_hmac_sha224_ctr_aes;
extern struct safexcel_alg_template safexcel_alg_authenc_hmac_sha256_ctr_aes;
-@@ -983,11 +982,12 @@ extern struct safexcel_alg_template safe
+@@ -982,11 +981,12 @@ extern struct safexcel_alg_template safe
extern struct safexcel_alg_template safexcel_alg_hmac_sha3_256;
extern struct safexcel_alg_template safexcel_alg_hmac_sha3_384;
extern struct safexcel_alg_template safexcel_alg_hmac_sha3_512;
&safexcel_alg_authenc_hmac_sha1_ctr_aes,
&safexcel_alg_authenc_hmac_sha224_ctr_aes,
&safexcel_alg_authenc_hmac_sha256_ctr_aes,
-@@ -1241,11 +1243,13 @@ static struct safexcel_alg_template *saf
+@@ -1240,11 +1242,13 @@ static struct safexcel_alg_template *saf
&safexcel_alg_hmac_sha3_256,
&safexcel_alg_hmac_sha3_384,
&safexcel_alg_hmac_sha3_512,
extern struct safexcel_alg_template safexcel_alg_authenc_hmac_sha1_ctr_aes;
extern struct safexcel_alg_template safexcel_alg_authenc_hmac_sha224_ctr_aes;
extern struct safexcel_alg_template safexcel_alg_authenc_hmac_sha256_ctr_aes;
-@@ -982,11 +984,13 @@ extern struct safexcel_alg_template safe
+@@ -981,11 +983,13 @@ extern struct safexcel_alg_template safe
extern struct safexcel_alg_template safexcel_alg_hmac_sha3_256;
extern struct safexcel_alg_template safexcel_alg_hmac_sha3_384;
extern struct safexcel_alg_template safexcel_alg_hmac_sha3_512;