mirror of
https://github.com/coolsnowwolf/lede.git
synced 2025-04-16 04:13:31 +00:00
parent
67dcd38678
commit
fae6bc8dd8
@ -10,7 +10,7 @@ Signed-off-by: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com>
|
|||||||
|
|
||||||
--- a/drivers/mtd/spi-nor/core.c
|
--- a/drivers/mtd/spi-nor/core.c
|
||||||
+++ b/drivers/mtd/spi-nor/core.c
|
+++ b/drivers/mtd/spi-nor/core.c
|
||||||
@@ -3161,6 +3161,7 @@ int spi_nor_scan(struct spi_nor *nor, co
|
@@ -3162,6 +3162,7 @@ int spi_nor_scan(struct spi_nor *nor, co
|
||||||
struct device *dev = nor->dev;
|
struct device *dev = nor->dev;
|
||||||
struct mtd_info *mtd = &nor->mtd;
|
struct mtd_info *mtd = &nor->mtd;
|
||||||
struct device_node *np = spi_nor_get_flash_node(nor);
|
struct device_node *np = spi_nor_get_flash_node(nor);
|
||||||
@ -18,7 +18,7 @@ Signed-off-by: Abhimanyu Vishwakarma <Abhimanyu.Vishwakarma@imgtec.com>
|
|||||||
int ret;
|
int ret;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@@ -3215,7 +3216,12 @@ int spi_nor_scan(struct spi_nor *nor, co
|
@@ -3216,7 +3217,12 @@ int spi_nor_scan(struct spi_nor *nor, co
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
|
@ -339,7 +339,7 @@ SVN-Revision: 35130
|
|||||||
list_for_each_entry(p, head, list) {
|
list_for_each_entry(p, head, list) {
|
||||||
--- a/net/ipv4/tcp_output.c
|
--- a/net/ipv4/tcp_output.c
|
||||||
+++ b/net/ipv4/tcp_output.c
|
+++ b/net/ipv4/tcp_output.c
|
||||||
@@ -609,48 +609,53 @@ static void tcp_options_write(__be32 *pt
|
@@ -608,48 +608,53 @@ static void tcp_options_write(__be32 *pt
|
||||||
u16 options = opts->options; /* mungable copy */
|
u16 options = opts->options; /* mungable copy */
|
||||||
|
|
||||||
if (unlikely(OPTION_MD5 & options)) {
|
if (unlikely(OPTION_MD5 & options)) {
|
||||||
@ -416,7 +416,7 @@ SVN-Revision: 35130
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (unlikely(opts->num_sack_blocks)) {
|
if (unlikely(opts->num_sack_blocks)) {
|
||||||
@@ -658,16 +663,17 @@ static void tcp_options_write(__be32 *pt
|
@@ -657,16 +662,17 @@ static void tcp_options_write(__be32 *pt
|
||||||
tp->duplicate_sack : tp->selective_acks;
|
tp->duplicate_sack : tp->selective_acks;
|
||||||
int this_sack;
|
int this_sack;
|
||||||
|
|
||||||
@ -440,7 +440,7 @@ SVN-Revision: 35130
|
|||||||
}
|
}
|
||||||
|
|
||||||
tp->rx_opt.dsack = 0;
|
tp->rx_opt.dsack = 0;
|
||||||
@@ -680,13 +686,14 @@ static void tcp_options_write(__be32 *pt
|
@@ -679,13 +685,14 @@ static void tcp_options_write(__be32 *pt
|
||||||
|
|
||||||
if (foc->exp) {
|
if (foc->exp) {
|
||||||
len = TCPOLEN_EXP_FASTOPEN_BASE + foc->len;
|
len = TCPOLEN_EXP_FASTOPEN_BASE + foc->len;
|
||||||
|
@ -1,60 +0,0 @@
|
|||||||
From 74abbfe99f43eb7466d26d9e48fbeb46b8f3d804 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Serge Semin <Sergey.Semin@baikalelectronics.ru>
|
|
||||||
Date: Tue, 20 Oct 2020 14:59:37 +0300
|
|
||||||
Subject: [PATCH] ARM: dts: BCM5301X: Harmonize EHCI/OHCI DT nodes name
|
|
||||||
|
|
||||||
In accordance with the Generic EHCI/OHCI bindings the corresponding node
|
|
||||||
name is suppose to comply with the Generic USB HCD DT schema, which
|
|
||||||
requires the USB nodes to have the name acceptable by the regexp:
|
|
||||||
"^usb(@.*)?" . Make sure the "generic-ehci" and "generic-ohci"-compatible
|
|
||||||
nodes are correctly named.
|
|
||||||
|
|
||||||
Signed-off-by: Serge Semin <Sergey.Semin@baikalelectronics.ru>
|
|
||||||
Acked-by: Florian Fainelli <f.fainelli@gmail.com>
|
|
||||||
Acked-by: Krzysztof Kozlowski <krzk@kernel.org>
|
|
||||||
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
|
|
||||||
---
|
|
||||||
arch/arm/boot/dts/bcm5301x.dtsi | 4 ++--
|
|
||||||
arch/arm/boot/dts/bcm53573.dtsi | 4 ++--
|
|
||||||
2 files changed, 4 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
--- a/arch/arm/boot/dts/bcm5301x.dtsi
|
|
||||||
+++ b/arch/arm/boot/dts/bcm5301x.dtsi
|
|
||||||
@@ -267,7 +267,7 @@
|
|
||||||
|
|
||||||
interrupt-parent = <&gic>;
|
|
||||||
|
|
||||||
- ehci: ehci@21000 {
|
|
||||||
+ ehci: usb@21000 {
|
|
||||||
#usb-cells = <0>;
|
|
||||||
|
|
||||||
compatible = "generic-ehci";
|
|
||||||
@@ -289,7 +289,7 @@
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
- ohci: ohci@22000 {
|
|
||||||
+ ohci: usb@22000 {
|
|
||||||
#usb-cells = <0>;
|
|
||||||
|
|
||||||
compatible = "generic-ohci";
|
|
||||||
--- a/arch/arm/boot/dts/bcm53573.dtsi
|
|
||||||
+++ b/arch/arm/boot/dts/bcm53573.dtsi
|
|
||||||
@@ -135,7 +135,7 @@
|
|
||||||
#address-cells = <1>;
|
|
||||||
#size-cells = <1>;
|
|
||||||
|
|
||||||
- ehci: ehci@4000 {
|
|
||||||
+ ehci: usb@4000 {
|
|
||||||
compatible = "generic-ehci";
|
|
||||||
reg = <0x4000 0x1000>;
|
|
||||||
interrupt-parent = <&gic>;
|
|
||||||
@@ -155,7 +155,7 @@
|
|
||||||
};
|
|
||||||
};
|
|
||||||
|
|
||||||
- ohci: ohci@d000 {
|
|
||||||
+ ohci: usb@d000 {
|
|
||||||
#usb-cells = <0>;
|
|
||||||
|
|
||||||
compatible = "generic-ohci";
|
|
@ -1,44 +0,0 @@
|
|||||||
From 9fb90ae6cae7f8fe4fbf626945f32cd9da2c3892 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl>
|
|
||||||
Date: Mon, 20 Sep 2021 16:10:23 +0200
|
|
||||||
Subject: [PATCH] ARM: dts: BCM53573: Describe on-SoC BCM53125 rev 4 switch
|
|
||||||
MIME-Version: 1.0
|
|
||||||
Content-Type: text/plain; charset=UTF-8
|
|
||||||
Content-Transfer-Encoding: 8bit
|
|
||||||
|
|
||||||
BCM53573 family SoC have Ethernet switch connected to the first Ethernet
|
|
||||||
controller (accessible over MDIO).
|
|
||||||
|
|
||||||
Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
|
||||||
Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
|
|
||||||
---
|
|
||||||
arch/arm/boot/dts/bcm53573.dtsi | 18 ++++++++++++++++++
|
|
||||||
1 file changed, 18 insertions(+)
|
|
||||||
|
|
||||||
--- a/arch/arm/boot/dts/bcm53573.dtsi
|
|
||||||
+++ b/arch/arm/boot/dts/bcm53573.dtsi
|
|
||||||
@@ -180,6 +180,24 @@
|
|
||||||
|
|
||||||
gmac0: ethernet@5000 {
|
|
||||||
reg = <0x5000 0x1000>;
|
|
||||||
+
|
|
||||||
+ mdio {
|
|
||||||
+ #address-cells = <1>;
|
|
||||||
+ #size-cells = <0>;
|
|
||||||
+
|
|
||||||
+ switch: switch@1e {
|
|
||||||
+ compatible = "brcm,bcm53125";
|
|
||||||
+ reg = <0x1e>;
|
|
||||||
+
|
|
||||||
+ status = "disabled";
|
|
||||||
+
|
|
||||||
+ /* ports are defined in board DTS */
|
|
||||||
+ ports {
|
|
||||||
+ #address-cells = <1>;
|
|
||||||
+ #size-cells = <0>;
|
|
||||||
+ };
|
|
||||||
+ };
|
|
||||||
+ };
|
|
||||||
};
|
|
||||||
|
|
||||||
gmac1: ethernet@b000 {
|
|
@ -127,11 +127,11 @@ it on BCM4708 family.
|
|||||||
/*
|
/*
|
||||||
--- a/drivers/usb/host/xhci.h
|
--- a/drivers/usb/host/xhci.h
|
||||||
+++ b/drivers/usb/host/xhci.h
|
+++ b/drivers/usb/host/xhci.h
|
||||||
@@ -1895,6 +1895,7 @@ struct xhci_hcd {
|
@@ -1896,6 +1896,7 @@ struct xhci_hcd {
|
||||||
#define XHCI_EP_CTX_BROKEN_DCS BIT_ULL(42)
|
|
||||||
#define XHCI_SUSPEND_RESUME_CLKS BIT_ULL(43)
|
|
||||||
#define XHCI_RESET_TO_DEFAULT BIT_ULL(44)
|
#define XHCI_RESET_TO_DEFAULT BIT_ULL(44)
|
||||||
+#define XHCI_FAKE_DOORBELL BIT_ULL(45)
|
#define XHCI_ZHAOXIN_TRB_FETCH BIT_ULL(45)
|
||||||
|
#define XHCI_ZHAOXIN_HOST BIT_ULL(46)
|
||||||
|
+#define XHCI_FAKE_DOORBELL BIT_ULL(47)
|
||||||
|
|
||||||
unsigned int num_active_eps;
|
unsigned int num_active_eps;
|
||||||
unsigned int limit_active_eps;
|
unsigned int limit_active_eps;
|
||||||
|
@ -182,7 +182,7 @@ Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
|
|||||||
+};
|
+};
|
||||||
--- a/arch/arm/boot/dts/bcm4708-linksys-ea6500-v2.dts
|
--- a/arch/arm/boot/dts/bcm4708-linksys-ea6500-v2.dts
|
||||||
+++ b/arch/arm/boot/dts/bcm4708-linksys-ea6500-v2.dts
|
+++ b/arch/arm/boot/dts/bcm4708-linksys-ea6500-v2.dts
|
||||||
@@ -42,3 +42,40 @@
|
@@ -43,3 +43,40 @@
|
||||||
&usb3_phy {
|
&usb3_phy {
|
||||||
status = "okay";
|
status = "okay";
|
||||||
};
|
};
|
||||||
|
@ -116,7 +116,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
|
|||||||
}
|
}
|
||||||
--- a/drivers/gpio/gpiolib.c
|
--- a/drivers/gpio/gpiolib.c
|
||||||
+++ b/drivers/gpio/gpiolib.c
|
+++ b/drivers/gpio/gpiolib.c
|
||||||
@@ -1911,7 +1911,8 @@ int gpiochip_add_pingroup_range(struct g
|
@@ -1924,7 +1924,8 @@ int gpiochip_add_pingroup_range(struct g
|
||||||
|
|
||||||
list_add_tail(&pin_range->node, &gdev->pin_ranges);
|
list_add_tail(&pin_range->node, &gdev->pin_ranges);
|
||||||
|
|
||||||
@ -126,7 +126,7 @@ Signed-off-by: Jonas Gorski <jonas.gorski@gmail.com>
|
|||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(gpiochip_add_pingroup_range);
|
EXPORT_SYMBOL_GPL(gpiochip_add_pingroup_range);
|
||||||
|
|
||||||
@@ -1968,7 +1969,7 @@ int gpiochip_add_pin_range(struct gpio_c
|
@@ -1981,7 +1982,7 @@ int gpiochip_add_pin_range(struct gpio_c
|
||||||
|
|
||||||
list_add_tail(&pin_range->node, &gdev->pin_ranges);
|
list_add_tail(&pin_range->node, &gdev->pin_ranges);
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ Signed-off-by: Jonas Gorski <jogo@openwrt.org>
|
|||||||
|
|
||||||
--- a/arch/mips/Kconfig
|
--- a/arch/mips/Kconfig
|
||||||
+++ b/arch/mips/Kconfig
|
+++ b/arch/mips/Kconfig
|
||||||
@@ -319,6 +319,9 @@ config BCM63XX
|
@@ -320,6 +320,9 @@ config BCM63XX
|
||||||
select SYNC_R4K
|
select SYNC_R4K
|
||||||
select DMA_NONCOHERENT
|
select DMA_NONCOHERENT
|
||||||
select IRQ_MIPS_CPU
|
select IRQ_MIPS_CPU
|
||||||
|
@ -55,7 +55,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
|||||||
|
|
||||||
--- a/net/netfilter/nft_flow_offload.c
|
--- a/net/netfilter/nft_flow_offload.c
|
||||||
+++ b/net/netfilter/nft_flow_offload.c
|
+++ b/net/netfilter/nft_flow_offload.c
|
||||||
@@ -237,47 +237,14 @@ static struct nft_expr_type nft_flow_off
|
@@ -239,47 +239,14 @@ static struct nft_expr_type nft_flow_off
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -12,7 +12,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
|||||||
|
|
||||||
--- a/include/net/netfilter/nf_tables.h
|
--- a/include/net/netfilter/nf_tables.h
|
||||||
+++ b/include/net/netfilter/nf_tables.h
|
+++ b/include/net/netfilter/nf_tables.h
|
||||||
@@ -1500,13 +1500,16 @@ struct nft_trans_chain {
|
@@ -1479,13 +1479,16 @@ struct nft_trans_chain {
|
||||||
|
|
||||||
struct nft_trans_table {
|
struct nft_trans_table {
|
||||||
bool update;
|
bool update;
|
||||||
@ -34,7 +34,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
|||||||
struct nft_set *set;
|
struct nft_set *set;
|
||||||
--- a/net/netfilter/nf_tables_api.c
|
--- a/net/netfilter/nf_tables_api.c
|
||||||
+++ b/net/netfilter/nf_tables_api.c
|
+++ b/net/netfilter/nf_tables_api.c
|
||||||
@@ -1056,6 +1056,12 @@ static void nf_tables_table_disable(stru
|
@@ -1074,6 +1074,12 @@ static void nf_tables_table_disable(stru
|
||||||
nft_table_disable(net, table, 0);
|
nft_table_disable(net, table, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -47,7 +47,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
|||||||
static int nf_tables_updtable(struct nft_ctx *ctx)
|
static int nf_tables_updtable(struct nft_ctx *ctx)
|
||||||
{
|
{
|
||||||
struct nft_trans *trans;
|
struct nft_trans *trans;
|
||||||
@@ -1079,19 +1085,17 @@ static int nf_tables_updtable(struct nft
|
@@ -1097,19 +1103,17 @@ static int nf_tables_updtable(struct nft
|
||||||
|
|
||||||
if ((flags & NFT_TABLE_F_DORMANT) &&
|
if ((flags & NFT_TABLE_F_DORMANT) &&
|
||||||
!(ctx->table->flags & NFT_TABLE_F_DORMANT)) {
|
!(ctx->table->flags & NFT_TABLE_F_DORMANT)) {
|
||||||
@ -70,7 +70,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
|||||||
nft_trans_table_update(trans) = true;
|
nft_trans_table_update(trans) = true;
|
||||||
nft_trans_commit_list_add_tail(ctx->net, trans);
|
nft_trans_commit_list_add_tail(ctx->net, trans);
|
||||||
return 0;
|
return 0;
|
||||||
@@ -8191,11 +8195,10 @@ static int nf_tables_commit(struct net *
|
@@ -8475,11 +8479,10 @@ static int nf_tables_commit(struct net *
|
||||||
switch (trans->msg_type) {
|
switch (trans->msg_type) {
|
||||||
case NFT_MSG_NEWTABLE:
|
case NFT_MSG_NEWTABLE:
|
||||||
if (nft_trans_table_update(trans)) {
|
if (nft_trans_table_update(trans)) {
|
||||||
@ -86,7 +86,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
|||||||
} else {
|
} else {
|
||||||
nft_clear(net, trans->ctx.table);
|
nft_clear(net, trans->ctx.table);
|
||||||
}
|
}
|
||||||
@@ -8414,11 +8417,9 @@ static int __nf_tables_abort(struct net
|
@@ -8728,11 +8731,9 @@ static int __nf_tables_abort(struct net
|
||||||
switch (trans->msg_type) {
|
switch (trans->msg_type) {
|
||||||
case NFT_MSG_NEWTABLE:
|
case NFT_MSG_NEWTABLE:
|
||||||
if (nft_trans_table_update(trans)) {
|
if (nft_trans_table_update(trans)) {
|
||||||
|
@ -38,7 +38,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
|||||||
|
|
||||||
if (unlikely(mac < 0 || mac >= MTK_MAC_COUNT ||
|
if (unlikely(mac < 0 || mac >= MTK_MAC_COUNT ||
|
||||||
!eth->netdev[mac]))
|
!eth->netdev[mac]))
|
||||||
@@ -2275,6 +2275,9 @@ static void mtk_gdm_config(struct mtk_et
|
@@ -2278,6 +2278,9 @@ static void mtk_gdm_config(struct mtk_et
|
||||||
|
|
||||||
val |= config;
|
val |= config;
|
||||||
|
|
||||||
|
@ -27,7 +27,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
|||||||
obj-$(CONFIG_NET_MEDIATEK_STAR_EMAC) += mtk_star_emac.o
|
obj-$(CONFIG_NET_MEDIATEK_STAR_EMAC) += mtk_star_emac.o
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -2300,15 +2300,20 @@ static int mtk_open(struct net_device *d
|
@@ -2303,15 +2303,20 @@ static int mtk_open(struct net_device *d
|
||||||
|
|
||||||
/* we run 2 netdevs on the same dma ring so we only bring it up once */
|
/* we run 2 netdevs on the same dma ring so we only bring it up once */
|
||||||
if (!refcount_read(ð->dma_refcnt)) {
|
if (!refcount_read(ð->dma_refcnt)) {
|
||||||
@ -50,7 +50,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
|||||||
|
|
||||||
napi_enable(ð->tx_napi);
|
napi_enable(ð->tx_napi);
|
||||||
napi_enable(ð->rx_napi);
|
napi_enable(ð->rx_napi);
|
||||||
@@ -2375,6 +2380,9 @@ static int mtk_stop(struct net_device *d
|
@@ -2378,6 +2383,9 @@ static int mtk_stop(struct net_device *d
|
||||||
|
|
||||||
mtk_dma_free(eth);
|
mtk_dma_free(eth);
|
||||||
|
|
||||||
@ -60,7 +60,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -3103,6 +3111,13 @@ static int mtk_probe(struct platform_dev
|
@@ -3106,6 +3114,13 @@ static int mtk_probe(struct platform_dev
|
||||||
goto err_free_dev;
|
goto err_free_dev;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -74,7 +74,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
|||||||
for (i = 0; i < MTK_MAX_DEVS; i++) {
|
for (i = 0; i < MTK_MAX_DEVS; i++) {
|
||||||
if (!eth->netdev[i])
|
if (!eth->netdev[i])
|
||||||
continue;
|
continue;
|
||||||
@@ -3177,6 +3192,7 @@ static const struct mtk_soc_data mt7621_
|
@@ -3180,6 +3195,7 @@ static const struct mtk_soc_data mt7621_
|
||||||
.hw_features = MTK_HW_FEATURES,
|
.hw_features = MTK_HW_FEATURES,
|
||||||
.required_clks = MT7621_CLKS_BITMAP,
|
.required_clks = MT7621_CLKS_BITMAP,
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
@ -82,7 +82,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
|||||||
};
|
};
|
||||||
|
|
||||||
static const struct mtk_soc_data mt7622_data = {
|
static const struct mtk_soc_data mt7622_data = {
|
||||||
@@ -3185,6 +3201,7 @@ static const struct mtk_soc_data mt7622_
|
@@ -3188,6 +3204,7 @@ static const struct mtk_soc_data mt7622_
|
||||||
.hw_features = MTK_HW_FEATURES,
|
.hw_features = MTK_HW_FEATURES,
|
||||||
.required_clks = MT7622_CLKS_BITMAP,
|
.required_clks = MT7622_CLKS_BITMAP,
|
||||||
.required_pctl = false,
|
.required_pctl = false,
|
||||||
|
@ -21,7 +21,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
|||||||
obj-$(CONFIG_NET_MEDIATEK_STAR_EMAC) += mtk_star_emac.o
|
obj-$(CONFIG_NET_MEDIATEK_STAR_EMAC) += mtk_star_emac.o
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -2858,6 +2858,7 @@ static const struct net_device_ops mtk_n
|
@@ -2861,6 +2861,7 @@ static const struct net_device_ops mtk_n
|
||||||
#ifdef CONFIG_NET_POLL_CONTROLLER
|
#ifdef CONFIG_NET_POLL_CONTROLLER
|
||||||
.ndo_poll_controller = mtk_poll_controller,
|
.ndo_poll_controller = mtk_poll_controller,
|
||||||
#endif
|
#endif
|
||||||
@ -29,7 +29,7 @@ Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
|||||||
};
|
};
|
||||||
|
|
||||||
static int mtk_add_mac(struct mtk_eth *eth, struct device_node *np)
|
static int mtk_add_mac(struct mtk_eth *eth, struct device_node *np)
|
||||||
@@ -3116,6 +3117,10 @@ static int mtk_probe(struct platform_dev
|
@@ -3119,6 +3120,10 @@ static int mtk_probe(struct platform_dev
|
||||||
eth->base + MTK_ETH_PPE_BASE, 2);
|
eth->base + MTK_ETH_PPE_BASE, 2);
|
||||||
if (err)
|
if (err)
|
||||||
goto err_free_dev;
|
goto err_free_dev;
|
||||||
|
@ -15,7 +15,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -2235,7 +2235,7 @@ static int mtk_start_dma(struct mtk_eth
|
@@ -2238,7 +2238,7 @@ static int mtk_start_dma(struct mtk_eth
|
||||||
if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA)) {
|
if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA)) {
|
||||||
mtk_w32(eth,
|
mtk_w32(eth,
|
||||||
MTK_TX_WB_DDONE | MTK_TX_DMA_EN |
|
MTK_TX_WB_DDONE | MTK_TX_DMA_EN |
|
||||||
|
@ -87,7 +87,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
if (mtk_queue_stopped(eth) &&
|
if (mtk_queue_stopped(eth) &&
|
||||||
(atomic_read(&ring->free_count) > ring->thresh))
|
(atomic_read(&ring->free_count) > ring->thresh))
|
||||||
mtk_wake_queue(eth);
|
mtk_wake_queue(eth);
|
||||||
@@ -2171,6 +2186,7 @@ static irqreturn_t mtk_handle_irq_rx(int
|
@@ -2174,6 +2189,7 @@ static irqreturn_t mtk_handle_irq_rx(int
|
||||||
{
|
{
|
||||||
struct mtk_eth *eth = _eth;
|
struct mtk_eth *eth = _eth;
|
||||||
|
|
||||||
@ -95,7 +95,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
if (likely(napi_schedule_prep(ð->rx_napi))) {
|
if (likely(napi_schedule_prep(ð->rx_napi))) {
|
||||||
__napi_schedule(ð->rx_napi);
|
__napi_schedule(ð->rx_napi);
|
||||||
mtk_rx_irq_disable(eth, MTK_RX_DONE_INT);
|
mtk_rx_irq_disable(eth, MTK_RX_DONE_INT);
|
||||||
@@ -2183,6 +2199,7 @@ static irqreturn_t mtk_handle_irq_tx(int
|
@@ -2186,6 +2202,7 @@ static irqreturn_t mtk_handle_irq_tx(int
|
||||||
{
|
{
|
||||||
struct mtk_eth *eth = _eth;
|
struct mtk_eth *eth = _eth;
|
||||||
|
|
||||||
@ -103,7 +103,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
if (likely(napi_schedule_prep(ð->tx_napi))) {
|
if (likely(napi_schedule_prep(ð->tx_napi))) {
|
||||||
__napi_schedule(ð->tx_napi);
|
__napi_schedule(ð->tx_napi);
|
||||||
mtk_tx_irq_disable(eth, MTK_TX_DONE_INT);
|
mtk_tx_irq_disable(eth, MTK_TX_DONE_INT);
|
||||||
@@ -2370,6 +2387,9 @@ static int mtk_stop(struct net_device *d
|
@@ -2373,6 +2390,9 @@ static int mtk_stop(struct net_device *d
|
||||||
napi_disable(ð->tx_napi);
|
napi_disable(ð->tx_napi);
|
||||||
napi_disable(ð->rx_napi);
|
napi_disable(ð->rx_napi);
|
||||||
|
|
||||||
@ -113,7 +113,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA))
|
if (MTK_HAS_CAPS(eth->soc->caps, MTK_QDMA))
|
||||||
mtk_stop_dma(eth, MTK_QDMA_GLO_CFG);
|
mtk_stop_dma(eth, MTK_QDMA_GLO_CFG);
|
||||||
mtk_stop_dma(eth, MTK_PDMA_GLO_CFG);
|
mtk_stop_dma(eth, MTK_PDMA_GLO_CFG);
|
||||||
@@ -2422,6 +2442,64 @@ err_disable_clks:
|
@@ -2425,6 +2445,64 @@ err_disable_clks:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -178,7 +178,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
static int mtk_hw_init(struct mtk_eth *eth)
|
static int mtk_hw_init(struct mtk_eth *eth)
|
||||||
{
|
{
|
||||||
int i, val, ret;
|
int i, val, ret;
|
||||||
@@ -2443,9 +2521,6 @@ static int mtk_hw_init(struct mtk_eth *e
|
@@ -2446,9 +2524,6 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||||
goto err_disable_pm;
|
goto err_disable_pm;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -188,7 +188,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
/* disable delay and normal interrupt */
|
/* disable delay and normal interrupt */
|
||||||
mtk_tx_irq_disable(eth, ~0);
|
mtk_tx_irq_disable(eth, ~0);
|
||||||
mtk_rx_irq_disable(eth, ~0);
|
mtk_rx_irq_disable(eth, ~0);
|
||||||
@@ -2484,11 +2559,11 @@ static int mtk_hw_init(struct mtk_eth *e
|
@@ -2487,11 +2562,11 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||||
/* Enable RX VLan Offloading */
|
/* Enable RX VLan Offloading */
|
||||||
mtk_w32(eth, 1, MTK_CDMP_EG_CTRL);
|
mtk_w32(eth, 1, MTK_CDMP_EG_CTRL);
|
||||||
|
|
||||||
@ -203,7 +203,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
mtk_tx_irq_disable(eth, ~0);
|
mtk_tx_irq_disable(eth, ~0);
|
||||||
mtk_rx_irq_disable(eth, ~0);
|
mtk_rx_irq_disable(eth, ~0);
|
||||||
|
|
||||||
@@ -2993,6 +3068,13 @@ static int mtk_probe(struct platform_dev
|
@@ -2996,6 +3071,13 @@ static int mtk_probe(struct platform_dev
|
||||||
spin_lock_init(ð->page_lock);
|
spin_lock_init(ð->page_lock);
|
||||||
spin_lock_init(ð->tx_irq_lock);
|
spin_lock_init(ð->tx_irq_lock);
|
||||||
spin_lock_init(ð->rx_irq_lock);
|
spin_lock_init(ð->rx_irq_lock);
|
||||||
|
@ -19,7 +19,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -2075,25 +2075,22 @@ static int mtk_set_features(struct net_d
|
@@ -2078,25 +2078,22 @@ static int mtk_set_features(struct net_d
|
||||||
/* wait for DMA to finish whatever it is doing before we start using it again */
|
/* wait for DMA to finish whatever it is doing before we start using it again */
|
||||||
static int mtk_dma_busy_wait(struct mtk_eth *eth)
|
static int mtk_dma_busy_wait(struct mtk_eth *eth)
|
||||||
{
|
{
|
||||||
|
@ -48,7 +48,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
return buf_size;
|
return buf_size;
|
||||||
}
|
}
|
||||||
@@ -2630,6 +2630,35 @@ static void mtk_uninit(struct net_device
|
@@ -2633,6 +2633,35 @@ static void mtk_uninit(struct net_device
|
||||||
mtk_rx_irq_disable(eth, ~0);
|
mtk_rx_irq_disable(eth, ~0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -84,7 +84,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
static int mtk_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
|
static int mtk_do_ioctl(struct net_device *dev, struct ifreq *ifr, int cmd)
|
||||||
{
|
{
|
||||||
struct mtk_mac *mac = netdev_priv(dev);
|
struct mtk_mac *mac = netdev_priv(dev);
|
||||||
@@ -2926,6 +2955,7 @@ static const struct net_device_ops mtk_n
|
@@ -2929,6 +2958,7 @@ static const struct net_device_ops mtk_n
|
||||||
.ndo_set_mac_address = mtk_set_mac_address,
|
.ndo_set_mac_address = mtk_set_mac_address,
|
||||||
.ndo_validate_addr = eth_validate_addr,
|
.ndo_validate_addr = eth_validate_addr,
|
||||||
.ndo_do_ioctl = mtk_do_ioctl,
|
.ndo_do_ioctl = mtk_do_ioctl,
|
||||||
@ -92,7 +92,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
.ndo_tx_timeout = mtk_tx_timeout,
|
.ndo_tx_timeout = mtk_tx_timeout,
|
||||||
.ndo_get_stats64 = mtk_get_stats64,
|
.ndo_get_stats64 = mtk_get_stats64,
|
||||||
.ndo_fix_features = mtk_fix_features,
|
.ndo_fix_features = mtk_fix_features,
|
||||||
@@ -3028,7 +3058,10 @@ static int mtk_add_mac(struct mtk_eth *e
|
@@ -3031,7 +3061,10 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||||
eth->netdev[id]->irq = eth->irq[0];
|
eth->netdev[id]->irq = eth->irq[0];
|
||||||
eth->netdev[id]->dev.of_node = np;
|
eth->netdev[id]->dev.of_node = np;
|
||||||
|
|
||||||
|
@ -646,7 +646,7 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Reposition in the original skb */
|
/* Reposition in the original skb */
|
||||||
@@ -5197,6 +5218,20 @@ bool skb_try_coalesce(struct sk_buff *to
|
@@ -5203,6 +5224,20 @@ bool skb_try_coalesce(struct sk_buff *to
|
||||||
if (skb_cloned(to))
|
if (skb_cloned(to))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
--- a/net/core/skbuff.c
|
--- a/net/core/skbuff.c
|
||||||
+++ b/net/core/skbuff.c
|
+++ b/net/core/skbuff.c
|
||||||
@@ -5218,18 +5218,18 @@ bool skb_try_coalesce(struct sk_buff *to
|
@@ -5224,18 +5224,18 @@ bool skb_try_coalesce(struct sk_buff *to
|
||||||
if (skb_cloned(to))
|
if (skb_cloned(to))
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
@ -895,7 +895,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -2604,14 +2604,11 @@ static int __init mtk_init(struct net_de
|
@@ -2607,14 +2607,11 @@ static int __init mtk_init(struct net_de
|
||||||
{
|
{
|
||||||
struct mtk_mac *mac = netdev_priv(dev);
|
struct mtk_mac *mac = netdev_priv(dev);
|
||||||
struct mtk_eth *eth = mac->hw;
|
struct mtk_eth *eth = mac->hw;
|
||||||
|
@ -205,7 +205,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
static struct phy_driver at803x_driver[] = {
|
static struct phy_driver at803x_driver[] = {
|
||||||
{
|
{
|
||||||
/* Qualcomm Atheros AR8035 */
|
/* Qualcomm Atheros AR8035 */
|
||||||
@@ -1198,7 +1315,20 @@ static struct phy_driver at803x_driver[]
|
@@ -1196,7 +1313,20 @@ static struct phy_driver at803x_driver[]
|
||||||
.read_status = at803x_read_status,
|
.read_status = at803x_read_status,
|
||||||
.soft_reset = genphy_soft_reset,
|
.soft_reset = genphy_soft_reset,
|
||||||
.config_aneg = at803x_config_aneg,
|
.config_aneg = at803x_config_aneg,
|
||||||
|
@ -17,7 +17,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
--- a/drivers/net/phy/at803x.c
|
--- a/drivers/net/phy/at803x.c
|
||||||
+++ b/drivers/net/phy/at803x.c
|
+++ b/drivers/net/phy/at803x.c
|
||||||
@@ -1328,6 +1328,19 @@ static struct phy_driver at803x_driver[]
|
@@ -1326,6 +1326,19 @@ static struct phy_driver at803x_driver[]
|
||||||
.get_sset_count = at803x_get_sset_count,
|
.get_sset_count = at803x_get_sset_count,
|
||||||
.get_strings = at803x_get_strings,
|
.get_strings = at803x_get_strings,
|
||||||
.get_stats = at803x_get_stats,
|
.get_stats = at803x_get_stats,
|
||||||
@ -37,7 +37,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
}, };
|
}, };
|
||||||
|
|
||||||
module_phy_driver(at803x_driver);
|
module_phy_driver(at803x_driver);
|
||||||
@@ -1338,6 +1351,8 @@ static struct mdio_device_id __maybe_unu
|
@@ -1336,6 +1349,8 @@ static struct mdio_device_id __maybe_unu
|
||||||
{ PHY_ID_MATCH_EXACT(ATH8032_PHY_ID) },
|
{ PHY_ID_MATCH_EXACT(ATH8032_PHY_ID) },
|
||||||
{ PHY_ID_MATCH_EXACT(ATH8035_PHY_ID) },
|
{ PHY_ID_MATCH_EXACT(ATH8035_PHY_ID) },
|
||||||
{ PHY_ID_MATCH_EXACT(ATH9331_PHY_ID) },
|
{ PHY_ID_MATCH_EXACT(ATH9331_PHY_ID) },
|
||||||
|
@ -26,7 +26,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
#define QCA8337_PHY_ID 0x004dd036
|
#define QCA8337_PHY_ID 0x004dd036
|
||||||
#define QCA8K_PHY_ID_MASK 0xffffffff
|
#define QCA8K_PHY_ID_MASK 0xffffffff
|
||||||
|
|
||||||
@@ -1329,10 +1330,23 @@ static struct phy_driver at803x_driver[]
|
@@ -1327,10 +1328,23 @@ static struct phy_driver at803x_driver[]
|
||||||
.get_strings = at803x_get_strings,
|
.get_strings = at803x_get_strings,
|
||||||
.get_stats = at803x_get_stats,
|
.get_stats = at803x_get_stats,
|
||||||
}, {
|
}, {
|
||||||
@ -53,7 +53,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
/* PHY_GBIT_FEATURES */
|
/* PHY_GBIT_FEATURES */
|
||||||
.probe = at803x_probe,
|
.probe = at803x_probe,
|
||||||
.flags = PHY_IS_INTERNAL,
|
.flags = PHY_IS_INTERNAL,
|
||||||
@@ -1352,7 +1366,8 @@ static struct mdio_device_id __maybe_unu
|
@@ -1350,7 +1364,8 @@ static struct mdio_device_id __maybe_unu
|
||||||
{ PHY_ID_MATCH_EXACT(ATH8035_PHY_ID) },
|
{ PHY_ID_MATCH_EXACT(ATH8035_PHY_ID) },
|
||||||
{ PHY_ID_MATCH_EXACT(ATH9331_PHY_ID) },
|
{ PHY_ID_MATCH_EXACT(ATH9331_PHY_ID) },
|
||||||
{ PHY_ID_MATCH_EXACT(QCA8337_PHY_ID) },
|
{ PHY_ID_MATCH_EXACT(QCA8337_PHY_ID) },
|
||||||
|
@ -16,7 +16,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
--- a/drivers/net/phy/at803x.c
|
--- a/drivers/net/phy/at803x.c
|
||||||
+++ b/drivers/net/phy/at803x.c
|
+++ b/drivers/net/phy/at803x.c
|
||||||
@@ -1329,6 +1329,8 @@ static struct phy_driver at803x_driver[]
|
@@ -1327,6 +1327,8 @@ static struct phy_driver at803x_driver[]
|
||||||
.get_sset_count = at803x_get_sset_count,
|
.get_sset_count = at803x_get_sset_count,
|
||||||
.get_strings = at803x_get_strings,
|
.get_strings = at803x_get_strings,
|
||||||
.get_stats = at803x_get_stats,
|
.get_stats = at803x_get_stats,
|
||||||
@ -25,7 +25,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
}, {
|
}, {
|
||||||
/* QCA8327-A from switch QCA8327-AL1A */
|
/* QCA8327-A from switch QCA8327-AL1A */
|
||||||
.phy_id = QCA8327_A_PHY_ID,
|
.phy_id = QCA8327_A_PHY_ID,
|
||||||
@@ -1342,6 +1344,8 @@ static struct phy_driver at803x_driver[]
|
@@ -1340,6 +1342,8 @@ static struct phy_driver at803x_driver[]
|
||||||
.get_sset_count = at803x_get_sset_count,
|
.get_sset_count = at803x_get_sset_count,
|
||||||
.get_strings = at803x_get_strings,
|
.get_strings = at803x_get_strings,
|
||||||
.get_stats = at803x_get_stats,
|
.get_stats = at803x_get_stats,
|
||||||
@ -34,7 +34,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
}, {
|
}, {
|
||||||
/* QCA8327-B from switch QCA8327-BL1A */
|
/* QCA8327-B from switch QCA8327-BL1A */
|
||||||
.phy_id = QCA8327_B_PHY_ID,
|
.phy_id = QCA8327_B_PHY_ID,
|
||||||
@@ -1355,6 +1359,8 @@ static struct phy_driver at803x_driver[]
|
@@ -1353,6 +1357,8 @@ static struct phy_driver at803x_driver[]
|
||||||
.get_sset_count = at803x_get_sset_count,
|
.get_sset_count = at803x_get_sset_count,
|
||||||
.get_strings = at803x_get_strings,
|
.get_strings = at803x_get_strings,
|
||||||
.get_stats = at803x_get_stats,
|
.get_stats = at803x_get_stats,
|
||||||
|
@ -15,7 +15,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
--- a/drivers/net/phy/at803x.c
|
--- a/drivers/net/phy/at803x.c
|
||||||
+++ b/drivers/net/phy/at803x.c
|
+++ b/drivers/net/phy/at803x.c
|
||||||
@@ -1318,47 +1318,47 @@ static struct phy_driver at803x_driver[]
|
@@ -1316,47 +1316,47 @@ static struct phy_driver at803x_driver[]
|
||||||
.config_aneg = at803x_config_aneg,
|
.config_aneg = at803x_config_aneg,
|
||||||
}, {
|
}, {
|
||||||
/* QCA8337 */
|
/* QCA8337 */
|
||||||
|
@ -96,7 +96,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
static struct phy_driver at803x_driver[] = {
|
static struct phy_driver at803x_driver[] = {
|
||||||
{
|
{
|
||||||
/* Qualcomm Atheros AR8035 */
|
/* Qualcomm Atheros AR8035 */
|
||||||
@@ -1329,8 +1386,8 @@ static struct phy_driver at803x_driver[]
|
@@ -1327,8 +1384,8 @@ static struct phy_driver at803x_driver[]
|
||||||
.get_sset_count = at803x_get_sset_count,
|
.get_sset_count = at803x_get_sset_count,
|
||||||
.get_strings = at803x_get_strings,
|
.get_strings = at803x_get_strings,
|
||||||
.get_stats = at803x_get_stats,
|
.get_stats = at803x_get_stats,
|
||||||
@ -107,7 +107,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
}, {
|
}, {
|
||||||
/* QCA8327-A from switch QCA8327-AL1A */
|
/* QCA8327-A from switch QCA8327-AL1A */
|
||||||
.phy_id = QCA8327_A_PHY_ID,
|
.phy_id = QCA8327_A_PHY_ID,
|
||||||
@@ -1344,8 +1401,8 @@ static struct phy_driver at803x_driver[]
|
@@ -1342,8 +1399,8 @@ static struct phy_driver at803x_driver[]
|
||||||
.get_sset_count = at803x_get_sset_count,
|
.get_sset_count = at803x_get_sset_count,
|
||||||
.get_strings = at803x_get_strings,
|
.get_strings = at803x_get_strings,
|
||||||
.get_stats = at803x_get_stats,
|
.get_stats = at803x_get_stats,
|
||||||
@ -118,7 +118,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
}, {
|
}, {
|
||||||
/* QCA8327-B from switch QCA8327-BL1A */
|
/* QCA8327-B from switch QCA8327-BL1A */
|
||||||
.phy_id = QCA8327_B_PHY_ID,
|
.phy_id = QCA8327_B_PHY_ID,
|
||||||
@@ -1359,8 +1416,8 @@ static struct phy_driver at803x_driver[]
|
@@ -1357,8 +1414,8 @@ static struct phy_driver at803x_driver[]
|
||||||
.get_sset_count = at803x_get_sset_count,
|
.get_sset_count = at803x_get_sset_count,
|
||||||
.get_strings = at803x_get_strings,
|
.get_strings = at803x_get_strings,
|
||||||
.get_stats = at803x_get_stats,
|
.get_stats = at803x_get_stats,
|
||||||
|
@ -65,7 +65,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
static int qca83xx_resume(struct phy_device *phydev)
|
static int qca83xx_resume(struct phy_device *phydev)
|
||||||
{
|
{
|
||||||
int ret, val;
|
int ret, val;
|
||||||
@@ -1379,6 +1409,7 @@ static struct phy_driver at803x_driver[]
|
@@ -1377,6 +1407,7 @@ static struct phy_driver at803x_driver[]
|
||||||
.phy_id_mask = QCA8K_PHY_ID_MASK,
|
.phy_id_mask = QCA8K_PHY_ID_MASK,
|
||||||
.name = "Qualcomm Atheros 8337 internal PHY",
|
.name = "Qualcomm Atheros 8337 internal PHY",
|
||||||
/* PHY_GBIT_FEATURES */
|
/* PHY_GBIT_FEATURES */
|
||||||
@ -73,7 +73,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
.probe = at803x_probe,
|
.probe = at803x_probe,
|
||||||
.flags = PHY_IS_INTERNAL,
|
.flags = PHY_IS_INTERNAL,
|
||||||
.config_init = qca83xx_config_init,
|
.config_init = qca83xx_config_init,
|
||||||
@@ -1394,6 +1425,7 @@ static struct phy_driver at803x_driver[]
|
@@ -1392,6 +1423,7 @@ static struct phy_driver at803x_driver[]
|
||||||
.phy_id_mask = QCA8K_PHY_ID_MASK,
|
.phy_id_mask = QCA8K_PHY_ID_MASK,
|
||||||
.name = "Qualcomm Atheros 8327-A internal PHY",
|
.name = "Qualcomm Atheros 8327-A internal PHY",
|
||||||
/* PHY_GBIT_FEATURES */
|
/* PHY_GBIT_FEATURES */
|
||||||
@ -81,7 +81,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
.probe = at803x_probe,
|
.probe = at803x_probe,
|
||||||
.flags = PHY_IS_INTERNAL,
|
.flags = PHY_IS_INTERNAL,
|
||||||
.config_init = qca83xx_config_init,
|
.config_init = qca83xx_config_init,
|
||||||
@@ -1409,6 +1441,7 @@ static struct phy_driver at803x_driver[]
|
@@ -1407,6 +1439,7 @@ static struct phy_driver at803x_driver[]
|
||||||
.phy_id_mask = QCA8K_PHY_ID_MASK,
|
.phy_id_mask = QCA8K_PHY_ID_MASK,
|
||||||
.name = "Qualcomm Atheros 8327-B internal PHY",
|
.name = "Qualcomm Atheros 8327-B internal PHY",
|
||||||
/* PHY_GBIT_FEATURES */
|
/* PHY_GBIT_FEATURES */
|
||||||
|
@ -89,7 +89,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
struct tally_counter {
|
struct tally_counter {
|
||||||
__le64 tx_packets;
|
__le64 tx_packets;
|
||||||
__le64 rx_packets;
|
__le64 rx_packets;
|
||||||
@@ -6604,7 +6581,7 @@ static int rtl_fw_init(struct r8152 *tp)
|
@@ -6607,7 +6584,7 @@ static int rtl_fw_init(struct r8152 *tp)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,7 +98,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
{
|
{
|
||||||
struct usb_device *udev = interface_to_usbdev(intf);
|
struct usb_device *udev = interface_to_usbdev(intf);
|
||||||
u32 ocp_data = 0;
|
u32 ocp_data = 0;
|
||||||
@@ -6689,12 +6666,13 @@ static u8 rtl_get_version(struct usb_int
|
@@ -6666,12 +6643,13 @@ static u8 rtl_get_version(struct usb_int
|
||||||
|
|
||||||
return version;
|
return version;
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
if (test_bit(RTL8152_UNPLUG, &tp->flags))
|
if (test_bit(RTL8152_UNPLUG, &tp->flags))
|
||||||
return;
|
return;
|
||||||
@@ -6724,7 +6722,7 @@ static int rtl8152_probe(struct usb_inte
|
@@ -6701,7 +6699,7 @@ static int rtl8152_probe(struct usb_inte
|
||||||
mutex_init(&tp->control);
|
mutex_init(&tp->control);
|
||||||
INIT_DELAYED_WORK(&tp->schedule, rtl_work_func_t);
|
INIT_DELAYED_WORK(&tp->schedule, rtl_work_func_t);
|
||||||
INIT_DELAYED_WORK(&tp->hw_phy_work, rtl_hw_phy_work_func_t);
|
INIT_DELAYED_WORK(&tp->hw_phy_work, rtl_hw_phy_work_func_t);
|
||||||
|
@ -25,7 +25,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
--- a/drivers/net/usb/r8152.c
|
--- a/drivers/net/usb/r8152.c
|
||||||
+++ b/drivers/net/usb/r8152.c
|
+++ b/drivers/net/usb/r8152.c
|
||||||
@@ -3445,59 +3445,76 @@ static void rtl_clear_bp(struct r8152 *t
|
@@ -3448,59 +3448,76 @@ static void rtl_clear_bp(struct r8152 *t
|
||||||
ocp_write_word(tp, type, PLA_BP_BA, 0);
|
ocp_write_word(tp, type, PLA_BP_BA, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -127,7 +127,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, tp->ocp_base);
|
ocp_write_word(tp, MCU_TYPE_PLA, PLA_OCP_GPHY_BASE, tp->ocp_base);
|
||||||
|
|
||||||
@@ -3982,7 +3999,7 @@ static void rtl8152_fw_mac_apply(struct
|
@@ -3985,7 +4002,7 @@ static void rtl8152_fw_mac_apply(struct
|
||||||
dev_dbg(&tp->intf->dev, "successfully applied %s\n", mac->info);
|
dev_dbg(&tp->intf->dev, "successfully applied %s\n", mac->info);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -136,7 +136,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
{
|
{
|
||||||
struct rtl_fw *rtl_fw = &tp->rtl_fw;
|
struct rtl_fw *rtl_fw = &tp->rtl_fw;
|
||||||
const struct firmware *fw;
|
const struct firmware *fw;
|
||||||
@@ -4013,12 +4030,11 @@ static void rtl8152_apply_firmware(struc
|
@@ -4016,12 +4033,11 @@ static void rtl8152_apply_firmware(struc
|
||||||
case RTL_FW_PHY_START:
|
case RTL_FW_PHY_START:
|
||||||
key = (struct fw_phy_patch_key *)block;
|
key = (struct fw_phy_patch_key *)block;
|
||||||
key_addr = __le16_to_cpu(key->key_reg);
|
key_addr = __le16_to_cpu(key->key_reg);
|
||||||
@ -151,7 +151,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
break;
|
break;
|
||||||
case RTL_FW_PHY_NC:
|
case RTL_FW_PHY_NC:
|
||||||
rtl8152_fw_phy_nc_apply(tp, (struct fw_phy_nc *)block);
|
rtl8152_fw_phy_nc_apply(tp, (struct fw_phy_nc *)block);
|
||||||
@@ -4223,7 +4239,7 @@ static void rtl8152_disable(struct r8152
|
@@ -4226,7 +4242,7 @@ static void rtl8152_disable(struct r8152
|
||||||
|
|
||||||
static void r8152b_hw_phy_cfg(struct r8152 *tp)
|
static void r8152b_hw_phy_cfg(struct r8152 *tp)
|
||||||
{
|
{
|
||||||
@ -160,7 +160,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
rtl_eee_enable(tp, tp->eee_en);
|
rtl_eee_enable(tp, tp->eee_en);
|
||||||
r8152_aldps_en(tp, true);
|
r8152_aldps_en(tp, true);
|
||||||
r8152b_enable_fc(tp);
|
r8152b_enable_fc(tp);
|
||||||
@@ -4505,7 +4521,7 @@ static void r8153_hw_phy_cfg(struct r815
|
@@ -4508,7 +4524,7 @@ static void r8153_hw_phy_cfg(struct r815
|
||||||
/* disable EEE before updating the PHY parameters */
|
/* disable EEE before updating the PHY parameters */
|
||||||
rtl_eee_enable(tp, false);
|
rtl_eee_enable(tp, false);
|
||||||
|
|
||||||
@ -169,7 +169,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
if (tp->version == RTL_VER_03) {
|
if (tp->version == RTL_VER_03) {
|
||||||
data = ocp_reg_read(tp, OCP_EEE_CFG);
|
data = ocp_reg_read(tp, OCP_EEE_CFG);
|
||||||
@@ -4579,7 +4595,7 @@ static void r8153b_hw_phy_cfg(struct r81
|
@@ -4582,7 +4598,7 @@ static void r8153b_hw_phy_cfg(struct r81
|
||||||
/* disable EEE before updating the PHY parameters */
|
/* disable EEE before updating the PHY parameters */
|
||||||
rtl_eee_enable(tp, false);
|
rtl_eee_enable(tp, false);
|
||||||
|
|
||||||
@ -178,7 +178,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
r8153b_green_en(tp, test_bit(GREEN_ETHERNET, &tp->flags));
|
r8153b_green_en(tp, test_bit(GREEN_ETHERNET, &tp->flags));
|
||||||
|
|
||||||
@@ -4620,7 +4636,7 @@ static void r8153b_hw_phy_cfg(struct r81
|
@@ -4623,7 +4639,7 @@ static void r8153b_hw_phy_cfg(struct r81
|
||||||
ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data);
|
ocp_write_word(tp, MCU_TYPE_PLA, PLA_PHY_PWR, ocp_data);
|
||||||
|
|
||||||
/* Advnace EEE */
|
/* Advnace EEE */
|
||||||
@ -187,7 +187,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
data = ocp_reg_read(tp, OCP_POWER_CFG);
|
data = ocp_reg_read(tp, OCP_POWER_CFG);
|
||||||
data |= EEE_CLKDIV_EN;
|
data |= EEE_CLKDIV_EN;
|
||||||
ocp_reg_write(tp, OCP_POWER_CFG, data);
|
ocp_reg_write(tp, OCP_POWER_CFG, data);
|
||||||
@@ -4637,7 +4653,7 @@ static void r8153b_hw_phy_cfg(struct r81
|
@@ -4640,7 +4656,7 @@ static void r8153b_hw_phy_cfg(struct r81
|
||||||
ocp_reg_write(tp, OCP_SYSCLK_CFG, clk_div_expo(5));
|
ocp_reg_write(tp, OCP_SYSCLK_CFG, clk_div_expo(5));
|
||||||
tp->ups_info._250m_ckdiv = true;
|
tp->ups_info._250m_ckdiv = true;
|
||||||
|
|
||||||
|
@ -31,7 +31,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
static int rtl8152_set_mac_address(struct net_device *netdev, void *p)
|
static int rtl8152_set_mac_address(struct net_device *netdev, void *p)
|
||||||
{
|
{
|
||||||
struct r8152 *tp = netdev_priv(netdev);
|
struct r8152 *tp = netdev_priv(netdev);
|
||||||
@@ -3184,8 +3188,6 @@ static void r8153b_ups_en(struct r8152 *
|
@@ -3187,8 +3191,6 @@ static void r8153b_ups_en(struct r8152 *
|
||||||
ocp_data |= BIT(0);
|
ocp_data |= BIT(0);
|
||||||
ocp_write_byte(tp, MCU_TYPE_USB, 0xcfff, ocp_data);
|
ocp_write_byte(tp, MCU_TYPE_USB, 0xcfff, ocp_data);
|
||||||
} else {
|
} else {
|
||||||
@ -40,7 +40,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
ocp_data &= ~(UPS_EN | USP_PREWAKE);
|
ocp_data &= ~(UPS_EN | USP_PREWAKE);
|
||||||
ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data);
|
ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data);
|
||||||
|
|
||||||
@@ -3193,31 +3195,20 @@ static void r8153b_ups_en(struct r8152 *
|
@@ -3196,31 +3198,20 @@ static void r8153b_ups_en(struct r8152 *
|
||||||
ocp_data &= ~BIT(0);
|
ocp_data &= ~BIT(0);
|
||||||
ocp_write_byte(tp, MCU_TYPE_USB, 0xcfff, ocp_data);
|
ocp_write_byte(tp, MCU_TYPE_USB, 0xcfff, ocp_data);
|
||||||
|
|
||||||
@ -83,7 +83,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -4589,13 +4580,37 @@ static void r8153b_hw_phy_cfg(struct r81
|
@@ -4592,13 +4583,37 @@ static void r8153b_hw_phy_cfg(struct r81
|
||||||
u32 ocp_data;
|
u32 ocp_data;
|
||||||
u16 data;
|
u16 data;
|
||||||
|
|
||||||
@ -122,7 +122,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
r8153b_green_en(tp, test_bit(GREEN_ETHERNET, &tp->flags));
|
r8153b_green_en(tp, test_bit(GREEN_ETHERNET, &tp->flags));
|
||||||
|
|
||||||
@@ -5524,9 +5539,6 @@ static void r8153b_init(struct r8152 *tp
|
@@ -5527,9 +5542,6 @@ static void r8153b_init(struct r8152 *tp
|
||||||
/* MSC timer = 0xfff * 8ms = 32760 ms */
|
/* MSC timer = 0xfff * 8ms = 32760 ms */
|
||||||
ocp_write_word(tp, MCU_TYPE_USB, USB_MSC_TIMER, 0x0fff);
|
ocp_write_word(tp, MCU_TYPE_USB, USB_MSC_TIMER, 0x0fff);
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
--- a/drivers/net/usb/r8152.c
|
--- a/drivers/net/usb/r8152.c
|
||||||
+++ b/drivers/net/usb/r8152.c
|
+++ b/drivers/net/usb/r8152.c
|
||||||
@@ -3337,7 +3337,7 @@ static void rtl8153b_runtime_enable(stru
|
@@ -3340,7 +3340,7 @@ static void rtl8153b_runtime_enable(stru
|
||||||
r8153b_ups_en(tp, false);
|
r8153b_ups_en(tp, false);
|
||||||
r8153_queue_wake(tp, false);
|
r8153_queue_wake(tp, false);
|
||||||
rtl_runtime_suspend_enable(tp, false);
|
rtl_runtime_suspend_enable(tp, false);
|
||||||
@ -25,7 +25,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
r8153b_u1u2en(tp, true);
|
r8153b_u1u2en(tp, true);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -5030,7 +5030,7 @@ static void rtl8153b_up(struct r8152 *tp
|
@@ -5033,7 +5033,7 @@ static void rtl8153b_up(struct r8152 *tp
|
||||||
|
|
||||||
r8153_aldps_en(tp, true);
|
r8153_aldps_en(tp, true);
|
||||||
|
|
||||||
@ -34,7 +34,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
r8153b_u1u2en(tp, true);
|
r8153b_u1u2en(tp, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -5552,8 +5552,9 @@ static void r8153b_init(struct r8152 *tp
|
@@ -5555,8 +5555,9 @@ static void r8153b_init(struct r8152 *tp
|
||||||
ocp_data |= POLL_LINK_CHG;
|
ocp_data |= POLL_LINK_CHG;
|
||||||
ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data);
|
ocp_write_word(tp, MCU_TYPE_PLA, PLA_EXTRA_STATUS, ocp_data);
|
||||||
|
|
||||||
|
@ -15,7 +15,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
--- a/drivers/net/usb/r8152.c
|
--- a/drivers/net/usb/r8152.c
|
||||||
+++ b/drivers/net/usb/r8152.c
|
+++ b/drivers/net/usb/r8152.c
|
||||||
@@ -5737,6 +5737,9 @@ static int rtl8152_runtime_suspend(struc
|
@@ -5740,6 +5740,9 @@ static int rtl8152_runtime_suspend(struc
|
||||||
struct net_device *netdev = tp->netdev;
|
struct net_device *netdev = tp->netdev;
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
@ -25,7 +25,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
set_bit(SELECTIVE_SUSPEND, &tp->flags);
|
set_bit(SELECTIVE_SUSPEND, &tp->flags);
|
||||||
smp_mb__after_atomic();
|
smp_mb__after_atomic();
|
||||||
|
|
||||||
@@ -6136,6 +6139,11 @@ rtl_ethtool_get_eee(struct net_device *n
|
@@ -6139,6 +6142,11 @@ rtl_ethtool_get_eee(struct net_device *n
|
||||||
struct r8152 *tp = netdev_priv(net);
|
struct r8152 *tp = netdev_priv(net);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
@ -37,7 +37,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
ret = usb_autopm_get_interface(tp->intf);
|
ret = usb_autopm_get_interface(tp->intf);
|
||||||
if (ret < 0)
|
if (ret < 0)
|
||||||
goto out;
|
goto out;
|
||||||
@@ -6158,6 +6166,11 @@ rtl_ethtool_set_eee(struct net_device *n
|
@@ -6161,6 +6169,11 @@ rtl_ethtool_set_eee(struct net_device *n
|
||||||
struct r8152 *tp = netdev_priv(net);
|
struct r8152 *tp = netdev_priv(net);
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
@ -16,7 +16,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
--- a/drivers/net/usb/r8152.c
|
--- a/drivers/net/usb/r8152.c
|
||||||
+++ b/drivers/net/usb/r8152.c
|
+++ b/drivers/net/usb/r8152.c
|
||||||
@@ -6573,7 +6573,7 @@ static int rtl_ops_init(struct r8152 *tp
|
@@ -6576,7 +6576,7 @@ static int rtl_ops_init(struct r8152 *tp
|
||||||
|
|
||||||
default:
|
default:
|
||||||
ret = -ENODEV;
|
ret = -ENODEV;
|
||||||
@ -25,7 +25,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -6857,7 +6857,7 @@ static int rtl8152_probe(struct usb_inte
|
@@ -6834,7 +6834,7 @@ static int rtl8152_probe(struct usb_inte
|
||||||
|
|
||||||
ret = register_netdev(netdev);
|
ret = register_netdev(netdev);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
|
@ -15,7 +15,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
|
|
||||||
--- a/drivers/net/usb/r8152.c
|
--- a/drivers/net/usb/r8152.c
|
||||||
+++ b/drivers/net/usb/r8152.c
|
+++ b/drivers/net/usb/r8152.c
|
||||||
@@ -2634,21 +2634,24 @@ static inline u8 rtl8152_get_speed(struc
|
@@ -2637,21 +2637,24 @@ static inline u8 rtl8152_get_speed(struc
|
||||||
return ocp_read_byte(tp, MCU_TYPE_PLA, PLA_PHYSTATUS);
|
return ocp_read_byte(tp, MCU_TYPE_PLA, PLA_PHYSTATUS);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -50,7 +50,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void rxdy_gated_en(struct r8152 *tp, bool enable)
|
static void rxdy_gated_en(struct r8152 *tp, bool enable)
|
||||||
@@ -3129,10 +3132,22 @@ static void r8153b_ups_flags(struct r815
|
@@ -3132,10 +3135,22 @@ static void r8153b_ups_flags(struct r815
|
||||||
ocp_write_dword(tp, MCU_TYPE_USB, USB_UPS_FLAGS, ups_flags);
|
ocp_write_dword(tp, MCU_TYPE_USB, USB_UPS_FLAGS, ups_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -74,7 +74,7 @@ Signed-off-by: Jakub Kicinski <kuba@kernel.org>
|
|||||||
if (enable) {
|
if (enable) {
|
||||||
sram_write(tp, 0x8045, 0); /* 10M abiq&ldvbias */
|
sram_write(tp, 0x8045, 0); /* 10M abiq&ldvbias */
|
||||||
sram_write(tp, 0x804d, 0x1222); /* 100M short abiq&ldvbias */
|
sram_write(tp, 0x804d, 0x1222); /* 100M short abiq&ldvbias */
|
||||||
@@ -3143,11 +3158,7 @@ static void r8153b_green_en(struct r8152
|
@@ -3146,11 +3161,7 @@ static void r8153b_green_en(struct r8152
|
||||||
sram_write(tp, 0x805d, 0x2444); /* 1000M short abiq&ldvbias */
|
sram_write(tp, 0x805d, 0x2444); /* 1000M short abiq&ldvbias */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -34,7 +34,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
/* PLA_MTPS */
|
/* PLA_MTPS */
|
||||||
#define MTPS_JUMBO (12 * 1024 / 64)
|
#define MTPS_JUMBO (12 * 1024 / 64)
|
||||||
@@ -2749,6 +2752,29 @@ static int rtl_stop_rx(struct r8152 *tp)
|
@@ -2752,6 +2755,29 @@ static int rtl_stop_rx(struct r8152 *tp)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -64,7 +64,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
static inline void r8153b_rx_agg_chg_indicate(struct r8152 *tp)
|
static inline void r8153b_rx_agg_chg_indicate(struct r8152 *tp)
|
||||||
{
|
{
|
||||||
ocp_write_byte(tp, MCU_TYPE_USB, USB_UPT_RXDMA_OWN,
|
ocp_write_byte(tp, MCU_TYPE_USB, USB_UPT_RXDMA_OWN,
|
||||||
@@ -2852,6 +2878,8 @@ static int rtl8153_enable(struct r8152 *
|
@@ -2855,6 +2881,8 @@ static int rtl8153_enable(struct r8152 *
|
||||||
r8153_set_rx_early_timeout(tp);
|
r8153_set_rx_early_timeout(tp);
|
||||||
r8153_set_rx_early_size(tp);
|
r8153_set_rx_early_size(tp);
|
||||||
|
|
||||||
|
@ -30,7 +30,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
/**
|
/**
|
||||||
* struct fw_mac - a firmware block used by RTL_FW_PLA and RTL_FW_USB.
|
* struct fw_mac - a firmware block used by RTL_FW_PLA and RTL_FW_USB.
|
||||||
* The layout of the firmware block is:
|
* The layout of the firmware block is:
|
||||||
@@ -3802,10 +3810,7 @@ static long rtl8152_check_firmware(struc
|
@@ -3805,10 +3813,7 @@ static long rtl8152_check_firmware(struc
|
||||||
{
|
{
|
||||||
const struct firmware *fw = rtl_fw->fw;
|
const struct firmware *fw = rtl_fw->fw;
|
||||||
struct fw_header *fw_hdr = (struct fw_header *)fw->data;
|
struct fw_header *fw_hdr = (struct fw_header *)fw->data;
|
||||||
@ -42,7 +42,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
long ret = -EFAULT;
|
long ret = -EFAULT;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@@ -3834,50 +3839,52 @@ static long rtl8152_check_firmware(struc
|
@@ -3837,50 +3842,52 @@ static long rtl8152_check_firmware(struc
|
||||||
goto fail;
|
goto fail;
|
||||||
goto fw_end;
|
goto fw_end;
|
||||||
case RTL_FW_PLA:
|
case RTL_FW_PLA:
|
||||||
@ -106,7 +106,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
dev_err(&tp->intf->dev,
|
dev_err(&tp->intf->dev,
|
||||||
"Check PHY_STOP fail\n");
|
"Check PHY_STOP fail\n");
|
||||||
goto fail;
|
goto fail;
|
||||||
@@ -3888,28 +3895,28 @@ static long rtl8152_check_firmware(struc
|
@@ -3891,28 +3898,28 @@ static long rtl8152_check_firmware(struc
|
||||||
"Invalid length for PHY_STOP\n");
|
"Invalid length for PHY_STOP\n");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
@ -141,7 +141,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -3923,7 +3930,7 @@ static long rtl8152_check_firmware(struc
|
@@ -3926,7 +3933,7 @@ static long rtl8152_check_firmware(struc
|
||||||
}
|
}
|
||||||
|
|
||||||
fw_end:
|
fw_end:
|
||||||
|
@ -57,7 +57,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
static
|
static
|
||||||
int get_registers(struct r8152 *tp, u16 value, u16 index, u16 size, void *data)
|
int get_registers(struct r8152 *tp, u16 value, u16 index, u16 size, void *data)
|
||||||
@@ -2634,10 +2632,7 @@ static void rtl8152_nic_reset(struct r81
|
@@ -2637,10 +2635,7 @@ static void rtl8152_nic_reset(struct r81
|
||||||
|
|
||||||
static void set_tx_qlen(struct r8152 *tp)
|
static void set_tx_qlen(struct r8152 *tp)
|
||||||
{
|
{
|
||||||
@ -69,7 +69,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
}
|
}
|
||||||
|
|
||||||
static inline u8 rtl8152_get_speed(struct r8152 *tp)
|
static inline u8 rtl8152_get_speed(struct r8152 *tp)
|
||||||
@@ -4726,6 +4721,12 @@ static void r8153b_hw_phy_cfg(struct r81
|
@@ -4729,6 +4724,12 @@ static void r8153b_hw_phy_cfg(struct r81
|
||||||
set_bit(PHY_RESET, &tp->flags);
|
set_bit(PHY_RESET, &tp->flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -82,7 +82,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
static void r8153_first_init(struct r8152 *tp)
|
static void r8153_first_init(struct r8152 *tp)
|
||||||
{
|
{
|
||||||
u32 ocp_data;
|
u32 ocp_data;
|
||||||
@@ -4758,9 +4759,7 @@ static void r8153_first_init(struct r815
|
@@ -4761,9 +4762,7 @@ static void r8153_first_init(struct r815
|
||||||
|
|
||||||
rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX);
|
rtl_rx_vlan_en(tp, tp->netdev->features & NETIF_F_HW_VLAN_CTAG_RX);
|
||||||
|
|
||||||
@ -93,7 +93,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0);
|
ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_TCR0);
|
||||||
ocp_data |= TCR0_AUTO_FIFO;
|
ocp_data |= TCR0_AUTO_FIFO;
|
||||||
@@ -4795,8 +4794,7 @@ static void r8153_enter_oob(struct r8152
|
@@ -4798,8 +4797,7 @@ static void r8153_enter_oob(struct r8152
|
||||||
|
|
||||||
wait_oob_link_list_ready(tp);
|
wait_oob_link_list_ready(tp);
|
||||||
|
|
||||||
@ -103,7 +103,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
switch (tp->version) {
|
switch (tp->version) {
|
||||||
case RTL_VER_03:
|
case RTL_VER_03:
|
||||||
@@ -6497,12 +6495,21 @@ static int rtl8152_change_mtu(struct net
|
@@ -6500,12 +6498,21 @@ static int rtl8152_change_mtu(struct net
|
||||||
dev->mtu = new_mtu;
|
dev->mtu = new_mtu;
|
||||||
|
|
||||||
if (netif_running(dev)) {
|
if (netif_running(dev)) {
|
||||||
@ -130,7 +130,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
}
|
}
|
||||||
|
|
||||||
mutex_unlock(&tp->control);
|
mutex_unlock(&tp->control);
|
||||||
@@ -6591,6 +6598,7 @@ static int rtl_ops_init(struct r8152 *tp
|
@@ -6594,6 +6601,7 @@ static int rtl_ops_init(struct r8152 *tp
|
||||||
ops->in_nway = rtl8153_in_nway;
|
ops->in_nway = rtl8153_in_nway;
|
||||||
ops->hw_phy_cfg = r8153_hw_phy_cfg;
|
ops->hw_phy_cfg = r8153_hw_phy_cfg;
|
||||||
ops->autosuspend_en = rtl8153_runtime_enable;
|
ops->autosuspend_en = rtl8153_runtime_enable;
|
||||||
@ -138,7 +138,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
if (tp->udev->speed < USB_SPEED_SUPER)
|
if (tp->udev->speed < USB_SPEED_SUPER)
|
||||||
tp->rx_buf_sz = 16 * 1024;
|
tp->rx_buf_sz = 16 * 1024;
|
||||||
else
|
else
|
||||||
@@ -6612,6 +6620,7 @@ static int rtl_ops_init(struct r8152 *tp
|
@@ -6615,6 +6623,7 @@ static int rtl_ops_init(struct r8152 *tp
|
||||||
ops->in_nway = rtl8153_in_nway;
|
ops->in_nway = rtl8153_in_nway;
|
||||||
ops->hw_phy_cfg = r8153b_hw_phy_cfg;
|
ops->hw_phy_cfg = r8153b_hw_phy_cfg;
|
||||||
ops->autosuspend_en = rtl8153b_runtime_enable;
|
ops->autosuspend_en = rtl8153b_runtime_enable;
|
||||||
@ -146,7 +146,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
tp->rx_buf_sz = 32 * 1024;
|
tp->rx_buf_sz = 32 * 1024;
|
||||||
tp->eee_en = true;
|
tp->eee_en = true;
|
||||||
tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX;
|
tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX;
|
||||||
@@ -6859,7 +6868,7 @@ static int rtl8152_probe(struct usb_inte
|
@@ -6836,7 +6845,7 @@ static int rtl8152_probe(struct usb_inte
|
||||||
netdev->max_mtu = ETH_DATA_LEN;
|
netdev->max_mtu = ETH_DATA_LEN;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
@ -379,7 +379,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
/* Maximum number of multicast addresses to filter (vs. Rx-all-multicast).
|
/* Maximum number of multicast addresses to filter (vs. Rx-all-multicast).
|
||||||
* The RTL chips use a 64 element hash table based on the Ethernet CRC.
|
* The RTL chips use a 64 element hash table based on the Ethernet CRC.
|
||||||
@@ -2608,7 +2713,7 @@ static netdev_tx_t rtl8152_start_xmit(st
|
@@ -2611,7 +2716,7 @@ static netdev_tx_t rtl8152_start_xmit(st
|
||||||
|
|
||||||
static void r8152b_reset_packet_filter(struct r8152 *tp)
|
static void r8152b_reset_packet_filter(struct r8152 *tp)
|
||||||
{
|
{
|
||||||
@ -388,7 +388,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_FMC);
|
ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_FMC);
|
||||||
ocp_data &= ~FMC_FCR_MCU_EN;
|
ocp_data &= ~FMC_FCR_MCU_EN;
|
||||||
@@ -2619,14 +2724,47 @@ static void r8152b_reset_packet_filter(s
|
@@ -2622,14 +2727,47 @@ static void r8152b_reset_packet_filter(s
|
||||||
|
|
||||||
static void rtl8152_nic_reset(struct r8152 *tp)
|
static void rtl8152_nic_reset(struct r8152 *tp)
|
||||||
{
|
{
|
||||||
@ -442,7 +442,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2635,9 +2773,9 @@ static void set_tx_qlen(struct r8152 *tp
|
@@ -2638,9 +2776,9 @@ static void set_tx_qlen(struct r8152 *tp
|
||||||
tp->tx_qlen = agg_buf_sz / (mtu_to_size(tp->netdev->mtu) + sizeof(struct tx_desc));
|
tp->tx_qlen = agg_buf_sz / (mtu_to_size(tp->netdev->mtu) + sizeof(struct tx_desc));
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -454,7 +454,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void rtl_eee_plus_en(struct r8152 *tp, bool enable)
|
static void rtl_eee_plus_en(struct r8152 *tp, bool enable)
|
||||||
@@ -2797,6 +2935,7 @@ static int rtl_enable(struct r8152 *tp)
|
@@ -2800,6 +2938,7 @@ static int rtl_enable(struct r8152 *tp)
|
||||||
switch (tp->version) {
|
switch (tp->version) {
|
||||||
case RTL_VER_08:
|
case RTL_VER_08:
|
||||||
case RTL_VER_09:
|
case RTL_VER_09:
|
||||||
@ -462,7 +462,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
r8153b_rx_agg_chg_indicate(tp);
|
r8153b_rx_agg_chg_indicate(tp);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@@ -2834,6 +2973,7 @@ static void r8153_set_rx_early_timeout(s
|
@@ -2837,6 +2976,7 @@ static void r8153_set_rx_early_timeout(s
|
||||||
|
|
||||||
case RTL_VER_08:
|
case RTL_VER_08:
|
||||||
case RTL_VER_09:
|
case RTL_VER_09:
|
||||||
@ -470,7 +470,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
/* The RTL8153B uses USB_RX_EXTRA_AGGR_TMR for rx timeout
|
/* The RTL8153B uses USB_RX_EXTRA_AGGR_TMR for rx timeout
|
||||||
* primarily. For USB_RX_EARLY_TIMEOUT, we fix it to 128ns.
|
* primarily. For USB_RX_EARLY_TIMEOUT, we fix it to 128ns.
|
||||||
*/
|
*/
|
||||||
@@ -2843,6 +2983,18 @@ static void r8153_set_rx_early_timeout(s
|
@@ -2846,6 +2986,18 @@ static void r8153_set_rx_early_timeout(s
|
||||||
ocp_data);
|
ocp_data);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -489,7 +489,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -2862,8 +3014,19 @@ static void r8153_set_rx_early_size(stru
|
@@ -2865,8 +3017,19 @@ static void r8153_set_rx_early_size(stru
|
||||||
break;
|
break;
|
||||||
case RTL_VER_08:
|
case RTL_VER_08:
|
||||||
case RTL_VER_09:
|
case RTL_VER_09:
|
||||||
@ -509,7 +509,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
WARN_ON_ONCE(1);
|
WARN_ON_ONCE(1);
|
||||||
@@ -2873,6 +3036,8 @@ static void r8153_set_rx_early_size(stru
|
@@ -2876,6 +3039,8 @@ static void r8153_set_rx_early_size(stru
|
||||||
|
|
||||||
static int rtl8153_enable(struct r8152 *tp)
|
static int rtl8153_enable(struct r8152 *tp)
|
||||||
{
|
{
|
||||||
@ -518,7 +518,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
if (test_bit(RTL8152_UNPLUG, &tp->flags))
|
if (test_bit(RTL8152_UNPLUG, &tp->flags))
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
@@ -2883,15 +3048,18 @@ static int rtl8153_enable(struct r8152 *
|
@@ -2886,15 +3051,18 @@ static int rtl8153_enable(struct r8152 *
|
||||||
|
|
||||||
rtl_set_ifg(tp, rtl8152_get_speed(tp));
|
rtl_set_ifg(tp, rtl8152_get_speed(tp));
|
||||||
|
|
||||||
@ -540,7 +540,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
}
|
}
|
||||||
|
|
||||||
return rtl_enable(tp);
|
return rtl_enable(tp);
|
||||||
@@ -2956,12 +3124,40 @@ static void rtl_rx_vlan_en(struct r8152
|
@@ -2959,12 +3127,40 @@ static void rtl_rx_vlan_en(struct r8152
|
||||||
{
|
{
|
||||||
u32 ocp_data;
|
u32 ocp_data;
|
||||||
|
|
||||||
@ -587,7 +587,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int rtl8152_set_features(struct net_device *dev,
|
static int rtl8152_set_features(struct net_device *dev,
|
||||||
@@ -3054,6 +3250,40 @@ static void __rtl_set_wol(struct r8152 *
|
@@ -3057,6 +3253,40 @@ static void __rtl_set_wol(struct r8152 *
|
||||||
device_set_wakeup_enable(&tp->udev->dev, false);
|
device_set_wakeup_enable(&tp->udev->dev, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -628,7 +628,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
static void r8153_u1u2en(struct r8152 *tp, bool enable)
|
static void r8153_u1u2en(struct r8152 *tp, bool enable)
|
||||||
{
|
{
|
||||||
u8 u1u2[8];
|
u8 u1u2[8];
|
||||||
@@ -3113,6 +3343,9 @@ static void r8153b_ups_flags(struct r815
|
@@ -3116,6 +3346,9 @@ static void r8153b_ups_flags(struct r815
|
||||||
if (tp->ups_info.eee_cmod_lv)
|
if (tp->ups_info.eee_cmod_lv)
|
||||||
ups_flags |= UPS_FLAGS_EEE_CMOD_LV_EN;
|
ups_flags |= UPS_FLAGS_EEE_CMOD_LV_EN;
|
||||||
|
|
||||||
@ -638,7 +638,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
if (tp->ups_info._10m_ckdiv)
|
if (tp->ups_info._10m_ckdiv)
|
||||||
ups_flags |= UPS_FLAGS_EN_10M_CKDIV;
|
ups_flags |= UPS_FLAGS_EN_10M_CKDIV;
|
||||||
|
|
||||||
@@ -3163,6 +3396,88 @@ static void r8153b_ups_flags(struct r815
|
@@ -3166,6 +3399,88 @@ static void r8153b_ups_flags(struct r815
|
||||||
ocp_write_dword(tp, MCU_TYPE_USB, USB_UPS_FLAGS, ups_flags);
|
ocp_write_dword(tp, MCU_TYPE_USB, USB_UPS_FLAGS, ups_flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -727,7 +727,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
static void rtl_green_en(struct r8152 *tp, bool enable)
|
static void rtl_green_en(struct r8152 *tp, bool enable)
|
||||||
{
|
{
|
||||||
u16 data;
|
u16 data;
|
||||||
@@ -3226,16 +3541,16 @@ static void r8153b_ups_en(struct r8152 *
|
@@ -3229,16 +3544,16 @@ static void r8153b_ups_en(struct r8152 *
|
||||||
ocp_data |= UPS_EN | USP_PREWAKE | PHASE2_EN;
|
ocp_data |= UPS_EN | USP_PREWAKE | PHASE2_EN;
|
||||||
ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data);
|
ocp_write_byte(tp, MCU_TYPE_USB, USB_POWER_CUT, ocp_data);
|
||||||
|
|
||||||
@ -750,7 +750,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
if (ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0) & PCUT_STATUS) {
|
if (ocp_read_word(tp, MCU_TYPE_USB, USB_MISC_0) & PCUT_STATUS) {
|
||||||
int i;
|
int i;
|
||||||
@@ -3255,6 +3570,95 @@ static void r8153b_ups_en(struct r8152 *
|
@@ -3258,6 +3573,95 @@ static void r8153b_ups_en(struct r8152 *
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -846,7 +846,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
static void r8153_power_cut_en(struct r8152 *tp, bool enable)
|
static void r8153_power_cut_en(struct r8152 *tp, bool enable)
|
||||||
{
|
{
|
||||||
u32 ocp_data;
|
u32 ocp_data;
|
||||||
@@ -3384,6 +3788,38 @@ static void rtl8153b_runtime_enable(stru
|
@@ -3387,6 +3791,38 @@ static void rtl8153b_runtime_enable(stru
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -885,7 +885,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
static void r8153_teredo_off(struct r8152 *tp)
|
static void r8153_teredo_off(struct r8152 *tp)
|
||||||
{
|
{
|
||||||
u32 ocp_data;
|
u32 ocp_data;
|
||||||
@@ -3404,14 +3840,19 @@ static void r8153_teredo_off(struct r815
|
@@ -3407,14 +3843,19 @@ static void r8153_teredo_off(struct r815
|
||||||
|
|
||||||
case RTL_VER_08:
|
case RTL_VER_08:
|
||||||
case RTL_VER_09:
|
case RTL_VER_09:
|
||||||
@ -908,7 +908,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
}
|
}
|
||||||
|
|
||||||
ocp_write_word(tp, MCU_TYPE_PLA, PLA_WDT6_CTRL, WDT6_SET_MODE);
|
ocp_write_word(tp, MCU_TYPE_PLA, PLA_WDT6_CTRL, WDT6_SET_MODE);
|
||||||
@@ -3446,6 +3887,12 @@ static void rtl_clear_bp(struct r8152 *t
|
@@ -3449,6 +3890,12 @@ static void rtl_clear_bp(struct r8152 *t
|
||||||
break;
|
break;
|
||||||
case RTL_VER_08:
|
case RTL_VER_08:
|
||||||
case RTL_VER_09:
|
case RTL_VER_09:
|
||||||
@ -921,7 +921,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
default:
|
default:
|
||||||
if (type == MCU_TYPE_USB) {
|
if (type == MCU_TYPE_USB) {
|
||||||
ocp_write_word(tp, MCU_TYPE_USB, USB_BP2_EN, 0);
|
ocp_write_word(tp, MCU_TYPE_USB, USB_BP2_EN, 0);
|
||||||
@@ -3655,6 +4102,11 @@ static bool rtl8152_is_fw_mac_ok(struct
|
@@ -3658,6 +4105,11 @@ static bool rtl8152_is_fw_mac_ok(struct
|
||||||
case RTL_VER_06:
|
case RTL_VER_06:
|
||||||
case RTL_VER_08:
|
case RTL_VER_08:
|
||||||
case RTL_VER_09:
|
case RTL_VER_09:
|
||||||
@ -933,7 +933,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
fw_reg = 0xf800;
|
fw_reg = 0xf800;
|
||||||
bp_ba_addr = PLA_BP_BA;
|
bp_ba_addr = PLA_BP_BA;
|
||||||
bp_en_addr = PLA_BP_EN;
|
bp_en_addr = PLA_BP_EN;
|
||||||
@@ -3678,6 +4130,11 @@ static bool rtl8152_is_fw_mac_ok(struct
|
@@ -3681,6 +4133,11 @@ static bool rtl8152_is_fw_mac_ok(struct
|
||||||
break;
|
break;
|
||||||
case RTL_VER_08:
|
case RTL_VER_08:
|
||||||
case RTL_VER_09:
|
case RTL_VER_09:
|
||||||
@ -945,7 +945,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
fw_reg = 0xe600;
|
fw_reg = 0xe600;
|
||||||
bp_ba_addr = USB_BP_BA;
|
bp_ba_addr = USB_BP_BA;
|
||||||
bp_en_addr = USB_BP2_EN;
|
bp_en_addr = USB_BP2_EN;
|
||||||
@@ -4217,6 +4674,22 @@ static void r8153_eee_en(struct r8152 *t
|
@@ -4220,6 +4677,22 @@ static void r8153_eee_en(struct r8152 *t
|
||||||
tp->ups_info.eee = enable;
|
tp->ups_info.eee = enable;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -968,7 +968,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
static void rtl_eee_enable(struct r8152 *tp, bool enable)
|
static void rtl_eee_enable(struct r8152 *tp, bool enable)
|
||||||
{
|
{
|
||||||
switch (tp->version) {
|
switch (tp->version) {
|
||||||
@@ -4238,6 +4711,7 @@ static void rtl_eee_enable(struct r8152
|
@@ -4241,6 +4714,7 @@ static void rtl_eee_enable(struct r8152
|
||||||
case RTL_VER_06:
|
case RTL_VER_06:
|
||||||
case RTL_VER_08:
|
case RTL_VER_08:
|
||||||
case RTL_VER_09:
|
case RTL_VER_09:
|
||||||
@ -976,7 +976,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
if (enable) {
|
if (enable) {
|
||||||
r8153_eee_en(tp, true);
|
r8153_eee_en(tp, true);
|
||||||
ocp_reg_write(tp, OCP_EEE_ADV, tp->eee_adv);
|
ocp_reg_write(tp, OCP_EEE_ADV, tp->eee_adv);
|
||||||
@@ -4246,6 +4720,19 @@ static void rtl_eee_enable(struct r8152
|
@@ -4249,6 +4723,19 @@ static void rtl_eee_enable(struct r8152
|
||||||
ocp_reg_write(tp, OCP_EEE_ADV, 0);
|
ocp_reg_write(tp, OCP_EEE_ADV, 0);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -996,7 +996,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -4292,6 +4779,20 @@ static void wait_oob_link_list_ready(str
|
@@ -4295,6 +4782,20 @@ static void wait_oob_link_list_ready(str
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1017,7 +1017,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
static void r8152b_exit_oob(struct r8152 *tp)
|
static void r8152b_exit_oob(struct r8152 *tp)
|
||||||
{
|
{
|
||||||
u32 ocp_data;
|
u32 ocp_data;
|
||||||
@@ -4342,7 +4843,7 @@ static void r8152b_exit_oob(struct r8152
|
@@ -4345,7 +4846,7 @@ static void r8152b_exit_oob(struct r8152
|
||||||
}
|
}
|
||||||
|
|
||||||
/* TX share fifo free credit full threshold */
|
/* TX share fifo free credit full threshold */
|
||||||
@ -1026,7 +1026,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
ocp_write_byte(tp, MCU_TYPE_USB, USB_TX_AGG, TX_AGG_MAX_THRESHOLD);
|
ocp_write_byte(tp, MCU_TYPE_USB, USB_TX_AGG, TX_AGG_MAX_THRESHOLD);
|
||||||
ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, RX_THR_HIGH);
|
ocp_write_dword(tp, MCU_TYPE_USB, USB_RX_BUF_TH, RX_THR_HIGH);
|
||||||
@@ -4519,6 +5020,21 @@ static int r8153b_post_firmware_1(struct
|
@@ -4522,6 +5023,21 @@ static int r8153b_post_firmware_1(struct
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1048,7 +1048,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
static void r8153_aldps_en(struct r8152 *tp, bool enable)
|
static void r8153_aldps_en(struct r8152 *tp, bool enable)
|
||||||
{
|
{
|
||||||
u16 data;
|
u16 data;
|
||||||
@@ -4721,6 +5237,13 @@ static void r8153b_hw_phy_cfg(struct r81
|
@@ -4724,6 +5240,13 @@ static void r8153b_hw_phy_cfg(struct r81
|
||||||
set_bit(PHY_RESET, &tp->flags);
|
set_bit(PHY_RESET, &tp->flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1062,7 +1062,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
static void rtl8153_change_mtu(struct r8152 *tp)
|
static void rtl8153_change_mtu(struct r8152 *tp)
|
||||||
{
|
{
|
||||||
ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, mtu_to_size(tp->netdev->mtu));
|
ocp_write_word(tp, MCU_TYPE_PLA, PLA_RMS, mtu_to_size(tp->netdev->mtu));
|
||||||
@@ -4808,6 +5331,7 @@ static void r8153_enter_oob(struct r8152
|
@@ -4811,6 +5334,7 @@ static void r8153_enter_oob(struct r8152
|
||||||
|
|
||||||
case RTL_VER_08:
|
case RTL_VER_08:
|
||||||
case RTL_VER_09:
|
case RTL_VER_09:
|
||||||
@ -1070,7 +1070,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
/* Clear teredo wake event. bit[15:8] is the teredo wakeup
|
/* Clear teredo wake event. bit[15:8] is the teredo wakeup
|
||||||
* type. Set it to zero. bits[7:0] are the W1C bits about
|
* type. Set it to zero. bits[7:0] are the W1C bits about
|
||||||
* the events. Set them to all 1 to clear them.
|
* the events. Set them to all 1 to clear them.
|
||||||
@@ -4844,6 +5368,96 @@ static void rtl8153_disable(struct r8152
|
@@ -4847,6 +5371,96 @@ static void rtl8153_disable(struct r8152
|
||||||
r8153_aldps_en(tp, true);
|
r8153_aldps_en(tp, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1167,7 +1167,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
static int rtl8152_set_speed(struct r8152 *tp, u8 autoneg, u32 speed, u8 duplex,
|
static int rtl8152_set_speed(struct r8152 *tp, u8 autoneg, u32 speed, u8 duplex,
|
||||||
u32 advertising)
|
u32 advertising)
|
||||||
{
|
{
|
||||||
@@ -4892,58 +5506,73 @@ static int rtl8152_set_speed(struct r815
|
@@ -4895,58 +5509,73 @@ static int rtl8152_set_speed(struct r815
|
||||||
|
|
||||||
tp->mii.force_media = 1;
|
tp->mii.force_media = 1;
|
||||||
} else {
|
} else {
|
||||||
@ -1259,7 +1259,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
}
|
}
|
||||||
|
|
||||||
bmcr = BMCR_ANENABLE | BMCR_ANRESTART;
|
bmcr = BMCR_ANENABLE | BMCR_ANRESTART;
|
||||||
@@ -5099,6 +5728,253 @@ static void rtl8153b_down(struct r8152 *
|
@@ -5102,6 +5731,253 @@ static void rtl8153b_down(struct r8152 *
|
||||||
r8153_aldps_en(tp, true);
|
r8153_aldps_en(tp, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1513,7 +1513,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
static bool rtl8152_in_nway(struct r8152 *tp)
|
static bool rtl8152_in_nway(struct r8152 *tp)
|
||||||
{
|
{
|
||||||
u16 nway_state;
|
u16 nway_state;
|
||||||
@@ -5129,7 +6005,7 @@ static void set_carrier(struct r8152 *tp
|
@@ -5132,7 +6008,7 @@ static void set_carrier(struct r8152 *tp
|
||||||
{
|
{
|
||||||
struct net_device *netdev = tp->netdev;
|
struct net_device *netdev = tp->netdev;
|
||||||
struct napi_struct *napi = &tp->napi;
|
struct napi_struct *napi = &tp->napi;
|
||||||
@ -1522,7 +1522,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
speed = rtl8152_get_speed(tp);
|
speed = rtl8152_get_speed(tp);
|
||||||
|
|
||||||
@@ -5142,7 +6018,7 @@ static void set_carrier(struct r8152 *tp
|
@@ -5145,7 +6021,7 @@ static void set_carrier(struct r8152 *tp
|
||||||
rtl_start_rx(tp);
|
rtl_start_rx(tp);
|
||||||
clear_bit(RTL8152_SET_RX_MODE, &tp->flags);
|
clear_bit(RTL8152_SET_RX_MODE, &tp->flags);
|
||||||
_rtl8152_set_rx_mode(netdev);
|
_rtl8152_set_rx_mode(netdev);
|
||||||
@ -1531,7 +1531,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
netif_wake_queue(netdev);
|
netif_wake_queue(netdev);
|
||||||
netif_info(tp, link, netdev, "carrier on\n");
|
netif_info(tp, link, netdev, "carrier on\n");
|
||||||
} else if (netif_queue_stopped(netdev) &&
|
} else if (netif_queue_stopped(netdev) &&
|
||||||
@@ -5504,14 +6380,9 @@ static void r8153_init(struct r8152 *tp)
|
@@ -5507,14 +6383,9 @@ static void r8153_init(struct r8152 *tp)
|
||||||
|
|
||||||
ocp_write_word(tp, MCU_TYPE_USB, USB_CONNECT_TIMER, 0x0001);
|
ocp_write_word(tp, MCU_TYPE_USB, USB_CONNECT_TIMER, 0x0001);
|
||||||
|
|
||||||
@ -1547,7 +1547,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
r8153_u1u2en(tp, true);
|
r8153_u1u2en(tp, true);
|
||||||
usb_enable_lpm(tp->udev);
|
usb_enable_lpm(tp->udev);
|
||||||
|
|
||||||
@@ -5602,9 +6473,7 @@ static void r8153b_init(struct r8152 *tp
|
@@ -5605,9 +6476,7 @@ static void r8153b_init(struct r8152 *tp
|
||||||
usb_enable_lpm(tp->udev);
|
usb_enable_lpm(tp->udev);
|
||||||
|
|
||||||
/* MAC clock speed down */
|
/* MAC clock speed down */
|
||||||
@ -1558,7 +1558,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3);
|
ocp_data = ocp_read_word(tp, MCU_TYPE_PLA, PLA_MAC_PWR_CTRL3);
|
||||||
ocp_data &= ~PLA_MCU_SPDWN_EN;
|
ocp_data &= ~PLA_MCU_SPDWN_EN;
|
||||||
@@ -5631,6 +6500,1069 @@ static void r8153b_init(struct r8152 *tp
|
@@ -5634,6 +6503,1069 @@ static void r8153b_init(struct r8152 *tp
|
||||||
tp->coalesce = 15000; /* 15 us */
|
tp->coalesce = 15000; /* 15 us */
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -2628,7 +2628,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
static int rtl8152_pre_reset(struct usb_interface *intf)
|
static int rtl8152_pre_reset(struct usb_interface *intf)
|
||||||
{
|
{
|
||||||
struct r8152 *tp = usb_get_intfdata(intf);
|
struct r8152 *tp = usb_get_intfdata(intf);
|
||||||
@@ -5994,6 +7926,22 @@ int rtl8152_get_link_ksettings(struct ne
|
@@ -5997,6 +7929,22 @@ int rtl8152_get_link_ksettings(struct ne
|
||||||
|
|
||||||
mii_ethtool_get_link_ksettings(&tp->mii, cmd);
|
mii_ethtool_get_link_ksettings(&tp->mii, cmd);
|
||||||
|
|
||||||
@ -2651,7 +2651,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
mutex_unlock(&tp->control);
|
mutex_unlock(&tp->control);
|
||||||
|
|
||||||
usb_autopm_put_interface(tp->intf);
|
usb_autopm_put_interface(tp->intf);
|
||||||
@@ -6037,6 +7985,10 @@ static int rtl8152_set_link_ksettings(st
|
@@ -6040,6 +7988,10 @@ static int rtl8152_set_link_ksettings(st
|
||||||
cmd->link_modes.advertising))
|
cmd->link_modes.advertising))
|
||||||
advertising |= RTL_ADVERTISED_1000_FULL;
|
advertising |= RTL_ADVERTISED_1000_FULL;
|
||||||
|
|
||||||
@ -2662,7 +2662,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
mutex_lock(&tp->control);
|
mutex_lock(&tp->control);
|
||||||
|
|
||||||
ret = rtl8152_set_speed(tp, cmd->base.autoneg, cmd->base.speed,
|
ret = rtl8152_set_speed(tp, cmd->base.autoneg, cmd->base.speed,
|
||||||
@@ -6626,6 +8578,67 @@ static int rtl_ops_init(struct r8152 *tp
|
@@ -6629,6 +8581,67 @@ static int rtl_ops_init(struct r8152 *tp
|
||||||
tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX;
|
tp->eee_adv = MDIO_EEE_1000T | MDIO_EEE_100TX;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -2730,7 +2730,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
default:
|
default:
|
||||||
ret = -ENODEV;
|
ret = -ENODEV;
|
||||||
dev_err(&tp->intf->dev, "Unknown Device\n");
|
dev_err(&tp->intf->dev, "Unknown Device\n");
|
||||||
@@ -6639,11 +8652,13 @@ static int rtl_ops_init(struct r8152 *tp
|
@@ -6642,11 +8655,13 @@ static int rtl_ops_init(struct r8152 *tp
|
||||||
#define FIRMWARE_8153A_3 "rtl_nic/rtl8153a-3.fw"
|
#define FIRMWARE_8153A_3 "rtl_nic/rtl8153a-3.fw"
|
||||||
#define FIRMWARE_8153A_4 "rtl_nic/rtl8153a-4.fw"
|
#define FIRMWARE_8153A_4 "rtl_nic/rtl8153a-4.fw"
|
||||||
#define FIRMWARE_8153B_2 "rtl_nic/rtl8153b-2.fw"
|
#define FIRMWARE_8153B_2 "rtl_nic/rtl8153b-2.fw"
|
||||||
@ -2744,7 +2744,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
static int rtl_fw_init(struct r8152 *tp)
|
static int rtl_fw_init(struct r8152 *tp)
|
||||||
{
|
{
|
||||||
@@ -6669,6 +8684,11 @@ static int rtl_fw_init(struct r8152 *tp)
|
@@ -6672,6 +8687,11 @@ static int rtl_fw_init(struct r8152 *tp)
|
||||||
rtl_fw->pre_fw = r8153b_pre_firmware_1;
|
rtl_fw->pre_fw = r8153b_pre_firmware_1;
|
||||||
rtl_fw->post_fw = r8153b_post_firmware_1;
|
rtl_fw->post_fw = r8153b_post_firmware_1;
|
||||||
break;
|
break;
|
||||||
@ -2756,7 +2756,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -6751,6 +8771,27 @@ u8 rtl8152_get_version(struct usb_interf
|
@@ -6728,6 +8748,27 @@ u8 rtl8152_get_version(struct usb_interf
|
||||||
case 0x6010:
|
case 0x6010:
|
||||||
version = RTL_VER_09;
|
version = RTL_VER_09;
|
||||||
break;
|
break;
|
||||||
@ -2784,7 +2784,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
default:
|
default:
|
||||||
version = RTL_VER_UNKNOWN;
|
version = RTL_VER_UNKNOWN;
|
||||||
dev_info(&intf->dev, "Unknown version 0x%04x\n", ocp_data);
|
dev_info(&intf->dev, "Unknown version 0x%04x\n", ocp_data);
|
||||||
@@ -6863,12 +8904,29 @@ static int rtl8152_probe(struct usb_inte
|
@@ -6840,12 +8881,29 @@ static int rtl8152_probe(struct usb_inte
|
||||||
/* MTU range: 68 - 1500 or 9194 */
|
/* MTU range: 68 - 1500 or 9194 */
|
||||||
netdev->min_mtu = ETH_MIN_MTU;
|
netdev->min_mtu = ETH_MIN_MTU;
|
||||||
switch (tp->version) {
|
switch (tp->version) {
|
||||||
@ -2817,7 +2817,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -6884,7 +8942,13 @@ static int rtl8152_probe(struct usb_inte
|
@@ -6861,7 +8919,13 @@ static int rtl8152_probe(struct usb_inte
|
||||||
tp->advertising = RTL_ADVERTISED_10_HALF | RTL_ADVERTISED_10_FULL |
|
tp->advertising = RTL_ADVERTISED_10_HALF | RTL_ADVERTISED_10_FULL |
|
||||||
RTL_ADVERTISED_100_HALF | RTL_ADVERTISED_100_FULL;
|
RTL_ADVERTISED_100_HALF | RTL_ADVERTISED_100_FULL;
|
||||||
if (tp->mii.supports_gmii) {
|
if (tp->mii.supports_gmii) {
|
||||||
@ -2832,7 +2832,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
tp->advertising |= RTL_ADVERTISED_1000_FULL;
|
tp->advertising |= RTL_ADVERTISED_1000_FULL;
|
||||||
}
|
}
|
||||||
tp->duplex = DUPLEX_FULL;
|
tp->duplex = DUPLEX_FULL;
|
||||||
@@ -6908,7 +8972,11 @@ static int rtl8152_probe(struct usb_inte
|
@@ -6885,7 +8949,11 @@ static int rtl8152_probe(struct usb_inte
|
||||||
set_ethernet_addr(tp);
|
set_ethernet_addr(tp);
|
||||||
|
|
||||||
usb_set_intfdata(intf, tp);
|
usb_set_intfdata(intf, tp);
|
||||||
@ -2845,7 +2845,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
ret = register_netdev(netdev);
|
ret = register_netdev(netdev);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
@@ -6948,7 +9016,8 @@ static void rtl8152_disconnect(struct us
|
@@ -6925,7 +8993,8 @@ static void rtl8152_disconnect(struct us
|
||||||
unregister_netdev(tp->netdev);
|
unregister_netdev(tp->netdev);
|
||||||
tasklet_kill(&tp->tx_tl);
|
tasklet_kill(&tp->tx_tl);
|
||||||
cancel_delayed_work_sync(&tp->hw_phy_work);
|
cancel_delayed_work_sync(&tp->hw_phy_work);
|
||||||
@ -2855,7 +2855,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
rtl8152_release_firmware(tp);
|
rtl8152_release_firmware(tp);
|
||||||
free_netdev(tp->netdev);
|
free_netdev(tp->netdev);
|
||||||
}
|
}
|
||||||
@@ -6968,13 +9037,28 @@ static void rtl8152_disconnect(struct us
|
@@ -6945,13 +9014,28 @@ static void rtl8152_disconnect(struct us
|
||||||
.idProduct = (prod), \
|
.idProduct = (prod), \
|
||||||
.bInterfaceClass = USB_CLASS_COMM, \
|
.bInterfaceClass = USB_CLASS_COMM, \
|
||||||
.bInterfaceSubClass = USB_CDC_SUBCLASS_ETHERNET, \
|
.bInterfaceSubClass = USB_CDC_SUBCLASS_ETHERNET, \
|
||||||
|
@ -92,7 +92,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
};
|
};
|
||||||
|
|
||||||
enum rtl_version {
|
enum rtl_version {
|
||||||
@@ -4001,6 +4062,162 @@ static int rtl_post_ram_code(struct r815
|
@@ -4004,6 +4065,162 @@ static int rtl_post_ram_code(struct r815
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -255,7 +255,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
static bool rtl8152_is_fw_phy_nc_ok(struct r8152 *tp, struct fw_phy_nc *phy)
|
static bool rtl8152_is_fw_phy_nc_ok(struct r8152 *tp, struct fw_phy_nc *phy)
|
||||||
{
|
{
|
||||||
u32 length;
|
u32 length;
|
||||||
@@ -4321,6 +4538,10 @@ static long rtl8152_check_firmware(struc
|
@@ -4324,6 +4541,10 @@ static long rtl8152_check_firmware(struc
|
||||||
case RTL_FW_PHY_START:
|
case RTL_FW_PHY_START:
|
||||||
if (test_bit(FW_FLAGS_START, &fw_flags) ||
|
if (test_bit(FW_FLAGS_START, &fw_flags) ||
|
||||||
test_bit(FW_FLAGS_NC, &fw_flags) ||
|
test_bit(FW_FLAGS_NC, &fw_flags) ||
|
||||||
@ -266,7 +266,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
test_bit(FW_FLAGS_STOP, &fw_flags)) {
|
test_bit(FW_FLAGS_STOP, &fw_flags)) {
|
||||||
dev_err(&tp->intf->dev,
|
dev_err(&tp->intf->dev,
|
||||||
"check PHY_START fail\n");
|
"check PHY_START fail\n");
|
||||||
@@ -4369,7 +4590,153 @@ static long rtl8152_check_firmware(struc
|
@@ -4372,7 +4593,153 @@ static long rtl8152_check_firmware(struc
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
__set_bit(FW_FLAGS_NC, &fw_flags);
|
__set_bit(FW_FLAGS_NC, &fw_flags);
|
||||||
@ -420,7 +420,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
dev_warn(&tp->intf->dev, "Unknown type %u is found\n",
|
dev_warn(&tp->intf->dev, "Unknown type %u is found\n",
|
||||||
@@ -4392,6 +4759,143 @@ fail:
|
@@ -4395,6 +4762,143 @@ fail:
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -564,7 +564,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
static void rtl8152_fw_phy_nc_apply(struct r8152 *tp, struct fw_phy_nc *phy)
|
static void rtl8152_fw_phy_nc_apply(struct r8152 *tp, struct fw_phy_nc *phy)
|
||||||
{
|
{
|
||||||
u16 mode_reg, bp_index;
|
u16 mode_reg, bp_index;
|
||||||
@@ -4445,6 +4949,12 @@ static void rtl8152_fw_mac_apply(struct
|
@@ -4448,6 +4952,12 @@ static void rtl8152_fw_mac_apply(struct
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -577,7 +577,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
rtl_clear_bp(tp, type);
|
rtl_clear_bp(tp, type);
|
||||||
|
|
||||||
/* Enable backup/restore of MACDBG. This is required after clearing PLA
|
/* Enable backup/restore of MACDBG. This is required after clearing PLA
|
||||||
@@ -4480,7 +4990,6 @@ static void rtl8152_fw_mac_apply(struct
|
@@ -4483,7 +4993,6 @@ static void rtl8152_fw_mac_apply(struct
|
||||||
ocp_write_word(tp, type, bp_en_addr,
|
ocp_write_word(tp, type, bp_en_addr,
|
||||||
__le16_to_cpu(mac->bp_en_value));
|
__le16_to_cpu(mac->bp_en_value));
|
||||||
|
|
||||||
@ -585,7 +585,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
if (fw_ver_reg)
|
if (fw_ver_reg)
|
||||||
ocp_write_byte(tp, MCU_TYPE_USB, fw_ver_reg,
|
ocp_write_byte(tp, MCU_TYPE_USB, fw_ver_reg,
|
||||||
mac->fw_ver_data);
|
mac->fw_ver_data);
|
||||||
@@ -4495,7 +5004,7 @@ static void rtl8152_apply_firmware(struc
|
@@ -4498,7 +5007,7 @@ static void rtl8152_apply_firmware(struc
|
||||||
struct fw_header *fw_hdr;
|
struct fw_header *fw_hdr;
|
||||||
struct fw_phy_patch_key *key;
|
struct fw_phy_patch_key *key;
|
||||||
u16 key_addr = 0;
|
u16 key_addr = 0;
|
||||||
@ -594,7 +594,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
if (IS_ERR_OR_NULL(rtl_fw->fw))
|
if (IS_ERR_OR_NULL(rtl_fw->fw))
|
||||||
return;
|
return;
|
||||||
@@ -4517,17 +5026,40 @@ static void rtl8152_apply_firmware(struc
|
@@ -4520,17 +5029,40 @@ static void rtl8152_apply_firmware(struc
|
||||||
rtl8152_fw_mac_apply(tp, (struct fw_mac *)block);
|
rtl8152_fw_mac_apply(tp, (struct fw_mac *)block);
|
||||||
break;
|
break;
|
||||||
case RTL_FW_PHY_START:
|
case RTL_FW_PHY_START:
|
||||||
@ -635,7 +635,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -5035,6 +5567,21 @@ static int r8153c_post_firmware_1(struct
|
@@ -5038,6 +5570,21 @@ static int r8153c_post_firmware_1(struct
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -657,7 +657,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
static void r8153_aldps_en(struct r8152 *tp, bool enable)
|
static void r8153_aldps_en(struct r8152 *tp, bool enable)
|
||||||
{
|
{
|
||||||
u16 data;
|
u16 data;
|
||||||
@@ -8653,12 +9200,16 @@ static int rtl_ops_init(struct r8152 *tp
|
@@ -8656,12 +9203,16 @@ static int rtl_ops_init(struct r8152 *tp
|
||||||
#define FIRMWARE_8153A_4 "rtl_nic/rtl8153a-4.fw"
|
#define FIRMWARE_8153A_4 "rtl_nic/rtl8153a-4.fw"
|
||||||
#define FIRMWARE_8153B_2 "rtl_nic/rtl8153b-2.fw"
|
#define FIRMWARE_8153B_2 "rtl_nic/rtl8153b-2.fw"
|
||||||
#define FIRMWARE_8153C_1 "rtl_nic/rtl8153c-1.fw"
|
#define FIRMWARE_8153C_1 "rtl_nic/rtl8153c-1.fw"
|
||||||
@ -674,7 +674,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
static int rtl_fw_init(struct r8152 *tp)
|
static int rtl_fw_init(struct r8152 *tp)
|
||||||
{
|
{
|
||||||
@@ -8684,6 +9235,14 @@ static int rtl_fw_init(struct r8152 *tp)
|
@@ -8687,6 +9238,14 @@ static int rtl_fw_init(struct r8152 *tp)
|
||||||
rtl_fw->pre_fw = r8153b_pre_firmware_1;
|
rtl_fw->pre_fw = r8153b_pre_firmware_1;
|
||||||
rtl_fw->post_fw = r8153b_post_firmware_1;
|
rtl_fw->post_fw = r8153b_post_firmware_1;
|
||||||
break;
|
break;
|
||||||
|
@ -25,7 +25,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
|
|
||||||
/* Information for net */
|
/* Information for net */
|
||||||
#define NET_VERSION "11"
|
#define NET_VERSION "11"
|
||||||
@@ -8110,6 +8110,39 @@ static void r8156b_init(struct r8152 *tp
|
@@ -8113,6 +8113,39 @@ static void r8156b_init(struct r8152 *tp
|
||||||
tp->coalesce = 15000; /* 15 us */
|
tp->coalesce = 15000; /* 15 us */
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -65,7 +65,7 @@ Signed-off-by: David S. Miller <davem@davemloft.net>
|
|||||||
static int rtl8152_pre_reset(struct usb_interface *intf)
|
static int rtl8152_pre_reset(struct usb_interface *intf)
|
||||||
{
|
{
|
||||||
struct r8152 *tp = usb_get_intfdata(intf);
|
struct r8152 *tp = usb_get_intfdata(intf);
|
||||||
@@ -9375,10 +9408,8 @@ static int rtl8152_probe(struct usb_inte
|
@@ -9352,10 +9385,8 @@ static int rtl8152_probe(struct usb_inte
|
||||||
if (version == RTL_VER_UNKNOWN)
|
if (version == RTL_VER_UNKNOWN)
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
||||||
|
@ -104,7 +104,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
config MODULES_TREE_LOOKUP
|
config MODULES_TREE_LOOKUP
|
||||||
--- a/kernel/module.c
|
--- a/kernel/module.c
|
||||||
+++ b/kernel/module.c
|
+++ b/kernel/module.c
|
||||||
@@ -3251,9 +3251,11 @@ static int setup_load_info(struct load_i
|
@@ -3262,9 +3262,11 @@ static int setup_load_info(struct load_i
|
||||||
|
|
||||||
static int check_modinfo(struct module *mod, struct load_info *info, int flags)
|
static int check_modinfo(struct module *mod, struct load_info *info, int flags)
|
||||||
{
|
{
|
||||||
@ -117,7 +117,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
if (flags & MODULE_INIT_IGNORE_VERMAGIC)
|
if (flags & MODULE_INIT_IGNORE_VERMAGIC)
|
||||||
modmagic = NULL;
|
modmagic = NULL;
|
||||||
|
|
||||||
@@ -3274,6 +3276,7 @@ static int check_modinfo(struct module *
|
@@ -3285,6 +3287,7 @@ static int check_modinfo(struct module *
|
||||||
mod->name);
|
mod->name);
|
||||||
add_taint_module(mod, TAINT_OOT_MODULE, LOCKDEP_STILL_OK);
|
add_taint_module(mod, TAINT_OOT_MODULE, LOCKDEP_STILL_OK);
|
||||||
}
|
}
|
||||||
|
@ -44,7 +44,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
device, it has to decide which ones to send first, which ones to
|
device, it has to decide which ones to send first, which ones to
|
||||||
--- a/net/sched/sch_api.c
|
--- a/net/sched/sch_api.c
|
||||||
+++ b/net/sched/sch_api.c
|
+++ b/net/sched/sch_api.c
|
||||||
@@ -2310,7 +2310,7 @@ static int __init pktsched_init(void)
|
@@ -2337,7 +2337,7 @@ static int __init pktsched_init(void)
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
@@ -2716,6 +2716,9 @@ static int mv88e6xxx_setup_port(struct m
|
@@ -2726,6 +2726,9 @@ static int mv88e6xxx_setup_port(struct m
|
||||||
if (dsa_is_cpu_port(ds, port))
|
if (dsa_is_cpu_port(ds, port))
|
||||||
reg = 0;
|
reg = 0;
|
||||||
|
|
||||||
|
@ -77,7 +77,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
struct dst_entry *__sk_dst_check(struct sock *sk, u32 cookie)
|
struct dst_entry *__sk_dst_check(struct sock *sk, u32 cookie)
|
||||||
{
|
{
|
||||||
struct dst_entry *dst = __sk_dst_get(sk);
|
struct dst_entry *dst = __sk_dst_get(sk);
|
||||||
@@ -1837,9 +1851,11 @@ static void __sk_free(struct sock *sk)
|
@@ -1838,9 +1852,11 @@ static void __sk_free(struct sock *sk)
|
||||||
if (likely(sk->sk_net_refcnt))
|
if (likely(sk->sk_net_refcnt))
|
||||||
sock_inuse_add(sock_net(sk), -1);
|
sock_inuse_add(sock_net(sk), -1);
|
||||||
|
|
||||||
|
@ -235,7 +235,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
if (!pe)
|
if (!pe)
|
||||||
--- a/mm/vmalloc.c
|
--- a/mm/vmalloc.c
|
||||||
+++ b/mm/vmalloc.c
|
+++ b/mm/vmalloc.c
|
||||||
@@ -3572,6 +3572,8 @@ static const struct seq_operations vmall
|
@@ -3576,6 +3576,8 @@ static const struct seq_operations vmall
|
||||||
|
|
||||||
static int __init proc_vmalloc_init(void)
|
static int __init proc_vmalloc_init(void)
|
||||||
{
|
{
|
||||||
@ -330,7 +330,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
--- a/net/core/sock.c
|
--- a/net/core/sock.c
|
||||||
+++ b/net/core/sock.c
|
+++ b/net/core/sock.c
|
||||||
@@ -3724,6 +3724,8 @@ static __net_initdata struct pernet_oper
|
@@ -3725,6 +3725,8 @@ static __net_initdata struct pernet_oper
|
||||||
|
|
||||||
static int __init proto_init(void)
|
static int __init proto_init(void)
|
||||||
{
|
{
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
dev_err(dev, "Error requesting irq:%d for ev:%d\n",
|
dev_err(dev, "Error requesting irq:%d for ev:%d\n",
|
||||||
--- a/include/linux/mhi.h
|
--- a/include/linux/mhi.h
|
||||||
+++ b/include/linux/mhi.h
|
+++ b/include/linux/mhi.h
|
||||||
@@ -353,6 +353,7 @@ struct mhi_controller_config {
|
@@ -354,6 +354,7 @@ struct mhi_controller_config {
|
||||||
* @fbc_download: MHI host needs to do complete image transfer (optional)
|
* @fbc_download: MHI host needs to do complete image transfer (optional)
|
||||||
* @pre_init: MHI host needs to do pre-initialization before power up
|
* @pre_init: MHI host needs to do pre-initialization before power up
|
||||||
* @wake_set: Device wakeup set flag
|
* @wake_set: Device wakeup set flag
|
||||||
@ -38,7 +38,7 @@
|
|||||||
*
|
*
|
||||||
* Fields marked as (required) need to be populated by the controller driver
|
* Fields marked as (required) need to be populated by the controller driver
|
||||||
* before calling mhi_register_controller(). For the fields marked as (optional)
|
* before calling mhi_register_controller(). For the fields marked as (optional)
|
||||||
@@ -442,6 +443,7 @@ struct mhi_controller {
|
@@ -444,6 +445,7 @@ struct mhi_controller {
|
||||||
bool fbc_download;
|
bool fbc_download;
|
||||||
bool pre_init;
|
bool pre_init;
|
||||||
bool wake_set;
|
bool wake_set;
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/drivers/bus/mhi/host/pm.c
|
--- a/drivers/bus/mhi/host/pm.c
|
||||||
+++ b/drivers/bus/mhi/host/pm.c
|
+++ b/drivers/bus/mhi/host/pm.c
|
||||||
@@ -768,7 +768,7 @@ int mhi_pm_suspend(struct mhi_controller
|
@@ -773,7 +773,7 @@ int mhi_pm_suspend(struct mhi_controller
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(mhi_pm_suspend);
|
EXPORT_SYMBOL_GPL(mhi_pm_suspend);
|
||||||
|
|
||||||
@ -9,7 +9,7 @@
|
|||||||
{
|
{
|
||||||
struct mhi_chan *itr, *tmp;
|
struct mhi_chan *itr, *tmp;
|
||||||
struct device *dev = &mhi_cntrl->mhi_dev->dev;
|
struct device *dev = &mhi_cntrl->mhi_dev->dev;
|
||||||
@@ -784,6 +784,13 @@ int mhi_pm_resume(struct mhi_controller
|
@@ -789,6 +789,13 @@ int mhi_pm_resume(struct mhi_controller
|
||||||
|
|
||||||
if (MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state))
|
if (MHI_PM_IN_ERROR_STATE(mhi_cntrl->pm_state))
|
||||||
return -EIO;
|
return -EIO;
|
||||||
@ -23,7 +23,7 @@
|
|||||||
|
|
||||||
/* Notify clients about exiting LPM */
|
/* Notify clients about exiting LPM */
|
||||||
list_for_each_entry_safe(itr, tmp, &mhi_cntrl->lpm_chans, node) {
|
list_for_each_entry_safe(itr, tmp, &mhi_cntrl->lpm_chans, node) {
|
||||||
@@ -824,8 +831,19 @@ int mhi_pm_resume(struct mhi_controller
|
@@ -829,8 +836,19 @@ int mhi_pm_resume(struct mhi_controller
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -59,7 +59,7 @@
|
|||||||
ret = mhi_force_rddm_mode(ab_pci->mhi_ctrl);
|
ret = mhi_force_rddm_mode(ab_pci->mhi_ctrl);
|
||||||
--- a/include/linux/mhi.h
|
--- a/include/linux/mhi.h
|
||||||
+++ b/include/linux/mhi.h
|
+++ b/include/linux/mhi.h
|
||||||
@@ -647,6 +647,19 @@ int mhi_pm_suspend(struct mhi_controller
|
@@ -649,6 +649,19 @@ int mhi_pm_suspend(struct mhi_controller
|
||||||
int mhi_pm_resume(struct mhi_controller *mhi_cntrl);
|
int mhi_pm_resume(struct mhi_controller *mhi_cntrl);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -39,7 +39,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
endif # MTD_SPI_NOR
|
endif # MTD_SPI_NOR
|
||||||
--- a/drivers/mtd/spi-nor/core.c
|
--- a/drivers/mtd/spi-nor/core.c
|
||||||
+++ b/drivers/mtd/spi-nor/core.c
|
+++ b/drivers/mtd/spi-nor/core.c
|
||||||
@@ -2806,6 +2806,21 @@ static void spi_nor_info_init_params(str
|
@@ -2807,6 +2807,21 @@ static void spi_nor_info_init_params(str
|
||||||
*/
|
*/
|
||||||
erase_mask = 0;
|
erase_mask = 0;
|
||||||
i = 0;
|
i = 0;
|
||||||
@ -61,7 +61,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
if (info->flags & SECT_4K_PMC) {
|
if (info->flags & SECT_4K_PMC) {
|
||||||
erase_mask |= BIT(i);
|
erase_mask |= BIT(i);
|
||||||
spi_nor_set_erase_type(&map->erase_type[i], 4096u,
|
spi_nor_set_erase_type(&map->erase_type[i], 4096u,
|
||||||
@@ -2817,6 +2832,7 @@ static void spi_nor_info_init_params(str
|
@@ -2818,6 +2833,7 @@ static void spi_nor_info_init_params(str
|
||||||
SPINOR_OP_BE_4K);
|
SPINOR_OP_BE_4K);
|
||||||
i++;
|
i++;
|
||||||
}
|
}
|
||||||
|
@ -59,7 +59,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
+};
|
+};
|
||||||
--- a/drivers/mtd/spi-nor/core.c
|
--- a/drivers/mtd/spi-nor/core.c
|
||||||
+++ b/drivers/mtd/spi-nor/core.c
|
+++ b/drivers/mtd/spi-nor/core.c
|
||||||
@@ -2037,6 +2037,7 @@ static const struct spi_nor_manufacturer
|
@@ -2038,6 +2038,7 @@ static const struct spi_nor_manufacturer
|
||||||
&spi_nor_winbond,
|
&spi_nor_winbond,
|
||||||
&spi_nor_xilinx,
|
&spi_nor_xilinx,
|
||||||
&spi_nor_xmc,
|
&spi_nor_xmc,
|
||||||
|
@ -30,7 +30,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
#define PACKET_FANOUT_LB 1
|
#define PACKET_FANOUT_LB 1
|
||||||
--- a/net/packet/af_packet.c
|
--- a/net/packet/af_packet.c
|
||||||
+++ b/net/packet/af_packet.c
|
+++ b/net/packet/af_packet.c
|
||||||
@@ -1823,6 +1823,7 @@ static int packet_rcv_spkt(struct sk_buf
|
@@ -1827,6 +1827,7 @@ static int packet_rcv_spkt(struct sk_buf
|
||||||
{
|
{
|
||||||
struct sock *sk;
|
struct sock *sk;
|
||||||
struct sockaddr_pkt *spkt;
|
struct sockaddr_pkt *spkt;
|
||||||
@ -38,7 +38,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* When we registered the protocol we saved the socket in the data
|
* When we registered the protocol we saved the socket in the data
|
||||||
@@ -1830,6 +1831,7 @@ static int packet_rcv_spkt(struct sk_buf
|
@@ -1834,6 +1835,7 @@ static int packet_rcv_spkt(struct sk_buf
|
||||||
*/
|
*/
|
||||||
|
|
||||||
sk = pt->af_packet_priv;
|
sk = pt->af_packet_priv;
|
||||||
@ -46,7 +46,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Yank back the headers [hope the device set this
|
* Yank back the headers [hope the device set this
|
||||||
@@ -1842,7 +1844,7 @@ static int packet_rcv_spkt(struct sk_buf
|
@@ -1846,7 +1848,7 @@ static int packet_rcv_spkt(struct sk_buf
|
||||||
* so that this procedure is noop.
|
* so that this procedure is noop.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@ -55,7 +55,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
goto out;
|
goto out;
|
||||||
|
|
||||||
if (!net_eq(dev_net(dev), sock_net(sk)))
|
if (!net_eq(dev_net(dev), sock_net(sk)))
|
||||||
@@ -2088,12 +2090,12 @@ static int packet_rcv(struct sk_buff *sk
|
@@ -2092,12 +2094,12 @@ static int packet_rcv(struct sk_buff *sk
|
||||||
unsigned int snaplen, res;
|
unsigned int snaplen, res;
|
||||||
bool is_drop_n_account = false;
|
bool is_drop_n_account = false;
|
||||||
|
|
||||||
@ -71,7 +71,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
if (!net_eq(dev_net(dev), sock_net(sk)))
|
if (!net_eq(dev_net(dev), sock_net(sk)))
|
||||||
goto drop;
|
goto drop;
|
||||||
|
|
||||||
@@ -2219,12 +2221,12 @@ static int tpacket_rcv(struct sk_buff *s
|
@@ -2223,12 +2225,12 @@ static int tpacket_rcv(struct sk_buff *s
|
||||||
BUILD_BUG_ON(TPACKET_ALIGN(sizeof(*h.h2)) != 32);
|
BUILD_BUG_ON(TPACKET_ALIGN(sizeof(*h.h2)) != 32);
|
||||||
BUILD_BUG_ON(TPACKET_ALIGN(sizeof(*h.h3)) != 48);
|
BUILD_BUG_ON(TPACKET_ALIGN(sizeof(*h.h3)) != 48);
|
||||||
|
|
||||||
@ -87,7 +87,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
if (!net_eq(dev_net(dev), sock_net(sk)))
|
if (!net_eq(dev_net(dev), sock_net(sk)))
|
||||||
goto drop;
|
goto drop;
|
||||||
|
|
||||||
@@ -3342,6 +3344,7 @@ static int packet_create(struct net *net
|
@@ -3346,6 +3348,7 @@ static int packet_create(struct net *net
|
||||||
mutex_init(&po->pg_vec_lock);
|
mutex_init(&po->pg_vec_lock);
|
||||||
po->rollover = NULL;
|
po->rollover = NULL;
|
||||||
po->prot_hook.func = packet_rcv;
|
po->prot_hook.func = packet_rcv;
|
||||||
@ -95,7 +95,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
if (sock->type == SOCK_PACKET)
|
if (sock->type == SOCK_PACKET)
|
||||||
po->prot_hook.func = packet_rcv_spkt;
|
po->prot_hook.func = packet_rcv_spkt;
|
||||||
@@ -3982,6 +3985,16 @@ packet_setsockopt(struct socket *sock, i
|
@@ -3986,6 +3989,16 @@ packet_setsockopt(struct socket *sock, i
|
||||||
WRITE_ONCE(po->xmit, val ? packet_direct_xmit : dev_queue_xmit);
|
WRITE_ONCE(po->xmit, val ? packet_direct_xmit : dev_queue_xmit);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@ -112,7 +112,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
default:
|
default:
|
||||||
return -ENOPROTOOPT;
|
return -ENOPROTOOPT;
|
||||||
}
|
}
|
||||||
@@ -4038,6 +4051,13 @@ static int packet_getsockopt(struct sock
|
@@ -4042,6 +4055,13 @@ static int packet_getsockopt(struct sock
|
||||||
case PACKET_VNET_HDR:
|
case PACKET_VNET_HDR:
|
||||||
val = po->has_vnet_hdr;
|
val = po->has_vnet_hdr;
|
||||||
break;
|
break;
|
||||||
|
@ -196,7 +196,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
ring->dma_size * sizeof(*ring->dma),
|
ring->dma_size * sizeof(*ring->dma),
|
||||||
ring->dma,
|
ring->dma,
|
||||||
ring->phys);
|
ring->phys);
|
||||||
@@ -2155,7 +2156,7 @@ static void mtk_dma_free(struct mtk_eth
|
@@ -2158,7 +2159,7 @@ static void mtk_dma_free(struct mtk_eth
|
||||||
if (eth->netdev[i])
|
if (eth->netdev[i])
|
||||||
netdev_reset_queue(eth->netdev[i]);
|
netdev_reset_queue(eth->netdev[i]);
|
||||||
if (eth->scratch_ring) {
|
if (eth->scratch_ring) {
|
||||||
@ -205,7 +205,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
MTK_DMA_SIZE * sizeof(struct mtk_tx_dma),
|
MTK_DMA_SIZE * sizeof(struct mtk_tx_dma),
|
||||||
eth->scratch_ring,
|
eth->scratch_ring,
|
||||||
eth->phy_scratch_ring);
|
eth->phy_scratch_ring);
|
||||||
@@ -2506,6 +2507,8 @@ static void mtk_dim_tx(struct work_struc
|
@@ -2509,6 +2510,8 @@ static void mtk_dim_tx(struct work_struc
|
||||||
|
|
||||||
static int mtk_hw_init(struct mtk_eth *eth)
|
static int mtk_hw_init(struct mtk_eth *eth)
|
||||||
{
|
{
|
||||||
@ -214,7 +214,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
int i, val, ret;
|
int i, val, ret;
|
||||||
|
|
||||||
if (test_and_set_bit(MTK_HW_INIT, ð->state))
|
if (test_and_set_bit(MTK_HW_INIT, ð->state))
|
||||||
@@ -2518,6 +2521,10 @@ static int mtk_hw_init(struct mtk_eth *e
|
@@ -2521,6 +2524,10 @@ static int mtk_hw_init(struct mtk_eth *e
|
||||||
if (ret)
|
if (ret)
|
||||||
goto err_disable_pm;
|
goto err_disable_pm;
|
||||||
|
|
||||||
@ -225,7 +225,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628)) {
|
if (MTK_HAS_CAPS(eth->soc->caps, MTK_SOC_MT7628)) {
|
||||||
ret = device_reset(eth->dev);
|
ret = device_reset(eth->dev);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
@@ -3067,6 +3074,35 @@ free_netdev:
|
@@ -3070,6 +3077,35 @@ free_netdev:
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -261,7 +261,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
static int mtk_probe(struct platform_device *pdev)
|
static int mtk_probe(struct platform_device *pdev)
|
||||||
{
|
{
|
||||||
struct device_node *mac_np;
|
struct device_node *mac_np;
|
||||||
@@ -3080,6 +3116,7 @@ static int mtk_probe(struct platform_dev
|
@@ -3083,6 +3119,7 @@ static int mtk_probe(struct platform_dev
|
||||||
eth->soc = of_device_get_match_data(&pdev->dev);
|
eth->soc = of_device_get_match_data(&pdev->dev);
|
||||||
|
|
||||||
eth->dev = &pdev->dev;
|
eth->dev = &pdev->dev;
|
||||||
@ -269,7 +269,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
eth->base = devm_platform_ioremap_resource(pdev, 0);
|
eth->base = devm_platform_ioremap_resource(pdev, 0);
|
||||||
if (IS_ERR(eth->base))
|
if (IS_ERR(eth->base))
|
||||||
return PTR_ERR(eth->base);
|
return PTR_ERR(eth->base);
|
||||||
@@ -3128,6 +3165,16 @@ static int mtk_probe(struct platform_dev
|
@@ -3131,6 +3168,16 @@ static int mtk_probe(struct platform_dev
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -56,7 +56,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
static int mtk_msg_level = -1;
|
static int mtk_msg_level = -1;
|
||||||
module_param_named(msg_level, mtk_msg_level, int, 0);
|
module_param_named(msg_level, mtk_msg_level, int, 0);
|
||||||
@@ -3197,6 +3198,22 @@ static int mtk_probe(struct platform_dev
|
@@ -3200,6 +3201,22 @@ static int mtk_probe(struct platform_dev
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -2329,7 +2329,7 @@ static int mtk_open(struct net_device *d
|
@@ -2332,7 +2332,7 @@ static int mtk_open(struct net_device *d
|
||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -19,7 +19,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
gdm_config = MTK_GDMA_TO_PPE;
|
gdm_config = MTK_GDMA_TO_PPE;
|
||||||
|
|
||||||
mtk_gdm_config(eth, gdm_config);
|
mtk_gdm_config(eth, gdm_config);
|
||||||
@@ -2403,7 +2403,7 @@ static int mtk_stop(struct net_device *d
|
@@ -2406,7 +2406,7 @@ static int mtk_stop(struct net_device *d
|
||||||
mtk_dma_free(eth);
|
mtk_dma_free(eth);
|
||||||
|
|
||||||
if (eth->soc->offload_version)
|
if (eth->soc->offload_version)
|
||||||
@ -28,7 +28,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -3289,10 +3289,11 @@ static int mtk_probe(struct platform_dev
|
@@ -3292,10 +3292,11 @@ static int mtk_probe(struct platform_dev
|
||||||
}
|
}
|
||||||
|
|
||||||
if (eth->soc->offload_version) {
|
if (eth->soc->offload_version) {
|
||||||
|
@ -54,7 +54,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
if (netdev->features & NETIF_F_HW_VLAN_CTAG_RX &&
|
if (netdev->features & NETIF_F_HW_VLAN_CTAG_RX &&
|
||||||
(trxd.rxd2 & RX_DMA_VTAG))
|
(trxd.rxd2 & RX_DMA_VTAG))
|
||||||
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
|
__vlan_hwaccel_put_tag(skb, htons(ETH_P_8021Q),
|
||||||
@@ -3289,7 +3295,7 @@ static int mtk_probe(struct platform_dev
|
@@ -3292,7 +3298,7 @@ static int mtk_probe(struct platform_dev
|
||||||
}
|
}
|
||||||
|
|
||||||
if (eth->soc->offload_version) {
|
if (eth->soc->offload_version) {
|
||||||
|
@ -10,7 +10,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -2200,8 +2200,8 @@ static irqreturn_t mtk_handle_irq_rx(int
|
@@ -2203,8 +2203,8 @@ static irqreturn_t mtk_handle_irq_rx(int
|
||||||
|
|
||||||
eth->rx_events++;
|
eth->rx_events++;
|
||||||
if (likely(napi_schedule_prep(ð->rx_napi))) {
|
if (likely(napi_schedule_prep(ð->rx_napi))) {
|
||||||
@ -20,7 +20,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
}
|
}
|
||||||
|
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
@@ -2213,8 +2213,8 @@ static irqreturn_t mtk_handle_irq_tx(int
|
@@ -2216,8 +2216,8 @@ static irqreturn_t mtk_handle_irq_tx(int
|
||||||
|
|
||||||
eth->tx_events++;
|
eth->tx_events++;
|
||||||
if (likely(napi_schedule_prep(ð->tx_napi))) {
|
if (likely(napi_schedule_prep(ð->tx_napi))) {
|
||||||
@ -30,7 +30,7 @@ Signed-off-by: Felix Fietkau <nbd@nbd.name>
|
|||||||
}
|
}
|
||||||
|
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
@@ -3324,6 +3324,8 @@ static int mtk_probe(struct platform_dev
|
@@ -3327,6 +3327,8 @@ static int mtk_probe(struct platform_dev
|
||||||
* for NAPI to work
|
* for NAPI to work
|
||||||
*/
|
*/
|
||||||
init_dummy_netdev(ð->dummy_dev);
|
init_dummy_netdev(ð->dummy_dev);
|
||||||
|
@ -17,7 +17,7 @@ Signed-off-by: Alexander Duyck <alexanderduyck@fb.com>
|
|||||||
|
|
||||||
--- a/net/core/skbuff.c
|
--- a/net/core/skbuff.c
|
||||||
+++ b/net/core/skbuff.c
|
+++ b/net/core/skbuff.c
|
||||||
@@ -4169,6 +4169,15 @@ int skb_gro_receive(struct sk_buff *p, s
|
@@ -4175,6 +4175,15 @@ int skb_gro_receive(struct sk_buff *p, s
|
||||||
if (unlikely(p->len + len >= 65536 || NAPI_GRO_CB(skb)->flush))
|
if (unlikely(p->len + len >= 65536 || NAPI_GRO_CB(skb)->flush))
|
||||||
return -E2BIG;
|
return -E2BIG;
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ Signed-off-by: DENG Qingfang <dqfext@gmail.com>
|
|||||||
|
|
||||||
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
@@ -2934,6 +2934,7 @@ static int mv88e6xxx_setup(struct dsa_sw
|
@@ -2944,6 +2944,7 @@ static int mv88e6xxx_setup(struct dsa_sw
|
||||||
|
|
||||||
chip->ds = ds;
|
chip->ds = ds;
|
||||||
ds->slave_mii_bus = mv88e6xxx_default_mdio_bus(chip);
|
ds->slave_mii_bus = mv88e6xxx_default_mdio_bus(chip);
|
||||||
|
@ -17,7 +17,7 @@ Signed-off-by: Tobias Waldekranz <tobias@waldekranz.com>
|
|||||||
|
|
||||||
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
--- a/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
+++ b/drivers/net/dsa/mv88e6xxx/chip.c
|
||||||
@@ -5504,6 +5504,7 @@ static int mv88e6xxx_register_switch(str
|
@@ -5514,6 +5514,7 @@ static int mv88e6xxx_register_switch(str
|
||||||
ds->ops = &mv88e6xxx_switch_ops;
|
ds->ops = &mv88e6xxx_switch_ops;
|
||||||
ds->ageing_time_min = chip->info->age_time_coeff;
|
ds->ageing_time_min = chip->info->age_time_coeff;
|
||||||
ds->ageing_time_max = chip->info->age_time_coeff * U8_MAX;
|
ds->ageing_time_max = chip->info->age_time_coeff * U8_MAX;
|
||||||
|
@ -134,7 +134,7 @@ Signed-off-by: Daniel Golle <daniel@makrotopia.org>
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Define if arch has non-standard setup. This is a _PCI_ standard
|
* Define if arch has non-standard setup. This is a _PCI_ standard
|
||||||
@@ -883,6 +886,12 @@ struct ata_port {
|
@@ -887,6 +890,12 @@ struct ata_port {
|
||||||
#ifdef CONFIG_ATA_ACPI
|
#ifdef CONFIG_ATA_ACPI
|
||||||
struct ata_acpi_gtm __acpi_init_gtm; /* use ata_acpi_init_gtm() */
|
struct ata_acpi_gtm __acpi_init_gtm; /* use ata_acpi_init_gtm() */
|
||||||
#endif
|
#endif
|
||||||
|
@ -40,7 +40,7 @@ Signed-off-by: Robert Marko <robert.marko@sartura.hr>
|
|||||||
help
|
help
|
||||||
--- a/drivers/net/phy/Makefile
|
--- a/drivers/net/phy/Makefile
|
||||||
+++ b/drivers/net/phy/Makefile
|
+++ b/drivers/net/phy/Makefile
|
||||||
@@ -86,6 +86,7 @@ obj-$(CONFIG_MICROSEMI_PHY) += mscc/
|
@@ -88,6 +88,7 @@ obj-$(CONFIG_MICROSEMI_PHY) += mscc/
|
||||||
obj-$(CONFIG_NATIONAL_PHY) += national.o
|
obj-$(CONFIG_NATIONAL_PHY) += national.o
|
||||||
obj-$(CONFIG_NXP_TJA11XX_PHY) += nxp-tja11xx.o
|
obj-$(CONFIG_NXP_TJA11XX_PHY) += nxp-tja11xx.o
|
||||||
obj-$(CONFIG_QSEMI_PHY) += qsemi.o
|
obj-$(CONFIG_QSEMI_PHY) += qsemi.o
|
||||||
|
@ -10,7 +10,7 @@ Signed-off-by: William <gw826943555@qq.com>
|
|||||||
---
|
---
|
||||||
--- a/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
--- a/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||||
+++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
+++ b/arch/arm/boot/dts/qcom-ipq4019.dtsi
|
||||||
@@ -124,20 +124,24 @@
|
@@ -115,20 +115,24 @@
|
||||||
|
|
||||||
opp-48000000 {
|
opp-48000000 {
|
||||||
opp-hz = /bits/ 64 <48000000>;
|
opp-hz = /bits/ 64 <48000000>;
|
||||||
|
@ -90,7 +90,7 @@ Cc: linux-tegra@vger.kernel.org
|
|||||||
|
|
||||||
--- a/drivers/pci/controller/dwc/pcie-tegra194.c
|
--- a/drivers/pci/controller/dwc/pcie-tegra194.c
|
||||||
+++ b/drivers/pci/controller/dwc/pcie-tegra194.c
|
+++ b/drivers/pci/controller/dwc/pcie-tegra194.c
|
||||||
@@ -988,11 +988,6 @@ static int tegra_pcie_dw_link_up(struct
|
@@ -997,11 +997,6 @@ static int tegra_pcie_dw_link_up(struct
|
||||||
return !!(val & PCI_EXP_LNKSTA_DLLLA);
|
return !!(val & PCI_EXP_LNKSTA_DLLLA);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -102,7 +102,7 @@ Cc: linux-tegra@vger.kernel.org
|
|||||||
static int tegra_pcie_dw_start_link(struct dw_pcie *pci)
|
static int tegra_pcie_dw_start_link(struct dw_pcie *pci)
|
||||||
{
|
{
|
||||||
struct tegra_pcie_dw *pcie = to_tegra_pcie(pci);
|
struct tegra_pcie_dw *pcie = to_tegra_pcie(pci);
|
||||||
@@ -1017,7 +1012,6 @@ static const struct dw_pcie_ops tegra_dw
|
@@ -1026,7 +1021,6 @@ static const struct dw_pcie_ops tegra_dw
|
||||||
|
|
||||||
static struct dw_pcie_host_ops tegra_pcie_dw_host_ops = {
|
static struct dw_pcie_host_ops tegra_pcie_dw_host_ops = {
|
||||||
.host_init = tegra_pcie_dw_host_init,
|
.host_init = tegra_pcie_dw_host_init,
|
||||||
@ -110,7 +110,7 @@ Cc: linux-tegra@vger.kernel.org
|
|||||||
};
|
};
|
||||||
|
|
||||||
static void tegra_pcie_disable_phy(struct tegra_pcie_dw *pcie)
|
static void tegra_pcie_disable_phy(struct tegra_pcie_dw *pcie)
|
||||||
@@ -2002,6 +1996,7 @@ static int tegra_pcie_dw_probe(struct pl
|
@@ -2011,6 +2005,7 @@ static int tegra_pcie_dw_probe(struct pl
|
||||||
pci->n_fts[1] = FTS_VAL;
|
pci->n_fts[1] = FTS_VAL;
|
||||||
|
|
||||||
pp = &pci->pp;
|
pp = &pci->pp;
|
||||||
|
@ -256,7 +256,7 @@ Cc: linux-tegra@vger.kernel.org
|
|||||||
if (ret) {
|
if (ret) {
|
||||||
--- a/drivers/pci/controller/dwc/pcie-tegra194.c
|
--- a/drivers/pci/controller/dwc/pcie-tegra194.c
|
||||||
+++ b/drivers/pci/controller/dwc/pcie-tegra194.c
|
+++ b/drivers/pci/controller/dwc/pcie-tegra194.c
|
||||||
@@ -1552,14 +1552,6 @@ static int tegra_pcie_config_rp(struct t
|
@@ -1561,14 +1561,6 @@ static int tegra_pcie_config_rp(struct t
|
||||||
char *name;
|
char *name;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
|
@ -552,7 +552,7 @@ Cc: linux-tegra@vger.kernel.org
|
|||||||
static int qcom_pcie_probe(struct platform_device *pdev)
|
static int qcom_pcie_probe(struct platform_device *pdev)
|
||||||
--- a/drivers/pci/controller/dwc/pcie-tegra194.c
|
--- a/drivers/pci/controller/dwc/pcie-tegra194.c
|
||||||
+++ b/drivers/pci/controller/dwc/pcie-tegra194.c
|
+++ b/drivers/pci/controller/dwc/pcie-tegra194.c
|
||||||
@@ -1547,7 +1547,6 @@ static int tegra_pcie_deinit_controller(
|
@@ -1556,7 +1556,6 @@ static int tegra_pcie_deinit_controller(
|
||||||
|
|
||||||
static int tegra_pcie_config_rp(struct tegra_pcie_dw *pcie)
|
static int tegra_pcie_config_rp(struct tegra_pcie_dw *pcie)
|
||||||
{
|
{
|
||||||
|
@ -251,7 +251,7 @@ Cc: linux-tegra@vger.kernel.org
|
|||||||
static int spear13xx_pcie_link_up(struct dw_pcie *pci)
|
static int spear13xx_pcie_link_up(struct dw_pcie *pci)
|
||||||
--- a/drivers/pci/controller/dwc/pcie-tegra194.c
|
--- a/drivers/pci/controller/dwc/pcie-tegra194.c
|
||||||
+++ b/drivers/pci/controller/dwc/pcie-tegra194.c
|
+++ b/drivers/pci/controller/dwc/pcie-tegra194.c
|
||||||
@@ -763,8 +763,6 @@ static void tegra_pcie_enable_msi_interr
|
@@ -768,8 +768,6 @@ static void tegra_pcie_enable_msi_interr
|
||||||
struct tegra_pcie_dw *pcie = to_tegra_pcie(pci);
|
struct tegra_pcie_dw *pcie = to_tegra_pcie(pci);
|
||||||
u32 val;
|
u32 val;
|
||||||
|
|
||||||
|
@ -21,7 +21,7 @@ Change-Id: I17ecad1f1731c88d8d91485d5d5f8a38b76f7104
|
|||||||
|
|
||||||
--- a/drivers/clk/qcom/Kconfig
|
--- a/drivers/clk/qcom/Kconfig
|
||||||
+++ b/drivers/clk/qcom/Kconfig
|
+++ b/drivers/clk/qcom/Kconfig
|
||||||
@@ -155,6 +155,13 @@ config IPQ_GCC_8074
|
@@ -156,6 +156,13 @@ config IPQ_GCC_8074
|
||||||
i2c, USB, SD/eMMC, etc. Select this for the root clock
|
i2c, USB, SD/eMMC, etc. Select this for the root clock
|
||||||
of ipq8074.
|
of ipq8074.
|
||||||
|
|
||||||
|
@ -109,7 +109,7 @@
|
|||||||
__be16 vlan_proto, u16 vlan_id)
|
__be16 vlan_proto, u16 vlan_id)
|
||||||
--- a/include/linux/netdevice.h
|
--- a/include/linux/netdevice.h
|
||||||
+++ b/include/linux/netdevice.h
|
+++ b/include/linux/netdevice.h
|
||||||
@@ -2787,6 +2787,10 @@ enum netdev_cmd {
|
@@ -2786,6 +2786,10 @@ enum netdev_cmd {
|
||||||
NETDEV_CVLAN_FILTER_DROP_INFO,
|
NETDEV_CVLAN_FILTER_DROP_INFO,
|
||||||
NETDEV_SVLAN_FILTER_PUSH_INFO,
|
NETDEV_SVLAN_FILTER_PUSH_INFO,
|
||||||
NETDEV_SVLAN_FILTER_DROP_INFO,
|
NETDEV_SVLAN_FILTER_DROP_INFO,
|
||||||
@ -136,7 +136,7 @@
|
|||||||
const struct dst_entry *dst = skb_dst(skb);
|
const struct dst_entry *dst = skb_dst(skb);
|
||||||
--- a/include/net/neighbour.h
|
--- a/include/net/neighbour.h
|
||||||
+++ b/include/net/neighbour.h
|
+++ b/include/net/neighbour.h
|
||||||
@@ -574,4 +574,15 @@ static inline void neigh_update_is_route
|
@@ -567,4 +567,15 @@ static inline void neigh_update_is_route
|
||||||
*notify = 1;
|
*notify = 1;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -401,7 +401,7 @@
|
|||||||
/*
|
/*
|
||||||
* Determine initial path cost based on speed.
|
* Determine initial path cost based on speed.
|
||||||
* using recommendations from 802.1d standard
|
* using recommendations from 802.1d standard
|
||||||
@@ -711,6 +717,8 @@ int br_add_if(struct net_bridge *br, str
|
@@ -712,6 +718,8 @@ int br_add_if(struct net_bridge *br, str
|
||||||
|
|
||||||
kobject_uevent(&p->kobj, KOBJ_ADD);
|
kobject_uevent(&p->kobj, KOBJ_ADD);
|
||||||
|
|
||||||
@ -410,7 +410,7 @@
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
err7:
|
err7:
|
||||||
@@ -747,6 +755,8 @@ int br_del_if(struct net_bridge *br, str
|
@@ -748,6 +756,8 @@ int br_del_if(struct net_bridge *br, str
|
||||||
if (!p || p->br != br)
|
if (!p || p->br != br)
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
|
|
||||||
@ -419,7 +419,7 @@
|
|||||||
/* Since more than one interface can be attached to a bridge,
|
/* Since more than one interface can be attached to a bridge,
|
||||||
* there still maybe an alternate path for netconsole to use;
|
* there still maybe an alternate path for netconsole to use;
|
||||||
* therefore there is no reason for a NETDEV_RELEASE event.
|
* therefore there is no reason for a NETDEV_RELEASE event.
|
||||||
@@ -812,3 +822,74 @@ bool br_port_flag_is_set(const struct ne
|
@@ -813,3 +823,74 @@ bool br_port_flag_is_set(const struct ne
|
||||||
return p->flags & flag;
|
return p->flags & flag;
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL_GPL(br_port_flag_is_set);
|
EXPORT_SYMBOL_GPL(br_port_flag_is_set);
|
||||||
@ -508,7 +508,7 @@
|
|||||||
#endif
|
#endif
|
||||||
--- a/net/core/neighbour.c
|
--- a/net/core/neighbour.c
|
||||||
+++ b/net/core/neighbour.c
|
+++ b/net/core/neighbour.c
|
||||||
@@ -1236,7 +1236,21 @@ static void neigh_update_hhs(struct neig
|
@@ -1209,7 +1209,21 @@ static void neigh_update_hhs(struct neig
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -530,7 +530,7 @@
|
|||||||
|
|
||||||
/* Generic update routine.
|
/* Generic update routine.
|
||||||
-- lladdr is new lladdr or NULL, if it is not supplied.
|
-- lladdr is new lladdr or NULL, if it is not supplied.
|
||||||
@@ -1267,6 +1281,7 @@ static int __neigh_update(struct neighbo
|
@@ -1240,6 +1254,7 @@ static int __neigh_update(struct neighbo
|
||||||
int notify = 0;
|
int notify = 0;
|
||||||
struct net_device *dev;
|
struct net_device *dev;
|
||||||
int update_isrouter = 0;
|
int update_isrouter = 0;
|
||||||
@ -538,7 +538,7 @@
|
|||||||
|
|
||||||
trace_neigh_update(neigh, lladdr, new, flags, nlmsg_pid);
|
trace_neigh_update(neigh, lladdr, new, flags, nlmsg_pid);
|
||||||
|
|
||||||
@@ -1281,6 +1296,8 @@ static int __neigh_update(struct neighbo
|
@@ -1254,6 +1269,8 @@ static int __neigh_update(struct neighbo
|
||||||
new = old;
|
new = old;
|
||||||
goto out;
|
goto out;
|
||||||
}
|
}
|
||||||
@ -547,7 +547,7 @@
|
|||||||
if (!(flags & NEIGH_UPDATE_F_ADMIN) &&
|
if (!(flags & NEIGH_UPDATE_F_ADMIN) &&
|
||||||
(old & (NUD_NOARP | NUD_PERMANENT)))
|
(old & (NUD_NOARP | NUD_PERMANENT)))
|
||||||
goto out;
|
goto out;
|
||||||
@@ -1318,6 +1335,11 @@ static int __neigh_update(struct neighbo
|
@@ -1291,6 +1308,11 @@ static int __neigh_update(struct neighbo
|
||||||
- compare new & old
|
- compare new & old
|
||||||
- if they are different, check override flag
|
- if they are different, check override flag
|
||||||
*/
|
*/
|
||||||
@ -559,7 +559,7 @@
|
|||||||
if ((old & NUD_VALID) &&
|
if ((old & NUD_VALID) &&
|
||||||
!memcmp(lladdr, neigh->ha, dev->addr_len))
|
!memcmp(lladdr, neigh->ha, dev->addr_len))
|
||||||
lladdr = neigh->ha;
|
lladdr = neigh->ha;
|
||||||
@@ -1440,8 +1462,11 @@ out:
|
@@ -1413,8 +1435,11 @@ out:
|
||||||
if (((new ^ old) & NUD_PERMANENT) || ext_learn_change)
|
if (((new ^ old) & NUD_PERMANENT) || ext_learn_change)
|
||||||
neigh_update_gc_list(neigh);
|
neigh_update_gc_list(neigh);
|
||||||
|
|
||||||
@ -594,7 +594,7 @@
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
out_remove_new_fa:
|
out_remove_new_fa:
|
||||||
@@ -1724,6 +1730,9 @@ int fib_table_delete(struct net *net, st
|
@@ -1725,6 +1731,9 @@ int fib_table_delete(struct net *net, st
|
||||||
if (fa_to_delete->fa_state & FA_S_ACCESSED)
|
if (fa_to_delete->fa_state & FA_S_ACCESSED)
|
||||||
rt_cache_flush(cfg->fc_nlinfo.nl_net);
|
rt_cache_flush(cfg->fc_nlinfo.nl_net);
|
||||||
|
|
||||||
@ -604,7 +604,7 @@
|
|||||||
fib_release_info(fa_to_delete->fa_info);
|
fib_release_info(fa_to_delete->fa_info);
|
||||||
alias_free_mem_rcu(fa_to_delete);
|
alias_free_mem_rcu(fa_to_delete);
|
||||||
return 0;
|
return 0;
|
||||||
@@ -2360,6 +2369,20 @@ void __init fib_trie_init(void)
|
@@ -2365,6 +2374,20 @@ void __init fib_trie_init(void)
|
||||||
0, SLAB_PANIC, NULL);
|
0, SLAB_PANIC, NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -639,7 +639,7 @@
|
|||||||
#endif
|
#endif
|
||||||
--- a/net/ipv6/addrconf.c
|
--- a/net/ipv6/addrconf.c
|
||||||
+++ b/net/ipv6/addrconf.c
|
+++ b/net/ipv6/addrconf.c
|
||||||
@@ -7269,3 +7269,35 @@ void addrconf_cleanup(void)
|
@@ -7287,3 +7287,35 @@ void addrconf_cleanup(void)
|
||||||
|
|
||||||
destroy_workqueue(addrconf_wq);
|
destroy_workqueue(addrconf_wq);
|
||||||
}
|
}
|
||||||
@ -677,7 +677,7 @@
|
|||||||
+
|
+
|
||||||
--- a/net/ipv6/ndisc.c
|
--- a/net/ipv6/ndisc.c
|
||||||
+++ b/net/ipv6/ndisc.c
|
+++ b/net/ipv6/ndisc.c
|
||||||
@@ -649,6 +649,7 @@ void ndisc_send_ns(struct net_device *de
|
@@ -650,6 +650,7 @@ void ndisc_send_ns(struct net_device *de
|
||||||
|
|
||||||
ndisc_send_skb(skb, daddr, saddr);
|
ndisc_send_skb(skb, daddr, saddr);
|
||||||
}
|
}
|
||||||
|
@ -466,7 +466,7 @@
|
|||||||
#endif /* !(__LINUX_IF_PPPOX_H) */
|
#endif /* !(__LINUX_IF_PPPOX_H) */
|
||||||
--- a/include/linux/netdevice.h
|
--- a/include/linux/netdevice.h
|
||||||
+++ b/include/linux/netdevice.h
|
+++ b/include/linux/netdevice.h
|
||||||
@@ -1651,6 +1651,24 @@ enum netdev_priv_flags {
|
@@ -1654,6 +1654,24 @@ enum netdev_priv_flags {
|
||||||
IFF_NO_IP_ALIGN = 1<<31,
|
IFF_NO_IP_ALIGN = 1<<31,
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -491,7 +491,7 @@
|
|||||||
#define IFF_802_1Q_VLAN IFF_802_1Q_VLAN
|
#define IFF_802_1Q_VLAN IFF_802_1Q_VLAN
|
||||||
#define IFF_EBRIDGE IFF_EBRIDGE
|
#define IFF_EBRIDGE IFF_EBRIDGE
|
||||||
#define IFF_BONDING IFF_BONDING
|
#define IFF_BONDING IFF_BONDING
|
||||||
@@ -2031,6 +2049,7 @@ struct net_device {
|
@@ -2033,6 +2051,7 @@ struct net_device {
|
||||||
|
|
||||||
unsigned int flags;
|
unsigned int flags;
|
||||||
unsigned int priv_flags;
|
unsigned int priv_flags;
|
||||||
|
@ -2,16 +2,16 @@
|
|||||||
+++ b/drivers/net/bonding/bond_main.c
|
+++ b/drivers/net/bonding/bond_main.c
|
||||||
@@ -247,6 +247,7 @@ static const struct flow_dissector_key f
|
@@ -247,6 +247,7 @@ static const struct flow_dissector_key f
|
||||||
};
|
};
|
||||||
|
|
||||||
static struct flow_dissector flow_keys_bonding __read_mostly;
|
static struct flow_dissector flow_keys_bonding __read_mostly;
|
||||||
+static unsigned long bond_id_mask = 0xFFFFFFF0;
|
+static unsigned long bond_id_mask = 0xFFFFFFF0;
|
||||||
|
|
||||||
/*-------------------------- Forward declarations ---------------------------*/
|
/*-------------------------- Forward declarations ---------------------------*/
|
||||||
|
|
||||||
@@ -301,6 +302,20 @@ netdev_tx_t bond_dev_queue_xmit(struct b
|
@@ -301,6 +302,20 @@ netdev_tx_t bond_dev_queue_xmit(struct b
|
||||||
return dev_queue_xmit(skb);
|
return dev_queue_xmit(skb);
|
||||||
}
|
}
|
||||||
|
|
||||||
+int bond_get_id(struct net_device *bond_dev)
|
+int bond_get_id(struct net_device *bond_dev)
|
||||||
+{
|
+{
|
||||||
+ struct bonding *bond;
|
+ struct bonding *bond;
|
||||||
@ -27,9 +27,9 @@
|
|||||||
+EXPORT_SYMBOL(bond_get_id);
|
+EXPORT_SYMBOL(bond_get_id);
|
||||||
+
|
+
|
||||||
/*---------------------------------- VLAN -----------------------------------*/
|
/*---------------------------------- VLAN -----------------------------------*/
|
||||||
|
|
||||||
/* In the following 2 functions, bond_vlan_rx_add_vid and bond_vlan_rx_kill_vid,
|
/* In the following 2 functions, bond_vlan_rx_add_vid and bond_vlan_rx_kill_vid,
|
||||||
@@ -4822,6 +4837,9 @@ static void bond_destructor(struct net_d
|
@@ -4870,6 +4885,9 @@ static void bond_destructor(struct net_d
|
||||||
struct bonding *bond = netdev_priv(bond_dev);
|
struct bonding *bond = netdev_priv(bond_dev);
|
||||||
if (bond->wq)
|
if (bond->wq)
|
||||||
destroy_workqueue(bond->wq);
|
destroy_workqueue(bond->wq);
|
||||||
@ -37,31 +37,12 @@
|
|||||||
+ if (bond->id != (~0U))
|
+ if (bond->id != (~0U))
|
||||||
+ clear_bit(bond->id, &bond_id_mask);
|
+ clear_bit(bond->id, &bond_id_mask);
|
||||||
}
|
}
|
||||||
|
|
||||||
void bond_setup(struct net_device *bond_dev)
|
void bond_setup(struct net_device *bond_dev)
|
||||||
@@ -4936,7 +4954,7 @@ static int bond_check_params(struct bond
|
@@ -5442,6 +5460,14 @@ int bond_create(struct net *net, const c
|
||||||
int bond_mode = BOND_MODE_ROUNDROBIN;
|
|
||||||
int xmit_hashtype = BOND_XMIT_POLICY_LAYER2;
|
|
||||||
int lacp_fast = 0;
|
|
||||||
- int tlb_dynamic_lb;
|
|
||||||
+ int tlb_dynamic_lb;
|
|
||||||
|
|
||||||
/* Convert string parameters. */
|
|
||||||
if (mode) {
|
|
||||||
@@ -5275,7 +5293,7 @@ static int bond_check_params(struct bond
|
|
||||||
params->peer_notif_delay = 0;
|
|
||||||
params->use_carrier = use_carrier;
|
|
||||||
params->lacp_fast = lacp_fast;
|
|
||||||
- params->primary[0] = 0;
|
|
||||||
+ params->primary[0] = 0;
|
|
||||||
params->primary_reselect = primary_reselect_value;
|
|
||||||
params->fail_over_mac = fail_over_mac_value;
|
|
||||||
params->tx_queues = tx_queues;
|
|
||||||
@@ -5390,7 +5408,15 @@ int bond_create(struct net *net, const c
|
|
||||||
bond_work_init_all(bond);
|
bond_work_init_all(bond);
|
||||||
|
|
||||||
rtnl_unlock();
|
rtnl_unlock();
|
||||||
- return 0;
|
|
||||||
+
|
+
|
||||||
+ bond = netdev_priv(bond_dev);
|
+ bond = netdev_priv(bond_dev);
|
||||||
+ bond->id = ~0U;
|
+ bond->id = ~0U;
|
||||||
@ -70,21 +51,20 @@
|
|||||||
+ set_bit(bond->id, &bond_id_mask);
|
+ set_bit(bond->id, &bond_id_mask);
|
||||||
+ }
|
+ }
|
||||||
+
|
+
|
||||||
+ return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __net_init bond_net_init(struct net *net)
|
|
||||||
--- a/include/net/bonding.h
|
--- a/include/net/bonding.h
|
||||||
+++ b/include/net/bonding.h
|
+++ b/include/net/bonding.h
|
||||||
@@ -256,6 +256,7 @@ struct bonding {
|
@@ -257,6 +257,7 @@ struct bonding {
|
||||||
/* protecting ipsec_list */
|
/* protecting ipsec_list */
|
||||||
spinlock_t ipsec_lock;
|
spinlock_t ipsec_lock;
|
||||||
#endif /* CONFIG_XFRM_OFFLOAD */
|
#endif /* CONFIG_XFRM_OFFLOAD */
|
||||||
+ u32 id;
|
+ u32 id;
|
||||||
};
|
};
|
||||||
|
|
||||||
#define bond_slave_get_rcu(dev) \
|
#define bond_slave_get_rcu(dev) \
|
||||||
@@ -629,6 +629,7 @@ struct bond_net {
|
@@ -629,6 +630,7 @@ struct bond_net {
|
||||||
|
|
||||||
int bond_arp_rcv(const struct sk_buff *skb, struct bonding *bond, struct slave *slave);
|
int bond_arp_rcv(const struct sk_buff *skb, struct bonding *bond, struct slave *slave);
|
||||||
netdev_tx_t bond_dev_queue_xmit(struct bonding *bond, struct sk_buff *skb, struct net_device *slave_dev);
|
netdev_tx_t bond_dev_queue_xmit(struct bonding *bond, struct sk_buff *skb, struct net_device *slave_dev);
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/net/core/dev.c
|
--- a/net/core/dev.c
|
||||||
+++ b/net/core/dev.c
|
+++ b/net/core/dev.c
|
||||||
@@ -1685,7 +1685,7 @@ const char *netdev_cmd_to_name(enum netd
|
@@ -1802,7 +1802,7 @@ const char *netdev_cmd_to_name(enum netd
|
||||||
N(UDP_TUNNEL_DROP_INFO) N(CHANGE_TX_QUEUE_LEN)
|
N(UDP_TUNNEL_DROP_INFO) N(CHANGE_TX_QUEUE_LEN)
|
||||||
N(CVLAN_FILTER_PUSH_INFO) N(CVLAN_FILTER_DROP_INFO)
|
N(CVLAN_FILTER_PUSH_INFO) N(CVLAN_FILTER_DROP_INFO)
|
||||||
N(SVLAN_FILTER_PUSH_INFO) N(SVLAN_FILTER_DROP_INFO)
|
N(SVLAN_FILTER_PUSH_INFO) N(SVLAN_FILTER_DROP_INFO)
|
||||||
|
@ -1,49 +0,0 @@
|
|||||||
From 474740fac667ccf7a6b3c748d851e5ed364d59eb Mon Sep 17 00:00:00 2001
|
|
||||||
From: Praveenkumar I <ipkumar@codeaurora.org>
|
|
||||||
Date: Mon, 4 Sep 2017 15:00:10 +0530
|
|
||||||
Subject: [PATCH 1/3] clk: qcom: fix wrong RCG clock rate for high parent freq
|
|
||||||
|
|
||||||
If the parent clock rate is greater than unsigned long max
|
|
||||||
divided by 2 then the integer overflow is happening while
|
|
||||||
calculating the clock rate. Since RCG2 uses half integer
|
|
||||||
dividers, the clock rate is first being multiplied by 2
|
|
||||||
followed by division and this multiplication leads to
|
|
||||||
overflow.
|
|
||||||
|
|
||||||
Change-Id: I4e4f41b4a539446b962eb684761a3aad6f8a8977
|
|
||||||
Signed-off-by: Abhishek Sahu <absahu@codeaurora.org>
|
|
||||||
(cherry picked from commit 9cfedaf465eb18ef31e4d677cba5f3147fe6d430)
|
|
||||||
Signed-off-by: Praveenkumar I <ipkumar@codeaurora.org>
|
|
||||||
|
|
||||||
Change-Id: I69b78616f468bb7a9647c7994a8579b97c376d4e
|
|
||||||
---
|
|
||||||
drivers/clk/qcom/clk-rcg2.c | 12 ++++++------
|
|
||||||
1 file changed, 6 insertions(+), 6 deletions(-)
|
|
||||||
|
|
||||||
--- a/drivers/clk/qcom/clk-rcg2.c
|
|
||||||
+++ b/drivers/clk/qcom/clk-rcg2.c
|
|
||||||
@@ -145,18 +145,18 @@ static int clk_rcg2_set_parent(struct cl
|
|
||||||
* hid_div n
|
|
||||||
*/
|
|
||||||
static unsigned long
|
|
||||||
-calc_rate(unsigned long rate, u32 m, u32 n, u32 mode, u32 hid_div)
|
|
||||||
+calc_rate(unsigned long parent_rate, u32 m, u32 n, u32 mode, u32 hid_div)
|
|
||||||
{
|
|
||||||
+ u64 rate = parent_rate;
|
|
||||||
+
|
|
||||||
if (hid_div) {
|
|
||||||
rate *= 2;
|
|
||||||
- rate /= hid_div + 1;
|
|
||||||
+ do_div(rate, hid_div + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mode) {
|
|
||||||
- u64 tmp = rate;
|
|
||||||
- tmp *= m;
|
|
||||||
- do_div(tmp, n);
|
|
||||||
- rate = tmp;
|
|
||||||
+ rate *= m;
|
|
||||||
+ do_div(rate, n);
|
|
||||||
}
|
|
||||||
|
|
||||||
return rate;
|
|
@ -86,7 +86,7 @@ Change-Id: Ifb4175b02d89542baa1b758107c2ce86f7bf8599
|
|||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -311,12 +319,19 @@ static int __clk_rcg2_configure(struct c
|
@@ -305,12 +313,19 @@ static int __clk_rcg2_configure(struct c
|
||||||
static int clk_rcg2_configure(struct clk_rcg2 *rcg, const struct freq_tbl *f)
|
static int clk_rcg2_configure(struct clk_rcg2 *rcg, const struct freq_tbl *f)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
@ -107,7 +107,7 @@ Change-Id: Ifb4175b02d89542baa1b758107c2ce86f7bf8599
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int __clk_rcg2_set_rate(struct clk_hw *hw, unsigned long rate,
|
static int __clk_rcg2_set_rate(struct clk_hw *hw, unsigned long rate,
|
||||||
@@ -796,7 +811,7 @@ static int clk_gfx3d_set_rate_and_parent
|
@@ -790,7 +805,7 @@ static int clk_gfx3d_set_rate_and_parent
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
@ -116,7 +116,7 @@ Change-Id: Ifb4175b02d89542baa1b758107c2ce86f7bf8599
|
|||||||
}
|
}
|
||||||
|
|
||||||
static int clk_gfx3d_set_rate(struct clk_hw *hw, unsigned long rate,
|
static int clk_gfx3d_set_rate(struct clk_hw *hw, unsigned long rate,
|
||||||
@@ -908,7 +923,7 @@ static int clk_rcg2_shared_enable(struct
|
@@ -902,7 +917,7 @@ static int clk_rcg2_shared_enable(struct
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
@ -125,7 +125,7 @@ Change-Id: Ifb4175b02d89542baa1b758107c2ce86f7bf8599
|
|||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
@@ -939,7 +954,7 @@ static void clk_rcg2_shared_disable(stru
|
@@ -933,7 +948,7 @@ static void clk_rcg2_shared_disable(stru
|
||||||
regmap_write(rcg->clkr.regmap, rcg->cmd_rcgr + CFG_REG,
|
regmap_write(rcg->clkr.regmap, rcg->cmd_rcgr + CFG_REG,
|
||||||
rcg->safe_src_index << CFG_SRC_SEL_SHIFT);
|
rcg->safe_src_index << CFG_SRC_SEL_SHIFT);
|
||||||
|
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/arch/mips/Kconfig
|
--- a/arch/mips/Kconfig
|
||||||
+++ b/arch/mips/Kconfig
|
+++ b/arch/mips/Kconfig
|
||||||
@@ -2438,6 +2438,12 @@ config MIPS_VPE_LOADER
|
@@ -2439,6 +2439,12 @@ config MIPS_VPE_LOADER
|
||||||
Includes a loader for loading an elf relocatable object
|
Includes a loader for loading an elf relocatable object
|
||||||
onto another VPE and running it.
|
onto another VPE and running it.
|
||||||
|
|
||||||
|
@ -1090,7 +1090,7 @@ Date: Wed Sep 30 17:20:19 2020 +0530
|
|||||||
+};
|
+};
|
||||||
--- a/MAINTAINERS
|
--- a/MAINTAINERS
|
||||||
+++ b/MAINTAINERS
|
+++ b/MAINTAINERS
|
||||||
@@ -7068,6 +7068,14 @@ F: drivers/ptp/ptp_qoriq.c
|
@@ -7061,6 +7061,14 @@ F: drivers/ptp/ptp_qoriq.c
|
||||||
F: drivers/ptp/ptp_qoriq_debugfs.c
|
F: drivers/ptp/ptp_qoriq_debugfs.c
|
||||||
F: include/linux/fsl/ptp_qoriq.h
|
F: include/linux/fsl/ptp_qoriq.h
|
||||||
|
|
||||||
|
@ -17,9 +17,9 @@
|
|||||||
help
|
help
|
||||||
--- a/drivers/of/fdt.c
|
--- a/drivers/of/fdt.c
|
||||||
+++ b/drivers/of/fdt.c
|
+++ b/drivers/of/fdt.c
|
||||||
@@ -1056,6 +1056,17 @@ int __init early_init_dt_scan_chosen(uns
|
@@ -1059,6 +1059,17 @@ int __init early_init_dt_scan_chosen(uns
|
||||||
if (p != NULL && l > 0)
|
if (p != NULL && l > 0)
|
||||||
strlcpy(data, p, min(l, COMMAND_LINE_SIZE));
|
strlcat(data, p, min_t(int, strlen(data) + (int)l, COMMAND_LINE_SIZE));
|
||||||
|
|
||||||
+ /* CONFIG_CMDLINE_OVERRIDE is used to fallback to a different
|
+ /* CONFIG_CMDLINE_OVERRIDE is used to fallback to a different
|
||||||
+ * device tree option of chosen/bootargs-override. This is
|
+ * device tree option of chosen/bootargs-override. This is
|
||||||
|
@ -28,7 +28,7 @@ Signed-off-by: Michael Gray <michael.gray@lantisproject.com>
|
|||||||
|
|
||||||
--- a/arch/arm/Kconfig
|
--- a/arch/arm/Kconfig
|
||||||
+++ b/arch/arm/Kconfig
|
+++ b/arch/arm/Kconfig
|
||||||
@@ -1777,6 +1777,17 @@ config ARM_ATAG_DTB_COMPAT_CMDLINE_EXTEN
|
@@ -1778,6 +1778,17 @@ config ARM_ATAG_DTB_COMPAT_CMDLINE_EXTEN
|
||||||
The command-line arguments provided by the boot loader will be
|
The command-line arguments provided by the boot loader will be
|
||||||
appended to the the device tree bootargs property.
|
appended to the the device tree bootargs property.
|
||||||
|
|
||||||
@ -176,7 +176,7 @@ Signed-off-by: Michael Gray <michael.gray@lantisproject.com>
|
|||||||
}
|
}
|
||||||
--- a/init/main.c
|
--- a/init/main.c
|
||||||
+++ b/init/main.c
|
+++ b/init/main.c
|
||||||
@@ -110,6 +110,10 @@
|
@@ -108,6 +108,10 @@
|
||||||
|
|
||||||
#include <kunit/test.h>
|
#include <kunit/test.h>
|
||||||
|
|
||||||
@ -187,7 +187,7 @@ Signed-off-by: Michael Gray <michael.gray@lantisproject.com>
|
|||||||
static int kernel_init(void *);
|
static int kernel_init(void *);
|
||||||
|
|
||||||
extern void init_IRQ(void);
|
extern void init_IRQ(void);
|
||||||
@@ -904,6 +908,18 @@ asmlinkage __visible void __init __no_sa
|
@@ -901,6 +905,18 @@ asmlinkage __visible void __init __no_sa
|
||||||
page_alloc_init();
|
page_alloc_init();
|
||||||
|
|
||||||
pr_notice("Kernel command line: %s\n", saved_command_line);
|
pr_notice("Kernel command line: %s\n", saved_command_line);
|
||||||
|
@ -16,7 +16,7 @@ Cc: Robert Marko <robert.marko@sartura.hr>
|
|||||||
|
|
||||||
--- a/MAINTAINERS
|
--- a/MAINTAINERS
|
||||||
+++ b/MAINTAINERS
|
+++ b/MAINTAINERS
|
||||||
@@ -8538,6 +8538,22 @@ F: include/net/nl802154.h
|
@@ -8531,6 +8531,22 @@ F: include/net/nl802154.h
|
||||||
F: net/ieee802154/
|
F: net/ieee802154/
|
||||||
F: net/mac802154/
|
F: net/mac802154/
|
||||||
|
|
||||||
|
@ -22,7 +22,7 @@ Signed-off-by: Adrian Panella <ianchi74@outlook.com>
|
|||||||
|
|
||||||
--- a/arch/arm/Kconfig
|
--- a/arch/arm/Kconfig
|
||||||
+++ b/arch/arm/Kconfig
|
+++ b/arch/arm/Kconfig
|
||||||
@@ -1777,6 +1777,17 @@ config ARM_ATAG_DTB_COMPAT_CMDLINE_EXTEN
|
@@ -1778,6 +1778,17 @@ config ARM_ATAG_DTB_COMPAT_CMDLINE_EXTEN
|
||||||
The command-line arguments provided by the boot loader will be
|
The command-line arguments provided by the boot loader will be
|
||||||
appended to the the device tree bootargs property.
|
appended to the the device tree bootargs property.
|
||||||
|
|
||||||
@ -157,7 +157,7 @@ Signed-off-by: Adrian Panella <ianchi74@outlook.com>
|
|||||||
}
|
}
|
||||||
--- a/init/main.c
|
--- a/init/main.c
|
||||||
+++ b/init/main.c
|
+++ b/init/main.c
|
||||||
@@ -110,6 +110,10 @@
|
@@ -108,6 +108,10 @@
|
||||||
|
|
||||||
#include <kunit/test.h>
|
#include <kunit/test.h>
|
||||||
|
|
||||||
@ -168,7 +168,7 @@ Signed-off-by: Adrian Panella <ianchi74@outlook.com>
|
|||||||
static int kernel_init(void *);
|
static int kernel_init(void *);
|
||||||
|
|
||||||
extern void init_IRQ(void);
|
extern void init_IRQ(void);
|
||||||
@@ -904,6 +908,18 @@ asmlinkage __visible void __init __no_sa
|
@@ -901,6 +905,18 @@ asmlinkage __visible void __init __no_sa
|
||||||
page_alloc_init();
|
page_alloc_init();
|
||||||
|
|
||||||
pr_notice("Kernel command line: %s\n", saved_command_line);
|
pr_notice("Kernel command line: %s\n", saved_command_line);
|
||||||
|
@ -36,7 +36,7 @@
|
|||||||
|
|
||||||
--- a/include/linux/libata.h
|
--- a/include/linux/libata.h
|
||||||
+++ b/include/linux/libata.h
|
+++ b/include/linux/libata.h
|
||||||
@@ -912,6 +912,8 @@ struct ata_port_operations {
|
@@ -916,6 +916,8 @@ struct ata_port_operations {
|
||||||
enum ata_completion_errors (*qc_prep)(struct ata_queued_cmd *qc);
|
enum ata_completion_errors (*qc_prep)(struct ata_queued_cmd *qc);
|
||||||
unsigned int (*qc_issue)(struct ata_queued_cmd *qc);
|
unsigned int (*qc_issue)(struct ata_queued_cmd *qc);
|
||||||
bool (*qc_fill_rtf)(struct ata_queued_cmd *qc);
|
bool (*qc_fill_rtf)(struct ata_queued_cmd *qc);
|
||||||
@ -45,7 +45,7 @@
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Configuration and exception handling
|
* Configuration and exception handling
|
||||||
@@ -1002,6 +1004,9 @@ struct ata_port_operations {
|
@@ -1006,6 +1008,9 @@ struct ata_port_operations {
|
||||||
void (*phy_reset)(struct ata_port *ap);
|
void (*phy_reset)(struct ata_port *ap);
|
||||||
void (*eng_timeout)(struct ata_port *ap);
|
void (*eng_timeout)(struct ata_port *ap);
|
||||||
|
|
||||||
|
@ -17,7 +17,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
|||||||
|
|
||||||
--- a/arch/mips/kernel/setup.c
|
--- a/arch/mips/kernel/setup.c
|
||||||
+++ b/arch/mips/kernel/setup.c
|
+++ b/arch/mips/kernel/setup.c
|
||||||
@@ -542,8 +542,28 @@ static int __init bootcmdline_scan_chose
|
@@ -545,8 +545,28 @@ static int __init bootcmdline_scan_chose
|
||||||
|
|
||||||
#endif /* CONFIG_OF_EARLY_FLATTREE */
|
#endif /* CONFIG_OF_EARLY_FLATTREE */
|
||||||
|
|
||||||
@ -46,7 +46,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
|||||||
bool dt_bootargs = false;
|
bool dt_bootargs = false;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -557,6 +577,14 @@ static void __init bootcmdline_init(void
|
@@ -560,6 +580,14 @@ static void __init bootcmdline_init(void
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -10,7 +10,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
|||||||
|
|
||||||
--- a/arch/mips/kernel/setup.c
|
--- a/arch/mips/kernel/setup.c
|
||||||
+++ b/arch/mips/kernel/setup.c
|
+++ b/arch/mips/kernel/setup.c
|
||||||
@@ -694,8 +694,6 @@ static void __init arch_mem_init(char **
|
@@ -697,8 +697,6 @@ static void __init arch_mem_init(char **
|
||||||
if (crashk_res.start != crashk_res.end)
|
if (crashk_res.start != crashk_res.end)
|
||||||
memblock_reserve(crashk_res.start, resource_size(&crashk_res));
|
memblock_reserve(crashk_res.start, resource_size(&crashk_res));
|
||||||
#endif
|
#endif
|
||||||
@ -19,7 +19,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
|||||||
/*
|
/*
|
||||||
* In order to reduce the possibility of kernel panic when failed to
|
* In order to reduce the possibility of kernel panic when failed to
|
||||||
* get IO TLB memory under CONFIG_SWIOTLB, it is better to allocate
|
* get IO TLB memory under CONFIG_SWIOTLB, it is better to allocate
|
||||||
@@ -815,6 +813,7 @@ void __init setup_arch(char **cmdline_p)
|
@@ -818,6 +816,7 @@ void __init setup_arch(char **cmdline_p)
|
||||||
|
|
||||||
cpu_cache_init();
|
cpu_cache_init();
|
||||||
paging_init();
|
paging_init();
|
||||||
|
@ -55,7 +55,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
|||||||
+};
|
+};
|
||||||
--- a/drivers/mtd/spi-nor/core.c
|
--- a/drivers/mtd/spi-nor/core.c
|
||||||
+++ b/drivers/mtd/spi-nor/core.c
|
+++ b/drivers/mtd/spi-nor/core.c
|
||||||
@@ -2021,6 +2021,7 @@ int spi_nor_sr2_bit7_quad_enable(struct
|
@@ -2022,6 +2022,7 @@ int spi_nor_sr2_bit7_quad_enable(struct
|
||||||
|
|
||||||
static const struct spi_nor_manufacturer *manufacturers[] = {
|
static const struct spi_nor_manufacturer *manufacturers[] = {
|
||||||
&spi_nor_atmel,
|
&spi_nor_atmel,
|
||||||
|
@ -14,7 +14,7 @@ Signed-off-by: René van Dorst <opensource@vdorst.com>
|
|||||||
|
|
||||||
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
|
||||||
@@ -2979,6 +2979,7 @@ static const struct net_device_ops mtk_n
|
@@ -2982,6 +2982,7 @@ static const struct net_device_ops mtk_n
|
||||||
|
|
||||||
static int mtk_add_mac(struct mtk_eth *eth, struct device_node *np)
|
static int mtk_add_mac(struct mtk_eth *eth, struct device_node *np)
|
||||||
{
|
{
|
||||||
@ -22,7 +22,7 @@ Signed-off-by: René van Dorst <opensource@vdorst.com>
|
|||||||
const __be32 *_id = of_get_property(np, "reg", NULL);
|
const __be32 *_id = of_get_property(np, "reg", NULL);
|
||||||
phy_interface_t phy_mode;
|
phy_interface_t phy_mode;
|
||||||
struct phylink *phylink;
|
struct phylink *phylink;
|
||||||
@@ -3074,6 +3075,9 @@ static int mtk_add_mac(struct mtk_eth *e
|
@@ -3077,6 +3078,9 @@ static int mtk_add_mac(struct mtk_eth *e
|
||||||
else
|
else
|
||||||
eth->netdev[id]->max_mtu = MTK_MAX_RX_LENGTH_2K - MTK_RX_ETH_HLEN;
|
eth->netdev[id]->max_mtu = MTK_MAX_RX_LENGTH_2K - MTK_RX_ETH_HLEN;
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ Signed-off-by: John Crispin <blogic@openwrt.org>
|
|||||||
|
|
||||||
--- a/drivers/mmc/host/Kconfig
|
--- a/drivers/mmc/host/Kconfig
|
||||||
+++ b/drivers/mmc/host/Kconfig
|
+++ b/drivers/mmc/host/Kconfig
|
||||||
@@ -1102,3 +1102,5 @@ config MMC_OWL
|
@@ -1103,3 +1103,5 @@ config MMC_OWL
|
||||||
|
|
||||||
config MMC_SDHCI_EXTERNAL_DMA
|
config MMC_SDHCI_EXTERNAL_DMA
|
||||||
bool
|
bool
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
--- a/include/linux/netdevice.h
|
--- a/include/linux/netdevice.h
|
||||||
+++ b/include/linux/netdevice.h
|
+++ b/include/linux/netdevice.h
|
||||||
@@ -1027,6 +1027,8 @@ struct netdev_net_notifier {
|
@@ -1030,6 +1030,8 @@ struct netdev_net_notifier {
|
||||||
struct notifier_block *nb;
|
struct notifier_block *nb;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -9,7 +9,7 @@
|
|||||||
/*
|
/*
|
||||||
* This structure defines the management hooks for network devices.
|
* This structure defines the management hooks for network devices.
|
||||||
* The following hooks can be defined; unless noted otherwise, they are
|
* The following hooks can be defined; unless noted otherwise, they are
|
||||||
@@ -1568,6 +1570,7 @@ struct net_device_ops {
|
@@ -1571,6 +1573,7 @@ struct net_device_ops {
|
||||||
struct net_device * (*ndo_get_peer_dev)(struct net_device *dev);
|
struct net_device * (*ndo_get_peer_dev)(struct net_device *dev);
|
||||||
int (*ndo_fill_forward_path)(struct net_device_path_ctx *ctx,
|
int (*ndo_fill_forward_path)(struct net_device_path_ctx *ctx,
|
||||||
struct net_device_path *path);
|
struct net_device_path *path);
|
||||||
|
@ -22,7 +22,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
|||||||
#include <linux/crc32.h>
|
#include <linux/crc32.h>
|
||||||
#include <linux/if_vlan.h>
|
#include <linux/if_vlan.h>
|
||||||
#include <linux/uaccess.h>
|
#include <linux/uaccess.h>
|
||||||
@@ -6782,6 +6783,22 @@ static void rtl_tally_reset(struct r8152
|
@@ -6785,6 +6786,22 @@ static void rtl_tally_reset(struct r8152
|
||||||
ocp_write_word(tp, MCU_TYPE_PLA, PLA_RSTTALLY, ocp_data);
|
ocp_write_word(tp, MCU_TYPE_PLA, PLA_RSTTALLY, ocp_data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -45,7 +45,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
|||||||
static void r8152b_init(struct r8152 *tp)
|
static void r8152b_init(struct r8152 *tp)
|
||||||
{
|
{
|
||||||
u32 ocp_data;
|
u32 ocp_data;
|
||||||
@@ -6823,6 +6840,8 @@ static void r8152b_init(struct r8152 *tp
|
@@ -6826,6 +6843,8 @@ static void r8152b_init(struct r8152 *tp
|
||||||
ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL);
|
ocp_data = ocp_read_word(tp, MCU_TYPE_USB, USB_USB_CTRL);
|
||||||
ocp_data &= ~(RX_AGG_DISABLE | RX_ZERO_EN);
|
ocp_data &= ~(RX_AGG_DISABLE | RX_ZERO_EN);
|
||||||
ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data);
|
ocp_write_word(tp, MCU_TYPE_USB, USB_USB_CTRL, ocp_data);
|
||||||
@ -54,7 +54,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void r8153_init(struct r8152 *tp)
|
static void r8153_init(struct r8152 *tp)
|
||||||
@@ -6963,6 +6982,8 @@ static void r8153_init(struct r8152 *tp)
|
@@ -6966,6 +6985,8 @@ static void r8153_init(struct r8152 *tp)
|
||||||
tp->coalesce = COALESCE_SLOW;
|
tp->coalesce = COALESCE_SLOW;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@ -63,7 +63,7 @@ Signed-off-by: David Bauer <mail@david-bauer.net>
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void r8153b_init(struct r8152 *tp)
|
static void r8153b_init(struct r8152 *tp)
|
||||||
@@ -7045,6 +7066,8 @@ static void r8153b_init(struct r8152 *tp
|
@@ -7048,6 +7069,8 @@ static void r8153b_init(struct r8152 *tp
|
||||||
rtl_tally_reset(tp);
|
rtl_tally_reset(tp);
|
||||||
|
|
||||||
tp->coalesce = 15000; /* 15 us */
|
tp->coalesce = 15000; /* 15 us */
|
||||||
|
@ -1,32 +0,0 @@
|
|||||||
From e12f67fe83446432ef16704c22ec23bd1dbcd094 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Vicente Bergas <vicencb@gmail.com>
|
|
||||||
Date: Tue, 1 Dec 2020 16:41:32 +0100
|
|
||||||
Subject: arm64: dts: rockchip: use USB host by default on rk3399-rock-pi-4
|
|
||||||
|
|
||||||
Based on the board schematics at
|
|
||||||
https://dl.radxa.com/rockpi4/docs/hw/rockpi4/rockpi_4c_v12_sch_20200620.pdf
|
|
||||||
on page 19 there is an USB Type-A receptacle being used as an USB-OTG port.
|
|
||||||
|
|
||||||
But the Type-A connector is not valid for OTG operation, for this reason
|
|
||||||
there is a switch to select host or device role.
|
|
||||||
This is non-compliant and error prone because switching is manual.
|
|
||||||
So, use host mode as it corresponds for a Type-A receptacle.
|
|
||||||
|
|
||||||
Signed-off-by: Vicente Bergas <vicencb@gmail.com>
|
|
||||||
Link: https://lore.kernel.org/r/20201201154132.1286-4-vicencb@gmail.com
|
|
||||||
Signed-off-by: Heiko Stuebner <heiko@sntech.de>
|
|
||||||
---
|
|
||||||
arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dts | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
--- a/arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi
|
|
||||||
+++ b/arch/arm64/boot/dts/rockchip/rk3399-rock-pi-4.dtsi
|
|
||||||
@@ -679,7 +679,7 @@
|
|
||||||
|
|
||||||
&usbdrd_dwc3_0 {
|
|
||||||
status = "okay";
|
|
||||||
- dr_mode = "otg";
|
|
||||||
+ dr_mode = "host";
|
|
||||||
};
|
|
||||||
|
|
||||||
&usbdrd3_1 {
|
|
@ -557,12 +557,11 @@ Signed-off-by: hmz007 <hmz007@gmail.com>
|
|||||||
|
|
||||||
data->regs = devm_platform_ioremap_resource(pdev, 0);
|
data->regs = devm_platform_ioremap_resource(pdev, 0);
|
||||||
if (IS_ERR(data->regs))
|
if (IS_ERR(data->regs))
|
||||||
@@ -202,21 +582,97 @@ static int rockchip_dfi_probe(struct pla
|
@@ -203,21 +583,95 @@ static int rockchip_dfi_probe(struct pla
|
||||||
if (IS_ERR(data->regmap_pmu))
|
if (IS_ERR(data->regmap_pmu))
|
||||||
return PTR_ERR(data->regmap_pmu);
|
return PTR_ERR(data->regmap_pmu);
|
||||||
}
|
|
||||||
- data->dev = dev;
|
- data->dev = dev;
|
||||||
+
|
|
||||||
+ regmap_read(data->regmap_pmu, PMUGRF_OS_REG2, &val);
|
+ regmap_read(data->regmap_pmu, PMUGRF_OS_REG2, &val);
|
||||||
+ data->dram_type = READ_DRAMTYPE_INFO(val);
|
+ data->dram_type = READ_DRAMTYPE_INFO(val);
|
||||||
+ data->ch_msk = READ_CH_INFO(val);
|
+ data->ch_msk = READ_CH_INFO(val);
|
||||||
@ -645,7 +644,6 @@ Signed-off-by: hmz007 <hmz007@gmail.com>
|
|||||||
+ } else {
|
+ } else {
|
||||||
+ return 0;
|
+ return 0;
|
||||||
+ }
|
+ }
|
||||||
+
|
|
||||||
desc->driver_data = data;
|
desc->driver_data = data;
|
||||||
desc->name = np->name;
|
desc->name = np->name;
|
||||||
data->desc = desc;
|
data->desc = desc;
|
||||||
|
Loading…
Reference in New Issue
Block a user