Received: by 10.223.185.111 with SMTP id b44csp809079wrg; Fri, 9 Mar 2018 14:14:42 -0800 (PST) X-Google-Smtp-Source: AG47ELsN+iX1mzNTzi1ZzEqQBlgQZXWxb2dXmGgbj8LnmHmQJACcuZneuXXXGEJfmrImy8x7XC6R X-Received: by 2002:a17:902:6789:: with SMTP id g9-v6mr9288plk.167.1520633682012; Fri, 09 Mar 2018 14:14:42 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1520633681; cv=none; d=google.com; s=arc-20160816; b=djJLVho7sMRu+dLy21SSltbbYZsJ/VjezFb6MNnsC9UwDLgybjx1c6veneH1LSeN5t yvWeAkLt70bpqRL/Ppn1N32PKzY2g/ZBJ01M4Dy2fEQQKxGkgZFd8nCKLQpNdtlioD96 Qmx1UniNx1J/xB3DIjS6bdQ0Wigj9OwvnhLD2H0bhwqHd2CC7MG6dqodV9DlP4wQ4G8p RoyV39AJ2LxiBrRVtz9FibaYMN6OS/F/ZhCg/pllYlFKO7mY5Gpbg7dBUNR3etnZOM6z 1rWGxU30pHp7+EM9huVyE66qMhqresj/dp54xXy3nt1z001zulxd2b53zBBQ7ySEB7fv AqmQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=00Cn2GQb2Xo6AmIxhogP4Uk/bn6I/CJRENXAGoVeaW8=; b=w5ms5KYjPomOaT6rwnLL8cI9U0pGeiRbGpRijQR73T/1tpoHtRa/evJpxkdKZS/JSI vXJehMbwSmUq/NYLPh6IVB3zumnh/Tsv42Gs1HMnWa3vzBsGzrDkwgiMdIcUElLc6LpW cEoI/CPJL5+Tq6xKiXGWgotPVcJ0WQy78PqtpXvbWTa/O89vDw1FuQt5uF0xKiSj3gtj ThszjrBzQpfKTX5o/9aCQ0K3yvBoGOsZhWru/VAwydNlfSiEOA0G03HcgGGwUkq9k7r3 LvyUicf6RtEMKqGzHCj+iTmHmsGZ9CikLpzl9QBbMTubYc46WwzWhWHSb70YiqwAXypq OPyw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=gOVgA7wQ; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id b10-v6si1534167plx.355.2018.03.09.14.14.27; Fri, 09 Mar 2018 14:14:41 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=gOVgA7wQ; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932804AbeCIWNS (ORCPT + 99 others); Fri, 9 Mar 2018 17:13:18 -0500 Received: from mail-io0-f194.google.com ([209.85.223.194]:36314 "EHLO mail-io0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S932727AbeCIWND (ORCPT ); Fri, 9 Mar 2018 17:13:03 -0500 Received: by mail-io0-f194.google.com with SMTP id e30so5160199ioc.3 for ; Fri, 09 Mar 2018 14:13:03 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=00Cn2GQb2Xo6AmIxhogP4Uk/bn6I/CJRENXAGoVeaW8=; b=gOVgA7wQpJsdB2td9BjbJXcREwws/ZmsVyhMXf01waz75YsZtHoqBeuJhsbBBgYPkh ECpgHL3O+KCILpE88xQQdDVDr1PgKLL5if44dAqKAsIg8XJaz8IJR9naC1dy+73HOTG3 LUVkLWDJbF4d56UEMnEppsXWdbuxnWEK13qF7/0J4wHPu1xQvGNLeC6w+MIftJrZ0qzW c2YYxWHlkF63FL7vpB2FYvfGaTcqogZfHhSz4HQE3iOSFDSmzmB2eko72Qq1+Bv4mX9M mSnl00FR9PO6iZk49m6p6hE+Qxkf+2XMyF1TDi24iUnwYlLz8gLiDi+qZHxLFnzzwGJG Ztiw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=00Cn2GQb2Xo6AmIxhogP4Uk/bn6I/CJRENXAGoVeaW8=; b=jPi14Js+2owskIYMEkotcLQeAkWJMBOyqKo2lKbOQHwd4o55sgPQJOQvfw7iIIm1hr IYxtahlRPZEIo6MVGOOx7N0hZKm8Jrn8p4Cc3Li7KyWA9Iz9btQ3WKv0OI79G6aNaJPF oIczkLl/51rmROj4sQ2ppOrI5oDC6dbsD3zxARgi0R0Fm+fwDj97YaTN7wacr2cKqfBC PzMuHPU5V1PUR/49jLwTvyeZ1iveAGu4ptE3PH/W0ZIGJLKbyjCn+Mg5uVF8/YIDwj2E JfQ+Nw3LF/FJBOvrq0J/xz/SEDOVHUICn7P6rar7zuu8hjfzDAoY6qNEAXQYPA4TUQgI 5V2A== X-Gm-Message-State: AElRT7FmsbADdhwrduZ6JvLN9TunE3QeNijXPCfxiTApPuBqfqiTfm+b 6VclGpsIhu4lXLAy0FDcqJB72nUT X-Received: by 10.107.191.133 with SMTP id p127mr45061iof.114.1520633582853; Fri, 09 Mar 2018 14:13:02 -0800 (PST) Received: from localhost.localdomain (184-175-36-239.dsl.teksavvy.com. [184.175.36.239]) by smtp.gmail.com with ESMTPSA id i31sm1456763iod.78.2018.03.09.14.13.01 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 09 Mar 2018 14:13:02 -0800 (PST) From: Andres Rodriguez To: linux-kernel@vger.kernel.org Cc: andresx7@gmail.com, gregkh@linuxfoundation.org, mcgrof@kernel.org Subject: [PATCH 1/1] firmware: add a function to load optional firmware Date: Fri, 9 Mar 2018 17:12:43 -0500 Message-Id: <20180309221243.15489-2-andresx7@gmail.com> X-Mailer: git-send-email 2.14.1 In-Reply-To: <20180309221243.15489-1-andresx7@gmail.com> References: <20180309221243.15489-1-andresx7@gmail.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Currently the firmware loader only exposes one silent path for querying optional firmware, and that is request_firmware_direct(). This function also disables the usermodehelper fallback which might not always be the desired behaviour. This patch introduces request_firmware_optional(), which will not produce error/warning messages if the firmware file is not found, but will still attempt to query the usermodehelper for the optional firmware. Effectively, FW_OPT_UEVENT | FW_OPT_FALLBACK | FW_OPT_NO_WARN. Signed-off-by: Andres Rodriguez --- drivers/base/firmware_class.c | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c index 7dd36ace6152..a5a4dfb90e2f 100644 --- a/drivers/base/firmware_class.c +++ b/drivers/base/firmware_class.c @@ -1181,7 +1181,7 @@ static int fw_sysfs_fallback(struct firmware *fw, const char *name, if (!fw_run_sysfs_fallback(opt_flags)) return ret; - dev_warn(device, "Falling back to user helper\n"); + dev_warn(device, "Falling back to user helper for %s\n", name); return fw_load_from_user_helper(fw, name, device, opt_flags); } #else /* CONFIG_FW_LOADER_USER_HELPER */ @@ -1351,6 +1351,31 @@ request_firmware(const struct firmware **firmware_p, const char *name, } EXPORT_SYMBOL(request_firmware); +/** + * request_firmware_optional: - request for an optional fw module + * @firmware_p: pointer to firmware image + * @name: name of firmware file + * @device: device for which firmware is being loaded + * + * This function is similar in behaviour to request_firmware(), except + * it doesn't produce warning messages when the file is not found. + **/ +int +request_firmware_optional(const struct firmware **firmware_p, const char *name, + struct device *device) +{ + int ret; + + /* Need to pin this module until return */ + __module_get(THIS_MODULE); + ret = _request_firmware(firmware_p, name, device, NULL, 0, + FW_OPT_UEVENT | FW_OPT_FALLBACK | + FW_OPT_NO_WARN); + module_put(THIS_MODULE); + return ret; +} +EXPORT_SYMBOL(request_firmware_optional); + /** * request_firmware_direct: - load firmware directly without usermode helper * @firmware_p: pointer to firmware image -- 2.14.1