From: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
To: stable@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
patches@lists.linux.dev, MD Danish Anwar <danishanwar@ti.com>,
Meghana Malladi <m-malladi@ti.com>,
"David S. Miller" <davem@davemloft.net>,
Sasha Levin <sashal@kernel.org>
Subject: [PATCH 6.12 074/156] net: ti: icssg-prueth: Fix firmware load sequence.
Date: Mon, 6 Jan 2025 16:16:00 +0100 [thread overview]
Message-ID: <20250106151144.519372152@linuxfoundation.org> (raw)
In-Reply-To: <20250106151141.738050441@linuxfoundation.org>
6.12-stable review patch. If anyone has any objections, please let me know.
------------------
From: MD Danish Anwar <danishanwar@ti.com>
[ Upstream commit 9facce84f4062f782ebde18daa7006a23d40b607 ]
Timesync related operations are ran in PRU0 cores for both ICSSG SLICE0
and SLICE1. Currently whenever any ICSSG interface comes up we load the
respective firmwares to PRU cores and whenever interface goes down, we
stop the resective cores. Due to this, when SLICE0 goes down while
SLICE1 is still active, PRU0 firmwares are unloaded and PRU0 core is
stopped. This results in clock jump for SLICE1 interface as the timesync
related operations are no longer running.
As there are interdependencies between SLICE0 and SLICE1 firmwares,
fix this by running both PRU0 and PRU1 firmwares as long as at least 1
ICSSG interface is up. Add new flag in prueth struct to check if all
firmwares are running and remove the old flag (fw_running).
Use emacs_initialized as reference count to load the firmwares for the
first and last interface up/down. Moving init_emac_mode and fw_offload_mode
API outside of icssg_config to icssg_common_start API as they need
to be called only once per firmware boot.
Change prueth_emac_restart() to return error code and add error prints
inside the caller of this functions in case of any failures.
Move prueth_emac_stop() from common to sr1 driver.
sr1 and sr2 drivers have different logic handling for stopping
the firmwares. While sr1 driver is dependent on emac structure
to stop the corresponding pru cores for that slice, for sr2
all the pru cores of both the slices are stopped and is not
dependent on emac. So the prueth_emac_stop() function is no
longer common and can be moved to sr1 driver.
Fixes: c1e0230eeaab ("net: ti: icss-iep: Add IEP driver")
Signed-off-by: MD Danish Anwar <danishanwar@ti.com>
Signed-off-by: Meghana Malladi <m-malladi@ti.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Sasha Levin <sashal@kernel.org>
---
drivers/net/ethernet/ti/icssg/icssg_common.c | 25 --
drivers/net/ethernet/ti/icssg/icssg_config.c | 41 ++-
drivers/net/ethernet/ti/icssg/icssg_config.h | 1 +
drivers/net/ethernet/ti/icssg/icssg_prueth.c | 261 ++++++++++++------
drivers/net/ethernet/ti/icssg/icssg_prueth.h | 5 +-
.../net/ethernet/ti/icssg/icssg_prueth_sr1.c | 24 +-
6 files changed, 236 insertions(+), 121 deletions(-)
diff --git a/drivers/net/ethernet/ti/icssg/icssg_common.c b/drivers/net/ethernet/ti/icssg/icssg_common.c
index fdebeb2f84e0..74f0f200a89d 100644
--- a/drivers/net/ethernet/ti/icssg/icssg_common.c
+++ b/drivers/net/ethernet/ti/icssg/icssg_common.c
@@ -855,31 +855,6 @@ irqreturn_t prueth_rx_irq(int irq, void *dev_id)
}
EXPORT_SYMBOL_GPL(prueth_rx_irq);
-void prueth_emac_stop(struct prueth_emac *emac)
-{
- struct prueth *prueth = emac->prueth;
- int slice;
-
- switch (emac->port_id) {
- case PRUETH_PORT_MII0:
- slice = ICSS_SLICE0;
- break;
- case PRUETH_PORT_MII1:
- slice = ICSS_SLICE1;
- break;
- default:
- netdev_err(emac->ndev, "invalid port\n");
- return;
- }
-
- emac->fw_running = 0;
- if (!emac->is_sr1)
- rproc_shutdown(prueth->txpru[slice]);
- rproc_shutdown(prueth->rtu[slice]);
- rproc_shutdown(prueth->pru[slice]);
-}
-EXPORT_SYMBOL_GPL(prueth_emac_stop);
-
void prueth_cleanup_tx_ts(struct prueth_emac *emac)
{
int i;
diff --git a/drivers/net/ethernet/ti/icssg/icssg_config.c b/drivers/net/ethernet/ti/icssg/icssg_config.c
index 5d2491c2943a..ddfd1c02a885 100644
--- a/drivers/net/ethernet/ti/icssg/icssg_config.c
+++ b/drivers/net/ethernet/ti/icssg/icssg_config.c
@@ -397,7 +397,7 @@ static int prueth_emac_buffer_setup(struct prueth_emac *emac)
return 0;
}
-static void icssg_init_emac_mode(struct prueth *prueth)
+void icssg_init_emac_mode(struct prueth *prueth)
{
/* When the device is configured as a bridge and it is being brought
* back to the emac mode, the host mac address has to be set as 0.
@@ -406,9 +406,6 @@ static void icssg_init_emac_mode(struct prueth *prueth)
int i;
u8 mac[ETH_ALEN] = { 0 };
- if (prueth->emacs_initialized)
- return;
-
/* Set VLAN TABLE address base */
regmap_update_bits(prueth->miig_rt, FDB_GEN_CFG1, SMEM_VLAN_OFFSET_MASK,
addr << SMEM_VLAN_OFFSET);
@@ -423,15 +420,13 @@ static void icssg_init_emac_mode(struct prueth *prueth)
/* Clear host MAC address */
icssg_class_set_host_mac_addr(prueth->miig_rt, mac);
}
+EXPORT_SYMBOL_GPL(icssg_init_emac_mode);
-static void icssg_init_fw_offload_mode(struct prueth *prueth)
+void icssg_init_fw_offload_mode(struct prueth *prueth)
{
u32 addr = prueth->shram.pa + EMAC_ICSSG_SWITCH_DEFAULT_VLAN_TABLE_OFFSET;
int i;
- if (prueth->emacs_initialized)
- return;
-
/* Set VLAN TABLE address base */
regmap_update_bits(prueth->miig_rt, FDB_GEN_CFG1, SMEM_VLAN_OFFSET_MASK,
addr << SMEM_VLAN_OFFSET);
@@ -448,6 +443,7 @@ static void icssg_init_fw_offload_mode(struct prueth *prueth)
icssg_class_set_host_mac_addr(prueth->miig_rt, prueth->hw_bridge_dev->dev_addr);
icssg_set_pvid(prueth, prueth->default_vlan, PRUETH_PORT_HOST);
}
+EXPORT_SYMBOL_GPL(icssg_init_fw_offload_mode);
int icssg_config(struct prueth *prueth, struct prueth_emac *emac, int slice)
{
@@ -455,11 +451,6 @@ int icssg_config(struct prueth *prueth, struct prueth_emac *emac, int slice)
struct icssg_flow_cfg __iomem *flow_cfg;
int ret;
- if (prueth->is_switch_mode || prueth->is_hsr_offload_mode)
- icssg_init_fw_offload_mode(prueth);
- else
- icssg_init_emac_mode(prueth);
-
memset_io(config, 0, TAS_GATE_MASK_LIST0);
icssg_miig_queues_init(prueth, slice);
@@ -786,3 +777,27 @@ void icssg_set_pvid(struct prueth *prueth, u8 vid, u8 port)
writel(pvid, prueth->shram.va + EMAC_ICSSG_SWITCH_PORT0_DEFAULT_VLAN_OFFSET);
}
EXPORT_SYMBOL_GPL(icssg_set_pvid);
+
+int emac_fdb_flow_id_updated(struct prueth_emac *emac)
+{
+ struct mgmt_cmd_rsp fdb_cmd_rsp = { 0 };
+ int slice = prueth_emac_slice(emac);
+ struct mgmt_cmd fdb_cmd = { 0 };
+ int ret;
+
+ fdb_cmd.header = ICSSG_FW_MGMT_CMD_HEADER;
+ fdb_cmd.type = ICSSG_FW_MGMT_FDB_CMD_TYPE_RX_FLOW;
+ fdb_cmd.seqnum = ++(emac->prueth->icssg_hwcmdseq);
+ fdb_cmd.param = 0;
+
+ fdb_cmd.param |= (slice << 4);
+ fdb_cmd.cmd_args[0] = 0;
+
+ ret = icssg_send_fdb_msg(emac, &fdb_cmd, &fdb_cmd_rsp);
+ if (ret)
+ return ret;
+
+ WARN_ON(fdb_cmd.seqnum != fdb_cmd_rsp.seqnum);
+ return fdb_cmd_rsp.status == 1 ? 0 : -EINVAL;
+}
+EXPORT_SYMBOL_GPL(emac_fdb_flow_id_updated);
diff --git a/drivers/net/ethernet/ti/icssg/icssg_config.h b/drivers/net/ethernet/ti/icssg/icssg_config.h
index 92c2deaa3068..c884e9fa099e 100644
--- a/drivers/net/ethernet/ti/icssg/icssg_config.h
+++ b/drivers/net/ethernet/ti/icssg/icssg_config.h
@@ -55,6 +55,7 @@ struct icssg_rxq_ctx {
#define ICSSG_FW_MGMT_FDB_CMD_TYPE 0x03
#define ICSSG_FW_MGMT_CMD_TYPE 0x04
#define ICSSG_FW_MGMT_PKT 0x80000000
+#define ICSSG_FW_MGMT_FDB_CMD_TYPE_RX_FLOW 0x05
struct icssg_r30_cmd {
u32 cmd[4];
diff --git a/drivers/net/ethernet/ti/icssg/icssg_prueth.c b/drivers/net/ethernet/ti/icssg/icssg_prueth.c
index fe2fd1bfc904..cb11635a8d12 100644
--- a/drivers/net/ethernet/ti/icssg/icssg_prueth.c
+++ b/drivers/net/ethernet/ti/icssg/icssg_prueth.c
@@ -164,11 +164,26 @@ static struct icssg_firmwares icssg_emac_firmwares[] = {
}
};
-static int prueth_emac_start(struct prueth *prueth, struct prueth_emac *emac)
+static int prueth_start(struct rproc *rproc, const char *fw_name)
+{
+ int ret;
+
+ ret = rproc_set_firmware(rproc, fw_name);
+ if (ret)
+ return ret;
+ return rproc_boot(rproc);
+}
+
+static void prueth_shutdown(struct rproc *rproc)
+{
+ rproc_shutdown(rproc);
+}
+
+static int prueth_emac_start(struct prueth *prueth)
{
struct icssg_firmwares *firmwares;
struct device *dev = prueth->dev;
- int slice, ret;
+ int ret, slice;
if (prueth->is_switch_mode)
firmwares = icssg_switch_firmwares;
@@ -177,49 +192,126 @@ static int prueth_emac_start(struct prueth *prueth, struct prueth_emac *emac)
else
firmwares = icssg_emac_firmwares;
- slice = prueth_emac_slice(emac);
- if (slice < 0) {
- netdev_err(emac->ndev, "invalid port\n");
- return -EINVAL;
+ for (slice = 0; slice < PRUETH_NUM_MACS; slice++) {
+ ret = prueth_start(prueth->pru[slice], firmwares[slice].pru);
+ if (ret) {
+ dev_err(dev, "failed to boot PRU%d: %d\n", slice, ret);
+ goto unwind_slices;
+ }
+
+ ret = prueth_start(prueth->rtu[slice], firmwares[slice].rtu);
+ if (ret) {
+ dev_err(dev, "failed to boot RTU%d: %d\n", slice, ret);
+ rproc_shutdown(prueth->pru[slice]);
+ goto unwind_slices;
+ }
+
+ ret = prueth_start(prueth->txpru[slice], firmwares[slice].txpru);
+ if (ret) {
+ dev_err(dev, "failed to boot TX_PRU%d: %d\n", slice, ret);
+ rproc_shutdown(prueth->rtu[slice]);
+ rproc_shutdown(prueth->pru[slice]);
+ goto unwind_slices;
+ }
}
- ret = icssg_config(prueth, emac, slice);
- if (ret)
- return ret;
+ return 0;
- ret = rproc_set_firmware(prueth->pru[slice], firmwares[slice].pru);
- ret = rproc_boot(prueth->pru[slice]);
- if (ret) {
- dev_err(dev, "failed to boot PRU%d: %d\n", slice, ret);
- return -EINVAL;
+unwind_slices:
+ while (--slice >= 0) {
+ prueth_shutdown(prueth->txpru[slice]);
+ prueth_shutdown(prueth->rtu[slice]);
+ prueth_shutdown(prueth->pru[slice]);
}
- ret = rproc_set_firmware(prueth->rtu[slice], firmwares[slice].rtu);
- ret = rproc_boot(prueth->rtu[slice]);
- if (ret) {
- dev_err(dev, "failed to boot RTU%d: %d\n", slice, ret);
- goto halt_pru;
+ return ret;
+}
+
+static void prueth_emac_stop(struct prueth *prueth)
+{
+ int slice;
+
+ for (slice = 0; slice < PRUETH_NUM_MACS; slice++) {
+ prueth_shutdown(prueth->txpru[slice]);
+ prueth_shutdown(prueth->rtu[slice]);
+ prueth_shutdown(prueth->pru[slice]);
}
+}
+
+static int prueth_emac_common_start(struct prueth *prueth)
+{
+ struct prueth_emac *emac;
+ int ret = 0;
+ int slice;
+
+ if (!prueth->emac[ICSS_SLICE0] && !prueth->emac[ICSS_SLICE1])
+ return -EINVAL;
+
+ /* clear SMEM and MSMC settings for all slices */
+ memset_io(prueth->msmcram.va, 0, prueth->msmcram.size);
+ memset_io(prueth->shram.va, 0, ICSSG_CONFIG_OFFSET_SLICE1 * PRUETH_NUM_MACS);
+
+ icssg_class_default(prueth->miig_rt, ICSS_SLICE0, 0, false);
+ icssg_class_default(prueth->miig_rt, ICSS_SLICE1, 0, false);
+
+ if (prueth->is_switch_mode || prueth->is_hsr_offload_mode)
+ icssg_init_fw_offload_mode(prueth);
+ else
+ icssg_init_emac_mode(prueth);
+
+ for (slice = 0; slice < PRUETH_NUM_MACS; slice++) {
+ emac = prueth->emac[slice];
+ if (!emac)
+ continue;
+ ret = icssg_config(prueth, emac, slice);
+ if (ret)
+ goto disable_class;
+ }
+
+ ret = prueth_emac_start(prueth);
+ if (ret)
+ goto disable_class;
- ret = rproc_set_firmware(prueth->txpru[slice], firmwares[slice].txpru);
- ret = rproc_boot(prueth->txpru[slice]);
+ emac = prueth->emac[ICSS_SLICE0] ? prueth->emac[ICSS_SLICE0] :
+ prueth->emac[ICSS_SLICE1];
+ ret = icss_iep_init(emac->iep, &prueth_iep_clockops,
+ emac, IEP_DEFAULT_CYCLE_TIME_NS);
if (ret) {
- dev_err(dev, "failed to boot TX_PRU%d: %d\n", slice, ret);
- goto halt_rtu;
+ dev_err(prueth->dev, "Failed to initialize IEP module\n");
+ goto stop_pruss;
}
- emac->fw_running = 1;
return 0;
-halt_rtu:
- rproc_shutdown(prueth->rtu[slice]);
+stop_pruss:
+ prueth_emac_stop(prueth);
-halt_pru:
- rproc_shutdown(prueth->pru[slice]);
+disable_class:
+ icssg_class_disable(prueth->miig_rt, ICSS_SLICE0);
+ icssg_class_disable(prueth->miig_rt, ICSS_SLICE1);
return ret;
}
+static int prueth_emac_common_stop(struct prueth *prueth)
+{
+ struct prueth_emac *emac;
+
+ if (!prueth->emac[ICSS_SLICE0] && !prueth->emac[ICSS_SLICE1])
+ return -EINVAL;
+
+ icssg_class_disable(prueth->miig_rt, ICSS_SLICE0);
+ icssg_class_disable(prueth->miig_rt, ICSS_SLICE1);
+
+ prueth_emac_stop(prueth);
+
+ emac = prueth->emac[ICSS_SLICE0] ? prueth->emac[ICSS_SLICE0] :
+ prueth->emac[ICSS_SLICE1];
+ icss_iep_exit(emac->iep);
+
+ return 0;
+}
+
/* called back by PHY layer if there is change in link state of hw port*/
static void emac_adjust_link(struct net_device *ndev)
{
@@ -374,9 +466,6 @@ static void prueth_iep_settime(void *clockops_data, u64 ns)
u32 cycletime;
int timeout;
- if (!emac->fw_running)
- return;
-
sc_descp = emac->prueth->shram.va + TIMESYNC_FW_WC_SETCLOCK_DESC_OFFSET;
cycletime = IEP_DEFAULT_CYCLE_TIME_NS;
@@ -543,23 +632,17 @@ static int emac_ndo_open(struct net_device *ndev)
{
struct prueth_emac *emac = netdev_priv(ndev);
int ret, i, num_data_chn = emac->tx_ch_num;
+ struct icssg_flow_cfg __iomem *flow_cfg;
struct prueth *prueth = emac->prueth;
int slice = prueth_emac_slice(emac);
struct device *dev = prueth->dev;
int max_rx_flows;
int rx_flow;
- /* clear SMEM and MSMC settings for all slices */
- if (!prueth->emacs_initialized) {
- memset_io(prueth->msmcram.va, 0, prueth->msmcram.size);
- memset_io(prueth->shram.va, 0, ICSSG_CONFIG_OFFSET_SLICE1 * PRUETH_NUM_MACS);
- }
-
/* set h/w MAC as user might have re-configured */
ether_addr_copy(emac->mac_addr, ndev->dev_addr);
icssg_class_set_mac_addr(prueth->miig_rt, slice, emac->mac_addr);
- icssg_class_default(prueth->miig_rt, slice, 0, false);
icssg_ft1_set_mac_addr(prueth->miig_rt, slice, emac->mac_addr);
/* Notify the stack of the actual queue counts. */
@@ -597,18 +680,23 @@ static int emac_ndo_open(struct net_device *ndev)
goto cleanup_napi;
}
- /* reset and start PRU firmware */
- ret = prueth_emac_start(prueth, emac);
- if (ret)
- goto free_rx_irq;
+ if (!prueth->emacs_initialized) {
+ ret = prueth_emac_common_start(prueth);
+ if (ret)
+ goto free_rx_irq;
+ }
- icssg_mii_update_mtu(prueth->mii_rt, slice, ndev->max_mtu);
+ flow_cfg = emac->dram.va + ICSSG_CONFIG_OFFSET + PSI_L_REGULAR_FLOW_ID_BASE_OFFSET;
+ writew(emac->rx_flow_id_base, &flow_cfg->rx_base_flow);
+ ret = emac_fdb_flow_id_updated(emac);
- if (!prueth->emacs_initialized) {
- ret = icss_iep_init(emac->iep, &prueth_iep_clockops,
- emac, IEP_DEFAULT_CYCLE_TIME_NS);
+ if (ret) {
+ netdev_err(ndev, "Failed to update Rx Flow ID %d", ret);
+ goto stop;
}
+ icssg_mii_update_mtu(prueth->mii_rt, slice, ndev->max_mtu);
+
ret = request_threaded_irq(emac->tx_ts_irq, NULL, prueth_tx_ts_irq,
IRQF_ONESHOT, dev_name(dev), emac);
if (ret)
@@ -653,7 +741,8 @@ static int emac_ndo_open(struct net_device *ndev)
free_tx_ts_irq:
free_irq(emac->tx_ts_irq, emac);
stop:
- prueth_emac_stop(emac);
+ if (!prueth->emacs_initialized)
+ prueth_emac_common_stop(prueth);
free_rx_irq:
free_irq(emac->rx_chns.irq[rx_flow], emac);
cleanup_napi:
@@ -689,8 +778,6 @@ static int emac_ndo_stop(struct net_device *ndev)
if (ndev->phydev)
phy_stop(ndev->phydev);
- icssg_class_disable(prueth->miig_rt, prueth_emac_slice(emac));
-
if (emac->prueth->is_hsr_offload_mode)
__dev_mc_unsync(ndev, icssg_prueth_hsr_del_mcast);
else
@@ -728,11 +815,9 @@ static int emac_ndo_stop(struct net_device *ndev)
/* Destroying the queued work in ndo_stop() */
cancel_delayed_work_sync(&emac->stats_work);
- if (prueth->emacs_initialized == 1)
- icss_iep_exit(emac->iep);
-
/* stop PRUs */
- prueth_emac_stop(emac);
+ if (prueth->emacs_initialized == 1)
+ prueth_emac_common_stop(prueth);
free_irq(emac->tx_ts_irq, emac);
@@ -1010,10 +1095,11 @@ static void prueth_offload_fwd_mark_update(struct prueth *prueth)
}
}
-static void prueth_emac_restart(struct prueth *prueth)
+static int prueth_emac_restart(struct prueth *prueth)
{
struct prueth_emac *emac0 = prueth->emac[PRUETH_MAC0];
struct prueth_emac *emac1 = prueth->emac[PRUETH_MAC1];
+ int ret;
/* Detach the net_device for both PRUeth ports*/
if (netif_running(emac0->ndev))
@@ -1022,36 +1108,46 @@ static void prueth_emac_restart(struct prueth *prueth)
netif_device_detach(emac1->ndev);
/* Disable both PRUeth ports */
- icssg_set_port_state(emac0, ICSSG_EMAC_PORT_DISABLE);
- icssg_set_port_state(emac1, ICSSG_EMAC_PORT_DISABLE);
+ ret = icssg_set_port_state(emac0, ICSSG_EMAC_PORT_DISABLE);
+ ret |= icssg_set_port_state(emac1, ICSSG_EMAC_PORT_DISABLE);
+ if (ret)
+ return ret;
/* Stop both pru cores for both PRUeth ports*/
- prueth_emac_stop(emac0);
- prueth->emacs_initialized--;
- prueth_emac_stop(emac1);
- prueth->emacs_initialized--;
+ ret = prueth_emac_common_stop(prueth);
+ if (ret) {
+ dev_err(prueth->dev, "Failed to stop the firmwares");
+ return ret;
+ }
/* Start both pru cores for both PRUeth ports */
- prueth_emac_start(prueth, emac0);
- prueth->emacs_initialized++;
- prueth_emac_start(prueth, emac1);
- prueth->emacs_initialized++;
+ ret = prueth_emac_common_start(prueth);
+ if (ret) {
+ dev_err(prueth->dev, "Failed to start the firmwares");
+ return ret;
+ }
/* Enable forwarding for both PRUeth ports */
- icssg_set_port_state(emac0, ICSSG_EMAC_PORT_FORWARD);
- icssg_set_port_state(emac1, ICSSG_EMAC_PORT_FORWARD);
+ ret = icssg_set_port_state(emac0, ICSSG_EMAC_PORT_FORWARD);
+ ret |= icssg_set_port_state(emac1, ICSSG_EMAC_PORT_FORWARD);
/* Attache net_device for both PRUeth ports */
netif_device_attach(emac0->ndev);
netif_device_attach(emac1->ndev);
+
+ return ret;
}
static void icssg_change_mode(struct prueth *prueth)
{
struct prueth_emac *emac;
- int mac;
+ int mac, ret;
- prueth_emac_restart(prueth);
+ ret = prueth_emac_restart(prueth);
+ if (ret) {
+ dev_err(prueth->dev, "Failed to restart the firmwares, aborting the process");
+ return;
+ }
for (mac = PRUETH_MAC0; mac < PRUETH_NUM_MACS; mac++) {
emac = prueth->emac[mac];
@@ -1130,13 +1226,18 @@ static void prueth_netdevice_port_unlink(struct net_device *ndev)
{
struct prueth_emac *emac = netdev_priv(ndev);
struct prueth *prueth = emac->prueth;
+ int ret;
prueth->br_members &= ~BIT(emac->port_id);
if (prueth->is_switch_mode) {
prueth->is_switch_mode = false;
emac->port_vlan = 0;
- prueth_emac_restart(prueth);
+ ret = prueth_emac_restart(prueth);
+ if (ret) {
+ dev_err(prueth->dev, "Failed to restart the firmwares, aborting the process");
+ return;
+ }
}
prueth_offload_fwd_mark_update(prueth);
@@ -1185,6 +1286,7 @@ static void prueth_hsr_port_unlink(struct net_device *ndev)
struct prueth *prueth = emac->prueth;
struct prueth_emac *emac0;
struct prueth_emac *emac1;
+ int ret;
emac0 = prueth->emac[PRUETH_MAC0];
emac1 = prueth->emac[PRUETH_MAC1];
@@ -1195,7 +1297,11 @@ static void prueth_hsr_port_unlink(struct net_device *ndev)
emac0->port_vlan = 0;
emac1->port_vlan = 0;
prueth->hsr_dev = NULL;
- prueth_emac_restart(prueth);
+ ret = prueth_emac_restart(prueth);
+ if (ret) {
+ dev_err(prueth->dev, "Failed to restart the firmwares, aborting the process");
+ return;
+ }
netdev_dbg(ndev, "Disabling HSR Offload mode\n");
}
}
@@ -1370,13 +1476,10 @@ static int prueth_probe(struct platform_device *pdev)
prueth->pa_stats = NULL;
}
- if (eth0_node) {
+ if (eth0_node || eth1_node) {
ret = prueth_get_cores(prueth, ICSS_SLICE0, false);
if (ret)
goto put_cores;
- }
-
- if (eth1_node) {
ret = prueth_get_cores(prueth, ICSS_SLICE1, false);
if (ret)
goto put_cores;
@@ -1575,14 +1678,12 @@ static int prueth_probe(struct platform_device *pdev)
pruss_put(prueth->pruss);
put_cores:
- if (eth1_node) {
- prueth_put_cores(prueth, ICSS_SLICE1);
- of_node_put(eth1_node);
- }
-
- if (eth0_node) {
+ if (eth0_node || eth1_node) {
prueth_put_cores(prueth, ICSS_SLICE0);
of_node_put(eth0_node);
+
+ prueth_put_cores(prueth, ICSS_SLICE1);
+ of_node_put(eth1_node);
}
return ret;
diff --git a/drivers/net/ethernet/ti/icssg/icssg_prueth.h b/drivers/net/ethernet/ti/icssg/icssg_prueth.h
index f5c1d473e9f9..5473315ea204 100644
--- a/drivers/net/ethernet/ti/icssg/icssg_prueth.h
+++ b/drivers/net/ethernet/ti/icssg/icssg_prueth.h
@@ -140,7 +140,6 @@ struct prueth_rx_chn {
/* data for each emac port */
struct prueth_emac {
bool is_sr1;
- bool fw_running;
struct prueth *prueth;
struct net_device *ndev;
u8 mac_addr[6];
@@ -361,6 +360,8 @@ int icssg_set_port_state(struct prueth_emac *emac,
enum icssg_port_state_cmd state);
void icssg_config_set_speed(struct prueth_emac *emac);
void icssg_config_half_duplex(struct prueth_emac *emac);
+void icssg_init_emac_mode(struct prueth *prueth);
+void icssg_init_fw_offload_mode(struct prueth *prueth);
/* Buffer queue helpers */
int icssg_queue_pop(struct prueth *prueth, u8 queue);
@@ -377,6 +378,7 @@ void icssg_vtbl_modify(struct prueth_emac *emac, u8 vid, u8 port_mask,
u8 untag_mask, bool add);
u16 icssg_get_pvid(struct prueth_emac *emac);
void icssg_set_pvid(struct prueth *prueth, u8 vid, u8 port);
+int emac_fdb_flow_id_updated(struct prueth_emac *emac);
#define prueth_napi_to_tx_chn(pnapi) \
container_of(pnapi, struct prueth_tx_chn, napi_tx)
@@ -407,7 +409,6 @@ void emac_rx_timestamp(struct prueth_emac *emac,
struct sk_buff *skb, u32 *psdata);
enum netdev_tx icssg_ndo_start_xmit(struct sk_buff *skb, struct net_device *ndev);
irqreturn_t prueth_rx_irq(int irq, void *dev_id);
-void prueth_emac_stop(struct prueth_emac *emac);
void prueth_cleanup_tx_ts(struct prueth_emac *emac);
int icssg_napi_rx_poll(struct napi_struct *napi_rx, int budget);
int prueth_prepare_rx_chan(struct prueth_emac *emac,
diff --git a/drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c b/drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
index 292f04d29f4f..f88cdc8f012f 100644
--- a/drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
+++ b/drivers/net/ethernet/ti/icssg/icssg_prueth_sr1.c
@@ -440,7 +440,6 @@ static int prueth_emac_start(struct prueth *prueth, struct prueth_emac *emac)
goto halt_pru;
}
- emac->fw_running = 1;
return 0;
halt_pru:
@@ -449,6 +448,29 @@ static int prueth_emac_start(struct prueth *prueth, struct prueth_emac *emac)
return ret;
}
+static void prueth_emac_stop(struct prueth_emac *emac)
+{
+ struct prueth *prueth = emac->prueth;
+ int slice;
+
+ switch (emac->port_id) {
+ case PRUETH_PORT_MII0:
+ slice = ICSS_SLICE0;
+ break;
+ case PRUETH_PORT_MII1:
+ slice = ICSS_SLICE1;
+ break;
+ default:
+ netdev_err(emac->ndev, "invalid port\n");
+ return;
+ }
+
+ if (!emac->is_sr1)
+ rproc_shutdown(prueth->txpru[slice]);
+ rproc_shutdown(prueth->rtu[slice]);
+ rproc_shutdown(prueth->pru[slice]);
+}
+
/**
* emac_ndo_open - EMAC device open
* @ndev: network adapter device
--
2.39.5
next prev parent reply other threads:[~2025-01-06 15:37 UTC|newest]
Thread overview: 177+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-06 15:14 [PATCH 6.12 000/156] 6.12.9-rc1 review Greg Kroah-Hartman
2025-01-06 15:14 ` [PATCH 6.12 001/156] platform/x86: mlx-platform: call pci_dev_put() to balance the refcount Greg Kroah-Hartman
2025-01-06 15:14 ` [PATCH 6.12 002/156] drm/amdgpu: fix backport of commit 73dae652dcac Greg Kroah-Hartman
2025-01-06 15:14 ` [PATCH 6.12 003/156] platform/x86: thinkpad-acpi: Add support for hotkey 0x1401 Greg Kroah-Hartman
2025-01-06 15:14 ` [PATCH 6.12 004/156] platform/x86: hp-wmi: mark 8A15 board for timed OMEN thermal profile Greg Kroah-Hartman
2025-01-06 15:14 ` [PATCH 6.12 005/156] selinux: ignore unknown extended permissions Greg Kroah-Hartman
2025-01-06 15:14 ` [PATCH 6.12 006/156] mmc: sdhci-msm: fix crypto key eviction Greg Kroah-Hartman
2025-01-06 15:14 ` [PATCH 6.12 007/156] pmdomain: imx: gpcv2: fix an OF node reference leak in imx_gpcv2_probe() Greg Kroah-Hartman
2025-01-06 15:14 ` [PATCH 6.12 008/156] pmdomain: core: add dummy release function to genpd device Greg Kroah-Hartman
2025-01-06 15:14 ` [PATCH 6.12 009/156] tracing: Have process_string() also allow arrays Greg Kroah-Hartman
2025-01-06 15:14 ` [PATCH 6.12 010/156] block: lift bio_is_zone_append to bio.h Greg Kroah-Hartman
2025-01-06 15:14 ` [PATCH 6.12 011/156] btrfs: use bio_is_zone_append() in the completion handler Greg Kroah-Hartman
2025-01-06 15:14 ` [PATCH 6.12 012/156] RDMA/bnxt_re: Remove always true dattr validity check Greg Kroah-Hartman
2025-01-06 15:14 ` [PATCH 6.12 013/156] sched_ext: fix application of sizeof to pointer Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 014/156] RDMA/mlx5: Enforce same type port association for multiport RoCE Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 015/156] RDMA/bnxt_re: Fix max SGEs for the Work Request Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 016/156] RDMA/bnxt_re: Avoid initializing the software queue for user queues Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 017/156] RDMA/bnxt_re: Avoid sending the modify QP workaround for latest adapters Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 018/156] RDMA/core: Fix ENODEV error for iWARP test over vlan Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 019/156] nvme-pci: 512 byte aligned dma pool segment quirk Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 020/156] wifi: iwlwifi: fix CRF name for Bz Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 021/156] RDMA/bnxt_re: Fix the check for 9060 condition Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 022/156] RDMA/bnxt_re: Add check for path mtu in modify_qp Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 023/156] RDMA/bnxt_re: Fix reporting hw_ver in query_device Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 024/156] RDMA/nldev: Set error code in rdma_nl_notify_event Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 025/156] RDMA/siw: Remove direct link to net_device Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 026/156] RDMA/bnxt_re: Fix max_qp_wrs reported Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 027/156] RDMA/bnxt_re: Disable use of reserved wqes Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 028/156] RDMA/bnxt_re: Add send queue size check for variable wqe Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 029/156] RDMA/bnxt_re: Fix MSN table size for variable wqe mode Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 030/156] RDMA/bnxt_re: Fix the locking while accessing the QP table Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 031/156] net: phy: micrel: Dynamically control external clock of KSZ PHY Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 032/156] drm/bridge: adv7511_audio: Update Audio InfoFrame properly Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 033/156] net: dsa: microchip: Fix KSZ9477 set_ageing_time function Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 034/156] net: dsa: microchip: Fix LAN937X " Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 035/156] selftests: net: local_termination: require mausezahn Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 036/156] netdev-genl: avoid empty messages in napi get Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 037/156] RDMA/hns: Fix mapping error of zero-hop WQE buffer Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 038/156] RDMA/hns: Fix accessing invalid dip_ctx during destroying QP Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 039/156] RDMA/hns: Fix warning storm caused by invalid input in IO path Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 040/156] RDMA/hns: Fix missing flush CQE for DWQE Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 041/156] drm/xe: Revert some changes that break a mesa debug tool Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 042/156] drm/xe/pf: Use correct function to check LMEM provisioning Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 043/156] drm/xe: Fix fault on fd close after unbind Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 044/156] net: stmmac: restructure the error path of stmmac_probe_config_dt() Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 045/156] net: fix memory leak in tcp_conn_request() Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 046/156] net: Fix netns for ip_tunnel_init_flow() Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 047/156] netrom: check buffer length before accessing it Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 048/156] net: pse-pd: tps23881: Fix power on/off issue Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 049/156] net/mlx5: DR, select MSIX vector 0 for completion queue creation Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 050/156] net/mlx5e: macsec: Maintain TX SA from encoding_sa Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 051/156] net/mlx5e: Skip restore TC rules for vport rep without loaded flag Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 052/156] net/mlx5e: Keep netdev when leave switchdev for devlink set legacy only Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 053/156] RDMA/rxe: Remove the direct link to net_device Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 054/156] drm/i915/cx0_phy: Fix C10 pll programming sequence Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 055/156] drm/i915/dg1: Fix power gate sequence Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 056/156] workqueue: add printf attribute to __alloc_workqueue() Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 057/156] netfilter: nft_set_hash: unaligned atomic read on struct nft_set_ext Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 058/156] net: llc: reset skb->transport_header Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 059/156] nvmet: Dont overflow subsysnqn Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 060/156] ALSA: usb-audio: US16x08: Initialize array before use Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 061/156] eth: bcmsysport: fix call balance of priv->clk handling routines Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 062/156] net: mv643xx_eth: fix an OF node reference leak Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 063/156] net: wwan: t7xx: Fix FSM command timeout issue Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 064/156] RDMA/rtrs: Ensure ib_sge list is accessible Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 065/156] RDMA/bnxt_re: Fix error recovery sequence Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 066/156] io_uring/net: always initialize kmsg->msg.msg_inq upfront Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 067/156] net: sfc: Correct key_len for efx_tc_ct_zone_ht_params Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 068/156] net: reenable NETIF_F_IPV6_CSUM offload for BIG TCP packets Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 069/156] net: restrict SO_REUSEPORT to inet sockets Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 070/156] net: wwan: iosm: Properly check for valid exec stage in ipc_mmio_init() Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 071/156] af_packet: fix vlan_get_tci() vs MSG_PEEK Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 072/156] af_packet: fix vlan_get_protocol_dgram() " Greg Kroah-Hartman
2025-01-06 15:15 ` [PATCH 6.12 073/156] ila: serialize calls to nf_register_net_hooks() Greg Kroah-Hartman
2025-01-06 15:16 ` Greg Kroah-Hartman [this message]
2025-01-06 15:16 ` [PATCH 6.12 075/156] net: ti: icssg-prueth: Fix clearing of IEP_CMP_CFG registers during iep_init Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 076/156] btrfs: allow swap activation to be interruptible Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 077/156] perf/x86/intel: Add Arrow Lake U support Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 078/156] wifi: mac80211: fix mbss changed flags corruption on 32 bit systems Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 079/156] wifi: cfg80211: clear link ID from bitmap during link delete after clean up Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 080/156] wifi: mac80211: wake the queues in case of failure in resume Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 081/156] drm/amdgpu: use sjt mec fw on gfx943 for sriov Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 082/156] drm/amdkfd: Correct the migration DMA map direction Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 083/156] ALSA: hda: cs35l56: Remove calls to cs35l56_force_sync_asp1_registers_from_cache() Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 084/156] ALSA: hda/realtek - Add support for ASUS Zen AIO 27 Z272SD_A272SD audio Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 085/156] btrfs: handle bio_split() errors Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 086/156] btrfs: flush delalloc workers queue before stopping cleaner kthread during unmount Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 087/156] ALSA: hda/ca0132: Use standard HD-audio quirk matching helpers Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 088/156] ALSA: hda/realtek: Add new alc2xx-fixup-headset-mic model Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 089/156] sound: usb: enable DSD output for ddHiFi TC44C Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 090/156] sound: usb: format: dont warn that raw DSD is unsupported Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 091/156] spi: spi-cadence-qspi: Disable STIG mode for Altera SoCFPGA Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 092/156] ASoC: audio-graph-card: Call of_node_put() on correct node Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 093/156] ARC: build: disallow invalid PAE40 + 4K page config Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 094/156] ARC: build: Use __force to suppress per-CPU cmpxchg warnings Greg Kroah-Hartman
2025-01-06 15:16 ` Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 095/156] ARC: bpf: Correct conditional check in check_jmp_32 Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 096/156] bpf: fix potential error return Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 097/156] ksmbd: retry iterate_dir in smb2_query_dir Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 098/156] ksmbd: set ATTR_CTIME flags when setting mtime Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 099/156] smb: client: destroy cfid_put_wq on module exit Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 100/156] net: usb: qmi_wwan: add Telit FE910C04 compositions Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 101/156] Bluetooth: hci_core: Fix sleeping function called from invalid context Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 102/156] irqchip/gic: Correct declaration of *percpu_base pointer in union gic_base Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 103/156] ARC: build: Try to guess GCC variant of cross compiler Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 104/156] bpf: refactor bpf_helper_changes_pkt_data to use helper number Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 105/156] bpf: consider that tail calls invalidate packet pointers Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 106/156] clk: thead: Fix TH1520 emmc and shdci clock rate Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 107/156] scripts/mksysmap: Fix escape chars $ Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 108/156] modpost: fix the missed iteration for the max bit in do_input() Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 109/156] kbuild: pacman-pkg: provide versioned linux-api-headers package Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 110/156] Revert "ALSA: ump: Dont enumeration invalid groups for legacy rawmidi" Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 111/156] RDMA/mlx5: Enable multiplane mode only when it is supported Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 112/156] io_uring/kbuf: use pre-committed buffer address for non-pollable file Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 113/156] ALSA: seq: Check UMP support for midi_version change Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 114/156] ftrace: Fix function profilers filtering functionality Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 115/156] drm/xe: Use non-interruptible wait when moving BO to system Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 116/156] drm/xe: Wait for migration job before unmapping pages Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 117/156] ALSA hda/realtek: Add quirk for Framework F111:000C Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 118/156] ALSA: seq: oss: Fix races at processing SysEx messages Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 119/156] ocfs2: fix slab-use-after-free due to dangling pointer dqi_priv Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 120/156] kcov: mark in_softirq_really() as __always_inline Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 121/156] maple_tree: reload mas before the second call for mas_empty_area Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 122/156] clk: clk-imx8mp-audiomix: fix function signature Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 123/156] scripts/sorttable: fix orc_sort_cmp() to maintain symmetry and transitivity Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 124/156] sched_ext: Fix invalid irq restore in scx_ops_bypass() Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 125/156] RDMA/uverbs: Prevent integer overflow issue Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 126/156] pinctrl: mcp23s08: Fix sleeping in atomic context due to regmap locking Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 127/156] workqueue: Do not warn when cancelling WQ_MEM_RECLAIM work from !WQ_MEM_RECLAIM worker Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 128/156] sky2: Add device ID 11ab:4373 for Marvell 88E8075 Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 129/156] sched_ext: initialize kit->cursor.flags Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 130/156] net/sctp: Prevent autoclose integer overflow in sctp_association_init() Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 131/156] io_uring/rw: fix downgraded mshot read Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 132/156] drm: adv7511: Drop dsi single lane support Greg Kroah-Hartman
2025-01-06 15:16 ` [PATCH 6.12 133/156] dt-bindings: display: adi,adv7533: Drop " Greg Kroah-Hartman
2025-01-06 15:17 ` [PATCH 6.12 134/156] drm: adv7511: Fix use-after-free in adv7533_attach_dsi() Greg Kroah-Hartman
2025-01-06 15:17 ` [PATCH 6.12 135/156] wifi: iwlwifi: mvm: Fix __counted_by usage in cfg80211_wowlan_nd_* Greg Kroah-Hartman
2025-01-06 15:17 ` [PATCH 6.12 136/156] fgraph: Add READ_ONCE() when accessing fgraph_array[] Greg Kroah-Hartman
2025-01-06 15:17 ` [PATCH 6.12 137/156] net: ethernet: ti: am65-cpsw: default to round-robin for host port receive Greg Kroah-Hartman
2025-01-06 15:17 ` [PATCH 6.12 138/156] mm/damon/core: fix ignored quota goals and filters of newly committed schemes Greg Kroah-Hartman
2025-01-06 15:17 ` [PATCH 6.12 139/156] mm/damon/core: fix new damon_target objects leaks on damon_commit_targets() Greg Kroah-Hartman
2025-01-06 15:17 ` [PATCH 6.12 140/156] mm: shmem: fix the update of shmem_falloc->nr_unswapped Greg Kroah-Hartman
2025-01-06 15:17 ` [PATCH 6.12 141/156] mm: shmem: fix incorrect index alignment for within_size policy Greg Kroah-Hartman
2025-01-06 15:17 ` [PATCH 6.12 142/156] fs/proc/task_mmu: fix pagemap flags with PMD THP entries on 32bit Greg Kroah-Hartman
2025-01-06 15:17 ` [PATCH 6.12 143/156] gve: process XSK TX descriptors as part of RX NAPI Greg Kroah-Hartman
2025-01-06 15:17 ` [PATCH 6.12 144/156] gve: clean XDP queues in gve_tx_stop_ring_gqi Greg Kroah-Hartman
2025-01-06 15:17 ` [PATCH 6.12 145/156] gve: guard XSK operations on the existence of queues Greg Kroah-Hartman
2025-01-06 15:17 ` [PATCH 6.12 146/156] gve: fix XDP allocation path in edge cases Greg Kroah-Hartman
2025-01-06 15:17 ` [PATCH 6.12 147/156] gve: guard XDP xmit NDO on existence of xdp queues Greg Kroah-Hartman
2025-01-06 15:17 ` [PATCH 6.12 148/156] gve: trigger RX NAPI instead of TX NAPI in gve_xsk_wakeup Greg Kroah-Hartman
2025-01-06 15:17 ` [PATCH 6.12 149/156] mm/readahead: fix large folio support in async readahead Greg Kroah-Hartman
2025-01-06 15:17 ` [PATCH 6.12 150/156] mm/kmemleak: fix sleeping function called from invalid context at print message Greg Kroah-Hartman
2025-01-06 15:17 ` [PATCH 6.12 151/156] mm: vmscan: account for free pages to prevent infinite Loop in throttle_direct_reclaim() Greg Kroah-Hartman
2025-01-06 15:17 ` [PATCH 6.12 152/156] mm: reinstate ability to map write-sealed memfd mappings read-only Greg Kroah-Hartman
2025-01-06 15:17 ` [PATCH 6.12 153/156] mm: hugetlb: independent PMD page table shared count Greg Kroah-Hartman
2025-01-06 15:17 ` [PATCH 6.12 154/156] mptcp: fix TCP options overflow Greg Kroah-Hartman
2025-01-06 15:17 ` [PATCH 6.12 155/156] mptcp: fix recvbuffer adjust on sleeping rcvmsg Greg Kroah-Hartman
2025-01-06 15:17 ` [PATCH 6.12 156/156] mptcp: dont always assume copied data in mptcp_cleanup_rbuf() Greg Kroah-Hartman
2025-01-06 16:41 ` [PATCH 6.12 000/156] 6.12.9-rc1 review Ronald Warsow
2025-01-06 18:24 ` Pavel Machek
2025-01-06 20:26 ` Florian Fainelli
2025-01-06 23:18 ` Shuah Khan
2025-01-07 23:14 ` Shuah Khan
2025-01-06 23:31 ` Justin Forbes
2025-01-07 1:08 ` SeongJae Park
2025-01-07 1:39 ` Peter Schneider
2025-01-07 6:56 ` Ron Economos
2025-01-07 8:33 ` Naresh Kamboju
2025-01-07 9:36 ` Luna Jernberg
2025-01-07 10:29 ` Christian Heusel
2025-01-07 11:36 ` Takeshi Ogasawara
2025-01-07 12:44 ` Jon Hunter
2025-01-07 15:12 ` Mark Brown
2025-01-07 15:47 ` Theodore Ts'o
2025-01-07 16:56 ` Harshit Mogalapalli
2025-01-07 21:24 ` [PATCH 6.12] " Hardik Garg
2025-01-08 12:41 ` [PATCH 6.12 000/156] " Muhammad Usama Anjum
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20250106151144.519372152@linuxfoundation.org \
--to=gregkh@linuxfoundation.org \
--cc=danishanwar@ti.com \
--cc=davem@davemloft.net \
--cc=m-malladi@ti.com \
--cc=patches@lists.linux.dev \
--cc=sashal@kernel.org \
--cc=stable@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.