kernel: use upstream firmware patch for Broadcom's NVRAM
This replaces our 2 downstream patches. Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
This commit is contained in:
		| @@ -1,61 +0,0 @@ | |||||||
| From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl> |  | ||||||
| Date: Thu, 11 Mar 2021 08:24:44 +0100 |  | ||||||
| Subject: [PATCH] firmware: bcm47xx_nvram: support init from IO memory |  | ||||||
| MIME-Version: 1.0 |  | ||||||
| Content-Type: text/plain; charset=UTF-8 |  | ||||||
| Content-Transfer-Encoding: 8bit |  | ||||||
|  |  | ||||||
| Signed-off-by: Rafał Miłecki <rafal@milecki.pl> |  | ||||||
| --- |  | ||||||
|  drivers/firmware/broadcom/bcm47xx_nvram.c | 17 +++++++++++++++++ |  | ||||||
|  include/linux/bcm47xx_nvram.h             |  6 ++++++ |  | ||||||
|  2 files changed, 23 insertions(+) |  | ||||||
|  |  | ||||||
| --- a/drivers/firmware/broadcom/bcm47xx_nvram.c |  | ||||||
| +++ b/drivers/firmware/broadcom/bcm47xx_nvram.c |  | ||||||
| @@ -110,6 +110,23 @@ found: |  | ||||||
|  	return 0; |  | ||||||
|  } |  | ||||||
|   |  | ||||||
| +int bcm47xx_nvram_init_from_iomem(void __iomem *nvram_start, size_t res_size) |  | ||||||
| +{ |  | ||||||
| +	if (nvram_len) { |  | ||||||
| +		pr_warn("nvram already initialized\n"); |  | ||||||
| +		return -EEXIST; |  | ||||||
| +	} |  | ||||||
| + |  | ||||||
| +	if (!bcm47xx_nvram_is_valid(nvram_start)) { |  | ||||||
| +		pr_err("No valid NVRAM found\n"); |  | ||||||
| +		return -ENOENT; |  | ||||||
| +	} |  | ||||||
| + |  | ||||||
| +	bcm47xx_nvram_copy(nvram_start, res_size); |  | ||||||
| + |  | ||||||
| +	return 0; |  | ||||||
| +} |  | ||||||
| + |  | ||||||
|  /* |  | ||||||
|   * On bcm47xx we need access to the NVRAM very early, so we can't use mtd |  | ||||||
|   * subsystem to access flash. We can't even use platform device / driver to |  | ||||||
| --- a/include/linux/bcm47xx_nvram.h |  | ||||||
| +++ b/include/linux/bcm47xx_nvram.h |  | ||||||
| @@ -11,6 +11,7 @@ |  | ||||||
|  #include <linux/vmalloc.h> |  | ||||||
|   |  | ||||||
|  #ifdef CONFIG_BCM47XX_NVRAM |  | ||||||
| +int bcm47xx_nvram_init_from_iomem(void __iomem *nvram_start, size_t res_size); |  | ||||||
|  int bcm47xx_nvram_init_from_mem(u32 base, u32 lim); |  | ||||||
|  int bcm47xx_nvram_getenv(const char *name, char *val, size_t val_len); |  | ||||||
|  int bcm47xx_nvram_gpio_pin(const char *name); |  | ||||||
| @@ -20,6 +21,11 @@ static inline void bcm47xx_nvram_release |  | ||||||
|  	vfree(nvram); |  | ||||||
|  }; |  | ||||||
|  #else |  | ||||||
| +static inline int bcm47xx_nvram_init_from_iomem(void __iomem *nvram_start, |  | ||||||
| +						size_t res_size) |  | ||||||
| +{ |  | ||||||
| +	return -ENOTSUPP; |  | ||||||
| +} |  | ||||||
|  static inline int bcm47xx_nvram_init_from_mem(u32 base, u32 lim) |  | ||||||
|  { |  | ||||||
|  	return -ENOTSUPP; |  | ||||||
| @@ -1,31 +0,0 @@ | |||||||
| From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl> |  | ||||||
| Date: Thu, 11 Mar 2021 08:26:14 +0100 |  | ||||||
| Subject: [PATCH] nvmem: brcm_nvram: provide NVMEM content to the NVRAM driver |  | ||||||
| MIME-Version: 1.0 |  | ||||||
| Content-Type: text/plain; charset=UTF-8 |  | ||||||
| Content-Transfer-Encoding: 8bit |  | ||||||
|  |  | ||||||
| Signed-off-by: Rafał Miłecki <rafal@milecki.pl> |  | ||||||
| --- |  | ||||||
|  drivers/nvmem/brcm_nvram.c | 3 +++ |  | ||||||
|  1 file changed, 3 insertions(+) |  | ||||||
|  |  | ||||||
| --- a/drivers/nvmem/brcm_nvram.c |  | ||||||
| +++ b/drivers/nvmem/brcm_nvram.c |  | ||||||
| @@ -3,6 +3,7 @@ |  | ||||||
|   * Copyright (C) 2021 Rafał Miłecki <rafal@milecki.pl> |  | ||||||
|   */ |  | ||||||
|   |  | ||||||
| +#include <linux/bcm47xx_nvram.h> |  | ||||||
|  #include <linux/io.h> |  | ||||||
|  #include <linux/mod_devicetable.h> |  | ||||||
|  #include <linux/module.h> |  | ||||||
| @@ -139,6 +140,8 @@ static int brcm_nvram_probe(struct platf |  | ||||||
|  	if (err) |  | ||||||
|  		return err; |  | ||||||
|   |  | ||||||
| +	bcm47xx_nvram_init_from_iomem(priv->base, resource_size(res)); |  | ||||||
| + |  | ||||||
|  	config.dev = dev; |  | ||||||
|  	config.cells = priv->cells; |  | ||||||
|  	config.ncells = priv->ncells; |  | ||||||
| @@ -0,0 +1,100 @@ | |||||||
|  | From a5be5ce0e25439fae3cd42e3d775979547926812 Mon Sep 17 00:00:00 2001 | ||||||
|  | From: =?UTF-8?q?Rafa=C5=82=20Mi=C5=82ecki?= <rafal@milecki.pl> | ||||||
|  | Date: Thu, 3 Nov 2022 09:25:29 +0100 | ||||||
|  | Subject: [PATCH] firmware/nvram: bcm47xx: support init from IO memory | ||||||
|  | MIME-Version: 1.0 | ||||||
|  | Content-Type: text/plain; charset=UTF-8 | ||||||
|  | Content-Transfer-Encoding: 8bit | ||||||
|  |  | ||||||
|  | Provide NVMEM content to the NVRAM driver from a simple | ||||||
|  | memory resource. This is necessary to use NVRAM in a memory- | ||||||
|  | mapped flash device. Patch taken from OpenWrts development | ||||||
|  | tree. | ||||||
|  |  | ||||||
|  | This patch makes it possible to use memory-mapped NVRAM | ||||||
|  | on the D-Link DWL-8610AP and the D-Link DIR-890L. | ||||||
|  |  | ||||||
|  | Cc: Hauke Mehrtens <hauke@hauke-m.de> | ||||||
|  | Cc: linux-mips@vger.kernel.org | ||||||
|  | Cc: Florian Fainelli <f.fainelli@gmail.com> | ||||||
|  | Cc: bcm-kernel-feedback-list@broadcom.com | ||||||
|  | Cc: Thomas Bogendoerfer <tsbogend@alpha.franken.de> | ||||||
|  | Signed-off-by: Rafał Miłecki <rafal@milecki.pl> | ||||||
|  | [Added an export for modules potentially using the init symbol] | ||||||
|  | Signed-off-by: Linus Walleij <linus.walleij@linaro.org> | ||||||
|  | Link: https://lore.kernel.org/r/20221103082529.359084-1-linus.walleij@linaro.org | ||||||
|  | Signed-off-by: Florian Fainelli <f.fainelli@gmail.com> | ||||||
|  | --- | ||||||
|  |  drivers/firmware/broadcom/bcm47xx_nvram.c | 18 ++++++++++++++++++ | ||||||
|  |  drivers/nvmem/brcm_nvram.c                |  3 +++ | ||||||
|  |  include/linux/bcm47xx_nvram.h             |  6 ++++++ | ||||||
|  |  3 files changed, 27 insertions(+) | ||||||
|  |  | ||||||
|  | --- a/drivers/firmware/broadcom/bcm47xx_nvram.c | ||||||
|  | +++ b/drivers/firmware/broadcom/bcm47xx_nvram.c | ||||||
|  | @@ -110,6 +110,24 @@ found: | ||||||
|  |  	return 0; | ||||||
|  |  } | ||||||
|  |   | ||||||
|  | +int bcm47xx_nvram_init_from_iomem(void __iomem *nvram_start, size_t res_size) | ||||||
|  | +{ | ||||||
|  | +	if (nvram_len) { | ||||||
|  | +		pr_warn("nvram already initialized\n"); | ||||||
|  | +		return -EEXIST; | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  | +	if (!bcm47xx_nvram_is_valid(nvram_start)) { | ||||||
|  | +		pr_err("No valid NVRAM found\n"); | ||||||
|  | +		return -ENOENT; | ||||||
|  | +	} | ||||||
|  | + | ||||||
|  | +	bcm47xx_nvram_copy(nvram_start, res_size); | ||||||
|  | + | ||||||
|  | +	return 0; | ||||||
|  | +} | ||||||
|  | +EXPORT_SYMBOL_GPL(bcm47xx_nvram_init_from_iomem); | ||||||
|  | + | ||||||
|  |  /* | ||||||
|  |   * On bcm47xx we need access to the NVRAM very early, so we can't use mtd | ||||||
|  |   * subsystem to access flash. We can't even use platform device / driver to | ||||||
|  | --- a/drivers/nvmem/brcm_nvram.c | ||||||
|  | +++ b/drivers/nvmem/brcm_nvram.c | ||||||
|  | @@ -3,6 +3,7 @@ | ||||||
|  |   * Copyright (C) 2021 Rafał Miłecki <rafal@milecki.pl> | ||||||
|  |   */ | ||||||
|  |   | ||||||
|  | +#include <linux/bcm47xx_nvram.h> | ||||||
|  |  #include <linux/io.h> | ||||||
|  |  #include <linux/mod_devicetable.h> | ||||||
|  |  #include <linux/module.h> | ||||||
|  | @@ -139,6 +140,8 @@ static int brcm_nvram_probe(struct platf | ||||||
|  |  	if (err) | ||||||
|  |  		return err; | ||||||
|  |   | ||||||
|  | +	bcm47xx_nvram_init_from_iomem(priv->base, resource_size(res)); | ||||||
|  | + | ||||||
|  |  	config.dev = dev; | ||||||
|  |  	config.cells = priv->cells; | ||||||
|  |  	config.ncells = priv->ncells; | ||||||
|  | --- a/include/linux/bcm47xx_nvram.h | ||||||
|  | +++ b/include/linux/bcm47xx_nvram.h | ||||||
|  | @@ -11,6 +11,7 @@ | ||||||
|  |  #include <linux/vmalloc.h> | ||||||
|  |   | ||||||
|  |  #ifdef CONFIG_BCM47XX_NVRAM | ||||||
|  | +int bcm47xx_nvram_init_from_iomem(void __iomem *nvram_start, size_t res_size); | ||||||
|  |  int bcm47xx_nvram_init_from_mem(u32 base, u32 lim); | ||||||
|  |  int bcm47xx_nvram_getenv(const char *name, char *val, size_t val_len); | ||||||
|  |  int bcm47xx_nvram_gpio_pin(const char *name); | ||||||
|  | @@ -20,6 +21,11 @@ static inline void bcm47xx_nvram_release | ||||||
|  |  	vfree(nvram); | ||||||
|  |  }; | ||||||
|  |  #else | ||||||
|  | +static inline int bcm47xx_nvram_init_from_iomem(void __iomem *nvram_start, | ||||||
|  | +						size_t res_size) | ||||||
|  | +{ | ||||||
|  | +	return -ENOTSUPP; | ||||||
|  | +} | ||||||
|  |  static inline int bcm47xx_nvram_init_from_mem(u32 base, u32 lim) | ||||||
|  |  { | ||||||
|  |  	return -ENOTSUPP; | ||||||
		Reference in New Issue
	
	Block a user
	 Rafał Miłecki
					Rafał Miłecki