From patchwork Sat May 20 06:46:57 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: "Li, Yi" X-Patchwork-Id: 9738475 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id ED8AD6041F for ; Sat, 20 May 2017 06:52:17 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id E30B8284DA for ; Sat, 20 May 2017 06:52:17 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id D7BE7285C2; Sat, 20 May 2017 06:52:17 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 70EBB285BD for ; Sat, 20 May 2017 06:52:17 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753446AbdETGwP (ORCPT ); Sat, 20 May 2017 02:52:15 -0400 Received: from mga05.intel.com ([192.55.52.43]:26831 "EHLO mga05.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756650AbdETGwN (ORCPT ); Sat, 20 May 2017 02:52:13 -0400 Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmsmga105.fm.intel.com with ESMTP; 19 May 2017 23:52:12 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.38,367,1491289200"; d="scan'208";a="1150535703" Received: from yi-patch.an.intel.com ([10.122.105.158]) by fmsmga001.fm.intel.com with ESMTP; 19 May 2017 23:52:10 -0700 From: yi1.li@linux.intel.com To: mcgrof@kernel.org, atull@kernel.org, gregkh@linuxfoundation.org, wagi@monom.org, dwmw2@infradead.org, rafal@milecki.pl, arend.vanspriel@broadcom.com, rjw@rjwysocki.net, moritz.fischer@ettus.com, pmladek@suse.com, johannes.berg@intel.com, emmanuel.grumbach@intel.com, luciano.coelho@intel.com, kvalo@codeaurora.org, luto@kernel.org, takahiro.akashi@linaro.org, dhowells@redhat.com, pjones@redhat.com Cc: linux-kernel@vger.kernel.org, linux-fpga@vger.kernel.org, Yi Li Subject: [PATCHv2 1/3] firmware_class: move NO_CACHE from private to driver_data_req_params Date: Sat, 20 May 2017 01:46:57 -0500 Message-Id: <1495262819-981-2-git-send-email-yi1.li@linux.intel.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1495262819-981-1-git-send-email-yi1.li@linux.intel.com> References: <1495262819-981-1-git-send-email-yi1.li@linux.intel.com> Sender: linux-fpga-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-fpga@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP From: Yi Li This adds DRIVER_DATA_REQ_NO_CACHE flag with .req flag under struct driver_data_req_params. When this flag is set, the driver_data driver will bypass the internal caching mechanism, its used by streaming case and other drivers which implement their own cache thing. Signed-off-by: Yi Li --- drivers/base/firmware_class.c | 16 +++++++--------- include/linux/driver_data.h | 4 ++++ 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/drivers/base/firmware_class.c b/drivers/base/firmware_class.c index 7af430a..444c9a8 100644 --- a/drivers/base/firmware_class.c +++ b/drivers/base/firmware_class.c @@ -72,14 +72,10 @@ enum driver_data_mode { * issue a uevent to userspace. Userspace in turn is expected to be * monitoring for uevents for the firmware_class and will use the * exposted sysfs interface to upload the driver data for the caller. - * @DRIVER_DATA_PRIV_REQ_NO_CACHE: indicates that the driver data request - * should not set up and use the internal caching mechanism to assist - * drivers from fetching driver data at resume time after suspend. */ enum driver_data_priv_reqs { DRIVER_DATA_PRIV_REQ_FALLBACK = 1 << 0, DRIVER_DATA_PRIV_REQ_FALLBACK_UEVENT = 1 << 1, - DRIVER_DATA_PRIV_REQ_NO_CACHE = 1 << 2, }; /** @@ -151,10 +147,12 @@ struct driver_data_params { } #define __DATA_REQ_FIRMWARE_BUF(buf, size) \ + .req_params = { \ + .reqs = DRIVER_DATA_REQ_NO_CACHE, \ + }, \ .priv_params = { \ .priv_reqs = DRIVER_DATA_PRIV_REQ_FALLBACK | \ - DRIVER_DATA_PRIV_REQ_FALLBACK_UEVENT | \ - DRIVER_DATA_PRIV_REQ_NO_CACHE, \ + DRIVER_DATA_PRIV_REQ_FALLBACK_UEVENT, \ .alloc_buf = buf, \ .alloc_buf_size = size, \ } @@ -186,7 +184,7 @@ struct driver_data_params { #define driver_data_param_uevent(params) \ (!!((params)->priv_reqs & DRIVER_DATA_PRIV_REQ_FALLBACK_UEVENT)) #define driver_data_param_nocache(params) \ - (!!((params)->priv_reqs & DRIVER_DATA_PRIV_REQ_NO_CACHE)) + (!!((params)->reqs & DRIVER_DATA_REQ_NO_CACHE)) #define driver_data_param_optional(params) \ (!!((params)->reqs & DRIVER_DATA_REQ_OPTIONAL)) @@ -793,14 +791,14 @@ static int assign_firmware_buf(struct firmware *fw, struct device *device, /* don't cache firmware handled without uevent */ if (device && driver_data_param_uevent(&data_params->priv_params) && - !driver_data_param_nocache(&data_params->priv_params)) + !driver_data_param_nocache(&data_params->req_params)) fw_add_devm_name(device, buf->fw_id); /* * After caching firmware image is started, let it piggyback * on request firmware. */ - if (!driver_data_param_nocache(&data_params->priv_params) && + if (!driver_data_param_nocache(&data_params->req_params) && buf->fwc->state == FW_LOADER_START_CACHE) { if (fw_cache_piggyback_on_request(buf->fw_id)) kref_get(&buf->ref); diff --git a/include/linux/driver_data.h b/include/linux/driver_data.h index bf51e0b..b6ef5ee 100644 --- a/include/linux/driver_data.h +++ b/include/linux/driver_data.h @@ -117,11 +117,15 @@ union driver_data_cbs { * file to be present given the API range, it is only required for one * file in the API range to be present. If the %DRIVER_DATA_REQ_OPTIONAL * flag is also enabled then all files are treated as optional. + * @DRIVER_DATA_REQ_NO_CACHE: indicates that the driver data request + * should not set up and use the internal caching mechanism to assist + * drivers from fetching driver data at resume time after suspend. */ enum driver_data_reqs { DRIVER_DATA_REQ_OPTIONAL = 1 << 0, DRIVER_DATA_REQ_KEEP = 1 << 1, DRIVER_DATA_REQ_USE_API_VERSIONING = 1 << 2, + DRIVER_DATA_REQ_NO_CACHE = 1 << 3, }; /**