Intel-XE Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: John Harrison <john.c.harrison@intel.com>
To: "Souza, Jose" <jose.souza@intel.com>,
	"Vivi, Rodrigo" <rodrigo.vivi@intel.com>
Cc: "Dugast, Francois" <francois.dugast@intel.com>,
	"intel-xe@lists.freedesktop.org" <intel-xe@lists.freedesktop.org>
Subject: Re: [Intel-xe] [PATCH v3 27/30] drm/xe: Extend uAPI to query HuC micro-controler firmware version
Date: Tue, 3 Oct 2023 17:48:07 -0700	[thread overview]
Message-ID: <a3b880a3-555d-540a-0f10-4f2a7c017dec@intel.com> (raw)
In-Reply-To: <30f2ed3daceb731b579938b87abdc0d16f182d10.camel@intel.com>

On 9/27/2023 10:22, Souza, Jose wrote:
> + John Harrison
>
> On Wed, 2023-09-27 at 13:04 -0400, Rodrigo Vivi wrote:
>> On Tue, Sep 26, 2023 at 04:46:36PM +0000, Souza, Jose wrote:
>>> On Tue, 2023-09-26 at 12:55 +0000, Francois Dugast wrote:
>>>> The infrastructure to query GuC firmware version is already in place. It
>>>> is extended with a new micro-controller type to query the HuC firmware
>>>> version. It can be used from user space to know if HuC is running.
>>>>
>>>> Signed-off-by: Francois Dugast <francois.dugast@intel.com>
>>>> ---
>>>>   drivers/gpu/drm/xe/xe_query.c | 9 +++++++++
>>>>   include/uapi/drm/xe_drm.h     | 1 +
>>>>   2 files changed, 10 insertions(+)
>>>>
>>>> diff --git a/drivers/gpu/drm/xe/xe_query.c b/drivers/gpu/drm/xe/xe_query.c
>>>> index 7a0ffd9a654a..c250ca534bb9 100644
>>>> --- a/drivers/gpu/drm/xe/xe_query.c
>>>> +++ b/drivers/gpu/drm/xe/xe_query.c
>>>> @@ -530,6 +530,15 @@ query_uc_fw_version(struct xe_device *xe, struct drm_xe_device_query *query)
>>>>   		resp.branch_ver = 0;
>>>>   		break;
>>>>   	}
>>>> +	case XE_QUERY_UC_TYPE_HUC: {
>>>> +		struct xe_huc *huc = &xe->tiles[0].primary_gt->uc.huc;
>>>> +
>>>> +		resp.major_ver = huc->fw.major_ver_found;
>>>> +		resp.minor_ver = huc->fw.minor_ver_found;
>>>> +		resp.patch_ver = huc->fw.patch_ver_found;
>>> Have you confirmed that HuC will not have something like submission version like GuC have?
>> Nah... GuC is the only complicated fw in our set of fw...
HuC has no split interface. It is only ever accessed by the UMD from a 
batch buffer. The KMD has no dealings with the HuC beyond providing the 
firmware image to whatever entity does the loading (GuC or GSC according 
to platform). So no need to multiple interface versions.

>>
>>> At least in GuC, when running in SRIOV mode the VFs will not have access to the actual GuC version, that is why it have submission version.
>>>
>>> Not sure if providing a complete different firmware version from one kernel version to other would be considered a uAPI break...
>> hmmm... but now what I'm asking myself is if we shouldn't move the guc one to
>> have the current loaded firmware and create a special category for the
>> submission version:
>>
>> XE_QUERY_UC_TYPE_GUC
>> XE_QUERY_UC_TYPE_GUC_SUBMISSION
>> XE_QUERY_UC_TYPE_HUC
> I don't think any UMD would fetch the actual GUC FW version and risk fail when running under SRIOV VF.
> If needed we can map a submission version to a actual version...
>
>> But to be really really honest, there's something really fishy on this
>> submission version. Why the VF cannot read the running firmware and
>> get the submission version from there?
> Got this information from John, he can explain it better.
Because the VF does not need to know the master version number.

Especially when you get in to VF migration and such. The VF could start 
executing with one back end GuC version but then be migrated to a system 
with a completely different back end GuC version. As long as the 
submission API is compatible then the VF doesn't care. However, the PF 
that is managing the GuC very definitely needs to know how to manage 
that specific GuC version. Even ignoring live migration, an end customer 
may have a specific OS image that they have validated and tested and 
want to run on some cloud server system. The cloud provider may need to 
update the GuC version to take security fixes. But the customer's image 
should not have to change as a result. The GuC update must be backwards 
compatible at the VF level even if it is backwards breaking at the PF level.

In short, the GuC presents two completely separate APIs. One for 
management that is only visible to the PF and one for clients/submission 
that is visible to the VF (and directly to the UMDs if we ever support 
direct submission, plus indirectly to the UMDs via bugs!). On native, 
the KMD sees everything so technically only one version is required for 
native. But for SRIOV, the two interfaces are totally separate. A VF KMD 
does not have access to the management interfaces and does not care what 
master version the GuC is. It only cares that the client interface 
matches what it knows about. Likewise a UMD. Therefore, we need two 
completely separate interface version numbers. And we need to be very 
careful that nothing uses the master version when it should be using the 
submission version. Otherwise, stuff will break when it starts to run in 
a VF.

Whether it is useful to return the master version via this query 
interface is debatable. There should be no functional requirement for 
it. Any UMD code should only care about the client interface/behaviour 
and so should only need the submission interface version number. 
Potentially we might want to report the master version to the end user 
via some control panel information tool thing. But that should be the 
only purpose for it.

John.


>>>> +		resp.branch_ver = 0;
>>>> +		break;
>>>> +	}
>>>>   	default:
>>>>   		return -EINVAL;
>>>>   	}
>>>> diff --git a/include/uapi/drm/xe_drm.h b/include/uapi/drm/xe_drm.h
>>>> index 84091860c7d2..fe7e83a5bd3e 100644
>>>> --- a/include/uapi/drm/xe_drm.h
>>>> +++ b/include/uapi/drm/xe_drm.h
>>>> @@ -478,6 +478,7 @@ struct drm_xe_query_topology_mask {
>>>>   struct drm_xe_query_uc_fw_version {
>>>>   	/** @uc: The micro-controller type to query firmware version */
>>>>   #define XE_QUERY_UC_TYPE_GUC 0
>>>> +#define XE_QUERY_UC_TYPE_HUC 1
>>>>   	__u16 uc_type;
>>>>   
>>>>   	/** @pad: MBZ */


  reply	other threads:[~2023-10-04  0:48 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-09-26 12:55 [Intel-xe] [PATCH v3 00/30] uAPI Alignment - take 1 v3 Francois Dugast
2023-09-26 12:55 ` [Intel-xe] [PATCH v3 01/30] drm/xe: Fix array bounds check for queries Francois Dugast
2023-09-26 12:55 ` [Intel-xe] [PATCH v3 02/30] drm/xe: Set the correct type for xe_to_user_engine_class Francois Dugast
2023-09-26 12:55 ` [Intel-xe] [PATCH v3 03/30] drm/xe: Correlate engine and cpu timestamps with better accuracy Francois Dugast
2023-09-26 16:42   ` Souza, Jose
2023-09-26 18:43   ` Umesh Nerlige Ramappa
2023-09-26 12:55 ` [Intel-xe] [PATCH v3 04/30] drm/xe/uapi: Separate VM_BIND's operation and flag Francois Dugast
2023-09-26 12:55 ` [Intel-xe] [PATCH v3 05/30] drm/xe/vm: Remove VM_BIND_OP macro Francois Dugast
2023-09-26 12:55 ` [Intel-xe] [PATCH v3 06/30] drm/xe/uapi: Remove MMIO ioctl Francois Dugast
2023-09-26 12:55 ` [Intel-xe] [PATCH v3 07/30] drm/xe: Fix xe_exec_queue_is_idle for parallel exec queues Francois Dugast
2023-09-26 12:55 ` [Intel-xe] [PATCH v3 08/30] drm/xe: Deprecate XE_EXEC_QUEUE_SET_PROPERTY_COMPUTE_MODE implementation Francois Dugast
2023-09-26 12:55 ` [Intel-xe] [PATCH v3 09/30] drm/xe: Rename exec_queue_kill_compute to xe_vm_remove_compute_exec_queue Francois Dugast
2023-09-26 12:55 ` [Intel-xe] [PATCH v3 10/30] drm/xe: Remove XE_EXEC_QUEUE_SET_PROPERTY_COMPUTE_MODE from uAPI Francois Dugast
2023-09-26 12:55 ` [Intel-xe] [PATCH v3 11/30] drm/xe/uapi: Use common drm_xe_ext_set_property extension Francois Dugast
2023-09-26 12:55 ` [Intel-xe] [PATCH v3 12/30] drm/xe: Kill XE_VM_PROPERTY_BIND_OP_ERROR_CAPTURE_ADDRESS extension Francois Dugast
2023-09-26 12:55 ` [Intel-xe] [PATCH v3 13/30] drm/xe/uapi: Kill DRM_XE_UFENCE_WAIT_VM_ERROR Francois Dugast
2023-09-26 12:55 ` [Intel-xe] [PATCH v3 14/30] drm/xe: Remove async worker and rework sync binds Francois Dugast
2023-09-26 12:55 ` [Intel-xe] [PATCH v3 15/30] drm/xe: Fix VM bind out-sync signaling ordering Francois Dugast
2023-09-26 12:55 ` [Intel-xe] [PATCH v3 16/30] drm/xe/uapi: Document drm_xe_query_gt Francois Dugast
2023-09-26 12:55 ` [Intel-xe] [PATCH v3 17/30] drm/xe/uapi: Replace useless 'instance' per unique gt_id Francois Dugast
2023-09-26 12:55 ` [Intel-xe] [PATCH v3 18/30] drm/xe/uapi: Remove unused field of drm_xe_query_gt Francois Dugast
2023-09-26 12:55 ` [Intel-xe] [PATCH v3 19/30] drm/xe/uapi: Rename gts to gt_list Francois Dugast
2023-09-26 12:55 ` [Intel-xe] [PATCH v3 20/30] drm/xe/uapi: Fix naming of XE_QUERY_CONFIG_MAX_EXEC_QUEUE_PRIORITY Francois Dugast
2023-09-26 12:55 ` [Intel-xe] [PATCH v3 21/30] drm/xe/uapi: Add documentation for query Francois Dugast
2023-09-26 12:55 ` [Intel-xe] [PATCH v3 22/30] drm/xe/uapi: Crystal Reference Clock updates Francois Dugast
2023-09-26 16:40   ` Souza, Jose
2023-09-26 12:55 ` [Intel-xe] [PATCH v3 23/30] drm/xe: Extend drm_xe_vm_bind_op Francois Dugast
2023-09-26 12:55 ` [Intel-xe] [PATCH v3 24/30] drm/xe: Add uAPI to query micro-controler firmware version Francois Dugast
2023-09-26 12:55 ` [Intel-xe] [PATCH v3 25/30] drm/xe/uapi: Document DRM_XE_DEVICE_QUERY_HWCONFIG Francois Dugast
2023-09-26 12:55 ` [Intel-xe] [PATCH v3 26/30] drm/xe/uapi: Add pad to drm_xe_engine_class_instance Francois Dugast
2023-09-29  0:36   ` Umesh Nerlige Ramappa
2023-09-29  9:06     ` Francois Dugast
2023-09-29 16:00       ` Umesh Nerlige Ramappa
2023-09-29 16:45         ` Souza, Jose
2023-10-03 18:15           ` Umesh Nerlige Ramappa
2023-10-04 10:55             ` Francois Dugast
2023-10-05  2:35               ` Umesh Nerlige Ramappa
2023-10-09 17:05                 ` Umesh Nerlige Ramappa
2023-10-09 17:16                   ` Francois Dugast
2023-10-06  2:07               ` Umesh Nerlige Ramappa
2023-09-26 12:55 ` [Intel-xe] [PATCH v3 27/30] drm/xe: Extend uAPI to query HuC micro-controler firmware version Francois Dugast
2023-09-26 16:46   ` Souza, Jose
2023-09-27 17:04     ` Rodrigo Vivi
2023-09-27 17:22       ` Souza, Jose
2023-10-04  0:48         ` John Harrison [this message]
2023-10-09 13:08           ` Francois Dugast
2023-10-09 13:35             ` Souza, Jose
2023-10-10 19:10   ` Lucas De Marchi
2023-09-26 12:55 ` [Intel-xe] [PATCH v3 28/30] drm/xe: Remove useless query config num_params Francois Dugast
2023-09-26 12:55 ` [Intel-xe] [PATCH v3 29/30] drm/xe/uapi: Add missing DRM_ prefix in uAPI constants Francois Dugast
2023-09-26 16:24   ` Souza, Jose
2023-09-26 12:55 ` [Intel-xe] [PATCH v3 30/30] drm/xe/uapi: Add _FLAG to uAPI constants usable for flags Francois Dugast
2023-09-26 13:12 ` [Intel-xe] ✓ CI.Patch_applied: success for uAPI Alignment - take 1 v3 Patchwork
2023-09-26 13:13 ` [Intel-xe] ✗ CI.checkpatch: warning " Patchwork
2023-09-26 13:14 ` [Intel-xe] ✓ CI.KUnit: success " Patchwork
2023-09-26 13:21 ` [Intel-xe] ✓ CI.Build: " Patchwork
2023-09-26 13:22 ` [Intel-xe] ✗ CI.Hooks: failure " Patchwork
2023-09-26 13:23 ` [Intel-xe] ✓ CI.checksparse: success " Patchwork
2023-09-26 13:49 ` [Intel-xe] ✗ CI.BAT: failure " Patchwork
2023-10-04  0:31 ` [Intel-xe] [PATCH v3 00/30] " John Harrison

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=a3b880a3-555d-540a-0f10-4f2a7c017dec@intel.com \
    --to=john.c.harrison@intel.com \
    --cc=francois.dugast@intel.com \
    --cc=intel-xe@lists.freedesktop.org \
    --cc=jose.souza@intel.com \
    --cc=rodrigo.vivi@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