mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-02 08:39:08 -04:00
Merge tag 'arm-soc/for-6.2/drivers' of https://github.com/Broadcom/stblinux into soc/drivers
This pull request contains Broadcom SoCs driver changes for 6.2, please pull the following: - Yuan uses dev_err_probe() in the Raspberry Pi firmware provider to simplify the error handling code - Rafal adds support for initialiazing the BCM47xx NVMEM/NVRAM firmware provider out of memory-mapped flash devices. * tag 'arm-soc/for-6.2/drivers' of https://github.com/Broadcom/stblinux: firmware/nvram: bcm47xx: support init from IO memory firmware: raspberrypi: Use dev_err_probe() to simplify code Link: https://lore.kernel.org/r/20221129191755.542584-3-f.fainelli@gmail.com Signed-off-by: Arnd Bergmann <arnd@arndb.de>
This commit is contained in:
@@ -110,6 +110,24 @@ static int bcm47xx_nvram_find_and_copy(void __iomem *flash_start, size_t res_siz
|
||||
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
|
||||
|
||||
@@ -268,12 +268,9 @@ static int rpi_firmware_probe(struct platform_device *pdev)
|
||||
fw->cl.tx_block = true;
|
||||
|
||||
fw->chan = mbox_request_channel(&fw->cl, 0);
|
||||
if (IS_ERR(fw->chan)) {
|
||||
int ret = PTR_ERR(fw->chan);
|
||||
if (ret != -EPROBE_DEFER)
|
||||
dev_err(dev, "Failed to get mbox channel: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
if (IS_ERR(fw->chan))
|
||||
return dev_err_probe(dev, PTR_ERR(fw->chan),
|
||||
"Failed to get mbox channel\n");
|
||||
|
||||
init_completion(&fw->c);
|
||||
kref_init(&fw->consumers);
|
||||
|
||||
@@ -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>
|
||||
@@ -136,6 +137,8 @@ static int brcm_nvram_probe(struct platform_device *pdev)
|
||||
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;
|
||||
|
||||
@@ -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_contents(char *nvram)
|
||||
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