All of lore.kernel.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: 38+ 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  4:25     ` kernel test robot
2017-10-07  8:36     ` [Intel-gfx] " Chris Wilson
2017-10-07  8:36       ` Chris Wilson
2017-10-07  8:38       ` [Intel-gfx] " Chris Wilson
2017-10-07  8:38         ` Chris Wilson
2017-10-07  9:54     ` Michal Wajdeczko
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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.