[PATCH 5/6] drm/i915/display: add "is" member to struct intel_display

Lucas De Marchi lucas.demarchi at intel.com
Thu Jun 27 21:45:22 UTC 2024


On Thu, Jun 27, 2024 at 09:47:17PM GMT, Jani Nikula wrote:
>On Thu, 27 Jun 2024, Lucas De Marchi <lucas.demarchi at intel.com> wrote:
>> On Tue, Jun 18, 2024 at 05:22:55PM GMT, Jani Nikula wrote:
>>>Facilitate using display->is.HASWELL etc. for identifying platforms and
>>>subplatforms. Merge platform and subplatform members together.
>>>
>>>Signed-off-by: Jani Nikula <jani.nikula at intel.com>
>>>---
>>> .../gpu/drm/i915/display/intel_display_core.h |  3 +++
>>> .../drm/i915/display/intel_display_device.c   | 19 +++++++++++++++++++
>>> 2 files changed, 22 insertions(+)
>>>
>>>diff --git a/drivers/gpu/drm/i915/display/intel_display_core.h b/drivers/gpu/drm/i915/display/intel_display_core.h
>>>index 7715fc329057..35bea92893af 100644
>>>--- a/drivers/gpu/drm/i915/display/intel_display_core.h
>>>+++ b/drivers/gpu/drm/i915/display/intel_display_core.h
>>>@@ -286,6 +286,9 @@ struct intel_display {
>>> 	/* drm device backpointer */
>>> 	struct drm_device *drm;
>>>
>>>+	/* Platform identification */
>>>+	struct intel_display_is is;
>>>+
>>> 	/* Display functions */
>>> 	struct {
>>> 		/* Top level crtc-ish functions */
>>>diff --git a/drivers/gpu/drm/i915/display/intel_display_device.c b/drivers/gpu/drm/i915/display/intel_display_device.c
>>>index 0c275d85bd30..954caea38005 100644
>>>--- a/drivers/gpu/drm/i915/display/intel_display_device.c
>>>+++ b/drivers/gpu/drm/i915/display/intel_display_device.c
>>>@@ -1269,8 +1269,25 @@ find_subplatform_desc(struct pci_dev *pdev, const struct platform_desc *desc)
>>> 	return NULL;
>>> }
>>>
>>>+static void mem_or(void *_dst, const void *_src, size_t size)
>>
>> why are we not using linux/bitmap.h that has support for bitfields with
>> multiple words and instead rolling our own?
>
>Because this is primarily about named struct members, and the bitfields
>and ORing them together is just an implementation detail.
>
>I could use bitmap_or(), but I'd have to rely on bitmap implementation
>details to get it all precisely correct. I would not be able to
>trivially use DECLARE_BITMAP() for this.
>
>Using a union can get tricky:
>
>struct intel_display_is {
>	union {
>		struct {
>			INTEL_DISPLAY_PLATFORMS(MEMBER);
>                };
>		DECLARE_BITMAP(raw, NUM_PLATFORMS);
>	};	
>};
>
>I don't know if that even works. Can't used named structs, otherwise it
>defeats the purpose.

a union like that seems good to me

Lucas De Marchi


>
>BR,
>Jani.
>
>>
>> Lucas De Marchi
>>
>>>+{
>>>+	const u8 *src = _src;
>>>+	u8 *dst = _dst;
>>>+	size_t i;
>>>+
>>>+	for (i = 0; i < size; i++)
>>>+		dst[i] |= src[i];
>>>+}
>>>+
>>>+static void merge_display_is(struct intel_display_is *dst,
>>>+			     const struct intel_display_is *src)
>>>+{
>>>+	mem_or(dst, src, sizeof(*dst));
>>>+}
>>>+
>>> void intel_display_device_probe(struct drm_i915_private *i915)
>>> {
>>>+	struct intel_display *display = &i915->display;
>>> 	struct pci_dev *pdev = to_pci_dev(i915->drm.dev);
>>> 	const struct intel_display_device_info *info;
>>> 	struct intel_display_ip_ver ip_ver = {};
>>>@@ -1308,11 +1325,13 @@ void intel_display_device_probe(struct drm_i915_private *i915)
>>>
>>> 	drm_WARN_ON(&i915->drm, !desc->platform || !desc->name);
>>> 	DISPLAY_RUNTIME_INFO(i915)->platform = desc->platform;
>>>+	display->is = desc->is;
>>>
>>> 	subdesc = find_subplatform_desc(pdev, desc);
>>> 	if (subdesc) {
>>> 		drm_WARN_ON(&i915->drm, !subdesc->subplatform || !subdesc->name);
>>> 		DISPLAY_RUNTIME_INFO(i915)->subplatform = subdesc->subplatform;
>>>+		merge_display_is(&display->is, &subdesc->is);
>>> 	}
>>>
>>> 	if (ip_ver.ver || ip_ver.rel || ip_ver.step)
>>>--
>>>2.39.2
>>>
>
>-- 
>Jani Nikula, Intel


More information about the Intel-gfx mailing list