LCOV - code coverage report
Current view: top level - drivers/base/firmware_loader - main.c (source / functions) Hit Total Coverage
Test: gcov_data_raspi2_qemu_modules_combined.info Lines: 133 201 66.2 %
Date: 2020-09-30 20:25:01 Functions: 17 24 70.8 %
Branches: 46 106 43.4 %

           Branch data     Line data    Source code
       1                 :            : // SPDX-License-Identifier: GPL-2.0
       2                 :            : /*
       3                 :            :  * main.c - Multi purpose firmware loading support
       4                 :            :  *
       5                 :            :  * Copyright (c) 2003 Manuel Estrada Sainz
       6                 :            :  *
       7                 :            :  * Please see Documentation/firmware_class/ for more information.
       8                 :            :  *
       9                 :            :  */
      10                 :            : 
      11                 :            : #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
      12                 :            : 
      13                 :            : #include <linux/capability.h>
      14                 :            : #include <linux/device.h>
      15                 :            : #include <linux/module.h>
      16                 :            : #include <linux/init.h>
      17                 :            : #include <linux/timer.h>
      18                 :            : #include <linux/vmalloc.h>
      19                 :            : #include <linux/interrupt.h>
      20                 :            : #include <linux/bitops.h>
      21                 :            : #include <linux/mutex.h>
      22                 :            : #include <linux/workqueue.h>
      23                 :            : #include <linux/highmem.h>
      24                 :            : #include <linux/firmware.h>
      25                 :            : #include <linux/slab.h>
      26                 :            : #include <linux/sched.h>
      27                 :            : #include <linux/file.h>
      28                 :            : #include <linux/list.h>
      29                 :            : #include <linux/fs.h>
      30                 :            : #include <linux/async.h>
      31                 :            : #include <linux/pm.h>
      32                 :            : #include <linux/suspend.h>
      33                 :            : #include <linux/syscore_ops.h>
      34                 :            : #include <linux/reboot.h>
      35                 :            : #include <linux/security.h>
      36                 :            : #include <linux/xz.h>
      37                 :            : 
      38                 :            : #include <generated/utsrelease.h>
      39                 :            : 
      40                 :            : #include "../base.h"
      41                 :            : #include "firmware.h"
      42                 :            : #include "fallback.h"
      43                 :            : 
      44                 :            : MODULE_AUTHOR("Manuel Estrada Sainz");
      45                 :            : MODULE_DESCRIPTION("Multi purpose firmware loading support");
      46                 :            : MODULE_LICENSE("GPL");
      47                 :            : 
      48                 :            : struct firmware_cache {
      49                 :            :         /* firmware_buf instance will be added into the below list */
      50                 :            :         spinlock_t lock;
      51                 :            :         struct list_head head;
      52                 :            :         int state;
      53                 :            : 
      54                 :            : #ifdef CONFIG_PM_SLEEP
      55                 :            :         /*
      56                 :            :          * Names of firmware images which have been cached successfully
      57                 :            :          * will be added into the below list so that device uncache
      58                 :            :          * helper can trace which firmware images have been cached
      59                 :            :          * before.
      60                 :            :          */
      61                 :            :         spinlock_t name_lock;
      62                 :            :         struct list_head fw_names;
      63                 :            : 
      64                 :            :         struct delayed_work work;
      65                 :            : 
      66                 :            :         struct notifier_block   pm_notify;
      67                 :            : #endif
      68                 :            : };
      69                 :            : 
      70                 :            : struct fw_cache_entry {
      71                 :            :         struct list_head list;
      72                 :            :         const char *name;
      73                 :            : };
      74                 :            : 
      75                 :            : struct fw_name_devm {
      76                 :            :         unsigned long magic;
      77                 :            :         const char *name;
      78                 :            : };
      79                 :            : 
      80                 :            : static inline struct fw_priv *to_fw_priv(struct kref *ref)
      81                 :            : {
      82                 :            :         return container_of(ref, struct fw_priv, ref);
      83                 :            : }
      84                 :            : 
      85                 :            : #define FW_LOADER_NO_CACHE      0
      86                 :            : #define FW_LOADER_START_CACHE   1
      87                 :            : 
      88                 :            : /* fw_lock could be moved to 'struct fw_sysfs' but since it is just
      89                 :            :  * guarding for corner cases a global lock should be OK */
      90                 :            : DEFINE_MUTEX(fw_lock);
      91                 :            : 
      92                 :            : static struct firmware_cache fw_cache;
      93                 :            : 
      94                 :            : /* Builtin firmware support */
      95                 :            : 
      96                 :            : #ifdef CONFIG_FW_LOADER
      97                 :            : 
      98                 :            : extern struct builtin_fw __start_builtin_fw[];
      99                 :            : extern struct builtin_fw __end_builtin_fw[];
     100                 :            : 
     101                 :            : static void fw_copy_to_prealloc_buf(struct firmware *fw,
     102                 :            :                                     void *buf, size_t size)
     103                 :            : {
     104   [ #  #  #  # ]:          0 :         if (!buf || size < fw->size)
     105                 :            :                 return;
     106                 :          0 :         memcpy(buf, fw->data, fw->size);
     107                 :            : }
     108                 :            : 
     109                 :        808 : static bool fw_get_builtin_firmware(struct firmware *fw, const char *name,
     110                 :            :                                     void *buf, size_t size)
     111                 :            : {
     112                 :            :         struct builtin_fw *b_fw;
     113                 :            : 
     114         [ -  + ]:        808 :         for (b_fw = __start_builtin_fw; b_fw != __end_builtin_fw; b_fw++) {
     115         [ #  # ]:          0 :                 if (strcmp(name, b_fw->name) == 0) {
     116                 :          0 :                         fw->size = b_fw->size;
     117                 :          0 :                         fw->data = b_fw->data;
     118                 :            :                         fw_copy_to_prealloc_buf(fw, buf, size);
     119                 :            : 
     120                 :            :                         return true;
     121                 :            :                 }
     122                 :            :         }
     123                 :            : 
     124                 :            :         return false;
     125                 :            : }
     126                 :            : 
     127                 :            : static bool fw_is_builtin_firmware(const struct firmware *fw)
     128                 :            : {
     129                 :            :         struct builtin_fw *b_fw;
     130                 :            : 
     131         [ -  + ]:          0 :         for (b_fw = __start_builtin_fw; b_fw != __end_builtin_fw; b_fw++)
     132         [ #  # ]:          0 :                 if (fw->data == b_fw->data)
     133                 :            :                         return true;
     134                 :            : 
     135                 :            :         return false;
     136                 :            : }
     137                 :            : 
     138                 :            : #else /* Module case - no builtin firmware support */
     139                 :            : 
     140                 :            : static inline bool fw_get_builtin_firmware(struct firmware *fw,
     141                 :            :                                            const char *name, void *buf,
     142                 :            :                                            size_t size)
     143                 :            : {
     144                 :            :         return false;
     145                 :            : }
     146                 :            : 
     147                 :            : static inline bool fw_is_builtin_firmware(const struct firmware *fw)
     148                 :            : {
     149                 :            :         return false;
     150                 :            : }
     151                 :            : #endif
     152                 :            : 
     153                 :            : static void fw_state_init(struct fw_priv *fw_priv)
     154                 :            : {
     155                 :            :         struct fw_state *fw_st = &fw_priv->fw_st;
     156                 :            : 
     157                 :            :         init_completion(&fw_st->completion);
     158                 :        808 :         fw_st->status = FW_STATUS_UNKNOWN;
     159                 :            : }
     160                 :            : 
     161                 :            : static inline int fw_state_wait(struct fw_priv *fw_priv)
     162                 :            : {
     163                 :          0 :         return __fw_state_wait_common(fw_priv, MAX_SCHEDULE_TIMEOUT);
     164                 :            : }
     165                 :            : 
     166                 :            : static int fw_cache_piggyback_on_request(const char *name);
     167                 :            : 
     168                 :        808 : static struct fw_priv *__allocate_fw_priv(const char *fw_name,
     169                 :            :                                           struct firmware_cache *fwc,
     170                 :            :                                           void *dbuf, size_t size)
     171                 :            : {
     172                 :            :         struct fw_priv *fw_priv;
     173                 :            : 
     174                 :        808 :         fw_priv = kzalloc(sizeof(*fw_priv), GFP_ATOMIC);
     175         [ +  - ]:        808 :         if (!fw_priv)
     176                 :            :                 return NULL;
     177                 :            : 
     178                 :        808 :         fw_priv->fw_name = kstrdup_const(fw_name, GFP_ATOMIC);
     179         [ -  + ]:        808 :         if (!fw_priv->fw_name) {
     180                 :          0 :                 kfree(fw_priv);
     181                 :          0 :                 return NULL;
     182                 :            :         }
     183                 :            : 
     184                 :            :         kref_init(&fw_priv->ref);
     185                 :        808 :         fw_priv->fwc = fwc;
     186                 :        808 :         fw_priv->data = dbuf;
     187                 :        808 :         fw_priv->allocated_size = size;
     188                 :            :         fw_state_init(fw_priv);
     189                 :            : #ifdef CONFIG_FW_LOADER_USER_HELPER
     190                 :            :         INIT_LIST_HEAD(&fw_priv->pending_list);
     191                 :            : #endif
     192                 :            : 
     193                 :            :         pr_debug("%s: fw-%s fw_priv=%p\n", __func__, fw_name, fw_priv);
     194                 :            : 
     195                 :        808 :         return fw_priv;
     196                 :            : }
     197                 :            : 
     198                 :        808 : static struct fw_priv *__lookup_fw_priv(const char *fw_name)
     199                 :            : {
     200                 :            :         struct fw_priv *tmp;
     201                 :            :         struct firmware_cache *fwc = &fw_cache;
     202                 :            : 
     203         [ +  + ]:       1212 :         list_for_each_entry(tmp, &fwc->head, list)
     204         [ -  + ]:        404 :                 if (!strcmp(tmp->fw_name, fw_name))
     205                 :          0 :                         return tmp;
     206                 :            :         return NULL;
     207                 :            : }
     208                 :            : 
     209                 :            : /* Returns 1 for batching firmware requests with the same name */
     210                 :        808 : static int alloc_lookup_fw_priv(const char *fw_name,
     211                 :            :                                 struct firmware_cache *fwc,
     212                 :            :                                 struct fw_priv **fw_priv, void *dbuf,
     213                 :            :                                 size_t size, enum fw_opt opt_flags)
     214                 :            : {
     215                 :            :         struct fw_priv *tmp;
     216                 :            : 
     217                 :            :         spin_lock(&fwc->lock);
     218         [ +  - ]:        808 :         if (!(opt_flags & FW_OPT_NOCACHE)) {
     219                 :        808 :                 tmp = __lookup_fw_priv(fw_name);
     220         [ -  + ]:        808 :                 if (tmp) {
     221                 :            :                         kref_get(&tmp->ref);
     222                 :            :                         spin_unlock(&fwc->lock);
     223                 :          0 :                         *fw_priv = tmp;
     224                 :            :                         pr_debug("batched request - sharing the same struct fw_priv and lookup for multiple requests\n");
     225                 :          0 :                         return 1;
     226                 :            :                 }
     227                 :            :         }
     228                 :            : 
     229                 :        808 :         tmp = __allocate_fw_priv(fw_name, fwc, dbuf, size);
     230         [ +  - ]:        808 :         if (tmp) {
     231                 :        808 :                 INIT_LIST_HEAD(&tmp->list);
     232         [ +  - ]:        808 :                 if (!(opt_flags & FW_OPT_NOCACHE))
     233                 :        808 :                         list_add(&tmp->list, &fwc->head);
     234                 :            :         }
     235                 :            :         spin_unlock(&fwc->lock);
     236                 :            : 
     237                 :        808 :         *fw_priv = tmp;
     238                 :            : 
     239         [ -  + ]:        808 :         return tmp ? 0 : -ENOMEM;
     240                 :            : }
     241                 :            : 
     242                 :        808 : static void __free_fw_priv(struct kref *ref)
     243                 :            :         __releases(&fwc->lock)
     244                 :            : {
     245                 :            :         struct fw_priv *fw_priv = to_fw_priv(ref);
     246                 :        808 :         struct firmware_cache *fwc = fw_priv->fwc;
     247                 :            : 
     248                 :            :         pr_debug("%s: fw-%s fw_priv=%p data=%p size=%u\n",
     249                 :            :                  __func__, fw_priv->fw_name, fw_priv, fw_priv->data,
     250                 :            :                  (unsigned int)fw_priv->size);
     251                 :            : 
     252                 :            :         list_del(&fw_priv->list);
     253                 :            :         spin_unlock(&fwc->lock);
     254                 :            : 
     255                 :            :         fw_free_paged_buf(fw_priv); /* free leftover pages */
     256         [ +  - ]:        808 :         if (!fw_priv->allocated_size)
     257                 :        808 :                 vfree(fw_priv->data);
     258                 :        808 :         kfree_const(fw_priv->fw_name);
     259                 :        808 :         kfree(fw_priv);
     260                 :        808 : }
     261                 :            : 
     262                 :        808 : static void free_fw_priv(struct fw_priv *fw_priv)
     263                 :            : {
     264                 :        808 :         struct firmware_cache *fwc = fw_priv->fwc;
     265                 :            :         spin_lock(&fwc->lock);
     266         [ -  + ]:       1616 :         if (!kref_put(&fw_priv->ref, __free_fw_priv))
     267                 :            :                 spin_unlock(&fwc->lock);
     268                 :        808 : }
     269                 :            : 
     270                 :            : #ifdef CONFIG_FW_LOADER_PAGED_BUF
     271                 :            : void fw_free_paged_buf(struct fw_priv *fw_priv)
     272                 :            : {
     273                 :            :         int i;
     274                 :            : 
     275                 :            :         if (!fw_priv->pages)
     276                 :            :                 return;
     277                 :            : 
     278                 :            :         for (i = 0; i < fw_priv->nr_pages; i++)
     279                 :            :                 __free_page(fw_priv->pages[i]);
     280                 :            :         kvfree(fw_priv->pages);
     281                 :            :         fw_priv->pages = NULL;
     282                 :            :         fw_priv->page_array_size = 0;
     283                 :            :         fw_priv->nr_pages = 0;
     284                 :            : }
     285                 :            : 
     286                 :            : int fw_grow_paged_buf(struct fw_priv *fw_priv, int pages_needed)
     287                 :            : {
     288                 :            :         /* If the array of pages is too small, grow it */
     289                 :            :         if (fw_priv->page_array_size < pages_needed) {
     290                 :            :                 int new_array_size = max(pages_needed,
     291                 :            :                                          fw_priv->page_array_size * 2);
     292                 :            :                 struct page **new_pages;
     293                 :            : 
     294                 :            :                 new_pages = kvmalloc_array(new_array_size, sizeof(void *),
     295                 :            :                                            GFP_KERNEL);
     296                 :            :                 if (!new_pages)
     297                 :            :                         return -ENOMEM;
     298                 :            :                 memcpy(new_pages, fw_priv->pages,
     299                 :            :                        fw_priv->page_array_size * sizeof(void *));
     300                 :            :                 memset(&new_pages[fw_priv->page_array_size], 0, sizeof(void *) *
     301                 :            :                        (new_array_size - fw_priv->page_array_size));
     302                 :            :                 kvfree(fw_priv->pages);
     303                 :            :                 fw_priv->pages = new_pages;
     304                 :            :                 fw_priv->page_array_size = new_array_size;
     305                 :            :         }
     306                 :            : 
     307                 :            :         while (fw_priv->nr_pages < pages_needed) {
     308                 :            :                 fw_priv->pages[fw_priv->nr_pages] =
     309                 :            :                         alloc_page(GFP_KERNEL | __GFP_HIGHMEM);
     310                 :            : 
     311                 :            :                 if (!fw_priv->pages[fw_priv->nr_pages])
     312                 :            :                         return -ENOMEM;
     313                 :            :                 fw_priv->nr_pages++;
     314                 :            :         }
     315                 :            : 
     316                 :            :         return 0;
     317                 :            : }
     318                 :            : 
     319                 :            : int fw_map_paged_buf(struct fw_priv *fw_priv)
     320                 :            : {
     321                 :            :         /* one pages buffer should be mapped/unmapped only once */
     322                 :            :         if (!fw_priv->pages)
     323                 :            :                 return 0;
     324                 :            : 
     325                 :            :         vunmap(fw_priv->data);
     326                 :            :         fw_priv->data = vmap(fw_priv->pages, fw_priv->nr_pages, 0,
     327                 :            :                              PAGE_KERNEL_RO);
     328                 :            :         if (!fw_priv->data)
     329                 :            :                 return -ENOMEM;
     330                 :            : 
     331                 :            :         /* page table is no longer needed after mapping, let's free */
     332                 :            :         kvfree(fw_priv->pages);
     333                 :            :         fw_priv->pages = NULL;
     334                 :            : 
     335                 :            :         return 0;
     336                 :            : }
     337                 :            : #endif
     338                 :            : 
     339                 :            : /*
     340                 :            :  * XZ-compressed firmware support
     341                 :            :  */
     342                 :            : #ifdef CONFIG_FW_LOADER_COMPRESS
     343                 :            : /* show an error and return the standard error code */
     344                 :            : static int fw_decompress_xz_error(struct device *dev, enum xz_ret xz_ret)
     345                 :            : {
     346                 :            :         if (xz_ret != XZ_STREAM_END) {
     347                 :            :                 dev_warn(dev, "xz decompression failed (xz_ret=%d)\n", xz_ret);
     348                 :            :                 return xz_ret == XZ_MEM_ERROR ? -ENOMEM : -EINVAL;
     349                 :            :         }
     350                 :            :         return 0;
     351                 :            : }
     352                 :            : 
     353                 :            : /* single-shot decompression onto the pre-allocated buffer */
     354                 :            : static int fw_decompress_xz_single(struct device *dev, struct fw_priv *fw_priv,
     355                 :            :                                    size_t in_size, const void *in_buffer)
     356                 :            : {
     357                 :            :         struct xz_dec *xz_dec;
     358                 :            :         struct xz_buf xz_buf;
     359                 :            :         enum xz_ret xz_ret;
     360                 :            : 
     361                 :            :         xz_dec = xz_dec_init(XZ_SINGLE, (u32)-1);
     362                 :            :         if (!xz_dec)
     363                 :            :                 return -ENOMEM;
     364                 :            : 
     365                 :            :         xz_buf.in_size = in_size;
     366                 :            :         xz_buf.in = in_buffer;
     367                 :            :         xz_buf.in_pos = 0;
     368                 :            :         xz_buf.out_size = fw_priv->allocated_size;
     369                 :            :         xz_buf.out = fw_priv->data;
     370                 :            :         xz_buf.out_pos = 0;
     371                 :            : 
     372                 :            :         xz_ret = xz_dec_run(xz_dec, &xz_buf);
     373                 :            :         xz_dec_end(xz_dec);
     374                 :            : 
     375                 :            :         fw_priv->size = xz_buf.out_pos;
     376                 :            :         return fw_decompress_xz_error(dev, xz_ret);
     377                 :            : }
     378                 :            : 
     379                 :            : /* decompression on paged buffer and map it */
     380                 :            : static int fw_decompress_xz_pages(struct device *dev, struct fw_priv *fw_priv,
     381                 :            :                                   size_t in_size, const void *in_buffer)
     382                 :            : {
     383                 :            :         struct xz_dec *xz_dec;
     384                 :            :         struct xz_buf xz_buf;
     385                 :            :         enum xz_ret xz_ret;
     386                 :            :         struct page *page;
     387                 :            :         int err = 0;
     388                 :            : 
     389                 :            :         xz_dec = xz_dec_init(XZ_DYNALLOC, (u32)-1);
     390                 :            :         if (!xz_dec)
     391                 :            :                 return -ENOMEM;
     392                 :            : 
     393                 :            :         xz_buf.in_size = in_size;
     394                 :            :         xz_buf.in = in_buffer;
     395                 :            :         xz_buf.in_pos = 0;
     396                 :            : 
     397                 :            :         fw_priv->is_paged_buf = true;
     398                 :            :         fw_priv->size = 0;
     399                 :            :         do {
     400                 :            :                 if (fw_grow_paged_buf(fw_priv, fw_priv->nr_pages + 1)) {
     401                 :            :                         err = -ENOMEM;
     402                 :            :                         goto out;
     403                 :            :                 }
     404                 :            : 
     405                 :            :                 /* decompress onto the new allocated page */
     406                 :            :                 page = fw_priv->pages[fw_priv->nr_pages - 1];
     407                 :            :                 xz_buf.out = kmap(page);
     408                 :            :                 xz_buf.out_pos = 0;
     409                 :            :                 xz_buf.out_size = PAGE_SIZE;
     410                 :            :                 xz_ret = xz_dec_run(xz_dec, &xz_buf);
     411                 :            :                 kunmap(page);
     412                 :            :                 fw_priv->size += xz_buf.out_pos;
     413                 :            :                 /* partial decompression means either end or error */
     414                 :            :                 if (xz_buf.out_pos != PAGE_SIZE)
     415                 :            :                         break;
     416                 :            :         } while (xz_ret == XZ_OK);
     417                 :            : 
     418                 :            :         err = fw_decompress_xz_error(dev, xz_ret);
     419                 :            :         if (!err)
     420                 :            :                 err = fw_map_paged_buf(fw_priv);
     421                 :            : 
     422                 :            :  out:
     423                 :            :         xz_dec_end(xz_dec);
     424                 :            :         return err;
     425                 :            : }
     426                 :            : 
     427                 :            : static int fw_decompress_xz(struct device *dev, struct fw_priv *fw_priv,
     428                 :            :                             size_t in_size, const void *in_buffer)
     429                 :            : {
     430                 :            :         /* if the buffer is pre-allocated, we can perform in single-shot mode */
     431                 :            :         if (fw_priv->data)
     432                 :            :                 return fw_decompress_xz_single(dev, fw_priv, in_size, in_buffer);
     433                 :            :         else
     434                 :            :                 return fw_decompress_xz_pages(dev, fw_priv, in_size, in_buffer);
     435                 :            : }
     436                 :            : #endif /* CONFIG_FW_LOADER_COMPRESS */
     437                 :            : 
     438                 :            : /* direct firmware loading support */
     439                 :            : static char fw_path_para[256];
     440                 :            : static const char * const fw_path[] = {
     441                 :            :         fw_path_para,
     442                 :            :         "/lib/firmware/updates/" UTS_RELEASE,
     443                 :            :         "/lib/firmware/updates",
     444                 :            :         "/lib/firmware/" UTS_RELEASE,
     445                 :            :         "/lib/firmware"
     446                 :            : };
     447                 :            : 
     448                 :            : /*
     449                 :            :  * Typical usage is that passing 'firmware_class.path=$CUSTOMIZED_PATH'
     450                 :            :  * from kernel command line because firmware_class is generally built in
     451                 :            :  * kernel instead of module.
     452                 :            :  */
     453                 :            : module_param_string(path, fw_path_para, sizeof(fw_path_para), 0644);
     454                 :            : MODULE_PARM_DESC(path, "customized firmware image search path with a higher priority than default path");
     455                 :            : 
     456                 :            : static int
     457                 :        808 : fw_get_filesystem_firmware(struct device *device, struct fw_priv *fw_priv,
     458                 :            :                            const char *suffix,
     459                 :            :                            int (*decompress)(struct device *dev,
     460                 :            :                                              struct fw_priv *fw_priv,
     461                 :            :                                              size_t in_size,
     462                 :            :                                              const void *in_buffer))
     463                 :            : {
     464                 :            :         loff_t size;
     465                 :            :         int i, len;
     466                 :            :         int rc = -ENOENT;
     467                 :            :         char *path;
     468                 :            :         enum kernel_read_file_id id = READING_FIRMWARE;
     469                 :            :         size_t msize = INT_MAX;
     470                 :        808 :         void *buffer = NULL;
     471                 :            : 
     472                 :            :         /* Already populated data member means we're loading into a buffer */
     473   [ +  -  -  + ]:        808 :         if (!decompress && fw_priv->data) {
     474                 :          0 :                 buffer = fw_priv->data;
     475                 :            :                 id = READING_FIRMWARE_PREALLOC_BUFFER;
     476                 :          0 :                 msize = fw_priv->allocated_size;
     477                 :            :         }
     478                 :            : 
     479                 :        808 :         path = __getname();
     480         [ +  - ]:        808 :         if (!path)
     481                 :            :                 return -ENOMEM;
     482                 :            : 
     483         [ +  - ]:       3232 :         for (i = 0; i < ARRAY_SIZE(fw_path); i++) {
     484                 :            :                 /* skip the unset customized path */
     485         [ +  + ]:       4040 :                 if (!fw_path[i][0])
     486                 :        808 :                         continue;
     487                 :            : 
     488                 :       3232 :                 len = snprintf(path, PATH_MAX, "%s/%s%s",
     489                 :            :                                fw_path[i], fw_priv->fw_name, suffix);
     490         [ +  - ]:       3232 :                 if (len >= PATH_MAX) {
     491                 :            :                         rc = -ENAMETOOLONG;
     492                 :            :                         break;
     493                 :            :                 }
     494                 :            : 
     495                 :       3232 :                 fw_priv->size = 0;
     496                 :       3232 :                 rc = kernel_read_file_from_path(path, &buffer, &size,
     497                 :            :                                                 msize, id);
     498         [ +  + ]:       3232 :                 if (rc) {
     499         [ -  + ]:       2424 :                         if (rc != -ENOENT)
     500                 :          0 :                                 dev_warn(device, "loading %s failed with error %d\n",
     501                 :            :                                          path, rc);
     502                 :            :                         else
     503                 :            :                                 dev_dbg(device, "loading %s failed for no such file or directory.\n",
     504                 :            :                                          path);
     505                 :       2424 :                         continue;
     506                 :            :                 }
     507         [ -  + ]:        808 :                 if (decompress) {
     508                 :            :                         dev_dbg(device, "f/w decompressing %s\n",
     509                 :            :                                 fw_priv->fw_name);
     510                 :          0 :                         rc = decompress(device, fw_priv, size, buffer);
     511                 :            :                         /* discard the superfluous original content */
     512                 :          0 :                         vfree(buffer);
     513                 :          0 :                         buffer = NULL;
     514         [ #  # ]:          0 :                         if (rc) {
     515                 :            :                                 fw_free_paged_buf(fw_priv);
     516                 :          0 :                                 continue;
     517                 :            :                         }
     518                 :            :                 } else {
     519                 :            :                         dev_dbg(device, "direct-loading %s\n",
     520                 :            :                                 fw_priv->fw_name);
     521         [ +  - ]:        808 :                         if (!fw_priv->data)
     522                 :        808 :                                 fw_priv->data = buffer;
     523                 :        808 :                         fw_priv->size = size;
     524                 :            :                 }
     525                 :            :                 fw_state_done(fw_priv);
     526                 :            :                 break;
     527                 :            :         }
     528                 :        808 :         __putname(path);
     529                 :            : 
     530                 :        808 :         return rc;
     531                 :            : }
     532                 :            : 
     533                 :            : /* firmware holds the ownership of pages */
     534                 :        808 : static void firmware_free_data(const struct firmware *fw)
     535                 :            : {
     536                 :            :         /* Loaded directly? */
     537         [ -  + ]:        808 :         if (!fw->priv) {
     538                 :          0 :                 vfree(fw->data);
     539                 :        808 :                 return;
     540                 :            :         }
     541                 :        808 :         free_fw_priv(fw->priv);
     542                 :            : }
     543                 :            : 
     544                 :            : /* store the pages buffer info firmware from buf */
     545                 :            : static void fw_set_page_data(struct fw_priv *fw_priv, struct firmware *fw)
     546                 :            : {
     547                 :        808 :         fw->priv = fw_priv;
     548                 :            : #ifdef CONFIG_FW_LOADER_USER_HELPER
     549                 :            :         fw->pages = fw_priv->pages;
     550                 :            : #endif
     551                 :        808 :         fw->size = fw_priv->size;
     552                 :        808 :         fw->data = fw_priv->data;
     553                 :            : 
     554                 :            :         pr_debug("%s: fw-%s fw_priv=%p data=%p size=%u\n",
     555                 :            :                  __func__, fw_priv->fw_name, fw_priv, fw_priv->data,
     556                 :            :                  (unsigned int)fw_priv->size);
     557                 :            : }
     558                 :            : 
     559                 :            : #ifdef CONFIG_PM_SLEEP
     560                 :            : static void fw_name_devm_release(struct device *dev, void *res)
     561                 :            : {
     562                 :            :         struct fw_name_devm *fwn = res;
     563                 :            : 
     564                 :            :         if (fwn->magic == (unsigned long)&fw_cache)
     565                 :            :                 pr_debug("%s: fw_name-%s devm-%p released\n",
     566                 :            :                                 __func__, fwn->name, res);
     567                 :            :         kfree_const(fwn->name);
     568                 :            : }
     569                 :            : 
     570                 :            : static int fw_devm_match(struct device *dev, void *res,
     571                 :            :                 void *match_data)
     572                 :            : {
     573                 :            :         struct fw_name_devm *fwn = res;
     574                 :            : 
     575                 :            :         return (fwn->magic == (unsigned long)&fw_cache) &&
     576                 :            :                 !strcmp(fwn->name, match_data);
     577                 :            : }
     578                 :            : 
     579                 :            : static struct fw_name_devm *fw_find_devm_name(struct device *dev,
     580                 :            :                 const char *name)
     581                 :            : {
     582                 :            :         struct fw_name_devm *fwn;
     583                 :            : 
     584                 :            :         fwn = devres_find(dev, fw_name_devm_release,
     585                 :            :                           fw_devm_match, (void *)name);
     586                 :            :         return fwn;
     587                 :            : }
     588                 :            : 
     589                 :            : static bool fw_cache_is_setup(struct device *dev, const char *name)
     590                 :            : {
     591                 :            :         struct fw_name_devm *fwn;
     592                 :            : 
     593                 :            :         fwn = fw_find_devm_name(dev, name);
     594                 :            :         if (fwn)
     595                 :            :                 return true;
     596                 :            : 
     597                 :            :         return false;
     598                 :            : }
     599                 :            : 
     600                 :            : /* add firmware name into devres list */
     601                 :            : static int fw_add_devm_name(struct device *dev, const char *name)
     602                 :            : {
     603                 :            :         struct fw_name_devm *fwn;
     604                 :            : 
     605                 :            :         if (fw_cache_is_setup(dev, name))
     606                 :            :                 return 0;
     607                 :            : 
     608                 :            :         fwn = devres_alloc(fw_name_devm_release, sizeof(struct fw_name_devm),
     609                 :            :                            GFP_KERNEL);
     610                 :            :         if (!fwn)
     611                 :            :                 return -ENOMEM;
     612                 :            :         fwn->name = kstrdup_const(name, GFP_KERNEL);
     613                 :            :         if (!fwn->name) {
     614                 :            :                 devres_free(fwn);
     615                 :            :                 return -ENOMEM;
     616                 :            :         }
     617                 :            : 
     618                 :            :         fwn->magic = (unsigned long)&fw_cache;
     619                 :            :         devres_add(dev, fwn);
     620                 :            : 
     621                 :            :         return 0;
     622                 :            : }
     623                 :            : #else
     624                 :            : static bool fw_cache_is_setup(struct device *dev, const char *name)
     625                 :            : {
     626                 :            :         return false;
     627                 :            : }
     628                 :            : 
     629                 :            : static int fw_add_devm_name(struct device *dev, const char *name)
     630                 :            : {
     631                 :            :         return 0;
     632                 :            : }
     633                 :            : #endif
     634                 :            : 
     635                 :        808 : int assign_fw(struct firmware *fw, struct device *device,
     636                 :            :               enum fw_opt opt_flags)
     637                 :            : {
     638                 :        808 :         struct fw_priv *fw_priv = fw->priv;
     639                 :            :         int ret;
     640                 :            : 
     641                 :        808 :         mutex_lock(&fw_lock);
     642   [ +  -  -  + ]:       1616 :         if (!fw_priv->size || fw_state_is_aborted(fw_priv)) {
     643                 :          0 :                 mutex_unlock(&fw_lock);
     644                 :          0 :                 return -ENOENT;
     645                 :            :         }
     646                 :            : 
     647                 :            :         /*
     648                 :            :          * add firmware name into devres list so that we can auto cache
     649                 :            :          * and uncache firmware for device.
     650                 :            :          *
     651                 :            :          * device may has been deleted already, but the problem
     652                 :            :          * should be fixed in devres or driver core.
     653                 :            :          */
     654                 :            :         /* don't cache firmware handled without uevent */
     655                 :            :         if (device && (opt_flags & FW_OPT_UEVENT) &&
     656                 :            :             !(opt_flags & FW_OPT_NOCACHE)) {
     657                 :            :                 ret = fw_add_devm_name(device, fw_priv->fw_name);
     658                 :            :                 if (ret) {
     659                 :            :                         mutex_unlock(&fw_lock);
     660                 :            :                         return ret;
     661                 :            :                 }
     662                 :            :         }
     663                 :            : 
     664                 :            :         /*
     665                 :            :          * After caching firmware image is started, let it piggyback
     666                 :            :          * on request firmware.
     667                 :            :          */
     668                 :            :         if (!(opt_flags & FW_OPT_NOCACHE) &&
     669                 :            :             fw_priv->fwc->state == FW_LOADER_START_CACHE) {
     670                 :            :                 if (fw_cache_piggyback_on_request(fw_priv->fw_name))
     671                 :            :                         kref_get(&fw_priv->ref);
     672                 :            :         }
     673                 :            : 
     674                 :            :         /* pass the pages buffer to driver at the last minute */
     675                 :            :         fw_set_page_data(fw_priv, fw);
     676                 :        808 :         mutex_unlock(&fw_lock);
     677                 :        808 :         return 0;
     678                 :            : }
     679                 :            : 
     680                 :            : /* prepare firmware and firmware_buf structs;
     681                 :            :  * return 0 if a firmware is already assigned, 1 if need to load one,
     682                 :            :  * or a negative error code
     683                 :            :  */
     684                 :            : static int
     685                 :        808 : _request_firmware_prepare(struct firmware **firmware_p, const char *name,
     686                 :            :                           struct device *device, void *dbuf, size_t size,
     687                 :            :                           enum fw_opt opt_flags)
     688                 :            : {
     689                 :            :         struct firmware *firmware;
     690                 :            :         struct fw_priv *fw_priv;
     691                 :            :         int ret;
     692                 :            : 
     693                 :        808 :         *firmware_p = firmware = kzalloc(sizeof(*firmware), GFP_KERNEL);
     694         [ -  + ]:        808 :         if (!firmware) {
     695                 :          0 :                 dev_err(device, "%s: kmalloc(struct firmware) failed\n",
     696                 :            :                         __func__);
     697                 :          0 :                 return -ENOMEM;
     698                 :            :         }
     699                 :            : 
     700         [ +  - ]:        808 :         if (fw_get_builtin_firmware(firmware, name, dbuf, size)) {
     701                 :            :                 dev_dbg(device, "using built-in %s\n", name);
     702                 :            :                 return 0; /* assigned */
     703                 :            :         }
     704                 :            : 
     705                 :        808 :         ret = alloc_lookup_fw_priv(name, &fw_cache, &fw_priv, dbuf, size,
     706                 :            :                                   opt_flags);
     707                 :            : 
     708                 :            :         /*
     709                 :            :          * bind with 'priv' now to avoid warning in failure path
     710                 :            :          * of requesting firmware.
     711                 :            :          */
     712                 :        808 :         firmware->priv = fw_priv;
     713                 :            : 
     714         [ -  + ]:        808 :         if (ret > 0) {
     715                 :            :                 ret = fw_state_wait(fw_priv);
     716         [ #  # ]:          0 :                 if (!ret) {
     717                 :          0 :                         fw_set_page_data(fw_priv, firmware);
     718                 :          0 :                         return 0; /* assigned */
     719                 :            :                 }
     720                 :            :         }
     721                 :            : 
     722         [ -  + ]:        808 :         if (ret < 0)
     723                 :          0 :                 return ret;
     724                 :            :         return 1; /* need to load */
     725                 :            : }
     726                 :            : 
     727                 :            : /*
     728                 :            :  * Batched requests need only one wake, we need to do this step last due to the
     729                 :            :  * fallback mechanism. The buf is protected with kref_get(), and it won't be
     730                 :            :  * released until the last user calls release_firmware().
     731                 :            :  *
     732                 :            :  * Failed batched requests are possible as well, in such cases we just share
     733                 :            :  * the struct fw_priv and won't release it until all requests are woken
     734                 :            :  * and have gone through this same path.
     735                 :            :  */
     736                 :          0 : static void fw_abort_batch_reqs(struct firmware *fw)
     737                 :            : {
     738                 :            :         struct fw_priv *fw_priv;
     739                 :            : 
     740                 :            :         /* Loaded directly? */
     741   [ #  #  #  # ]:          0 :         if (!fw || !fw->priv)
     742                 :          0 :                 return;
     743                 :            : 
     744                 :            :         fw_priv = fw->priv;
     745         [ #  # ]:          0 :         if (!fw_state_is_aborted(fw_priv))
     746                 :            :                 fw_state_aborted(fw_priv);
     747                 :            : }
     748                 :            : 
     749                 :            : /* called from request_firmware() and request_firmware_work_func() */
     750                 :            : static int
     751                 :        808 : _request_firmware(const struct firmware **firmware_p, const char *name,
     752                 :            :                   struct device *device, void *buf, size_t size,
     753                 :            :                   enum fw_opt opt_flags)
     754                 :            : {
     755                 :        808 :         struct firmware *fw = NULL;
     756                 :            :         int ret;
     757                 :            : 
     758         [ +  - ]:        808 :         if (!firmware_p)
     759                 :            :                 return -EINVAL;
     760                 :            : 
     761   [ +  -  +  - ]:        808 :         if (!name || name[0] == '\0') {
     762                 :            :                 ret = -EINVAL;
     763                 :            :                 goto out;
     764                 :            :         }
     765                 :            : 
     766                 :        808 :         ret = _request_firmware_prepare(&fw, name, device, buf, size,
     767                 :            :                                         opt_flags);
     768         [ +  - ]:        808 :         if (ret <= 0) /* error or already assigned */
     769                 :            :                 goto out;
     770                 :            : 
     771                 :        808 :         ret = fw_get_filesystem_firmware(device, fw->priv, "", NULL);
     772                 :            : #ifdef CONFIG_FW_LOADER_COMPRESS
     773                 :            :         if (ret == -ENOENT)
     774                 :            :                 ret = fw_get_filesystem_firmware(device, fw->priv, ".xz",
     775                 :            :                                                  fw_decompress_xz);
     776                 :            : #endif
     777                 :            : 
     778         [ -  + ]:        808 :         if (ret) {
     779         [ #  # ]:          0 :                 if (!(opt_flags & FW_OPT_NO_WARN))
     780                 :          0 :                         dev_warn(device,
     781                 :            :                                  "Direct firmware load for %s failed with error %d\n",
     782                 :            :                                  name, ret);
     783                 :            :                 ret = firmware_fallback_sysfs(fw, name, device, opt_flags, ret);
     784                 :            :         } else
     785                 :        808 :                 ret = assign_fw(fw, device, opt_flags);
     786                 :            : 
     787                 :            :  out:
     788         [ -  + ]:        808 :         if (ret < 0) {
     789                 :          0 :                 fw_abort_batch_reqs(fw);
     790                 :          0 :                 release_firmware(fw);
     791                 :          0 :                 fw = NULL;
     792                 :            :         }
     793                 :            : 
     794                 :        808 :         *firmware_p = fw;
     795                 :        808 :         return ret;
     796                 :            : }
     797                 :            : 
     798                 :            : /**
     799                 :            :  * request_firmware() - send firmware request and wait for it
     800                 :            :  * @firmware_p: pointer to firmware image
     801                 :            :  * @name: name of firmware file
     802                 :            :  * @device: device for which firmware is being loaded
     803                 :            :  *
     804                 :            :  *      @firmware_p will be used to return a firmware image by the name
     805                 :            :  *      of @name for device @device.
     806                 :            :  *
     807                 :            :  *      Should be called from user context where sleeping is allowed.
     808                 :            :  *
     809                 :            :  *      @name will be used as $FIRMWARE in the uevent environment and
     810                 :            :  *      should be distinctive enough not to be confused with any other
     811                 :            :  *      firmware image for this or any other device.
     812                 :            :  *
     813                 :            :  *      Caller must hold the reference count of @device.
     814                 :            :  *
     815                 :            :  *      The function can be called safely inside device's suspend and
     816                 :            :  *      resume callback.
     817                 :            :  **/
     818                 :            : int
     819                 :        404 : request_firmware(const struct firmware **firmware_p, const char *name,
     820                 :            :                  struct device *device)
     821                 :            : {
     822                 :            :         int ret;
     823                 :            : 
     824                 :            :         /* Need to pin this module until return */
     825                 :        404 :         __module_get(THIS_MODULE);
     826                 :        404 :         ret = _request_firmware(firmware_p, name, device, NULL, 0,
     827                 :            :                                 FW_OPT_UEVENT);
     828                 :        404 :         module_put(THIS_MODULE);
     829                 :        404 :         return ret;
     830                 :            : }
     831                 :            : EXPORT_SYMBOL(request_firmware);
     832                 :            : 
     833                 :            : /**
     834                 :            :  * firmware_request_nowarn() - request for an optional fw module
     835                 :            :  * @firmware: pointer to firmware image
     836                 :            :  * @name: name of firmware file
     837                 :            :  * @device: device for which firmware is being loaded
     838                 :            :  *
     839                 :            :  * This function is similar in behaviour to request_firmware(), except
     840                 :            :  * it doesn't produce warning messages when the file is not found.
     841                 :            :  * The sysfs fallback mechanism is enabled if direct filesystem lookup fails,
     842                 :            :  * however, however failures to find the firmware file with it are still
     843                 :            :  * suppressed. It is therefore up to the driver to check for the return value
     844                 :            :  * of this call and to decide when to inform the users of errors.
     845                 :            :  **/
     846                 :          0 : int firmware_request_nowarn(const struct firmware **firmware, const char *name,
     847                 :            :                             struct device *device)
     848                 :            : {
     849                 :            :         int ret;
     850                 :            : 
     851                 :            :         /* Need to pin this module until return */
     852                 :          0 :         __module_get(THIS_MODULE);
     853                 :          0 :         ret = _request_firmware(firmware, name, device, NULL, 0,
     854                 :            :                                 FW_OPT_UEVENT | FW_OPT_NO_WARN);
     855                 :          0 :         module_put(THIS_MODULE);
     856                 :          0 :         return ret;
     857                 :            : }
     858                 :            : EXPORT_SYMBOL_GPL(firmware_request_nowarn);
     859                 :            : 
     860                 :            : /**
     861                 :            :  * request_firmware_direct() - load firmware directly without usermode helper
     862                 :            :  * @firmware_p: pointer to firmware image
     863                 :            :  * @name: name of firmware file
     864                 :            :  * @device: device for which firmware is being loaded
     865                 :            :  *
     866                 :            :  * This function works pretty much like request_firmware(), but this doesn't
     867                 :            :  * fall back to usermode helper even if the firmware couldn't be loaded
     868                 :            :  * directly from fs.  Hence it's useful for loading optional firmwares, which
     869                 :            :  * aren't always present, without extra long timeouts of udev.
     870                 :            :  **/
     871                 :          0 : int request_firmware_direct(const struct firmware **firmware_p,
     872                 :            :                             const char *name, struct device *device)
     873                 :            : {
     874                 :            :         int ret;
     875                 :            : 
     876                 :          0 :         __module_get(THIS_MODULE);
     877                 :          0 :         ret = _request_firmware(firmware_p, name, device, NULL, 0,
     878                 :            :                                 FW_OPT_UEVENT | FW_OPT_NO_WARN |
     879                 :            :                                 FW_OPT_NOFALLBACK);
     880                 :          0 :         module_put(THIS_MODULE);
     881                 :          0 :         return ret;
     882                 :            : }
     883                 :            : EXPORT_SYMBOL_GPL(request_firmware_direct);
     884                 :            : 
     885                 :            : /**
     886                 :            :  * firmware_request_cache() - cache firmware for suspend so resume can use it
     887                 :            :  * @name: name of firmware file
     888                 :            :  * @device: device for which firmware should be cached for
     889                 :            :  *
     890                 :            :  * There are some devices with an optimization that enables the device to not
     891                 :            :  * require loading firmware on system reboot. This optimization may still
     892                 :            :  * require the firmware present on resume from suspend. This routine can be
     893                 :            :  * used to ensure the firmware is present on resume from suspend in these
     894                 :            :  * situations. This helper is not compatible with drivers which use
     895                 :            :  * request_firmware_into_buf() or request_firmware_nowait() with no uevent set.
     896                 :            :  **/
     897                 :          0 : int firmware_request_cache(struct device *device, const char *name)
     898                 :            : {
     899                 :            :         int ret;
     900                 :            : 
     901                 :          0 :         mutex_lock(&fw_lock);
     902                 :            :         ret = fw_add_devm_name(device, name);
     903                 :          0 :         mutex_unlock(&fw_lock);
     904                 :            : 
     905                 :          0 :         return ret;
     906                 :            : }
     907                 :            : EXPORT_SYMBOL_GPL(firmware_request_cache);
     908                 :            : 
     909                 :            : /**
     910                 :            :  * request_firmware_into_buf() - load firmware into a previously allocated buffer
     911                 :            :  * @firmware_p: pointer to firmware image
     912                 :            :  * @name: name of firmware file
     913                 :            :  * @device: device for which firmware is being loaded and DMA region allocated
     914                 :            :  * @buf: address of buffer to load firmware into
     915                 :            :  * @size: size of buffer
     916                 :            :  *
     917                 :            :  * This function works pretty much like request_firmware(), but it doesn't
     918                 :            :  * allocate a buffer to hold the firmware data. Instead, the firmware
     919                 :            :  * is loaded directly into the buffer pointed to by @buf and the @firmware_p
     920                 :            :  * data member is pointed at @buf.
     921                 :            :  *
     922                 :            :  * This function doesn't cache firmware either.
     923                 :            :  */
     924                 :            : int
     925                 :          0 : request_firmware_into_buf(const struct firmware **firmware_p, const char *name,
     926                 :            :                           struct device *device, void *buf, size_t size)
     927                 :            : {
     928                 :            :         int ret;
     929                 :            : 
     930                 :            :         if (fw_cache_is_setup(device, name))
     931                 :            :                 return -EOPNOTSUPP;
     932                 :            : 
     933                 :          0 :         __module_get(THIS_MODULE);
     934                 :          0 :         ret = _request_firmware(firmware_p, name, device, buf, size,
     935                 :            :                                 FW_OPT_UEVENT | FW_OPT_NOCACHE);
     936                 :          0 :         module_put(THIS_MODULE);
     937                 :            :         return ret;
     938                 :            : }
     939                 :            : EXPORT_SYMBOL(request_firmware_into_buf);
     940                 :            : 
     941                 :            : /**
     942                 :            :  * release_firmware() - release the resource associated with a firmware image
     943                 :            :  * @fw: firmware resource to release
     944                 :            :  **/
     945                 :        808 : void release_firmware(const struct firmware *fw)
     946                 :            : {
     947         [ +  - ]:        808 :         if (fw) {
     948         [ +  - ]:        808 :                 if (!fw_is_builtin_firmware(fw))
     949                 :        808 :                         firmware_free_data(fw);
     950                 :        808 :                 kfree(fw);
     951                 :            :         }
     952                 :        808 : }
     953                 :            : EXPORT_SYMBOL(release_firmware);
     954                 :            : 
     955                 :            : /* Async support */
     956                 :            : struct firmware_work {
     957                 :            :         struct work_struct work;
     958                 :            :         struct module *module;
     959                 :            :         const char *name;
     960                 :            :         struct device *device;
     961                 :            :         void *context;
     962                 :            :         void (*cont)(const struct firmware *fw, void *context);
     963                 :            :         enum fw_opt opt_flags;
     964                 :            : };
     965                 :            : 
     966                 :        404 : static void request_firmware_work_func(struct work_struct *work)
     967                 :            : {
     968                 :            :         struct firmware_work *fw_work;
     969                 :            :         const struct firmware *fw;
     970                 :            : 
     971                 :            :         fw_work = container_of(work, struct firmware_work, work);
     972                 :            : 
     973                 :        404 :         _request_firmware(&fw, fw_work->name, fw_work->device, NULL, 0,
     974                 :            :                           fw_work->opt_flags);
     975                 :        404 :         fw_work->cont(fw, fw_work->context);
     976                 :        404 :         put_device(fw_work->device); /* taken in request_firmware_nowait() */
     977                 :            : 
     978                 :        404 :         module_put(fw_work->module);
     979                 :        404 :         kfree_const(fw_work->name);
     980                 :        404 :         kfree(fw_work);
     981                 :        404 : }
     982                 :            : 
     983                 :            : /**
     984                 :            :  * request_firmware_nowait() - asynchronous version of request_firmware
     985                 :            :  * @module: module requesting the firmware
     986                 :            :  * @uevent: sends uevent to copy the firmware image if this flag
     987                 :            :  *      is non-zero else the firmware copy must be done manually.
     988                 :            :  * @name: name of firmware file
     989                 :            :  * @device: device for which firmware is being loaded
     990                 :            :  * @gfp: allocation flags
     991                 :            :  * @context: will be passed over to @cont, and
     992                 :            :  *      @fw may be %NULL if firmware request fails.
     993                 :            :  * @cont: function will be called asynchronously when the firmware
     994                 :            :  *      request is over.
     995                 :            :  *
     996                 :            :  *      Caller must hold the reference count of @device.
     997                 :            :  *
     998                 :            :  *      Asynchronous variant of request_firmware() for user contexts:
     999                 :            :  *              - sleep for as small periods as possible since it may
    1000                 :            :  *                increase kernel boot time of built-in device drivers
    1001                 :            :  *                requesting firmware in their ->probe() methods, if
    1002                 :            :  *                @gfp is GFP_KERNEL.
    1003                 :            :  *
    1004                 :            :  *              - can't sleep at all if @gfp is GFP_ATOMIC.
    1005                 :            :  **/
    1006                 :            : int
    1007                 :        404 : request_firmware_nowait(
    1008                 :            :         struct module *module, bool uevent,
    1009                 :            :         const char *name, struct device *device, gfp_t gfp, void *context,
    1010                 :            :         void (*cont)(const struct firmware *fw, void *context))
    1011                 :            : {
    1012                 :            :         struct firmware_work *fw_work;
    1013                 :            : 
    1014                 :        404 :         fw_work = kzalloc(sizeof(struct firmware_work), gfp);
    1015         [ +  - ]:        404 :         if (!fw_work)
    1016                 :            :                 return -ENOMEM;
    1017                 :            : 
    1018                 :        404 :         fw_work->module = module;
    1019                 :        404 :         fw_work->name = kstrdup_const(name, gfp);
    1020         [ -  + ]:        404 :         if (!fw_work->name) {
    1021                 :          0 :                 kfree(fw_work);
    1022                 :          0 :                 return -ENOMEM;
    1023                 :            :         }
    1024                 :        404 :         fw_work->device = device;
    1025                 :        404 :         fw_work->context = context;
    1026                 :        404 :         fw_work->cont = cont;
    1027         [ -  + ]:        404 :         fw_work->opt_flags = FW_OPT_NOWAIT |
    1028                 :            :                 (uevent ? FW_OPT_UEVENT : FW_OPT_USERHELPER);
    1029                 :            : 
    1030                 :            :         if (!uevent && fw_cache_is_setup(device, name)) {
    1031                 :            :                 kfree_const(fw_work->name);
    1032                 :            :                 kfree(fw_work);
    1033                 :            :                 return -EOPNOTSUPP;
    1034                 :            :         }
    1035                 :            : 
    1036         [ -  + ]:        404 :         if (!try_module_get(module)) {
    1037                 :          0 :                 kfree_const(fw_work->name);
    1038                 :          0 :                 kfree(fw_work);
    1039                 :          0 :                 return -EFAULT;
    1040                 :            :         }
    1041                 :            : 
    1042                 :        404 :         get_device(fw_work->device);
    1043                 :        808 :         INIT_WORK(&fw_work->work, request_firmware_work_func);
    1044                 :        404 :         schedule_work(&fw_work->work);
    1045                 :        404 :         return 0;
    1046                 :            : }
    1047                 :            : EXPORT_SYMBOL(request_firmware_nowait);
    1048                 :            : 
    1049                 :            : #ifdef CONFIG_PM_SLEEP
    1050                 :            : static ASYNC_DOMAIN_EXCLUSIVE(fw_cache_domain);
    1051                 :            : 
    1052                 :            : /**
    1053                 :            :  * cache_firmware() - cache one firmware image in kernel memory space
    1054                 :            :  * @fw_name: the firmware image name
    1055                 :            :  *
    1056                 :            :  * Cache firmware in kernel memory so that drivers can use it when
    1057                 :            :  * system isn't ready for them to request firmware image from userspace.
    1058                 :            :  * Once it returns successfully, driver can use request_firmware or its
    1059                 :            :  * nowait version to get the cached firmware without any interacting
    1060                 :            :  * with userspace
    1061                 :            :  *
    1062                 :            :  * Return 0 if the firmware image has been cached successfully
    1063                 :            :  * Return !0 otherwise
    1064                 :            :  *
    1065                 :            :  */
    1066                 :            : static int cache_firmware(const char *fw_name)
    1067                 :            : {
    1068                 :            :         int ret;
    1069                 :            :         const struct firmware *fw;
    1070                 :            : 
    1071                 :            :         pr_debug("%s: %s\n", __func__, fw_name);
    1072                 :            : 
    1073                 :            :         ret = request_firmware(&fw, fw_name, NULL);
    1074                 :            :         if (!ret)
    1075                 :            :                 kfree(fw);
    1076                 :            : 
    1077                 :            :         pr_debug("%s: %s ret=%d\n", __func__, fw_name, ret);
    1078                 :            : 
    1079                 :            :         return ret;
    1080                 :            : }
    1081                 :            : 
    1082                 :            : static struct fw_priv *lookup_fw_priv(const char *fw_name)
    1083                 :            : {
    1084                 :            :         struct fw_priv *tmp;
    1085                 :            :         struct firmware_cache *fwc = &fw_cache;
    1086                 :            : 
    1087                 :            :         spin_lock(&fwc->lock);
    1088                 :            :         tmp = __lookup_fw_priv(fw_name);
    1089                 :            :         spin_unlock(&fwc->lock);
    1090                 :            : 
    1091                 :            :         return tmp;
    1092                 :            : }
    1093                 :            : 
    1094                 :            : /**
    1095                 :            :  * uncache_firmware() - remove one cached firmware image
    1096                 :            :  * @fw_name: the firmware image name
    1097                 :            :  *
    1098                 :            :  * Uncache one firmware image which has been cached successfully
    1099                 :            :  * before.
    1100                 :            :  *
    1101                 :            :  * Return 0 if the firmware cache has been removed successfully
    1102                 :            :  * Return !0 otherwise
    1103                 :            :  *
    1104                 :            :  */
    1105                 :            : static int uncache_firmware(const char *fw_name)
    1106                 :            : {
    1107                 :            :         struct fw_priv *fw_priv;
    1108                 :            :         struct firmware fw;
    1109                 :            : 
    1110                 :            :         pr_debug("%s: %s\n", __func__, fw_name);
    1111                 :            : 
    1112                 :            :         if (fw_get_builtin_firmware(&fw, fw_name, NULL, 0))
    1113                 :            :                 return 0;
    1114                 :            : 
    1115                 :            :         fw_priv = lookup_fw_priv(fw_name);
    1116                 :            :         if (fw_priv) {
    1117                 :            :                 free_fw_priv(fw_priv);
    1118                 :            :                 return 0;
    1119                 :            :         }
    1120                 :            : 
    1121                 :            :         return -EINVAL;
    1122                 :            : }
    1123                 :            : 
    1124                 :            : static struct fw_cache_entry *alloc_fw_cache_entry(const char *name)
    1125                 :            : {
    1126                 :            :         struct fw_cache_entry *fce;
    1127                 :            : 
    1128                 :            :         fce = kzalloc(sizeof(*fce), GFP_ATOMIC);
    1129                 :            :         if (!fce)
    1130                 :            :                 goto exit;
    1131                 :            : 
    1132                 :            :         fce->name = kstrdup_const(name, GFP_ATOMIC);
    1133                 :            :         if (!fce->name) {
    1134                 :            :                 kfree(fce);
    1135                 :            :                 fce = NULL;
    1136                 :            :                 goto exit;
    1137                 :            :         }
    1138                 :            : exit:
    1139                 :            :         return fce;
    1140                 :            : }
    1141                 :            : 
    1142                 :            : static int __fw_entry_found(const char *name)
    1143                 :            : {
    1144                 :            :         struct firmware_cache *fwc = &fw_cache;
    1145                 :            :         struct fw_cache_entry *fce;
    1146                 :            : 
    1147                 :            :         list_for_each_entry(fce, &fwc->fw_names, list) {
    1148                 :            :                 if (!strcmp(fce->name, name))
    1149                 :            :                         return 1;
    1150                 :            :         }
    1151                 :            :         return 0;
    1152                 :            : }
    1153                 :            : 
    1154                 :            : static int fw_cache_piggyback_on_request(const char *name)
    1155                 :            : {
    1156                 :            :         struct firmware_cache *fwc = &fw_cache;
    1157                 :            :         struct fw_cache_entry *fce;
    1158                 :            :         int ret = 0;
    1159                 :            : 
    1160                 :            :         spin_lock(&fwc->name_lock);
    1161                 :            :         if (__fw_entry_found(name))
    1162                 :            :                 goto found;
    1163                 :            : 
    1164                 :            :         fce = alloc_fw_cache_entry(name);
    1165                 :            :         if (fce) {
    1166                 :            :                 ret = 1;
    1167                 :            :                 list_add(&fce->list, &fwc->fw_names);
    1168                 :            :                 pr_debug("%s: fw: %s\n", __func__, name);
    1169                 :            :         }
    1170                 :            : found:
    1171                 :            :         spin_unlock(&fwc->name_lock);
    1172                 :            :         return ret;
    1173                 :            : }
    1174                 :            : 
    1175                 :            : static void free_fw_cache_entry(struct fw_cache_entry *fce)
    1176                 :            : {
    1177                 :            :         kfree_const(fce->name);
    1178                 :            :         kfree(fce);
    1179                 :            : }
    1180                 :            : 
    1181                 :            : static void __async_dev_cache_fw_image(void *fw_entry,
    1182                 :            :                                        async_cookie_t cookie)
    1183                 :            : {
    1184                 :            :         struct fw_cache_entry *fce = fw_entry;
    1185                 :            :         struct firmware_cache *fwc = &fw_cache;
    1186                 :            :         int ret;
    1187                 :            : 
    1188                 :            :         ret = cache_firmware(fce->name);
    1189                 :            :         if (ret) {
    1190                 :            :                 spin_lock(&fwc->name_lock);
    1191                 :            :                 list_del(&fce->list);
    1192                 :            :                 spin_unlock(&fwc->name_lock);
    1193                 :            : 
    1194                 :            :                 free_fw_cache_entry(fce);
    1195                 :            :         }
    1196                 :            : }
    1197                 :            : 
    1198                 :            : /* called with dev->devres_lock held */
    1199                 :            : static void dev_create_fw_entry(struct device *dev, void *res,
    1200                 :            :                                 void *data)
    1201                 :            : {
    1202                 :            :         struct fw_name_devm *fwn = res;
    1203                 :            :         const char *fw_name = fwn->name;
    1204                 :            :         struct list_head *head = data;
    1205                 :            :         struct fw_cache_entry *fce;
    1206                 :            : 
    1207                 :            :         fce = alloc_fw_cache_entry(fw_name);
    1208                 :            :         if (fce)
    1209                 :            :                 list_add(&fce->list, head);
    1210                 :            : }
    1211                 :            : 
    1212                 :            : static int devm_name_match(struct device *dev, void *res,
    1213                 :            :                            void *match_data)
    1214                 :            : {
    1215                 :            :         struct fw_name_devm *fwn = res;
    1216                 :            :         return (fwn->magic == (unsigned long)match_data);
    1217                 :            : }
    1218                 :            : 
    1219                 :            : static void dev_cache_fw_image(struct device *dev, void *data)
    1220                 :            : {
    1221                 :            :         LIST_HEAD(todo);
    1222                 :            :         struct fw_cache_entry *fce;
    1223                 :            :         struct fw_cache_entry *fce_next;
    1224                 :            :         struct firmware_cache *fwc = &fw_cache;
    1225                 :            : 
    1226                 :            :         devres_for_each_res(dev, fw_name_devm_release,
    1227                 :            :                             devm_name_match, &fw_cache,
    1228                 :            :                             dev_create_fw_entry, &todo);
    1229                 :            : 
    1230                 :            :         list_for_each_entry_safe(fce, fce_next, &todo, list) {
    1231                 :            :                 list_del(&fce->list);
    1232                 :            : 
    1233                 :            :                 spin_lock(&fwc->name_lock);
    1234                 :            :                 /* only one cache entry for one firmware */
    1235                 :            :                 if (!__fw_entry_found(fce->name)) {
    1236                 :            :                         list_add(&fce->list, &fwc->fw_names);
    1237                 :            :                 } else {
    1238                 :            :                         free_fw_cache_entry(fce);
    1239                 :            :                         fce = NULL;
    1240                 :            :                 }
    1241                 :            :                 spin_unlock(&fwc->name_lock);
    1242                 :            : 
    1243                 :            :                 if (fce)
    1244                 :            :                         async_schedule_domain(__async_dev_cache_fw_image,
    1245                 :            :                                               (void *)fce,
    1246                 :            :                                               &fw_cache_domain);
    1247                 :            :         }
    1248                 :            : }
    1249                 :            : 
    1250                 :            : static void __device_uncache_fw_images(void)
    1251                 :            : {
    1252                 :            :         struct firmware_cache *fwc = &fw_cache;
    1253                 :            :         struct fw_cache_entry *fce;
    1254                 :            : 
    1255                 :            :         spin_lock(&fwc->name_lock);
    1256                 :            :         while (!list_empty(&fwc->fw_names)) {
    1257                 :            :                 fce = list_entry(fwc->fw_names.next,
    1258                 :            :                                 struct fw_cache_entry, list);
    1259                 :            :                 list_del(&fce->list);
    1260                 :            :                 spin_unlock(&fwc->name_lock);
    1261                 :            : 
    1262                 :            :                 uncache_firmware(fce->name);
    1263                 :            :                 free_fw_cache_entry(fce);
    1264                 :            : 
    1265                 :            :                 spin_lock(&fwc->name_lock);
    1266                 :            :         }
    1267                 :            :         spin_unlock(&fwc->name_lock);
    1268                 :            : }
    1269                 :            : 
    1270                 :            : /**
    1271                 :            :  * device_cache_fw_images() - cache devices' firmware
    1272                 :            :  *
    1273                 :            :  * If one device called request_firmware or its nowait version
    1274                 :            :  * successfully before, the firmware names are recored into the
    1275                 :            :  * device's devres link list, so device_cache_fw_images can call
    1276                 :            :  * cache_firmware() to cache these firmwares for the device,
    1277                 :            :  * then the device driver can load its firmwares easily at
    1278                 :            :  * time when system is not ready to complete loading firmware.
    1279                 :            :  */
    1280                 :            : static void device_cache_fw_images(void)
    1281                 :            : {
    1282                 :            :         struct firmware_cache *fwc = &fw_cache;
    1283                 :            :         DEFINE_WAIT(wait);
    1284                 :            : 
    1285                 :            :         pr_debug("%s\n", __func__);
    1286                 :            : 
    1287                 :            :         /* cancel uncache work */
    1288                 :            :         cancel_delayed_work_sync(&fwc->work);
    1289                 :            : 
    1290                 :            :         fw_fallback_set_cache_timeout();
    1291                 :            : 
    1292                 :            :         mutex_lock(&fw_lock);
    1293                 :            :         fwc->state = FW_LOADER_START_CACHE;
    1294                 :            :         dpm_for_each_dev(NULL, dev_cache_fw_image);
    1295                 :            :         mutex_unlock(&fw_lock);
    1296                 :            : 
    1297                 :            :         /* wait for completion of caching firmware for all devices */
    1298                 :            :         async_synchronize_full_domain(&fw_cache_domain);
    1299                 :            : 
    1300                 :            :         fw_fallback_set_default_timeout();
    1301                 :            : }
    1302                 :            : 
    1303                 :            : /**
    1304                 :            :  * device_uncache_fw_images() - uncache devices' firmware
    1305                 :            :  *
    1306                 :            :  * uncache all firmwares which have been cached successfully
    1307                 :            :  * by device_uncache_fw_images earlier
    1308                 :            :  */
    1309                 :            : static void device_uncache_fw_images(void)
    1310                 :            : {
    1311                 :            :         pr_debug("%s\n", __func__);
    1312                 :            :         __device_uncache_fw_images();
    1313                 :            : }
    1314                 :            : 
    1315                 :            : static void device_uncache_fw_images_work(struct work_struct *work)
    1316                 :            : {
    1317                 :            :         device_uncache_fw_images();
    1318                 :            : }
    1319                 :            : 
    1320                 :            : /**
    1321                 :            :  * device_uncache_fw_images_delay() - uncache devices firmwares
    1322                 :            :  * @delay: number of milliseconds to delay uncache device firmwares
    1323                 :            :  *
    1324                 :            :  * uncache all devices's firmwares which has been cached successfully
    1325                 :            :  * by device_cache_fw_images after @delay milliseconds.
    1326                 :            :  */
    1327                 :            : static void device_uncache_fw_images_delay(unsigned long delay)
    1328                 :            : {
    1329                 :            :         queue_delayed_work(system_power_efficient_wq, &fw_cache.work,
    1330                 :            :                            msecs_to_jiffies(delay));
    1331                 :            : }
    1332                 :            : 
    1333                 :            : static int fw_pm_notify(struct notifier_block *notify_block,
    1334                 :            :                         unsigned long mode, void *unused)
    1335                 :            : {
    1336                 :            :         switch (mode) {
    1337                 :            :         case PM_HIBERNATION_PREPARE:
    1338                 :            :         case PM_SUSPEND_PREPARE:
    1339                 :            :         case PM_RESTORE_PREPARE:
    1340                 :            :                 /*
    1341                 :            :                  * kill pending fallback requests with a custom fallback
    1342                 :            :                  * to avoid stalling suspend.
    1343                 :            :                  */
    1344                 :            :                 kill_pending_fw_fallback_reqs(true);
    1345                 :            :                 device_cache_fw_images();
    1346                 :            :                 break;
    1347                 :            : 
    1348                 :            :         case PM_POST_SUSPEND:
    1349                 :            :         case PM_POST_HIBERNATION:
    1350                 :            :         case PM_POST_RESTORE:
    1351                 :            :                 /*
    1352                 :            :                  * In case that system sleep failed and syscore_suspend is
    1353                 :            :                  * not called.
    1354                 :            :                  */
    1355                 :            :                 mutex_lock(&fw_lock);
    1356                 :            :                 fw_cache.state = FW_LOADER_NO_CACHE;
    1357                 :            :                 mutex_unlock(&fw_lock);
    1358                 :            : 
    1359                 :            :                 device_uncache_fw_images_delay(10 * MSEC_PER_SEC);
    1360                 :            :                 break;
    1361                 :            :         }
    1362                 :            : 
    1363                 :            :         return 0;
    1364                 :            : }
    1365                 :            : 
    1366                 :            : /* stop caching firmware once syscore_suspend is reached */
    1367                 :            : static int fw_suspend(void)
    1368                 :            : {
    1369                 :            :         fw_cache.state = FW_LOADER_NO_CACHE;
    1370                 :            :         return 0;
    1371                 :            : }
    1372                 :            : 
    1373                 :            : static struct syscore_ops fw_syscore_ops = {
    1374                 :            :         .suspend = fw_suspend,
    1375                 :            : };
    1376                 :            : 
    1377                 :            : static int __init register_fw_pm_ops(void)
    1378                 :            : {
    1379                 :            :         int ret;
    1380                 :            : 
    1381                 :            :         spin_lock_init(&fw_cache.name_lock);
    1382                 :            :         INIT_LIST_HEAD(&fw_cache.fw_names);
    1383                 :            : 
    1384                 :            :         INIT_DELAYED_WORK(&fw_cache.work,
    1385                 :            :                           device_uncache_fw_images_work);
    1386                 :            : 
    1387                 :            :         fw_cache.pm_notify.notifier_call = fw_pm_notify;
    1388                 :            :         ret = register_pm_notifier(&fw_cache.pm_notify);
    1389                 :            :         if (ret)
    1390                 :            :                 return ret;
    1391                 :            : 
    1392                 :            :         register_syscore_ops(&fw_syscore_ops);
    1393                 :            : 
    1394                 :            :         return ret;
    1395                 :            : }
    1396                 :            : 
    1397                 :            : static inline void unregister_fw_pm_ops(void)
    1398                 :            : {
    1399                 :            :         unregister_syscore_ops(&fw_syscore_ops);
    1400                 :            :         unregister_pm_notifier(&fw_cache.pm_notify);
    1401                 :            : }
    1402                 :            : #else
    1403                 :            : static int fw_cache_piggyback_on_request(const char *name)
    1404                 :            : {
    1405                 :            :         return 0;
    1406                 :            : }
    1407                 :            : static inline int register_fw_pm_ops(void)
    1408                 :            : {
    1409                 :            :         return 0;
    1410                 :            : }
    1411                 :            : static inline void unregister_fw_pm_ops(void)
    1412                 :            : {
    1413                 :            : }
    1414                 :            : #endif
    1415                 :            : 
    1416                 :        404 : static void __init fw_cache_init(void)
    1417                 :            : {
    1418                 :        404 :         spin_lock_init(&fw_cache.lock);
    1419                 :            :         INIT_LIST_HEAD(&fw_cache.head);
    1420                 :        404 :         fw_cache.state = FW_LOADER_NO_CACHE;
    1421                 :        404 : }
    1422                 :            : 
    1423                 :          0 : static int fw_shutdown_notify(struct notifier_block *unused1,
    1424                 :            :                               unsigned long unused2, void *unused3)
    1425                 :            : {
    1426                 :            :         /*
    1427                 :            :          * Kill all pending fallback requests to avoid both stalling shutdown,
    1428                 :            :          * and avoid a deadlock with the usermode_lock.
    1429                 :            :          */
    1430                 :            :         kill_pending_fw_fallback_reqs(false);
    1431                 :            : 
    1432                 :          0 :         return NOTIFY_DONE;
    1433                 :            : }
    1434                 :            : 
    1435                 :            : static struct notifier_block fw_shutdown_nb = {
    1436                 :            :         .notifier_call = fw_shutdown_notify,
    1437                 :            : };
    1438                 :            : 
    1439                 :        404 : static int __init firmware_class_init(void)
    1440                 :            : {
    1441                 :            :         int ret;
    1442                 :            : 
    1443                 :            :         /* No need to unfold these on exit */
    1444                 :        404 :         fw_cache_init();
    1445                 :            : 
    1446                 :            :         ret = register_fw_pm_ops();
    1447                 :            :         if (ret)
    1448                 :            :                 return ret;
    1449                 :            : 
    1450                 :        404 :         ret = register_reboot_notifier(&fw_shutdown_nb);
    1451         [ -  + ]:        404 :         if (ret)
    1452                 :            :                 goto out;
    1453                 :            : 
    1454                 :            :         return register_sysfs_loader();
    1455                 :            : 
    1456                 :            : out:
    1457                 :            :         unregister_fw_pm_ops();
    1458                 :          0 :         return ret;
    1459                 :            : }
    1460                 :            : 
    1461                 :          0 : static void __exit firmware_class_exit(void)
    1462                 :            : {
    1463                 :            :         unregister_fw_pm_ops();
    1464                 :          0 :         unregister_reboot_notifier(&fw_shutdown_nb);
    1465                 :            :         unregister_sysfs_loader();
    1466                 :          0 : }
    1467                 :            : 
    1468                 :            : fs_initcall(firmware_class_init);
    1469                 :            : module_exit(firmware_class_exit);

Generated by: LCOV version 1.14