firmware_class: make firmware caching configurable

Because firmware caching generates uevent messages that are sent over a
netlink socket, it can prevent suspend on many platforms. It's also not
always useful, so make it a configurable option.

bug 32180327

Change-Id: I1250512b27edb56caa78d536e5ccf1fb669476ad
Signed-off-by: Ajay Dudani <adudani@google.com>
This commit is contained in:
Tim Murray 2016-10-20 13:53:58 -07:00 committed by Julian Veit
parent f6ab8eed12
commit c538e23f6d
2 changed files with 10 additions and 5 deletions

View File

@ -156,6 +156,11 @@ config FW_LOADER_USER_HELPER
no longer required unless you have a special firmware file that
resides in a non-standard path.
config FW_CACHE
bool "Enable firmware caching during suspend"
depends on PM_SLEEP
default n
config DEBUG_DRIVER
bool "Driver Core verbose debug messages"
depends on DEBUG_KERNEL

View File

@ -103,7 +103,7 @@ struct firmware_cache {
struct list_head head;
int state;
#ifdef CONFIG_PM_SLEEP
#ifdef CONFIG_FW_CACHE
/*
* Names of firmware images which have been cached successfully
* will be added into the below list so that device uncache
@ -423,7 +423,7 @@ static void fw_set_page_data(struct firmware_buf *buf, struct firmware *fw)
(unsigned int)buf->size);
}
#ifdef CONFIG_PM_SLEEP
#ifdef CONFIG_FW_CACHE
static void fw_name_devm_release(struct device *dev, void *res)
{
struct fw_name_devm *fwn = res;
@ -1560,7 +1560,7 @@ int uncache_firmware(const char *fw_name)
return -EINVAL;
}
#ifdef CONFIG_PM_SLEEP
#ifdef CONFIG_FW_CACHE
static ASYNC_DOMAIN_EXCLUSIVE(fw_cache_domain);
static struct fw_cache_entry *alloc_fw_cache_entry(const char *name)
@ -1826,7 +1826,7 @@ static void __init fw_cache_init(void)
INIT_LIST_HEAD(&fw_cache.head);
fw_cache.state = FW_LOADER_NO_CACHE;
#ifdef CONFIG_PM_SLEEP
#ifdef CONFIG_FW_CACHE
spin_lock_init(&fw_cache.name_lock);
INIT_LIST_HEAD(&fw_cache.fw_names);
@ -1853,7 +1853,7 @@ static int __init firmware_class_init(void)
static void __exit firmware_class_exit(void)
{
#ifdef CONFIG_PM_SLEEP
#ifdef CONFIG_FW_CACHE
unregister_syscore_ops(&fw_syscore_ops);
unregister_pm_notifier(&fw_cache.pm_notify);
#endif