0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
0012
0013 #include <linux/capability.h>
0014 #include <linux/device.h>
0015 #include <linux/kernel_read_file.h>
0016 #include <linux/module.h>
0017 #include <linux/init.h>
0018 #include <linux/initrd.h>
0019 #include <linux/timer.h>
0020 #include <linux/vmalloc.h>
0021 #include <linux/interrupt.h>
0022 #include <linux/bitops.h>
0023 #include <linux/mutex.h>
0024 #include <linux/workqueue.h>
0025 #include <linux/highmem.h>
0026 #include <linux/firmware.h>
0027 #include <linux/slab.h>
0028 #include <linux/sched.h>
0029 #include <linux/file.h>
0030 #include <linux/list.h>
0031 #include <linux/fs.h>
0032 #include <linux/async.h>
0033 #include <linux/pm.h>
0034 #include <linux/suspend.h>
0035 #include <linux/syscore_ops.h>
0036 #include <linux/reboot.h>
0037 #include <linux/security.h>
0038 #include <linux/zstd.h>
0039 #include <linux/xz.h>
0040
0041 #include <generated/utsrelease.h>
0042
0043 #include "../base.h"
0044 #include "firmware.h"
0045 #include "fallback.h"
0046
0047 MODULE_AUTHOR("Manuel Estrada Sainz");
0048 MODULE_DESCRIPTION("Multi purpose firmware loading support");
0049 MODULE_LICENSE("GPL");
0050
0051 struct firmware_cache {
0052
0053 spinlock_t lock;
0054 struct list_head head;
0055 int state;
0056
0057 #ifdef CONFIG_FW_CACHE
0058
0059
0060
0061
0062
0063
0064 spinlock_t name_lock;
0065 struct list_head fw_names;
0066
0067 struct delayed_work work;
0068
0069 struct notifier_block pm_notify;
0070 #endif
0071 };
0072
0073 struct fw_cache_entry {
0074 struct list_head list;
0075 const char *name;
0076 };
0077
0078 struct fw_name_devm {
0079 unsigned long magic;
0080 const char *name;
0081 };
0082
0083 static inline struct fw_priv *to_fw_priv(struct kref *ref)
0084 {
0085 return container_of(ref, struct fw_priv, ref);
0086 }
0087
0088 #define FW_LOADER_NO_CACHE 0
0089 #define FW_LOADER_START_CACHE 1
0090
0091
0092
0093 DEFINE_MUTEX(fw_lock);
0094
0095 struct firmware_cache fw_cache;
0096
0097 void fw_state_init(struct fw_priv *fw_priv)
0098 {
0099 struct fw_state *fw_st = &fw_priv->fw_st;
0100
0101 init_completion(&fw_st->completion);
0102 fw_st->status = FW_STATUS_UNKNOWN;
0103 }
0104
0105 static inline int fw_state_wait(struct fw_priv *fw_priv)
0106 {
0107 return __fw_state_wait_common(fw_priv, MAX_SCHEDULE_TIMEOUT);
0108 }
0109
0110 static void fw_cache_piggyback_on_request(struct fw_priv *fw_priv);
0111
0112 static struct fw_priv *__allocate_fw_priv(const char *fw_name,
0113 struct firmware_cache *fwc,
0114 void *dbuf,
0115 size_t size,
0116 size_t offset,
0117 u32 opt_flags)
0118 {
0119 struct fw_priv *fw_priv;
0120
0121
0122 if ((opt_flags & FW_OPT_PARTIAL) && !dbuf)
0123 return NULL;
0124
0125
0126 if (offset != 0 && !(opt_flags & FW_OPT_PARTIAL))
0127 return NULL;
0128
0129 fw_priv = kzalloc(sizeof(*fw_priv), GFP_ATOMIC);
0130 if (!fw_priv)
0131 return NULL;
0132
0133 fw_priv->fw_name = kstrdup_const(fw_name, GFP_ATOMIC);
0134 if (!fw_priv->fw_name) {
0135 kfree(fw_priv);
0136 return NULL;
0137 }
0138
0139 kref_init(&fw_priv->ref);
0140 fw_priv->fwc = fwc;
0141 fw_priv->data = dbuf;
0142 fw_priv->allocated_size = size;
0143 fw_priv->offset = offset;
0144 fw_priv->opt_flags = opt_flags;
0145 fw_state_init(fw_priv);
0146 #ifdef CONFIG_FW_LOADER_USER_HELPER
0147 INIT_LIST_HEAD(&fw_priv->pending_list);
0148 #endif
0149
0150 pr_debug("%s: fw-%s fw_priv=%p\n", __func__, fw_name, fw_priv);
0151
0152 return fw_priv;
0153 }
0154
0155 static struct fw_priv *__lookup_fw_priv(const char *fw_name)
0156 {
0157 struct fw_priv *tmp;
0158 struct firmware_cache *fwc = &fw_cache;
0159
0160 list_for_each_entry(tmp, &fwc->head, list)
0161 if (!strcmp(tmp->fw_name, fw_name))
0162 return tmp;
0163 return NULL;
0164 }
0165
0166
0167 int alloc_lookup_fw_priv(const char *fw_name, struct firmware_cache *fwc,
0168 struct fw_priv **fw_priv, void *dbuf, size_t size,
0169 size_t offset, u32 opt_flags)
0170 {
0171 struct fw_priv *tmp;
0172
0173 spin_lock(&fwc->lock);
0174
0175
0176
0177
0178 if (!(opt_flags & (FW_OPT_NOCACHE | FW_OPT_PARTIAL))) {
0179 tmp = __lookup_fw_priv(fw_name);
0180 if (tmp) {
0181 kref_get(&tmp->ref);
0182 spin_unlock(&fwc->lock);
0183 *fw_priv = tmp;
0184 pr_debug("batched request - sharing the same struct fw_priv and lookup for multiple requests\n");
0185 return 1;
0186 }
0187 }
0188
0189 tmp = __allocate_fw_priv(fw_name, fwc, dbuf, size, offset, opt_flags);
0190 if (tmp) {
0191 INIT_LIST_HEAD(&tmp->list);
0192 if (!(opt_flags & FW_OPT_NOCACHE))
0193 list_add(&tmp->list, &fwc->head);
0194 }
0195 spin_unlock(&fwc->lock);
0196
0197 *fw_priv = tmp;
0198
0199 return tmp ? 0 : -ENOMEM;
0200 }
0201
0202 static void __free_fw_priv(struct kref *ref)
0203 __releases(&fwc->lock)
0204 {
0205 struct fw_priv *fw_priv = to_fw_priv(ref);
0206 struct firmware_cache *fwc = fw_priv->fwc;
0207
0208 pr_debug("%s: fw-%s fw_priv=%p data=%p size=%u\n",
0209 __func__, fw_priv->fw_name, fw_priv, fw_priv->data,
0210 (unsigned int)fw_priv->size);
0211
0212 list_del(&fw_priv->list);
0213 spin_unlock(&fwc->lock);
0214
0215 if (fw_is_paged_buf(fw_priv))
0216 fw_free_paged_buf(fw_priv);
0217 else if (!fw_priv->allocated_size)
0218 vfree(fw_priv->data);
0219
0220 kfree_const(fw_priv->fw_name);
0221 kfree(fw_priv);
0222 }
0223
0224 void free_fw_priv(struct fw_priv *fw_priv)
0225 {
0226 struct firmware_cache *fwc = fw_priv->fwc;
0227 spin_lock(&fwc->lock);
0228 if (!kref_put(&fw_priv->ref, __free_fw_priv))
0229 spin_unlock(&fwc->lock);
0230 }
0231
0232 #ifdef CONFIG_FW_LOADER_PAGED_BUF
0233 bool fw_is_paged_buf(struct fw_priv *fw_priv)
0234 {
0235 return fw_priv->is_paged_buf;
0236 }
0237
0238 void fw_free_paged_buf(struct fw_priv *fw_priv)
0239 {
0240 int i;
0241
0242 if (!fw_priv->pages)
0243 return;
0244
0245 vunmap(fw_priv->data);
0246
0247 for (i = 0; i < fw_priv->nr_pages; i++)
0248 __free_page(fw_priv->pages[i]);
0249 kvfree(fw_priv->pages);
0250 fw_priv->pages = NULL;
0251 fw_priv->page_array_size = 0;
0252 fw_priv->nr_pages = 0;
0253 fw_priv->data = NULL;
0254 fw_priv->size = 0;
0255 }
0256
0257 int fw_grow_paged_buf(struct fw_priv *fw_priv, int pages_needed)
0258 {
0259
0260 if (fw_priv->page_array_size < pages_needed) {
0261 int new_array_size = max(pages_needed,
0262 fw_priv->page_array_size * 2);
0263 struct page **new_pages;
0264
0265 new_pages = kvmalloc_array(new_array_size, sizeof(void *),
0266 GFP_KERNEL);
0267 if (!new_pages)
0268 return -ENOMEM;
0269 memcpy(new_pages, fw_priv->pages,
0270 fw_priv->page_array_size * sizeof(void *));
0271 memset(&new_pages[fw_priv->page_array_size], 0, sizeof(void *) *
0272 (new_array_size - fw_priv->page_array_size));
0273 kvfree(fw_priv->pages);
0274 fw_priv->pages = new_pages;
0275 fw_priv->page_array_size = new_array_size;
0276 }
0277
0278 while (fw_priv->nr_pages < pages_needed) {
0279 fw_priv->pages[fw_priv->nr_pages] =
0280 alloc_page(GFP_KERNEL | __GFP_HIGHMEM);
0281
0282 if (!fw_priv->pages[fw_priv->nr_pages])
0283 return -ENOMEM;
0284 fw_priv->nr_pages++;
0285 }
0286
0287 return 0;
0288 }
0289
0290 int fw_map_paged_buf(struct fw_priv *fw_priv)
0291 {
0292
0293 if (!fw_priv->pages)
0294 return 0;
0295
0296 vunmap(fw_priv->data);
0297 fw_priv->data = vmap(fw_priv->pages, fw_priv->nr_pages, 0,
0298 PAGE_KERNEL_RO);
0299 if (!fw_priv->data)
0300 return -ENOMEM;
0301
0302 return 0;
0303 }
0304 #endif
0305
0306
0307
0308
0309 #ifdef CONFIG_FW_LOADER_COMPRESS_ZSTD
0310 static int fw_decompress_zstd(struct device *dev, struct fw_priv *fw_priv,
0311 size_t in_size, const void *in_buffer)
0312 {
0313 size_t len, out_size, workspace_size;
0314 void *workspace, *out_buf;
0315 zstd_dctx *ctx;
0316 int err;
0317
0318 if (fw_priv->allocated_size) {
0319 out_size = fw_priv->allocated_size;
0320 out_buf = fw_priv->data;
0321 } else {
0322 zstd_frame_header params;
0323
0324 if (zstd_get_frame_header(¶ms, in_buffer, in_size) ||
0325 params.frameContentSize == ZSTD_CONTENTSIZE_UNKNOWN) {
0326 dev_dbg(dev, "%s: invalid zstd header\n", __func__);
0327 return -EINVAL;
0328 }
0329 out_size = params.frameContentSize;
0330 out_buf = vzalloc(out_size);
0331 if (!out_buf)
0332 return -ENOMEM;
0333 }
0334
0335 workspace_size = zstd_dctx_workspace_bound();
0336 workspace = kvzalloc(workspace_size, GFP_KERNEL);
0337 if (!workspace) {
0338 err = -ENOMEM;
0339 goto error;
0340 }
0341
0342 ctx = zstd_init_dctx(workspace, workspace_size);
0343 if (!ctx) {
0344 dev_dbg(dev, "%s: failed to initialize context\n", __func__);
0345 err = -EINVAL;
0346 goto error;
0347 }
0348
0349 len = zstd_decompress_dctx(ctx, out_buf, out_size, in_buffer, in_size);
0350 if (zstd_is_error(len)) {
0351 dev_dbg(dev, "%s: failed to decompress: %d\n", __func__,
0352 zstd_get_error_code(len));
0353 err = -EINVAL;
0354 goto error;
0355 }
0356
0357 if (!fw_priv->allocated_size)
0358 fw_priv->data = out_buf;
0359 fw_priv->size = len;
0360 err = 0;
0361
0362 error:
0363 kvfree(workspace);
0364 if (err && !fw_priv->allocated_size)
0365 vfree(out_buf);
0366 return err;
0367 }
0368 #endif
0369
0370
0371
0372
0373 #ifdef CONFIG_FW_LOADER_COMPRESS_XZ
0374
0375 static int fw_decompress_xz_error(struct device *dev, enum xz_ret xz_ret)
0376 {
0377 if (xz_ret != XZ_STREAM_END) {
0378 dev_warn(dev, "xz decompression failed (xz_ret=%d)\n", xz_ret);
0379 return xz_ret == XZ_MEM_ERROR ? -ENOMEM : -EINVAL;
0380 }
0381 return 0;
0382 }
0383
0384
0385 static int fw_decompress_xz_single(struct device *dev, struct fw_priv *fw_priv,
0386 size_t in_size, const void *in_buffer)
0387 {
0388 struct xz_dec *xz_dec;
0389 struct xz_buf xz_buf;
0390 enum xz_ret xz_ret;
0391
0392 xz_dec = xz_dec_init(XZ_SINGLE, (u32)-1);
0393 if (!xz_dec)
0394 return -ENOMEM;
0395
0396 xz_buf.in_size = in_size;
0397 xz_buf.in = in_buffer;
0398 xz_buf.in_pos = 0;
0399 xz_buf.out_size = fw_priv->allocated_size;
0400 xz_buf.out = fw_priv->data;
0401 xz_buf.out_pos = 0;
0402
0403 xz_ret = xz_dec_run(xz_dec, &xz_buf);
0404 xz_dec_end(xz_dec);
0405
0406 fw_priv->size = xz_buf.out_pos;
0407 return fw_decompress_xz_error(dev, xz_ret);
0408 }
0409
0410
0411 static int fw_decompress_xz_pages(struct device *dev, struct fw_priv *fw_priv,
0412 size_t in_size, const void *in_buffer)
0413 {
0414 struct xz_dec *xz_dec;
0415 struct xz_buf xz_buf;
0416 enum xz_ret xz_ret;
0417 struct page *page;
0418 int err = 0;
0419
0420 xz_dec = xz_dec_init(XZ_DYNALLOC, (u32)-1);
0421 if (!xz_dec)
0422 return -ENOMEM;
0423
0424 xz_buf.in_size = in_size;
0425 xz_buf.in = in_buffer;
0426 xz_buf.in_pos = 0;
0427
0428 fw_priv->is_paged_buf = true;
0429 fw_priv->size = 0;
0430 do {
0431 if (fw_grow_paged_buf(fw_priv, fw_priv->nr_pages + 1)) {
0432 err = -ENOMEM;
0433 goto out;
0434 }
0435
0436
0437 page = fw_priv->pages[fw_priv->nr_pages - 1];
0438 xz_buf.out = kmap_local_page(page);
0439 xz_buf.out_pos = 0;
0440 xz_buf.out_size = PAGE_SIZE;
0441 xz_ret = xz_dec_run(xz_dec, &xz_buf);
0442 kunmap_local(xz_buf.out);
0443 fw_priv->size += xz_buf.out_pos;
0444
0445 if (xz_buf.out_pos != PAGE_SIZE)
0446 break;
0447 } while (xz_ret == XZ_OK);
0448
0449 err = fw_decompress_xz_error(dev, xz_ret);
0450 if (!err)
0451 err = fw_map_paged_buf(fw_priv);
0452
0453 out:
0454 xz_dec_end(xz_dec);
0455 return err;
0456 }
0457
0458 static int fw_decompress_xz(struct device *dev, struct fw_priv *fw_priv,
0459 size_t in_size, const void *in_buffer)
0460 {
0461
0462 if (fw_priv->data)
0463 return fw_decompress_xz_single(dev, fw_priv, in_size, in_buffer);
0464 else
0465 return fw_decompress_xz_pages(dev, fw_priv, in_size, in_buffer);
0466 }
0467 #endif
0468
0469
0470 static char fw_path_para[256];
0471 static const char * const fw_path[] = {
0472 fw_path_para,
0473 "/lib/firmware/updates/" UTS_RELEASE,
0474 "/lib/firmware/updates",
0475 "/lib/firmware/" UTS_RELEASE,
0476 "/lib/firmware"
0477 };
0478
0479
0480
0481
0482
0483
0484 module_param_string(path, fw_path_para, sizeof(fw_path_para), 0644);
0485 MODULE_PARM_DESC(path, "customized firmware image search path with a higher priority than default path");
0486
0487 static int
0488 fw_get_filesystem_firmware(struct device *device, struct fw_priv *fw_priv,
0489 const char *suffix,
0490 int (*decompress)(struct device *dev,
0491 struct fw_priv *fw_priv,
0492 size_t in_size,
0493 const void *in_buffer))
0494 {
0495 size_t size;
0496 int i, len;
0497 int rc = -ENOENT;
0498 char *path;
0499 size_t msize = INT_MAX;
0500 void *buffer = NULL;
0501
0502
0503 if (!decompress && fw_priv->data) {
0504 buffer = fw_priv->data;
0505 msize = fw_priv->allocated_size;
0506 }
0507
0508 path = __getname();
0509 if (!path)
0510 return -ENOMEM;
0511
0512 wait_for_initramfs();
0513 for (i = 0; i < ARRAY_SIZE(fw_path); i++) {
0514 size_t file_size = 0;
0515 size_t *file_size_ptr = NULL;
0516
0517
0518 if (!fw_path[i][0])
0519 continue;
0520
0521 len = snprintf(path, PATH_MAX, "%s/%s%s",
0522 fw_path[i], fw_priv->fw_name, suffix);
0523 if (len >= PATH_MAX) {
0524 rc = -ENAMETOOLONG;
0525 break;
0526 }
0527
0528 fw_priv->size = 0;
0529
0530
0531
0532
0533
0534
0535 if ((fw_priv->opt_flags & FW_OPT_PARTIAL) && buffer)
0536 file_size_ptr = &file_size;
0537
0538
0539 rc = kernel_read_file_from_path_initns(path, fw_priv->offset,
0540 &buffer, msize,
0541 file_size_ptr,
0542 READING_FIRMWARE);
0543 if (rc < 0) {
0544 if (rc != -ENOENT)
0545 dev_warn(device, "loading %s failed with error %d\n",
0546 path, rc);
0547 else
0548 dev_dbg(device, "loading %s failed for no such file or directory.\n",
0549 path);
0550 continue;
0551 }
0552 size = rc;
0553 rc = 0;
0554
0555 dev_dbg(device, "Loading firmware from %s\n", path);
0556 if (decompress) {
0557 dev_dbg(device, "f/w decompressing %s\n",
0558 fw_priv->fw_name);
0559 rc = decompress(device, fw_priv, size, buffer);
0560
0561 vfree(buffer);
0562 buffer = NULL;
0563 if (rc) {
0564 fw_free_paged_buf(fw_priv);
0565 continue;
0566 }
0567 } else {
0568 dev_dbg(device, "direct-loading %s\n",
0569 fw_priv->fw_name);
0570 if (!fw_priv->data)
0571 fw_priv->data = buffer;
0572 fw_priv->size = size;
0573 }
0574 fw_state_done(fw_priv);
0575 break;
0576 }
0577 __putname(path);
0578
0579 return rc;
0580 }
0581
0582
0583 static void firmware_free_data(const struct firmware *fw)
0584 {
0585
0586 if (!fw->priv) {
0587 vfree(fw->data);
0588 return;
0589 }
0590 free_fw_priv(fw->priv);
0591 }
0592
0593
0594 static void fw_set_page_data(struct fw_priv *fw_priv, struct firmware *fw)
0595 {
0596 fw->priv = fw_priv;
0597 fw->size = fw_priv->size;
0598 fw->data = fw_priv->data;
0599
0600 pr_debug("%s: fw-%s fw_priv=%p data=%p size=%u\n",
0601 __func__, fw_priv->fw_name, fw_priv, fw_priv->data,
0602 (unsigned int)fw_priv->size);
0603 }
0604
0605 #ifdef CONFIG_FW_CACHE
0606 static void fw_name_devm_release(struct device *dev, void *res)
0607 {
0608 struct fw_name_devm *fwn = res;
0609
0610 if (fwn->magic == (unsigned long)&fw_cache)
0611 pr_debug("%s: fw_name-%s devm-%p released\n",
0612 __func__, fwn->name, res);
0613 kfree_const(fwn->name);
0614 }
0615
0616 static int fw_devm_match(struct device *dev, void *res,
0617 void *match_data)
0618 {
0619 struct fw_name_devm *fwn = res;
0620
0621 return (fwn->magic == (unsigned long)&fw_cache) &&
0622 !strcmp(fwn->name, match_data);
0623 }
0624
0625 static struct fw_name_devm *fw_find_devm_name(struct device *dev,
0626 const char *name)
0627 {
0628 struct fw_name_devm *fwn;
0629
0630 fwn = devres_find(dev, fw_name_devm_release,
0631 fw_devm_match, (void *)name);
0632 return fwn;
0633 }
0634
0635 static bool fw_cache_is_setup(struct device *dev, const char *name)
0636 {
0637 struct fw_name_devm *fwn;
0638
0639 fwn = fw_find_devm_name(dev, name);
0640 if (fwn)
0641 return true;
0642
0643 return false;
0644 }
0645
0646
0647 static int fw_add_devm_name(struct device *dev, const char *name)
0648 {
0649 struct fw_name_devm *fwn;
0650
0651 if (fw_cache_is_setup(dev, name))
0652 return 0;
0653
0654 fwn = devres_alloc(fw_name_devm_release, sizeof(struct fw_name_devm),
0655 GFP_KERNEL);
0656 if (!fwn)
0657 return -ENOMEM;
0658 fwn->name = kstrdup_const(name, GFP_KERNEL);
0659 if (!fwn->name) {
0660 devres_free(fwn);
0661 return -ENOMEM;
0662 }
0663
0664 fwn->magic = (unsigned long)&fw_cache;
0665 devres_add(dev, fwn);
0666
0667 return 0;
0668 }
0669 #else
0670 static bool fw_cache_is_setup(struct device *dev, const char *name)
0671 {
0672 return false;
0673 }
0674
0675 static int fw_add_devm_name(struct device *dev, const char *name)
0676 {
0677 return 0;
0678 }
0679 #endif
0680
0681 int assign_fw(struct firmware *fw, struct device *device)
0682 {
0683 struct fw_priv *fw_priv = fw->priv;
0684 int ret;
0685
0686 mutex_lock(&fw_lock);
0687 if (!fw_priv->size || fw_state_is_aborted(fw_priv)) {
0688 mutex_unlock(&fw_lock);
0689 return -ENOENT;
0690 }
0691
0692
0693
0694
0695
0696
0697
0698
0699
0700 if (device && (fw_priv->opt_flags & FW_OPT_UEVENT) &&
0701 !(fw_priv->opt_flags & FW_OPT_NOCACHE)) {
0702 ret = fw_add_devm_name(device, fw_priv->fw_name);
0703 if (ret) {
0704 mutex_unlock(&fw_lock);
0705 return ret;
0706 }
0707 }
0708
0709
0710
0711
0712
0713 if (!(fw_priv->opt_flags & FW_OPT_NOCACHE) &&
0714 fw_priv->fwc->state == FW_LOADER_START_CACHE)
0715 fw_cache_piggyback_on_request(fw_priv);
0716
0717
0718 fw_set_page_data(fw_priv, fw);
0719 mutex_unlock(&fw_lock);
0720 return 0;
0721 }
0722
0723
0724
0725
0726
0727 static int
0728 _request_firmware_prepare(struct firmware **firmware_p, const char *name,
0729 struct device *device, void *dbuf, size_t size,
0730 size_t offset, u32 opt_flags)
0731 {
0732 struct firmware *firmware;
0733 struct fw_priv *fw_priv;
0734 int ret;
0735
0736 *firmware_p = firmware = kzalloc(sizeof(*firmware), GFP_KERNEL);
0737 if (!firmware) {
0738 dev_err(device, "%s: kmalloc(struct firmware) failed\n",
0739 __func__);
0740 return -ENOMEM;
0741 }
0742
0743 if (firmware_request_builtin_buf(firmware, name, dbuf, size)) {
0744 dev_dbg(device, "using built-in %s\n", name);
0745 return 0;
0746 }
0747
0748 ret = alloc_lookup_fw_priv(name, &fw_cache, &fw_priv, dbuf, size,
0749 offset, opt_flags);
0750
0751
0752
0753
0754
0755 firmware->priv = fw_priv;
0756
0757 if (ret > 0) {
0758 ret = fw_state_wait(fw_priv);
0759 if (!ret) {
0760 fw_set_page_data(fw_priv, firmware);
0761 return 0;
0762 }
0763 }
0764
0765 if (ret < 0)
0766 return ret;
0767 return 1;
0768 }
0769
0770
0771
0772
0773
0774
0775
0776
0777
0778
0779 static void fw_abort_batch_reqs(struct firmware *fw)
0780 {
0781 struct fw_priv *fw_priv;
0782
0783
0784 if (!fw || !fw->priv)
0785 return;
0786
0787 fw_priv = fw->priv;
0788 mutex_lock(&fw_lock);
0789 if (!fw_state_is_aborted(fw_priv))
0790 fw_state_aborted(fw_priv);
0791 mutex_unlock(&fw_lock);
0792 }
0793
0794
0795 static int
0796 _request_firmware(const struct firmware **firmware_p, const char *name,
0797 struct device *device, void *buf, size_t size,
0798 size_t offset, u32 opt_flags)
0799 {
0800 struct firmware *fw = NULL;
0801 struct cred *kern_cred = NULL;
0802 const struct cred *old_cred;
0803 bool nondirect = false;
0804 int ret;
0805
0806 if (!firmware_p)
0807 return -EINVAL;
0808
0809 if (!name || name[0] == '\0') {
0810 ret = -EINVAL;
0811 goto out;
0812 }
0813
0814 ret = _request_firmware_prepare(&fw, name, device, buf, size,
0815 offset, opt_flags);
0816 if (ret <= 0)
0817 goto out;
0818
0819
0820
0821
0822
0823
0824 kern_cred = prepare_kernel_cred(NULL);
0825 if (!kern_cred) {
0826 ret = -ENOMEM;
0827 goto out;
0828 }
0829 old_cred = override_creds(kern_cred);
0830
0831 ret = fw_get_filesystem_firmware(device, fw->priv, "", NULL);
0832
0833
0834 if (!(opt_flags & FW_OPT_PARTIAL))
0835 nondirect = true;
0836
0837 #ifdef CONFIG_FW_LOADER_COMPRESS_ZSTD
0838 if (ret == -ENOENT && nondirect)
0839 ret = fw_get_filesystem_firmware(device, fw->priv, ".zst",
0840 fw_decompress_zstd);
0841 #endif
0842 #ifdef CONFIG_FW_LOADER_COMPRESS_XZ
0843 if (ret == -ENOENT && nondirect)
0844 ret = fw_get_filesystem_firmware(device, fw->priv, ".xz",
0845 fw_decompress_xz);
0846 #endif
0847 if (ret == -ENOENT && nondirect)
0848 ret = firmware_fallback_platform(fw->priv);
0849
0850 if (ret) {
0851 if (!(opt_flags & FW_OPT_NO_WARN))
0852 dev_warn(device,
0853 "Direct firmware load for %s failed with error %d\n",
0854 name, ret);
0855 if (nondirect)
0856 ret = firmware_fallback_sysfs(fw, name, device,
0857 opt_flags, ret);
0858 } else
0859 ret = assign_fw(fw, device);
0860
0861 revert_creds(old_cred);
0862 put_cred(kern_cred);
0863
0864 out:
0865 if (ret < 0) {
0866 fw_abort_batch_reqs(fw);
0867 release_firmware(fw);
0868 fw = NULL;
0869 }
0870
0871 *firmware_p = fw;
0872 return ret;
0873 }
0874
0875
0876
0877
0878
0879
0880
0881
0882
0883
0884
0885
0886
0887
0888
0889
0890
0891
0892
0893
0894
0895 int
0896 request_firmware(const struct firmware **firmware_p, const char *name,
0897 struct device *device)
0898 {
0899 int ret;
0900
0901
0902 __module_get(THIS_MODULE);
0903 ret = _request_firmware(firmware_p, name, device, NULL, 0, 0,
0904 FW_OPT_UEVENT);
0905 module_put(THIS_MODULE);
0906 return ret;
0907 }
0908 EXPORT_SYMBOL(request_firmware);
0909
0910
0911
0912
0913
0914
0915
0916
0917
0918
0919
0920
0921
0922
0923 int firmware_request_nowarn(const struct firmware **firmware, const char *name,
0924 struct device *device)
0925 {
0926 int ret;
0927
0928
0929 __module_get(THIS_MODULE);
0930 ret = _request_firmware(firmware, name, device, NULL, 0, 0,
0931 FW_OPT_UEVENT | FW_OPT_NO_WARN);
0932 module_put(THIS_MODULE);
0933 return ret;
0934 }
0935 EXPORT_SYMBOL_GPL(firmware_request_nowarn);
0936
0937
0938
0939
0940
0941
0942
0943
0944
0945
0946
0947
0948 int request_firmware_direct(const struct firmware **firmware_p,
0949 const char *name, struct device *device)
0950 {
0951 int ret;
0952
0953 __module_get(THIS_MODULE);
0954 ret = _request_firmware(firmware_p, name, device, NULL, 0, 0,
0955 FW_OPT_UEVENT | FW_OPT_NO_WARN |
0956 FW_OPT_NOFALLBACK_SYSFS);
0957 module_put(THIS_MODULE);
0958 return ret;
0959 }
0960 EXPORT_SYMBOL_GPL(request_firmware_direct);
0961
0962
0963
0964
0965
0966
0967
0968
0969
0970
0971
0972 int firmware_request_platform(const struct firmware **firmware,
0973 const char *name, struct device *device)
0974 {
0975 int ret;
0976
0977
0978 __module_get(THIS_MODULE);
0979 ret = _request_firmware(firmware, name, device, NULL, 0, 0,
0980 FW_OPT_UEVENT | FW_OPT_FALLBACK_PLATFORM);
0981 module_put(THIS_MODULE);
0982 return ret;
0983 }
0984 EXPORT_SYMBOL_GPL(firmware_request_platform);
0985
0986
0987
0988
0989
0990
0991
0992
0993
0994
0995
0996
0997
0998 int firmware_request_cache(struct device *device, const char *name)
0999 {
1000 int ret;
1001
1002 mutex_lock(&fw_lock);
1003 ret = fw_add_devm_name(device, name);
1004 mutex_unlock(&fw_lock);
1005
1006 return ret;
1007 }
1008 EXPORT_SYMBOL_GPL(firmware_request_cache);
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025 int
1026 request_firmware_into_buf(const struct firmware **firmware_p, const char *name,
1027 struct device *device, void *buf, size_t size)
1028 {
1029 int ret;
1030
1031 if (fw_cache_is_setup(device, name))
1032 return -EOPNOTSUPP;
1033
1034 __module_get(THIS_MODULE);
1035 ret = _request_firmware(firmware_p, name, device, buf, size, 0,
1036 FW_OPT_UEVENT | FW_OPT_NOCACHE);
1037 module_put(THIS_MODULE);
1038 return ret;
1039 }
1040 EXPORT_SYMBOL(request_firmware_into_buf);
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054 int
1055 request_partial_firmware_into_buf(const struct firmware **firmware_p,
1056 const char *name, struct device *device,
1057 void *buf, size_t size, size_t offset)
1058 {
1059 int ret;
1060
1061 if (fw_cache_is_setup(device, name))
1062 return -EOPNOTSUPP;
1063
1064 __module_get(THIS_MODULE);
1065 ret = _request_firmware(firmware_p, name, device, buf, size, offset,
1066 FW_OPT_UEVENT | FW_OPT_NOCACHE |
1067 FW_OPT_PARTIAL);
1068 module_put(THIS_MODULE);
1069 return ret;
1070 }
1071 EXPORT_SYMBOL(request_partial_firmware_into_buf);
1072
1073
1074
1075
1076
1077 void release_firmware(const struct firmware *fw)
1078 {
1079 if (fw) {
1080 if (!firmware_is_builtin(fw))
1081 firmware_free_data(fw);
1082 kfree(fw);
1083 }
1084 }
1085 EXPORT_SYMBOL(release_firmware);
1086
1087
1088 struct firmware_work {
1089 struct work_struct work;
1090 struct module *module;
1091 const char *name;
1092 struct device *device;
1093 void *context;
1094 void (*cont)(const struct firmware *fw, void *context);
1095 u32 opt_flags;
1096 };
1097
1098 static void request_firmware_work_func(struct work_struct *work)
1099 {
1100 struct firmware_work *fw_work;
1101 const struct firmware *fw;
1102
1103 fw_work = container_of(work, struct firmware_work, work);
1104
1105 _request_firmware(&fw, fw_work->name, fw_work->device, NULL, 0, 0,
1106 fw_work->opt_flags);
1107 fw_work->cont(fw, fw_work->context);
1108 put_device(fw_work->device);
1109
1110 module_put(fw_work->module);
1111 kfree_const(fw_work->name);
1112 kfree(fw_work);
1113 }
1114
1115
1116
1117
1118
1119
1120
1121
1122
1123
1124
1125
1126
1127
1128
1129
1130
1131
1132
1133
1134
1135
1136
1137
1138 int
1139 request_firmware_nowait(
1140 struct module *module, bool uevent,
1141 const char *name, struct device *device, gfp_t gfp, void *context,
1142 void (*cont)(const struct firmware *fw, void *context))
1143 {
1144 struct firmware_work *fw_work;
1145
1146 fw_work = kzalloc(sizeof(struct firmware_work), gfp);
1147 if (!fw_work)
1148 return -ENOMEM;
1149
1150 fw_work->module = module;
1151 fw_work->name = kstrdup_const(name, gfp);
1152 if (!fw_work->name) {
1153 kfree(fw_work);
1154 return -ENOMEM;
1155 }
1156 fw_work->device = device;
1157 fw_work->context = context;
1158 fw_work->cont = cont;
1159 fw_work->opt_flags = FW_OPT_NOWAIT |
1160 (uevent ? FW_OPT_UEVENT : FW_OPT_USERHELPER);
1161
1162 if (!uevent && fw_cache_is_setup(device, name)) {
1163 kfree_const(fw_work->name);
1164 kfree(fw_work);
1165 return -EOPNOTSUPP;
1166 }
1167
1168 if (!try_module_get(module)) {
1169 kfree_const(fw_work->name);
1170 kfree(fw_work);
1171 return -EFAULT;
1172 }
1173
1174 get_device(fw_work->device);
1175 INIT_WORK(&fw_work->work, request_firmware_work_func);
1176 schedule_work(&fw_work->work);
1177 return 0;
1178 }
1179 EXPORT_SYMBOL(request_firmware_nowait);
1180
1181 #ifdef CONFIG_FW_CACHE
1182 static ASYNC_DOMAIN_EXCLUSIVE(fw_cache_domain);
1183
1184
1185
1186
1187
1188
1189
1190
1191
1192
1193
1194
1195
1196
1197
1198 static int cache_firmware(const char *fw_name)
1199 {
1200 int ret;
1201 const struct firmware *fw;
1202
1203 pr_debug("%s: %s\n", __func__, fw_name);
1204
1205 ret = request_firmware(&fw, fw_name, NULL);
1206 if (!ret)
1207 kfree(fw);
1208
1209 pr_debug("%s: %s ret=%d\n", __func__, fw_name, ret);
1210
1211 return ret;
1212 }
1213
1214 static struct fw_priv *lookup_fw_priv(const char *fw_name)
1215 {
1216 struct fw_priv *tmp;
1217 struct firmware_cache *fwc = &fw_cache;
1218
1219 spin_lock(&fwc->lock);
1220 tmp = __lookup_fw_priv(fw_name);
1221 spin_unlock(&fwc->lock);
1222
1223 return tmp;
1224 }
1225
1226
1227
1228
1229
1230
1231
1232
1233
1234
1235
1236
1237 static int uncache_firmware(const char *fw_name)
1238 {
1239 struct fw_priv *fw_priv;
1240 struct firmware fw;
1241
1242 pr_debug("%s: %s\n", __func__, fw_name);
1243
1244 if (firmware_request_builtin(&fw, fw_name))
1245 return 0;
1246
1247 fw_priv = lookup_fw_priv(fw_name);
1248 if (fw_priv) {
1249 free_fw_priv(fw_priv);
1250 return 0;
1251 }
1252
1253 return -EINVAL;
1254 }
1255
1256 static struct fw_cache_entry *alloc_fw_cache_entry(const char *name)
1257 {
1258 struct fw_cache_entry *fce;
1259
1260 fce = kzalloc(sizeof(*fce), GFP_ATOMIC);
1261 if (!fce)
1262 goto exit;
1263
1264 fce->name = kstrdup_const(name, GFP_ATOMIC);
1265 if (!fce->name) {
1266 kfree(fce);
1267 fce = NULL;
1268 goto exit;
1269 }
1270 exit:
1271 return fce;
1272 }
1273
1274 static int __fw_entry_found(const char *name)
1275 {
1276 struct firmware_cache *fwc = &fw_cache;
1277 struct fw_cache_entry *fce;
1278
1279 list_for_each_entry(fce, &fwc->fw_names, list) {
1280 if (!strcmp(fce->name, name))
1281 return 1;
1282 }
1283 return 0;
1284 }
1285
1286 static void fw_cache_piggyback_on_request(struct fw_priv *fw_priv)
1287 {
1288 const char *name = fw_priv->fw_name;
1289 struct firmware_cache *fwc = fw_priv->fwc;
1290 struct fw_cache_entry *fce;
1291
1292 spin_lock(&fwc->name_lock);
1293 if (__fw_entry_found(name))
1294 goto found;
1295
1296 fce = alloc_fw_cache_entry(name);
1297 if (fce) {
1298 list_add(&fce->list, &fwc->fw_names);
1299 kref_get(&fw_priv->ref);
1300 pr_debug("%s: fw: %s\n", __func__, name);
1301 }
1302 found:
1303 spin_unlock(&fwc->name_lock);
1304 }
1305
1306 static void free_fw_cache_entry(struct fw_cache_entry *fce)
1307 {
1308 kfree_const(fce->name);
1309 kfree(fce);
1310 }
1311
1312 static void __async_dev_cache_fw_image(void *fw_entry,
1313 async_cookie_t cookie)
1314 {
1315 struct fw_cache_entry *fce = fw_entry;
1316 struct firmware_cache *fwc = &fw_cache;
1317 int ret;
1318
1319 ret = cache_firmware(fce->name);
1320 if (ret) {
1321 spin_lock(&fwc->name_lock);
1322 list_del(&fce->list);
1323 spin_unlock(&fwc->name_lock);
1324
1325 free_fw_cache_entry(fce);
1326 }
1327 }
1328
1329
1330 static void dev_create_fw_entry(struct device *dev, void *res,
1331 void *data)
1332 {
1333 struct fw_name_devm *fwn = res;
1334 const char *fw_name = fwn->name;
1335 struct list_head *head = data;
1336 struct fw_cache_entry *fce;
1337
1338 fce = alloc_fw_cache_entry(fw_name);
1339 if (fce)
1340 list_add(&fce->list, head);
1341 }
1342
1343 static int devm_name_match(struct device *dev, void *res,
1344 void *match_data)
1345 {
1346 struct fw_name_devm *fwn = res;
1347 return (fwn->magic == (unsigned long)match_data);
1348 }
1349
1350 static void dev_cache_fw_image(struct device *dev, void *data)
1351 {
1352 LIST_HEAD(todo);
1353 struct fw_cache_entry *fce;
1354 struct fw_cache_entry *fce_next;
1355 struct firmware_cache *fwc = &fw_cache;
1356
1357 devres_for_each_res(dev, fw_name_devm_release,
1358 devm_name_match, &fw_cache,
1359 dev_create_fw_entry, &todo);
1360
1361 list_for_each_entry_safe(fce, fce_next, &todo, list) {
1362 list_del(&fce->list);
1363
1364 spin_lock(&fwc->name_lock);
1365
1366 if (!__fw_entry_found(fce->name)) {
1367 list_add(&fce->list, &fwc->fw_names);
1368 } else {
1369 free_fw_cache_entry(fce);
1370 fce = NULL;
1371 }
1372 spin_unlock(&fwc->name_lock);
1373
1374 if (fce)
1375 async_schedule_domain(__async_dev_cache_fw_image,
1376 (void *)fce,
1377 &fw_cache_domain);
1378 }
1379 }
1380
1381 static void __device_uncache_fw_images(void)
1382 {
1383 struct firmware_cache *fwc = &fw_cache;
1384 struct fw_cache_entry *fce;
1385
1386 spin_lock(&fwc->name_lock);
1387 while (!list_empty(&fwc->fw_names)) {
1388 fce = list_entry(fwc->fw_names.next,
1389 struct fw_cache_entry, list);
1390 list_del(&fce->list);
1391 spin_unlock(&fwc->name_lock);
1392
1393 uncache_firmware(fce->name);
1394 free_fw_cache_entry(fce);
1395
1396 spin_lock(&fwc->name_lock);
1397 }
1398 spin_unlock(&fwc->name_lock);
1399 }
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411 static void device_cache_fw_images(void)
1412 {
1413 struct firmware_cache *fwc = &fw_cache;
1414 DEFINE_WAIT(wait);
1415
1416 pr_debug("%s\n", __func__);
1417
1418
1419 cancel_delayed_work_sync(&fwc->work);
1420
1421 fw_fallback_set_cache_timeout();
1422
1423 mutex_lock(&fw_lock);
1424 fwc->state = FW_LOADER_START_CACHE;
1425 dpm_for_each_dev(NULL, dev_cache_fw_image);
1426 mutex_unlock(&fw_lock);
1427
1428
1429 async_synchronize_full_domain(&fw_cache_domain);
1430
1431 fw_fallback_set_default_timeout();
1432 }
1433
1434
1435
1436
1437
1438
1439
1440 static void device_uncache_fw_images(void)
1441 {
1442 pr_debug("%s\n", __func__);
1443 __device_uncache_fw_images();
1444 }
1445
1446 static void device_uncache_fw_images_work(struct work_struct *work)
1447 {
1448 device_uncache_fw_images();
1449 }
1450
1451
1452
1453
1454
1455
1456
1457
1458 static void device_uncache_fw_images_delay(unsigned long delay)
1459 {
1460 queue_delayed_work(system_power_efficient_wq, &fw_cache.work,
1461 msecs_to_jiffies(delay));
1462 }
1463
1464 static int fw_pm_notify(struct notifier_block *notify_block,
1465 unsigned long mode, void *unused)
1466 {
1467 switch (mode) {
1468 case PM_HIBERNATION_PREPARE:
1469 case PM_SUSPEND_PREPARE:
1470 case PM_RESTORE_PREPARE:
1471
1472
1473
1474
1475 kill_pending_fw_fallback_reqs(true);
1476 device_cache_fw_images();
1477 break;
1478
1479 case PM_POST_SUSPEND:
1480 case PM_POST_HIBERNATION:
1481 case PM_POST_RESTORE:
1482
1483
1484
1485
1486 mutex_lock(&fw_lock);
1487 fw_cache.state = FW_LOADER_NO_CACHE;
1488 mutex_unlock(&fw_lock);
1489
1490 device_uncache_fw_images_delay(10 * MSEC_PER_SEC);
1491 break;
1492 }
1493
1494 return 0;
1495 }
1496
1497
1498 static int fw_suspend(void)
1499 {
1500 fw_cache.state = FW_LOADER_NO_CACHE;
1501 return 0;
1502 }
1503
1504 static struct syscore_ops fw_syscore_ops = {
1505 .suspend = fw_suspend,
1506 };
1507
1508 static int __init register_fw_pm_ops(void)
1509 {
1510 int ret;
1511
1512 spin_lock_init(&fw_cache.name_lock);
1513 INIT_LIST_HEAD(&fw_cache.fw_names);
1514
1515 INIT_DELAYED_WORK(&fw_cache.work,
1516 device_uncache_fw_images_work);
1517
1518 fw_cache.pm_notify.notifier_call = fw_pm_notify;
1519 ret = register_pm_notifier(&fw_cache.pm_notify);
1520 if (ret)
1521 return ret;
1522
1523 register_syscore_ops(&fw_syscore_ops);
1524
1525 return ret;
1526 }
1527
1528 static inline void unregister_fw_pm_ops(void)
1529 {
1530 unregister_syscore_ops(&fw_syscore_ops);
1531 unregister_pm_notifier(&fw_cache.pm_notify);
1532 }
1533 #else
1534 static void fw_cache_piggyback_on_request(struct fw_priv *fw_priv)
1535 {
1536 }
1537 static inline int register_fw_pm_ops(void)
1538 {
1539 return 0;
1540 }
1541 static inline void unregister_fw_pm_ops(void)
1542 {
1543 }
1544 #endif
1545
1546 static void __init fw_cache_init(void)
1547 {
1548 spin_lock_init(&fw_cache.lock);
1549 INIT_LIST_HEAD(&fw_cache.head);
1550 fw_cache.state = FW_LOADER_NO_CACHE;
1551 }
1552
1553 static int fw_shutdown_notify(struct notifier_block *unused1,
1554 unsigned long unused2, void *unused3)
1555 {
1556
1557
1558
1559
1560 kill_pending_fw_fallback_reqs(false);
1561
1562 return NOTIFY_DONE;
1563 }
1564
1565 static struct notifier_block fw_shutdown_nb = {
1566 .notifier_call = fw_shutdown_notify,
1567 };
1568
1569 static int __init firmware_class_init(void)
1570 {
1571 int ret;
1572
1573
1574 fw_cache_init();
1575
1576 ret = register_fw_pm_ops();
1577 if (ret)
1578 return ret;
1579
1580 ret = register_reboot_notifier(&fw_shutdown_nb);
1581 if (ret)
1582 goto out;
1583
1584 return register_sysfs_loader();
1585
1586 out:
1587 unregister_fw_pm_ops();
1588 return ret;
1589 }
1590
1591 static void __exit firmware_class_exit(void)
1592 {
1593 unregister_fw_pm_ops();
1594 unregister_reboot_notifier(&fw_shutdown_nb);
1595 unregister_sysfs_loader();
1596 }
1597
1598 fs_initcall(firmware_class_init);
1599 module_exit(firmware_class_exit);