d8e8a2a8db
It still requires fixing PCIe support: [ 6.644699] pcie_iproc_bcma bcma0:7: host bridge /axi@18000000/pcie@12000 ranges: [ 6.652217] pcie_iproc_bcma bcma0:7: No bus range found for /axi@18000000/pcie@12000, using [bus 00-ff] [ 6.661833] OF: /axi@18000000/pcie@12000: Missing device_type [ 6.667622] pcie_iproc_bcma: probe of bcma0:7 failed with error -12 [ 6.673985] pcie_iproc_bcma bcma0:8: host bridge /axi@18000000/pcie@13000 ranges: [ 6.681514] pcie_iproc_bcma bcma0:8: No bus range found for /axi@18000000/pcie@13000, using [bus 00-ff] [ 6.691137] pcie_iproc_bcma: probe of bcma0:8 failed with error -12 [ 6.697522] pcie_iproc_bcma bcma0:9: host bridge /axi@18000000/pcie@14000 ranges: [ 6.705048] pcie_iproc_bcma bcma0:9: No bus range found for /axi@18000000/pcie@14000, using [bus 00-ff] [ 6.714669] pcie_iproc_bcma: probe of bcma0:9 failed with error -12 Signed-off-by: Rafał Miłecki <rafal@milecki.pl>
62 lines
1.8 KiB
Diff
62 lines
1.8 KiB
Diff
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;
|