def METHOD_NAME(self, url, sha, whonix=False):
    """Initializes downloading firmware update archive.
    Keywords arguments:
    url -- url path to the firmware update archive
    sha -- SHA256 checksum of the firmware update archive
    whonix -- Flag enforces downloading the updates via Tor
    """
    if not whonix:
        self._specify_updatevm()
    else:
        self.updatevm = "sys-whonix"
    if not self._check_updatevm():
        raise Exception(f"{self.updatevm} is not running!!")
    if not os.path.exists(FWUPD_DOM0_DIR):
        create_dirs(FWUPD_DOM0_DIR)
    self.arch_name = os.path.basename(url)
    self.arch_path = os.path.join(FWUPD_DOM0_UPDATES_DIR, self.arch_name)
    if not os.path.exists(self.arch_path):
        cmd_firmware_download = [
            "qvm-run",
            "--pass-io",
            "--quiet",
            "--autostart",
            "--no-shell",
            "--color-output=31",
            "--color-stderr=31",
            "--",
            self.updatevm,
            FWUPD_VM_DOWNLOAD,
            f"--url={url}",
            f"--sha={sha}",
        ]
        p = subprocess.Popen(cmd_firmware_download, stdin=subprocess.DEVNULL)
        p.wait()
        if p.returncode != 0:
            raise Exception("Firmware download failed.")
    else:
        self.cached = True
        print("Firmware already downloaded. Using cached files.")