public inbox for intel-gfx@lists.freedesktop.org
 help / color / mirror / Atom feed
From: Sagar Arun Kamble <sagar.a.kamble@intel.com>
To: Michal Wajdeczko <michal.wajdeczko@intel.com>,
	intel-gfx@lists.freedesktop.org
Subject: Re: [PATCH 2/9] drm/i915: Move uC fw helper code into dedicated files
Date: Sat, 30 Sep 2017 20:13:35 +0530	[thread overview]
Message-ID: <1ccaaa9f-3cd6-e17a-9e57-8da2c5efa1dc@intel.com> (raw)
In-Reply-To: <edf2524e-9500-a779-c8ed-323db78267fe@intel.com>



On 9/30/2017 3:31 PM, Sagar Arun Kamble wrote:
>
>
> 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@intel.com>
>> Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
>> Cc: Chris Wilson <chris@chris-wilson.co.uk>
>> Cc: Sagar Arun Kamble <sagar.a.kamble@intel.com>
> Reviewed-by: Sagar Arun Kamble <sagar.a.kamble@intel.com>
Just realized that uC specific uc_css_header declaration is still 
present in intel_guc_fwif.h. is it good idea to pull this to intel_uc_fw.h?
>> ---
>>   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
>

_______________________________________________
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

  reply	other threads:[~2017-09-30 14:43 UTC|newest]

Thread overview: 34+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-09-29 17:41 [PATCH 0/9] drm/i915: Guc code reorg Michal Wajdeczko
2017-09-29 17:41 ` [PATCH 1/9] drm/i915: Drop unnecessary forward declaration Michal Wajdeczko
2017-09-30  8:52   ` Sagar Arun Kamble
2017-09-29 17:41 ` [PATCH 2/9] drm/i915: Move uC fw helper code into dedicated files Michal Wajdeczko
2017-09-30 10:01   ` Sagar Arun Kamble
2017-09-30 14:43     ` Sagar Arun Kamble [this message]
2017-09-30 15:50       ` Michal Wajdeczko
2017-09-29 17:41 ` [PATCH 3/9] drm/i915: Move HuC declarations into dedicated header Michal Wajdeczko
2017-09-30 15:14   ` Sagar Arun Kamble
2017-09-29 17:41 ` [PATCH 4/9] drm/i915: Move GuC " Michal Wajdeczko
2017-09-30 15:30   ` Sagar Arun Kamble
2017-09-29 17:41 ` [PATCH 5/9] drm/i915: Move core GuC functions into dedicated file Michal Wajdeczko
2017-09-30 17:06   ` Sagar Arun Kamble
2017-09-30 17:16     ` Sagar Arun Kamble
2017-09-30 18:14       ` Michal Wajdeczko
2017-09-30 18:27         ` Sagar Arun Kamble
2017-10-07  4:25   ` [drm/i915] 202c1ca611: WARNING:at_drivers/gpu/drm/i915/intel_uncore.c:#intel_uncore_forcewake_for_reg[i915] kernel test robot
2017-10-07  8:36     ` Chris Wilson
2017-10-07  8:38       ` Chris Wilson
2017-10-07  9:54     ` Michal Wajdeczko
2017-09-29 17:41 ` [PATCH 6/9] drm/i915: Move intel_guc_sample_forcewake to guc.c Michal Wajdeczko
2017-09-30 17:21   ` Sagar Arun Kamble
2017-09-29 17:41 ` [PATCH 7/9] drm/i915: Move intel_guc_auth_huc " Michal Wajdeczko
2017-09-30 17:27   ` Sagar Arun Kamble
2017-09-29 17:41 ` [PATCH 8/9] drm/i915: Move intel_guc_suspend/resume " Michal Wajdeczko
2017-09-30 17:37   ` Sagar Arun Kamble
2017-09-29 17:41 ` [PATCH 9/9] drm/i915: Move intel_guc_allocate_vma " Michal Wajdeczko
2017-09-30 17:41   ` Sagar Arun Kamble
2017-09-29 18:07 ` ✗ Fi.CI.BAT: warning for drm/i915: Guc code reorg Patchwork
2017-09-29 21:56   ` Michal Wajdeczko
2017-09-30  8:30     ` Sagar Arun Kamble
2017-09-30 11:17       ` Michal Wajdeczko
2017-09-30 14:41         ` Sagar Arun Kamble
2017-10-02  8:45 ` [PATCH 0/9] " Joonas Lahtinen

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1ccaaa9f-3cd6-e17a-9e57-8da2c5efa1dc@intel.com \
    --to=sagar.a.kamble@intel.com \
    --cc=intel-gfx@lists.freedesktop.org \
    --cc=michal.wajdeczko@intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox