[Intel-gfx] [PATCH 2/9] drm/i915: Move uC fw helper code into dedicated files
Sagar Arun Kamble
sagar.a.kamble at intel.com
Sat Sep 30 10:01:44 UTC 2017
On 9/29/2017 11:11 PM, Michal Wajdeczko wrote:
> This is a prerequisite to unblock next steps.
> No functional changes, only s/dev_priv/i915
>
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko at intel.com>
> Cc: Joonas Lahtinen <joonas.lahtinen at linux.intel.com>
> Cc: Chris Wilson <chris at chris-wilson.co.uk>
> Cc: Sagar Arun Kamble <sagar.a.kamble at intel.com>
Reviewed-by: Sagar Arun Kamble <sagar.a.kamble at intel.com>
> ---
> drivers/gpu/drm/i915/Makefile | 1 +
> drivers/gpu/drm/i915/intel_uc.c | 163 ++--------------------------------
> drivers/gpu/drm/i915/intel_uc.h | 67 +-------------
> drivers/gpu/drm/i915/intel_uc_fw.c | 177 +++++++++++++++++++++++++++++++++++++
> drivers/gpu/drm/i915/intel_uc_fw.h | 95 ++++++++++++++++++++
> 5 files changed, 280 insertions(+), 223 deletions(-)
> create mode 100644 drivers/gpu/drm/i915/intel_uc_fw.c
> create mode 100644 drivers/gpu/drm/i915/intel_uc_fw.h
>
> diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
> index 5182e3d..4850f26 100644
> --- a/drivers/gpu/drm/i915/Makefile
> +++ b/drivers/gpu/drm/i915/Makefile
> @@ -59,6 +59,7 @@ i915-y += i915_cmd_parser.o \
>
> # general-purpose microcontroller (GuC) support
> i915-y += intel_uc.o \
> + intel_uc_fw.o \
> intel_guc_ct.o \
> intel_guc_log.o \
> intel_guc_loader.o \
> diff --git a/drivers/gpu/drm/i915/intel_uc.c b/drivers/gpu/drm/i915/intel_uc.c
> index 2774778..9426cc1 100644
> --- a/drivers/gpu/drm/i915/intel_uc.c
> +++ b/drivers/gpu/drm/i915/intel_uc.c
> @@ -26,19 +26,6 @@
> #include "intel_uc.h"
> #include <linux/firmware.h>
>
> -/* Cleans up uC firmware by releasing the firmware GEM obj.
> - */
> -static void __intel_uc_fw_fini(struct intel_uc_fw *uc_fw)
> -{
> - struct drm_i915_gem_object *obj;
> -
> - obj = fetch_and_zero(&uc_fw->obj);
> - if (obj)
> - i915_gem_object_put(obj);
> -
> - uc_fw->fetch_status = INTEL_UC_FIRMWARE_NONE;
> -}
> -
> /* Reset GuC providing us with fresh state for both GuC and HuC.
> */
> static int __intel_uc_reset_hw(struct drm_i915_private *dev_priv)
> @@ -112,154 +99,16 @@ void intel_uc_init_early(struct drm_i915_private *dev_priv)
> guc->notify = gen8_guc_raise_irq;
> }
>
> -static void fetch_uc_fw(struct drm_i915_private *dev_priv,
> - struct intel_uc_fw *uc_fw)
> -{
> - struct pci_dev *pdev = dev_priv->drm.pdev;
> - struct drm_i915_gem_object *obj;
> - const struct firmware *fw = NULL;
> - struct uc_css_header *css;
> - size_t size;
> - int err;
> -
> - if (!uc_fw->path)
> - return;
> -
> - uc_fw->fetch_status = INTEL_UC_FIRMWARE_PENDING;
> -
> - DRM_DEBUG_DRIVER("before requesting firmware: uC fw fetch status %s\n",
> - intel_uc_fw_status_repr(uc_fw->fetch_status));
> -
> - err = request_firmware(&fw, uc_fw->path, &pdev->dev);
> - if (err)
> - goto fail;
> - if (!fw)
> - goto fail;
> -
> - DRM_DEBUG_DRIVER("fetch uC fw from %s succeeded, fw %p\n",
> - uc_fw->path, fw);
> -
> - /* Check the size of the blob before examining buffer contents */
> - if (fw->size < sizeof(struct uc_css_header)) {
> - DRM_NOTE("Firmware header is missing\n");
> - goto fail;
> - }
> -
> - css = (struct uc_css_header *)fw->data;
> -
> - /* Firmware bits always start from header */
> - uc_fw->header_offset = 0;
> - uc_fw->header_size = (css->header_size_dw - css->modulus_size_dw -
> - css->key_size_dw - css->exponent_size_dw) * sizeof(u32);
> -
> - if (uc_fw->header_size != sizeof(struct uc_css_header)) {
> - DRM_NOTE("CSS header definition mismatch\n");
> - goto fail;
> - }
> -
> - /* then, uCode */
> - uc_fw->ucode_offset = uc_fw->header_offset + uc_fw->header_size;
> - uc_fw->ucode_size = (css->size_dw - css->header_size_dw) * sizeof(u32);
> -
> - /* now RSA */
> - if (css->key_size_dw != UOS_RSA_SCRATCH_MAX_COUNT) {
> - DRM_NOTE("RSA key size is bad\n");
> - goto fail;
> - }
> - uc_fw->rsa_offset = uc_fw->ucode_offset + uc_fw->ucode_size;
> - uc_fw->rsa_size = css->key_size_dw * sizeof(u32);
> -
> - /* At least, it should have header, uCode and RSA. Size of all three. */
> - size = uc_fw->header_size + uc_fw->ucode_size + uc_fw->rsa_size;
> - if (fw->size < size) {
> - DRM_NOTE("Missing firmware components\n");
> - goto fail;
> - }
> -
> - /*
> - * The GuC firmware image has the version number embedded at a
> - * well-known offset within the firmware blob; note that major / minor
> - * version are TWO bytes each (i.e. u16), although all pointers and
> - * offsets are defined in terms of bytes (u8).
> - */
> - switch (uc_fw->type) {
> - case INTEL_UC_FW_TYPE_GUC:
> - /* Header and uCode will be loaded to WOPCM. Size of the two. */
> - size = uc_fw->header_size + uc_fw->ucode_size;
> -
> - /* Top 32k of WOPCM is reserved (8K stack + 24k RC6 context). */
> - if (size > intel_guc_wopcm_size(dev_priv)) {
> - DRM_ERROR("Firmware is too large to fit in WOPCM\n");
> - goto fail;
> - }
> - uc_fw->major_ver_found = css->guc.sw_version >> 16;
> - uc_fw->minor_ver_found = css->guc.sw_version & 0xFFFF;
> - break;
> -
> - case INTEL_UC_FW_TYPE_HUC:
> - uc_fw->major_ver_found = css->huc.sw_version >> 16;
> - uc_fw->minor_ver_found = css->huc.sw_version & 0xFFFF;
> - break;
> -
> - default:
> - DRM_ERROR("Unknown firmware type %d\n", uc_fw->type);
> - err = -ENOEXEC;
> - goto fail;
> - }
> -
> - if (uc_fw->major_ver_wanted == 0 && uc_fw->minor_ver_wanted == 0) {
> - DRM_NOTE("Skipping %s firmware version check\n",
> - intel_uc_fw_type_repr(uc_fw->type));
> - } else if (uc_fw->major_ver_found != uc_fw->major_ver_wanted ||
> - uc_fw->minor_ver_found < uc_fw->minor_ver_wanted) {
> - DRM_NOTE("%s firmware version %d.%d, required %d.%d\n",
> - intel_uc_fw_type_repr(uc_fw->type),
> - uc_fw->major_ver_found, uc_fw->minor_ver_found,
> - uc_fw->major_ver_wanted, uc_fw->minor_ver_wanted);
> - err = -ENOEXEC;
> - goto fail;
> - }
> -
> - DRM_DEBUG_DRIVER("firmware version %d.%d OK (minimum %d.%d)\n",
> - uc_fw->major_ver_found, uc_fw->minor_ver_found,
> - uc_fw->major_ver_wanted, uc_fw->minor_ver_wanted);
> -
> - obj = i915_gem_object_create_from_data(dev_priv, fw->data, fw->size);
> - if (IS_ERR(obj)) {
> - err = PTR_ERR(obj);
> - goto fail;
> - }
> -
> - uc_fw->obj = obj;
> - uc_fw->size = fw->size;
> -
> - DRM_DEBUG_DRIVER("uC fw fetch status SUCCESS, obj %p\n",
> - uc_fw->obj);
> -
> - release_firmware(fw);
> - uc_fw->fetch_status = INTEL_UC_FIRMWARE_SUCCESS;
> - return;
> -
> -fail:
> - DRM_WARN("Failed to fetch valid uC firmware from %s (error %d)\n",
> - uc_fw->path, err);
> - DRM_DEBUG_DRIVER("uC fw fetch status FAIL; err %d, fw %p, obj %p\n",
> - err, fw, uc_fw->obj);
> -
> - release_firmware(fw); /* OK even if fw is NULL */
> - uc_fw->fetch_status = INTEL_UC_FIRMWARE_FAIL;
> -}
> -
> -void intel_uc_init_fw(struct drm_i915_private *dev_priv)
> +void intel_uc_init_fw(struct drm_i915_private *i915)
> {
> - fetch_uc_fw(dev_priv, &dev_priv->huc.fw);
> - fetch_uc_fw(dev_priv, &dev_priv->guc.fw);
> + i915_fetch_uc_fw(i915, &i915->huc.fw);
> + i915_fetch_uc_fw(i915, &i915->guc.fw);
> }
>
> -void intel_uc_fini_fw(struct drm_i915_private *dev_priv)
> +void intel_uc_fini_fw(struct drm_i915_private *i915)
> {
> - __intel_uc_fw_fini(&dev_priv->guc.fw);
> - __intel_uc_fw_fini(&dev_priv->huc.fw);
> + intel_uc_fw_fini(&i915->guc.fw);
> + intel_uc_fw_fini(&i915->huc.fw);
> }
>
> static inline i915_reg_t guc_send_reg(struct intel_guc *guc, u32 i)
> diff --git a/drivers/gpu/drm/i915/intel_uc.h b/drivers/gpu/drm/i915/intel_uc.h
> index 38ec880..d111f79 100644
> --- a/drivers/gpu/drm/i915/intel_uc.h
> +++ b/drivers/gpu/drm/i915/intel_uc.h
> @@ -24,6 +24,7 @@
> #ifndef _INTEL_UC_H_
> #define _INTEL_UC_H_
>
> +#include "intel_uc_fw.h"
> #include "intel_guc_fwif.h"
> #include "i915_guc_reg.h"
> #include "intel_ringbuffer.h"
> @@ -70,72 +71,6 @@ struct i915_guc_client {
> uint64_t submissions[I915_NUM_ENGINES];
> };
>
> -enum intel_uc_fw_status {
> - INTEL_UC_FIRMWARE_FAIL = -1,
> - INTEL_UC_FIRMWARE_NONE = 0,
> - INTEL_UC_FIRMWARE_PENDING,
> - INTEL_UC_FIRMWARE_SUCCESS
> -};
> -
> -/* User-friendly representation of an enum */
> -static inline
> -const char *intel_uc_fw_status_repr(enum intel_uc_fw_status status)
> -{
> - switch (status) {
> - case INTEL_UC_FIRMWARE_FAIL:
> - return "FAIL";
> - case INTEL_UC_FIRMWARE_NONE:
> - return "NONE";
> - case INTEL_UC_FIRMWARE_PENDING:
> - return "PENDING";
> - case INTEL_UC_FIRMWARE_SUCCESS:
> - return "SUCCESS";
> - }
> - return "<invalid>";
> -}
> -
> -enum intel_uc_fw_type {
> - INTEL_UC_FW_TYPE_GUC,
> - INTEL_UC_FW_TYPE_HUC
> -};
> -
> -/* User-friendly representation of an enum */
> -static inline const char *intel_uc_fw_type_repr(enum intel_uc_fw_type type)
> -{
> - switch (type) {
> - case INTEL_UC_FW_TYPE_GUC:
> - return "GuC";
> - case INTEL_UC_FW_TYPE_HUC:
> - return "HuC";
> - }
> - return "uC";
> -}
> -
> -/*
> - * This structure encapsulates all the data needed during the process
> - * of fetching, caching, and loading the firmware image into the GuC.
> - */
> -struct intel_uc_fw {
> - const char *path;
> - size_t size;
> - struct drm_i915_gem_object *obj;
> - enum intel_uc_fw_status fetch_status;
> - enum intel_uc_fw_status load_status;
> -
> - uint16_t major_ver_wanted;
> - uint16_t minor_ver_wanted;
> - uint16_t major_ver_found;
> - uint16_t minor_ver_found;
> -
> - enum intel_uc_fw_type type;
> - uint32_t header_size;
> - uint32_t header_offset;
> - uint32_t rsa_size;
> - uint32_t rsa_offset;
> - uint32_t ucode_size;
> - uint32_t ucode_offset;
> -};
> -
> struct intel_guc_log {
> uint32_t flags;
> struct i915_vma *vma;
> diff --git a/drivers/gpu/drm/i915/intel_uc_fw.c b/drivers/gpu/drm/i915/intel_uc_fw.c
> new file mode 100644
> index 0000000..29920af
> --- /dev/null
> +++ b/drivers/gpu/drm/i915/intel_uc_fw.c
> @@ -0,0 +1,177 @@
> +/*
> + * Copyright © 2016-2017 Intel Corporation
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a
> + * copy of this software and associated documentation files (the "Software"),
> + * to deal in the Software without restriction, including without limitation
> + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> + * and/or sell copies of the Software, and to permit persons to whom the
> + * Software is furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice (including the next
> + * paragraph) shall be included in all copies or substantial portions of the
> + * Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
> + * IN THE SOFTWARE.
> + *
> + */
> +
> +#include <linux/firmware.h>
> +#include "i915_drv.h"
> +
> +/* Cleans up uC firmware by releasing the firmware GEM obj.
> + */
> +void intel_uc_fw_fini(struct intel_uc_fw *uc_fw)
> +{
> + struct drm_i915_gem_object *obj;
> +
> + obj = fetch_and_zero(&uc_fw->obj);
> + if (obj)
> + i915_gem_object_put(obj);
> +
> + uc_fw->fetch_status = INTEL_UC_FIRMWARE_NONE;
> +}
> +
> +void i915_fetch_uc_fw(struct drm_i915_private *i915,
> + struct intel_uc_fw *uc_fw)
> +{
> + struct pci_dev *pdev = i915->drm.pdev;
> + struct drm_i915_gem_object *obj;
> + const struct firmware *fw = NULL;
> + struct uc_css_header *css;
> + size_t size;
> + int err;
> +
> + if (!uc_fw->path)
> + return;
> +
> + uc_fw->fetch_status = INTEL_UC_FIRMWARE_PENDING;
> +
> + DRM_DEBUG_DRIVER("before requesting firmware: uC fw fetch status %s\n",
> + intel_uc_fw_status_repr(uc_fw->fetch_status));
> +
> + err = request_firmware(&fw, uc_fw->path, &pdev->dev);
> + if (err)
> + goto fail;
> + if (!fw)
> + goto fail;
> +
> + DRM_DEBUG_DRIVER("fetch uC fw from %s succeeded, fw %p\n",
> + uc_fw->path, fw);
> +
> + /* Check the size of the blob before examining buffer contents */
> + if (fw->size < sizeof(struct uc_css_header)) {
> + DRM_NOTE("Firmware header is missing\n");
> + goto fail;
> + }
> +
> + css = (struct uc_css_header *)fw->data;
> +
> + /* Firmware bits always start from header */
> + uc_fw->header_offset = 0;
> + uc_fw->header_size = (css->header_size_dw - css->modulus_size_dw -
> + css->key_size_dw - css->exponent_size_dw) * sizeof(u32);
> +
> + if (uc_fw->header_size != sizeof(struct uc_css_header)) {
> + DRM_NOTE("CSS header definition mismatch\n");
> + goto fail;
> + }
> +
> + /* then, uCode */
> + uc_fw->ucode_offset = uc_fw->header_offset + uc_fw->header_size;
> + uc_fw->ucode_size = (css->size_dw - css->header_size_dw) * sizeof(u32);
> +
> + /* now RSA */
> + if (css->key_size_dw != UOS_RSA_SCRATCH_MAX_COUNT) {
> + DRM_NOTE("RSA key size is bad\n");
> + goto fail;
> + }
> + uc_fw->rsa_offset = uc_fw->ucode_offset + uc_fw->ucode_size;
> + uc_fw->rsa_size = css->key_size_dw * sizeof(u32);
> +
> + /* At least, it should have header, uCode and RSA. Size of all three. */
> + size = uc_fw->header_size + uc_fw->ucode_size + uc_fw->rsa_size;
> + if (fw->size < size) {
> + DRM_NOTE("Missing firmware components\n");
> + goto fail;
> + }
> +
> + /*
> + * The GuC firmware image has the version number embedded at a
> + * well-known offset within the firmware blob; note that major / minor
> + * version are TWO bytes each (i.e. u16), although all pointers and
> + * offsets are defined in terms of bytes (u8).
> + */
> + switch (uc_fw->type) {
> + case INTEL_UC_FW_TYPE_GUC:
> + /* Header and uCode will be loaded to WOPCM. Size of the two. */
> + size = uc_fw->header_size + uc_fw->ucode_size;
> +
> + /* Top 32k of WOPCM is reserved (8K stack + 24k RC6 context). */
> + if (size > intel_guc_wopcm_size(i915)) {
> + DRM_ERROR("Firmware is too large to fit in WOPCM\n");
> + goto fail;
> + }
> + uc_fw->major_ver_found = css->guc.sw_version >> 16;
> + uc_fw->minor_ver_found = css->guc.sw_version & 0xFFFF;
> + break;
> +
> + case INTEL_UC_FW_TYPE_HUC:
> + uc_fw->major_ver_found = css->huc.sw_version >> 16;
> + uc_fw->minor_ver_found = css->huc.sw_version & 0xFFFF;
> + break;
> +
> + default:
> + DRM_ERROR("Unknown firmware type %d\n", uc_fw->type);
> + err = -ENOEXEC;
> + goto fail;
> + }
> +
> + if (uc_fw->major_ver_wanted == 0 && uc_fw->minor_ver_wanted == 0) {
> + DRM_NOTE("Skipping %s firmware version check\n",
> + intel_uc_fw_type_repr(uc_fw->type));
> + } else if (uc_fw->major_ver_found != uc_fw->major_ver_wanted ||
> + uc_fw->minor_ver_found < uc_fw->minor_ver_wanted) {
> + DRM_NOTE("%s firmware version %d.%d, required %d.%d\n",
> + intel_uc_fw_type_repr(uc_fw->type),
> + uc_fw->major_ver_found, uc_fw->minor_ver_found,
> + uc_fw->major_ver_wanted, uc_fw->minor_ver_wanted);
> + err = -ENOEXEC;
> + goto fail;
> + }
> +
> + DRM_DEBUG_DRIVER("firmware version %d.%d OK (minimum %d.%d)\n",
> + uc_fw->major_ver_found, uc_fw->minor_ver_found,
> + uc_fw->major_ver_wanted, uc_fw->minor_ver_wanted);
> +
> + obj = i915_gem_object_create_from_data(i915, fw->data, fw->size);
> + if (IS_ERR(obj)) {
> + err = PTR_ERR(obj);
> + goto fail;
> + }
> +
> + uc_fw->obj = obj;
> + uc_fw->size = fw->size;
> +
> + DRM_DEBUG_DRIVER("uC fw fetch status SUCCESS, obj %p\n",
> + uc_fw->obj);
> +
> + release_firmware(fw);
> + uc_fw->fetch_status = INTEL_UC_FIRMWARE_SUCCESS;
> + return;
> +
> +fail:
> + DRM_WARN("Failed to fetch valid uC firmware from %s (error %d)\n",
> + uc_fw->path, err);
> + DRM_DEBUG_DRIVER("uC fw fetch status FAIL; err %d, fw %p, obj %p\n",
> + err, fw, uc_fw->obj);
> +
> + release_firmware(fw); /* OK even if fw is NULL */
> + uc_fw->fetch_status = INTEL_UC_FIRMWARE_FAIL;
> +}
> diff --git a/drivers/gpu/drm/i915/intel_uc_fw.h b/drivers/gpu/drm/i915/intel_uc_fw.h
> new file mode 100644
> index 0000000..f07c41f
> --- /dev/null
> +++ b/drivers/gpu/drm/i915/intel_uc_fw.h
> @@ -0,0 +1,95 @@
> +/*
> + * Copyright © 2014-2017 Intel Corporation
> + *
> + * Permission is hereby granted, free of charge, to any person obtaining a
> + * copy of this software and associated documentation files (the "Software"),
> + * to deal in the Software without restriction, including without limitation
> + * the rights to use, copy, modify, merge, publish, distribute, sublicense,
> + * and/or sell copies of the Software, and to permit persons to whom the
> + * Software is furnished to do so, subject to the following conditions:
> + *
> + * The above copyright notice and this permission notice (including the next
> + * paragraph) shall be included in all copies or substantial portions of the
> + * Software.
> + *
> + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
> + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
> + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
> + * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
> + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
> + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
> + * IN THE SOFTWARE.
> + *
> + */
> +#ifndef _INTEL_UC_FW_H_
> +#define _INTEL_UC_FW_H_
> +
> +enum intel_uc_fw_status {
> + INTEL_UC_FIRMWARE_FAIL = -1,
> + INTEL_UC_FIRMWARE_NONE = 0,
> + INTEL_UC_FIRMWARE_PENDING,
> + INTEL_UC_FIRMWARE_SUCCESS
> +};
> +
> +enum intel_uc_fw_type {
> + INTEL_UC_FW_TYPE_GUC,
> + INTEL_UC_FW_TYPE_HUC
> +};
> +
> +/*
> + * This structure encapsulates all the data needed during the process
> + * of fetching, caching, and loading the firmware image into the uC.
> + */
> +struct intel_uc_fw {
> + const char *path;
> + size_t size;
> + struct drm_i915_gem_object *obj;
> + enum intel_uc_fw_status fetch_status;
> + enum intel_uc_fw_status load_status;
> +
> + uint16_t major_ver_wanted;
> + uint16_t minor_ver_wanted;
> + uint16_t major_ver_found;
> + uint16_t minor_ver_found;
> +
> + enum intel_uc_fw_type type;
> + uint32_t header_size;
> + uint32_t header_offset;
> + uint32_t rsa_size;
> + uint32_t rsa_offset;
> + uint32_t ucode_size;
> + uint32_t ucode_offset;
> +};
> +
> +static inline
> +const char *intel_uc_fw_status_repr(enum intel_uc_fw_status status)
> +{
> + switch (status) {
> + case INTEL_UC_FIRMWARE_FAIL:
> + return "FAIL";
> + case INTEL_UC_FIRMWARE_NONE:
> + return "NONE";
> + case INTEL_UC_FIRMWARE_PENDING:
> + return "PENDING";
> + case INTEL_UC_FIRMWARE_SUCCESS:
> + return "SUCCESS";
> + }
> + return "<invalid>";
> +}
> +
> +static inline const char *intel_uc_fw_type_repr(enum intel_uc_fw_type type)
> +{
> + switch (type) {
> + case INTEL_UC_FW_TYPE_GUC:
> + return "GuC";
> + case INTEL_UC_FW_TYPE_HUC:
> + return "HuC";
> + }
> + return "uC";
> +}
> +
> +void intel_uc_fw_fini(struct intel_uc_fw *uc_fw);
> +void i915_fetch_uc_fw(struct drm_i915_private *i915,
> + struct intel_uc_fw *uc_fw);
> +
> +#endif
More information about the Intel-gfx
mailing list