-LINUX_VERSION-5.15 = .132
-LINUX_KERNEL_HASH-5.15.132 = 4177b5c4d6e749bb8339ac4aa68eb0932ead9490b956a80d9a597089959618ac
+LINUX_VERSION-5.15 = .133
+LINUX_KERNEL_HASH-5.15.133 = ef845e7934897b88e4448378ea9daacac19e07f156fe904844fab0a7d8ff5ddd
--- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
+++ b/drivers/mtd/nand/raw/brcmnand/brcmnand.c
-@@ -3033,6 +3033,7 @@ int brcmnand_probe(struct platform_devic
+@@ -3059,6 +3059,7 @@ int brcmnand_probe(struct platform_devic
dev_set_drvdata(dev, ctrl);
ctrl->dev = dev;
+ ctrl->soc = soc;
- init_completion(&ctrl->done);
- init_completion(&ctrl->dma_done);
-@@ -3173,8 +3174,6 @@ int brcmnand_probe(struct platform_devic
+ /* Enable the static key if the soc provides I/O operations indicating
+ * that a non-memory mapped IO access path must be used
+@@ -3205,8 +3206,6 @@ int brcmnand_probe(struct platform_devic
* interesting ways
*/
if (soc) {
+++ /dev/null
-From: Florian Fainelli <f.fainelli@gmail.com>
-Subject: [PATCH v3 2/9] mtd: rawnand: brcmnand: Allow SoC to provide I/O operations
-Date: Fri, 07 Jan 2022 10:46:07 -0800
-Content-Type: text/plain; charset="utf-8"
-
-Allow a brcmnand_soc instance to provide a custom set of I/O operations
-which we will require when using this driver on a BCMA bus which is not
-directly memory mapped I/O. Update the nand_{read,write}_reg accordingly
-to use the SoC operations if provided.
-
-To minimize the penalty on other SoCs which do support standard MMIO
-accesses, we use a static key which is disabled by default and gets
-enabled if a soc implementation does provide I/O operations.
-
-Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
----
- drivers/mtd/nand/raw/brcmnand/brcmnand.c | 28 +++++++++++++++++++++--
- drivers/mtd/nand/raw/brcmnand/brcmnand.h | 29 ++++++++++++++++++++++++
- 2 files changed, 55 insertions(+), 2 deletions(-)
-
---- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
-+++ b/drivers/mtd/nand/raw/brcmnand/brcmnand.c
-@@ -25,6 +25,7 @@
- #include <linux/of.h>
- #include <linux/of_platform.h>
- #include <linux/slab.h>
-+#include <linux/static_key.h>
- #include <linux/list.h>
- #include <linux/log2.h>
-
-@@ -207,6 +208,8 @@ enum {
-
- struct brcmnand_host;
-
-+static DEFINE_STATIC_KEY_FALSE(brcmnand_soc_has_ops_key);
-+
- struct brcmnand_controller {
- struct device *dev;
- struct nand_controller controller;
-@@ -592,15 +595,25 @@ enum {
- INTFC_CTLR_READY = BIT(31),
- };
-
-+static inline bool brcmnand_non_mmio_ops(struct brcmnand_controller *ctrl)
-+{
-+ return static_branch_unlikely(&brcmnand_soc_has_ops_key);
-+}
-+
- static inline u32 nand_readreg(struct brcmnand_controller *ctrl, u32 offs)
- {
-+ if (brcmnand_non_mmio_ops(ctrl))
-+ return brcmnand_soc_read(ctrl->soc, offs);
- return brcmnand_readl(ctrl->nand_base + offs);
- }
-
- static inline void nand_writereg(struct brcmnand_controller *ctrl, u32 offs,
- u32 val)
- {
-- brcmnand_writel(val, ctrl->nand_base + offs);
-+ if (brcmnand_non_mmio_ops(ctrl))
-+ brcmnand_soc_write(ctrl->soc, val, offs);
-+ else
-+ brcmnand_writel(val, ctrl->nand_base + offs);
- }
-
- static int brcmnand_revision_init(struct brcmnand_controller *ctrl)
-@@ -766,13 +779,18 @@ static inline void brcmnand_rmw_reg(stru
-
- static inline u32 brcmnand_read_fc(struct brcmnand_controller *ctrl, int word)
- {
-+ if (brcmnand_non_mmio_ops(ctrl))
-+ return brcmnand_soc_read(ctrl->soc, BRCMNAND_NON_MMIO_FC_ADDR);
- return __raw_readl(ctrl->nand_fc + word * 4);
- }
-
- static inline void brcmnand_write_fc(struct brcmnand_controller *ctrl,
- int word, u32 val)
- {
-- __raw_writel(val, ctrl->nand_fc + word * 4);
-+ if (brcmnand_non_mmio_ops(ctrl))
-+ brcmnand_soc_write(ctrl->soc, val, BRCMNAND_NON_MMIO_FC_ADDR);
-+ else
-+ __raw_writel(val, ctrl->nand_fc + word * 4);
- }
-
- static inline void edu_writel(struct brcmnand_controller *ctrl,
-@@ -3035,6 +3053,12 @@ int brcmnand_probe(struct platform_devic
- ctrl->dev = dev;
- ctrl->soc = soc;
-
-+ /* Enable the static key if the soc provides I/O operations indicating
-+ * that a non-memory mapped IO access path must be used
-+ */
-+ if (brcmnand_soc_has_ops(ctrl->soc))
-+ static_branch_enable(&brcmnand_soc_has_ops_key);
-+
- init_completion(&ctrl->done);
- init_completion(&ctrl->dma_done);
- init_completion(&ctrl->edu_done);
---- a/drivers/mtd/nand/raw/brcmnand/brcmnand.h
-+++ b/drivers/mtd/nand/raw/brcmnand/brcmnand.h
-@@ -11,12 +11,25 @@
-
- struct platform_device;
- struct dev_pm_ops;
-+struct brcmnand_io_ops;
-+
-+/* Special register offset constant to intercept a non-MMIO access
-+ * to the flash cache register space. This is intentionally large
-+ * not to overlap with an existing offset.
-+ */
-+#define BRCMNAND_NON_MMIO_FC_ADDR 0xffffffff
-
- struct brcmnand_soc {
- bool (*ctlrdy_ack)(struct brcmnand_soc *soc);
- void (*ctlrdy_set_enabled)(struct brcmnand_soc *soc, bool en);
- void (*prepare_data_bus)(struct brcmnand_soc *soc, bool prepare,
- bool is_param);
-+ const struct brcmnand_io_ops *ops;
-+};
-+
-+struct brcmnand_io_ops {
-+ u32 (*read_reg)(struct brcmnand_soc *soc, u32 offset);
-+ void (*write_reg)(struct brcmnand_soc *soc, u32 val, u32 offset);
- };
-
- static inline void brcmnand_soc_data_bus_prepare(struct brcmnand_soc *soc,
-@@ -58,6 +71,22 @@ static inline void brcmnand_writel(u32 v
- writel_relaxed(val, addr);
- }
-
-+static inline bool brcmnand_soc_has_ops(struct brcmnand_soc *soc)
-+{
-+ return soc && soc->ops && soc->ops->read_reg && soc->ops->write_reg;
-+}
-+
-+static inline u32 brcmnand_soc_read(struct brcmnand_soc *soc, u32 offset)
-+{
-+ return soc->ops->read_reg(soc, offset);
-+}
-+
-+static inline void brcmnand_soc_write(struct brcmnand_soc *soc, u32 val,
-+ u32 offset)
-+{
-+ soc->ops->write_reg(soc, val, offset);
-+}
-+
- int brcmnand_probe(struct platform_device *pdev, struct brcmnand_soc *soc);
- int brcmnand_remove(struct platform_device *pdev);
-
--- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
+++ b/drivers/mtd/nand/raw/brcmnand/brcmnand.c
-@@ -2806,7 +2806,7 @@ static const struct nand_controller_ops
+@@ -2814,7 +2814,7 @@ static const struct nand_controller_ops
static int brcmnand_init_cs(struct brcmnand_host *host, struct device_node *dn)
{
struct brcmnand_controller *ctrl = host->ctrl;
struct mtd_info *mtd;
struct nand_chip *chip;
int ret;
-@@ -2814,7 +2814,7 @@ static int brcmnand_init_cs(struct brcmn
+@@ -2822,7 +2822,7 @@ static int brcmnand_init_cs(struct brcmn
ret = of_property_read_u32(dn, "reg", &host->cs);
if (ret) {
return -ENXIO;
}
-@@ -2823,13 +2823,13 @@ static int brcmnand_init_cs(struct brcmn
+@@ -2831,13 +2831,13 @@ static int brcmnand_init_cs(struct brcmn
nand_set_flash_node(chip, dn);
nand_set_controller_data(chip, host);
--- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
+++ b/drivers/mtd/nand/raw/brcmnand/brcmnand.c
-@@ -2803,7 +2803,7 @@ static const struct nand_controller_ops
+@@ -2811,7 +2811,7 @@ static const struct nand_controller_ops
.attach_chip = brcmnand_attach_chip,
};
{
struct brcmnand_controller *ctrl = host->ctrl;
struct device *dev = ctrl->dev;
-@@ -2812,16 +2812,9 @@ static int brcmnand_init_cs(struct brcmn
+@@ -2820,16 +2820,9 @@ static int brcmnand_init_cs(struct brcmn
int ret;
u16 cfg_offs;
nand_set_controller_data(chip, host);
mtd->name = devm_kasprintf(dev, GFP_KERNEL, "brcmnand.%d",
host->cs);
-@@ -3228,7 +3221,16 @@ int brcmnand_probe(struct platform_devic
+@@ -3236,7 +3229,16 @@ int brcmnand_probe(struct platform_devic
host->pdev = pdev;
host->ctrl = ctrl;
unsigned int dma_irq;
int nand_version;
-@@ -1642,7 +1642,7 @@ static bool brcmstb_nand_wait_for_comple
+@@ -1650,7 +1650,7 @@ static bool brcmstb_nand_wait_for_comple
bool err = false;
int sts;
/* switch to interrupt polling and PIO mode */
disable_ctrl_irqs(ctrl);
sts = bcmnand_ctrl_poll_status(ctrl, NAND_CTRL_RDY,
-@@ -3179,33 +3179,29 @@ int brcmnand_probe(struct platform_devic
+@@ -3187,33 +3187,29 @@ int brcmnand_probe(struct platform_devic
}
/* IRQ */
#include <linux/err.h>
#include <linux/completion.h>
#include <linux/interrupt.h>
-@@ -2803,7 +2804,8 @@ static const struct nand_controller_ops
+@@ -2811,7 +2812,8 @@ static const struct nand_controller_ops
.attach_chip = brcmnand_attach_chip,
};
{
struct brcmnand_controller *ctrl = host->ctrl;
struct device *dev = ctrl->dev;
-@@ -2856,7 +2858,7 @@ static int brcmnand_init_cs(struct brcmn
+@@ -2864,7 +2866,7 @@ static int brcmnand_init_cs(struct brcmn
if (ret)
return ret;
if (ret)
nand_cleanup(chip);
-@@ -3025,17 +3027,15 @@ static int brcmnand_edu_setup(struct pla
+@@ -3033,17 +3035,15 @@ static int brcmnand_edu_setup(struct pla
int brcmnand_probe(struct platform_device *pdev, struct brcmnand_soc *soc)
{
return -ENODEV;
ctrl = devm_kzalloc(dev, sizeof(*ctrl), GFP_KERNEL);
-@@ -3062,7 +3062,7 @@ int brcmnand_probe(struct platform_devic
+@@ -3070,7 +3070,7 @@ int brcmnand_probe(struct platform_devic
/* NAND register range */
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
ctrl->nand_base = devm_ioremap_resource(dev, res);
return PTR_ERR(ctrl->nand_base);
/* Enable clock before using NAND registers */
-@@ -3206,7 +3206,6 @@ int brcmnand_probe(struct platform_devic
+@@ -3214,7 +3214,6 @@ int brcmnand_probe(struct platform_devic
for_each_available_child_of_node(dn, child) {
if (of_device_is_compatible(child, "brcm,nandcs")) {
host = devm_kzalloc(dev, sizeof(*host), GFP_KERNEL);
if (!host) {
-@@ -3226,7 +3225,7 @@ int brcmnand_probe(struct platform_devic
+@@ -3234,7 +3233,7 @@ int brcmnand_probe(struct platform_devic
nand_set_flash_node(&host->chip, child);
if (ret) {
devm_kfree(dev, host);
continue; /* Try all chip-selects */
-@@ -3236,6 +3235,32 @@ int brcmnand_probe(struct platform_devic
+@@ -3244,6 +3243,32 @@ int brcmnand_probe(struct platform_devic
}
}
--- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
+++ b/drivers/mtd/nand/raw/brcmnand/brcmnand.c
-@@ -916,6 +916,12 @@ static void brcmnand_wr_corr_thresh(stru
+@@ -951,6 +951,12 @@ static void brcmnand_wr_corr_thresh(stru
static inline int brcmnand_cmd_shift(struct brcmnand_controller *ctrl)
{
+MODULE_DESCRIPTION("NAND controller driver glue for BCMA chips");
--- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
+++ b/drivers/mtd/nand/raw/brcmnand/brcmnand.c
-@@ -598,7 +598,11 @@ enum {
+@@ -627,7 +627,11 @@ enum {
static inline bool brcmnand_non_mmio_ops(struct brcmnand_controller *ctrl)
{
--- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
+++ b/drivers/mtd/nand/raw/brcmnand/brcmnand.c
-@@ -37,7 +37,11 @@
+@@ -38,7 +38,11 @@
* 1: NAND_WP is set by default, cleared for erase/write operations
* 2: NAND_WP is always cleared
*/
}
--- a/kernel/fork.c
+++ b/kernel/fork.c
-@@ -1083,6 +1083,7 @@ static struct mm_struct *mm_init(struct
+@@ -1091,6 +1091,7 @@ static struct mm_struct *mm_init(struct
goto fail_nocontext;
mm->user_ns = get_user_ns(user_ns);
return mm;
fail_nocontext:
-@@ -1125,6 +1126,7 @@ static inline void __mmput(struct mm_str
+@@ -1133,6 +1134,7 @@ static inline void __mmput(struct mm_str
}
if (mm->binfmt)
module_put(mm->binfmt->module);
mmdrop(mm);
}
-@@ -2617,6 +2619,13 @@ pid_t kernel_clone(struct kernel_clone_a
+@@ -2625,6 +2627,13 @@ pid_t kernel_clone(struct kernel_clone_a
get_task_struct(p);
}
--- /dev/null
+From 16c572ef0646f8b0fa19fbf81b302de8a03127f2 Mon Sep 17 00:00:00 2001
+From: Sasha Levin <sashal@kernel.org>
+Date: Sun, 24 Sep 2023 14:30:44 -0400
+Subject: Fix up backport of 136191703038 ("interconnect: Teach lockdep about
+ icc_bw_lock order")
+
+Add a missing include to fix the following build error:
+
+drivers/interconnect/core.c: In function 'icc_init':
+drivers/interconnect/core.c:1148:9: error: implicit declaration of function 'fs_reclaim_acquire' [-Werror=implicit-function-declaration]
+ 1148 | fs_reclaim_acquire(GFP_KERNEL);
+ | ^~~~~~~~~~~~~~~~~~
+drivers/interconnect/core.c:1150:9: error: implicit declaration of function 'fs_reclaim_release' [-Werror=implicit-function-declaration]
+ 1150 | fs_reclaim_release(GFP_KERNEL);
+ | ^~~~~~~~~~~~~~~~~~
+
+Signed-off-by: Sasha Levin <sashal@kernel.org>
+---
+ drivers/interconnect/core.c | 1 +
+ 1 file changed, 1 insertion(+)
+
+--- a/drivers/interconnect/core.c
++++ b/drivers/interconnect/core.c
+@@ -13,6 +13,7 @@
+ #include <linux/interconnect.h>
+ #include <linux/interconnect-provider.h>
+ #include <linux/list.h>
++#include <linux/sched/mm.h>
+ #include <linux/module.h>
+ #include <linux/mutex.h>
+ #include <linux/slab.h>
/*
* Define if arch has non-standard setup. This is a _PCI_ standard
-@@ -894,6 +897,12 @@ struct ata_port {
+@@ -898,6 +901,12 @@ struct ata_port {
#ifdef CONFIG_ATA_ACPI
struct ata_acpi_gtm __acpi_init_gtm; /* use ata_acpi_init_gtm() */
#endif
idev->adapter.dev.parent = &pdev->dev;
--- a/drivers/i2c/busses/i2c-aspeed.c
+++ b/drivers/i2c/busses/i2c-aspeed.c
-@@ -1024,7 +1024,7 @@ static int aspeed_i2c_probe_bus(struct p
+@@ -1027,7 +1027,7 @@ static int aspeed_i2c_probe_bus(struct p
bus->adap.algo = &aspeed_i2c_algo;
bus->adap.dev.parent = &pdev->dev;
bus->adap.dev.of_node = pdev->dev.of_node;
--- a/include/linux/libata.h
+++ b/include/linux/libata.h
-@@ -923,6 +923,8 @@ struct ata_port_operations {
+@@ -927,6 +927,8 @@ struct ata_port_operations {
enum ata_completion_errors (*qc_prep)(struct ata_queued_cmd *qc);
unsigned int (*qc_issue)(struct ata_queued_cmd *qc);
bool (*qc_fill_rtf)(struct ata_queued_cmd *qc);
/*
* Configuration and exception handling
-@@ -1013,6 +1015,9 @@ struct ata_port_operations {
+@@ -1017,6 +1019,9 @@ struct ata_port_operations {
void (*phy_reset)(struct ata_port *ap);
void (*eng_timeout)(struct ata_port *ap);