Initial commit
Some checks failed
Build Kernel / Build all affected Kernels (push) Has been cancelled
Build all core packages / Build all core packages for selected target (push) Has been cancelled
Build and Push prebuilt tools container / Build and Push all prebuilt containers (push) Has been cancelled
Build Toolchains / Build Toolchains for each target (push) Has been cancelled
Build host tools / Build host tools for linux and macos based systems (push) Has been cancelled
Coverity scan build / Coverity x86/64 build (push) Has been cancelled
Some checks failed
Build Kernel / Build all affected Kernels (push) Has been cancelled
Build all core packages / Build all core packages for selected target (push) Has been cancelled
Build and Push prebuilt tools container / Build and Push all prebuilt containers (push) Has been cancelled
Build Toolchains / Build Toolchains for each target (push) Has been cancelled
Build host tools / Build host tools for linux and macos based systems (push) Has been cancelled
Coverity scan build / Coverity x86/64 build (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
From 091cde88b5ff2a2ca5739ce41f9cf5640a95222f Mon Sep 17 00:00:00 2001
|
||||
From: Linus Walleij <linus.walleij@linaro.org>
|
||||
Date: Sun, 11 Feb 2024 22:24:25 +0100
|
||||
Subject: [PATCH] ARM: dts: gemini: Map reset keys to KEY_RESTART
|
||||
|
||||
This maps the misc "reset", "setup" and "facory reset" keys to the
|
||||
only key a standard userspace is likely to understand: KEY_RESTART.
|
||||
On OpenWrt this will simply restart the system under controlled
|
||||
forms.
|
||||
|
||||
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
||||
Link: https://lore.kernel.org/r/20240211-gemini-dts-v1-3-6c09adeb4c2e@linaro.org
|
||||
---
|
||||
arch/arm/boot/dts/gemini/gemini-dlink-dir-685.dts | 4 ++--
|
||||
arch/arm/boot/dts/gemini/gemini-dlink-dns-313.dts | 4 ++--
|
||||
arch/arm/boot/dts/gemini/gemini-sl93512r.dts | 2 +-
|
||||
arch/arm/boot/dts/gemini/gemini-sq201.dts | 2 +-
|
||||
arch/arm/boot/dts/gemini/gemini-wbd111.dts | 4 ++--
|
||||
arch/arm/boot/dts/gemini/gemini-wbd222.dts | 4 ++--
|
||||
6 files changed, 10 insertions(+), 10 deletions(-)
|
||||
|
||||
--- a/arch/arm/boot/dts/gemini/gemini-dlink-dir-685.dts
|
||||
+++ b/arch/arm/boot/dts/gemini/gemini-dlink-dir-685.dts
|
||||
@@ -27,10 +27,10 @@
|
||||
gpio_keys {
|
||||
compatible = "gpio-keys";
|
||||
|
||||
- button-esc {
|
||||
+ button-reset {
|
||||
debounce-interval = <100>;
|
||||
wakeup-source;
|
||||
- linux,code = <KEY_ESC>;
|
||||
+ linux,code = <KEY_RESTART>;
|
||||
label = "reset";
|
||||
/* Collides with LPC_LAD[0], UART DCD, SSP 97RST */
|
||||
gpios = <&gpio0 8 GPIO_ACTIVE_LOW>;
|
||||
--- a/arch/arm/boot/dts/gemini/gemini-dlink-dns-313.dts
|
||||
+++ b/arch/arm/boot/dts/gemini/gemini-dlink-dns-313.dts
|
||||
@@ -33,10 +33,10 @@
|
||||
gpio_keys {
|
||||
compatible = "gpio-keys";
|
||||
|
||||
- button-esc {
|
||||
+ button-reset {
|
||||
debounce-interval = <100>;
|
||||
wakeup-source;
|
||||
- linux,code = <KEY_ESC>;
|
||||
+ linux,code = <KEY_RESTART>;
|
||||
label = "reset";
|
||||
gpios = <&gpio1 31 GPIO_ACTIVE_LOW>;
|
||||
};
|
||||
--- a/arch/arm/boot/dts/gemini/gemini-sl93512r.dts
|
||||
+++ b/arch/arm/boot/dts/gemini/gemini-sl93512r.dts
|
||||
@@ -43,7 +43,7 @@
|
||||
button-setup {
|
||||
debounce-interval = <50>;
|
||||
wakeup-source;
|
||||
- linux,code = <KEY_SETUP>;
|
||||
+ linux,code = <KEY_RESTART>;
|
||||
label = "factory reset";
|
||||
/* Conflict with NAND flash */
|
||||
gpios = <&gpio0 18 GPIO_ACTIVE_LOW>;
|
||||
--- a/arch/arm/boot/dts/gemini/gemini-sq201.dts
|
||||
+++ b/arch/arm/boot/dts/gemini/gemini-sq201.dts
|
||||
@@ -30,7 +30,7 @@
|
||||
button-setup {
|
||||
debounce-interval = <100>;
|
||||
wakeup-source;
|
||||
- linux,code = <KEY_SETUP>;
|
||||
+ linux,code = <KEY_RESTART>;
|
||||
label = "factory reset";
|
||||
/* Conflict with NAND flash */
|
||||
gpios = <&gpio0 18 GPIO_ACTIVE_LOW>;
|
||||
--- a/arch/arm/boot/dts/gemini/gemini-wbd111.dts
|
||||
+++ b/arch/arm/boot/dts/gemini/gemini-wbd111.dts
|
||||
@@ -28,10 +28,10 @@
|
||||
gpio_keys {
|
||||
compatible = "gpio-keys";
|
||||
|
||||
- button-setup {
|
||||
+ button-reset {
|
||||
debounce-interval = <100>;
|
||||
wakeup-source;
|
||||
- linux,code = <KEY_SETUP>;
|
||||
+ linux,code = <KEY_RESTART>;
|
||||
label = "reset";
|
||||
/* Conflict with ICE */
|
||||
gpios = <&gpio0 5 GPIO_ACTIVE_LOW>;
|
||||
--- a/arch/arm/boot/dts/gemini/gemini-wbd222.dts
|
||||
+++ b/arch/arm/boot/dts/gemini/gemini-wbd222.dts
|
||||
@@ -27,10 +27,10 @@
|
||||
gpio_keys {
|
||||
compatible = "gpio-keys";
|
||||
|
||||
- button-setup {
|
||||
+ button-reset {
|
||||
debounce-interval = <100>;
|
||||
wakeup-source;
|
||||
- linux,code = <KEY_SETUP>;
|
||||
+ linux,code = <KEY_RESTART>;
|
||||
label = "reset";
|
||||
/* Conflict with ICE */
|
||||
gpios = <&gpio0 5 GPIO_ACTIVE_LOW>;
|
||||
@@ -0,0 +1,95 @@
|
||||
From 91fb8a7328dda827bc6c0da240a1eb17028416cd Mon Sep 17 00:00:00 2001
|
||||
From: Linus Walleij <linus.walleij@linaro.org>
|
||||
Date: Thu, 9 May 2024 23:59:28 +0200
|
||||
Subject: [PATCH 2/5] net: ethernet: cortina: Use TSO also on common TCP
|
||||
|
||||
It is possible to push the segment offloader to also
|
||||
process non-segmented frames: just pass the skb->len
|
||||
or desired MSS to the offloader and it will handle them.
|
||||
|
||||
This is especially good if the user sets up the MTU
|
||||
and the frames get big, because the checksumming engine
|
||||
cannot handle any frames bigger than 1518 bytes, so
|
||||
segmenting them all to be at max that will be helpful
|
||||
for the hardware, which only need to quirk odd frames
|
||||
such as big UDP ping packets.
|
||||
|
||||
The vendor driver always uses the TSO like this, and
|
||||
the driver seems more stable after this, so apparently
|
||||
the hardware may have been engineered to always use
|
||||
the TSO on anything it can handle.
|
||||
|
||||
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
||||
---
|
||||
drivers/net/ethernet/cortina/gemini.c | 31 +++++++++++++++++++++------
|
||||
1 file changed, 24 insertions(+), 7 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/cortina/gemini.c
|
||||
+++ b/drivers/net/ethernet/cortina/gemini.c
|
||||
@@ -1148,6 +1148,7 @@ static int gmac_map_tx_bufs(struct net_d
|
||||
struct gmac_txdesc *txd;
|
||||
skb_frag_t *skb_frag;
|
||||
dma_addr_t mapping;
|
||||
+ bool tcp = false;
|
||||
void *buffer;
|
||||
u16 mss;
|
||||
int ret;
|
||||
@@ -1155,6 +1156,13 @@ static int gmac_map_tx_bufs(struct net_d
|
||||
word1 = skb->len;
|
||||
word3 = SOF_BIT;
|
||||
|
||||
+ /* Determine if we are doing TCP */
|
||||
+ if (skb->protocol == htons(ETH_P_IP))
|
||||
+ tcp = (ip_hdr(skb)->protocol == IPPROTO_TCP);
|
||||
+ else
|
||||
+ /* IPv6 */
|
||||
+ tcp = (ipv6_hdr(skb)->nexthdr == IPPROTO_TCP);
|
||||
+
|
||||
mss = skb_shinfo(skb)->gso_size;
|
||||
if (mss) {
|
||||
/* This means we are dealing with TCP and skb->len is the
|
||||
@@ -1167,6 +1175,20 @@ static int gmac_map_tx_bufs(struct net_d
|
||||
mss, skb->len);
|
||||
word1 |= TSS_MTU_ENABLE_BIT;
|
||||
word3 |= mss;
|
||||
+ } else if (tcp) {
|
||||
+ /* Even if we are not using TSO, use the segment offloader
|
||||
+ * for transferring the TCP frame: the TSO engine will deal
|
||||
+ * with chopping up frames that exceed ETH_DATA_LEN which
|
||||
+ * the checksumming engine cannot handle (see below) into
|
||||
+ * manageable chunks. It flawlessly deals with quite big
|
||||
+ * frames and frames containing custom DSA EtherTypes.
|
||||
+ */
|
||||
+ mss = netdev->mtu + skb_tcp_all_headers(skb);
|
||||
+ mss = min(mss, skb->len);
|
||||
+ netdev_dbg(netdev, "botched TSO len %04x mtu %04x mss %04x\n",
|
||||
+ skb->len, netdev->mtu, mss);
|
||||
+ word1 |= TSS_MTU_ENABLE_BIT;
|
||||
+ word3 |= mss;
|
||||
} else if (skb->len >= ETH_FRAME_LEN) {
|
||||
/* Hardware offloaded checksumming isn't working on frames
|
||||
* bigger than 1514 bytes. A hypothesis about this is that the
|
||||
@@ -1185,21 +1207,16 @@ static int gmac_map_tx_bufs(struct net_d
|
||||
}
|
||||
|
||||
if (skb->ip_summed == CHECKSUM_PARTIAL) {
|
||||
- int tcp = 0;
|
||||
-
|
||||
/* We do not switch off the checksumming on non TCP/UDP
|
||||
* frames: as is shown from tests, the checksumming engine
|
||||
* is smart enough to see that a frame is not actually TCP
|
||||
* or UDP and then just pass it through without any changes
|
||||
* to the frame.
|
||||
*/
|
||||
- if (skb->protocol == htons(ETH_P_IP)) {
|
||||
+ if (skb->protocol == htons(ETH_P_IP))
|
||||
word1 |= TSS_IP_CHKSUM_BIT;
|
||||
- tcp = ip_hdr(skb)->protocol == IPPROTO_TCP;
|
||||
- } else { /* IPv6 */
|
||||
+ else
|
||||
word1 |= TSS_IPV6_ENABLE_BIT;
|
||||
- tcp = ipv6_hdr(skb)->nexthdr == IPPROTO_TCP;
|
||||
- }
|
||||
|
||||
word1 |= tcp ? TSS_TCP_CHKSUM_BIT : TSS_UDP_CHKSUM_BIT;
|
||||
}
|
||||
@@ -0,0 +1,36 @@
|
||||
From fa01c904b844e6033445f75b0b4d46a8e83b6086 Mon Sep 17 00:00:00 2001
|
||||
From: Linus Walleij <linus.walleij@linaro.org>
|
||||
Date: Fri, 10 May 2024 19:48:27 +0200
|
||||
Subject: [PATCH 3/5] net: ethernet: cortina: Rename adjust link callback
|
||||
|
||||
The callback passed to of_phy_get_and_connect() in the
|
||||
Cortina Gemini driver is called "gmac_speed_set" which is
|
||||
archaic, rename it to "gmac_adjust_link" following the
|
||||
pattern of most other drivers.
|
||||
|
||||
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
|
||||
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
||||
---
|
||||
drivers/net/ethernet/cortina/gemini.c | 4 ++--
|
||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/cortina/gemini.c
|
||||
+++ b/drivers/net/ethernet/cortina/gemini.c
|
||||
@@ -288,7 +288,7 @@ static void gmac_set_flow_control(struct
|
||||
spin_unlock_irqrestore(&port->config_lock, flags);
|
||||
}
|
||||
|
||||
-static void gmac_speed_set(struct net_device *netdev)
|
||||
+static void gmac_adjust_link(struct net_device *netdev)
|
||||
{
|
||||
struct gemini_ethernet_port *port = netdev_priv(netdev);
|
||||
struct phy_device *phydev = netdev->phydev;
|
||||
@@ -367,7 +367,7 @@ static int gmac_setup_phy(struct net_dev
|
||||
|
||||
phy = of_phy_get_and_connect(netdev,
|
||||
dev->of_node,
|
||||
- gmac_speed_set);
|
||||
+ gmac_adjust_link);
|
||||
if (!phy)
|
||||
return -ENODEV;
|
||||
netdev->phydev = phy;
|
||||
@@ -0,0 +1,46 @@
|
||||
From 50ac9765c674bac803719c6b8294670edc6df31d Mon Sep 17 00:00:00 2001
|
||||
From: Linus Walleij <linus.walleij@linaro.org>
|
||||
Date: Fri, 10 May 2024 19:44:39 +0200
|
||||
Subject: [PATCH 4/5] net: ethernet: cortina: Use negotiated TX/RX pause
|
||||
|
||||
Instead of directly poking into registers of the PHY, use
|
||||
the existing function to query phylib about this directly.
|
||||
|
||||
Suggested-by: Andrew Lunn <andrew@lunn.ch>
|
||||
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
|
||||
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
||||
---
|
||||
drivers/net/ethernet/cortina/gemini.c | 15 +++++----------
|
||||
1 file changed, 5 insertions(+), 10 deletions(-)
|
||||
|
||||
--- a/drivers/net/ethernet/cortina/gemini.c
|
||||
+++ b/drivers/net/ethernet/cortina/gemini.c
|
||||
@@ -293,8 +293,8 @@ static void gmac_adjust_link(struct net_
|
||||
struct gemini_ethernet_port *port = netdev_priv(netdev);
|
||||
struct phy_device *phydev = netdev->phydev;
|
||||
union gmac_status status, old_status;
|
||||
- int pause_tx = 0;
|
||||
- int pause_rx = 0;
|
||||
+ bool pause_tx = false;
|
||||
+ bool pause_rx = false;
|
||||
|
||||
status.bits32 = readl(port->gmac_base + GMAC_STATUS);
|
||||
old_status.bits32 = status.bits32;
|
||||
@@ -329,14 +329,9 @@ static void gmac_adjust_link(struct net_
|
||||
}
|
||||
|
||||
if (phydev->duplex == DUPLEX_FULL) {
|
||||
- u16 lcladv = phy_read(phydev, MII_ADVERTISE);
|
||||
- u16 rmtadv = phy_read(phydev, MII_LPA);
|
||||
- u8 cap = mii_resolve_flowctrl_fdx(lcladv, rmtadv);
|
||||
-
|
||||
- if (cap & FLOW_CTRL_RX)
|
||||
- pause_rx = 1;
|
||||
- if (cap & FLOW_CTRL_TX)
|
||||
- pause_tx = 1;
|
||||
+ phy_get_pause(phydev, &pause_tx, &pause_rx);
|
||||
+ netdev_dbg(netdev, "set negotiated pause params pause TX = %s, pause RX = %s\n",
|
||||
+ pause_tx ? "ON" : "OFF", pause_rx ? "ON" : "OFF");
|
||||
}
|
||||
|
||||
gmac_set_flow_control(netdev, pause_tx, pause_rx);
|
||||
@@ -0,0 +1,46 @@
|
||||
From 4eed4b87f17d10b7586349c13c3a30f9c24c9ba4 Mon Sep 17 00:00:00 2001
|
||||
From: Linus Walleij <linus.walleij@linaro.org>
|
||||
Date: Wed, 8 May 2024 23:21:17 +0200
|
||||
Subject: [PATCH 5/5] net: ethernet: cortina: Implement .set_pauseparam()
|
||||
|
||||
The Cortina Gemini ethernet can very well set up TX or RX
|
||||
pausing, so add this functionality to the driver in a
|
||||
.set_pauseparam() callback. Essentially just call down to
|
||||
phylib and let phylib deal with this, .adjust_link()
|
||||
will respect the setting from phylib.
|
||||
|
||||
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
||||
---
|
||||
drivers/net/ethernet/cortina/gemini.c | 14 ++++++++++++++
|
||||
1 file changed, 14 insertions(+)
|
||||
|
||||
--- a/drivers/net/ethernet/cortina/gemini.c
|
||||
+++ b/drivers/net/ethernet/cortina/gemini.c
|
||||
@@ -2143,6 +2143,19 @@ static void gmac_get_pauseparam(struct n
|
||||
pparam->autoneg = true;
|
||||
}
|
||||
|
||||
+static int gmac_set_pauseparam(struct net_device *netdev,
|
||||
+ struct ethtool_pauseparam *pparam)
|
||||
+{
|
||||
+ struct phy_device *phydev = netdev->phydev;
|
||||
+
|
||||
+ if (!pparam->autoneg)
|
||||
+ return -EOPNOTSUPP;
|
||||
+
|
||||
+ phy_set_asym_pause(phydev, pparam->rx_pause, pparam->tx_pause);
|
||||
+
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
static void gmac_get_ringparam(struct net_device *netdev,
|
||||
struct ethtool_ringparam *rp,
|
||||
struct kernel_ethtool_ringparam *kernel_rp,
|
||||
@@ -2263,6 +2276,7 @@ static const struct ethtool_ops gmac_351
|
||||
.set_link_ksettings = gmac_set_ksettings,
|
||||
.nway_reset = gmac_nway_reset,
|
||||
.get_pauseparam = gmac_get_pauseparam,
|
||||
+ .set_pauseparam = gmac_set_pauseparam,
|
||||
.get_ringparam = gmac_get_ringparam,
|
||||
.set_ringparam = gmac_set_ringparam,
|
||||
.get_coalesce = gmac_get_coalesce,
|
||||
@@ -0,0 +1,37 @@
|
||||
From c1aa34cd568bc7b86b82353034070c32b6ebe6db Mon Sep 17 00:00:00 2001
|
||||
From: Linus Walleij <linus.walleij@linaro.org>
|
||||
Date: Mon, 11 Mar 2019 15:44:29 +0100
|
||||
Subject: [PATCH] ARM: dts: Augment DIR-685 partition table for OpenWrt
|
||||
|
||||
Rename the firmware partition so that the firmware MTD
|
||||
splitter will do its job, drop the rootfs arguments as
|
||||
the MTD splitter will set this up automatically.
|
||||
|
||||
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
|
||||
---
|
||||
arch/arm/boot/dts/gemini/gemini-dlink-dir-685.dts | 6 +++---
|
||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||
|
||||
--- a/arch/arm/boot/dts/gemini/gemini-dlink-dir-685.dts
|
||||
+++ b/arch/arm/boot/dts/gemini/gemini-dlink-dir-685.dts
|
||||
@@ -20,7 +20,7 @@
|
||||
};
|
||||
|
||||
chosen {
|
||||
- bootargs = "console=ttyS0,19200n8 root=/dev/sda1 rw rootwait consoleblank=300";
|
||||
+ bootargs = "console=ttyS0,19200n8 consoleblank=300";
|
||||
stdout-path = "uart0:19200n8";
|
||||
};
|
||||
|
||||
@@ -317,9 +317,9 @@
|
||||
* this is called "upgrade" on the vendor system.
|
||||
*/
|
||||
partition@40000 {
|
||||
- label = "upgrade";
|
||||
+ compatible = "wrg";
|
||||
+ label = "firmware";
|
||||
reg = <0x00040000 0x01f40000>;
|
||||
- read-only;
|
||||
};
|
||||
/* RGDB, Residental Gateway Database? */
|
||||
partition@1f80000 {
|
||||
Reference in New Issue
Block a user