[PATCH] firmware: add firmware to new device's devres list for second time cache

From: Kai-Heng Feng
Date: Tue Aug 22 2017 - 03:53:06 EST


Currently, firmware will only be chached if assign_firmware_buf() gets
called.

When a device loses its power or a USB device gets plugged to another
port under suspend, request_firmware() can still find cached firmware,
but firmware name no longer associates with the new device's devres.
So next time the system suspend, those firmware won't be cached.

Hence, we should add the firmware name to the devres when the firmware
is found in cache, to make the firmware cacheable next time.

Signed-off-by: Kai-Heng Feng <kai.heng.feng@xxxxxxxxxxxxx>
---
drivers/base/firmware_class.c | 4 ++++
1 file changed, 4 insertions(+)

diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c
index bfbe1e154128..a99de34e3fdc 100644
--- a/drivers/base/firmware_class.c
+++ b/drivers/base/firmware_class.c
@@ -1177,6 +1177,10 @@ _request_firmware_prepare(struct firmware **firmware_p, const char *name,

ret = fw_lookup_and_allocate_buf(name, &fw_cache, &buf, dbuf, size);

+ /* device might be a new one, add it to devres list */
+ if (ret == 0 || ret == 1)
+ fw_add_devm_name(device, name);
+
/*
* bind with 'buf' now to avoid warning in failure path
* of requesting firmware.
--
2.14.1