-LINUX_VERSION-6.6 = .59
-LINUX_KERNEL_HASH-6.6.59 = 23616808d8c08f12815ff898f4edb4c11397a2b2843d029ee62452d21833a76d
+LINUX_VERSION-6.6 = .60
+LINUX_KERNEL_HASH-6.6.60 = 52f9e32d5082ab94253447fd66670d0c3bb765cfcb99b0bf61d1b8eae25952ef
* @dev: Device for which which resource was allocated.
--- a/include/linux/thermal.h
+++ b/include/linux/thermal.h
-@@ -261,6 +261,10 @@ struct thermal_zone_params {
+@@ -263,6 +263,10 @@ struct thermal_zone_params {
#ifdef CONFIG_THERMAL_OF
struct thermal_zone_device *devm_thermal_of_zone_register(struct device *dev, int id, void *data,
const struct thermal_zone_device_ops *ops);
void devm_thermal_of_zone_unregister(struct device *dev, struct thermal_zone_device *tz);
-@@ -272,6 +276,15 @@ struct thermal_zone_device *devm_thermal
+@@ -274,6 +278,15 @@ struct thermal_zone_device *devm_thermal
{
return ERR_PTR(-ENOTSUPP);
}
tsdata->tdata_offset + crclen;
}
-@@ -1317,17 +1374,27 @@ static int edt_ft5x06_ts_probe(struct i2
+@@ -1335,17 +1392,27 @@ static int edt_ft5x06_ts_probe(struct i2
return error;
}
--- a/drivers/input/touchscreen/edt-ft5x06.c
+++ b/drivers/input/touchscreen/edt-ft5x06.c
-@@ -1420,6 +1420,10 @@ static void edt_ft5x06_ts_remove(struct
+@@ -1438,6 +1438,10 @@ static void edt_ft5x06_ts_remove(struct
{
struct edt_ft5x06_ts_data *tsdata = i2c_get_clientdata(client);
+ cancel_work_sync(&tsdata->work_i2c_poll);
+ }
edt_ft5x06_ts_teardown_debugfs(tsdata);
- regmap_exit(tsdata->regmap);
}
+
--- a/net/bluetooth/hci_sync.c
+++ b/net/bluetooth/hci_sync.c
-@@ -4861,6 +4861,7 @@ static const struct {
+@@ -4865,6 +4865,7 @@ static const struct {
*/
static int hci_dev_setup_sync(struct hci_dev *hdev)
{
int ret = 0;
bool invalid_bdaddr;
size_t i;
-@@ -4889,7 +4890,8 @@ static int hci_dev_setup_sync(struct hci
+@@ -4893,7 +4894,8 @@ static int hci_dev_setup_sync(struct hci
test_bit(HCI_QUIRK_USE_BDADDR_PROPERTY, &hdev->quirks);
if (!ret) {
if (test_bit(HCI_QUIRK_USE_BDADDR_PROPERTY, &hdev->quirks) &&
if (!error && num_points)
error = regmap_bulk_read(tsdata->regmap,
tsdata->tdata_offset,
-@@ -1300,7 +1318,7 @@ static int edt_ft5x06_ts_probe(struct i2
+@@ -1318,7 +1336,7 @@ static int edt_ft5x06_ts_probe(struct i2
if (tsdata->reset_gpio) {
usleep_range(5000, 6000);
gpiod_set_value_cansleep(tsdata->reset_gpio, 0);
}
input = devm_input_allocate_device(&client->dev);
-@@ -1389,11 +1407,12 @@ static int edt_ft5x06_ts_probe(struct i2
+@@ -1407,11 +1425,12 @@ static int edt_ft5x06_ts_probe(struct i2
return error;
}
} else {
--- a/net/bluetooth/hci_sync.c
+++ b/net/bluetooth/hci_sync.c
-@@ -4861,7 +4861,8 @@ static const struct {
+@@ -4865,7 +4865,8 @@ static const struct {
*/
static int hci_dev_setup_sync(struct hci_dev *hdev)
{
+++ /dev/null
-From 342672bbdf713654316a0ff73c7f2ecf7ea6693d Mon Sep 17 00:00:00 2001
-From: Michael Walle <mwalle@kernel.org>
-Date: Fri, 21 Jun 2024 14:09:29 +0200
-Subject: [PATCH] mtd: spi-nor: winbond: fix w25q128 regression
-
-Upstream commit d35df77707bf5ae1221b5ba1c8a88cf4fcdd4901
-
-("mtd: spi-nor: winbond: fix w25q128 regression")
-however the code has changed a lot after v6.6 so the patch did
-not apply to v6.6 or v6.1 which still has the problem.
-
-This patch fixes the issue in the way of the old API and has
-been tested on hardware. Please apply it for v6.1 and v6.6.
-
-Commit 83e824a4a595 ("mtd: spi-nor: Correct flags for Winbond w25q128")
-removed the flags for non-SFDP devices. It was assumed that it wasn't in
-use anymore. This wasn't true. Add the no_sfdp_flags as well as the size
-again.
-
-We add the additional flags for dual and quad read because they have
-been reported to work properly by Hartmut using both older and newer
-versions of this flash, the similar flashes with 64Mbit and 256Mbit
-already have these flags and because it will (luckily) trigger our
-legacy SFDP parsing, so newer versions with SFDP support will still get
-the parameters from the SFDP tables.
-
-Reported-by: Hartmut Birr <e9hack@gmail.com>
-Closes: https://lore.kernel.org/r/CALxbwRo_-9CaJmt7r7ELgu+vOcgk=xZcGHobnKf=oT2=u4d4aA@mail.gmail.com/
-Fixes: 83e824a4a595 ("mtd: spi-nor: Correct flags for Winbond w25q128")
-Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
-Signed-off-by: Michael Walle <mwalle@kernel.org>
-Acked-by: Tudor Ambarus <tudor.ambarus@linaro.org>
-Reviewed-by: Esben Haabendal <esben@geanix.com>
-Reviewed-by: Pratyush Yadav <pratyush@kernel.org>
-Signed-off-by: Pratyush Yadav <pratyush@kernel.org>
-Link: https://lore.kernel.org/r/20240621120929.2670185-1-mwalle@kernel.org
-[Backported to v6.6 - vastly different due to upstream changes]
-Reviewed-by: Tudor Ambarus <tudor.ambarus@linaro.org>
-Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
----
- drivers/mtd/spi-nor/winbond.c | 7 ++++---
- 1 file changed, 4 insertions(+), 3 deletions(-)
-
---- a/drivers/mtd/spi-nor/winbond.c
-+++ b/drivers/mtd/spi-nor/winbond.c
-@@ -120,9 +120,10 @@ static const struct flash_info winbond_n
- NO_SFDP_FLAGS(SECT_4K) },
- { "w25q80bl", INFO(0xef4014, 0, 64 * 1024, 16)
- NO_SFDP_FLAGS(SECT_4K) },
-- { "w25q128", INFO(0xef4018, 0, 0, 0)
-- PARSE_SFDP
-- FLAGS(SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB) },
-+ { "w25q128", INFO(0xef4018, 0, 64 * 1024, 256)
-+ FLAGS(SPI_NOR_HAS_LOCK | SPI_NOR_HAS_TB)
-+ NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ |
-+ SPI_NOR_QUAD_READ) },
- { "w25q256", INFO(0xef4019, 0, 64 * 1024, 512)
- NO_SFDP_FLAGS(SECT_4K | SPI_NOR_DUAL_READ | SPI_NOR_QUAD_READ)
- .fixups = &w25q256_fixups },
--- a/net/core/dev.c
+++ b/net/core/dev.c
-@@ -4477,13 +4477,7 @@ static inline void ____napi_schedule(str
+@@ -4481,13 +4481,7 @@ static inline void ____napi_schedule(str
*/
thread = READ_ONCE(napi->thread);
if (thread) {
wake_up_process(thread);
return;
}
-@@ -6639,8 +6633,6 @@ static int napi_poll(struct napi_struct
+@@ -6643,8 +6637,6 @@ static int napi_poll(struct napi_struct
static int napi_thread_wait(struct napi_struct *napi)
{
set_current_state(TASK_INTERRUPTIBLE);
while (!kthread_should_stop()) {
-@@ -6649,15 +6641,13 @@ static int napi_thread_wait(struct napi_
+@@ -6653,15 +6645,13 @@ static int napi_thread_wait(struct napi_
* Testing SCHED bit is not enough because SCHED bit might be
* set by some other busy poll thread or by napi_disable().
*/
static inline void rps_lock_irqsave(struct softnet_data *sd,
unsigned long *flags)
{
-@@ -4445,6 +4471,7 @@ EXPORT_SYMBOL(__dev_direct_xmit);
+@@ -4449,6 +4475,7 @@ EXPORT_SYMBOL(__dev_direct_xmit);
/*************************************************************************
* Receiver routines
*************************************************************************/
int netdev_max_backlog __read_mostly = 1000;
EXPORT_SYMBOL(netdev_max_backlog);
-@@ -4477,12 +4504,16 @@ static inline void ____napi_schedule(str
+@@ -4481,12 +4508,16 @@ static inline void ____napi_schedule(str
*/
thread = READ_ONCE(napi->thread);
if (thread) {
list_add_tail(&napi->poll_list, &sd->poll_list);
WRITE_ONCE(napi->list_owner, smp_processor_id());
/* If not called from net_rx_action()
-@@ -4728,6 +4759,11 @@ static void napi_schedule_rps(struct sof
+@@ -4732,6 +4763,11 @@ static void napi_schedule_rps(struct sof
#ifdef CONFIG_RPS
if (sd != mysd) {
sd->rps_ipi_next = mysd->rps_ipi_list;
mysd->rps_ipi_list = sd;
-@@ -5951,7 +5987,7 @@ static void net_rps_action_and_irq_enabl
+@@ -5955,7 +5991,7 @@ static void net_rps_action_and_irq_enabl
#ifdef CONFIG_RPS
struct softnet_data *remsd = sd->rps_ipi_list;
sd->rps_ipi_list = NULL;
local_irq_enable();
-@@ -5966,7 +6002,7 @@ static void net_rps_action_and_irq_enabl
+@@ -5970,7 +6006,7 @@ static void net_rps_action_and_irq_enabl
static bool sd_has_rps_ipi_waiting(struct softnet_data *sd)
{
#ifdef CONFIG_RPS
#else
return false;
#endif
-@@ -6010,7 +6046,7 @@ static int process_backlog(struct napi_s
+@@ -6014,7 +6050,7 @@ static int process_backlog(struct napi_s
* We can use a plain write instead of clear_bit(),
* and we dont need an smp_mb() memory barrier.
*/
again = false;
} else {
skb_queue_splice_tail_init(&sd->input_pkt_queue,
-@@ -6676,43 +6712,48 @@ static void skb_defer_free_flush(struct
+@@ -6680,43 +6716,48 @@ static void skb_defer_free_flush(struct
}
}
return 0;
}
-@@ -11293,7 +11334,7 @@ static int dev_cpu_dead(unsigned int old
+@@ -11297,7 +11338,7 @@ static int dev_cpu_dead(unsigned int old
list_del_init(&napi->poll_list);
if (napi->poll == process_backlog)
else
____napi_schedule(sd, napi);
}
-@@ -11301,12 +11342,14 @@ static int dev_cpu_dead(unsigned int old
+@@ -11305,12 +11346,14 @@ static int dev_cpu_dead(unsigned int old
raise_softirq_irqoff(NET_TX_SOFTIRQ);
local_irq_enable();
/* Process offline CPU's input_pkt_queue */
while ((skb = __skb_dequeue(&oldsd->process_queue))) {
-@@ -11569,6 +11612,38 @@ static struct pernet_operations __net_in
+@@ -11573,6 +11616,38 @@ static struct pernet_operations __net_in
*
*/
/*
* This is called single threaded during boot, so no need
* to take the rtnl semaphore.
-@@ -11619,7 +11694,10 @@ static int __init net_dev_init(void)
+@@ -11623,7 +11698,10 @@ static int __init net_dev_init(void)
init_gro_hash(&sd->backlog);
sd->backlog.poll = process_backlog;
sd->backlog.weight = weight_p;
spin_unlock_irq(&sd->input_pkt_queue.lock);
else if (!IS_ENABLED(CONFIG_PREEMPT_RT))
local_irq_enable();
-@@ -4778,6 +4778,23 @@ static void napi_schedule_rps(struct sof
+@@ -4782,6 +4782,23 @@ static void napi_schedule_rps(struct sof
__napi_schedule_irqoff(&mysd->backlog);
}
{
if (IS_ENABLED(CONFIG_RPS) || use_backlog_threads())
spin_unlock_irq(&sd->input_pkt_queue.lock);
-@@ -4783,12 +4783,12 @@ void kick_defer_list_purge(struct softne
+@@ -4787,12 +4787,12 @@ void kick_defer_list_purge(struct softne
unsigned long flags;
if (use_backlog_threads()) {
} else if (!cmpxchg(&sd->defer_ipi_scheduled, 0, 1)) {
smp_call_function_single_async(cpu, &sd->defer_csd);
-@@ -4850,7 +4850,7 @@ static int enqueue_to_backlog(struct sk_
+@@ -4854,7 +4854,7 @@ static int enqueue_to_backlog(struct sk_
reason = SKB_DROP_REASON_NOT_SPECIFIED;
sd = &per_cpu(softnet_data, cpu);
if (!netif_running(skb->dev))
goto drop;
qlen = skb_queue_len(&sd->input_pkt_queue);
-@@ -4859,7 +4859,7 @@ static int enqueue_to_backlog(struct sk_
+@@ -4863,7 +4863,7 @@ static int enqueue_to_backlog(struct sk_
enqueue:
__skb_queue_tail(&sd->input_pkt_queue, skb);
input_queue_tail_incr_save(sd, qtail);
return NET_RX_SUCCESS;
}
-@@ -4874,7 +4874,7 @@ enqueue:
+@@ -4878,7 +4878,7 @@ enqueue:
drop:
sd->dropped++;
dev_core_stats_rx_dropped_inc(skb->dev);
kfree_skb_reason(skb, reason);
-@@ -5905,7 +5905,7 @@ static void flush_backlog(struct work_st
+@@ -5909,7 +5909,7 @@ static void flush_backlog(struct work_st
local_bh_disable();
sd = this_cpu_ptr(&softnet_data);
skb_queue_walk_safe(&sd->input_pkt_queue, skb, tmp) {
if (skb->dev->reg_state == NETREG_UNREGISTERING) {
__skb_unlink(skb, &sd->input_pkt_queue);
-@@ -5913,7 +5913,7 @@ static void flush_backlog(struct work_st
+@@ -5917,7 +5917,7 @@ static void flush_backlog(struct work_st
input_queue_head_incr(sd);
}
}
skb_queue_walk_safe(&sd->process_queue, skb, tmp) {
if (skb->dev->reg_state == NETREG_UNREGISTERING) {
-@@ -5931,14 +5931,14 @@ static bool flush_required(int cpu)
+@@ -5935,14 +5935,14 @@ static bool flush_required(int cpu)
struct softnet_data *sd = &per_cpu(softnet_data, cpu);
bool do_flush;
return do_flush;
#endif
-@@ -6053,7 +6053,7 @@ static int process_backlog(struct napi_s
+@@ -6057,7 +6057,7 @@ static int process_backlog(struct napi_s
}
if (skb_queue_empty(&sd->input_pkt_queue)) {
/*
* Inline a custom version of __napi_complete().
-@@ -6069,7 +6069,7 @@ static int process_backlog(struct napi_s
+@@ -6073,7 +6073,7 @@ static int process_backlog(struct napi_s
skb_queue_splice_tail_init(&sd->input_pkt_queue,
&sd->process_queue);
}
--- a/net/core/dev.c
+++ b/net/core/dev.c
-@@ -9755,6 +9755,15 @@ static void netdev_sync_lower_features(s
+@@ -9759,6 +9759,15 @@ static void netdev_sync_lower_features(s
}
}
static netdev_features_t netdev_fix_features(struct net_device *dev,
netdev_features_t features)
{
-@@ -9836,15 +9845,9 @@ static netdev_features_t netdev_fix_feat
+@@ -9840,15 +9849,9 @@ static netdev_features_t netdev_fix_feat
features &= ~NETIF_F_LRO;
}
}
if ((features & NETIF_F_HW_TLS_RX) && !(features & NETIF_F_RXCSUM)) {
-@@ -9852,6 +9855,11 @@ static netdev_features_t netdev_fix_feat
+@@ -9856,6 +9859,11 @@ static netdev_features_t netdev_fix_feat
features &= ~NETIF_F_HW_TLS_RX;
}
--- a/net/core/dev.c
+++ b/net/core/dev.c
-@@ -10662,6 +10662,8 @@ struct rtnl_link_stats64 *dev_get_stats(
+@@ -10666,6 +10666,8 @@ struct rtnl_link_stats64 *dev_get_stats(
ops->ndo_get_stats64(dev, storage);
} else if (ops->ndo_get_stats) {
netdev_stats_to_stats64(storage, ops->ndo_get_stats(dev));
unsigned char name_assign_type,
--- a/net/core/dev.c
+++ b/net/core/dev.c
-@@ -10349,25 +10349,12 @@ err_free_name:
+@@ -10353,25 +10353,12 @@ err_free_name:
}
EXPORT_SYMBOL(register_netdevice);
/* make sure we BUG if trying to hit standard
* register/unregister code path
*/
-@@ -10387,12 +10374,32 @@ int init_dummy_netdev(struct net_device
+@@ -10391,12 +10378,32 @@ int init_dummy_netdev(struct net_device
* because users of this 'device' dont need to change
* its refcount.
*/
/**
* register_netdev - register a network device
* @dev: device to register
-@@ -10986,6 +10993,19 @@ void free_netdev(struct net_device *dev)
+@@ -10990,6 +10997,19 @@ void free_netdev(struct net_device *dev)
EXPORT_SYMBOL(free_netdev);
/**
/**
--- a/net/core/dev.c
+++ b/net/core/dev.c
-@@ -6606,7 +6606,7 @@ static int __napi_poll(struct napi_struc
+@@ -6610,7 +6610,7 @@ static int __napi_poll(struct napi_struc
* accidentally calling ->poll() when NAPI is not scheduled.
*/
work = 0;
u64_stats_update_begin(&txq_stats->napi_syncp);
u64_stats_add(&txq_stats->napi.tx_packets, tx_packets);
-@@ -5590,6 +5594,7 @@ static int stmmac_napi_poll_tx(struct na
+@@ -5602,6 +5606,7 @@ static int stmmac_napi_poll_tx(struct na
container_of(napi, struct stmmac_channel, tx_napi);
struct stmmac_priv *priv = ch->priv_data;
struct stmmac_txq_stats *txq_stats;
u32 chan = ch->index;
int work_done;
-@@ -5598,7 +5603,7 @@ static int stmmac_napi_poll_tx(struct na
+@@ -5610,7 +5615,7 @@ static int stmmac_napi_poll_tx(struct na
u64_stats_inc(&txq_stats->napi.poll);
u64_stats_update_end(&txq_stats->napi_syncp);
work_done = min(work_done, budget);
if (work_done < budget && napi_complete_done(napi, work_done)) {
-@@ -5609,6 +5614,10 @@ static int stmmac_napi_poll_tx(struct na
+@@ -5621,6 +5626,10 @@ static int stmmac_napi_poll_tx(struct na
spin_unlock_irqrestore(&ch->lock, flags);
}
return work_done;
}
-@@ -5617,6 +5626,7 @@ static int stmmac_napi_poll_rxtx(struct
+@@ -5629,6 +5638,7 @@ static int stmmac_napi_poll_rxtx(struct
struct stmmac_channel *ch =
container_of(napi, struct stmmac_channel, rxtx_napi);
struct stmmac_priv *priv = ch->priv_data;
int rx_done, tx_done, rxtx_done;
struct stmmac_rxq_stats *rxq_stats;
struct stmmac_txq_stats *txq_stats;
-@@ -5632,7 +5642,7 @@ static int stmmac_napi_poll_rxtx(struct
+@@ -5644,7 +5654,7 @@ static int stmmac_napi_poll_rxtx(struct
u64_stats_inc(&txq_stats->napi.poll);
u64_stats_update_end(&txq_stats->napi_syncp);
tx_done = min(tx_done, budget);
rx_done = stmmac_rx_zc(priv, budget, chan);
-@@ -5657,6 +5667,10 @@ static int stmmac_napi_poll_rxtx(struct
+@@ -5669,6 +5679,10 @@ static int stmmac_napi_poll_rxtx(struct
spin_unlock_irqrestore(&ch->lock, flags);
}
--- a/net/core/dev.c
+++ b/net/core/dev.c
-@@ -10979,7 +10979,8 @@ void free_netdev(struct net_device *dev)
+@@ -10983,7 +10983,8 @@ void free_netdev(struct net_device *dev)
dev->xdp_bulkq = NULL;
/* Compatibility with error handling in drivers */
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
-@@ -1658,7 +1658,7 @@ static void device_links_purge(struct de
+@@ -1657,7 +1657,7 @@ static void device_links_purge(struct de
#define FW_DEVLINK_FLAGS_RPM (FW_DEVLINK_FLAGS_ON | \
DL_FLAG_PM_RUNTIME)
static const struct qmp_phy_cfg ipq8074_usb3phy_cfg = {
.lanes = 1,
-@@ -2238,7 +2258,7 @@ err_node_put:
+@@ -2239,7 +2259,7 @@ err_node_put:
static const struct of_device_id qmp_usb_of_match_table[] = {
{
.compatible = "qcom,ipq6018-qmp-usb3-phy",
if (priv->dma_cap.host_dma_width <= 32)
gfp |= GFP_DMA32;
-@@ -4673,7 +4673,7 @@ static inline void stmmac_rx_refill(stru
+@@ -4685,7 +4685,7 @@ static inline void stmmac_rx_refill(stru
struct stmmac_rx_queue *rx_q = &priv->dma_conf.rx_queue[queue];
int dirty = stmmac_rx_dirty(priv, queue);
unsigned int entry = rx_q->dirty_rx;