summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-xbitbake/bin/bitbake-setup309
-rw-r--r--bitbake/lib/bb/runqueue.py5
-rw-r--r--bitbake/lib/bb/tests/setup.py77
-rw-r--r--meta-yocto-bsp/lib/oeqa/selftest/cases/systemd_boot.py2
-rw-r--r--meta/classes-recipe/core-image.bbclass1
-rw-r--r--meta/classes-recipe/populate_sdk_base.bbclass1
-rw-r--r--meta/classes-recipe/uboot-config.bbclass15
-rw-r--r--meta/conf/bitbake.conf6
-rw-r--r--meta/lib/oe/recipeutils.py2
-rw-r--r--meta/lib/oeqa/core/target/ssh.py12
-rw-r--r--meta/lib/oeqa/runtime/cases/logrotate.py7
-rw-r--r--meta/lib/oeqa/runtime/cases/ssh.py2
-rw-r--r--meta/lib/oeqa/runtime/cases/weston.py2
-rw-r--r--meta/lib/oeqa/sdk/cases/autotools.py2
-rw-r--r--meta/lib/oeqa/selftest/cases/bblayers.py4
-rw-r--r--meta/lib/oeqa/selftest/cases/meta_ide.py2
-rw-r--r--meta/lib/oeqa/utils/postactions.py4
-rw-r--r--meta/lib/patchtest/repo.py9
-rw-r--r--meta/recipes-bsp/u-boot/files/0001-Makefile-add-dependency-from-lib-to-arch-ARCH-lib.patch81
-rw-r--r--meta/recipes-bsp/u-boot/files/0001-nxp-Prepare-macros-for-KVM-changes.patch100
-rw-r--r--meta/recipes-bsp/u-boot/files/0002-arm-io.h-Fix-io-accessors-for-KVM.patch310
-rw-r--r--meta/recipes-bsp/u-boot/files/0003-qemu-arm-Enable-virtualizable-IO-accessors.patch41
-rw-r--r--meta/recipes-bsp/u-boot/u-boot-common.inc12
-rw-r--r--meta/recipes-bsp/u-boot/u-boot-configure.inc18
-rw-r--r--meta/recipes-bsp/u-boot/u-boot-tools_2025.10.bb (renamed from meta/recipes-bsp/u-boot/u-boot-tools_2025.07.bb)0
-rw-r--r--meta/recipes-bsp/u-boot/u-boot.inc16
-rw-r--r--meta/recipes-bsp/u-boot/u-boot_2025.10.bb (renamed from meta/recipes-bsp/u-boot/u-boot_2025.07.bb)0
-rw-r--r--meta/recipes-connectivity/openssl/openssl/0001-buildinfo-strip-sysroot-and-debug-prefix-map-from-co.patch2
-rw-r--r--meta/recipes-connectivity/openssl/openssl_3.5.4.bb (renamed from meta/recipes-connectivity/openssl/openssl_3.5.2.bb)2
-rw-r--r--meta/recipes-devtools/clang/clang_git.bb1
-rw-r--r--meta/recipes-devtools/clang/common-clang.inc8
-rw-r--r--meta/recipes-devtools/clang/openmp_git.bb1
-rw-r--r--meta/recipes-devtools/tcltk8/tcl8/0001-generic-tcl.h-use-Tcl_WideInt-for-seconds-in-Tcl_Tim.patch6
-rw-r--r--meta/recipes-devtools/tcltk8/tcl8/alter-includedir.patch8
-rw-r--r--meta/recipes-devtools/tcltk8/tcl8/fix_non_native_build_issue.patch4
-rw-r--r--meta/recipes-devtools/tcltk8/tcl8/interp.patch6
-rw-r--r--meta/recipes-devtools/tcltk8/tcl8/run-ptest2
-rw-r--r--meta/recipes-devtools/tcltk8/tcl8/tcl-add-soname.patch4
-rw-r--r--meta/recipes-devtools/tcltk8/tcl8/tcl-remove-hardcoded-install-path.patch4
-rw-r--r--meta/recipes-devtools/tcltk8/tcl8_8.6.17.bb (renamed from meta/recipes-devtools/tcltk8/tcl8_8.6.16.bb)4
-rw-r--r--meta/recipes-extended/ghostscript/ghostscript_10.06.0.bb2
-rw-r--r--meta/recipes-graphics/piglit/piglit_git.bb2
-rw-r--r--meta/recipes-kernel/linux-firmware/linux-firmware_20250917.bb1038
-rwxr-xr-xscripts/install-buildtools4
-rw-r--r--scripts/lib/wic/engine.py63
-rwxr-xr-xscripts/runqemu27
46 files changed, 1414 insertions, 814 deletions
diff --git a/bitbake/bin/bitbake-setup b/bitbake/bin/bitbake-setup
index e7b955213e..71b5b8de9f 100755
--- a/bitbake/bin/bitbake-setup
+++ b/bitbake/bin/bitbake-setup
@@ -32,9 +32,9 @@ logger = bb.msg.logger_create('bitbake-setup', sys.stdout)
32def cache_dir(top_dir): 32def cache_dir(top_dir):
33 return os.path.join(top_dir, '.bitbake-setup-cache') 33 return os.path.join(top_dir, '.bitbake-setup-cache')
34 34
35def init_bb_cache(settings, args): 35def init_bb_cache(top_dir, settings, args):
36 dldir = settings["default"]["dl-dir"] 36 dldir = settings["default"]["dl-dir"]
37 bb_cachedir = os.path.join(cache_dir(args.top_dir), 'bitbake-cache') 37 bb_cachedir = os.path.join(cache_dir(top_dir), 'bitbake-cache')
38 38
39 d = bb.data.init() 39 d = bb.data.init()
40 d.setVar("DL_DIR", dldir) 40 d.setVar("DL_DIR", dldir)
@@ -162,8 +162,31 @@ def setup_bitbake_build(bitbake_config, layerdir, builddir, thisdir):
162 builddir = os.path.realpath(builddir) 162 builddir = os.path.realpath(builddir)
163 cmd = "cd {}\nset {}\n. ./oe-init-build-env\n".format(oeinitbuildenvdir, builddir) 163 cmd = "cd {}\nset {}\n. ./oe-init-build-env\n".format(oeinitbuildenvdir, builddir)
164 initbuild_in_builddir = os.path.join(builddir, 'init-build-env') 164 initbuild_in_builddir = os.path.join(builddir, 'init-build-env')
165
166 with open(initbuild_in_builddir, 'w') as f:
167 f.write("# init-build-env wrapper created by bitbake-setup\n")
168 f.write(cmd + '\n')
169
170 def _prepend_passthrough_to_init_build_env(builddir):
171 env = bitbake_config.get("bb-env-passthrough-additions")
172 if not env:
173 return
174
175 initbuild_in_builddir = os.path.join(builddir, 'init-build-env')
176 with open(initbuild_in_builddir) as f:
177 content = f.read()
178
179 joined = " \\\n".join(env)
180 env = "export BB_ENV_PASSTHROUGH_ADDITIONS=\" \\\n"
181 env += "${BB_ENV_PASSTHROUGH_ADDITIONS} \\\n"
182 env += joined
183 env += '"'
184
165 with open(initbuild_in_builddir, 'w') as f: 185 with open(initbuild_in_builddir, 'w') as f:
166 f.write(cmd) 186 f.write("# environment passthrough added by bitbake-setup\n")
187 f.write(env + '\n')
188 f.write('\n')
189 f.write(content)
167 190
168 bitbake_builddir = os.path.join(builddir, "build") 191 bitbake_builddir = os.path.join(builddir, "build")
169 print("Setting up bitbake configuration in\n {}\n".format(bitbake_builddir)) 192 print("Setting up bitbake configuration in\n {}\n".format(bitbake_builddir))
@@ -194,6 +217,8 @@ def setup_bitbake_build(bitbake_config, layerdir, builddir, thisdir):
194 return 217 return
195 _make_init_build_env(bitbake_builddir, os.path.realpath(oeinitbuildenvdir)) 218 _make_init_build_env(bitbake_builddir, os.path.realpath(oeinitbuildenvdir))
196 219
220 _prepend_passthrough_to_init_build_env(bitbake_builddir)
221
197 siteconf_symlink = os.path.join(bitbake_confdir, "site.conf") 222 siteconf_symlink = os.path.join(bitbake_confdir, "site.conf")
198 siteconf = os.path.normpath(os.path.join(builddir, '..', "site.conf")) 223 siteconf = os.path.normpath(os.path.join(builddir, '..', "site.conf"))
199 if os.path.lexists(siteconf_symlink): 224 if os.path.lexists(siteconf_symlink):
@@ -364,7 +389,7 @@ def choose_fragments(possibilities, parameters, non_interactive, skip_selection)
364 choices[k] = options_enumerated[option_n][1] 389 choices[k] = options_enumerated[option_n][1]
365 return choices 390 return choices
366 391
367def obtain_config(settings, args, source_overrides, d): 392def obtain_config(top_dir, settings, args, source_overrides, d):
368 if args.config: 393 if args.config:
369 config_id = args.config[0] 394 config_id = args.config[0]
370 config_parameters = args.config[1:] 395 config_parameters = args.config[1:]
@@ -382,7 +407,7 @@ def obtain_config(settings, args, source_overrides, d):
382 upstream_config = {'type':'network','uri':config_id,'name':get_config_name(config_id),'data':json.load(f)} 407 upstream_config = {'type':'network','uri':config_id,'name':get_config_name(config_id),'data':json.load(f)}
383 else: 408 else:
384 print("Looking up config {} in configuration registry".format(config_id)) 409 print("Looking up config {} in configuration registry".format(config_id))
385 registry_path = update_registry(settings["default"]["registry"], cache_dir(args.top_dir), d) 410 registry_path = update_registry(settings["default"]["registry"], cache_dir(top_dir), d)
386 registry_configs = list_registry(registry_path, with_expired=True) 411 registry_configs = list_registry(registry_path, with_expired=True)
387 if config_id not in registry_configs: 412 if config_id not in registry_configs:
388 raise Exception("Config {} not found in configuration registry, re-run 'init' without parameters to choose from available configurations.".format(config_id)) 413 raise Exception("Config {} not found in configuration registry, re-run 'init' without parameters to choose from available configurations.".format(config_id))
@@ -391,7 +416,7 @@ def obtain_config(settings, args, source_overrides, d):
391 if has_expired(expiry_date): 416 if has_expired(expiry_date):
392 print("This configuration is no longer supported after {}. Please consider changing to a supported configuration.".format(expiry_date)) 417 print("This configuration is no longer supported after {}. Please consider changing to a supported configuration.".format(expiry_date))
393 else: 418 else:
394 registry_path = update_registry(settings["default"]["registry"], cache_dir(args.top_dir), d) 419 registry_path = update_registry(settings["default"]["registry"], cache_dir(top_dir), d)
395 registry_configs = list_registry(registry_path, with_expired=True) 420 registry_configs = list_registry(registry_path, with_expired=True)
396 config_id = choose_config(registry_configs, args.non_interactive) 421 config_id = choose_config(registry_configs, args.non_interactive)
397 config_parameters = [] 422 config_parameters = []
@@ -404,18 +429,19 @@ def obtain_config(settings, args, source_overrides, d):
404 upstream_config['skip-selection'] = args.skip_selection 429 upstream_config['skip-selection'] = args.skip_selection
405 return upstream_config 430 return upstream_config
406 431
407def init_config(settings, args, d): 432def init_config(top_dir, settings, args, d):
408 stdout = sys.stdout 433 stdout = sys.stdout
409 def handle_task_progress(event, d): 434 def handle_task_progress(event, d):
410 rate = event.rate if event.rate else '' 435 rate = event.rate if event.rate else ''
411 progress = event.progress if event.progress > 0 else 0 436 progress = event.progress if event.progress > 0 else 0
412 print("{}% {} ".format(progress, rate), file=stdout, end='\r') 437 print("{}% {} ".format(progress, rate), file=stdout, end='\r')
413 438
439 create_siteconf(top_dir, args.non_interactive)
414 source_overrides = json.load(open(args.source_overrides)) if args.source_overrides else {'sources':{}} 440 source_overrides = json.load(open(args.source_overrides)) if args.source_overrides else {'sources':{}}
415 upstream_config = obtain_config(settings, args, source_overrides, d) 441 upstream_config = obtain_config(top_dir, settings, args, source_overrides, d)
416 print("\nRun 'bitbake-setup init --non-interactive {}' to select this configuration non-interactively.\n".format(" ".join(upstream_config['non-interactive-cmdline-options']))) 442 print("\nRun 'bitbake-setup init --non-interactive {}' to select this configuration non-interactively.\n".format(" ".join(upstream_config['non-interactive-cmdline-options'])))
417 443
418 builddir = os.path.join(os.path.abspath(args.top_dir), args.build_dir_name or "{}-{}".format(upstream_config['name']," ".join(upstream_config['non-interactive-cmdline-options'][1:]).replace(" ","-").replace("/","_"))) 444 builddir = os.path.join(os.path.abspath(top_dir), args.build_dir_name or "{}-{}".format(upstream_config['name']," ".join(upstream_config['non-interactive-cmdline-options'][1:]).replace(" ","-").replace("/","_")))
419 if os.path.exists(os.path.join(builddir, "layers")): 445 if os.path.exists(os.path.join(builddir, "layers")):
420 print("Build already initialized in {}\nUse 'bitbake-setup status' to check if it needs to be updated or 'bitbake-setup update' to perform the update.".format(builddir)) 446 print("Build already initialized in {}\nUse 'bitbake-setup status' to check if it needs to be updated or 'bitbake-setup update' to perform the update.".format(builddir))
421 return 447 return
@@ -486,7 +512,7 @@ def are_layers_changed(layers, layerdir, d):
486 512
487 return changed 513 return changed
488 514
489def build_status(settings, args, d, update=False): 515def build_status(top_dir, settings, args, d, update=False):
490 builddir = args.build_dir 516 builddir = args.build_dir
491 517
492 confdir = os.path.join(builddir, "config") 518 confdir = os.path.join(builddir, "config")
@@ -498,7 +524,7 @@ def build_status(settings, args, d, update=False):
498 args.non_interactive = True 524 args.non_interactive = True
499 args.skip_selection = current_upstream_config['skip-selection'] 525 args.skip_selection = current_upstream_config['skip-selection']
500 source_overrides = current_upstream_config["source-overrides"] 526 source_overrides = current_upstream_config["source-overrides"]
501 new_upstream_config = obtain_config(settings, args, source_overrides, d) 527 new_upstream_config = obtain_config(top_dir, settings, args, source_overrides, d)
502 528
503 write_config(new_upstream_config, confdir) 529 write_config(new_upstream_config, confdir)
504 config_diff = bb.process.run('git -C {} diff'.format(confdir))[0] 530 config_diff = bb.process.run('git -C {} diff'.format(confdir))[0]
@@ -519,8 +545,8 @@ def build_status(settings, args, d, update=False):
519 545
520 print("\nConfiguration in {} has not changed.".format(builddir)) 546 print("\nConfiguration in {} has not changed.".format(builddir))
521 547
522def build_update(settings, args, d): 548def build_update(top_dir, settings, args, d):
523 build_status(settings, args, d, update=True) 549 build_status(top_dir, settings, args, d, update=True)
524 550
525def do_fetch(fetcher, dir): 551def do_fetch(fetcher, dir):
526 # git fetcher simply dumps git output to stdout; in bitbake context that is redirected to temp/log.do_fetch 552 # git fetcher simply dumps git output to stdout; in bitbake context that is redirected to temp/log.do_fetch
@@ -570,8 +596,8 @@ def list_registry(registry_path, with_expired):
570 json_data[config_name] = {"description": config_desc} 596 json_data[config_name] = {"description": config_desc}
571 return json_data 597 return json_data
572 598
573def list_configs(settings, args, d): 599def list_configs(top_dir, settings, args, d):
574 registry_path = update_registry(settings["default"]["registry"], cache_dir(args.top_dir), d) 600 registry_path = update_registry(settings["default"]["registry"], cache_dir(top_dir), d)
575 json_data = list_registry(registry_path, args.with_expired) 601 json_data = list_registry(registry_path, args.with_expired)
576 print("\nAvailable configurations:") 602 print("\nAvailable configurations:")
577 for config_name, config_data in json_data.items(): 603 for config_name, config_data in json_data.items():
@@ -589,7 +615,7 @@ def list_configs(settings, args, d):
589 json.dump(json_data, f, sort_keys=True, indent=4) 615 json.dump(json_data, f, sort_keys=True, indent=4)
590 print("Available configurations written into {}".format(args.write_json)) 616 print("Available configurations written into {}".format(args.write_json))
591 617
592def install_buildtools(settings, args, d): 618def install_buildtools(top_dir, settings, args, d):
593 buildtools_install_dir = os.path.join(args.build_dir, 'buildtools') 619 buildtools_install_dir = os.path.join(args.build_dir, 'buildtools')
594 if os.path.exists(buildtools_install_dir): 620 if os.path.exists(buildtools_install_dir):
595 if not args.force: 621 if not args.force:
@@ -609,117 +635,68 @@ def install_buildtools(settings, args, d):
609 subprocess.check_call("{} -d {} --downloads-directory {}".format(install_buildtools, buildtools_install_dir, buildtools_download_dir), shell=True) 635 subprocess.check_call("{} -d {} --downloads-directory {}".format(install_buildtools, buildtools_install_dir, buildtools_download_dir), shell=True)
610 636
611def default_settings_path(top_dir): 637def default_settings_path(top_dir):
612 return os.path.join(top_dir, 'bitbake-setup.conf') 638 return os.path.join(top_dir, 'settings.conf')
613 639
614def write_settings(top_dir, force_replace, non_interactive=True): 640def create_siteconf(top_dir, non_interactive=True):
615 settings_path = default_settings_path(top_dir) 641 siteconfpath = os.path.join(top_dir, 'site.conf')
616 if not os.path.exists(settings_path) or force_replace: 642 print('A common site.conf file will be created, please edit or replace before running builds\n {}\n'.format(siteconfpath))
617 643 if not non_interactive:
618 settings = configparser.ConfigParser() 644 y_or_n = input('Proceed? (y/N): ')
619 settings['default'] = { 645 if y_or_n != 'y':
620 'registry':default_registry, 646 exit()
621 'dl-dir':os.path.join(top_dir, '.bitbake-setup-downloads'), 647
622 } 648 os.makedirs(os.path.dirname(top_dir), exist_ok=True)
623 os.makedirs(os.path.dirname(settings_path), exist_ok=True) 649 if os.path.exists(siteconfpath):
624 650 backup_siteconf = siteconfpath + "-backup.{}".format(time.strftime("%Y%m%d%H%M%S"))
625 siteconfpath = os.path.join(top_dir, 'site.conf') 651 os.rename(siteconfpath, backup_siteconf)
626 print('Configuration registry set to\n {}\n'.format(settings['default']['registry'])) 652 print("Previous settings are in {}".format(backup_siteconf))
627 print('Bitbake-setup download cache (DL_DIR) set to\n {}\n'.format(settings['default']['dl-dir'])) 653 with open(siteconfpath, 'w') as siteconffile:
628 print('A new settings file will be created in\n {}\n'.format(settings_path)) 654 siteconffile.write('# This file is intended for build host-specific bitbake settings\n')
629 print('A common site.conf file will be created, please edit or replace before running builds\n {}\n'.format(siteconfpath))
630 if not non_interactive:
631 y_or_n = input('Bitbake-setup will be configured with the above settings in {}, (y/N): '.format(top_dir))
632 if y_or_n != 'y':
633 print("\nYou can run 'bitbake-setup install-settings' to edit them before setting up builds")
634 exit()
635 print()
636
637 if os.path.exists(settings_path):
638 backup_conf = settings_path + "-backup.{}".format(time.strftime("%Y%m%d%H%M%S"))
639 os.rename(settings_path, backup_conf)
640 print("Previous settings are in {}".format(backup_conf))
641 with open(settings_path, 'w') as settingsfile:
642 settings.write(settingsfile)
643
644 if os.path.exists(siteconfpath):
645 backup_siteconf = siteconfpath + "-backup.{}".format(time.strftime("%Y%m%d%H%M%S"))
646 os.rename(siteconfpath, backup_siteconf)
647 print("Previous settings are in {}".format(backup_siteconf))
648 with open(siteconfpath, 'w') as siteconffile:
649 siteconffile.write('# This file is intended for build host-specific bitbake settings\n')
650
651def load_settings(top_dir, non_interactive):
652 # This creates a new settings file if it does not yet exist
653 write_settings(top_dir, force_replace=False, non_interactive=non_interactive)
654
655 settings_path = default_settings_path(top_dir)
656 settings = configparser.ConfigParser()
657 print('Loading settings from\n {}\n'.format(settings_path))
658 settings.read_file(open(settings_path))
659 return settings
660 655
661def global_settings_path(args): 656def global_settings_path(args):
662 return os.path.abspath(args.global_settings) if args.global_settings else os.path.join(os.path.expanduser('~'), '.config', 'bitbake-setup', 'config') 657 return os.path.abspath(args.global_settings) if args.global_settings else os.path.join(os.path.expanduser('~'), '.config', 'bitbake-setup', 'settings.conf')
663
664def write_global_settings(settings_path, force_replace, non_interactive=True):
665 if not os.path.exists(settings_path) or force_replace:
666
667 settings = configparser.ConfigParser()
668 settings['default'] = {
669 'top-dir-prefix':os.path.expanduser('~'),
670 'top-dir-name':'bitbake-builds'
671 }
672 os.makedirs(os.path.dirname(settings_path), exist_ok=True)
673 print('Configuring global settings in\n {}\n'.format(settings_path))
674 print('Top directory prefix (where all top level directories are created) set to\n {}\n'.format(settings['default']['top-dir-prefix']))
675 print('Top directory name (this is added to the top directory prefix to form a top directory where builds are set up) set to\n {}\n'.format(settings['default']['top-dir-name']))
676 if not non_interactive:
677 y_or_n = input('Write out the global settings as specified above (y/N)? ')
678 if y_or_n != 'y':
679 print("\nYou can run 'bitbake-setup install-global-settings' to edit them before setting up builds")
680 exit()
681 print()
682
683 if os.path.exists(settings_path):
684 backup_conf = settings_path + "-backup.{}".format(time.strftime("%Y%m%d%H%M%S"))
685 os.rename(settings_path, backup_conf)
686 print("Previous global settings are in {}".format(backup_conf))
687 with open(settings_path, 'w') as settingsfile:
688 settings.write(settingsfile)
689
690def load_global_settings(settings_path, non_interactive):
691 # This creates a new settings file if it does not yet exist
692 write_global_settings(settings_path, force_replace=False, non_interactive=non_interactive)
693 658
659def load_settings(settings_path):
694 settings = configparser.ConfigParser() 660 settings = configparser.ConfigParser()
695 print('Loading global settings from\n {}\n'.format(settings_path)) 661 if os.path.exists(settings_path):
696 settings.read_file(open(settings_path)) 662 print('Loading settings from\n {}\n'.format(settings_path))
663 settings.read_file(open(settings_path))
697 return settings 664 return settings
698 665
699def change_settings(top_dir, new_settings): 666def change_setting(top_dir, args):
700 settings = load_settings(top_dir, non_interactive=True) 667 if vars(args)['global']:
701 for section, section_settings in new_settings.items(): 668 settings_path = global_settings_path(args)
702 for setting, value in section_settings.items(): 669 else:
703 settings[section][setting] = value 670 settings_path = default_settings_path(top_dir)
704 print("Setting '{}' in section '{}' is changed to '{}'".format(setting, section, value)) 671 settings = load_settings(settings_path)
705 672
706 settings_path = default_settings_path(top_dir) 673 if args.section and args.key and args.value:
674 if args.section not in settings.keys():
675 settings[args.section] = {}
676 settings[args.section][args.key] = args.value
677 print("Setting '{}' in section '{}' is changed to '{}'".format(args.key, args.section, args.value))
678 if args.unset:
679 section = args.unset[0]
680 setting = args.unset[1]
681 if section in settings.keys() and setting in settings[section].keys():
682 del settings[section][setting]
683 print("Setting '{} in section '{}' is removed".format(setting, section))
684
685 os.makedirs(os.path.dirname(settings_path), exist_ok=True)
707 with open(settings_path, 'w') as settingsfile: 686 with open(settings_path, 'w') as settingsfile:
708 settings.write(settingsfile) 687 settings.write(settingsfile)
709 print("New settings written to {}".format(settings_path)) 688 print("New settings written to {}".format(settings_path))
710 return settings
711 689
712def change_global_settings(settings_path, new_settings): 690def list_settings(all_settings):
713 settings = load_global_settings(settings_path, non_interactive=True) 691 for section, section_settings in all_settings.items():
714 for section, section_settings in new_settings.items(): 692 for key, value in section_settings.items():
715 for setting, value in section_settings.items(): 693 print("{} {} {}".format(section, key, value))
716 settings[section][setting] = value
717 print("Setting '{}' in section '{}' is changed to '{}'".format(setting, section, value))
718 694
719 with open(settings_path, 'w') as settingsfile: 695def settings_func(top_dir, all_settings, args):
720 settings.write(settingsfile) 696 if args.list:
721 print("New global settings written to {}".format(settings_path)) 697 list_settings(all_settings)
722 return settings 698 else:
699 change_setting(top_dir, args)
723 700
724def get_build_dir_via_bbpath(): 701def get_build_dir_via_bbpath():
725 bbpath = os.environ.get('BBPATH') 702 bbpath = os.environ.get('BBPATH')
@@ -730,7 +707,7 @@ def get_build_dir_via_bbpath():
730 return build_dir 707 return build_dir
731 return None 708 return None
732 709
733def get_top_dir(args, global_settings): 710def get_top_dir(args, settings):
734 build_dir_via_bbpath = get_build_dir_via_bbpath() 711 build_dir_via_bbpath = get_build_dir_via_bbpath()
735 if build_dir_via_bbpath: 712 if build_dir_via_bbpath:
736 top_dir = os.path.dirname(build_dir_via_bbpath) 713 top_dir = os.path.dirname(build_dir_via_bbpath)
@@ -738,20 +715,27 @@ def get_top_dir(args, global_settings):
738 return top_dir 715 return top_dir
739 716
740 if hasattr(args, 'build_dir'): 717 if hasattr(args, 'build_dir'):
741 # commands without --top-dir-prefix/name arguments (status, update) still need to know where
742 # the top dir is, but it should be auto-deduced as parent of args.build_dir
743 top_dir = os.path.dirname(os.path.normpath(args.build_dir)) 718 top_dir = os.path.dirname(os.path.normpath(args.build_dir))
744 return top_dir 719 return top_dir
745 720
746 top_dir_prefix = args.top_dir_prefix if args.top_dir_prefix else global_settings['default']['top-dir-prefix'] 721 top_dir_prefix = settings['default']['top-dir-prefix']
747 top_dir_name = args.top_dir_name if args.top_dir_name else global_settings['default']['top-dir-name'] 722 top_dir_name = settings['default']['top-dir-name']
748 return os.path.join(top_dir_prefix, top_dir_name) 723 return os.path.join(top_dir_prefix, top_dir_name)
749 724
750def main(): 725def merge_settings(builtin_settings, global_settings, local_settings, cmdline_settings):
751 def add_top_dir_arg(parser): 726 all_settings = builtin_settings
752 parser.add_argument('--top-dir-prefix', help='Top level directory prefix. This is where all top level directories are created.') 727
753 parser.add_argument('--top-dir-name', help='Top level directory name. Together with the top directory prefix this forms a top directory where builds are set up and downloaded configurations and layers are cached for reproducibility and offline builds.') 728 for s in (global_settings, local_settings):
729 for section, section_settings in s.items():
730 for setting, value in section_settings.items():
731 all_settings[section][setting] = value
732
733 for (section, setting, value) in cmdline_settings:
734 all_settings[section][setting] = value
754 735
736 return all_settings
737
738def main():
755 def add_build_dir_arg(parser): 739 def add_build_dir_arg(parser):
756 build_dir = get_build_dir_via_bbpath() 740 build_dir = get_build_dir_via_bbpath()
757 if build_dir: 741 if build_dir:
@@ -767,18 +751,17 @@ def main():
767 parser.add_argument('-q', '--quiet', help='Print only errors', action='store_true') 751 parser.add_argument('-q', '--quiet', help='Print only errors', action='store_true')
768 parser.add_argument('--color', choices=['auto', 'always', 'never'], default='auto', help='Colorize output (where %(metavar)s is %(choices)s)', metavar='COLOR') 752 parser.add_argument('--color', choices=['auto', 'always', 'never'], default='auto', help='Colorize output (where %(metavar)s is %(choices)s)', metavar='COLOR')
769 parser.add_argument('--no-network', action='store_true', help='Do not check whether configuration repositories and layer repositories have been updated; use only the local cache.') 753 parser.add_argument('--no-network', action='store_true', help='Do not check whether configuration repositories and layer repositories have been updated; use only the local cache.')
770 parser.add_argument('--global-settings', action='store', help='Path to the global settings file where defaults for top directory prefix and name can be specified') 754 parser.add_argument('--global-settings', action='store', help='Path to the global settings file.')
755 parser.add_argument('--setting', default=[], action='append', nargs=3, help='Modify a setting (for this bitbake-setup invocation only), for example "--setting default top-dir-prefix /path/to/top/dir".')
771 756
772 subparsers = parser.add_subparsers() 757 subparsers = parser.add_subparsers()
773 758
774 parser_list = subparsers.add_parser('list', help='List available configurations') 759 parser_list = subparsers.add_parser('list', help='List available configurations')
775 add_top_dir_arg(parser_list)
776 parser_list.add_argument('--with-expired', action='store_true', help='List also configurations that are no longer supported due to reaching their end-of-life dates.') 760 parser_list.add_argument('--with-expired', action='store_true', help='List also configurations that are no longer supported due to reaching their end-of-life dates.')
777 parser_list.add_argument('--write-json', action='store', help='Write available configurations into a json file so they can be programmatically processed.') 761 parser_list.add_argument('--write-json', action='store', help='Write available configurations into a json file so they can be programmatically processed.')
778 parser_list.set_defaults(func=list_configs) 762 parser_list.set_defaults(func=list_configs)
779 763
780 parser_init = subparsers.add_parser('init', help='Select a configuration and initialize a build from it') 764 parser_init = subparsers.add_parser('init', help='Select a configuration and initialize a build from it')
781 add_top_dir_arg(parser_init)
782 parser_init.add_argument('config', nargs='*', help="path/URL/id to a configuration file (use 'list' command to get available ids), followed by configuration options. Bitbake-setup will ask to choose from available choices if command line doesn't completely specify them.") 765 parser_init.add_argument('config', nargs='*', help="path/URL/id to a configuration file (use 'list' command to get available ids), followed by configuration options. Bitbake-setup will ask to choose from available choices if command line doesn't completely specify them.")
783 parser_init.add_argument('--non-interactive', action='store_true', help='Do not ask to interactively choose from available options; if bitbake-setup cannot make a decision it will stop with a failure.') 766 parser_init.add_argument('--non-interactive', action='store_true', help='Do not ask to interactively choose from available options; if bitbake-setup cannot make a decision it will stop with a failure.')
784 parser_init.add_argument('--source-overrides', action='store', help='Override sources information (repositories/revisions) with values from a local json file.') 767 parser_init.add_argument('--source-overrides', action='store', help='Override sources information (repositories/revisions) with values from a local json file.')
@@ -799,25 +782,14 @@ def main():
799 parser_install_buildtools.add_argument('--force', action='store_true', help='Force a reinstall of buildtools over the previous installation.') 782 parser_install_buildtools.add_argument('--force', action='store_true', help='Force a reinstall of buildtools over the previous installation.')
800 parser_install_buildtools.set_defaults(func=install_buildtools) 783 parser_install_buildtools.set_defaults(func=install_buildtools)
801 784
802 parser_install_settings = subparsers.add_parser('install-settings', help='Write a settings file with default values into the top level directory (contains the location of build configuration registry, downloads directory and other settings specific to a top directory)') 785 parser_settings = subparsers.add_parser('settings', help='List current settings, or set or unset a setting in a settings file (e.g. the default prefix and name of the top directory, the location of build configuration registry, downloads directory and other settings specific to a top directory)')
803 add_top_dir_arg(parser_install_settings) 786 parser_settings.add_argument('section', nargs='?', help="Section in a settings file, typically 'default'")
804 parser_install_settings.set_defaults(func=write_settings) 787 parser_settings.add_argument('key', nargs='?', help="Name of the setting")
805 788 parser_settings.add_argument('value', nargs='?', help="Value of the setting")
806 parser_install_global_settings = subparsers.add_parser('install-global-settings', help='Write a global settings file with default values (contains the default prefix and name of the top directory)') 789 parser_settings.add_argument('--global', action='store_true', help="Modify the setting in a global settings file, rather than one specific to a top directory")
807 parser_install_global_settings.set_defaults(func=write_global_settings) 790 parser_settings.add_argument('--unset', nargs=2, help="Unset a setting, e.g. 'bitbake-setup setting --unset default registry' would revert to the registry setting in a global settings file")
808 791 parser_settings.add_argument('-l' ,'--list', action='store_true', help="List all settings with their values")
809 parser_change_setting = subparsers.add_parser('change-setting', help='Change a setting in the settings file') 792 parser_settings.set_defaults(func=settings_func)
810 add_top_dir_arg(parser_change_setting)
811 parser_change_setting.add_argument('section', help="Section in a settings file, typically 'default'")
812 parser_change_setting.add_argument('key', help="Name of the setting")
813 parser_change_setting.add_argument('value', help="Value of the setting")
814 parser_change_setting.set_defaults(func=change_settings)
815
816 parser_change_global_setting = subparsers.add_parser('change-global-setting', help='Change a setting in the global settings file')
817 parser_change_global_setting.add_argument('section', help="Section in a global settings file, typically 'default'")
818 parser_change_global_setting.add_argument('key', help="Name of the setting")
819 parser_change_global_setting.add_argument('value', help="Value of the setting")
820 parser_change_global_setting.set_defaults(func=change_global_settings)
821 793
822 args = parser.parse_args() 794 args = parser.parse_args()
823 795
@@ -834,13 +806,6 @@ def main():
834 level=logger.getEffectiveLevel()) 806 level=logger.getEffectiveLevel())
835 807
836 if 'func' in args: 808 if 'func' in args:
837 if args.func == write_global_settings:
838 write_global_settings(global_settings_path(args), force_replace=True)
839 return
840 elif args.func == change_global_settings:
841 change_global_settings(global_settings_path(args), {args.section:{args.key:args.value}})
842 return
843
844 if hasattr(args, 'build_dir'): 809 if hasattr(args, 'build_dir'):
845 if not os.path.exists(os.path.join(args.build_dir,'build', 'init-build-env')): 810 if not os.path.exists(os.path.join(args.build_dir,'build', 'init-build-env')):
846 print("Not a valid build directory: build/init-build-env does not exist in {}".format(args.build_dir)) 811 print("Not a valid build directory: build/init-build-env does not exist in {}".format(args.build_dir))
@@ -849,19 +814,31 @@ def main():
849 if not hasattr(args, 'non_interactive'): 814 if not hasattr(args, 'non_interactive'):
850 args.non_interactive = True 815 args.non_interactive = True
851 816
852 global_settings = load_global_settings(global_settings_path(args), args.non_interactive) 817 builtin_settings = {}
853 args.top_dir = get_top_dir(args, global_settings) 818 builtin_settings['default'] = {
819 'top-dir-prefix':os.path.expanduser('~'),
820 'top-dir-name':'bitbake-builds',
821 'registry':default_registry,
822 }
854 823
855 print('Bitbake-setup is using {} as top directory (can be changed with --top-dir-prefix/name arguments or by setting them in {}).\n'.format(args.top_dir, global_settings_path(args))) 824 global_settings = load_settings(global_settings_path(args))
856 if args.func == write_settings: 825 top_dir = get_top_dir(args, merge_settings(builtin_settings, global_settings, {}, args.setting))
857 write_settings(args.top_dir, force_replace=True) 826
858 elif args.func == change_settings: 827 # This cannot be set with the rest of the builtin settings as top_dir needs to be determined first
859 change_settings(args.top_dir, {args.section:{args.key:args.value}}) 828 builtin_settings['default']['dl-dir'] = os.path.join(top_dir, '.bitbake-setup-downloads')
860 else: 829
861 settings = load_settings(args.top_dir, args.non_interactive) 830 topdir_settings = load_settings(default_settings_path(top_dir))
862 d = init_bb_cache(settings, args) 831 all_settings = merge_settings(builtin_settings, global_settings, topdir_settings, args.setting)
863 args.func(settings, args, d) 832
864 save_bb_cache() 833 if args.func == settings_func:
834 settings_func(top_dir, all_settings, args)
835 return
836
837 print('Bitbake-setup is using {} as top directory ("bitbake-setup setting --help" shows how to change it).\n'.format(top_dir, global_settings_path(args)))
838
839 d = init_bb_cache(top_dir, all_settings, args)
840 args.func(top_dir, all_settings, args, d)
841 save_bb_cache()
865 else: 842 else:
866 from argparse import Namespace 843 from argparse import Namespace
867 parser.print_help() 844 parser.print_help()
diff --git a/bitbake/lib/bb/runqueue.py b/bitbake/lib/bb/runqueue.py
index 96d70080d3..63d4edd892 100644
--- a/bitbake/lib/bb/runqueue.py
+++ b/bitbake/lib/bb/runqueue.py
@@ -1610,6 +1610,7 @@ class RunQueue:
1610 1610
1611 if self.state == RunQueueState.SCENE_INIT: 1611 if self.state == RunQueueState.SCENE_INIT:
1612 self.start_worker(self.rqexe) 1612 self.start_worker(self.rqexe)
1613 self.rqdata.init_progress_reporter.finish()
1613 1614
1614 # If we don't have any setscene functions, skip execution 1615 # If we don't have any setscene functions, skip execution
1615 if not self.rqdata.runq_setscene_tids: 1616 if not self.rqdata.runq_setscene_tids:
@@ -1947,10 +1948,6 @@ class RunQueueExecute:
1947 self.sqdata = SQData() 1948 self.sqdata = SQData()
1948 build_scenequeue_data(self.sqdata, self.rqdata, self) 1949 build_scenequeue_data(self.sqdata, self.rqdata, self)
1949 1950
1950 # Finish the "Initialising tasks" progress bar before
1951 # update_scenequeue_data() creates another one.
1952 self.rqdata.init_progress_reporter.finish()
1953
1954 update_scenequeue_data(self.sqdata.sq_revdeps, self.sqdata, self.rqdata, self.rq, self.cooker, self.stampcache, self, summary=True) 1951 update_scenequeue_data(self.sqdata.sq_revdeps, self.sqdata, self.rqdata, self.rq, self.cooker, self.stampcache, self, summary=True)
1955 1952
1956 # Compute a list of 'stale' sstate tasks where the current hash does not match the one 1953 # Compute a list of 'stale' sstate tasks where the current hash does not match the one
diff --git a/bitbake/lib/bb/tests/setup.py b/bitbake/lib/bb/tests/setup.py
index 747a9b733f..b238926b29 100644
--- a/bitbake/lib/bb/tests/setup.py
+++ b/bitbake/lib/bb/tests/setup.py
@@ -120,6 +120,22 @@ print("BBPATH is {{}}".format(os.environ["BBPATH"]))
120 "oe-fragments": ["test-fragment-2"] 120 "oe-fragments": ["test-fragment-2"]
121 }, 121 },
122 { 122 {
123 "name": "gizmo-env-passthrough",
124 "description": "Gizmo build configuration with environment-passthrough",
125 "bb-layers": ["layerC","layerD/meta-layer"],
126 "oe-fragments": ["test-fragment-1"],
127 "bb-env-passthrough-additions": [
128 "BUILD_ID",
129 "BUILD_DATE",
130 "BUILD_SERVER"
131 ]
132 },
133 {
134 "name": "gizmo-no-fragment",
135 "description": "Gizmo no-fragment template-only build configuration",
136 "oe-template": "test-configuration-gizmo"
137 },
138 {
123 "name": "gadget-notemplate", 139 "name": "gadget-notemplate",
124 "description": "Gadget notemplate build configuration", 140 "description": "Gadget notemplate build configuration",
125 "bb-layers": ["layerA","layerB/meta-layer"], 141 "bb-layers": ["layerA","layerB/meta-layer"],
@@ -189,8 +205,18 @@ print("BBPATH is {{}}".format(os.environ["BBPATH"]))
189 else: 205 else:
190 self.assertIn(os.path.join(buildpath, "layers", l), bblayers) 206 self.assertIn(os.path.join(buildpath, "layers", l), bblayers)
191 207
192 for f in bitbake_config["oe-fragments"]: 208 if 'oe-fragment' in bitbake_config.keys():
193 self.assertTrue(os.path.exists(os.path.join(bb_conf_path, f))) 209 for f in bitbake_config["oe-fragments"]:
210 self.assertTrue(os.path.exists(os.path.join(bb_conf_path, f)))
211
212 if 'bb-environment-passthrough' in bitbake_config.keys():
213 with open(os.path.join(bb_build_path, 'init-build-env'), 'r') as f:
214 init_build_env = f.read()
215 self.assertTrue('BB_ENV_PASSTHROUGH_ADDITIONS' in init_build_env)
216 self.assertTrue('BUILD_ID' in init_build_env)
217 self.assertTrue('BUILD_DATE' in init_build_env)
218 self.assertTrue('BUILD_SERVER' in init_build_env)
219 # a more throrough test could be to initialize a bitbake build-env, export FOO to the shell environment, set the env-passthrough on it and finally check against 'bitbake-getvar FOO'
194 220
195 221
196 def test_setup(self): 222 def test_setup(self):
@@ -206,22 +232,29 @@ print("BBPATH is {{}}".format(os.environ["BBPATH"]))
206 self.runbbsetup("--help") 232 self.runbbsetup("--help")
207 233
208 # set up global location for top-dir-prefix 234 # set up global location for top-dir-prefix
209 out = self.runbbsetup("install-global-settings") 235 out = self.runbbsetup("settings --global default top-dir-prefix {}".format(self.tempdir))
210 settings_path = "{}/global-config".format(self.tempdir) 236 settings_path = "{}/global-config".format(self.tempdir)
211 self.assertIn(settings_path, out[0]) 237 self.assertIn(settings_path, out[0])
212 out = self.runbbsetup("change-global-setting default top-dir-prefix {}".format(self.tempdir))
213 self.assertIn("Setting 'top-dir-prefix' in section 'default' is changed to", out[0]) 238 self.assertIn("Setting 'top-dir-prefix' in section 'default' is changed to", out[0])
214 self.assertIn("New global settings written to".format(settings_path), out[0]) 239 self.assertIn("New settings written to".format(settings_path), out[0])
240 out = self.runbbsetup("settings --global default dl-dir {}".format(os.path.join(self.tempdir, 'downloads')))
241 self.assertIn("Setting 'dl-dir' in section 'default' is changed to", out[0])
242 self.assertIn("New settings written to".format(settings_path), out[0])
215 243
216 # check that writing settings works and then adjust them to point to 244 # check that writing settings works and then adjust them to point to
217 # test registry repo 245 # test registry repo
218 out = self.runbbsetup("install-settings") 246 out = self.runbbsetup("settings default registry 'git://{};protocol=file;branch=master;rev=master'".format(self.registrypath))
219 settings_path = "{}/bitbake-builds/bitbake-setup.conf".format(self.tempdir) 247 settings_path = "{}/bitbake-builds/settings.conf".format(self.tempdir)
220 self.assertIn(settings_path, out[0]) 248 self.assertIn(settings_path, out[0])
221 out = self.runbbsetup("change-setting default registry 'git://{};protocol=file;branch=master;rev=master'".format(self.registrypath))
222 self.assertIn("Setting 'registry' in section 'default' is changed to", out[0]) 249 self.assertIn("Setting 'registry' in section 'default' is changed to", out[0])
223 self.assertIn("New settings written to".format(settings_path), out[0]) 250 self.assertIn("New settings written to".format(settings_path), out[0])
224 251
252 # check that listing settings works
253 out = self.runbbsetup("settings --list")
254 self.assertIn("default top-dir-prefix {}".format(self.tempdir), out[0])
255 self.assertIn("default dl-dir {}".format(os.path.join(self.tempdir, 'downloads')), out[0])
256 self.assertIn("default registry {}".format('git://{};protocol=file;branch=master;rev=master'.format(self.registrypath)), out[0])
257
225 # check that 'list' produces correct output with no configs, one config and two configs 258 # check that 'list' produces correct output with no configs, one config and two configs
226 out = self.runbbsetup("list") 259 out = self.runbbsetup("list")
227 self.assertNotIn("test-config-1", out[0]) 260 self.assertNotIn("test-config-1", out[0])
@@ -247,8 +280,18 @@ print("BBPATH is {{}}".format(os.environ["BBPATH"]))
247 self.add_file_to_testrepo('test-file', test_file_content) 280 self.add_file_to_testrepo('test-file', test_file_content)
248 281
249 # test-config-1 is tested as a registry config, test-config-2 as a local file 282 # test-config-1 is tested as a registry config, test-config-2 as a local file
250 test_configurations = {'test-config-1': {'cmdline': 'test-config-1', 'buildconfigs':('gadget','gizmo','gadget-notemplate','gizmo-notemplate')}, 283 test_configurations = {'test-config-1': {'cmdline': 'test-config-1',
251 'test-config-2': {'cmdline': os.path.join(self.registrypath,'config-2/test-config-2.conf.json'), 'buildconfigs': ('gadget','gizmo','gadget-notemplate','gizmo-notemplate', 'gizmo-notemplate-with-thisdir') } } 284 'buildconfigs':('gadget','gizmo',
285 'gizmo-env-passthrough',
286 'gizmo-no-fragment',
287 'gadget-notemplate','gizmo-notemplate')},
288 'test-config-2': {'cmdline': os.path.join(self.registrypath,'config-2/test-config-2.conf.json'),
289 'buildconfigs': ('gadget','gizmo',
290 'gizmo-env-passthrough',
291 'gizmo-no-fragment',
292 'gadget-notemplate','gizmo-notemplate',
293 'gizmo-notemplate-with-thisdir')}
294 }
252 for cf, v in test_configurations.items(): 295 for cf, v in test_configurations.items():
253 for c in v['buildconfigs']: 296 for c in v['buildconfigs']:
254 out = self.runbbsetup("init --non-interactive {} {}".format(v['cmdline'], c)) 297 out = self.runbbsetup("init --non-interactive {} {}".format(v['cmdline'], c))
@@ -272,13 +315,16 @@ print("BBPATH is {{}}".format(os.environ["BBPATH"]))
272 prev_test_file_content = test_file_content 315 prev_test_file_content = test_file_content
273 test_file_content = 'modified\n' 316 test_file_content = 'modified\n'
274 self.add_file_to_testrepo('test-file', test_file_content) 317 self.add_file_to_testrepo('test-file', test_file_content)
275 for c in ('gadget','gizmo','gadget-notemplate','gizmo-notemplate'): 318 for c in ('gadget', 'gizmo',
319 'gizmo-env-passthrough',
320 'gizmo-no-fragment',
321 'gadget-notemplate', 'gizmo-notemplate'):
276 buildpath = os.path.join(self.tempdir, 'bitbake-builds', 'test-config-1-{}'.format(c)) 322 buildpath = os.path.join(self.tempdir, 'bitbake-builds', 'test-config-1-{}'.format(c))
277 os.environ['BBPATH'] = os.path.join(buildpath, 'build') 323 os.environ['BBPATH'] = os.path.join(buildpath, 'build')
278 out = self.runbbsetup("status") 324 out = self.runbbsetup("status")
279 self.assertIn("Layer repository file://{} checked out into {}/layers/test-repo updated revision master from".format(self.testrepopath, buildpath), out[0]) 325 self.assertIn("Layer repository file://{} checked out into {}/layers/test-repo updated revision master from".format(self.testrepopath, buildpath), out[0])
280 out = self.runbbsetup("update") 326 out = self.runbbsetup("update")
281 if c in ('gadget','gizmo'): 327 if c in ('gadget', 'gizmo'):
282 self.assertIn("Existing bitbake configuration directory renamed to {}/build/conf-backup.".format(buildpath), out[0]) 328 self.assertIn("Existing bitbake configuration directory renamed to {}/build/conf-backup.".format(buildpath), out[0])
283 self.assertIn('-{}+{}'.format(prev_test_file_content, test_file_content), out[0]) 329 self.assertIn('-{}+{}'.format(prev_test_file_content, test_file_content), out[0])
284 with open(os.path.join(buildpath, 'config', "config-upstream.json")) as f: 330 with open(os.path.join(buildpath, 'config', "config-upstream.json")) as f:
@@ -294,14 +340,17 @@ print("BBPATH is {{}}".format(os.environ["BBPATH"]))
294 self.git('checkout -b {}'.format(branch), cwd=self.testrepopath) 340 self.git('checkout -b {}'.format(branch), cwd=self.testrepopath)
295 self.add_file_to_testrepo('test-file', test_file_content) 341 self.add_file_to_testrepo('test-file', test_file_content)
296 json_1 = self.add_json_config_to_registry('test-config-1.conf.json', branch, branch) 342 json_1 = self.add_json_config_to_registry('test-config-1.conf.json', branch, branch)
297 for c in ('gadget','gizmo','gadget-notemplate','gizmo-notemplate'): 343 for c in ('gadget', 'gizmo',
344 'gizmo-env-passthrough',
345 'gizmo-no-fragment',
346 'gadget-notemplate', 'gizmo-notemplate'):
298 buildpath = os.path.join(self.tempdir, 'bitbake-builds', 'test-config-1-{}'.format(c)) 347 buildpath = os.path.join(self.tempdir, 'bitbake-builds', 'test-config-1-{}'.format(c))
299 os.environ['BBPATH'] = os.path.join(buildpath, 'build') 348 os.environ['BBPATH'] = os.path.join(buildpath, 'build')
300 out = self.runbbsetup("status") 349 out = self.runbbsetup("status")
301 self.assertIn("Configuration in {} has changed:".format(buildpath), out[0]) 350 self.assertIn("Configuration in {} has changed:".format(buildpath), out[0])
302 self.assertIn('- "rev": "master"\n+ "rev": "another-branch"', out[0]) 351 self.assertIn('- "rev": "master"\n+ "rev": "another-branch"', out[0])
303 out = self.runbbsetup("update") 352 out = self.runbbsetup("update")
304 if c in ('gadget','gizmo'): 353 if c in ('gadget', 'gizmo'):
305 self.assertIn("Existing bitbake configuration directory renamed to {}/build/conf-backup.".format(buildpath), out[0]) 354 self.assertIn("Existing bitbake configuration directory renamed to {}/build/conf-backup.".format(buildpath), out[0])
306 self.assertIn('-{}+{}'.format(prev_test_file_content, test_file_content), out[0]) 355 self.assertIn('-{}+{}'.format(prev_test_file_content, test_file_content), out[0])
307 with open(os.path.join(buildpath, 'config', "config-upstream.json")) as f: 356 with open(os.path.join(buildpath, 'config', "config-upstream.json")) as f:
diff --git a/meta-yocto-bsp/lib/oeqa/selftest/cases/systemd_boot.py b/meta-yocto-bsp/lib/oeqa/selftest/cases/systemd_boot.py
index 781763d1f1..961d4ea31d 100644
--- a/meta-yocto-bsp/lib/oeqa/selftest/cases/systemd_boot.py
+++ b/meta-yocto-bsp/lib/oeqa/selftest/cases/systemd_boot.py
@@ -18,7 +18,7 @@ class Systemdboot(OESelftestTestCase):
18 18
19 # Set EFI_PROVIDER = "systemdboot" and MACHINE = "genericx86-64" in conf/local.conf 19 # Set EFI_PROVIDER = "systemdboot" and MACHINE = "genericx86-64" in conf/local.conf
20 features = 'EFI_PROVIDER = "systemd-boot"\n' 20 features = 'EFI_PROVIDER = "systemd-boot"\n'
21 features += 'MACHINE = "genericx86-64"\n' 21 features += 'MACHINE:forcevariable = "genericx86-64"\n'
22 features += 'IMAGE_FSTYPES += "wic"\n' 22 features += 'IMAGE_FSTYPES += "wic"\n'
23 features += 'COMPATIBLE_MACHINE:pn-ssh-pregen-hostkeys:genericx86-64 = "genericx86-64"\n' 23 features += 'COMPATIBLE_MACHINE:pn-ssh-pregen-hostkeys:genericx86-64 = "genericx86-64"\n'
24 self.append_config(features) 24 self.append_config(features)
diff --git a/meta/classes-recipe/core-image.bbclass b/meta/classes-recipe/core-image.bbclass
index 4072e420c5..309a7c577b 100644
--- a/meta/classes-recipe/core-image.bbclass
+++ b/meta/classes-recipe/core-image.bbclass
@@ -33,6 +33,7 @@
33# LICENSE_CREATE_PACKAGE="1" to be set when building packages too 33# LICENSE_CREATE_PACKAGE="1" to be set when building packages too
34# - doc-pkgs - documentation packages for all installed packages in the rootfs 34# - doc-pkgs - documentation packages for all installed packages in the rootfs
35# - bash-completion-pkgs - bash-completion packages for recipes using bash-completion bbclass 35# - bash-completion-pkgs - bash-completion packages for recipes using bash-completion bbclass
36# - zsh-completion-pkgs - zsh-completion packages
36# - ptest-pkgs - ptest packages for all ptest-enabled recipes 37# - ptest-pkgs - ptest packages for all ptest-enabled recipes
37# - read-only-rootfs - tweaks an image to support read-only rootfs 38# - read-only-rootfs - tweaks an image to support read-only rootfs
38# - stateless-rootfs - systemctl-native not run, image populated by systemd at runtime 39# - stateless-rootfs - systemctl-native not run, image populated by systemd at runtime
diff --git a/meta/classes-recipe/populate_sdk_base.bbclass b/meta/classes-recipe/populate_sdk_base.bbclass
index 0c2fd26e6f..8e671cf28f 100644
--- a/meta/classes-recipe/populate_sdk_base.bbclass
+++ b/meta/classes-recipe/populate_sdk_base.bbclass
@@ -24,6 +24,7 @@ COMPLEMENTARY_GLOB[dbg-pkgs] = '*-dbg'
24COMPLEMENTARY_GLOB[src-pkgs] = '*-src' 24COMPLEMENTARY_GLOB[src-pkgs] = '*-src'
25COMPLEMENTARY_GLOB[ptest-pkgs] = '*-ptest ${MLPREFIX}ptest-runner' 25COMPLEMENTARY_GLOB[ptest-pkgs] = '*-ptest ${MLPREFIX}ptest-runner'
26COMPLEMENTARY_GLOB[bash-completion-pkgs] = '*-bash-completion' 26COMPLEMENTARY_GLOB[bash-completion-pkgs] = '*-bash-completion'
27COMPLEMENTARY_GLOB[zsh-completion-pkgs] = '*-zsh-completion'
27 28
28def complementary_globs(featurevar, d): 29def complementary_globs(featurevar, d):
29 all_globs = d.getVarFlags('COMPLEMENTARY_GLOB') 30 all_globs = d.getVarFlags('COMPLEMENTARY_GLOB')
diff --git a/meta/classes-recipe/uboot-config.bbclass b/meta/classes-recipe/uboot-config.bbclass
index bc20913f73..eb82dd3583 100644
--- a/meta/classes-recipe/uboot-config.bbclass
+++ b/meta/classes-recipe/uboot-config.bbclass
@@ -35,6 +35,7 @@ UBOOT_BINARYNAME ?= "${@os.path.splitext(d.getVar("UBOOT_BINARY"))[0]}"
35UBOOT_IMAGE ?= "${UBOOT_BINARYNAME}-${MACHINE}-${UBOOT_VERSION}.${UBOOT_SUFFIX}" 35UBOOT_IMAGE ?= "${UBOOT_BINARYNAME}-${MACHINE}-${UBOOT_VERSION}.${UBOOT_SUFFIX}"
36UBOOT_SYMLINK ?= "${UBOOT_BINARYNAME}-${MACHINE}.${UBOOT_SUFFIX}" 36UBOOT_SYMLINK ?= "${UBOOT_BINARYNAME}-${MACHINE}.${UBOOT_SUFFIX}"
37UBOOT_MAKE_TARGET ?= "all" 37UBOOT_MAKE_TARGET ?= "all"
38UBOOT_MAKE_OPTS ?= ""
38 39
39# Output the ELF generated. Some platforms can use the ELF file and directly 40# Output the ELF generated. Some platforms can use the ELF file and directly
40# load it (JTAG booting, QEMU) additionally the ELF can be used for debugging 41# load it (JTAG booting, QEMU) additionally the ELF can be used for debugging
@@ -103,6 +104,7 @@ python () {
103 ubootconfigflags = d.getVarFlags('UBOOT_CONFIG') 104 ubootconfigflags = d.getVarFlags('UBOOT_CONFIG')
104 ubootbinary = d.getVar('UBOOT_BINARY') 105 ubootbinary = d.getVar('UBOOT_BINARY')
105 ubootbinaries = d.getVar('UBOOT_BINARIES') 106 ubootbinaries = d.getVar('UBOOT_BINARIES')
107 ubootconfigmakeopts = d.getVar('UBOOT_CONFIG_MAKE_OPTS')
106 # The "doc" varflag is special, we don't want to see it here 108 # The "doc" varflag is special, we don't want to see it here
107 ubootconfigflags.pop('doc', None) 109 ubootconfigflags.pop('doc', None)
108 ubootconfig = (d.getVar('UBOOT_CONFIG') or "").split() 110 ubootconfig = (d.getVar('UBOOT_CONFIG') or "").split()
@@ -120,6 +122,9 @@ python () {
120 if ubootconfigflags and ubootbinaries: 122 if ubootconfigflags and ubootbinaries:
121 raise bb.parse.SkipRecipe("You cannot use UBOOT_BINARIES as it is internal to uboot_config.bbclass.") 123 raise bb.parse.SkipRecipe("You cannot use UBOOT_BINARIES as it is internal to uboot_config.bbclass.")
122 124
125 if ubootconfigflags and ubootconfigmakeopts:
126 raise bb.parse.SkipRecipe("You cannot use UBOOT_CONFIG_MAKE_OPTS as it is internal to uboot_config.bbclass.")
127
123 if len(ubootconfig) > 0: 128 if len(ubootconfig) > 0:
124 for config in ubootconfig: 129 for config in ubootconfig:
125 found = False 130 found = False
@@ -127,8 +132,8 @@ python () {
127 if config == f: 132 if config == f:
128 found = True 133 found = True
129 items = v.split(',') 134 items = v.split(',')
130 if items[0] and len(items) > 3: 135 if items[0] and len(items) > 4:
131 raise bb.parse.SkipRecipe('Only config,images,binary can be specified!') 136 raise bb.parse.SkipRecipe('Only config,images,binary,make_opts can be specified!')
132 d.appendVar('UBOOT_MACHINE', ' ' + items[0]) 137 d.appendVar('UBOOT_MACHINE', ' ' + items[0])
133 # IMAGE_FSTYPES appending 138 # IMAGE_FSTYPES appending
134 if len(items) > 1 and items[1]: 139 if len(items) > 1 and items[1]:
@@ -140,6 +145,12 @@ python () {
140 else: 145 else:
141 bb.debug(1, "Appending '%s' to UBOOT_BINARIES." % ubootbinary) 146 bb.debug(1, "Appending '%s' to UBOOT_BINARIES." % ubootbinary)
142 d.appendVar('UBOOT_BINARIES', ' ' + ubootbinary) 147 d.appendVar('UBOOT_BINARIES', ' ' + ubootbinary)
148 if len(items) > 3 and items[3]:
149 bb.debug(1, "Appending '%s' to UBOOT_CONFIG_MAKE_OPTS." % items[3])
150 d.appendVar('UBOOT_CONFIG_MAKE_OPTS', items[3] + " ? ")
151 else:
152 bb.debug(1, "Appending '%s' to UBOOT_CONFIG_MAKE_OPTS." % "")
153 d.appendVar('UBOOT_CONFIG_MAKE_OPTS', " ? ")
143 break 154 break
144 155
145 if not found: 156 if not found:
diff --git a/meta/conf/bitbake.conf b/meta/conf/bitbake.conf
index 8d1ea5491d..5406e542db 100644
--- a/meta/conf/bitbake.conf
+++ b/meta/conf/bitbake.conf
@@ -775,9 +775,9 @@ export PKG_CONFIG_DISABLE_UNINSTALLED = "yes"
775export PKG_CONFIG_SYSTEM_LIBRARY_PATH = "${base_libdir}:${libdir}" 775export PKG_CONFIG_SYSTEM_LIBRARY_PATH = "${base_libdir}:${libdir}"
776export PKG_CONFIG_SYSTEM_INCLUDE_PATH = "${includedir}" 776export PKG_CONFIG_SYSTEM_INCLUDE_PATH = "${includedir}"
777 777
778# Don't allow git to chdir up past WORKDIR so that it doesn't detect the OE 778# Don't allow git to chdir up past WORKDIR or TMPDIR so that it doesn't detect the OE
779# repository when building a recipe 779# repository when building a recipe.
780export GIT_CEILING_DIRECTORIES = "${WORKDIR}" 780export GIT_CEILING_DIRECTORIES = "${WORKDIR}:${TMPDIR}"
781 781
782### 782###
783### Config file processing 783### Config file processing
diff --git a/meta/lib/oe/recipeutils.py b/meta/lib/oe/recipeutils.py
index 102789ce73..54bc3d7666 100644
--- a/meta/lib/oe/recipeutils.py
+++ b/meta/lib/oe/recipeutils.py
@@ -1073,7 +1073,7 @@ def get_recipe_upstream_version(rd):
1073 upversion = None 1073 upversion = None
1074 revision = None 1074 revision = None
1075 try: 1075 try:
1076 revision = ud.method.latest_revision(ud, rd, 'default') 1076 revision = ud.method.latest_revision(ud, rd, ud.name)
1077 upversion = pv 1077 upversion = pv
1078 if revision != ud.revision: 1078 if revision != ud.revision:
1079 upversion = upversion + "-new-commits-available" 1079 upversion = upversion + "-new-commits-available"
diff --git a/meta/lib/oeqa/core/target/ssh.py b/meta/lib/oeqa/core/target/ssh.py
index 8b5c450a05..0ac3ae4388 100644
--- a/meta/lib/oeqa/core/target/ssh.py
+++ b/meta/lib/oeqa/core/target/ssh.py
@@ -55,7 +55,7 @@ class OESSHTarget(OETarget):
55 def stop(self, **kwargs): 55 def stop(self, **kwargs):
56 pass 56 pass
57 57
58 def _run(self, command, timeout=None, ignore_status=True, raw=False): 58 def _run(self, command, timeout=None, ignore_status=True, raw=False, ignore_ssh_fails=False):
59 """ 59 """
60 Runs command in target using SSHProcess. 60 Runs command in target using SSHProcess.
61 """ 61 """
@@ -66,13 +66,17 @@ class OESSHTarget(OETarget):
66 self.logger.debug("[Command returned '%d' after %.2f seconds]" 66 self.logger.debug("[Command returned '%d' after %.2f seconds]"
67 "" % (status, time.time() - starttime)) 67 "" % (status, time.time() - starttime))
68 68
69 if status and not ignore_status: 69 if status == 255 and not ignore_ssh_fails:
70 raise AssertionError("ssh exited with status '255' for command "
71 "'%s': this is likely an SSH failure\n%s"
72 % (command, output))
73 elif status and not ignore_status:
70 raise AssertionError("Command '%s' returned non-zero exit " 74 raise AssertionError("Command '%s' returned non-zero exit "
71 "status %d:\n%s" % (command, status, output)) 75 "status %d:\n%s" % (command, status, output))
72 76
73 return (status, output) 77 return (status, output)
74 78
75 def run(self, command, timeout=None, ignore_status=True, raw=False): 79 def run(self, command, timeout=None, ignore_status=True, raw=False, ignore_ssh_fails=False):
76 """ 80 """
77 Runs command in target. 81 Runs command in target.
78 82
@@ -91,7 +95,7 @@ class OESSHTarget(OETarget):
91 else: 95 else:
92 processTimeout = self.timeout 96 processTimeout = self.timeout
93 97
94 status, output = self._run(sshCmd, processTimeout, ignore_status, raw) 98 status, output = self._run(sshCmd, processTimeout, ignore_status, raw, ignore_ssh_fails)
95 if len(output) > (64 * 1024): 99 if len(output) > (64 * 1024):
96 self.logger.debug('Command: %s\nStatus: %d Output length: %s\n' % (command, status, len(output))) 100 self.logger.debug('Command: %s\nStatus: %d Output length: %s\n' % (command, status, len(output)))
97 else: 101 else:
diff --git a/meta/lib/oeqa/runtime/cases/logrotate.py b/meta/lib/oeqa/runtime/cases/logrotate.py
index 6ad980cb6a..7cb43d98c5 100644
--- a/meta/lib/oeqa/runtime/cases/logrotate.py
+++ b/meta/lib/oeqa/runtime/cases/logrotate.py
@@ -15,12 +15,13 @@ class LogrotateTest(OERuntimeTestCase):
15 15
16 @classmethod 16 @classmethod
17 def setUpClass(cls): 17 def setUpClass(cls):
18 cls.tc.target.run('cp /etc/logrotate.d/wtmp $HOME/wtmp.oeqabak') 18 cls.tc.target.run('cp /etc/logrotate.d/wtmp $HOME/wtmp.oeqabak',
19 ignore_ssh_fails=True)
19 20
20 @classmethod 21 @classmethod
21 def tearDownClass(cls): 22 def tearDownClass(cls):
22 cls.tc.target.run('mv -f $HOME/wtmp.oeqabak /etc/logrotate.d/wtmp && rm -rf /var/log//logrotate_dir') 23 cls.tc.target.run('mv -f $HOME/wtmp.oeqabak /etc/logrotate.d/wtmp && rm -rf /var/log//logrotate_dir', ignore_ssh_fails=True)
23 cls.tc.target.run('rm -rf /var/log/logrotate_testfile && rm -rf /etc/logrotate.d/logrotate_testfile') 24 cls.tc.target.run('rm -rf /var/log/logrotate_testfile && rm -rf /etc/logrotate.d/logrotate_testfile', ignore_ssh_fails=True)
24 25
25 @OETestDepends(['ssh.SSHTest.test_ssh']) 26 @OETestDepends(['ssh.SSHTest.test_ssh'])
26 @OEHasPackage(['logrotate']) 27 @OEHasPackage(['logrotate'])
diff --git a/meta/lib/oeqa/runtime/cases/ssh.py b/meta/lib/oeqa/runtime/cases/ssh.py
index b632a29a01..3e9503277e 100644
--- a/meta/lib/oeqa/runtime/cases/ssh.py
+++ b/meta/lib/oeqa/runtime/cases/ssh.py
@@ -17,7 +17,7 @@ class SSHTest(OERuntimeTestCase):
17 @OEHasPackage(['dropbear', 'openssh-sshd']) 17 @OEHasPackage(['dropbear', 'openssh-sshd'])
18 def test_ssh(self): 18 def test_ssh(self):
19 for i in range(5): 19 for i in range(5):
20 status, output = self.target.run("uname -a", timeout=30) 20 status, output = self.target.run("uname -a", timeout=30, ignore_ssh_fails=True)
21 if status == 0: 21 if status == 0:
22 break 22 break
23 elif status == 255 or status == -signal.SIGTERM: 23 elif status == 255 or status == -signal.SIGTERM:
diff --git a/meta/lib/oeqa/runtime/cases/weston.py b/meta/lib/oeqa/runtime/cases/weston.py
index ee4d336482..e2cecffe83 100644
--- a/meta/lib/oeqa/runtime/cases/weston.py
+++ b/meta/lib/oeqa/runtime/cases/weston.py
@@ -16,7 +16,7 @@ class WestonTest(OERuntimeTestCase):
16 16
17 @classmethod 17 @classmethod
18 def tearDownClass(cls): 18 def tearDownClass(cls):
19 cls.tc.target.run('rm %s' % cls.weston_log_file) 19 cls.tc.target.run('rm %s' % cls.weston_log_file, ignore_ssh_fails=True)
20 20
21 @OETestDepends(['ssh.SSHTest.test_ssh']) 21 @OETestDepends(['ssh.SSHTest.test_ssh'])
22 @OEHasPackage(['weston']) 22 @OEHasPackage(['weston'])
diff --git a/meta/lib/oeqa/sdk/cases/autotools.py b/meta/lib/oeqa/sdk/cases/autotools.py
index 3f51854e3d..ecafafa7d6 100644
--- a/meta/lib/oeqa/sdk/cases/autotools.py
+++ b/meta/lib/oeqa/sdk/cases/autotools.py
@@ -27,7 +27,7 @@ class AutotoolsTest(OESDKTestCase):
27 pmv = parallel_make_value((self.td.get('PARALLEL_MAKE') or '').split()) 27 pmv = parallel_make_value((self.td.get('PARALLEL_MAKE') or '').split())
28 28
29 with tempfile.TemporaryDirectory(prefix="cpio-", dir=self.tc.sdk_dir) as testdir: 29 with tempfile.TemporaryDirectory(prefix="cpio-", dir=self.tc.sdk_dir) as testdir:
30 tarball = self.fetch(testdir, self.td["DL_DIR"], "https://ftp.gnu.org/gnu/cpio/cpio-2.15.tar.gz") 30 tarball = self.fetch(testdir, self.td["DL_DIR"], "https://ftpmirror.gnu.org/gnu/cpio/cpio-2.15.tar.gz")
31 31
32 opts = {} 32 opts = {}
33 opts["source"] = os.path.join(testdir, "cpio-2.15") 33 opts["source"] = os.path.join(testdir, "cpio-2.15")
diff --git a/meta/lib/oeqa/selftest/cases/bblayers.py b/meta/lib/oeqa/selftest/cases/bblayers.py
index 08bc1d1e44..8026e7ed4a 100644
--- a/meta/lib/oeqa/selftest/cases/bblayers.py
+++ b/meta/lib/oeqa/selftest/cases/bblayers.py
@@ -157,7 +157,9 @@ class BitbakeLayers(OESelftestTestCase):
157 with open(jsonfile) as f: 157 with open(jsonfile) as f:
158 data = json.load(f) 158 data = json.load(f)
159 for s in data['sources']: 159 for s in data['sources']:
160 if s == 'meta-yocto': 160 if s == 'poky':
161 data['sources'][s]['git-remote']['rev'] = '5200799866b92259e855051112520006e1aaaac0'
162 elif s == 'meta-yocto':
161 data['sources'][s]['git-remote']['rev'] = '913bd8ba4dd1d5d2a38261bde985b64a36e36281' 163 data['sources'][s]['git-remote']['rev'] = '913bd8ba4dd1d5d2a38261bde985b64a36e36281'
162 else: 164 else:
163 data['sources'][s]['git-remote']['rev'] = '744a2277844ec9a384a9ca7dae2a634d5a0d3590' 165 data['sources'][s]['git-remote']['rev'] = '744a2277844ec9a384a9ca7dae2a634d5a0d3590'
diff --git a/meta/lib/oeqa/selftest/cases/meta_ide.py b/meta/lib/oeqa/selftest/cases/meta_ide.py
index 1a11473797..f105302d8b 100644
--- a/meta/lib/oeqa/selftest/cases/meta_ide.py
+++ b/meta/lib/oeqa/selftest/cases/meta_ide.py
@@ -44,7 +44,7 @@ class MetaIDE(OESelftestTestCase):
44 def test_meta_ide_can_build_cpio_project(self): 44 def test_meta_ide_can_build_cpio_project(self):
45 dl_dir = self.td.get('DL_DIR', None) 45 dl_dir = self.td.get('DL_DIR', None)
46 self.project = SDKBuildProject(self.tmpdir_metaideQA + "/cpio/", self.environment_script_path, 46 self.project = SDKBuildProject(self.tmpdir_metaideQA + "/cpio/", self.environment_script_path,
47 "https://ftp.gnu.org/gnu/cpio/cpio-2.15.tar.gz", 47 "https://ftpmirror.gnu.org/gnu/cpio/cpio-2.15.tar.gz",
48 self.tmpdir_metaideQA, self.td['DATETIME'], dl_dir=dl_dir) 48 self.tmpdir_metaideQA, self.td['DATETIME'], dl_dir=dl_dir)
49 self.project.download_archive() 49 self.project.download_archive()
50 self.assertEqual(self.project.run_configure('CFLAGS="-std=gnu17 -Dbool=int -Dtrue=1 -Dfalse=0 -Wno-error=implicit-function-declaration" $CONFIGURE_FLAGS'), 0, 50 self.assertEqual(self.project.run_configure('CFLAGS="-std=gnu17 -Dbool=int -Dtrue=1 -Dfalse=0 -Wno-error=implicit-function-declaration" $CONFIGURE_FLAGS'), 0,
diff --git a/meta/lib/oeqa/utils/postactions.py b/meta/lib/oeqa/utils/postactions.py
index c69481db6c..7b967edaad 100644
--- a/meta/lib/oeqa/utils/postactions.py
+++ b/meta/lib/oeqa/utils/postactions.py
@@ -22,7 +22,7 @@ from oeqa.utils import get_artefact_dir
22def get_target_disk_usage(d, tc, artifacts_list, outputdir): 22def get_target_disk_usage(d, tc, artifacts_list, outputdir):
23 output_file = os.path.join(outputdir, "target_disk_usage.txt") 23 output_file = os.path.join(outputdir, "target_disk_usage.txt")
24 try: 24 try:
25 (status, output) = tc.target.run('df -h') 25 (status, output) = tc.target.run('df -h', ignore_ssh_fails=True)
26 with open(output_file, 'w') as f: 26 with open(output_file, 'w') as f:
27 f.write(output) 27 f.write(output)
28 f.write("\n") 28 f.write("\n")
@@ -49,7 +49,7 @@ def get_artifacts_list(target, raw_list):
49 for raw_path in raw_list.split(): 49 for raw_path in raw_list.split():
50 cmd = f"for p in {raw_path}; do if [ -e $p ]; then echo $p; fi; done" 50 cmd = f"for p in {raw_path}; do if [ -e $p ]; then echo $p; fi; done"
51 try: 51 try:
52 status, output = target.run(cmd) 52 status, output = target.run(cmd, ignore_ssh_fails=True)
53 if status != 0 or not output: 53 if status != 0 or not output:
54 raise Exception() 54 raise Exception()
55 result += output.split() 55 result += output.split()
diff --git a/meta/lib/patchtest/repo.py b/meta/lib/patchtest/repo.py
index 2cdd6736e4..6a7d7d2d3b 100644
--- a/meta/lib/patchtest/repo.py
+++ b/meta/lib/patchtest/repo.py
@@ -21,7 +21,12 @@ class PatchTestRepo(object):
21 self.repodir = repodir 21 self.repodir = repodir
22 self.repo = git.Repo.init(repodir) 22 self.repo = git.Repo.init(repodir)
23 self.patch = mbox.PatchSeries(patch) 23 self.patch = mbox.PatchSeries(patch)
24 self.current_branch = self.repo.active_branch.name 24
25 if self.repo.head.is_detached:
26 self.current_commit = self.repo.head.commit.hexsha
27 self.current_branch = None
28 else:
29 self.current_branch = self.repo.active_branch.name
25 30
26 # targeted branch defined on the patch may be invalid, so make sure there 31 # targeted branch defined on the patch may be invalid, so make sure there
27 # is a corresponding remote branch 32 # is a corresponding remote branch
@@ -80,6 +85,6 @@ class PatchTestRepo(object):
80 self._patchmerged = True 85 self._patchmerged = True
81 86
82 def clean(self): 87 def clean(self):
83 self.repo.git.execute(['git', 'checkout', self.current_branch]) 88 self.repo.git.execute(['git', 'checkout', self.current_branch if self.current_branch else self.current_commit])
84 self.repo.git.execute(['git', 'branch', '-D', self._workingbranch]) 89 self.repo.git.execute(['git', 'branch', '-D', self._workingbranch])
85 self._patchmerged = False 90 self._patchmerged = False
diff --git a/meta/recipes-bsp/u-boot/files/0001-Makefile-add-dependency-from-lib-to-arch-ARCH-lib.patch b/meta/recipes-bsp/u-boot/files/0001-Makefile-add-dependency-from-lib-to-arch-ARCH-lib.patch
deleted file mode 100644
index 06fdaf5b0a..0000000000
--- a/meta/recipes-bsp/u-boot/files/0001-Makefile-add-dependency-from-lib-to-arch-ARCH-lib.patch
+++ /dev/null
@@ -1,81 +0,0 @@
1From d0075e2d730a4fa48aa763a669e5edbc02c33a22 Mon Sep 17 00:00:00 2001
2From: Mikko Rapeli <mikko.rapeli@linaro.org>
3Date: Thu, 31 Jul 2025 14:52:48 +0300
4Subject: [PATCH] Makefile: add dependency from lib to arch/$(ARCH)/lib
5
6Top level Makefile starts separate "make" processes for each each
7subdirectory. lib/efi_loader apps now depend on lib.a from
8arch/$(ARCH)/lib if CONFIG_USE_PRIVATE_LIBGCC is enabled which creates
9a race conditions since dependency from lib/efi_loader EFI apps to
10arch/$(ARCH)/lib/lib.a is not explicit:
11
12arm-poky-linux-gnueabi-ld.bfd: cannot find arch/arm/lib/lib.a: No such file or directory
13make[3]: *** [scripts/Makefile.lib:512: lib/efi_loader/testapp_efi.so] Error 1
14
15This error was seen on yocto/OE-core CI builds after u-boot 2025.07 update:
16
17https://lists.openembedded.org/g/openembedded-core/message/220004
18
19https://autobuilder.yoctoproject.org/valkyrie/api/v2/logs/2914600/raw_inline
20
21 | rm -f lib/efi_loader/built-in.o; arm-poky-linux-gnueabi-ar cDPrsT lib/efi_loader/built-in.o lib/efi_loader/efi_bootmgr.o lib/efi_loader/efi_bootbin.o lib/efi_loader
22/efi_boottime.o lib/efi_loader/efi_helper.o lib/efi_loader/efi_console.o lib/efi_loader/efi_device_path.o lib/efi_loader/efi_device_path_to_text.o lib/efi_loader/efi_device_
23path_utilities.o lib/efi_loader/efi_dt_fixup.o lib/efi_loader/efi_fdt.o lib/efi_loader/efi_file.o lib/efi_loader/efi_hii.o lib/efi_loader/efi_hii_config.o lib/efi_loader/efi
24_image_loader.o lib/efi_loader/efi_load_options.o lib/efi_loader/efi_memory.o lib/efi_loader/efi_root_node.o lib/efi_loader/efi_runtime.o lib/efi_loader/efi_setup.o lib/efi_
25loader/efi_string.o lib/efi_loader/efi_unicode_collation.o lib/efi_loader/efi_var_common.o lib/efi_loader/efi_var_mem.o lib/efi_loader/efi_variable.o lib/efi_loader/efi_var_
26file.o lib/efi_loader/efi_watchdog.o lib/efi_loader/efi_disk.o lib/efi_loader/efi_net.o lib/efi_loader/efi_smbios.o lib/efi_loader/efi_load_initrd.o lib/efi_loader/efi_confo
27rmance.o
28 | arm-poky-linux-gnueabi-ld.bfd -nostdlib -zexecstack -znocombreloc -znorelro --no-warn-rwx-segments -L /srv/pokybuild/yocto-worker/oe-selftest-armhost/build/build-st-
293119200/tmp/work/beaglebone_yocto-poky-linux-gnueabi/u-boot/2025.07/sources/u-boot-2025.07 -T arch/arm/lib/elf_arm_efi.lds -shared -Bsymbolic -s lib/efi_loader/helloworld.o
30lib/efi_loader/efi_crt0.o lib/efi_loader/efi_reloc.o lib/efi_loader/efi_freestanding.o arch/arm/lib/lib.a -o lib/efi_loader/helloworld_efi.so
31 | arm-poky-linux-gnueabi-ld.bfd: cannot find arch/arm/lib/lib.a: No such file or directory
32 | make[3]: *** [scripts/Makefile.lib:512: lib/efi_loader/helloworld_efi.so] Error 1
33
34The different "make" processes share common scripts/Makefile.build
35and scripts/Makefile.libs but since they are separate processes
36the Makefile rules can't add a dependency from lib/uefi_loader targets
37to arch/$(ARCH)/lib/lib.a. Or the file level dependency can be added but
38then "make" produces a too sparse error message which does not mention
39that one of the dependencies like arch/$(ARCH)/lib/lib.a was not found:
40
41make[3]: *** No rule to make target 'lib/efi_loader/helloworld.efi', needed by '__build'. Stop.
42
43Fix this dependency problem by building arch/$(ARCH)/lib before lib
44if CONFIG_USE_PRIVATE_LIBGCC was enabled.
45
46To reproduce the race condition more reliably, add a "sleep 10" delay
47before linker command cmd_link_l_target with 2025.07
48or to $(lib-target): target in scripts/Makefile.build with master branch
49after Kbuild update.
50
51Fixes: 43d43241d1c9 ("scripts/Makefile.lib: add PLATFORM_LIBGCC to efi linking")
52
53Cc: Adriano Cordova <adrianox@gmail.com>
54Cc: Fabio Estevam <festevam@gmail.com>
55Signed-off-by: Mikko Rapeli <mikko.rapeli@linaro.org>
56Reviewed-by: Fabio Estevam <festevam@gmail.com>
57---
58 Makefile | 5 +++++
59 1 file changed, 5 insertions(+)
60
61Upstream-Status: Backport
62
63diff --git a/Makefile b/Makefile
64index c31bf7ecea97..b03f87a93fb9 100644
65--- a/Makefile
66+++ b/Makefile
67@@ -2131,6 +2131,11 @@ $(filter-out tools, $(u-boot-dirs)): tools
68 # is "yes"), so compile examples after U-Boot is compiled.
69 examples: $(filter-out examples, $(u-boot-dirs))
70
71+ifeq ($(CONFIG_USE_PRIVATE_LIBGCC),y)
72+# lib/efi_loader apps depend on arch/$(ARCH)/lib for lib.a
73+lib: $(filter arch/$(ARCH)/lib, $(u-boot-dirs))
74+endif
75+
76 # The setlocalversion script comes from linux and expects a
77 # KERNELVERSION variable in the environment for figuring out which
78 # annotated tags are relevant. Pass UBOOTVERSION.
79--
802.43.0
81
diff --git a/meta/recipes-bsp/u-boot/files/0001-nxp-Prepare-macros-for-KVM-changes.patch b/meta/recipes-bsp/u-boot/files/0001-nxp-Prepare-macros-for-KVM-changes.patch
deleted file mode 100644
index fa34c8033e..0000000000
--- a/meta/recipes-bsp/u-boot/files/0001-nxp-Prepare-macros-for-KVM-changes.patch
+++ /dev/null
@@ -1,100 +0,0 @@
1From 9be804cbfde1df715d79247b27de4b388c714cde Mon Sep 17 00:00:00 2001
2From: Ilias Apalodimas <ilias.apalodimas@linaro.org>
3Date: Wed, 18 Jun 2025 09:58:12 +0300
4Subject: [PATCH 1/3] nxp: Prepare macros for KVM changes
5
6A following patch is replacing our IO accessors with
7do { ... } while(0) ones in order to make them usable with KVM.
8
9That leads to an error eventually looking like this:
10arch/arm/include/asm/io.h:62:9: error: expected expression before 'do'
11 62 | do { \
12 | ^~
13arch/arm/include/asm/io.h:211:41: note: in expansion of macro '__raw_writel'
14 211 | #define out_arch(type,endian,a,v) __raw_write##type(cpu_to_##endian(v),a)
15 | ^~~~~~~~~~~
16arch/arm/include/asm/io.h:223:25: note: in expansion of macro 'out_arch'
17 223 | #define out_be32(a,v) out_arch(l,be32,a,v)
18 | ^~~~~~~~
19drivers/spi/fsl_dspi.c:127:17: note: in expansion of macro 'out_be32'
20 127 | out_be32(addr, val) : out_le32(addr, val);
21 | ^~~~~~~~
22
23So adjust the current macros and code to be compatible with the upcoming
24change.
25
26Upstream-Status: Backport [https://github.com/u-boot/u-boot/commit/b56c0632ad62]
27Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
28Reviewed-by: Tom Rini <trini@konsulko.com>
29Signed-off-by: Fabio Estevam <festevam@gmail.com>
30---
31 drivers/spi/fsl_dspi.c | 6 ++++--
32 include/fsl_ifc.h | 24 ++++++++++++------------
33 2 files changed, 16 insertions(+), 14 deletions(-)
34
35diff --git a/drivers/spi/fsl_dspi.c b/drivers/spi/fsl_dspi.c
36index f2393c041f44..545561ad1169 100644
37--- a/drivers/spi/fsl_dspi.c
38+++ b/drivers/spi/fsl_dspi.c
39@@ -123,8 +123,10 @@ static uint dspi_read32(uint flags, uint *addr)
40
41 static void dspi_write32(uint flags, uint *addr, uint val)
42 {
43- flags & DSPI_FLAG_REGMAP_ENDIAN_BIG ?
44- out_be32(addr, val) : out_le32(addr, val);
45+ if (flags & DSPI_FLAG_REGMAP_ENDIAN_BIG)
46+ out_be32(addr, val);
47+ else
48+ out_le32(addr, val);
49 }
50
51 static void dspi_halt(struct fsl_dspi_priv *priv, u8 halt)
52diff --git a/include/fsl_ifc.h b/include/fsl_ifc.h
53index 3ac226879303..1c363115beb2 100644
54--- a/include/fsl_ifc.h
55+++ b/include/fsl_ifc.h
56@@ -803,29 +803,29 @@ void init_final_memctl_regs(void);
57 ((struct fsl_ifc_fcm *)CFG_SYS_IFC_ADDR)
58
59 #define get_ifc_cspr_ext(i) \
60- (ifc_in32(&(IFC_FCM_BASE_ADDR)->cspr_cs[i].cspr_ext))
61+ ifc_in32(&(IFC_FCM_BASE_ADDR)->cspr_cs[i].cspr_ext)
62 #define get_ifc_cspr(i) \
63- (ifc_in32(&(IFC_FCM_BASE_ADDR)->cspr_cs[i].cspr))
64+ ifc_in32(&(IFC_FCM_BASE_ADDR)->cspr_cs[i].cspr)
65 #define get_ifc_csor_ext(i) \
66- (ifc_in32(&(IFC_FCM_BASE_ADDR)->csor_cs[i].csor_ext))
67+ ifc_in32(&(IFC_FCM_BASE_ADDR)->csor_cs[i].csor_ext)
68 #define get_ifc_csor(i) \
69- (ifc_in32(&(IFC_FCM_BASE_ADDR)->csor_cs[i].csor))
70+ ifc_in32(&(IFC_FCM_BASE_ADDR)->csor_cs[i].csor)
71 #define get_ifc_amask(i) \
72- (ifc_in32(&(IFC_FCM_BASE_ADDR)->amask_cs[i].amask))
73+ ifc_in32(&(IFC_FCM_BASE_ADDR)->amask_cs[i].amask)
74 #define get_ifc_ftim(i, j) \
75- (ifc_in32(&(IFC_FCM_BASE_ADDR)->ftim_cs[i].ftim[j]))
76+ ifc_in32(&(IFC_FCM_BASE_ADDR)->ftim_cs[i].ftim[j])
77 #define set_ifc_cspr_ext(i, v) \
78- (ifc_out32(&(IFC_FCM_BASE_ADDR)->cspr_cs[i].cspr_ext, v))
79+ ifc_out32(&(IFC_FCM_BASE_ADDR)->cspr_cs[i].cspr_ext, v)
80 #define set_ifc_cspr(i, v) \
81- (ifc_out32(&(IFC_FCM_BASE_ADDR)->cspr_cs[i].cspr, v))
82+ ifc_out32(&(IFC_FCM_BASE_ADDR)->cspr_cs[i].cspr, v)
83 #define set_ifc_csor_ext(i, v) \
84- (ifc_out32(&(IFC_FCM_BASE_ADDR)->csor_cs[i].csor_ext, v))
85+ ifc_out32(&(IFC_FCM_BASE_ADDR)->csor_cs[i].csor_ext, v)
86 #define set_ifc_csor(i, v) \
87- (ifc_out32(&(IFC_FCM_BASE_ADDR)->csor_cs[i].csor, v))
88+ ifc_out32(&(IFC_FCM_BASE_ADDR)->csor_cs[i].csor, v)
89 #define set_ifc_amask(i, v) \
90- (ifc_out32(&(IFC_FCM_BASE_ADDR)->amask_cs[i].amask, v))
91+ ifc_out32(&(IFC_FCM_BASE_ADDR)->amask_cs[i].amask, v)
92 #define set_ifc_ftim(i, j, v) \
93- (ifc_out32(&(IFC_FCM_BASE_ADDR)->ftim_cs[i].ftim[j], v))
94+ ifc_out32(&(IFC_FCM_BASE_ADDR)->ftim_cs[i].ftim[j], v)
95
96 enum ifc_chip_sel {
97 IFC_CS0,
98--
992.34.1
100
diff --git a/meta/recipes-bsp/u-boot/files/0002-arm-io.h-Fix-io-accessors-for-KVM.patch b/meta/recipes-bsp/u-boot/files/0002-arm-io.h-Fix-io-accessors-for-KVM.patch
deleted file mode 100644
index 558d753d4a..0000000000
--- a/meta/recipes-bsp/u-boot/files/0002-arm-io.h-Fix-io-accessors-for-KVM.patch
+++ /dev/null
@@ -1,310 +0,0 @@
1From 2fc16d8de5bbe2a40ab25445936150c3250a9077 Mon Sep 17 00:00:00 2001
2From: Ilias Apalodimas <ilias.apalodimas@linaro.org>
3Date: Wed, 18 Jun 2025 09:58:13 +0300
4Subject: [PATCH 2/3] arm: io.h: Fix io accessors for KVM
5
6commit 2e2c2a5e72a8 ("arm: qemu: override flash accessors to use virtualizable instructions")
7explains why we can't have instructions with multiple output registers
8when running under QEMU + KVM and the instruction leads to an exception
9to the hypervisor.
10
11USB XHCI is such a case (MMIO) where a ldr w1, [x0], #4 is emitted for
12xhci_start() which works fine with QEMU but crashes for QEMU + KVM.
13
14These instructions cannot be emulated by KVM as they do not produce
15syndrome information data that KVM can use to infer the destination
16register, the faulting address, whether it was a load or store, or
17if it's a 32 or 64 bit general-purpose register.
18As a result an external abort is injected from QEMU, via ext_dabt_pending
19to KVM and we end up throwing an exception that looks like
20
21 U-Boot 2025.07-rc4 (Jun 10 2025 - 12:00:15 +0000)
22 [...]
23 Register 8001040 NbrPorts 8
24 Starting the controller
25 "Synchronous Abort" handler, esr 0x96000010, far 0x10100040
26 elr: 000000000005b1c8 lr : 000000000005b1ac (reloc)
27 elr: 00000000476fc1c8 lr : 00000000476fc1ac
28 x0 : 0000000010100040 x1 : 0000000000000001
29 x2 : 0000000000000000 x3 : 0000000000003e80
30 x4 : 0000000000000000 x5 : 00000000477a5694
31 x6 : 0000000000000038 x7 : 000000004666f360
32 x8 : 0000000000000000 x9 : 00000000ffffffd8
33 x10: 000000000000000d x11: 0000000000000006
34 x12: 0000000046560a78 x13: 0000000046560dd0
35 x14: 00000000ffffffff x15: 000000004666eed2
36 x16: 00000000476ee2f0 x17: 0000000000000000
37 x18: 0000000046660dd0 x19: 000000004666f480
38 x20: 0000000000000000 x21: 0000000010100040
39 x22: 0000000010100000 x23: 0000000000000000
40 x24: 0000000000000000 x25: 0000000000000000
41 x26: 0000000000000000 x27: 0000000000000000
42 x28: 0000000000000000 x29: 000000004666f360
43
44 Code: d5033fbf aa1503e0 5287d003 52800002 (b8004401)
45 Resetting CPU ...
46
47There are two problems making this the default.
48- It will emit ldr + add or str + add instead of ldr/str(post increment)
49 in somne cases
50- Some platforms that depend on TPL/SPL grow in size enough so that the
51 binary doesn't fit anymore.
52
53So let's add proper I/O accessors add a Kconfig option
54to turn it off by default apart from our QEMU builds.
55
56Upstream-Status: Backport [https://github.com/u-boot/u-boot/commit/dc512700ad46]
57Reported-by: Mikko Rapeli <mikko.rapeli@linaro.org>
58Tested-by: Mikko Rapeli <mikko.rapeli@linaro.org>
59Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
60Signed-off-by: Fabio Estevam <festevam@gmail.com>
61---
62 arch/arm/Kconfig | 12 +++
63 arch/arm/include/asm/io.h | 152 ++++++++++++++++++++++++++++----------
64 2 files changed, 124 insertions(+), 40 deletions(-)
65
66diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
67index 6ff3f2750ea8..f6430a5aaf07 100644
68--- a/arch/arm/Kconfig
69+++ b/arch/arm/Kconfig
70@@ -108,6 +108,18 @@ config LNX_KRNL_IMG_TEXT_OFFSET_BASE
71 The value subtracted from CONFIG_TEXT_BASE to calculate the
72 TEXT_OFFSET value written to the Linux kernel image header.
73
74+config KVM_VIRT_INS
75+ bool "Emit virtualizable instructions"
76+ help
77+ Instructions in the ARM ISA that have multiple output registers,
78+ can't be used if the instruction leads to an exception to the hypervisor.
79+ These instructions cannot be emulated by KVM because they do not produce
80+ syndrome information data that KVM can use to infer the destination
81+ register, the faulting address, whether it was a load or store,
82+ if it's a 32 or 64 bit general-purpose register amongst other things.
83+ Use this to produce virtualizable instructions if you plan to run U-Boot
84+ with KVM.
85+
86 config NVIC
87 bool
88
89diff --git a/arch/arm/include/asm/io.h b/arch/arm/include/asm/io.h
90index 89b1015bc4d3..85ec0e6937e8 100644
91--- a/arch/arm/include/asm/io.h
92+++ b/arch/arm/include/asm/io.h
93@@ -20,23 +20,108 @@ static inline void sync(void)
94 {
95 }
96
97-/* Generic virtual read/write. */
98-#define __arch_getb(a) (*(volatile unsigned char *)(a))
99-#define __arch_getw(a) (*(volatile unsigned short *)(a))
100-#define __arch_getl(a) (*(volatile unsigned int *)(a))
101-#define __arch_getq(a) (*(volatile unsigned long long *)(a))
102+#ifdef CONFIG_ARM64
103+#define __W "w"
104+#else
105+#define __W
106+#endif
107+
108+#if CONFIG_IS_ENABLED(SYS_THUMB_BUILD)
109+#define __R "l"
110+#define __RM "=l"
111+#else
112+#define __R "r"
113+#define __RM "=r"
114+#endif
115
116-#define __arch_putb(v,a) (*(volatile unsigned char *)(a) = (v))
117-#define __arch_putw(v,a) (*(volatile unsigned short *)(a) = (v))
118-#define __arch_putl(v,a) (*(volatile unsigned int *)(a) = (v))
119-#define __arch_putq(v,a) (*(volatile unsigned long long *)(a) = (v))
120+#ifdef CONFIG_KVM_VIRT_INS
121+/*
122+ * The __raw_writeX/__raw_readX below should be converted to static inline
123+ * functions. However doing so produces a lot of compilation warnings when
124+ * called with a raw address. Convert these once the callers have been fixed.
125+ */
126+#define __raw_writeb(val, addr) \
127+ do { \
128+ asm volatile("strb %" __W "0, [%1]" \
129+ : \
130+ : __R ((u8)(val)), __R (addr)); \
131+ } while (0)
132+
133+#define __raw_readb(addr) \
134+ ({ \
135+ u32 __val; \
136+ asm volatile("ldrb %" __W "0, [%1]" \
137+ : __RM (__val) \
138+ : __R (addr)); \
139+ __val; \
140+ })
141+
142+#define __raw_writew(val, addr) \
143+ do { \
144+ asm volatile("strh %" __W "0, [%1]" \
145+ : \
146+ : __R ((u16)(val)), __R (addr)); \
147+ } while (0)
148+
149+#define __raw_readw(addr) \
150+ ({ \
151+ u32 __val; \
152+ asm volatile("ldrh %" __W "0, [%1]" \
153+ : __RM (__val) \
154+ : __R (addr)); \
155+ __val; \
156+ })
157+
158+#define __raw_writel(val, addr) \
159+ do { \
160+ asm volatile("str %" __W "0, [%1]" \
161+ : \
162+ : __R ((u32)(val)), __R (addr)); \
163+ } while (0)
164+
165+#define __raw_readl(addr) \
166+ ({ \
167+ u32 __val; \
168+ asm volatile("ldr %" __W "0, [%1]" \
169+ : __RM (__val) \
170+ : __R (addr)); \
171+ __val; \
172+ })
173+
174+#define __raw_writeq(val, addr) \
175+ do { \
176+ asm volatile("str %0, [%1]" \
177+ : \
178+ : __R ((u64)(val)), __R (addr)); \
179+ } while (0)
180+
181+#define __raw_readq(addr) \
182+ ({ \
183+ u64 __val; \
184+ asm volatile("ldr %0, [%1]" \
185+ : __RM (__val) \
186+ : __R (addr)); \
187+ __val; \
188+ })
189+#else
190+/* Generic virtual read/write. */
191+#define __raw_readb(a) (*(volatile unsigned char *)(a))
192+#define __raw_readw(a) (*(volatile unsigned short *)(a))
193+#define __raw_readl(a) (*(volatile unsigned int *)(a))
194+#define __raw_readq(a) (*(volatile unsigned long long *)(a))
195+
196+#define __raw_writeb(v, a) (*(volatile unsigned char *)(a) = (v))
197+#define __raw_writew(v, a) (*(volatile unsigned short *)(a) = (v))
198+#define __raw_writel(v, a) (*(volatile unsigned int *)(a) = (v))
199+#define __raw_writeq(v, a) (*(volatile unsigned long long *)(a) = (v))
200+#endif
201
202 static inline void __raw_writesb(unsigned long addr, const void *data,
203 int bytelen)
204 {
205 uint8_t *buf = (uint8_t *)data;
206 while(bytelen--)
207- __arch_putb(*buf++, addr);
208+ __raw_writeb(*buf++, addr);
209 }
210
211 static inline void __raw_writesw(unsigned long addr, const void *data,
212@@ -44,7 +129,7 @@ static inline void __raw_writesw(unsigned long addr, const void *data,
213 {
214 uint16_t *buf = (uint16_t *)data;
215 while(wordlen--)
216- __arch_putw(*buf++, addr);
217+ __raw_writew(*buf++, addr);
218 }
219
220 static inline void __raw_writesl(unsigned long addr, const void *data,
221@@ -52,40 +137,30 @@ static inline void __raw_writesl(unsigned long addr, const void *data,
222 {
223 uint32_t *buf = (uint32_t *)data;
224 while(longlen--)
225- __arch_putl(*buf++, addr);
226+ __raw_writel(*buf++, addr);
227 }
228
229 static inline void __raw_readsb(unsigned long addr, void *data, int bytelen)
230 {
231 uint8_t *buf = (uint8_t *)data;
232 while(bytelen--)
233- *buf++ = __arch_getb(addr);
234+ *buf++ = __raw_readb(addr);
235 }
236
237 static inline void __raw_readsw(unsigned long addr, void *data, int wordlen)
238 {
239 uint16_t *buf = (uint16_t *)data;
240 while(wordlen--)
241- *buf++ = __arch_getw(addr);
242+ *buf++ = __raw_readw(addr);
243 }
244
245 static inline void __raw_readsl(unsigned long addr, void *data, int longlen)
246 {
247 uint32_t *buf = (uint32_t *)data;
248 while(longlen--)
249- *buf++ = __arch_getl(addr);
250+ *buf++ = __raw_readl(addr);
251 }
252
253-#define __raw_writeb(v,a) __arch_putb(v,a)
254-#define __raw_writew(v,a) __arch_putw(v,a)
255-#define __raw_writel(v,a) __arch_putl(v,a)
256-#define __raw_writeq(v,a) __arch_putq(v,a)
257-
258-#define __raw_readb(a) __arch_getb(a)
259-#define __raw_readw(a) __arch_getw(a)
260-#define __raw_readl(a) __arch_getl(a)
261-#define __raw_readq(a) __arch_getq(a)
262-
263 /*
264 * TODO: The kernel offers some more advanced versions of barriers, it might
265 * have some advantages to use them instead of the simple one here.
266@@ -98,15 +173,15 @@ static inline void __raw_readsl(unsigned long addr, void *data, int longlen)
267
268 #define smp_processor_id() 0
269
270-#define writeb(v,c) ({ u8 __v = v; __iowmb(); __arch_putb(__v,c); __v; })
271-#define writew(v,c) ({ u16 __v = v; __iowmb(); __arch_putw(__v,c); __v; })
272-#define writel(v,c) ({ u32 __v = v; __iowmb(); __arch_putl(__v,c); __v; })
273-#define writeq(v,c) ({ u64 __v = v; __iowmb(); __arch_putq(__v,c); __v; })
274+#define writeb(v, c) ({ u8 __v = v; __iowmb(); writeb_relaxed(__v, c); __v; })
275+#define writew(v, c) ({ u16 __v = v; __iowmb(); writew_relaxed(__v, c); __v; })
276+#define writel(v, c) ({ u32 __v = v; __iowmb(); writel_relaxed(__v, c); __v; })
277+#define writeq(v, c) ({ u64 __v = v; __iowmb(); writeq_relaxed(__v, c); __v; })
278
279-#define readb(c) ({ u8 __v = __arch_getb(c); __iormb(); __v; })
280-#define readw(c) ({ u16 __v = __arch_getw(c); __iormb(); __v; })
281-#define readl(c) ({ u32 __v = __arch_getl(c); __iormb(); __v; })
282-#define readq(c) ({ u64 __v = __arch_getq(c); __iormb(); __v; })
283+#define readb(c) ({ u8 __v = readb_relaxed(c); __iormb(); __v; })
284+#define readw(c) ({ u16 __v = readw_relaxed(c); __iormb(); __v; })
285+#define readl(c) ({ u32 __v = readl_relaxed(c); __iormb(); __v; })
286+#define readq(c) ({ u64 __v = readq_relaxed(c); __iormb(); __v; })
287
288 /*
289 * Relaxed I/O memory access primitives. These follow the Device memory
290@@ -121,13 +196,10 @@ static inline void __raw_readsl(unsigned long addr, void *data, int longlen)
291 #define readq_relaxed(c) ({ u64 __r = le64_to_cpu((__force __le64) \
292 __raw_readq(c)); __r; })
293
294-#define writeb_relaxed(v, c) ((void)__raw_writeb((v), (c)))
295-#define writew_relaxed(v, c) ((void)__raw_writew((__force u16) \
296- cpu_to_le16(v), (c)))
297-#define writel_relaxed(v, c) ((void)__raw_writel((__force u32) \
298- cpu_to_le32(v), (c)))
299-#define writeq_relaxed(v, c) ((void)__raw_writeq((__force u64) \
300- cpu_to_le64(v), (c)))
301+#define writeb_relaxed(v, c) __raw_writeb((v), (c))
302+#define writew_relaxed(v, c) __raw_writew((__force u16)cpu_to_le16(v), (c))
303+#define writel_relaxed(v, c) __raw_writel((__force u32)cpu_to_le32(v), (c))
304+#define writeq_relaxed(v, c) __raw_writeq((__force u64)cpu_to_le64(v), (c))
305
306 /*
307 * The compiler seems to be incapable of optimising constants
308--
3092.34.1
310
diff --git a/meta/recipes-bsp/u-boot/files/0003-qemu-arm-Enable-virtualizable-IO-accessors.patch b/meta/recipes-bsp/u-boot/files/0003-qemu-arm-Enable-virtualizable-IO-accessors.patch
deleted file mode 100644
index 520c9226b4..0000000000
--- a/meta/recipes-bsp/u-boot/files/0003-qemu-arm-Enable-virtualizable-IO-accessors.patch
+++ /dev/null
@@ -1,41 +0,0 @@
1From cb6120b4bfd8b24dde7e0d1eda882e203a849d3f Mon Sep 17 00:00:00 2001
2From: Ilias Apalodimas <ilias.apalodimas@linaro.org>
3Date: Wed, 18 Jun 2025 09:58:14 +0300
4Subject: [PATCH 3/3] qemu: arm: Enable virtualizable IO accessors
5
6We recently added IO accessors that will work with KVM for any MMIO
7access that casues an exception to the hypervisor. Enable them by
8default for QEMU.
9
10Upstream-Status: Backport [https://github.com/u-boot/u-boot/commit/fcc60481ae75]
11Signed-off-by: Ilias Apalodimas <ilias.apalodimas@linaro.org>
12Tested-by: Mikko Rapeli <mikko.rapeli@linaro.org>
13Signed-off-by: Fabio Estevam <festevam@gmail.com>
14---
15 configs/qemu_arm64_defconfig | 1 +
16 configs/qemu_arm_defconfig | 1 +
17 2 files changed, 2 insertions(+)
18
19diff --git a/configs/qemu_arm64_defconfig b/configs/qemu_arm64_defconfig
20index 72bd255eafa3..39afb837e411 100644
21--- a/configs/qemu_arm64_defconfig
22+++ b/configs/qemu_arm64_defconfig
23@@ -1,4 +1,5 @@
24 CONFIG_ARM=y
25+CONFIG_KVM_VIRT_INS=y
26 CONFIG_ARCH_QEMU=y
27 CONFIG_SYS_MALLOC_LEN=0x1000000
28 CONFIG_BLOBLIST_SIZE_RELOC=0x2000
29diff --git a/configs/qemu_arm_defconfig b/configs/qemu_arm_defconfig
30index f13001390d4d..92ba48f6af97 100644
31--- a/configs/qemu_arm_defconfig
32+++ b/configs/qemu_arm_defconfig
33@@ -1,4 +1,5 @@
34 CONFIG_ARM=y
35+CONFIG_KVM_VIRT_INS=y
36 CONFIG_ARM_SMCCC=y
37 CONFIG_ARCH_QEMU=y
38 CONFIG_SYS_MALLOC_LEN=0x1000000
39--
402.34.1
41
diff --git a/meta/recipes-bsp/u-boot/u-boot-common.inc b/meta/recipes-bsp/u-boot/u-boot-common.inc
index ea55545db3..93ff0ca6ca 100644
--- a/meta/recipes-bsp/u-boot/u-boot-common.inc
+++ b/meta/recipes-bsp/u-boot/u-boot-common.inc
@@ -12,15 +12,9 @@ PE = "1"
12 12
13# We use the revision in order to avoid having to fetch it from the 13# We use the revision in order to avoid having to fetch it from the
14# repo during parse 14# repo during parse
15SRCREV = "e37de002fac3895e8d0b60ae2015e17bb33e2b5b" 15SRCREV = "e50b1e8715011def8aff1588081a2649a2c6cd47"
16 16
17SRC_URI = "\ 17SRC_URI = "git://source.denx.de/u-boot/u-boot.git;protocol=https;branch=master;tag=v${PV}"
18 git://source.denx.de/u-boot/u-boot.git;protocol=https;branch=master;tag=v${PV} \
19 file://0001-Makefile-add-dependency-from-lib-to-arch-ARCH-lib.patch \
20 file://0001-nxp-Prepare-macros-for-KVM-changes.patch \
21 file://0002-arm-io.h-Fix-io-accessors-for-KVM.patch \
22 file://0003-qemu-arm-Enable-virtualizable-IO-accessors.patch \
23"
24 18
25SRC_URI_RISCV = "\ 19SRC_URI_RISCV = "\
26 file://u-boot-riscv-isa_clear.cfg \ 20 file://u-boot-riscv-isa_clear.cfg \
diff --git a/meta/recipes-bsp/u-boot/u-boot-configure.inc b/meta/recipes-bsp/u-boot/u-boot-configure.inc
index a15511f8b2..bada506b66 100644
--- a/meta/recipes-bsp/u-boot/u-boot-configure.inc
+++ b/meta/recipes-bsp/u-boot/u-boot-configure.inc
@@ -33,7 +33,19 @@ uboot_configure_config () {
33 config=$1 33 config=$1
34 type=$2 34 type=$2
35 35
36 oe_runmake -C ${S} O=${B}/${config} ${config} 36 unset k
37 IFS="?"
38 uboot_config_make_opts="${UBOOT_CONFIG_MAKE_OPTS}"
39 for config_make_opts in $uboot_config_make_opts; do
40 k=$(expr $k + 1);
41 if [ $k -eq $i ]; then
42 break
43 fi
44 done
45 unset IFS
46 unset k
47
48 oe_runmake -C ${S} O=${B}/${config} ${config_make_opts} ${UBOOT_MAKE_OPTS} ${config}
37 if [ -n "${@' '.join(find_cfgs(d))}" ]; then 49 if [ -n "${@' '.join(find_cfgs(d))}" ]; then
38 merge_config.sh -m -O ${B}/${config} ${B}/${config}/.config ${@" ".join(find_cfgs(d))} 50 merge_config.sh -m -O ${B}/${config} ${B}/${config}/.config ${@" ".join(find_cfgs(d))}
39 oe_runmake -C ${S} O=${B}/${config} oldconfig 51 oe_runmake -C ${S} O=${B}/${config} oldconfig
@@ -42,9 +54,9 @@ uboot_configure_config () {
42 54
43uboot_configure () { 55uboot_configure () {
44 if [ -n "${UBOOT_MACHINE}" ]; then 56 if [ -n "${UBOOT_MACHINE}" ]; then
45 oe_runmake -C ${S} O=${B} ${UBOOT_MACHINE} 57 oe_runmake -C ${S} O=${B} ${UBOOT_MAKE_OPTS} ${UBOOT_MACHINE}
46 else 58 else
47 oe_runmake -C ${S} O=${B} oldconfig 59 oe_runmake -C ${S} O=${B} ${UBOOT_MAKE_OPTS} oldconfig
48 fi 60 fi
49 merge_config.sh -m .config ${@" ".join(find_cfgs(d))} 61 merge_config.sh -m .config ${@" ".join(find_cfgs(d))}
50 cml1_do_configure 62 cml1_do_configure
diff --git a/meta/recipes-bsp/u-boot/u-boot-tools_2025.07.bb b/meta/recipes-bsp/u-boot/u-boot-tools_2025.10.bb
index 7eaf721ca8..7eaf721ca8 100644
--- a/meta/recipes-bsp/u-boot/u-boot-tools_2025.07.bb
+++ b/meta/recipes-bsp/u-boot/u-boot-tools_2025.10.bb
diff --git a/meta/recipes-bsp/u-boot/u-boot.inc b/meta/recipes-bsp/u-boot/u-boot.inc
index b7242de5de..e0a69e740e 100644
--- a/meta/recipes-bsp/u-boot/u-boot.inc
+++ b/meta/recipes-bsp/u-boot/u-boot.inc
@@ -75,7 +75,19 @@ uboot_compile_config () {
75 config=$2 75 config=$2
76 type=$3 76 type=$3
77 77
78 oe_runmake -C ${S} O=${B}/${config} ${UBOOT_MAKE_TARGET} 78 unset k
79 IFS="?"
80 uboot_config_make_opts="${UBOOT_CONFIG_MAKE_OPTS}"
81 for config_make_opts in $uboot_config_make_opts; do
82 k=$(expr $k + 1);
83 if [ $k -eq $i ]; then
84 break
85 fi
86 done
87 unset IFS
88 unset k
89
90 oe_runmake -C ${S} O=${B}/${config} ${config_make_opts} ${UBOOT_MAKE_OPTS} ${UBOOT_MAKE_TARGET}
79 91
80 unset k 92 unset k
81 for binary in ${UBOOT_BINARIES}; do 93 for binary in ${UBOOT_BINARIES}; do
@@ -102,7 +114,7 @@ uboot_compile_config_copy_binary () {
102} 114}
103 115
104uboot_compile () { 116uboot_compile () {
105 oe_runmake -C ${S} O=${B} ${UBOOT_MAKE_TARGET} 117 oe_runmake -C ${S} O=${B} ${UBOOT_MAKE_OPTS} ${UBOOT_MAKE_TARGET}
106 118
107 # Generate the uboot-initial-env 119 # Generate the uboot-initial-env
108 if [ -n "${UBOOT_INITIAL_ENV}" ]; then 120 if [ -n "${UBOOT_INITIAL_ENV}" ]; then
diff --git a/meta/recipes-bsp/u-boot/u-boot_2025.07.bb b/meta/recipes-bsp/u-boot/u-boot_2025.10.bb
index 25f264c961..25f264c961 100644
--- a/meta/recipes-bsp/u-boot/u-boot_2025.07.bb
+++ b/meta/recipes-bsp/u-boot/u-boot_2025.10.bb
diff --git a/meta/recipes-connectivity/openssl/openssl/0001-buildinfo-strip-sysroot-and-debug-prefix-map-from-co.patch b/meta/recipes-connectivity/openssl/openssl/0001-buildinfo-strip-sysroot-and-debug-prefix-map-from-co.patch
index 687d682976..dadc034c91 100644
--- a/meta/recipes-connectivity/openssl/openssl/0001-buildinfo-strip-sysroot-and-debug-prefix-map-from-co.patch
+++ b/meta/recipes-connectivity/openssl/openssl/0001-buildinfo-strip-sysroot-and-debug-prefix-map-from-co.patch
@@ -38,7 +38,7 @@ diff --git a/Configurations/unix-Makefile.tmpl b/Configurations/unix-Makefile.tm
38index 09303c4..011bda1 100644 38index 09303c4..011bda1 100644
39--- a/Configurations/unix-Makefile.tmpl 39--- a/Configurations/unix-Makefile.tmpl
40+++ b/Configurations/unix-Makefile.tmpl 40+++ b/Configurations/unix-Makefile.tmpl
41@@ -502,13 +502,27 @@ BIN_LDFLAGS={- join(' ', $target{bin_lflags} || (), 41@@ -513,13 +513,27 @@ BIN_LDFLAGS={- join(' ', $target{bin_lflags} || (),
42 '$(CNF_LDFLAGS)', '$(LDFLAGS)') -} 42 '$(CNF_LDFLAGS)', '$(LDFLAGS)') -}
43 BIN_EX_LIBS=$(CNF_EX_LIBS) $(EX_LIBS) 43 BIN_EX_LIBS=$(CNF_EX_LIBS) $(EX_LIBS)
44 44
diff --git a/meta/recipes-connectivity/openssl/openssl_3.5.2.bb b/meta/recipes-connectivity/openssl/openssl_3.5.4.bb
index 396e69d7e7..c222b1533b 100644
--- a/meta/recipes-connectivity/openssl/openssl_3.5.2.bb
+++ b/meta/recipes-connectivity/openssl/openssl_3.5.4.bb
@@ -18,7 +18,7 @@ SRC_URI:append:class-nativesdk = " \
18 file://environment.d-openssl.sh \ 18 file://environment.d-openssl.sh \
19 " 19 "
20 20
21SRC_URI[sha256sum] = "c53a47e5e441c930c3928cf7bf6fb00e5d129b630e0aa873b08258656e7345ec" 21SRC_URI[sha256sum] = "967311f84955316969bdb1d8d4b983718ef42338639c621ec4c34fddef355e99"
22 22
23inherit lib_package multilib_header multilib_script ptest perlnative manpages 23inherit lib_package multilib_header multilib_script ptest perlnative manpages
24MULTILIB_SCRIPTS = "${PN}-bin:${bindir}/c_rehash" 24MULTILIB_SCRIPTS = "${PN}-bin:${bindir}/c_rehash"
diff --git a/meta/recipes-devtools/clang/clang_git.bb b/meta/recipes-devtools/clang/clang_git.bb
index ca53963590..e10c327a2a 100644
--- a/meta/recipes-devtools/clang/clang_git.bb
+++ b/meta/recipes-devtools/clang/clang_git.bb
@@ -57,7 +57,6 @@ SOLIBSDEV:mingw32 = ".pyd"
57#CMAKE_VERBOSE = "VERBOSE=1" 57#CMAKE_VERBOSE = "VERBOSE=1"
58 58
59EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \ 59EXTRA_OECMAKE += "-DLLVM_ENABLE_ASSERTIONS=OFF \
60 -DLLVM_APPEND_VC_REV=OFF \
61 -DLLVM_ENABLE_PIC=ON \ 60 -DLLVM_ENABLE_PIC=ON \
62 -DCLANG_DEFAULT_PIE_ON_LINUX=ON \ 61 -DCLANG_DEFAULT_PIE_ON_LINUX=ON \
63 -DFFI_INCLUDE_DIR=$(pkg-config --variable=includedir libffi) \ 62 -DFFI_INCLUDE_DIR=$(pkg-config --variable=includedir libffi) \
diff --git a/meta/recipes-devtools/clang/common-clang.inc b/meta/recipes-devtools/clang/common-clang.inc
index f7b7a1cf9a..47f036bc66 100644
--- a/meta/recipes-devtools/clang/common-clang.inc
+++ b/meta/recipes-devtools/clang/common-clang.inc
@@ -16,6 +16,10 @@ CLANGMD5SUM = "ff42885ed2ab98f1ecb8c1fc41205343"
16LLDMD5SUM = "ae7dc7c027b1fa89b5b013d391d3ee2b" 16LLDMD5SUM = "ae7dc7c027b1fa89b5b013d391d3ee2b"
17LLDBMD5SUM = "2e0d44968471fcde980034dbb826bea9" 17LLDBMD5SUM = "2e0d44968471fcde980034dbb826bea9"
18 18
19# remove at next version upgrade or when output changes
20PR = "r1"
21HASHEQUIV_HASH_VERSION .= ".1"
22
19LLVM_LIBDIR_SUFFIX = "${@d.getVar('baselib').replace('lib', '')}" 23LLVM_LIBDIR_SUFFIX = "${@d.getVar('baselib').replace('lib', '')}"
20 24
21# set the default pigz thread 25# set the default pigz thread
@@ -48,4 +52,8 @@ def get_clang_target_arch(bb, d):
48# install they cause non-deterministic binaries. 52# install they cause non-deterministic binaries.
49EXTRA_OECMAKE += "-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON" 53EXTRA_OECMAKE += "-DCMAKE_BUILD_WITH_INSTALL_RPATH=ON"
50 54
55# Don't embed found git information into the version string as this
56# will include the git server URL.
57EXTRA_OECMAKE += "-DLLVM_APPEND_VC_REV=OFF"
58
51require common.inc 59require common.inc
diff --git a/meta/recipes-devtools/clang/openmp_git.bb b/meta/recipes-devtools/clang/openmp_git.bb
index 2d86718dee..b6b1cc2978 100644
--- a/meta/recipes-devtools/clang/openmp_git.bb
+++ b/meta/recipes-devtools/clang/openmp_git.bb
@@ -18,7 +18,6 @@ inherit cmake pkgconfig perlnative python3native python3targetconfig
18DEPENDS += "elfutils libffi clang" 18DEPENDS += "elfutils libffi clang"
19 19
20EXTRA_OECMAKE += "-DCMAKE_BUILD_TYPE=RelWithDebInfo \ 20EXTRA_OECMAKE += "-DCMAKE_BUILD_TYPE=RelWithDebInfo \
21 -DLLVM_APPEND_VC_REV=OFF \
22 -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF \ 21 -DLLVM_ENABLE_PER_TARGET_RUNTIME_DIR=OFF \
23 -DOPENMP_LIBDIR_SUFFIX=${@d.getVar('baselib').replace('lib', '')} \ 22 -DOPENMP_LIBDIR_SUFFIX=${@d.getVar('baselib').replace('lib', '')} \
24 -DOPENMP_STANDALONE_BUILD=ON \ 23 -DOPENMP_STANDALONE_BUILD=ON \
diff --git a/meta/recipes-devtools/tcltk8/tcl8/0001-generic-tcl.h-use-Tcl_WideInt-for-seconds-in-Tcl_Tim.patch b/meta/recipes-devtools/tcltk8/tcl8/0001-generic-tcl.h-use-Tcl_WideInt-for-seconds-in-Tcl_Tim.patch
index 1859992838..6ba7ff4340 100644
--- a/meta/recipes-devtools/tcltk8/tcl8/0001-generic-tcl.h-use-Tcl_WideInt-for-seconds-in-Tcl_Tim.patch
+++ b/meta/recipes-devtools/tcltk8/tcl8/0001-generic-tcl.h-use-Tcl_WideInt-for-seconds-in-Tcl_Tim.patch
@@ -1,4 +1,4 @@
1From ff508f2e6786df697876140f21855ecb92a3ed36 Mon Sep 17 00:00:00 2001 1From 7d404d1827ffb69a2aa7b60c10b435c6f47f7bfb Mon Sep 17 00:00:00 2001
2From: Alexander Kanavin <alex@linutronix.de> 2From: Alexander Kanavin <alex@linutronix.de>
3Date: Fri, 18 Aug 2023 12:25:11 +0200 3Date: Fri, 18 Aug 2023 12:25:11 +0200
4Subject: [PATCH] generic/tcl.h: use Tcl_WideInt for seconds in Tcl_Time 4Subject: [PATCH] generic/tcl.h: use Tcl_WideInt for seconds in Tcl_Time
@@ -19,10 +19,10 @@ Signed-off-by: Alexander Kanavin <alex@linutronix.de>
19 1 file changed, 1 insertion(+), 1 deletion(-) 19 1 file changed, 1 insertion(+), 1 deletion(-)
20 20
21diff --git a/generic/tcl.h b/generic/tcl.h 21diff --git a/generic/tcl.h b/generic/tcl.h
22index 3a4622e..6204c57 100644 22index d8fd70a..ffff4b1 100644
23--- a/generic/tcl.h 23--- a/generic/tcl.h
24+++ b/generic/tcl.h 24+++ b/generic/tcl.h
25@@ -1418,7 +1418,7 @@ typedef enum { 25@@ -1425,7 +1425,7 @@ typedef enum {
26 */ 26 */
27 27
28 typedef struct Tcl_Time { 28 typedef struct Tcl_Time {
diff --git a/meta/recipes-devtools/tcltk8/tcl8/alter-includedir.patch b/meta/recipes-devtools/tcltk8/tcl8/alter-includedir.patch
index 6ceb297cea..ad91b9ffb3 100644
--- a/meta/recipes-devtools/tcltk8/tcl8/alter-includedir.patch
+++ b/meta/recipes-devtools/tcltk8/tcl8/alter-includedir.patch
@@ -1,4 +1,4 @@
1From 8bb8174e13c1c0e3b27fdf96a393f9fb1b7e14be Mon Sep 17 00:00:00 2001 1From bfca2e4ae32ab546f796d9c7ff7cbf542d5b2bfe Mon Sep 17 00:00:00 2001
2From: Mingli Yu <mingli.yu@windriver.com> 2From: Mingli Yu <mingli.yu@windriver.com>
3Date: Tue, 22 Nov 2022 18:48:27 +0800 3Date: Tue, 22 Nov 2022 18:48:27 +0800
4Subject: [PATCH] tcl: update the header location 4Subject: [PATCH] tcl: update the header location
@@ -26,7 +26,7 @@ Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
26 3 files changed, 4 insertions(+), 4 deletions(-) 26 3 files changed, 4 insertions(+), 4 deletions(-)
27 27
28diff --git a/unix/Makefile.in b/unix/Makefile.in 28diff --git a/unix/Makefile.in b/unix/Makefile.in
29index c3b75e3..60ed93e 100644 29index 45e7b76..5a46e6a 100644
30--- a/unix/Makefile.in 30--- a/unix/Makefile.in
31+++ b/unix/Makefile.in 31+++ b/unix/Makefile.in
32@@ -57,7 +57,7 @@ SCRIPT_INSTALL_DIR = $(INSTALL_ROOT)$(TCL_LIBRARY) 32@@ -57,7 +57,7 @@ SCRIPT_INSTALL_DIR = $(INSTALL_ROOT)$(TCL_LIBRARY)
@@ -39,7 +39,7 @@ index c3b75e3..60ed93e 100644
39 # Path to the private tcl header dir: 39 # Path to the private tcl header dir:
40 PRIVATE_INCLUDE_DIR = @PRIVATE_INCLUDE_DIR@ 40 PRIVATE_INCLUDE_DIR = @PRIVATE_INCLUDE_DIR@
41diff --git a/unix/configure.in b/unix/configure.in 41diff --git a/unix/configure.in b/unix/configure.in
42index 8e6726b..2345689 100644 42index 50b3e03..8a33d0c 100644
43--- a/unix/configure.in 43--- a/unix/configure.in
44+++ b/unix/configure.in 44+++ b/unix/configure.in
45@@ -775,7 +775,7 @@ eval "TCL_LIB_FILE=libtcl${LIB_SUFFIX}" 45@@ -775,7 +775,7 @@ eval "TCL_LIB_FILE=libtcl${LIB_SUFFIX}"
@@ -51,7 +51,7 @@ index 8e6726b..2345689 100644
51 HTML_DIR='$(DISTDIR)/html' 51 HTML_DIR='$(DISTDIR)/html'
52 52
53 # Note: in the following variable, it's important to use the absolute 53 # Note: in the following variable, it's important to use the absolute
54@@ -898,7 +898,7 @@ TCL_BUILD_STUB_LIB_PATH="`pwd`/${TCL_STUB_LIB_FILE}" 54@@ -896,7 +896,7 @@ TCL_BUILD_STUB_LIB_PATH="`pwd`/${TCL_STUB_LIB_FILE}"
55 TCL_STUB_LIB_PATH="${TCL_STUB_LIB_DIR}/${TCL_STUB_LIB_FILE}" 55 TCL_STUB_LIB_PATH="${TCL_STUB_LIB_DIR}/${TCL_STUB_LIB_FILE}"
56 56
57 # Install time header dir can be set via --includedir 57 # Install time header dir can be set via --includedir
diff --git a/meta/recipes-devtools/tcltk8/tcl8/fix_non_native_build_issue.patch b/meta/recipes-devtools/tcltk8/tcl8/fix_non_native_build_issue.patch
index 61153878fe..07a1f4d040 100644
--- a/meta/recipes-devtools/tcltk8/tcl8/fix_non_native_build_issue.patch
+++ b/meta/recipes-devtools/tcltk8/tcl8/fix_non_native_build_issue.patch
@@ -1,4 +1,4 @@
1From 3d11e7fd9aba6251974d990286347c06582e87b9 Mon Sep 17 00:00:00 2001 1From ad7847a15163f12c24d8ecb50dffa289876dc830 Mon Sep 17 00:00:00 2001
2From: Nitin A Kamble <nitin.a.kamble@intel.com> 2From: Nitin A Kamble <nitin.a.kamble@intel.com>
3Date: Fri, 13 Aug 2010 12:24:00 -0700 3Date: Fri, 13 Aug 2010 12:24:00 -0700
4Subject: [PATCH] tcl: fix a build issue 4Subject: [PATCH] tcl: fix a build issue
@@ -10,7 +10,7 @@ Signed-off-by: Alexander Kanavin <alex@linutronix.de>
10 1 file changed, 10 insertions(+), 10 deletions(-) 10 1 file changed, 10 insertions(+), 10 deletions(-)
11 11
12diff --git a/unix/Makefile.in b/unix/Makefile.in 12diff --git a/unix/Makefile.in b/unix/Makefile.in
13index a2f9e21..c3b75e3 100644 13index ab2e7b5..45e7b76 100644
14--- a/unix/Makefile.in 14--- a/unix/Makefile.in
15+++ b/unix/Makefile.in 15+++ b/unix/Makefile.in
16@@ -723,7 +723,7 @@ tcltest-real: 16@@ -723,7 +723,7 @@ tcltest-real:
diff --git a/meta/recipes-devtools/tcltk8/tcl8/interp.patch b/meta/recipes-devtools/tcltk8/tcl8/interp.patch
index aeebb038e3..c6412e7775 100644
--- a/meta/recipes-devtools/tcltk8/tcl8/interp.patch
+++ b/meta/recipes-devtools/tcltk8/tcl8/interp.patch
@@ -1,4 +1,4 @@
1From 09049beed723243d092ffaa37939dfe0f2ed6828 Mon Sep 17 00:00:00 2001 1From 2d959d1fdfbd7e020f5177b1a7ff6a08809536ca Mon Sep 17 00:00:00 2001
2From: Ross Burton <ross.burton@arm.com> 2From: Ross Burton <ross.burton@arm.com>
3Date: Mon, 12 Jul 2021 14:50:13 +0100 3Date: Mon, 12 Jul 2021 14:50:13 +0100
4Subject: [PATCH] tcl: fix race in interp.test 4Subject: [PATCH] tcl: fix race in interp.test
@@ -13,10 +13,10 @@ Signed-off-by: Ross Burton <ross.burton@arm.com>
13 1 file changed, 4 insertions(+), 3 deletions(-) 13 1 file changed, 4 insertions(+), 3 deletions(-)
14 14
15diff --git a/tests/interp.test b/tests/interp.test 15diff --git a/tests/interp.test b/tests/interp.test
16index 24ffb1b..c6460ad 100644 16index d64fdd4..9931dd1 100644
17--- a/tests/interp.test 17--- a/tests/interp.test
18+++ b/tests/interp.test 18+++ b/tests/interp.test
19@@ -3614,17 +3614,18 @@ test interp-36.7 {ChildBgerror sets error handler of child [1999035]} -setup { 19@@ -3651,17 +3651,18 @@ test interp-36.7 {ChildBgerror sets error handler of child [1999035]} -setup {
20 variable result 20 variable result
21 set result [lindex $args 0] 21 set result [lindex $args 0]
22 } 22 }
diff --git a/meta/recipes-devtools/tcltk8/tcl8/run-ptest b/meta/recipes-devtools/tcltk8/tcl8/run-ptest
index 687e06fa4b..12921d8cfd 100644
--- a/meta/recipes-devtools/tcltk8/tcl8/run-ptest
+++ b/meta/recipes-devtools/tcltk8/tcl8/run-ptest
@@ -4,6 +4,8 @@
4export TZ="Europe/London" 4export TZ="Europe/London"
5export TCL_LIBRARY=@libdir@/tcl8/ptest/library 5export TCL_LIBRARY=@libdir@/tcl8/ptest/library
6export ERROR_ON_FAILURES=1 6export ERROR_ON_FAILURES=1
7export LC_ALL=en_US.UTF-8
8export LANG=en_US.UTF-8
7 9
8# Some tests are overly strict with timings and fail on loaded systems. 10# Some tests are overly strict with timings and fail on loaded systems.
9SKIP="" 11SKIP=""
diff --git a/meta/recipes-devtools/tcltk8/tcl8/tcl-add-soname.patch b/meta/recipes-devtools/tcltk8/tcl8/tcl-add-soname.patch
index 898e8241fc..0f8bd062ac 100644
--- a/meta/recipes-devtools/tcltk8/tcl8/tcl-add-soname.patch
+++ b/meta/recipes-devtools/tcltk8/tcl8/tcl-add-soname.patch
@@ -1,4 +1,4 @@
1From 0d8e567d132e050c5d4a8d8d9257417e0679483c Mon Sep 17 00:00:00 2001 1From 2af07e2d0f0cb9f42ff982ce257e2067dcf1ec77 Mon Sep 17 00:00:00 2001
2From: Richard Purdie <rpurdie@linux.intel.com> 2From: Richard Purdie <rpurdie@linux.intel.com>
3Date: Wed, 9 Dec 2009 23:59:44 +0000 3Date: Wed, 9 Dec 2009 23:59:44 +0000
4Subject: [PATCH] tcl: Add tcltk from OE.dev but with legacy staging function 4Subject: [PATCH] tcl: Add tcltk from OE.dev but with legacy staging function
@@ -11,7 +11,7 @@ Signed-off-by: Alexander Kanavin <alex@linutronix.de>
11 2 files changed, 7 insertions(+), 1 deletion(-) 11 2 files changed, 7 insertions(+), 1 deletion(-)
12 12
13diff --git a/unix/Makefile.in b/unix/Makefile.in 13diff --git a/unix/Makefile.in b/unix/Makefile.in
14index bc743b3..a2f9e21 100644 14index 3efdfec..ab2e7b5 100644
15--- a/unix/Makefile.in 15--- a/unix/Makefile.in
16+++ b/unix/Makefile.in 16+++ b/unix/Makefile.in
17@@ -812,7 +812,10 @@ install-binaries: binaries 17@@ -812,7 +812,10 @@ install-binaries: binaries
diff --git a/meta/recipes-devtools/tcltk8/tcl8/tcl-remove-hardcoded-install-path.patch b/meta/recipes-devtools/tcltk8/tcl8/tcl-remove-hardcoded-install-path.patch
index f2a37add7d..12e1937aa1 100644
--- a/meta/recipes-devtools/tcltk8/tcl8/tcl-remove-hardcoded-install-path.patch
+++ b/meta/recipes-devtools/tcltk8/tcl8/tcl-remove-hardcoded-install-path.patch
@@ -1,4 +1,4 @@
1From 6e3cbc3600ac474776e92eb9a88abcb74299c321 Mon Sep 17 00:00:00 2001 1From 0b479a0dc845f9926cb40c13d86e55391a89fe98 Mon Sep 17 00:00:00 2001
2From: "Song.Li" <Song.Li@windriver.com> 2From: "Song.Li" <Song.Li@windriver.com>
3Date: Wed, 1 Aug 2012 19:05:51 +0800 3Date: Wed, 1 Aug 2012 19:05:51 +0800
4Subject: [PATCH] tcl:install tcl to lib64 instead of lib on 64bit target 4Subject: [PATCH] tcl:install tcl to lib64 instead of lib on 64bit target
@@ -17,7 +17,7 @@ Signed-off-by: Yi Zhao <yi.zhao@windriver.com>
17 1 file changed, 1 insertion(+), 1 deletion(-) 17 1 file changed, 1 insertion(+), 1 deletion(-)
18 18
19diff --git a/unix/configure.in b/unix/configure.in 19diff --git a/unix/configure.in b/unix/configure.in
20index e88ec3c..8e6726b 100644 20index ed07ca5..50b3e03 100644
21--- a/unix/configure.in 21--- a/unix/configure.in
22+++ b/unix/configure.in 22+++ b/unix/configure.in
23@@ -774,7 +774,7 @@ eval "TCL_LIB_FILE=libtcl${LIB_SUFFIX}" 23@@ -774,7 +774,7 @@ eval "TCL_LIB_FILE=libtcl${LIB_SUFFIX}"
diff --git a/meta/recipes-devtools/tcltk8/tcl8_8.6.16.bb b/meta/recipes-devtools/tcltk8/tcl8_8.6.17.bb
index 225f04be48..b97b20abd5 100644
--- a/meta/recipes-devtools/tcltk8/tcl8_8.6.16.bb
+++ b/meta/recipes-devtools/tcltk8/tcl8_8.6.17.bb
@@ -25,7 +25,7 @@ SRC_URI = "${BASE_SRC_URI} \
25 file://run-ptest \ 25 file://run-ptest \
26 file://0001-generic-tcl.h-use-Tcl_WideInt-for-seconds-in-Tcl_Tim.patch \ 26 file://0001-generic-tcl.h-use-Tcl_WideInt-for-seconds-in-Tcl_Tim.patch \
27 " 27 "
28SRC_URI[sha256sum] = "3b371386a9a928eecdbf263bcab7d6a531e620ca3fbab4fdeeb3d6a9a56f38e9" 28SRC_URI[sha256sum] = "a1d8cbe44b38beaa29fc2130c4e7b79b8bf02e2bcc028ffefd7a25a2122202a0"
29 29
30SRC_URI:class-native = "${BASE_SRC_URI}" 30SRC_URI:class-native = "${BASE_SRC_URI}"
31 31
@@ -74,7 +74,7 @@ FILES:${PN}-dev += "${libdir}/tcl8Config.sh ${libdir}/tcl8ooConfig.sh"
74 74
75# isn't getting picked up by shlibs code 75# isn't getting picked up by shlibs code
76RDEPENDS:${PN} += "tcl8-lib" 76RDEPENDS:${PN} += "tcl8-lib"
77RDEPENDS:${PN}-ptest += "libgcc" 77RDEPENDS:${PN}-ptest += "libgcc locale-base-en-us tzdata"
78 78
79BBCLASSEXTEND = "native nativesdk" 79BBCLASSEXTEND = "native nativesdk"
80 80
diff --git a/meta/recipes-extended/ghostscript/ghostscript_10.06.0.bb b/meta/recipes-extended/ghostscript/ghostscript_10.06.0.bb
index 4f6cb45412..4cea898432 100644
--- a/meta/recipes-extended/ghostscript/ghostscript_10.06.0.bb
+++ b/meta/recipes-extended/ghostscript/ghostscript_10.06.0.bb
@@ -47,7 +47,7 @@ EXTRA_OECONF:append:mipsarcho32 = " --with-large_color_index=0"
47EXTRA_OECONF:append:armv7a = "${@bb.utils.contains('TUNE_FEATURES','neon','',' --disable-neon',d)}" 47EXTRA_OECONF:append:armv7a = "${@bb.utils.contains('TUNE_FEATURES','neon','',' --disable-neon',d)}"
48EXTRA_OECONF:append:armv7ve = "${@bb.utils.contains('TUNE_FEATURES','neon','',' --disable-neon',d)}" 48EXTRA_OECONF:append:armv7ve = "${@bb.utils.contains('TUNE_FEATURES','neon','',' --disable-neon',d)}"
49 49
50TARGET_CFLAGS += "-std=gnu17 -fPIC" 50TARGET_CFLAGS += "-std=gnu17 -Wno-error=declaration-after-statement -fPIC"
51 51
52# Uses autoconf but not automake, can't do out-of-tree 52# Uses autoconf but not automake, can't do out-of-tree
53inherit autotools-brokensep pkgconfig 53inherit autotools-brokensep pkgconfig
diff --git a/meta/recipes-graphics/piglit/piglit_git.bb b/meta/recipes-graphics/piglit/piglit_git.bb
index 63c0cf1ac0..060e287f26 100644
--- a/meta/recipes-graphics/piglit/piglit_git.bb
+++ b/meta/recipes-graphics/piglit/piglit_git.bb
@@ -38,7 +38,7 @@ do_compile[dirs] =+ "${B}/temp/"
38 38
39PACKAGECONFIG ??= " \ 39PACKAGECONFIG ??= " \
40 ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11 glx', '', d)} \ 40 ${@bb.utils.contains('DISTRO_FEATURES', 'x11', 'x11 glx', '', d)} \
41 ${@bb.utils.contains('DISTRO_FEATURES', 'wayland', 'wayland', '', d)} \ 41 ${@bb.utils.filter('DISTRO_FEATURES', 'opencl wayland', d)} \
42" 42"
43PACKAGECONFIG[freeglut] = "-DPIGLIT_USE_GLUT=1,-DPIGLIT_USE_GLUT=0,freeglut," 43PACKAGECONFIG[freeglut] = "-DPIGLIT_USE_GLUT=1,-DPIGLIT_USE_GLUT=0,freeglut,"
44PACKAGECONFIG[glx] = "-DPIGLIT_BUILD_GLX_TESTS=ON,-DPIGLIT_BUILD_GLX_TESTS=OFF" 44PACKAGECONFIG[glx] = "-DPIGLIT_BUILD_GLX_TESTS=ON,-DPIGLIT_BUILD_GLX_TESTS=OFF"
diff --git a/meta/recipes-kernel/linux-firmware/linux-firmware_20250917.bb b/meta/recipes-kernel/linux-firmware/linux-firmware_20250917.bb
index f8d8decfe5..e6d6bcf308 100644
--- a/meta/recipes-kernel/linux-firmware/linux-firmware_20250917.bb
+++ b/meta/recipes-kernel/linux-firmware/linux-firmware_20250917.bb
@@ -5,9 +5,61 @@ that contains firmware binary blobs necessary for partial or full functionality
5of certain hardware devices." 5of certain hardware devices."
6SECTION = "kernel" 6SECTION = "kernel"
7 7
8REMOVE_UNLICENSED = ""
9
10# For acenic - Alteon AceNIC Gigabit Ethernet card
11REMOVE_UNLICENSED += "acenic/tg1.bin acenic/tg2.bin"
12
13# For emi62 - EMI 6|2m USB Audio interface
14REMOVE_UNLICENSED += "emi62/bitstream.fw emi62/loader.fw emi62/midi.fw emi62/spdif.fw"
15
16# For snd-maestro3 - ESS Allegro Maestro3 audio device
17REMOVE_UNLICENSED += "ess/maestro3_assp_kernel.fw ess/maestro3_assp_minisrc.fw"
18
19# For s2255drv
20REMOVE_UNLICENSED += "f2255usb.bin"
21
22# For snd-korg1212 - Korg 1212 IO audio device
23REMOVE_UNLICENSED += "korg/k1212.dsp"
24
25# For lgs8gxx - Legend Silicon GB20600 demodulator driver
26REMOVE_UNLICENSED += "lgs8g75.fw"
27
28# For ti_usb_3410_5052 - Multi-Tech USB cell modems
29REMOVE_UNLICENSED += "mts_cdma.fw mts_gsm.fw mts_edge.fw mts_mt9234mu.fw mts_mt9234zba.fw"
30
31# For myri_sbus - MyriCOM Gigabit Ethernet
32REMOVE_UNLICENSED += "myricom/lanai.bin"
33
34# For qlogicpti - PTI Qlogic, ISP Driver
35REMOVE_UNLICENSED += "qlogic/isp1000.bin"
36
37# For cassini - Sun Cassini
38REMOVE_UNLICENSED += "sun/cassini.bin"
39
40# For dvb-ttusb-budget - Technotrend/Hauppauge Nova-USB devices
41REMOVE_UNLICENSED += "ttusb-budget/dspbootcode.bin"
42
43# For ueagle-atm - Driver for USB ADSL Modems based on Eagle I,II,III
44REMOVE_UNLICENSED += "ueagle-atm/930-fpga.bin ueagle-atm/CMVeiWO.bin ueagle-atm/CMVepFR10.bin ueagle-atm/DSP9p.bin ueagle-atm/eagleIII.fw ueagle-atm/adi930.fw ueagle-atm/CMVep.bin ueagle-atm/CMVepFR.bin ueagle-atm/DSPei.bin ueagle-atm/CMV9i.bin ueagle-atm/CMVepES03.bin ueagle-atm/CMVepIT.bin ueagle-atm/DSPep.bin ueagle-atm/CMV9p.bin ueagle-atm/CMVepES.bin ueagle-atm/CMVepWO.bin ueagle-atm/eagleI.fw ueagle-atm/CMVei.bin ueagle-atm/CMVepFR04.bin ueagle-atm/DSP9i.bin ueagle-atm/eagleII.fw"
45
46# For vicam - USB 3com HomeConnect (aka vicam)
47REMOVE_UNLICENSED += "vicam/firmware.fw"
48
49# For yam - YAM driver for AX.25
50REMOVE_UNLICENSED += "yam/1200.bin yam/9600.bin"
51
52# For snd-wavefront - ISA WaveFront sound card
53REMOVE_UNLICENSED += "yamaha/yss225_registers.bin"
54
55# For snd-ymfpci - Yamaha YMF724/740/744/754 audio devices
56REMOVE_UNLICENSED += "yamaha/ds1_ctrl.fw yamaha/ds1_dsp.fw yamaha/ds1e_ctrl.fw"
57
58
8LICENSE = "\ 59LICENSE = "\
9 Firmware-Abilis \ 60 Firmware-Abilis \
10 & Firmware-adsp_sst \ 61 & Firmware-adsp_sst \
62 & Firmware-advansys \
11 & Firmware-aeonsemi \ 63 & Firmware-aeonsemi \
12 & Firmware-agere \ 64 & Firmware-agere \
13 & Firmware-airoha \ 65 & Firmware-airoha \
@@ -29,6 +81,7 @@ LICENSE = "\
29 & Firmware-bnx2x \ 81 & Firmware-bnx2x \
30 & Firmware-broadcom_bcm43xx \ 82 & Firmware-broadcom_bcm43xx \
31 & Firmware-ca0132 \ 83 & Firmware-ca0132 \
84 & Firmware-cadence \
32 & Firmware-cavium \ 85 & Firmware-cavium \
33 & Firmware-chelsio_firmware \ 86 & Firmware-chelsio_firmware \
34 & Firmware-cirrus \ 87 & Firmware-cirrus \
@@ -64,6 +117,7 @@ LICENSE = "\
64 & Firmware-IntcSST2 \ 117 & Firmware-IntcSST2 \
65 & Firmware-kaweth \ 118 & Firmware-kaweth \
66 & Firmware-keyspan \ 119 & Firmware-keyspan \
120 & Firmware-lenovo \
67 & Firmware-linaro \ 121 & Firmware-linaro \
68 & Firmware-Lontium \ 122 & Firmware-Lontium \
69 & Firmware-mali_csffw \ 123 & Firmware-mali_csffw \
@@ -122,11 +176,18 @@ LICENSE = "\
122 & Firmware-xc5000c \ 176 & Firmware-xc5000c \
123 & Firmware-xe \ 177 & Firmware-xe \
124 & WHENCE \ 178 & WHENCE \
179 & GPL-1.0-only \
125 & GPL-2.0-or-later \ 180 & GPL-2.0-or-later \
181 & GPL-2.0-only \
182 & GPL-3.0-only \
183 & MPL-1.1 \
184 & Apache-2.0 \
185 & MIT \
126" 186"
127 187
128LIC_FILES_CHKSUM = "file://LICENCE.Abilis;md5=b5ee3f410780e56711ad48eadc22b8bc \ 188LIC_FILES_CHKSUM = "file://LICENCE.Abilis;md5=b5ee3f410780e56711ad48eadc22b8bc \
129 file://LICENCE.adsp_sst;md5=615c45b91a5a4a9fe046d6ab9a2df728 \ 189 file://LICENCE.adsp_sst;md5=615c45b91a5a4a9fe046d6ab9a2df728 \
190 file://LICENCE.advansys;md5=bca735476602a7bcb187c7f8bf4a31d5 \
130 file://LICENSE.aeonsemi;md5=521c00bae0077c90d6ffb9ccf66905ae \ 191 file://LICENSE.aeonsemi;md5=521c00bae0077c90d6ffb9ccf66905ae \
131 file://LICENCE.agere;md5=af0133de6b4a9b2522defd5f188afd31 \ 192 file://LICENCE.agere;md5=af0133de6b4a9b2522defd5f188afd31 \
132 file://LICENSE.airoha;md5=fa3dedb960e2673aea51aa509f7b537d \ 193 file://LICENSE.airoha;md5=fa3dedb960e2673aea51aa509f7b537d \
@@ -184,6 +245,7 @@ LIC_FILES_CHKSUM = "file://LICENCE.Abilis;md5=b5ee3f410780e56711ad48eadc22b8bc \
184 file://LICENSE.ixp4xx;md5=ddc5cd6cbc6745343926fe7ecc2cdeb2 \ 245 file://LICENSE.ixp4xx;md5=ddc5cd6cbc6745343926fe7ecc2cdeb2 \
185 file://LICENCE.kaweth;md5=b1d876e562f4b3b8d391ad8395dfe03f \ 246 file://LICENCE.kaweth;md5=b1d876e562f4b3b8d391ad8395dfe03f \
186 file://LICENCE.keyspan;md5=676af26017c45772c972ce4a75d467d9 \ 247 file://LICENCE.keyspan;md5=676af26017c45772c972ce4a75d467d9 \
248 file://LICENCE.lenovo;md5=7f25420b5c27211f7bf33bebb3042ce4 \
187 file://LICENCE.linaro;md5=936d91e71cf9cd30e733db4bf11661cc \ 249 file://LICENCE.linaro;md5=936d91e71cf9cd30e733db4bf11661cc \
188 file://LICENSE.Lontium;md5=4ec8dc582ff7295f39e2ca6a7b0be2b6 \ 250 file://LICENSE.Lontium;md5=4ec8dc582ff7295f39e2ca6a7b0be2b6 \
189 file://LICENCE.mali_csffw;md5=e064aaec4d21ef856e1b76a6f5dc435f \ 251 file://LICENCE.mali_csffw;md5=e064aaec4d21ef856e1b76a6f5dc435f \
@@ -252,6 +314,7 @@ WHENCE_CHKSUM = "a12ddaaab7162785af9d79b76132d185"
252# so that the license files will be copied from fetched source 314# so that the license files will be copied from fetched source
253NO_GENERIC_LICENSE[Firmware-Abilis] = "LICENCE.Abilis" 315NO_GENERIC_LICENSE[Firmware-Abilis] = "LICENCE.Abilis"
254NO_GENERIC_LICENSE[Firmware-adsp_sst] = "LICENCE.adsp_sst" 316NO_GENERIC_LICENSE[Firmware-adsp_sst] = "LICENCE.adsp_sst"
317NO_GENERIC_LICENSE[Firmware-advansys] = "LICENCE.advansys"
255NO_GENERIC_LICENSE[Firmware-aeonsemi] = "LICENSE.aeonsemi" 318NO_GENERIC_LICENSE[Firmware-aeonsemi] = "LICENSE.aeonsemi"
256NO_GENERIC_LICENSE[Firmware-agere] = "LICENCE.agere" 319NO_GENERIC_LICENSE[Firmware-agere] = "LICENCE.agere"
257NO_GENERIC_LICENSE[Firmware-airoha] = "LICENSE.airoha" 320NO_GENERIC_LICENSE[Firmware-airoha] = "LICENSE.airoha"
@@ -309,6 +372,7 @@ NO_GENERIC_LICENSE[Firmware-iwlwifi_firmware] = "LICENCE.iwlwifi_firmware"
309NO_GENERIC_LICENSE[Firmware-ixp4xx] = "LICENSE.ixp4xx" 372NO_GENERIC_LICENSE[Firmware-ixp4xx] = "LICENSE.ixp4xx"
310NO_GENERIC_LICENSE[Firmware-kaweth] = "LICENCE.kaweth" 373NO_GENERIC_LICENSE[Firmware-kaweth] = "LICENCE.kaweth"
311NO_GENERIC_LICENSE[Firmware-keyspan] = "LICENCE.keyspan" 374NO_GENERIC_LICENSE[Firmware-keyspan] = "LICENCE.keyspan"
375NO_GENERIC_LICENSE[Firmware-lenovo] = "LICENCE.lenovo"
312NO_GENERIC_LICENSE[Firmware-linaro] = "LICENCE.linaro" 376NO_GENERIC_LICENSE[Firmware-linaro] = "LICENCE.linaro"
313NO_GENERIC_LICENSE[Firmware-Lontium] = "LICENSE.Lontium" 377NO_GENERIC_LICENSE[Firmware-Lontium] = "LICENSE.Lontium"
314NO_GENERIC_LICENSE[Firmware-mali_csffw] = "LICENCE.mali_csffw" 378NO_GENERIC_LICENSE[Firmware-mali_csffw] = "LICENCE.mali_csffw"
@@ -416,6 +480,21 @@ do_install() {
416 fi 480 fi
417 cp LICEN[CS]E.* WHENCE ${D}${nonarch_base_libdir}/firmware/ 481 cp LICEN[CS]E.* WHENCE ${D}${nonarch_base_libdir}/firmware/
418 cp wfx/LICEN[CS]E.* ${D}${nonarch_base_libdir}/firmware/wfx/ 482 cp wfx/LICEN[CS]E.* ${D}${nonarch_base_libdir}/firmware/wfx/
483
484 # Remove all unlicensed firmware
485 for file in ${REMOVE_UNLICENSED}; do
486 echo "Remove unlicensed firmware: $file"
487 rm ${D}${nonarch_base_libdir}/firmware/$file
488 path_to_file=$(dirname $file)
489 while [ "${path_to_file}" != "." ]; do
490 num_files=$(ls -A1 ${D}${nonarch_base_libdir}/firmware/$path_to_file | wc -l)
491 if [ "$num_files" = "0" ]; then
492 echo "Remove empty dir: $path_to_file"
493 rm -rf ${D}${nonarch_base_libdir}/firmware/$path_to_file
494 fi
495 path_to_file=$(dirname $path_to_file)
496 done
497 done
419} 498}
420 499
421PACKAGES =+ "${PN}-amphion-vpu-license ${PN}-amphion-vpu \ 500PACKAGES =+ "${PN}-amphion-vpu-license ${PN}-amphion-vpu \
@@ -456,18 +535,28 @@ PACKAGES =+ "${PN}-amphion-vpu-license ${PN}-amphion-vpu \
456 ${PN}-moxa-license ${PN}-moxa \ 535 ${PN}-moxa-license ${PN}-moxa \
457 ${PN}-sd8686 ${PN}-sd8688 ${PN}-sd8787 ${PN}-sd8797 ${PN}-sd8801 \ 536 ${PN}-sd8686 ${PN}-sd8688 ${PN}-sd8787 ${PN}-sd8797 ${PN}-sd8801 \
458 ${PN}-sd8887 ${PN}-sd8897 ${PN}-sd8997 ${PN}-usb8997 \ 537 ${PN}-sd8887 ${PN}-sd8897 ${PN}-sd8997 ${PN}-usb8997 \
538 ${PN}-cf8381 ${PN}-cf8385 ${PN}-gspi8682 ${PN}-gspi8686 ${PN}-gspi8688 ${PN}-sd8385 ${PN}-sd8682 \
539 ${PN}-usb8388 ${PN}-usb8682 ${PN}-sd8977 ${PN}-usb8766 ${PN}-usb8797 ${PN}-usb8801 ${PN}-usb8897 ${PN}-rvu-cptpf \
540 ${PN}-mwl8k ${PN}-mwlwifi\
459 ${PN}-ti-connectivity-license ${PN}-wl1251-license ${PN}-wlcommon ${PN}-wl1251 ${PN}-wl12xx ${PN}-wl18xx ${PN}-cc33xx \ 541 ${PN}-ti-connectivity-license ${PN}-wl1251-license ${PN}-wlcommon ${PN}-wl1251 ${PN}-wl12xx ${PN}-wl18xx ${PN}-cc33xx \
460 ${PN}-ti-keystone-license ${PN}-ti-keystone \ 542 ${PN}-ti-keystone-license ${PN}-ti-keystone \
543 ${PN}-ti-tspa-license ${PN}-ti-tas2563 ${PN}-ti-tas2781 ${PN}-ti-vpe \
544 ${PN}-ti-usb-3410-5052 \
461 ${PN}-vt6656-license ${PN}-vt6656 \ 545 ${PN}-vt6656-license ${PN}-vt6656 \
462 ${PN}-rs9113 ${PN}-rs9116 \ 546 ${PN}-rs9113 ${PN}-rs9116 ${PN}-rsi-91x \
463 ${PN}-rtl-license ${PN}-rtl8188 ${PN}-rtl8192cu ${PN}-rtl8192ce ${PN}-rtl8192su ${PN}-rtl8723 ${PN}-rtl8821 \ 547 ${PN}-rtl-license ${PN}-rtl8188 ${PN}-rtl8192cu ${PN}-rtl8192ce ${PN}-rtl8192su ${PN}-rtl8723 ${PN}-rtl8821 \
464 ${PN}-rtl8761 \ 548 ${PN}-rtl8761 \
465 ${PN}-rtl8168 \ 549 ${PN}-rtl8168 \
466 ${PN}-rtl8822 \ 550 ${PN}-rtl8822 \
551 ${PN}-rtl8192 ${PN}-rtl8710 ${PN}-rtl8812 \
552 ${PN}-rtl8851 ${PN}-rtl8852 ${PN}-rtl8922 \
553 ${PN}-rtl8703 ${PN}-rtl8814 \
467 ${PN}-rtl-nic \ 554 ${PN}-rtl-nic \
468 ${PN}-cypress-license \ 555 ${PN}-cypress-license \
469 ${PN}-broadcom-license \ 556 ${PN}-broadcom-license \
470 ${PN}-bcm-0bb4-0306 \ 557 ${PN}-bcm-0bb4-0306 \
558 ${PN}-bcm-0a5c-6410 \
559 ${PN}-bcm43012 \
471 ${PN}-bcm43143 \ 560 ${PN}-bcm43143 \
472 ${PN}-bcm43236b \ 561 ${PN}-bcm43236b \
473 ${PN}-bcm43241b0 \ 562 ${PN}-bcm43241b0 \
@@ -500,6 +589,7 @@ PACKAGES =+ "${PN}-amphion-vpu-license ${PN}-amphion-vpu \
500 ${PN}-bcm4373 \ 589 ${PN}-bcm4373 \
501 ${PN}-bcm43xx \ 590 ${PN}-bcm43xx \
502 ${PN}-bcm43xx-hdr \ 591 ${PN}-bcm43xx-hdr \
592 ${PN}-bcm54591 \
503 ${PN}-cirrus-license ${PN}-cirrus \ 593 ${PN}-cirrus-license ${PN}-cirrus \
504 ${PN}-cnm-license ${PN}-cnm \ 594 ${PN}-cnm-license ${PN}-cnm \
505 ${PN}-atheros-license ${PN}-ar5523 ${PN}-ar9170 ${PN}-ath6k ${PN}-ath9k ${PN}-ath3k \ 595 ${PN}-atheros-license ${PN}-ar5523 ${PN}-ar9170 ${PN}-ath6k ${PN}-ath9k ${PN}-ath3k \
@@ -570,12 +660,12 @@ PACKAGES =+ "${PN}-amphion-vpu-license ${PN}-amphion-vpu \
570 ${PN}-i915-license ${PN}-i915 \ 660 ${PN}-i915-license ${PN}-i915 \
571 ${PN}-ice-license ${PN}-ice \ 661 ${PN}-ice-license ${PN}-ice \
572 ${PN}-ice-enhanced-license ${PN}-ice-enhanced \ 662 ${PN}-ice-enhanced-license ${PN}-ice-enhanced \
573 ${PN}-adsp-sst-license ${PN}-adsp-sst \ 663 ${PN}-adsp-sst-license ${PN}-adsp-sst ${PN}-snd-soc-avs \
574 ${PN}-bnx2 \ 664 ${PN}-bnx2 \
575 ${PN}-bnx2x \ 665 ${PN}-bnx2x \
576 ${PN}-liquidio \ 666 ${PN}-liquidio \
577 ${PN}-linaro-license \ 667 ${PN}-linaro-license \
578 ${PN}-mali-csffw-arch108 ${PN}-mali-csffw-license \ 668 ${PN}-mali-csffw-arch108 ${PN}-mali-csffw-arch1010 ${PN}-mali-csffw-arch1012 ${PN}-mali-csffw-arch118 ${PN}-mali-csffw-arch128 ${PN}-mali-csffw-arch138 ${PN}-mali-csffw-license \
579 ${PN}-mellanox \ 669 ${PN}-mellanox \
580 ${PN}-nvidia-license \ 670 ${PN}-nvidia-license \
581 ${PN}-nvidia-tegra-k1 ${PN}-nvidia-tegra \ 671 ${PN}-nvidia-tegra-k1 ${PN}-nvidia-tegra \
@@ -590,6 +680,7 @@ PACKAGES =+ "${PN}-amphion-vpu-license ${PN}-amphion-vpu \
590 ${PN}-nxp9098-sdio \ 680 ${PN}-nxp9098-sdio \
591 ${PN}-nxpiw416-sdio \ 681 ${PN}-nxpiw416-sdio \
592 ${PN}-nxpiw612-sdio \ 682 ${PN}-nxpiw612-sdio \
683 ${PN}-nxp-sr1xx \
593 ${PN}-nxp-mc-license ${PN}-nxp-mc \ 684 ${PN}-nxp-mc-license ${PN}-nxp-mc \
594 ${PN}-netronome-license ${PN}-netronome \ 685 ${PN}-netronome-license ${PN}-netronome \
595 ${PN}-olpc-license ${PN}-olpc \ 686 ${PN}-olpc-license ${PN}-olpc \
@@ -647,6 +738,82 @@ PACKAGES =+ "${PN}-amphion-vpu-license ${PN}-amphion-vpu \
647 ${PN}-xc4000-license ${PN}-xc4000 \ 738 ${PN}-xc4000-license ${PN}-xc4000 \
648 ${PN}-xc5000-license ${PN}-xc5000 \ 739 ${PN}-xc5000-license ${PN}-xc5000 \
649 ${PN}-xc5000c-license ${PN}-xc5000c \ 740 ${PN}-xc5000c-license ${PN}-xc5000c \
741 ${PN}-typhoon-license ${PN}-typhoon \
742 ${PN}-intel-license ${PN}-ish-lnlm \
743 ${PN}-lenovo-license ${PN}-ish-lnlm-53c4ffad-2a17559f \
744 ${PN}-advansys-license ${PN}-advansys \
745 ${PN}-aeonsemi-license ${PN}-as21xxx \
746 ${PN}-agere-license ${PN}-orinoco \
747 ${PN}-airoha-license ${PN}-en8811h ${PN}-airoha-npu \
748 ${PN}-amd-sev-license ${PN}-ccp \
749 ${PN}-amdnpu-license ${PN}-amdxdna \
750 ${PN}-amd-pmf-license ${PN}-amd-pmf \
751 ${PN}-amd-ucode-license ${PN}-microcode-amd \
752 ${PN}-amlogic-license ${PN}-amlogic \
753 ${PN}-abilis-license ${PN}-as102 \
754 ${PN}-starfire \
755 ${PN}-atmel-license ${PN}-wilc1000 ${PN}-wilc3000 \
756 ${PN}-atusb \
757 ${PN}-dvb-ttpci \
758 ${PN}-bmi260-license ${PN}-bmi260 \
759 ${PN}-cadence-license ${PN}-mhdp8546 \
760 ${PN}-cavium-license ${PN}-cnn55xx \
761 ${PN}-bfa-license ${PN}-cbfw ${PN}-ctfw ${PN}-ct2fw \
762 ${PN}-pcnet-cs ${PN}-3c589-cs ${PN}-3c574-cs ${PN}-serial-cs \
763 ${PN}-sw-serial \
764 ${PN}-siano-license ${PN}-smsmdtv \
765 ${PN}-cpia2 \
766 ${PN}-ca0132-license ${PN}-ca0132 \
767 ${PN}-cxgb3-license ${PN}-cxgb3 \
768 ${PN}-chelsio-firmware-license ${PN}-cxgb4 \
769 ${PN}-dabusb-license ${PN}-dabusb \
770 ${PN}-dsp56k \
771 ${PN}-dib0700-license ${PN}-dib0700 \
772 ${PN}-it913x-license ${PN}-it9135 \
773 ${PN}-drxk-license ${PN}-drxk \
774 ${PN}-e100-license ${PN}-e100 \
775 ${PN}-io-ti ${PN}-io-edgeport \
776 ${PN}-emi26-license ${PN}-emi26 \
777 ${PN}-ene-firmware-license ${PN}-ene-ub6250 \
778 ${PN}-snd-maestro3 \
779 ${PN}-go7007-s2250-license ${PN}-go7007-s2250 \
780 ${PN}-go7007-license ${PN}-go7007 \
781 ${PN}-hfi1-license ${PN}-hfi1 \
782 ${PN}-inside-secure-license ${PN}-inside-secure \
783 ${PN}-intcsst2-license ${PN}-snd-soc-catpt \
784 ${PN}-fw-sst-0f28-license ${PN}-snd-intel-sst-core \
785 ${PN}-ivsc-license ${PN}-atomisp ${PN}-intel-ipu6-isys ${PN}-mei-vsc-hw \
786 ${PN}-ipu3-firmware-license ${PN}-ipu3-imgu \
787 ${PN}-intel-ipu7-isys \
788 ${PN}-intel-vpu-license ${PN}-intel-vpu \
789 ${PN}-isci \
790 ${PN}-ixp4xx-license ${PN}-ixp4xx-npe \
791 ${PN}-kaweth-license ${PN}-kaweth \
792 ${PN}-keyspan-license ${PN}-keyspan \
793 ${PN}-keyspan-pda \
794 ${PN}-mga-license ${PN}-mga \
795 ${PN}-myri10ge-firmware-license ${PN}-myri10ge \
796 ${PN}-smc91c92-cs \
797 ${PN}-qla1280-license ${PN}-qla1280 \
798 ${PN}-ib-qib-license ${PN}-ib-qib \
799 ${PN}-r8a779x-usb3-license ${PN}-xhci-rcar \
800 ${PN}-r128 \
801 ${PN}-rt1320-license ${PN}-rt1320 \
802 ${PN}-rp2-license ${PN}-rp2 \
803 ${PN}-s5p-mfc-license ${PN}-s5p-mfc \
804 ${PN}-snd-sb16-csp \
805 ${PN}-alacritech-license ${PN}-slicoss ${PN}-sxg \
806 ${PN}-tehuti-license ${PN}-tehuti \
807 ${PN}-tigon-license ${PN}-tg3 \
808 ${PN}-tlg2300-license ${PN}-tlg2300 \
809 ${PN}-montage-license ${PN}-mont-tsse \
810 ${PN}-ueagle-atm4-firmware-license ${PN}-ueagle-atm \
811 ${PN}-usbdux \
812 ${PN}-conexant-license ${PN}-cx231xx ${PN}-cx23418 ${PN}-cx23885 ${PN}-cx23840 \
813 ${PN}-vxge-license ${PN}-vxge \
814 ${PN}-whiteheat \
815 ${PN}-qualcommatheros-ath10k-license ${PN}-wil6210 \
816 ${PN}-xe-license ${PN}-xe \
650 ${PN}-license \ 817 ${PN}-license \
651 " 818 "
652 819
@@ -664,7 +831,10 @@ RDEPENDS:${PN}-amphion-vpu += "${PN}-amphion-vpu-license"
664LICENSE:${PN}-cw1200 = "Firmware-cw1200" 831LICENSE:${PN}-cw1200 = "Firmware-cw1200"
665LICENSE:${PN}-cw1200-license = "Firmware-cw1200" 832LICENSE:${PN}-cw1200-license = "Firmware-cw1200"
666 833
667FILES:${PN}-cw1200 = "${nonarch_base_libdir}/firmware/wsm_22.bin*" 834FILES:${PN}-cw1200 = " \
835 ${nonarch_base_libdir}/firmware/sdd_sagrad_1091_1098.bin* \
836 ${nonarch_base_libdir}/firmware/wsm_22.bin* \
837"
668FILES:${PN}-cw1200-license = "${nonarch_base_libdir}/firmware/LICENCE.cw1200" 838FILES:${PN}-cw1200-license = "${nonarch_base_libdir}/firmware/LICENCE.cw1200"
669 839
670RDEPENDS:${PN}-cw1200 += "${PN}-cw1200-license" 840RDEPENDS:${PN}-cw1200 += "${PN}-cw1200-license"
@@ -1136,12 +1306,32 @@ FILES:${PN}-lontium-license = "${nonarch_base_libdir}/firmware/LICENSE.Lontium"
1136FILES:${PN}-lt9611uxc = "${nonarch_base_libdir}/firmware/lt9611uxc_fw.bin*" 1306FILES:${PN}-lt9611uxc = "${nonarch_base_libdir}/firmware/lt9611uxc_fw.bin*"
1137 1307
1138# For Arm Mali 1308# For Arm Mali
1139LICENSE:${PN}-mali-csffw-arch108 = "Firmware-mali_csffw"
1140FILES:${PN}-mali-csffw-license = "${nonarch_base_libdir}/firmware/LICENCE.mali_csffw" 1309FILES:${PN}-mali-csffw-license = "${nonarch_base_libdir}/firmware/LICENCE.mali_csffw"
1141FILES:${PN}-mali-csffw-arch108 = "${nonarch_base_libdir}/firmware/arm/mali/arch10.8/mali_csffw.bin*"
1142 1310
1311LICENSE:${PN}-mali-csffw-arch108 = "Firmware-mali_csffw"
1312FILES:${PN}-mali-csffw-arch108 = "${nonarch_base_libdir}/firmware/arm/mali/arch10.8/mali_csffw.bin*"
1143RDEPENDS:${PN}-mali-csffw-arch108 += "${PN}-mali-csffw-license" 1313RDEPENDS:${PN}-mali-csffw-arch108 += "${PN}-mali-csffw-license"
1144 1314
1315LICENSE:${PN}-mali-csffw-arch1010 = "Firmware-mali_csffw"
1316FILES:${PN}-mali-csffw-arch1010 = "${nonarch_base_libdir}/firmware/arm/mali/arch10.10/mali_csffw.bin*"
1317RDEPENDS:${PN}-mali-csffw-arch1010 += "${PN}-mali-csffw-license"
1318
1319LICENSE:${PN}-mali-csffw-arch1012 = "Firmware-mali_csffw"
1320FILES:${PN}-mali-csffw-arch1012 = "${nonarch_base_libdir}/firmware/arm/mali/arch10.12/mali_csffw.bin*"
1321RDEPENDS:${PN}-mali-csffw-arch1012 += "${PN}-mali-csffw-license"
1322
1323LICENSE:${PN}-mali-csffw-arch118 = "Firmware-mali_csffw"
1324FILES:${PN}-mali-csffw-arch118 = "${nonarch_base_libdir}/firmware/arm/mali/arch11.8/mali_csffw.bin*"
1325RDEPENDS:${PN}-mali-csffw-arch118 += "${PN}-mali-csffw-license"
1326
1327LICENSE:${PN}-mali-csffw-arch128 = "Firmware-mali_csffw"
1328FILES:${PN}-mali-csffw-arch128 = "${nonarch_base_libdir}/firmware/arm/mali/arch12.8/mali_csffw.bin*"
1329RDEPENDS:${PN}-mali-csffw-arch128 += "${PN}-mali-csffw-license"
1330
1331LICENSE:${PN}-mali-csffw-arch138 = "Firmware-mali_csffw"
1332FILES:${PN}-mali-csffw-arch138 = "${nonarch_base_libdir}/firmware/arm/mali/arch13.8/mali_csffw.bin*"
1333RDEPENDS:${PN}-mali-csffw-arch138 += "${PN}-mali-csffw-license"
1334
1145# For marvell 1335# For marvell
1146LICENSE:${PN}-pcie8897 = "Firmware-Marvell" 1336LICENSE:${PN}-pcie8897 = "Firmware-Marvell"
1147LICENSE:${PN}-pcie8997 = "Firmware-Marvell" 1337LICENSE:${PN}-pcie8997 = "Firmware-Marvell"
@@ -1154,6 +1344,23 @@ LICENSE:${PN}-sd8887 = "Firmware-Marvell"
1154LICENSE:${PN}-sd8897 = "Firmware-Marvell" 1344LICENSE:${PN}-sd8897 = "Firmware-Marvell"
1155LICENSE:${PN}-sd8997 = "Firmware-Marvell" 1345LICENSE:${PN}-sd8997 = "Firmware-Marvell"
1156LICENSE:${PN}-usb8997 = "Firmware-Marvell" 1346LICENSE:${PN}-usb8997 = "Firmware-Marvell"
1347LICENSE:${PN}-cf8381 = "Firmware-Marvell"
1348LICENSE:${PN}-cf8385 = "Firmware-Marvell"
1349LICENSE:${PN}-gspi8682 = "Firmware-Marvell"
1350LICENSE:${PN}-gspi8686 = "Firmware-Marvell"
1351LICENSE:${PN}-gspi8688 = "Firmware-Marvell"
1352LICENSE:${PN}-sd8385 = "Firmware-Marvell"
1353LICENSE:${PN}-sd8682 = "Firmware-Marvell"
1354LICENSE:${PN}-usb8388 = "Firmware-Marvell"
1355LICENSE:${PN}-usb8682 = "Firmware-Marvell"
1356LICENSE:${PN}-sd8977 = "Firmware-Marvell"
1357LICENSE:${PN}-usb8766 = "Firmware-Marvell"
1358LICENSE:${PN}-usb8797 = "Firmware-Marvell"
1359LICENSE:${PN}-usb8801 = "Firmware-Marvell"
1360LICENSE:${PN}-usb8897 = "Firmware-Marvell"
1361LICENSE:${PN}-rvu-cptpf = "Firmware-Marvell"
1362LICENSE:${PN}-mwl8k = "Firmware-Marvell"
1363LICENSE:${PN}-mwlwifi = "Firmware-Marvell"
1157LICENSE:${PN}-marvell-license = "Firmware-Marvell" 1364LICENSE:${PN}-marvell-license = "Firmware-Marvell"
1158 1365
1159FILES:${PN}-marvell-license = "${nonarch_base_libdir}/firmware/LICENCE.Marvell" 1366FILES:${PN}-marvell-license = "${nonarch_base_libdir}/firmware/LICENCE.Marvell"
@@ -1166,8 +1373,7 @@ FILES:${PN}-pcie8997 = " \
1166 ${nonarch_base_libdir}/firmware/mrvl/pcieusb8997_combo_v4.bin* \ 1373 ${nonarch_base_libdir}/firmware/mrvl/pcieusb8997_combo_v4.bin* \
1167" 1374"
1168FILES:${PN}-sd8686 = " \ 1375FILES:${PN}-sd8686 = " \
1169 ${nonarch_base_libdir}/firmware/libertas/sd8686_v9* \ 1376 ${nonarch_base_libdir}/firmware/libertas/sd8686* \
1170 ${nonarch_base_libdir}/firmware/sd8686* \
1171" 1377"
1172FILES:${PN}-sd8688 = " \ 1378FILES:${PN}-sd8688 = " \
1173 ${nonarch_base_libdir}/firmware/libertas/sd8688* \ 1379 ${nonarch_base_libdir}/firmware/libertas/sd8688* \
@@ -1204,6 +1410,23 @@ FILES:${PN}-sd8997 = " \
1204FILES:${PN}-usb8997 = " \ 1410FILES:${PN}-usb8997 = " \
1205 ${nonarch_base_libdir}/firmware/mrvl/usbusb8997_combo_v4.bin* \ 1411 ${nonarch_base_libdir}/firmware/mrvl/usbusb8997_combo_v4.bin* \
1206" 1412"
1413FILES:${PN}-cf8381 = "${nonarch_base_libdir}/firmware/libertas/cf8381*"
1414FILES:${PN}-cf8385 = "${nonarch_base_libdir}/firmware/libertas/cf8385*"
1415FILES:${PN}-gspi8682 = "${nonarch_base_libdir}/firmware/libertas/gspi8682*"
1416FILES:${PN}-gspi8686 = "${nonarch_base_libdir}/firmware/libertas/gspi8686*"
1417FILES:${PN}-gspi8688 = "${nonarch_base_libdir}/firmware/libertas/gspi8688*"
1418FILES:${PN}-sd8385 = "${nonarch_base_libdir}/firmware/libertas/sd8385*"
1419FILES:${PN}-sd8682 = "${nonarch_base_libdir}/firmware/libertas/sd8682*"
1420FILES:${PN}-usb8388 = "${nonarch_base_libdir}/firmware/libertas/usb8388*"
1421FILES:${PN}-usb8682 = "${nonarch_base_libdir}/firmware/libertas/usb8682*"
1422FILES:${PN}-sd8977 = "${nonarch_base_libdir}/firmware/mrvl/sdsd8977*"
1423FILES:${PN}-usb8766 = "${nonarch_base_libdir}/firmware/mrvl/usb8766*"
1424FILES:${PN}-usb8797 = "${nonarch_base_libdir}/firmware/mrvl/usb8797*"
1425FILES:${PN}-usb8801 = "${nonarch_base_libdir}/firmware/mrvl/usb8801*"
1426FILES:${PN}-usb8897 = "${nonarch_base_libdir}/firmware/mrvl/usb8897*"
1427FILES:${PN}-rvu-cptpf = "${nonarch_base_libdir}/firmware/mrvl/cpt0*"
1428FILES:${PN}-mwl8k = "${nonarch_base_libdir}/firmware/mwl8k/*"
1429FILES:${PN}-mwlwifi = "${nonarch_base_libdir}/firmware/mwlwifi/*"
1207 1430
1208RDEPENDS:${PN}-sd8686 += "${PN}-marvell-license" 1431RDEPENDS:${PN}-sd8686 += "${PN}-marvell-license"
1209RDEPENDS:${PN}-sd8688 += "${PN}-marvell-license" 1432RDEPENDS:${PN}-sd8688 += "${PN}-marvell-license"
@@ -1214,6 +1437,23 @@ RDEPENDS:${PN}-sd8887 += "${PN}-marvell-license"
1214RDEPENDS:${PN}-sd8897 += "${PN}-marvell-license" 1437RDEPENDS:${PN}-sd8897 += "${PN}-marvell-license"
1215RDEPENDS:${PN}-sd8997 += "${PN}-marvell-license" 1438RDEPENDS:${PN}-sd8997 += "${PN}-marvell-license"
1216RDEPENDS:${PN}-usb8997 += "${PN}-marvell-license" 1439RDEPENDS:${PN}-usb8997 += "${PN}-marvell-license"
1440RDEPENDS:${PN}-cf8381 += "${PN}-marvell-license"
1441RDEPENDS:${PN}-cf8385 += "${PN}-marvell-license"
1442RDEPENDS:${PN}-gspi8682 += "${PN}-marvell-license"
1443RDEPENDS:${PN}-gspi8686 += "${PN}-marvell-license"
1444RDEPENDS:${PN}-gspi8688 += "${PN}-marvell-license"
1445RDEPENDS:${PN}-sd8385 += "${PN}-marvell-license"
1446RDEPENDS:${PN}-sd8682 += "${PN}-marvell-license"
1447RDEPENDS:${PN}-usb8388 += "${PN}-marvell-license"
1448RDEPENDS:${PN}-usb8682 += "${PN}-marvell-license"
1449RDEPENDS:${PN}-sd8977 += "${PN}-marvell-license"
1450RDEPENDS:${PN}-usb8766 += "${PN}-marvell-license"
1451RDEPENDS:${PN}-usb8797 += "${PN}-marvell-license"
1452RDEPENDS:${PN}-usb8801 += "${PN}-marvell-license"
1453RDEPENDS:${PN}-usb8897 += "${PN}-marvell-license"
1454RDEPENDS:${PN}-rvu-cptpf += "${PN}-marvell-license"
1455RDEPENDS:${PN}-mwl8k += "${PN}-marvell-license"
1456RDEPENDS:${PN}-mwlwifi += "${PN}-marvell-license"
1217 1457
1218# For netronome 1458# For netronome
1219LICENSE:${PN}-netronome = "Firmware-netronome" 1459LICENSE:${PN}-netronome = "Firmware-netronome"
@@ -1247,6 +1487,7 @@ LICENSE:${PN}-nxp9098-pcie = "Firmware-nxp"
1247LICENSE:${PN}-nxp9098-sdio = "Firmware-nxp" 1487LICENSE:${PN}-nxp9098-sdio = "Firmware-nxp"
1248LICENSE:${PN}-nxpiw416-sdio = "Firmware-nxp" 1488LICENSE:${PN}-nxpiw416-sdio = "Firmware-nxp"
1249LICENSE:${PN}-nxpiw612-sdio = "Firmware-nxp" 1489LICENSE:${PN}-nxpiw612-sdio = "Firmware-nxp"
1490LICENSE:${PN}-nxp-sr1xx = "Firmware-nxp"
1250LICENSE:${PN}-nxp-license = "Firmware-nxp" 1491LICENSE:${PN}-nxp-license = "Firmware-nxp"
1251 1492
1252FILES:${PN}-nxp8987-sdio = "${nonarch_base_libdir}/firmware/nxp/*8987*" 1493FILES:${PN}-nxp8987-sdio = "${nonarch_base_libdir}/firmware/nxp/*8987*"
@@ -1261,6 +1502,7 @@ ALLOW_EMPTY:${PN}-nxp9098-pcie = "1"
1261ALLOW_EMPTY:${PN}-nxp9098-sdio = "1" 1502ALLOW_EMPTY:${PN}-nxp9098-sdio = "1"
1262FILES:${PN}-nxpiw416-sdio = "${nonarch_base_libdir}/firmware/nxp/*iw416*" 1503FILES:${PN}-nxpiw416-sdio = "${nonarch_base_libdir}/firmware/nxp/*iw416*"
1263FILES:${PN}-nxpiw612-sdio = "${nonarch_base_libdir}/firmware/nxp/uartspi_n61x_v1.bin.se*" 1504FILES:${PN}-nxpiw612-sdio = "${nonarch_base_libdir}/firmware/nxp/uartspi_n61x_v1.bin.se*"
1505FILES:${PN}-nxp-sr1xx = "${nonarch_base_libdir}/firmware/nxp/sr150_fw.bin"
1264FILES:${PN}-nxp-license = "${nonarch_base_libdir}/firmware/LICENSE.nxp" 1506FILES:${PN}-nxp-license = "${nonarch_base_libdir}/firmware/LICENSE.nxp"
1265 1507
1266RDEPENDS:${PN}-nxp8987-sdio += "${PN}-nxp-license" 1508RDEPENDS:${PN}-nxp8987-sdio += "${PN}-nxp-license"
@@ -1272,6 +1514,7 @@ RDEPENDS:${PN}-nxp9098-pcie += "${PN}-nxp9098-common"
1272RDEPENDS:${PN}-nxp9098-sdio += "${PN}-nxp9098-common" 1514RDEPENDS:${PN}-nxp9098-sdio += "${PN}-nxp9098-common"
1273RDEPENDS:${PN}-nxpiw416-sdio += "${PN}-nxp-license" 1515RDEPENDS:${PN}-nxpiw416-sdio += "${PN}-nxp-license"
1274RDEPENDS:${PN}-nxpiw612-sdio += "${PN}-nxp-license" 1516RDEPENDS:${PN}-nxpiw612-sdio += "${PN}-nxp-license"
1517RDEPENDS:${PN}-nxp-sr1xx += "${PN}-nxp-license"
1275 1518
1276# For nxp-mc 1519# For nxp-mc
1277LICENSE:${PN}-nxp-mc = "Firmware-nxp_mc_firmware" 1520LICENSE:${PN}-nxp-mc = "Firmware-nxp_mc_firmware"
@@ -1348,12 +1591,15 @@ RDEPENDS:${PN}-qla2xxx += "${PN}-qla2xxx-license"
1348# For RSI RS911x WiFi 1591# For RSI RS911x WiFi
1349LICENSE:${PN}-rs9113 = "WHENCE" 1592LICENSE:${PN}-rs9113 = "WHENCE"
1350LICENSE:${PN}-rs9116 = "WHENCE" 1593LICENSE:${PN}-rs9116 = "WHENCE"
1594LICENSE:${PN}-rsi-91x = "WHENCE"
1351 1595
1352FILES:${PN}-rs9113 = " ${nonarch_base_libdir}/firmware/rsi/rs9113*.rps* " 1596FILES:${PN}-rs9113 = " ${nonarch_base_libdir}/firmware/rsi/rs9113*.rps* "
1353FILES:${PN}-rs9116 = " ${nonarch_base_libdir}/firmware/rsi/rs9116*.rps* " 1597FILES:${PN}-rs9116 = " ${nonarch_base_libdir}/firmware/rsi/rs9116*.rps* "
1598FILES:${PN}-rsi-91x = " ${nonarch_base_libdir}/firmware/rsi_91x.fw "
1354 1599
1355RDEPENDS:${PN}-rs9113 += "${PN}-whence-license" 1600RDEPENDS:${PN}-rs9113 += "${PN}-whence-license"
1356RDEPENDS:${PN}-rs9116 += "${PN}-whence-license" 1601RDEPENDS:${PN}-rs9116 += "${PN}-whence-license"
1602RDEPENDS:${PN}-rsi-91x += "${PN}-whence-license"
1357 1603
1358# For rtl 1604# For rtl
1359LICENSE:${PN}-rtl8188 = "Firmware-rtlwifi_firmware" 1605LICENSE:${PN}-rtl8188 = "Firmware-rtlwifi_firmware"
@@ -1364,6 +1610,14 @@ LICENSE:${PN}-rtl8723 = "Firmware-rtlwifi_firmware"
1364LICENSE:${PN}-rtl8761 = "Firmware-rtlwifi_firmware" 1610LICENSE:${PN}-rtl8761 = "Firmware-rtlwifi_firmware"
1365LICENSE:${PN}-rtl8821 = "Firmware-rtlwifi_firmware" 1611LICENSE:${PN}-rtl8821 = "Firmware-rtlwifi_firmware"
1366LICENSE:${PN}-rtl8822 = "Firmware-rtlwifi_firmware" 1612LICENSE:${PN}-rtl8822 = "Firmware-rtlwifi_firmware"
1613LICENSE:${PN}-rtl8192 = "Firmware-rtlwifi_firmware"
1614LICENSE:${PN}-rtl8710 = "Firmware-rtlwifi_firmware"
1615LICENSE:${PN}-rtl8812 = "Firmware-rtlwifi_firmware"
1616LICENSE:${PN}-rtl8851 = "Firmware-rtlwifi_firmware"
1617LICENSE:${PN}-rtl8852 = "Firmware-rtlwifi_firmware"
1618LICENSE:${PN}-rtl8922 = "Firmware-rtlwifi_firmware"
1619LICENSE:${PN}-rtl8703 = "Firmware-rtlwifi_firmware"
1620LICENSE:${PN}-rtl8814 = "Firmware-rtlwifi_firmware"
1367LICENSE:${PN}-rtl-license = "Firmware-rtlwifi_firmware" 1621LICENSE:${PN}-rtl-license = "Firmware-rtlwifi_firmware"
1368LICENSE:${PN}-rtl-nic = "WHENCE" 1622LICENSE:${PN}-rtl-nic = "WHENCE"
1369LICENSE:${PN}-rtl8168 = "WHENCE" 1623LICENSE:${PN}-rtl8168 = "WHENCE"
@@ -1390,6 +1644,7 @@ FILES:${PN}-rtl8723 = " \
1390" 1644"
1391FILES:${PN}-rtl8821 = " \ 1645FILES:${PN}-rtl8821 = " \
1392 ${nonarch_base_libdir}/firmware/rtlwifi/rtl8821*.bin* \ 1646 ${nonarch_base_libdir}/firmware/rtlwifi/rtl8821*.bin* \
1647 ${nonarch_base_libdir}/firmware/rtw88/README \
1393 ${nonarch_base_libdir}/firmware/rtw88/rtw8821*.bin* \ 1648 ${nonarch_base_libdir}/firmware/rtw88/rtw8821*.bin* \
1394 ${nonarch_base_libdir}/firmware/rtl_bt/rtl8821*.bin \ 1649 ${nonarch_base_libdir}/firmware/rtl_bt/rtl8821*.bin \
1395" 1650"
@@ -1407,6 +1662,30 @@ FILES:${PN}-rtl8822 = " \
1407FILES:${PN}-rtl-nic = " \ 1662FILES:${PN}-rtl-nic = " \
1408 ${nonarch_base_libdir}/firmware/rtl_nic/*.fw* \ 1663 ${nonarch_base_libdir}/firmware/rtl_nic/*.fw* \
1409" 1664"
1665FILES:${PN}-rtl8192 = " \
1666 ${nonarch_base_libdir}/firmware/rtlwifi/rtl8192* \
1667 ${nonarch_base_libdir}/firmware/rtl_bt/rtl8192* \
1668"
1669FILES:${PN}-rtl8710 = "${nonarch_base_libdir}/firmware/rtlwifi/rtl8710*"
1670FILES:${PN}-rtl8812 = " \
1671 ${nonarch_base_libdir}/firmware/rtlwifi/rtl8812* \
1672 ${nonarch_base_libdir}/firmware/rtl_bt/rtl8812* \
1673 ${nonarch_base_libdir}/firmware/rtw88/rtw8812* \
1674"
1675FILES:${PN}-rtl8851 = " \
1676 ${nonarch_base_libdir}/firmware/rtl_bt/rtl8851* \
1677 ${nonarch_base_libdir}/firmware/rtw89/rtw8851* \
1678"
1679FILES:${PN}-rtl8852 = " \
1680 ${nonarch_base_libdir}/firmware/rtl_bt/rtl8852* \
1681 ${nonarch_base_libdir}/firmware/rtw89/rtw8852* \
1682"
1683FILES:${PN}-rtl8922 = " \
1684 ${nonarch_base_libdir}/firmware/rtl_bt/rtl8922* \
1685 ${nonarch_base_libdir}/firmware/rtw89/rtw8922* \
1686"
1687FILES:${PN}-rtl8703 = "${nonarch_base_libdir}/firmware/rtw88/rtw8703*"
1688FILES:${PN}-rtl8814 = "${nonarch_base_libdir}/firmware/rtw88/rtw8814*"
1410 1689
1411RDEPENDS:${PN}-rtl8188 += "${PN}-rtl-license" 1690RDEPENDS:${PN}-rtl8188 += "${PN}-rtl-license"
1412RDEPENDS:${PN}-rtl8192ce += "${PN}-rtl-license" 1691RDEPENDS:${PN}-rtl8192ce += "${PN}-rtl-license"
@@ -1416,6 +1695,14 @@ RDEPENDS:${PN}-rtl8723 += "${PN}-rtl-license"
1416RDEPENDS:${PN}-rtl8821 += "${PN}-rtl-license" 1695RDEPENDS:${PN}-rtl8821 += "${PN}-rtl-license"
1417RDEPENDS:${PN}-rtl8761 += "${PN}-rtl-license" 1696RDEPENDS:${PN}-rtl8761 += "${PN}-rtl-license"
1418RDEPENDS:${PN}-rtl8822 += "${PN}-rtl-license" 1697RDEPENDS:${PN}-rtl8822 += "${PN}-rtl-license"
1698RDEPENDS:${PN}-rtl8192 += "${PN}-rtl-license"
1699RDEPENDS:${PN}-rtl8710 += "${PN}-rtl-license"
1700RDEPENDS:${PN}-rtl8812 += "${PN}-rtl-license"
1701RDEPENDS:${PN}-rtl8851 += "${PN}-rtl-license"
1702RDEPENDS:${PN}-rtl8852 += "${PN}-rtl-license"
1703RDEPENDS:${PN}-rtl8922 += "${PN}-rtl-license"
1704RDEPENDS:${PN}-rtl8703 += "${PN}-rtl-license"
1705RDEPENDS:${PN}-rtl8814 += "${PN}-rtl-license"
1419RDEPENDS:${PN}-rtl8168 += "${PN}-whence-license" 1706RDEPENDS:${PN}-rtl8168 += "${PN}-whence-license"
1420RDEPENDS:${PN}-rtl-nic += "${PN}-whence-license" 1707RDEPENDS:${PN}-rtl-nic += "${PN}-whence-license"
1421 1708
@@ -1488,6 +1775,41 @@ FILES:${PN}-ti-keystone-license = " \
1488" 1775"
1489RDEPENDS:${PN}-ti-keystone += "${PN}-ti-keystone-license" 1776RDEPENDS:${PN}-ti-keystone += "${PN}-ti-keystone-license"
1490 1777
1778# For ti-tspa-license
1779LICENSE:${PN}-ti-tspa-license = "Firmware-ti-tspa"
1780FILES:${PN}-ti-tspa-license = "${nonarch_base_libdir}/firmware/LICENCE.ti-tspa"
1781
1782# For ti-tas2563 - tas2563 firmware
1783LICENSE:${PN}-ti-tas2563 = "Firmware-ti-tspa"
1784FILES:${PN}-ti-tas2563 = "\
1785 ${nonarch_base_libdir}/firmware/INT8866RCA2.bin \
1786 ${nonarch_base_libdir}/firmware/TAS2XXX3870.bin \
1787 ${nonarch_base_libdir}/firmware/ti/tas2563/* \
1788"
1789RDEPENDS:${PN}-ti-tas2563 = "${PN}-ti-tspa-license"
1790
1791# For ti-tas2781 - tas2781 firmware
1792LICENSE:${PN}-ti-tas2781 = "Firmware-ti-tspa"
1793FILES:${PN}-ti-tas2781 = "\
1794 ${nonarch_base_libdir}/firmware/TAS2XXX*.bin \
1795 ${nonarch_base_libdir}/firmware/TIAS2781*.bin \
1796 ${nonarch_base_libdir}/firmware/TXNW2781*.bin \
1797 ${nonarch_base_libdir}/firmware/ti/tas2781/* \
1798"
1799RDEPENDS:${PN}-ti-tas2781 = "${PN}-ti-tspa-license"
1800
1801# For ti-vpe - Texas Instruments V4L2 driver for Video Processing Engine
1802LICENSE:${PN}-ti-vpe = "Firmware-ti-tspa"
1803FILES:${PN}-ti-vpe = "${nonarch_base_libdir}/firmware/ti/vpdma-1b8.bin"
1804RDEPENDS:${PN}-ti-vpe = "${PN}-ti-tspa-license"
1805
1806# For ti_usb_3410_5052 - USB TI 3410/5052 serial device
1807LICENSE:${PN}-ti-usb-3410-5052 = "GPL-2.0-or-later"
1808FILES:${PN}-ti-usb-3410-5052 = "\
1809 ${nonarch_base_libdir}/firmware/ti_3410.fw \
1810 ${nonarch_base_libdir}/firmware/ti_5052.fw \
1811"
1812
1491# For vt6656 1813# For vt6656
1492LICENSE:${PN}-vt6656 = "Firmware-via_vt6656" 1814LICENSE:${PN}-vt6656 = "Firmware-via_vt6656"
1493LICENSE:${PN}-vt6656-license = "Firmware-via_vt6656" 1815LICENSE:${PN}-vt6656-license = "Firmware-via_vt6656"
@@ -1549,9 +1871,12 @@ FILES:${PN}-bcm4339 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4339-sdio.bi
1549 ${nonarch_base_libdir}/firmware/cypress/cyfmac4339-sdio.bin* \ 1871 ${nonarch_base_libdir}/firmware/cypress/cyfmac4339-sdio.bin* \
1550" 1872"
1551FILES:${PN}-bcm43241b0 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43241b0-sdio.bin*" 1873FILES:${PN}-bcm43241b0 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43241b0-sdio.bin*"
1552FILES:${PN}-bcm43241b4 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43241b4-sdio.bin*" 1874FILES:${PN}-bcm43241b4 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43241b4-sdio.*"
1553FILES:${PN}-bcm43241b5 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43241b5-sdio.bin*" 1875FILES:${PN}-bcm43241b5 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43241b5-sdio.bin*"
1554FILES:${PN}-bcm43242a = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43242a.bin*" 1876FILES:${PN}-bcm43242a = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43242a.bin*"
1877FILES:${PN}-bcm43012 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43012-sdio.* \
1878 ${nonarch_base_libdir}/firmware/cypress/cyfmac43012-sdio.* \
1879"
1555FILES:${PN}-bcm43143 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43143.bin* \ 1880FILES:${PN}-bcm43143 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43143.bin* \
1556 ${nonarch_base_libdir}/firmware/brcm/brcmfmac43143-sdio.bin* \ 1881 ${nonarch_base_libdir}/firmware/brcm/brcmfmac43143-sdio.bin* \
1557" 1882"
@@ -1565,8 +1890,8 @@ FILES:${PN}-bcm4356 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4356-sdio.*
1565 ${nonarch_base_libdir}/firmware/cypress/cyfmac4356-sdio.* \ 1890 ${nonarch_base_libdir}/firmware/cypress/cyfmac4356-sdio.* \
1566" 1891"
1567FILES:${PN}-bcm43569 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43569.bin*" 1892FILES:${PN}-bcm43569 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43569.bin*"
1568FILES:${PN}-bcm43570 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43570-pcie.bin* \ 1893FILES:${PN}-bcm43570 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43570-pcie.* \
1569 ${nonarch_base_libdir}/firmware/cypress/cyfmac43570-pcie.bin* \ 1894 ${nonarch_base_libdir}/firmware/cypress/cyfmac43570-pcie.* \
1570" 1895"
1571FILES:${PN}-bcm4358 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4358-pcie.bin*" 1896FILES:${PN}-bcm4358 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4358-pcie.bin*"
1572FILES:${PN}-bcm43602 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43602-pcie.bin* \ 1897FILES:${PN}-bcm43602 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43602-pcie.bin* \
@@ -1576,6 +1901,10 @@ FILES:${PN}-bcm4366b = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4366b-pcie.
1576FILES:${PN}-bcm4366c = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4366c-pcie.bin*" 1901FILES:${PN}-bcm4366c = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4366c-pcie.bin*"
1577FILES:${PN}-bcm4371 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4371-pcie.bin*" 1902FILES:${PN}-bcm4371 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4371-pcie.bin*"
1578 1903
1904FILES:${PN}-bcm54591 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac54591-pcie.* \
1905 ${nonarch_base_libdir}/firmware/cypress/cyfmac54591-pcie.* \
1906"
1907
1579# for i in `grep brcm WHENCE | grep ^File | sed 's/File: brcm.//g'`; do pkg=`echo $i | sed 's/-[sp40].*//g; s/\.bin//g; s/brcmfmac/bcm/g; s/_hdr/-hdr/g; s/BCM/bcm-0bb4-0306/g'`; echo -e "LICENSE:\${PN}-$pkg = \"Firmware-broadcom_bcm43xx\"\nRDEPENDS_\${PN}-$pkg += \"\${PN}-broadcom-license\""; done 1908# for i in `grep brcm WHENCE | grep ^File | sed 's/File: brcm.//g'`; do pkg=`echo $i | sed 's/-[sp40].*//g; s/\.bin//g; s/brcmfmac/bcm/g; s/_hdr/-hdr/g; s/BCM/bcm-0bb4-0306/g'`; echo -e "LICENSE:\${PN}-$pkg = \"Firmware-broadcom_bcm43xx\"\nRDEPENDS_\${PN}-$pkg += \"\${PN}-broadcom-license\""; done
1580# Currently 1st one and last 6 have cypress LICENSE 1909# Currently 1st one and last 6 have cypress LICENSE
1581 1910
@@ -1605,6 +1934,8 @@ LICENSE:${PN}-bcm43241b5 = "Firmware-broadcom_bcm43xx"
1605RDEPENDS:${PN}-bcm43241b5 += "${PN}-broadcom-license" 1934RDEPENDS:${PN}-bcm43241b5 += "${PN}-broadcom-license"
1606LICENSE:${PN}-bcm43242a = "Firmware-broadcom_bcm43xx" 1935LICENSE:${PN}-bcm43242a = "Firmware-broadcom_bcm43xx"
1607RDEPENDS:${PN}-bcm43242a += "${PN}-broadcom-license" 1936RDEPENDS:${PN}-bcm43242a += "${PN}-broadcom-license"
1937LICENSE:${PN}-bcm43012 = "Firmware-broadcom_bcm43xx"
1938RDEPENDS:${PN}-bcm43012 += "${PN}-broadcom-license"
1608LICENSE:${PN}-bcm43143 = "Firmware-broadcom_bcm43xx" 1939LICENSE:${PN}-bcm43143 = "Firmware-broadcom_bcm43xx"
1609RDEPENDS:${PN}-bcm43143 += "${PN}-broadcom-license" 1940RDEPENDS:${PN}-bcm43143 += "${PN}-broadcom-license"
1610LICENSE:${PN}-bcm43430a0 = "Firmware-broadcom_bcm43xx" 1941LICENSE:${PN}-bcm43430a0 = "Firmware-broadcom_bcm43xx"
@@ -1631,6 +1962,8 @@ LICENSE:${PN}-bcm4366c = "Firmware-broadcom_bcm43xx"
1631RDEPENDS:${PN}-bcm4366c += "${PN}-broadcom-license" 1962RDEPENDS:${PN}-bcm4366c += "${PN}-broadcom-license"
1632LICENSE:${PN}-bcm4371 = "Firmware-broadcom_bcm43xx" 1963LICENSE:${PN}-bcm4371 = "Firmware-broadcom_bcm43xx"
1633RDEPENDS:${PN}-bcm4371 += "${PN}-broadcom-license" 1964RDEPENDS:${PN}-bcm4371 += "${PN}-broadcom-license"
1965LICENSE:${PN}-bcm54591 = "Firmware-broadcom_bcm43xx"
1966RDEPENDS:${PN}-bcm54591 += "${PN}-broadcom-license"
1634 1967
1635# For broadcom cypress 1968# For broadcom cypress
1636 1969
@@ -1638,14 +1971,15 @@ LICENSE:${PN}-cypress-license = "Firmware-cypress"
1638FILES:${PN}-cypress-license = "${nonarch_base_libdir}/firmware/LICENCE.cypress" 1971FILES:${PN}-cypress-license = "${nonarch_base_libdir}/firmware/LICENCE.cypress"
1639 1972
1640FILES:${PN}-bcm-0bb4-0306 = "${nonarch_base_libdir}/firmware/brcm/BCM-0bb4-0306.hcd*" 1973FILES:${PN}-bcm-0bb4-0306 = "${nonarch_base_libdir}/firmware/brcm/BCM-0bb4-0306.hcd*"
1974FILES:${PN}-bcm-0a5c-6410 = "${nonarch_base_libdir}/firmware/brcm/BCM-0a5c-6410.hcd*"
1641FILES:${PN}-bcm43340 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43340-sdio.* \ 1975FILES:${PN}-bcm43340 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43340-sdio.* \
1642 ${nonarch_base_libdir}/firmware/cypress/cyfmac43340-sdio.*" 1976 ${nonarch_base_libdir}/firmware/cypress/cyfmac43340-sdio.*"
1643FILES:${PN}-bcm43362 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43362-sdio.* \ 1977FILES:${PN}-bcm43362 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43362-sdio.* \
1644 ${nonarch_base_libdir}/firmware/cypress/cyfmac43362-sdio.*" 1978 ${nonarch_base_libdir}/firmware/cypress/cyfmac43362-sdio.*"
1645FILES:${PN}-bcm43430 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43430-sdio.* \ 1979FILES:${PN}-bcm43430 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac43430-sdio.* \
1646 ${nonarch_base_libdir}/firmware/cypress/cyfmac43430-sdio.*" 1980 ${nonarch_base_libdir}/firmware/cypress/cyfmac43430-sdio.*"
1647FILES:${PN}-bcm4354 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4354-sdio.bin* \ 1981FILES:${PN}-bcm4354 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4354-sdio.* \
1648 ${nonarch_base_libdir}/firmware/cypress/cyfmac4354-sdio.bin* \ 1982 ${nonarch_base_libdir}/firmware/cypress/cyfmac4354-sdio.* \
1649" 1983"
1650FILES:${PN}-bcm4356-pcie = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4356-pcie.* \ 1984FILES:${PN}-bcm4356-pcie = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4356-pcie.* \
1651 ${nonarch_base_libdir}/firmware/cypress/cyfmac4356-pcie.* \ 1985 ${nonarch_base_libdir}/firmware/cypress/cyfmac4356-pcie.* \
@@ -1659,6 +1993,8 @@ FILES:${PN}-bcm4373 = "${nonarch_base_libdir}/firmware/brcm/brcmfmac4373-sdio.bi
1659 1993
1660LICENSE:${PN}-bcm-0bb4-0306 = "Firmware-cypress" 1994LICENSE:${PN}-bcm-0bb4-0306 = "Firmware-cypress"
1661RDEPENDS:${PN}-bcm-0bb4-0306 += "${PN}-cypress-license" 1995RDEPENDS:${PN}-bcm-0bb4-0306 += "${PN}-cypress-license"
1996LICENSE:${PN}-bcm-0a5c-6410 = "Firmware-cypress"
1997RDEPENDS:${PN}-bcm-0a5c-6410 += "${PN}-bcm-0bb4-0306"
1662LICENSE:${PN}-bcm43340 = "Firmware-cypress" 1998LICENSE:${PN}-bcm43340 = "Firmware-cypress"
1663RDEPENDS:${PN}-bcm43340 += "${PN}-cypress-license" 1999RDEPENDS:${PN}-bcm43340 += "${PN}-cypress-license"
1664LICENSE:${PN}-bcm43362 = "Firmware-cypress" 2000LICENSE:${PN}-bcm43362 = "Firmware-cypress"
@@ -1699,7 +2035,10 @@ RDEPENDS:${PN}-bnx2x += "${PN}-whence-license"
1699LICENSE:${PN}-cirrus = "Firmware-cirrus" 2035LICENSE:${PN}-cirrus = "Firmware-cirrus"
1700LICENSE:${PN}-cirrus-license = "Firmware-cirrus" 2036LICENSE:${PN}-cirrus-license = "Firmware-cirrus"
1701 2037
1702FILES:${PN}-cirrus = "${nonarch_base_libdir}/firmware/cirrus/*" 2038FILES:${PN}-cirrus = " \
2039 ${nonarch_base_libdir}/firmware/cs42l43.bin \
2040 ${nonarch_base_libdir}/firmware/cirrus/* \
2041"
1703FILES:${PN}-cirrus-license = "${nonarch_base_libdir}/firmware/LICENSE.cirrus" 2042FILES:${PN}-cirrus-license = "${nonarch_base_libdir}/firmware/LICENSE.cirrus"
1704 2043
1705RDEPENDS:${PN}-cirrus += "${PN}-cirrus-license" 2044RDEPENDS:${PN}-cirrus += "${PN}-cirrus-license"
@@ -1708,7 +2047,7 @@ RDEPENDS:${PN}-cirrus += "${PN}-cirrus-license"
1708LICENSE:${PN}-cnm = "Firmware-cnm" 2047LICENSE:${PN}-cnm = "Firmware-cnm"
1709LICENSE:${PN}-cnm-license = "Firmware-cnm" 2048LICENSE:${PN}-cnm-license = "Firmware-cnm"
1710 2049
1711FILES:${PN}-cnm = "${nonarch_base_libdir}/firmware/cnm/wave521c_k3_codec_fw.bin*" 2050FILES:${PN}-cnm = "${nonarch_base_libdir}/firmware/cnm/*"
1712FILES:${PN}-cnm-license = "${nonarch_base_libdir}/firmware/LICENCE.cnm" 2051FILES:${PN}-cnm-license = "${nonarch_base_libdir}/firmware/LICENCE.cnm"
1713 2052
1714RDEPENDS:${PN}-cnm += "${PN}-cnm-license" 2053RDEPENDS:${PN}-cnm += "${PN}-cnm-license"
@@ -1897,9 +2236,14 @@ LICENSE:${PN}-adsp-sst-license = "Firmware-adsp_sst"
1897FILES:${PN}-adsp-sst = "\ 2236FILES:${PN}-adsp-sst = "\
1898 ${nonarch_base_libdir}/firmware/intel/dsp_fw* \ 2237 ${nonarch_base_libdir}/firmware/intel/dsp_fw* \
1899 ${nonarch_base_libdir}/firmware/intel/avs/*/dsp_basefw.bin \ 2238 ${nonarch_base_libdir}/firmware/intel/avs/*/dsp_basefw.bin \
2239 ${nonarch_base_libdir}/firmware/intel/avs/skl/dsp_mod_7CAD0808-AB10-CD23-EF45-12AB34CD56EF.bin \
1900" 2240"
1901RDEPENDS:${PN}-adsp-sst = "${PN}-adsp-sst-license" 2241RDEPENDS:${PN}-adsp-sst = "${PN}-adsp-sst-license"
1902 2242
2243# For snd_soc_avs - Intel AudioDSP driver for cAVS platforms
2244LICENSE:${PN}-snd-soc-avs = "Apache-2.0"
2245FILES:${PN}-snd-soc-avs = "${nonarch_base_libdir}/firmware/intel/avs/*"
2246
1903# For QAT 2247# For QAT
1904LICENSE:${PN}-qat = "Firmware-qat" 2248LICENSE:${PN}-qat = "Firmware-qat"
1905LICENSE:${PN}-qat-license = "Firmware-qat" 2249LICENSE:${PN}-qat-license = "Firmware-qat"
@@ -2061,7 +2405,11 @@ FILES:${PN}-qcom-qrb4210-compute = "${nonarch_base_libdir}/firmware/qcom/qrb4210
2061FILES:${PN}-qcom-qrb4210-modem = "${nonarch_base_libdir}/firmware/qcom/qrb4210/modem*.*" 2405FILES:${PN}-qcom-qrb4210-modem = "${nonarch_base_libdir}/firmware/qcom/qrb4210/modem*.*"
2062FILES:${PN}-qcom-qrb4210-wifi = "${nonarch_base_libdir}/firmware/qcom/qrb4210/wlanmdsp.mbn* ${nonarch_base_libdir}/firmware/ath10k/WCN3990/hw1.0/qrb4210/*" 2406FILES:${PN}-qcom-qrb4210-wifi = "${nonarch_base_libdir}/firmware/qcom/qrb4210/wlanmdsp.mbn* ${nonarch_base_libdir}/firmware/ath10k/WCN3990/hw1.0/qrb4210/*"
2063FILES:${PN}-qcom-sa8775p-adreno = "${nonarch_base_libdir}/firmware/qcom/sa8775p/a663_zap.mbn*" 2407FILES:${PN}-qcom-sa8775p-adreno = "${nonarch_base_libdir}/firmware/qcom/sa8775p/a663_zap.mbn*"
2064FILES:${PN}-qcom-sa8775p-audio = "${nonarch_base_libdir}/firmware/qcom/sa8775p/adsp*.* ${nonarch_base_libdir}/firmware/qcom/qcs9100/LEMANS-EVK-tplg.bin*" 2408FILES:${PN}-qcom-sa8775p-audio = "\
2409 ${nonarch_base_libdir}/firmware/qcom/sa8775p/adsp*.* \
2410 ${nonarch_base_libdir}/firmware/qcom/sa8775p/LEMANS-EVK-tplg.bin \
2411 ${nonarch_base_libdir}/firmware/qcom/qcs9100/LEMANS-EVK-tplg.bin \
2412"
2065FILES:${PN}-qcom-sa8775p-compute = "${nonarch_base_libdir}/firmware/qcom/sa8775p/cdsp*.*" 2413FILES:${PN}-qcom-sa8775p-compute = "${nonarch_base_libdir}/firmware/qcom/sa8775p/cdsp*.*"
2066FILES:${PN}-qcom-sa8775p-generalpurpose = "${nonarch_base_libdir}/firmware/qcom/sa8775p/gpdsp*.*" 2414FILES:${PN}-qcom-sa8775p-generalpurpose = "${nonarch_base_libdir}/firmware/qcom/sa8775p/gpdsp*.*"
2067FILES:${PN}-qcom-sa8775p-qupv3fw = "${nonarch_base_libdir}/firmware/qcom/sa8775p/qupv3fw.elf*" 2415FILES:${PN}-qcom-sa8775p-qupv3fw = "${nonarch_base_libdir}/firmware/qcom/sa8775p/qupv3fw.elf*"
@@ -2217,6 +2565,656 @@ FILES:${PN}-amlogic-vdec-license = "${nonarch_base_libdir}/firmware/LICENSE.amlo
2217FILES:${PN}-amlogic-vdec = "${nonarch_base_libdir}/firmware/meson/vdec/*" 2565FILES:${PN}-amlogic-vdec = "${nonarch_base_libdir}/firmware/meson/vdec/*"
2218RDEPENDS:${PN}-amlogic-vdec = "${PN}-amlogic-vdec-license" 2566RDEPENDS:${PN}-amlogic-vdec = "${PN}-amlogic-vdec-license"
2219 2567
2568# For 3com typhoon
2569LICENSE:${PN}-typhoon-license = "Firmware-typhoon"
2570LICENSE:${PN}-typhoon = "Firmware-typhoon"
2571FILES:${PN}-typhoon-license = "${nonarch_base_libdir}/firmware/LICENCE.typhoon"
2572FILES:${PN}-typhoon = "${nonarch_base_libdir}/firmware/3com/typhoon.bin"
2573RDEPENDS:${PN}-typhoon = "${PN}-typhoon-license"
2574
2575# For ish - Intel Integrated Sensor Hub
2576LICENSE:${PN}-intel-license = "Firmware-intel"
2577FILES:${PN}-intel-license = "${nonarch_base_libdir}/firmware/LICENSE.intel"
2578
2579LICENSE:${PN}-ish-lnlm = "Firmware-intel"
2580FILES:${PN}-ish-lnlm = "${nonarch_base_libdir}/firmware/intel/ish/ish_lnlm.bin"
2581RDEPENDS:${PN}-ish-lnlm = "${PN}-intel-license"
2582
2583# For LENOVO ish - Intel Integrated Sensor Hub
2584LICENSE:${PN}-lenovo-license = "Firmware-lenovo"
2585FILES:${PN}-lenovo-license = "${nonarch_base_libdir}/firmware/LICENCE.lenovo"
2586
2587LICENSE:${PN}-ish-lnlm-53c4ffad-2a17559f = "Firmware-lenovo"
2588FILES:${PN}-ish-lnlm-53c4ffad-2a17559f = "\
2589 ${nonarch_base_libdir}/firmware/LENOVO/ish/ish_lnlm_53c4ffad_2a17559f.bin \
2590 ${nonarch_base_libdir}/firmware/intel/ish/ish_lnlm_53c4ffad_2a17559f.bin \
2591"
2592RDEPENDS:${PN}-ish-lnlm-53c4ffad-2a17559f = "${PN}-lenovo-license"
2593
2594# For advansys - AdvanSys SCSI
2595LICENSE:${PN}-advansys-license = "Firmware-advansys"
2596FILES:${PN}-advansys-license = "${nonarch_base_libdir}/firmware/LICENCE.advansys"
2597
2598LICENSE:${PN}-advansys = "Firmware-advansys"
2599FILES:${PN}-advansys = "${nonarch_base_libdir}/firmware/advansys/*"
2600RDEPENDS:${PN}-advansys = "${PN}-advansys-license"
2601
2602# For as21xxx
2603LICENSE:${PN}-aeonsemi-license = "Firmware-aeonsemi"
2604FILES:${PN}-aeonsemi-license = "${nonarch_base_libdir}/firmware/LICENSE.aeonsemi"
2605
2606LICENSE:${PN}-as21xxx = "Firmware-aeonsemi"
2607FILES:${PN}-as21xxx = "${nonarch_base_libdir}/firmware/aeonsemi/*"
2608RDEPENDS:${PN}-as21xxx = "${PN}-aeonsemi-license"
2609
2610# For orinoco - Agere/Prism/Symbol Orinoco support
2611LICENSE:${PN}-agere-license = "Firmware-agere"
2612FILES:${PN}-agere-license = "${nonarch_base_libdir}/firmware/LICENCE.agere"
2613
2614LICENSE:${PN}-orinoco = "Firmware-agere"
2615FILES:${PN}-orinoco = "${nonarch_base_libdir}/firmware/agere_*"
2616RDEPENDS:${PN}-orinoco = "${PN}-agere-license"
2617
2618# For en8811h - Airoha 2.5G Ethernet Phy
2619LICENSE:${PN}-airoha-license = "Firmware-airoha"
2620FILES:${PN}-airoha-license = "${nonarch_base_libdir}/firmware/LICENSE.airoha"
2621
2622LICENSE:${PN}-en8811h = "Firmware-airoha"
2623FILES:${PN}-en8811h = "${nonarch_base_libdir}/firmware/airoha/EthMD32*"
2624RDEPENDS:${PN}-en8811h = "${PN}-airoha-license"
2625
2626# For airoha-npu - Airoha Network Processor Unit driver
2627LICENSE:${PN}-airoha-npu = "Firmware-airoha"
2628FILES:${PN}-airoha-npu = "${nonarch_base_libdir}/firmware/airoha/en7581_npu*"
2629RDEPENDS:${PN}-airoha-npu = "${PN}-airoha-license"
2630
2631# For ccp - Platform Security Processor (PSP) device
2632LICENSE:${PN}-amd-sev-license = "Firmware-amd-sev"
2633FILES:${PN}-amd-sev-license = "${nonarch_base_libdir}/firmware/LICENSE.amd-sev"
2634
2635LICENSE:${PN}-ccp = "Firmware-amd-sev"
2636FILES:${PN}-ccp = "${nonarch_base_libdir}/firmware/amd/amd_sev*"
2637RDEPENDS:${PN}-ccp = "${PN}-amd-sev-license"
2638
2639# For amdxdna - AMD Inference processor
2640LICENSE:${PN}-amdnpu-license = "Firmware-amdnpu"
2641FILES:${PN}-amdnpu-license = "${nonarch_base_libdir}/firmware/LICENSE.amdnpu"
2642
2643LICENSE:${PN}-amdxdna = "Firmware-amdnpu"
2644FILES:${PN}-amdxdna = "${nonarch_base_libdir}/firmware/amdnpu/*"
2645RDEPENDS:${PN}-amdxdna = "${PN}-amdnpu-license"
2646
2647# For amd_pmf - AMD Platform Management Framework TA
2648LICENSE:${PN}-amd-pmf-license = "Firmware-amd_pmf"
2649FILES:${PN}-amd-pmf-license = "${nonarch_base_libdir}/firmware/LICENSE.amd_pmf"
2650
2651LICENSE:${PN}-amd-pmf = "Firmware-amd_pmf"
2652FILES:${PN}-amd-pmf = "${nonarch_base_libdir}/firmware/amdtee/*"
2653RDEPENDS:${PN}-amd-pmf = "${PN}-amd-pmf-license"
2654
2655# For microcode_amd - AMD CPU Microcode Update Driver for Linux
2656LICENSE:${PN}-amd-ucode-license = "Firmware-amd-ucode"
2657FILES:${PN}-amd-ucode-license = "${nonarch_base_libdir}/firmware/LICENSE.amd-ucode"
2658
2659LICENSE:${PN}-microcode-amd = "Firmware-amd-ucode"
2660FILES:${PN}-microcode-amd = "${nonarch_base_libdir}/firmware/amd-ucode/*"
2661RDEPENDS:${PN}-microcode-amd = "${PN}-amd-ucode-license"
2662
2663# For amlogic - Amlogic SoC Firmware
2664LICENSE:${PN}-amlogic-license = "Firmware-amlogic"
2665FILES:${PN}-amlogic-license = "${nonarch_base_libdir}/firmware/LICENSE.amlogic"
2666
2667LICENSE:${PN}-amlogic = "Firmware-amlogic"
2668FILES:${PN}-amlogic = "${nonarch_base_libdir}/firmware/amlogic/aml_*"
2669RDEPENDS:${PN}-amlogic = "${PN}-amlogic-license"
2670
2671# For starfire - Adaptec Starfire/DuraLAN support
2672LICENSE:${PN}-starfire = "GPL-2.0-only"
2673FILES:${PN}-starfire = "${nonarch_base_libdir}/firmware/adaptec/starfire*"
2674
2675# For as102 - Abilis Systems Single DVB-T Receiver
2676LICENSE:${PN}-abilis-license = "Firmware-Abilis"
2677FILES:${PN}-abilis-license = "${nonarch_base_libdir}/firmware/LICENCE.Abilis"
2678
2679LICENSE:${PN}-as102 = "Firmware-Abilis"
2680FILES:${PN}-as102 = "${nonarch_base_libdir}/firmware/as102_data*_st.hex"
2681RDEPENDS:${PN}-as102 = "${PN}-abilis-license"
2682
2683# For wilc1000 - Atmel 802.11n WLAN driver for WILC1000 & WILC3000
2684LICENSE:${PN}-atmel-license = "Firmware-atmel"
2685FILES:${PN}-atmel-license = "${nonarch_base_libdir}/firmware/LICENSE.atmel"
2686
2687LICENSE:${PN}-wilc1000 = "Firmware-atmel"
2688FILES:${PN}-wilc1000 = "${nonarch_base_libdir}/firmware/atmel/wilc1000*"
2689RDEPENDS:${PN}-wilc1000 = "${PN}-atmel-license"
2690
2691LICENSE:${PN}-wilc3000 = "Firmware-atmel"
2692FILES:${PN}-wilc3000 = "${nonarch_base_libdir}/firmware/atmel/wilc3000*"
2693RDEPENDS:${PN}-wilc3000 = "${PN}-atmel-license"
2694
2695# For atusb - ATUSB IEEE 802.15.4 transceiver driver
2696FILES:${PN}-atusb = "${nonarch_base_libdir}/firmware/atusb/*"
2697LICENSE:${PN}-atusb = "GPL-2.0-or-later"
2698
2699# For dvb-ttpci - AV7110 cards
2700FILES:${PN}-dvb-ttpci = "${nonarch_base_libdir}/firmware/av7110/*"
2701LICENSE:${PN}-dvb-ttpci = "GPL-2.0-or-later"
2702
2703# For bmi260 - Bosch BMI260 IMU configuration data
2704LICENSE:${PN}-bmi260-license = "Firmware-bmi260"
2705FILES:${PN}-bmi260-license = "${nonarch_base_libdir}/firmware/LICENSE.bmi260"
2706
2707LICENSE:${PN}-bmi260 = "Firmware-bmi260"
2708FILES:${PN}-bmi260 = "${nonarch_base_libdir}/firmware/bmi260-init-data.fw"
2709RDEPENDS:${PN}-bmi260 = "${PN}-bmi260-license"
2710
2711# For cdns-mhdp - Cadence MHDP8546 DP bridge
2712LICENSE:${PN}-cadence-license = "Firmware-cadence"
2713FILES:${PN}-cadence-license = "${nonarch_base_libdir}/firmware/LICENCE.cadence"
2714
2715LICENSE:${PN}-mhdp8546 = "Firmware-cadence"
2716FILES:${PN}-mhdp8546 = "${nonarch_base_libdir}/firmware/cadence/mhdp8546.bin"
2717RDEPENDS:${PN}-mhdp8546 = "${PN}-cadence-license"
2718
2719# For nitrox - Cavium CNN55XX crypto driver
2720LICENSE:${PN}-cavium-license = "Firmware-cavium"
2721FILES:${PN}-cavium-license = "${nonarch_base_libdir}/firmware/LICENCE.cavium"
2722
2723LICENSE:${PN}-cnn55xx = "Firmware-cavium"
2724FILES:${PN}-cnn55xx = "${nonarch_base_libdir}/firmware/cavium/cnn55xx*"
2725RDEPENDS:${PN}-cnn55xx = "${PN}-cavium-license"
2726
2727# For BFA/BNA - QLogic BR-series Adapter FC/FCOE drivers
2728LICENSE:${PN}-bfa-license = "Firmware-bfa"
2729FILES:${PN}-bfa-license = "${nonarch_base_libdir}/firmware/LICENSE.bfa"
2730
2731LICENSE:${PN}-cbfw = "Firmware-bfa"
2732FILES:${PN}-cbfw = "${nonarch_base_libdir}/firmware/cbfw-3.2.5.1.bin"
2733RDEPENDS:${PN}-cbfw = "${PN}-bfa-license"
2734
2735LICENSE:${PN}-ctfw = "Firmware-bfa"
2736FILES:${PN}-ctfw = "${nonarch_base_libdir}/firmware/ctfw-3.2.5.1.bin"
2737RDEPENDS:${PN}-ctfw = "${PN}-bfa-license"
2738
2739LICENSE:${PN}-ct2fw = "Firmware-bfa"
2740FILES:${PN}-ct2fw = "${nonarch_base_libdir}/firmware/ct2fw-3.2.5.1.bin"
2741RDEPENDS:${PN}-ct2fw = "${PN}-bfa-license"
2742
2743# For pcnet_cs - NE2000 compatible PCMCIA adapter
2744FILES:${PN}-pcnet-cs = " \
2745 ${nonarch_base_libdir}/firmware/cis/LA-PCM.cis \
2746 ${nonarch_base_libdir}/firmware/cis/PCMLM28.cis \
2747 ${nonarch_base_libdir}/firmware/cis/DP83903.cis \
2748 ${nonarch_base_libdir}/firmware/cis/NE2K.cis \
2749 ${nonarch_base_libdir}/firmware/cis/tamarack.cis \
2750 ${nonarch_base_libdir}/firmware/cis/PE-200.cis \
2751 ${nonarch_base_libdir}/firmware/cis/PE520.cis \
2752"
2753LICENSE:${PN}-pcnet-cs = "GPL-2.0-only & MPL-1.1"
2754
2755# For 3c589_cs - 3Com PCMCIA adapter
2756FILES:${PN}-3c589-cs = "${nonarch_base_libdir}/firmware/cis/3CXEM556.cis"
2757LICENSE:${PN}-3c589-cs = "GPL-2.0-only & MPL-1.1"
2758
2759# For 3c574-cs - 3Com PCMCIA adapter
2760FILES:${PN}-3c574-cs = "${nonarch_base_libdir}/firmware/cis/3CCFEM556.cis"
2761LICENSE:${PN}-3c574-cs = "GPL-2.0-only & MPL-1.1"
2762
2763# For serial_cs - Serial PCMCIA adapter (pcmcia-cs project)
2764FILES:${PN}-serial-cs = " \
2765 ${nonarch_base_libdir}/firmware/cis/MT5634ZLX.cis \
2766 ${nonarch_base_libdir}/firmware/cis/RS-COM-2P.cis \
2767 ${nonarch_base_libdir}/firmware/cis/COMpad2.cis \
2768 ${nonarch_base_libdir}/firmware/cis/COMpad4.cis \
2769"
2770LICENSE:${PN}-serial-cs = "GPL-2.0-only & MPL-1.1"
2771
2772# For Sierra Wireless serial_cs - Serial PCMCIA adapter
2773FILES:${PN}-sw-serial = " \
2774 ${nonarch_base_libdir}/firmware/cis/SW_555_SER.cis \
2775 ${nonarch_base_libdir}/firmware/cis/SW_7xx_SER.cis \
2776 ${nonarch_base_libdir}/firmware/cis/SW_8xx_SER.cis \
2777"
2778LICENSE:${PN}-sw-serial = "GPL-3.0-only"
2779
2780# For smsmdtv - Siano MDTV Core module
2781LICENSE:${PN}-siano-license = "Firmware-siano"
2782FILES:${PN}-siano-license = "${nonarch_base_libdir}/firmware/LICENCE.siano"
2783
2784LICENSE:${PN}-smsmdtv = "Firmware-siano"
2785FILES:${PN}-smsmdtv = " \
2786 ${nonarch_base_libdir}/firmware/cmmb_vega_12mhz.inp \
2787 ${nonarch_base_libdir}/firmware/cmmb_venice_12mhz.inp \
2788 ${nonarch_base_libdir}/firmware/dvb_nova_12mhz.inp \
2789 ${nonarch_base_libdir}/firmware/dvb_nova_12mhz_b0.inp \
2790 ${nonarch_base_libdir}/firmware/isdbt_nova_12mhz.inp \
2791 ${nonarch_base_libdir}/firmware/isdbt_nova_12mhz_b0.inp \
2792 ${nonarch_base_libdir}/firmware/isdbt_rio.inp \
2793 ${nonarch_base_libdir}/firmware/sms1xxx-hcw-55xxx-dvbt-02.fw \
2794 ${nonarch_base_libdir}/firmware/sms1xxx-hcw-55xxx-isdbt-02.fw \
2795 ${nonarch_base_libdir}/firmware/sms1xxx-nova-a-dvbt-01.fw \
2796 ${nonarch_base_libdir}/firmware/sms1xxx-nova-b-dvbt-01.fw \
2797 ${nonarch_base_libdir}/firmware/sms1xxx-stellar-dvbt-01.fw \
2798 ${nonarch_base_libdir}/firmware/tdmb_nova_12mhz.inp \
2799"
2800RDEPENDS:${PN}-smsmdtv = "${PN}-siano-license"
2801
2802# For cpia2 - cameras based on Vision's CPiA2
2803FILES:${PN}-cpia2 = "${nonarch_base_libdir}/firmware/cpia2/*"
2804LICENSE:${PN}-cpia2 = "GPL-2.0-or-later"
2805
2806# For snd-hda-codec-ca0132 - Creative Sound Core3D codec
2807LICENSE:${PN}-ca0132-license = "Firmware-ca0132"
2808FILES:${PN}-ca0132-license = "${nonarch_base_libdir}/firmware/LICENCE.ca0132"
2809
2810LICENSE:${PN}-ca0132 = "Firmware-ca0132"
2811FILES:${PN}-ca0132 = " \
2812 ${nonarch_base_libdir}/firmware/ctefx.bin \
2813 ${nonarch_base_libdir}/firmware/ctspeq.bin \
2814"
2815RDEPENDS:${PN}-ca0132 = "${PN}-ca0132-license"
2816
2817# For cxgb3 - Chelsio Terminator 3 1G/10G Ethernet adapter
2818LICENSE:${PN}-cxgb3-license = "Firmware-cxgb3"
2819FILES:${PN}-cxgb3-license = "${nonarch_base_libdir}/firmware/LICENCE.cxgb3"
2820
2821LICENSE:${PN}-cxgb3 = "Firmware-cxgb3 & GPL-2.0-only"
2822FILES:${PN}-cxgb3 = "${nonarch_base_libdir}/firmware/cxgb3/*"
2823RDEPENDS:${PN}-cxgb3 = "${PN}-cxgb3-license"
2824
2825# For cxgb4 - Chelsio Terminator 4/5/6 1/10/25/40/100G Ethernet adapter
2826LICENSE:${PN}-chelsio-firmware-license = "Firmware-chelsio_firmware"
2827FILES:${PN}-chelsio-firmware-license = "${nonarch_base_libdir}/firmware/LICENCE.chelsio_firmware"
2828
2829LICENSE:${PN}-cxgb4 = "Firmware-chelsio_firmware"
2830FILES:${PN}-cxgb4 = "${nonarch_base_libdir}/firmware/cxgb4/*"
2831RDEPENDS:${PN}-cxgb4 = "${PN}-chelsio-firmware-license"
2832
2833# For dabusb - Digital Audio Broadcasting (DAB) Receiver for USB and Linux
2834LICENSE:${PN}-dabusb-license = "Firmware-dabusb"
2835FILES:${PN}-dabusb-license = "${nonarch_base_libdir}/firmware/LICENCE.dabusb"
2836
2837LICENSE:${PN}-dabusb = "Firmware-dabusb"
2838FILES:${PN}-dabusb = "${nonarch_base_libdir}/firmware/dabusb/*"
2839RDEPENDS:${PN}-dabusb = "${PN}-dabusb-license"
2840
2841# For dsp56k - Atari DSP56k support
2842LICENSE:${PN}-dsp56k = "GPL-2.0-or-later"
2843FILES:${PN}-dsp56k = "${nonarch_base_libdir}/firmware/dsp56k/*"
2844
2845# For dib0700 - DiBcom dib0700 USB DVB bridge driver
2846LICENSE:${PN}-dib0700-license = "Firmware-dib0700"
2847FILES:${PN}-dib0700-license = "${nonarch_base_libdir}/firmware/LICENSE.dib0700"
2848
2849LICENSE:${PN}-dib0700 = "Firmware-dib0700"
2850FILES:${PN}-dib0700 = "${nonarch_base_libdir}/firmware/dvb-usb-dib0700-1.20.fw"
2851RDEPENDS:${PN}-dib0700 = "${PN}-dib0700-license"
2852
2853# For it9135 - ITEtech IT913x DVB-T USB driver
2854LICENSE:${PN}-it913x-license = "Firmware-it913x"
2855FILES:${PN}-it913x-license = "${nonarch_base_libdir}/firmware/LICENCE.it913x"
2856
2857LICENSE:${PN}-it9135 = "Firmware-it913x"
2858FILES:${PN}-it9135 = "${nonarch_base_libdir}/firmware/dvb-usb-it9135*"
2859RDEPENDS:${PN}-it9135 = "${PN}-it913x-license"
2860
2861# For drxk - Micronas DRX-K demodulator driver
2862LICENSE:${PN}-drxk-license = "Firmware-drxk"
2863FILES:${PN}-drxk-license = "${nonarch_base_libdir}/firmware/LICENSE.drxk"
2864
2865LICENSE:${PN}-drxk = "Firmware-drxk"
2866FILES:${PN}-drxk = "${nonarch_base_libdir}/firmware/dvb-usb-terratec-h5-drxk.fw"
2867RDEPENDS:${PN}-drxk = "${PN}-drxk-license"
2868
2869# For e100 - Intel PRO/100 Ethernet NIC
2870LICENSE:${PN}-e100-license = "Firmware-e100"
2871FILES:${PN}-e100-license = "${nonarch_base_libdir}/firmware/LICENCE.e100"
2872
2873LICENSE:${PN}-e100 = "Firmware-e100"
2874FILES:${PN}-e100 = "${nonarch_base_libdir}/firmware/e100/*"
2875RDEPENDS:${PN}-e100 = "${PN}-e100-license"
2876
2877# For io_ti - USB Inside Out Edgeport Serial Driver (TI Devices)
2878LICENSE:${PN}-io-ti = "GPL-2.0-or-later"
2879FILES:${PN}-io-ti = "${nonarch_base_libdir}/firmware/edgeport/down3.bin"
2880
2881# For io_edgeport - USB Inside Out Edgeport Serial Driver
2882LICENSE:${PN}-io-edgeport = "GPL-2.0-or-later"
2883FILES:${PN}-io-edgeport = "${nonarch_base_libdir}/firmware/edgeport/*"
2884
2885# For emi26 - EMI 2|6 USB Audio interface
2886LICENSE:${PN}-emi26-license = "Firmware-emi26"
2887FILES:${PN}-emi26-license = "${nonarch_base_libdir}/firmware/LICENCE.emi26"
2888
2889LICENSE:${PN}-emi26 = "Firmware-emi26"
2890FILES:${PN}-emi26 = "${nonarch_base_libdir}/firmware/emi26/*"
2891RDEPENDS:${PN}-emi26 = "${PN}-drxk-license"
2892
2893# For ene-ub6250 - ENE UB6250 SD card reader driver
2894LICENSE:${PN}-ene-firmware-license = "Firmware-ene_firmware"
2895FILES:${PN}-ene-firmware-license = "${nonarch_base_libdir}/firmware/LICENCE.ene_firmware"
2896
2897LICENSE:${PN}-ene-ub6250 = "Firmware-ene_firmware"
2898FILES:${PN}-ene-ub6250 = "${nonarch_base_libdir}/firmware/ene-ub6250/*"
2899RDEPENDS:${PN}-ene-ub6250 = "${PN}-ene-firmware-license"
2900
2901# For go7007-s2250
2902LICENSE:${PN}-go7007-s2250-license = "Firmware-go7007-s2250"
2903FILES:${PN}-go7007-s2250-license = "${nonarch_base_libdir}/firmware/LICENCE.go7007-s2250"
2904
2905LICENSE:${PN}-go7007-s2250 = "Firmware-go7007-s2250"
2906FILES:${PN}-go7007-s2250 = " \
2907 ${nonarch_base_libdir}/firmware/go7007/s2250* \
2908 ${nonarch_base_libdir}/firmware/s2250* \
2909"
2910RDEPENDS:${PN}-go7007-s2250 = "${PN}-go7007-s2250-license"
2911
2912# For go7007
2913LICENSE:${PN}-go7007-license = "Firmware-go7007"
2914FILES:${PN}-go7007-license = "${nonarch_base_libdir}/firmware/LICENCE.go7007"
2915
2916LICENSE:${PN}-go7007 = "Firmware-go7007"
2917FILES:${PN}-go7007 = "${nonarch_base_libdir}/firmware/go7007/*"
2918RDEPENDS:${PN}-go7007 = "${PN}-go7007-license"
2919
2920# For hfi1 - Intel OPA Gen 1 adapter
2921LICENSE:${PN}-hfi1-license = "Firmware-hfi1_firmware"
2922FILES:${PN}-hfi1-license = "${nonarch_base_libdir}/firmware/LICENSE.hfi1_firmware"
2923
2924LICENSE:${PN}-hfi1 = "Firmware-hfi1_firmware"
2925FILES:${PN}-hfi1 = "${nonarch_base_libdir}/firmware/hfi1_*"
2926RDEPENDS:${PN}-hfi1 = "${PN}-hfi1-license"
2927
2928# For inside-secure - Inside Secure EIP197 crypto driver
2929LICENSE:${PN}-inside-secure-license = "Firmware-inside-secure"
2930FILES:${PN}-inside-secure-license = "${nonarch_base_libdir}/firmware/LICENCE.inside-secure"
2931
2932LICENSE:${PN}-inside-secure = "Firmware-inside-secure"
2933FILES:${PN}-inside-secure = "${nonarch_base_libdir}/firmware/inside-secure/*"
2934RDEPENDS:${PN}-inside-secure = "${PN}-inside-secure-license"
2935
2936# For snd_soc_catpt - Intel AudioDSP driver for HSW/BDW platforms
2937LICENSE:${PN}-intcsst2-license = "Firmware-IntcSST2"
2938FILES:${PN}-intcsst2-license = "${nonarch_base_libdir}/firmware/LICENCE.IntcSST2"
2939
2940LICENSE:${PN}-snd-soc-catpt = "Firmware-IntcSST2"
2941FILES:${PN}-snd-soc-catpt = " \
2942 ${nonarch_base_libdir}/firmware/intel/catpt/bdw/dsp_basefw.bin \
2943 ${nonarch_base_libdir}/firmware/intel/IntcSST2.bin \
2944"
2945RDEPENDS:${PN}-snd-soc-catpt = "${PN}-intcsst2-license"
2946
2947# For snd_intel_sst_core
2948LICENSE:${PN}-fw-sst-0f28-license = "Firmware-fw_sst_0f28"
2949FILES:${PN}-fw-sst-0f28-license = "${nonarch_base_libdir}/firmware/LICENCE.fw_sst_0f28"
2950
2951LICENSE:${PN}-snd-intel-sst-core = "Firmware-fw_sst_0f28"
2952FILES:${PN}-snd-intel-sst-core = "${nonarch_base_libdir}/firmware/intel/fw_sst_*"
2953RDEPENDS:${PN}-snd-intel-sst-core = "${PN}-fw-sst-0f28-license"
2954
2955# For atomisp - Intel IPU2 (Image Processing Unit 2) driver
2956LICENSE:${PN}-ivsc-license = "Firmware-ivsc"
2957FILES:${PN}-ivsc-license = "${nonarch_base_libdir}/firmware/LICENSE.ivsc"
2958
2959LICENSE:${PN}-atomisp = "Firmware-ivsc"
2960FILES:${PN}-atomisp = "${nonarch_base_libdir}/firmware/intel/ipu/shisp_240*"
2961RDEPENDS:${PN}-atomisp = "${PN}-ivsc-license"
2962
2963# For intel-ipu6-isys - Intel IPU6 (Image Processing Unit 6) driver
2964LICENSE:${PN}-intel-ipu6-isys = "Firmware-ivsc"
2965FILES:${PN}-intel-ipu6-isys = "${nonarch_base_libdir}/firmware/intel/ipu/ipu6*"
2966RDEPENDS:${PN}-intel-ipu6-isys = "${PN}-ivsc-license"
2967
2968# For mei-vsc-hw - Intel Visual Sensing Controller
2969LICENSE:${PN}-mei-vsc-hw = "Firmware-ivsc"
2970FILES:${PN}-mei-vsc-hw = "${nonarch_base_libdir}/firmware/intel/vsc/*"
2971RDEPENDS:${PN}-mei-vsc-hw = "${PN}-ivsc-license"
2972
2973# For ipu3-imgu - Intel IPU3 (3rd Gen Image Processing Unit) driver
2974LICENSE:${PN}-ipu3-firmware-license = "Firmware-ipu3_firmware"
2975FILES:${PN}-ipu3-firmware-license = "${nonarch_base_libdir}/firmware/LICENSE.ipu3_firmware"
2976
2977LICENSE:${PN}-ipu3-imgu = "Firmware-ipu3_firmware"
2978FILES:${PN}-ipu3-imgu = " \
2979 ${nonarch_base_libdir}/firmware/intel/ipu/irci_irci_ecr-master_20161208_0213_20170112_1500.bin \
2980 ${nonarch_base_libdir}/firmware/intel/ipu3-fw.bin \
2981 ${nonarch_base_libdir}/firmware/intel/irci_irci_ecr-master_20161208_0213_20170112_1500.bin \
2982"
2983RDEPENDS:${PN}-ipu3-imgu = "${PN}-ipu3-firmware-license"
2984
2985# For intel-ipu7-isys - Intel IPU7 (Image Processing Unit 7) driver
2986LICENSE:${PN}-intel-ipu7-isys = "Firmware-intel"
2987FILES:${PN}-intel-ipu7-isys = "${nonarch_base_libdir}/firmware/intel/ipu/ipu7*"
2988RDEPENDS:${PN}-intel-ipu7-isys = "${PN}-intel-license"
2989
2990# For intel_vpu - Intel NPU driver
2991LICENSE:${PN}-intel-vpu-license = "Firmware-intel_vpu"
2992FILES:${PN}-intel-vpu-license = "${nonarch_base_libdir}/firmware/LICENSE.intel_vpu"
2993
2994LICENSE:${PN}-intel-vpu = "Firmware-intel_vpu"
2995FILES:${PN}-intel-vpu = "${nonarch_base_libdir}/firmware/intel/vpu/*"
2996RDEPENDS:${PN}-intel-vpu = "${PN}-intel-vpu-license"
2997
2998# For isci - Intel C600 SAS controller driver
2999LICENSE:${PN}-isci = "GPL-2.0-only"
3000FILES:${PN}-isci = "${nonarch_base_libdir}/firmware/isci/*"
3001
3002# For ixp4xx-npe - Intel IXP4xx XScale Network Processing Engine (NPE) Firmware
3003LICENSE:${PN}-ixp4xx-license = "Firmware-ixp4xx"
3004FILES:${PN}-ixp4xx-license = "${nonarch_base_libdir}/firmware/LICENSE.ixp4xx"
3005
3006LICENSE:${PN}-ixp4xx-npe = "Firmware-ixp4xx"
3007FILES:${PN}-ixp4xx-npe = "${nonarch_base_libdir}/firmware/ixp4xx/*"
3008RDEPENDS:${PN}-ixp4xx-npe = "${PN}-ixp4xx-license"
3009
3010# For kaweth - USB KLSI KL5USB101-based Ethernet device
3011LICENSE:${PN}-kaweth-license = "Firmware-kaweth"
3012FILES:${PN}-kaweth-license = "${nonarch_base_libdir}/firmware/LICENCE.kaweth"
3013
3014LICENSE:${PN}-kaweth = "Firmware-kaweth"
3015FILES:${PN}-kaweth = "${nonarch_base_libdir}/firmware/kaweth/*"
3016RDEPENDS:${PN}-kaweth = "${PN}-kaweth-license"
3017
3018# For keyspan - USB Keyspan USA-xxx serial device
3019LICENSE:${PN}-keyspan-license = "Firmware-keyspan"
3020FILES:${PN}-keyspan-license = "${nonarch_base_libdir}/firmware/LICENCE.keyspan"
3021
3022LICENSE:${PN}-keyspan = "Firmware-keyspan"
3023FILES:${PN}-keyspan = "${nonarch_base_libdir}/firmware/keyspan/*"
3024RDEPENDS:${PN}-keyspan = "${PN}-keyspan-license"
3025
3026# For keyspan_pda - USB Keyspan PDA single-port serial device
3027LICENSE:${PN}-keyspan-pda = "GPL-2.0-or-later"
3028FILES:${PN}-keyspan-pda = "${nonarch_base_libdir}/firmware/keyspan_pda/*"
3029
3030# For mga - Matrox G200/G400/G550
3031LICENSE:${PN}-mga-license = "Firmware-mga"
3032FILES:${PN}-mga-license = "${nonarch_base_libdir}/firmware/LICENSE.mga"
3033
3034LICENSE:${PN}-mga = "Firmware-mga"
3035FILES:${PN}-mga = "${nonarch_base_libdir}/firmware/matrox/*"
3036RDEPENDS:${PN}-mga = "${PN}-mga-license"
3037
3038# For myri10ge - Myri10GE 10GbE NIC driver
3039LICENSE:${PN}-myri10ge-firmware-license = "Firmware-myri10ge_firmware"
3040FILES:${PN}-myri10ge-firmware-license = "${nonarch_base_libdir}/firmware/LICENCE.myri10ge_firmware"
3041
3042LICENSE:${PN}-myri10ge = "Firmware-myri10ge_firmware"
3043FILES:${PN}-myri10ge = "${nonarch_base_libdir}/firmware/myri10ge_*"
3044RDEPENDS:${PN}-myri10ge = "${PN}-myri10ge-firmware-license"
3045
3046# For smc91c92_cs - SMC 91Cxx PCMCIA
3047LICENSE:${PN}-smc91c92-cs = "GPL-1.0-only"
3048FILES:${PN}-smc91c92-cs = "${nonarch_base_libdir}/firmware/ositech/Xilinx7OD.bin"
3049
3050# For qla1280 - Qlogic QLA 1240/1x80/1x160 SCSI support
3051LICENSE:${PN}-qla1280-license = "Firmware-qla1280"
3052FILES:${PN}-qla1280-license = "${nonarch_base_libdir}/firmware/LICENCE.qla1280"
3053
3054LICENSE:${PN}-qla1280 = "Firmware-qla1280"
3055FILES:${PN}-qla1280 = " \
3056 ${nonarch_base_libdir}/firmware/qlogic/1040.bin \
3057 ${nonarch_base_libdir}/firmware/qlogic/1280.bin \
3058 ${nonarch_base_libdir}/firmware/qlogic/12160.bin \
3059"
3060RDEPENDS:${PN}-qla1280 = "${PN}-qla1280-license"
3061
3062# For ib_qib - QLogic Infiniband
3063LICENSE:${PN}-ib-qib-license = "Firmware-ib_qib"
3064FILES:${PN}-ib-qib-license = "${nonarch_base_libdir}/firmware/LICENSE.ib_qib"
3065
3066LICENSE:${PN}-ib-qib = "Firmware-ib_qib"
3067FILES:${PN}-ib-qib = "${nonarch_base_libdir}/firmware/qlogic/sd7220.fw"
3068RDEPENDS:${PN}-ib-qib = "${PN}-ib-qib-license"
3069
3070# For xhci-rcar - Renesas R-Car Gen2/3 USB 3.0 host controller driver
3071LICENSE:${PN}-r8a779x-usb3-license = "Firmware-r8a779x_usb3"
3072FILES:${PN}-r8a779x-usb3-license = "${nonarch_base_libdir}/firmware/LICENCE.r8a779x_usb3"
3073
3074LICENSE:${PN}-xhci-rcar = "Firmware-r8a779x_usb3"
3075FILES:${PN}-xhci-rcar = "${nonarch_base_libdir}/firmware/r8a779x_usb3_*"
3076RDEPENDS:${PN}-xhci-rcar = "${PN}-r8a779x-usb3-license"
3077
3078# For r128 - ATI Rage 128
3079LICENSE:${PN}-r128 = "MIT"
3080FILES:${PN}-r128 = "${nonarch_base_libdir}/firmware/r128/*"
3081
3082# For rt1320 - Realtek rt1320 ASoC audio driver.
3083LICENSE:${PN}-rt1320-license = "Firmware-rt1320"
3084FILES:${PN}-rt1320-license = "${nonarch_base_libdir}/firmware/LICENSE.rt1320"
3085
3086LICENSE:${PN}-rt1320 = "Firmware-rt1320"
3087FILES:${PN}-rt1320 = "${nonarch_base_libdir}/firmware/realtek/rt1320/*"
3088RDEPENDS:${PN}-rt1320 = "${PN}-rt1320-license"
3089
3090# For rp2 - Comtrol RocketPort 2 serial driver
3091LICENSE:${PN}-rp2-license = "Firmware-rp2"
3092FILES:${PN}-rp2-license = "${nonarch_base_libdir}/firmware/LICENSE.rp2"
3093
3094LICENSE:${PN}-rp2 = "Firmware-rp2"
3095FILES:${PN}-rp2 = "${nonarch_base_libdir}/firmware/rp2.fw"
3096RDEPENDS:${PN}-rp2 = "${PN}-rp2-license"
3097
3098# For s5p-mfc - Samsung MFC video encoder/decoder driver
3099LICENSE:${PN}-s5p-mfc-license = "Firmware-s5p-mfc"
3100FILES:${PN}-s5p-mfc-license = "${nonarch_base_libdir}/firmware/LICENSE.s5p-mfc"
3101
3102LICENSE:${PN}-s5p-mfc = "Firmware-s5p-mfc"
3103FILES:${PN}-s5p-mfc = "${nonarch_base_libdir}/firmware/s5p-mfc*"
3104RDEPENDS:${PN}-s5p-mfc = "${PN}-s5p-mfc-license"
3105
3106# For snd-sb16-csp - Sound Blaster 16/AWE CSP support
3107LICENSE:${PN}-snd-sb16-csp = "GPL-2.0-or-later"
3108FILES:${PN}-snd-sb16-csp = "${nonarch_base_libdir}/firmware/sb16/*"
3109
3110# For slicoss - Alacritech IS-NIC products
3111LICENSE:${PN}-alacritech-license = "Firmware-alacritech"
3112FILES:${PN}-alacritech-license = "${nonarch_base_libdir}/firmware/LICENCE.alacritech"
3113
3114LICENSE:${PN}-slicoss = "Firmware-alacritech"
3115FILES:${PN}-slicoss = "${nonarch_base_libdir}/firmware/slicoss/*"
3116RDEPENDS:${PN}-slicoss = "${PN}-alacritech-license"
3117
3118LICENSE:${PN}-sxg = "Firmware-alacritech"
3119FILES:${PN}-sxg = "${nonarch_base_libdir}/firmware/sxg/*"
3120RDEPENDS:${PN}-sxg = "${PN}-alacritech-license"
3121
3122# For tehuti - Tehuti Networks 10G Ethernet
3123LICENSE:${PN}-tehuti-license = "Firmware-tehuti"
3124FILES:${PN}-tehuti-license = "${nonarch_base_libdir}/firmware/LICENSE.tehuti"
3125
3126LICENSE:${PN}-tehuti = "Firmware-tehuti"
3127FILES:${PN}-tehuti = "${nonarch_base_libdir}/firmware/tehuti/*"
3128RDEPENDS:${PN}-tehuti = "${PN}-tehuti-license"
3129
3130# For tg3 - Broadcom Tigon3 based gigabit Ethernet cards
3131LICENSE:${PN}-tigon-license = "Firmware-tigon"
3132FILES:${PN}-tigon-license = "${nonarch_base_libdir}/firmware/LICENCE.tigon"
3133
3134LICENSE:${PN}-tg3 = "Firmware-tigon"
3135FILES:${PN}-tg3 = "${nonarch_base_libdir}/firmware/tigon/*"
3136RDEPENDS:${PN}-tg3 = "${PN}-tigon-license"
3137
3138# For tlg2300 - Telgent 2300 V4L/DVB driver.
3139LICENSE:${PN}-tlg2300-license = "Firmware-tlg2300"
3140FILES:${PN}-tlg2300-license = "${nonarch_base_libdir}/firmware/LICENSE.tlg2300"
3141
3142LICENSE:${PN}-tlg2300 = "Firmware-tlg2300"
3143FILES:${PN}-tlg2300 = "${nonarch_base_libdir}/firmware/tlg2300*"
3144RDEPENDS:${PN}-tlg2300 = "${PN}-tlg2300-license"
3145
3146# For Mont-TSSE - Mont-TSSE(TM) Crypto Algorithm Accelerator Driver
3147LICENSE:${PN}-montage-license = "Firmware-montage"
3148FILES:${PN}-montage-license = "${nonarch_base_libdir}/firmware/LICENSE.montage"
3149
3150LICENSE:${PN}-mont-tsse = "Firmware-montage"
3151FILES:${PN}-mont-tsse = "${nonarch_base_libdir}/firmware/tsse_firmware.bin"
3152RDEPENDS:${PN}-mont-tsse = "${PN}-montage-license"
3153
3154# For ueagle-atm - Driver for USB ADSL Modems based on Eagle IV Chipset
3155LICENSE:${PN}-ueagle-atm4-firmware-license = "Firmware-ueagle-atm4-firmware"
3156FILES:${PN}-ueagle-atm4-firmware-license = "${nonarch_base_libdir}/firmware/LICENCE.ueagle-atm4-firmware"
3157
3158LICENSE:${PN}-ueagle-atm = "Firmware-ueagle-atm4-firmware"
3159FILES:${PN}-ueagle-atm = " \
3160 ${nonarch_base_libdir}/firmware/ueagle-atm/CMV4p.bin.v2 \
3161 ${nonarch_base_libdir}/firmware/ueagle-atm/DSP4p.bin \
3162 ${nonarch_base_libdir}/firmware/ueagle-atm/eagleIV.fw \
3163"
3164RDEPENDS:${PN}-ueagle-atm = "${PN}-ueagle-atm4-firmware-license"
3165
3166# For usbdux/usbduxfast/usbduxsigma - usbdux data acquisition cards
3167LICENSE:${PN}-usbdux = "GPL-2.0-or-later"
3168FILES:${PN}-usbdux = "${nonarch_base_libdir}/firmware/usbdux*"
3169
3170# For cx231xx - Conexant Cx23100/101/102 USB broadcast A/V decoder
3171LICENSE:${PN}-conexant-license = "Firmware-conexant"
3172FILES:${PN}-conexant-license = "${nonarch_base_libdir}/firmware/LICENSE.conexant"
3173
3174LICENSE:${PN}-cx231xx = "Firmware-conexant"
3175FILES:${PN}-cx231xx = "${nonarch_base_libdir}/firmware/v4l-cx231xx*"
3176RDEPENDS:${PN}-cx231xx = "${PN}-conexant-license"
3177
3178LICENSE:${PN}-cx23418 = "Firmware-conexant"
3179FILES:${PN}-cx23418 = "${nonarch_base_libdir}/firmware/v4l-cx23418*"
3180RDEPENDS:${PN}-cx23418 = "${PN}-conexant-license"
3181
3182LICENSE:${PN}-cx23885 = "Firmware-conexant"
3183FILES:${PN}-cx23885 = "${nonarch_base_libdir}/firmware/v4l-cx23885*"
3184RDEPENDS:${PN}-cx23885 = "${PN}-conexant-license"
3185
3186LICENSE:${PN}-cx23840 = "Firmware-conexant"
3187FILES:${PN}-cx23840 = "${nonarch_base_libdir}/firmware/v4l-cx25840*"
3188RDEPENDS:${PN}-cx23840 = "${PN}-conexant-license"
3189
3190# For vxge - Exar X3100 Series 10GbE PCIe I/O Virtualized Server Adapter
3191LICENSE:${PN}-vxge-license = "Firmware-vxge"
3192FILES:${PN}-vxge-license = "${nonarch_base_libdir}/firmware/LICENSE.vxge"
3193
3194LICENSE:${PN}-vxge = "Firmware-vxge"
3195FILES:${PN}-vxge = "${nonarch_base_libdir}/firmware/vxge/*"
3196RDEPENDS:${PN}-vxge = "${PN}-vxge-license"
3197
3198# For whiteheat - USB ConnectTech WhiteHEAT serial device
3199LICENSE:${PN}-whiteheat = "GPL-2.0-only"
3200FILES:${PN}-whiteheat = "${nonarch_base_libdir}/firmware/whiteheat*"
3201
3202# For wil6210 - Qualcomm Atheros support for 11ad family of chips
3203LICENSE:${PN}-qualcommatheros-ath10k-license = "Firmware-qualcommAthos_ath10k"
3204FILES:${PN}-qualcommatheros-ath10k-license = "${nonarch_base_libdir}/firmware/LICENSE.QualcommAtheros_ath10k"
3205
3206LICENSE:${PN}-wil6210 = "Firmware-qualcommAthos_ath10k"
3207FILES:${PN}-wil6210 = "${nonarch_base_libdir}/firmware/wil6210*"
3208RDEPENDS:${PN}-wil6210 = "${PN}-qualcommatheros-ath10k-license"
3209
3210# For xe - Intel Graphics driver
3211LICENSE:${PN}-xe-license = "Firmware-xe"
3212FILES:${PN}-xe-license = "${nonarch_base_libdir}/firmware/LICENSE.xe"
3213
3214LICENSE:${PN}-xe = "Firmware-xe"
3215FILES:${PN}-xe = "${nonarch_base_libdir}/firmware/xe/*"
3216RDEPENDS:${PN}-xe = "${PN}-xe-license"
3217
2220# For other firmwares 3218# For other firmwares
2221# Maybe split out to separate packages when needed. 3219# Maybe split out to separate packages when needed.
2222LICENSE:${PN} = "\ 3220LICENSE:${PN} = "\
@@ -2269,6 +3267,7 @@ LICENSE:${PN} = "\
2269 & Firmware-IntcSST2 \ 3267 & Firmware-IntcSST2 \
2270 & Firmware-kaweth \ 3268 & Firmware-kaweth \
2271 & Firmware-keyspan \ 3269 & Firmware-keyspan \
3270 & Firmware-lenovo \
2272 & Firmware-mellanox \ 3271 & Firmware-mellanox \
2273 & Firmware-mga \ 3272 & Firmware-mga \
2274 & Firmware-montage \ 3273 & Firmware-montage \
@@ -2312,8 +3311,13 @@ LICENSE:${PN} = "\
2312 & WHENCE \ 3311 & WHENCE \
2313" 3312"
2314 3313
3314# The goal for this recipe is to creata bunch of breakout packages for the
3315# firmware so that you can choose which files to include and not have to pull
3316# them all in. To that end, we do want any files to be part of the
3317# linux-firmware package. So set it to "". Do not change this.
3318FILES:${PN} = ""
3319
2315FILES:${PN}-license += "${nonarch_base_libdir}/firmware/LICEN*" 3320FILES:${PN}-license += "${nonarch_base_libdir}/firmware/LICEN*"
2316FILES:${PN} += "${nonarch_base_libdir}/firmware/*"
2317RDEPENDS:${PN} += "${PN}-license" 3321RDEPENDS:${PN} += "${PN}-license"
2318RDEPENDS:${PN} += "${PN}-whence-license" 3322RDEPENDS:${PN} += "${PN}-whence-license"
2319 3323
diff --git a/scripts/install-buildtools b/scripts/install-buildtools
index 50b5487eb8..93f3e2d678 100755
--- a/scripts/install-buildtools
+++ b/scripts/install-buildtools
@@ -57,8 +57,8 @@ logger = scriptutils.logger_create(PROGNAME, stream=sys.stdout)
57 57
58DEFAULT_INSTALL_DIR = os.path.join(os.path.split(scripts_path)[0],'buildtools') 58DEFAULT_INSTALL_DIR = os.path.join(os.path.split(scripts_path)[0],'buildtools')
59DEFAULT_BASE_URL = 'https://downloads.yoctoproject.org/releases/yocto' 59DEFAULT_BASE_URL = 'https://downloads.yoctoproject.org/releases/yocto'
60DEFAULT_RELEASE = 'yocto-5.2.2' 60DEFAULT_RELEASE = 'yocto-5.2.3'
61DEFAULT_INSTALLER_VERSION = '5.2.2' 61DEFAULT_INSTALLER_VERSION = '5.2.3'
62DEFAULT_BUILDDATE = '202110XX' 62DEFAULT_BUILDDATE = '202110XX'
63 63
64# Python version sanity check 64# Python version sanity check
diff --git a/scripts/lib/wic/engine.py b/scripts/lib/wic/engine.py
index b9e60cbe4e..9d596be3a7 100644
--- a/scripts/lib/wic/engine.py
+++ b/scripts/lib/wic/engine.py
@@ -345,29 +345,64 @@ class Disk:
345 path)) 345 path))
346 346
347 def copy(self, src, dest): 347 def copy(self, src, dest):
348 """Copy partition image into wic image.""" 348 """Copy files or directories to/from the vfat or ext* partition."""
349 pnum = dest.part if isinstance(src, str) else src.part 349 pnum = dest.part if isinstance(src, str) else src.part
350 partimg = self._get_part_image(pnum)
350 351
351 if self.partitions[pnum].fstype.startswith('ext'): 352 if self.partitions[pnum].fstype.startswith('ext'):
352 if isinstance(src, str): 353 if isinstance(src, str): # host to image case
353 cmd = "printf 'cd {}\nwrite {} {}\n' | {} -w {}".\ 354 if os.path.isdir(src):
354 format(os.path.dirname(dest.path), src, os.path.basename(src), 355 base = os.path.abspath(src)
355 self.debugfs, self._get_part_image(pnum)) 356 base_parent = os.path.dirname(base)
356 else: # copy from wic 357 cmds = []
357 # run both dump and rdump to support both files and directory 358 made = set()
359
360 for root, dirs, files in os.walk(base):
361 for fname in files:
362 host_file = os.path.join(root, fname)
363 rel = os.path.relpath(host_file, base_parent)
364 dest_file = os.path.join(dest.path, rel)
365 dest_dir = os.path.dirname(dest_file)
366
367 # create dir structure (mkdir -p)
368 parts = dest_dir.strip('/').split('/')
369 cur = ''
370 for p in parts:
371 cur = cur + '/' + p
372 if cur not in made:
373 cmds.append(f'mkdir "{cur}"')
374 made.add(cur)
375
376 cmds.append(f'write "{host_file}" "{dest_file}"')
377
378 # write script to a temp file
379 with tempfile.NamedTemporaryFile(mode='w', delete=False,
380 prefix='wic-debugfs-') as tf:
381 for line in cmds:
382 tf.write(line + '\n')
383 scriptname = tf.name
384
385 cmd = f"{self.debugfs} -w -f {scriptname} {partimg}"
386
387 else: # single file
388 cmd = "printf 'cd {}\nwrite {} {}\n' | {} -w {}".\
389 format(os.path.dirname(dest.path), src,
390 os.path.basename(src), self.debugfs, partimg)
391
392 else: # image to host case
358 cmd = "printf 'cd {}\ndump /{} {}\nrdump /{} {}\n' | {} {}".\ 393 cmd = "printf 'cd {}\ndump /{} {}\nrdump /{} {}\n' | {} {}".\
359 format(os.path.dirname(src.path), src.path, 394 format(os.path.dirname(src.path), src.path,
360 dest, src.path, dest, self.debugfs, 395 dest, src.path, dest, self.debugfs, partimg)
361 self._get_part_image(pnum)) 396
362 else: # fat 397 else: # fat
363 if isinstance(src, str): 398 if isinstance(src, str):
364 cmd = "{} -i {} -snop {} ::{}".format(self.mcopy, 399 cmd = "{} -i {} -snop {} ::{}".format(self.mcopy,
365 self._get_part_image(pnum), 400 partimg,
366 src, dest.path) 401 src, dest.path)
367 else: 402 else:
368 cmd = "{} -i {} -snop ::{} {}".format(self.mcopy, 403 cmd = "{} -i {} -snop ::{} {}".format(self.mcopy,
369 self._get_part_image(pnum), 404 partimg,
370 src.path, dest) 405 src.path, dest)
371 406
372 exec_cmd(cmd, as_shell=True) 407 exec_cmd(cmd, as_shell=True)
373 self._put_part_image(pnum) 408 self._put_part_image(pnum)
diff --git a/scripts/runqemu b/scripts/runqemu
index 2be7a0f286..72d827260f 100755
--- a/scripts/runqemu
+++ b/scripts/runqemu
@@ -421,8 +421,27 @@ class BaseConfig(object):
421 else: 421 else:
422 raise RunQemuError("Unknown path arg %s" % p) 422 raise RunQemuError("Unknown path arg %s" % p)
423 423
424 def uncompress_rootfs(self): 424 def rootfs_fixups(self):
425 """Decompress ZST rootfs image if needed""" 425
426 """Decompress and/or resize the rootfs image, if needed"""
427 qb_rootfs_opt = self.get('QB_ROOTFS_OPT')
428
429 # Check if sdcard size is a power of 2, as that is currently a requirement for qemu
430 # See https://gitlab.com/qemu-project/qemu/-/issues/1754
431 rootfs_size = os.path.getsize(self.rootfs)
432 rootfs_size_pwr2 = 1 << (rootfs_size - 1).bit_length()
433 if ("if=sd" in qb_rootfs_opt or "if=pflash" in qb_rootfs_opt) and rootfs_size != rootfs_size_pwr2:
434 logger.info("Using sd-card or pflash and is not power of 2. File size %d, power of 2 size %d" %(rootfs_size, rootfs_size_pwr2))
435 logger.info("Attempting to use truncate to correct this.")
436
437 # Ensure the 'truncate' tool is installed before attempting to make a power of 2.
438 if not shutil.which('truncate'):
439 raise RunQemuError(f"'truncate' is required to make {self.rootfs} a power of 2 in size but was not found in PATH")
440 try:
441 subprocess.check_call(['truncate', '-s', str(rootfs_size_pwr2), self.rootfs])
442 except subprocess.CalledProcessError as e:
443 raise RunQemuError(f"Failed to make {self.rootfs} power of 2 in size: {e}")
444
426 if not self.rootfs or not self.fstype.endswith('.zst'): 445 if not self.rootfs or not self.fstype.endswith('.zst'):
427 return 446 return
428 447
@@ -884,7 +903,7 @@ to your build configuration.
884 self.set('QB_MEM', qb_mem) 903 self.set('QB_MEM', qb_mem)
885 904
886 mach = self.get('MACHINE') 905 mach = self.get('MACHINE')
887 if not mach.startswith(('qemumips', 'qemux86', 'qemuloongarch64')): 906 if not mach.startswith(('qemumips', 'qemux86', 'qemuloongarch64')) and self.get('QB_DTB') == "":
888 self.kernel_cmdline_script += ' mem=%s' % self.get('QB_MEM').replace('-m','').strip() + 'M' 907 self.kernel_cmdline_script += ' mem=%s' % self.get('QB_MEM').replace('-m','').strip() + 'M'
889 908
890 self.qemu_opt_script += ' %s' % self.get('QB_MEM') 909 self.qemu_opt_script += ' %s' % self.get('QB_MEM')
@@ -1783,7 +1802,7 @@ def main():
1783 config.check_args() 1802 config.check_args()
1784 config.read_qemuboot() 1803 config.read_qemuboot()
1785 config.check_and_set() 1804 config.check_and_set()
1786 config.uncompress_rootfs() 1805 config.rootfs_fixups()
1787 # Check whether the combos is valid or not 1806 # Check whether the combos is valid or not
1788 config.validate_combos() 1807 config.validate_combos()
1789 config.print_config() 1808 config.print_config()