kernel: bump 5.15 to 5.15.133
Changelog: https://cdn.kernel.org/pub/linux/kernel/v5.x/ChangeLog-5.15.133 Removed upstreamed: bcm47xx/patches-5.15/101-v5.18-mtd-rawnand-brcmnand-Allow-SoC-to-provide-I-O-operations.patch[1] Cherry picked build fix.[2] All other patches automatically rebased. 1. https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?h=v5.15.133&id=56cf9f446b331414a15ef0e8dedf23583ec2c427 2. https://git.kernel.org/pub/scm/linux/kernel/git/stable/stable-queue.git/tree/queue-5.15/fix-up-backport-of-136191703038-interconnect-teach-l.patch Build system: x86_64 Build-tested: ramips/tplink_archer-a6-v3 Run-tested: ramips/tplink_archer-a6-v3 Signed-off-by: John Audia <therealgraysky@proton.me> (cherry picked from commit 89895937dd4a24446b7bfd067398b4f7e73dc7b5)
This commit is contained in:
		
				
					committed by
					
						
						Hauke Mehrtens
					
				
			
			
				
	
			
			
			
						parent
						
							e26947993f
						
					
				
				
					commit
					6d65f5ea2b
				
			@@ -1,2 +1,2 @@
 | 
				
			|||||||
LINUX_VERSION-5.15 = .132
 | 
					LINUX_VERSION-5.15 = .133
 | 
				
			||||||
LINUX_KERNEL_HASH-5.15.132 = 4177b5c4d6e749bb8339ac4aa68eb0932ead9490b956a80d9a597089959618ac
 | 
					LINUX_KERNEL_HASH-5.15.133 = ef845e7934897b88e4448378ea9daacac19e07f156fe904844fab0a7d8ff5ddd
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,15 +14,15 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
--- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
 | 
					--- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
 | 
				
			||||||
+++ b/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);
 | 
					 	dev_set_drvdata(dev, ctrl);
 | 
				
			||||||
 	ctrl->dev = dev;
 | 
					 	ctrl->dev = dev;
 | 
				
			||||||
+	ctrl->soc = soc;
 | 
					+	ctrl->soc = soc;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	init_completion(&ctrl->done);
 | 
					 	/* Enable the static key if the soc provides I/O operations indicating
 | 
				
			||||||
 	init_completion(&ctrl->dma_done);
 | 
					 	 * that a non-memory mapped IO access path must be used
 | 
				
			||||||
@@ -3173,8 +3174,6 @@ int brcmnand_probe(struct platform_devic
 | 
					@@ -3205,8 +3206,6 @@ int brcmnand_probe(struct platform_devic
 | 
				
			||||||
 	 * interesting ways
 | 
					 	 * interesting ways
 | 
				
			||||||
 	 */
 | 
					 	 */
 | 
				
			||||||
 	if (soc) {
 | 
					 	if (soc) {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,150 +0,0 @@
 | 
				
			|||||||
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);
 | 
					 | 
				
			||||||
 
 | 
					 | 
				
			||||||
@@ -16,7 +16,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
--- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
 | 
					--- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
 | 
				
			||||||
+++ b/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)
 | 
					 static int brcmnand_init_cs(struct brcmnand_host *host, struct device_node *dn)
 | 
				
			||||||
 {
 | 
					 {
 | 
				
			||||||
 	struct brcmnand_controller *ctrl = host->ctrl;
 | 
					 	struct brcmnand_controller *ctrl = host->ctrl;
 | 
				
			||||||
@@ -25,7 +25,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
 | 
				
			|||||||
 	struct mtd_info *mtd;
 | 
					 	struct mtd_info *mtd;
 | 
				
			||||||
 	struct nand_chip *chip;
 | 
					 	struct nand_chip *chip;
 | 
				
			||||||
 	int ret;
 | 
					 	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);
 | 
					 	ret = of_property_read_u32(dn, "reg", &host->cs);
 | 
				
			||||||
 	if (ret) {
 | 
					 	if (ret) {
 | 
				
			||||||
@@ -34,7 +34,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
 | 
				
			|||||||
 		return -ENXIO;
 | 
					 		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_flash_node(chip, dn);
 | 
				
			||||||
 	nand_set_controller_data(chip, host);
 | 
					 	nand_set_controller_data(chip, host);
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,7 +17,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
--- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
 | 
					--- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
 | 
				
			||||||
+++ b/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,
 | 
					 	.attach_chip = brcmnand_attach_chip,
 | 
				
			||||||
 };
 | 
					 };
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -26,7 +26,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
 | 
				
			|||||||
 {
 | 
					 {
 | 
				
			||||||
 	struct brcmnand_controller *ctrl = host->ctrl;
 | 
					 	struct brcmnand_controller *ctrl = host->ctrl;
 | 
				
			||||||
 	struct device *dev = ctrl->dev;
 | 
					 	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;
 | 
					 	int ret;
 | 
				
			||||||
 	u16 cfg_offs;
 | 
					 	u16 cfg_offs;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -43,7 +43,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
 | 
				
			|||||||
 	nand_set_controller_data(chip, host);
 | 
					 	nand_set_controller_data(chip, host);
 | 
				
			||||||
 	mtd->name = devm_kasprintf(dev, GFP_KERNEL, "brcmnand.%d",
 | 
					 	mtd->name = devm_kasprintf(dev, GFP_KERNEL, "brcmnand.%d",
 | 
				
			||||||
 				   host->cs);
 | 
					 				   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->pdev = pdev;
 | 
				
			||||||
 			host->ctrl = ctrl;
 | 
					 			host->ctrl = ctrl;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,7 +23,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
 | 
				
			|||||||
 	unsigned int		dma_irq;
 | 
					 	unsigned int		dma_irq;
 | 
				
			||||||
 	int			nand_version;
 | 
					 	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;
 | 
					 	bool err = false;
 | 
				
			||||||
 	int sts;
 | 
					 	int sts;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -32,7 +32,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
 | 
				
			|||||||
 		/* switch to interrupt polling and PIO mode */
 | 
					 		/* switch to interrupt polling and PIO mode */
 | 
				
			||||||
 		disable_ctrl_irqs(ctrl);
 | 
					 		disable_ctrl_irqs(ctrl);
 | 
				
			||||||
 		sts = bcmnand_ctrl_poll_status(ctrl, NAND_CTRL_RDY,
 | 
					 		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 */
 | 
					 	/* IRQ */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -23,7 +23,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
 | 
				
			|||||||
 #include <linux/err.h>
 | 
					 #include <linux/err.h>
 | 
				
			||||||
 #include <linux/completion.h>
 | 
					 #include <linux/completion.h>
 | 
				
			||||||
 #include <linux/interrupt.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,
 | 
					 	.attach_chip = brcmnand_attach_chip,
 | 
				
			||||||
 };
 | 
					 };
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -33,7 +33,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
 | 
				
			|||||||
 {
 | 
					 {
 | 
				
			||||||
 	struct brcmnand_controller *ctrl = host->ctrl;
 | 
					 	struct brcmnand_controller *ctrl = host->ctrl;
 | 
				
			||||||
 	struct device *dev = ctrl->dev;
 | 
					 	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)
 | 
					 	if (ret)
 | 
				
			||||||
 		return ret;
 | 
					 		return ret;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -42,7 +42,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
 | 
				
			|||||||
 	if (ret)
 | 
					 	if (ret)
 | 
				
			||||||
 		nand_cleanup(chip);
 | 
					 		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)
 | 
					 int brcmnand_probe(struct platform_device *pdev, struct brcmnand_soc *soc)
 | 
				
			||||||
 {
 | 
					 {
 | 
				
			||||||
@@ -63,7 +63,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
 | 
				
			|||||||
 		return -ENODEV;
 | 
					 		return -ENODEV;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	ctrl = devm_kzalloc(dev, sizeof(*ctrl), GFP_KERNEL);
 | 
					 	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 */
 | 
					 	/* NAND register range */
 | 
				
			||||||
 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 | 
					 	res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 | 
				
			||||||
 	ctrl->nand_base = devm_ioremap_resource(dev, res);
 | 
					 	ctrl->nand_base = devm_ioremap_resource(dev, res);
 | 
				
			||||||
@@ -72,7 +72,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
 | 
				
			|||||||
 		return PTR_ERR(ctrl->nand_base);
 | 
					 		return PTR_ERR(ctrl->nand_base);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	/* Enable clock before using NAND registers */
 | 
					 	/* 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) {
 | 
					 	for_each_available_child_of_node(dn, child) {
 | 
				
			||||||
 		if (of_device_is_compatible(child, "brcm,nandcs")) {
 | 
					 		if (of_device_is_compatible(child, "brcm,nandcs")) {
 | 
				
			||||||
@@ -80,7 +80,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
 			host = devm_kzalloc(dev, sizeof(*host), GFP_KERNEL);
 | 
					 			host = devm_kzalloc(dev, sizeof(*host), GFP_KERNEL);
 | 
				
			||||||
 			if (!host) {
 | 
					 			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);
 | 
					 			nand_set_flash_node(&host->chip, child);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
@@ -89,7 +89,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
 | 
				
			|||||||
 			if (ret) {
 | 
					 			if (ret) {
 | 
				
			||||||
 				devm_kfree(dev, host);
 | 
					 				devm_kfree(dev, host);
 | 
				
			||||||
 				continue; /* Try all chip-selects */
 | 
					 				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
 | 
				
			||||||
 		}
 | 
					 		}
 | 
				
			||||||
 	}
 | 
					 	}
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -14,7 +14,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
--- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
 | 
					--- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
 | 
				
			||||||
+++ b/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)
 | 
					 static inline int brcmnand_cmd_shift(struct brcmnand_controller *ctrl)
 | 
				
			||||||
 {
 | 
					 {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -187,7 +187,7 @@ Signed-off-by: Florian Fainelli <f.fainelli@gmail.com>
 | 
				
			|||||||
+MODULE_DESCRIPTION("NAND controller driver glue for BCMA chips");
 | 
					+MODULE_DESCRIPTION("NAND controller driver glue for BCMA chips");
 | 
				
			||||||
--- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
 | 
					--- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
 | 
				
			||||||
+++ b/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)
 | 
					 static inline bool brcmnand_non_mmio_ops(struct brcmnand_controller *ctrl)
 | 
				
			||||||
 {
 | 
					 {
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,7 +20,7 @@ Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
--- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
 | 
					--- a/drivers/mtd/nand/raw/brcmnand/brcmnand.c
 | 
				
			||||||
+++ b/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
 | 
					  * 1: NAND_WP is set by default, cleared for erase/write operations
 | 
				
			||||||
  * 2: NAND_WP is always cleared
 | 
					  * 2: NAND_WP is always cleared
 | 
				
			||||||
  */
 | 
					  */
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -382,7 +382,7 @@ Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
 | 
				
			|||||||
 }
 | 
					 }
 | 
				
			||||||
--- a/kernel/fork.c
 | 
					--- a/kernel/fork.c
 | 
				
			||||||
+++ b/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;
 | 
					 		goto fail_nocontext;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 	mm->user_ns = get_user_ns(user_ns);
 | 
					 	mm->user_ns = get_user_ns(user_ns);
 | 
				
			||||||
@@ -390,7 +390,7 @@ Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
 | 
				
			|||||||
 	return mm;
 | 
					 	return mm;
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 fail_nocontext:
 | 
					 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)
 | 
					 	if (mm->binfmt)
 | 
				
			||||||
 		module_put(mm->binfmt->module);
 | 
					 		module_put(mm->binfmt->module);
 | 
				
			||||||
@@ -398,7 +398,7 @@ Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
 | 
				
			|||||||
 	mmdrop(mm);
 | 
					 	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);
 | 
					 		get_task_struct(p);
 | 
				
			||||||
 	}
 | 
					 	}
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -0,0 +1,31 @@
 | 
				
			|||||||
 | 
					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>
 | 
				
			||||||
@@ -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
 | 
				
			||||||
@@ -894,6 +897,12 @@ struct ata_port {
 | 
					@@ -898,6 +901,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
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -72,7 +72,7 @@ Signed-off-by: Wolfram Sang <wsa@kernel.org>
 | 
				
			|||||||
 	idev->adapter.dev.parent = &pdev->dev;
 | 
					 	idev->adapter.dev.parent = &pdev->dev;
 | 
				
			||||||
--- a/drivers/i2c/busses/i2c-aspeed.c
 | 
					--- a/drivers/i2c/busses/i2c-aspeed.c
 | 
				
			||||||
+++ b/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.algo = &aspeed_i2c_algo;
 | 
				
			||||||
 	bus->adap.dev.parent = &pdev->dev;
 | 
					 	bus->adap.dev.parent = &pdev->dev;
 | 
				
			||||||
 	bus->adap.dev.of_node = pdev->dev.of_node;
 | 
					 	bus->adap.dev.of_node = pdev->dev.of_node;
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -36,7 +36,7 @@
 | 
				
			|||||||
 
 | 
					 
 | 
				
			||||||
--- a/include/linux/libata.h
 | 
					--- a/include/linux/libata.h
 | 
				
			||||||
+++ b/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);
 | 
					 	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
 | 
				
			||||||
@@ -1013,6 +1015,9 @@ struct ata_port_operations {
 | 
					@@ -1017,6 +1019,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);
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user