Re: [Intel-gfx] [PATCH resend 0/9] drm: Add privacy-screen class and connector properties

2021-04-14 Thread Rajat Jain
+Jesse Barnes

Hello,

On Wed, Apr 14, 2021 at 8:11 AM Hans de Goede  wrote:
>
> Hi All,
>
> Here is the privacy-screen related code which I last posted in August
> of last year. To the best of my knowledge there is consensus about /
> everyone is in agreement with the new userspace API (2 connector properties)
> this patch-set add (patch 1 of the series).
>
> The blocker the last time was that there were no userspace users of
> the new properties and as a rule we don't add new drm userspace API
> without users.
>
> There now is GNOME userspace code using the new properties:
> https://hackmd.io/@3v1n0/rkyIy3BOw
>
> The new API works as designed for this userspace user and the branches
> mentioned at the above link add the following features to GNOME:
>
> 1. Showing an OSD notification when the privacy-screen is toggled on/off
>through hotkeys handled by the embedded-controller
> 2. Allowing control of the privacy-screen from the GNOME control-panel,
>including the on/off slider shown there updating to match the hw-setting
>when the setting is changed with the control-panel open.
> 3. Restoring the last user-setting at login
>
> This series consists of a number of different parts:
>
> 1. A new version of Rajat's privacy-screen connector properties patch,
> this adds new userspace API in the form of new properties

Thanks a lot Hans!

>
> 2. Since on most devices the privacy screen is actually controlled by
> some vendor specific ACPI/WMI interface which has a driver under
> drivers/platform/x86, we need some "glue" code to make this functionality
> available to KMS drivers. Patches 2-4 add a new privacy-screen class for
> this, which allows non KMS drivers (and possibly KMS drivers too) to
> register a privacy-screen device and also adds an interface for KMS drivers
> to get access to the privacy-screen associated with a specific connector.
> This is modelled similar to how we deal with e.g. PWMs and GPIOs in the
> kernel, including separate includes for consumers and providers(drivers).
>
> 3. Some drm_connector helper functions to keep the actual changes needed
> for this in individual KMS drivers as small as possible (patch 5).
>
> 4. Make the thinkpad_acpi code register a privacy-screen device on
> ThinkPads with a privacy-screen (patches 6-8)
>
> 5. Make the i915 driver export the privacy-screen functionality through
> the connector properties on the eDP connector.
>
> I believe that it would be best to merge the entire series, including
> the thinkpad_acpi changes through drm-misc in one go. As the pdx86
> subsys maintainer I hereby give my ack for merging the thinkpad_acpi
> changes through drm-misc.

Huge +1 to this. This feature has been waiting for acceptance for
almost 1.5 years now, and we (Chromeos) have been carrying it out of
the tree since then. We have real products today that use this
feature. If a version of it can please be accepted and applied, we
look forward to cherry-pick / backport it to our kernels (and adapt chrome
code to the new API).

Thanks,
Rajat



>
> There is one small caveat with this series, which it is good to be
> aware of. The i915 driver will now return -EPROBE_DEFER on Thinkpads
> with an eprivacy screen, until the thinkpad_acpi driver is loaded.
> This means that initrd generation tools will need to be updated to
> include thinkpad_acpi when the i915 driver is added to the initrd.
> Without this the loading of the i915 driver will be delayed to after
> the switch to real rootfs.
>
> Regards,
>
> Hans
>
>
> Hans de Goede (8):
>   drm: Add privacy-screen class
>   drm/privacy-screen: Add X86 specific arch init code
>   drm/privacy-screen: Add notifier support
>   drm/connector: Add a drm_connector privacy-screen helper functions
>   platform/x86: thinkpad_acpi: Add hotkey_notify_extended_hotkey()
> helper
>   platform/x86: thinkpad_acpi: Get privacy-screen / lcdshadow ACPI
> handles only once
>   platform/x86: thinkpad_acpi: Register a privacy-screen device
>   drm/i915: Add privacy-screen support
>
> Rajat Jain (1):
>   drm/connector: Add support for privacy-screen properties (v4)
>
>  Documentation/gpu/drm-kms-helpers.rst|  15 +
>  Documentation/gpu/drm-kms.rst|   2 +
>  MAINTAINERS  |   8 +
>  drivers/gpu/drm/Kconfig  |   5 +
>  drivers/gpu/drm/Makefile |   4 +
>  drivers/gpu/drm/drm_atomic_uapi.c|   4 +
>  drivers/gpu/drm/drm_connector.c  | 214 
>  drivers/gpu/drm/drm_privacy_screen.c | 493 +++
>  drivers/gpu/drm/drm_privacy_screen_x86.c |  82 +++
>  drivers/gpu/drm/i915/display/intel_display.c |   5 +
>  drivers/gpu/drm/i915/display/intel_dp.c  |  10 +
>  drivers/gpu/drm/i915/i915_pci.c  |  12 +
>  drivers/platform/x86/Kconfig |   1 +
>  drivers/platform/x86/thinkpad_acpi.c | 131 +++--
>  include/drm/drm_connector.h  |  56 +++
>  incl

Re: [Intel-gfx] [PATCH] drm/i915/display/psr: Fix cppcheck warnings

2021-04-14 Thread Harish Chegondi
On Fri, Apr 09, 2021 at 04:17:38PM -0700, José Roberto de Souza wrote:
> Fix redundant condition, caught in cppcheck by kernel test robot.
> 
> Reported-by: kernel test robot 
> Cc: Gwan-gyeong Mun 
> Fixes: b64d6c51380b ("drm/i915/display: Support PSR Multiple Instances")
> Signed-off-by: José Roberto de Souza 
Reviewed-by: Harish Chegondi 
> ---
>  drivers/gpu/drm/i915/display/intel_psr.c | 3 +--
>  1 file changed, 1 insertion(+), 2 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_psr.c 
> b/drivers/gpu/drm/i915/display/intel_psr.c
> index 2627d0b558f3..06cb286e9a4a 100644
> --- a/drivers/gpu/drm/i915/display/intel_psr.c
> +++ b/drivers/gpu/drm/i915/display/intel_psr.c
> @@ -1532,8 +1532,7 @@ void intel_psr_wait_for_idle(const struct 
> intel_crtc_state *new_crtc_state)
>   u32 psr_status;
>  
>   mutex_lock(&intel_dp->psr.lock);
> - if (!intel_dp->psr.enabled ||
> - (intel_dp->psr.enabled && intel_dp->psr.psr2_enabled)) {
> + if (!intel_dp->psr.enabled || intel_dp->psr.psr2_enabled) {
>   mutex_unlock(&intel_dp->psr.lock);
>   continue;
>   }
> -- 
> 2.31.1
> 
> ___
> Intel-gfx mailing list
> Intel-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/intel-gfx
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx


Re: [Intel-gfx] [PATCH v19 2/6] dt-binding: i2c: mt65xx: add vbus-supply property

2021-04-14 Thread Rob Herring
On Thu, 15 Apr 2021 01:29:12 +0800, Hsin-Yi Wang wrote:
> Add vbus-supply property for mt65xx. The regulator can be passed into
> core and turned off during suspend/sleep to reduce power consumption.
> 
> Signed-off-by: Hsin-Yi Wang 
> ---
>  Documentation/devicetree/bindings/i2c/i2c-mt65xx.txt | 1 +
>  1 file changed, 1 insertion(+)
> 

Acked-by: Rob Herring 
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx


[Intel-gfx] ✓ Fi.CI.IGT: success for drm/i915/adl_p: Add support for Display Page Tables

2021-04-14 Thread Patchwork
== Series Details ==

Series: drm/i915/adl_p: Add support for Display Page Tables
URL   : https://patchwork.freedesktop.org/series/89078/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_9971_full -> Patchwork_19939_full


Summary
---

  **WARNING**

  Minor unknown changes coming with Patchwork_19939_full need to be verified
  manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in Patchwork_19939_full, please notify your bug team to allow them
  to document this new failure mode, which will reduce false positives in CI.

  

Possible new issues
---

  Here are the unknown changes that may have been introduced in 
Patchwork_19939_full:

### IGT changes ###

 Warnings 

  * igt@gem_exec_fair@basic-pace-solo@rcs0:
- shard-iclb: [FAIL][1] ([i915#2842]) -> [FAIL][2]
   [1]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9971/shard-iclb3/igt@gem_exec_fair@basic-pace-s...@rcs0.html
   [2]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19939/shard-iclb4/igt@gem_exec_fair@basic-pace-s...@rcs0.html

  
Known issues


  Here are the changes found in Patchwork_19939_full that come from known 
issues:

### IGT changes ###

 Issues hit 

  * igt@feature_discovery@psr2:
- shard-iclb: [PASS][3] -> [SKIP][4] ([i915#658])
   [3]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9971/shard-iclb2/igt@feature_discov...@psr2.html
   [4]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19939/shard-iclb5/igt@feature_discov...@psr2.html

  * igt@gem_create@create-clear:
- shard-skl:  [PASS][5] -> [FAIL][6] ([i915#3160])
   [5]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9971/shard-skl2/igt@gem_cre...@create-clear.html
   [6]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19939/shard-skl9/igt@gem_cre...@create-clear.html

  * igt@gem_ctx_persistence@process:
- shard-snb:  NOTRUN -> [SKIP][7] ([fdo#109271] / [i915#1099])
   [7]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19939/shard-snb6/igt@gem_ctx_persiste...@process.html

  * igt@gem_eio@unwedge-stress:
- shard-tglb: [PASS][8] -> [TIMEOUT][9] ([i915#2369] / [i915#3063])
   [8]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9971/shard-tglb1/igt@gem_...@unwedge-stress.html
   [9]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19939/shard-tglb8/igt@gem_...@unwedge-stress.html

  * igt@gem_exec_endless@dispatch@vcs0:
- shard-iclb: [PASS][10] -> [INCOMPLETE][11] ([i915#2502])
   [10]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9971/shard-iclb4/igt@gem_exec_endless@dispa...@vcs0.html
   [11]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19939/shard-iclb4/igt@gem_exec_endless@dispa...@vcs0.html

  * igt@gem_exec_fair@basic-deadline:
- shard-apl:  NOTRUN -> [FAIL][12] ([i915#2846])
   [12]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19939/shard-apl7/igt@gem_exec_f...@basic-deadline.html

  * igt@gem_exec_fair@basic-none@vcs1:
- shard-kbl:  NOTRUN -> [FAIL][13] ([i915#2842])
   [13]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19939/shard-kbl1/igt@gem_exec_fair@basic-n...@vcs1.html

  * igt@gem_exec_fair@basic-throttle@rcs0:
- shard-glk:  [PASS][14] -> [FAIL][15] ([i915#2842]) +1 similar 
issue
   [14]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9971/shard-glk5/igt@gem_exec_fair@basic-throt...@rcs0.html
   [15]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19939/shard-glk8/igt@gem_exec_fair@basic-throt...@rcs0.html

  * igt@gem_exec_whisper@basic-queues-forked-all:
- shard-glk:  [PASS][16] -> [DMESG-WARN][17] ([i915#118] / 
[i915#95])
   [16]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9971/shard-glk9/igt@gem_exec_whis...@basic-queues-forked-all.html
   [17]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19939/shard-glk6/igt@gem_exec_whis...@basic-queues-forked-all.html

  * igt@gem_mmap_gtt@cpuset-medium-copy:
- shard-iclb: [PASS][18] -> [FAIL][19] ([i915#2428])
   [18]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9971/shard-iclb1/igt@gem_mmap_...@cpuset-medium-copy.html
   [19]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19939/shard-iclb7/igt@gem_mmap_...@cpuset-medium-copy.html

  * igt@gem_mmap_offset@clear:
- shard-glk:  [PASS][20] -> [FAIL][21] ([i915#1888] / [i915#3160])
   [20]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9971/shard-glk1/igt@gem_mmap_off...@clear.html
   [21]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19939/shard-glk4/igt@gem_mmap_off...@clear.html

  * igt@gem_pwrite@basic-exhaustion:
- shard-skl:  NOTRUN -> [WARN][22] ([i915#2658])
   [22]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19939/shard-skl9/igt@gem_pwr...@basic-exhaustion.html
- shard-apl:  NOTRUN -> [WARN][23] ([i915#2658])
   [23]: 
https://int

Re: [Intel-gfx] [RFC PATCH v2] drm/doc/rfc: i915 DG1 uAPI

2021-04-14 Thread Jason Ekstrand
+mesa-dev and some Intel mesa people.

On Wed, Apr 14, 2021 at 5:23 AM Daniel Vetter  wrote:
>
> On Tue, Apr 13, 2021 at 12:47:06PM +0100, Matthew Auld wrote:
> > Add an entry for the new uAPI needed for DG1.
> >
> > v2(Daniel):
> >   - include the overall upstreaming plan
> >   - add a note for mmap, there are differences here for TTM vs i915
> >   - bunch of other suggestions from Daniel
> >
> > Signed-off-by: Matthew Auld 
> > Cc: Joonas Lahtinen 
> > Cc: Daniel Vetter 
> > Cc: Dave Airlie 
>
> Bunch more thoughts below, I think we're getting there. Thanks for doing
> this.
>
> > ---
> >  Documentation/gpu/rfc/i915_gem_lmem.h   | 151 
> >  Documentation/gpu/rfc/i915_gem_lmem.rst | 119 +++
> >  Documentation/gpu/rfc/index.rst |   4 +
> >  3 files changed, 274 insertions(+)
> >  create mode 100644 Documentation/gpu/rfc/i915_gem_lmem.h
> >  create mode 100644 Documentation/gpu/rfc/i915_gem_lmem.rst
> >
> > diff --git a/Documentation/gpu/rfc/i915_gem_lmem.h 
> > b/Documentation/gpu/rfc/i915_gem_lmem.h
> > new file mode 100644
> > index ..6ae13209d7ef
> > --- /dev/null
> > +++ b/Documentation/gpu/rfc/i915_gem_lmem.h
> > @@ -0,0 +1,151 @@
> > +/* The new query_id for struct drm_i915_query_item */
> > +#define DRM_I915_QUERY_MEMORY_REGIONS   0xdeadbeaf
> > +
> > +/**
> > + * enum drm_i915_gem_memory_class
> > + */
> > +enum drm_i915_gem_memory_class {
>
> Are we really going with enum in uapi? I thought that was frought with
> peril since the integer type of enum is quite a bit up to compilers. But
> maybe I'm just scared.

It looks to me like it's a __u16 below.  That should be fine.  We
don't really need to give the enum type a name in that case, though.

> > + /** @I915_MEMORY_CLASS_SYSTEM: system memory */
> > + I915_MEMORY_CLASS_SYSTEM = 0,
> > + /** @I915_MEMORY_CLASS_DEVICE: device local-memory */
> > + I915_MEMORY_CLASS_DEVICE,
> > +};
> > +
> > +/**
> > + * struct drm_i915_gem_memory_class_instance
> > + */
> > +struct drm_i915_gem_memory_class_instance {
> > + /** @memory_class: see enum drm_i915_gem_memory_class */
> > + __u16 memory_class;
> > +
> > + /** @memory_instance: which instance */
> > + __u16 memory_instance;
> > +};
> > +
> > +/**
> > + * struct drm_i915_memory_region_info
> > + *
> > + * Describes one region as known to the driver.
> > + */
> > +struct drm_i915_memory_region_info {
> > + /** @region: class:instance pair encoding */
> > + struct drm_i915_gem_memory_class_instance region;
> > +
> > + /** @rsvd0: MBZ */
> > + __u32 rsvd0;
> > +
> > + /** @caps: MBZ */
> > + __u64 caps;
> > +
> > + /** @flags: MBZ */
> > + __u64 flags;
> > +
> > + /** @probed_size: Memory probed by the driver (-1 = unknown) */
> > + __u64 probed_size;
> > +
> > + /** @unallocated_size: Estimate of memory remaining (-1 = unknown) */
> > + __u64 unallocated_size;
> > +
> > + /** @rsvd1: MBZ */
> > + __u64 rsvd1[8];
>
> I guess this is for future stuff that becomes relevant with multi-tile?
> Might be worth explaining in 1-2 words why we reserve a pile here. Also
> it doesn't matter ofc for performance here :-)
>
> > +};
> > +
> > +/**
> > + * struct drm_i915_query_memory_regions
> > + *
> > + * Region info query enumerates all regions known to the driver by filling 
> > in
> > + * an array of struct drm_i915_memory_region_info structures.
>
> I guess this works with the usual 1. query number of regions 2. get them
> all two-step ioctl flow? Worth explaining here.
>
> > + */
> > +struct drm_i915_query_memory_regions {
> > + /** @num_regions: Number of supported regions */
> > + __u32 num_regions;
> > +
> > + /** @rsvd: MBZ */
> > + __u32 rsvd[3];
> > +
> > + /** @regions: Info about each supported region */
> > + struct drm_i915_memory_region_info regions[];
> > +};
>
> Hm don't we need a query ioctl for this too?
>
> > +
> > +#define DRM_I915_GEM_CREATE_EXT  0xdeadbeaf
> > +#define DRM_IOCTL_I915_GEM_CREATE_EXTDRM_IOWR(DRM_COMMAND_BASE + 
> > DRM_I915_GEM_CREATE_EXT, struct drm_i915_gem_create_ext)
> > +
> > +/**
> > + * struct drm_i915_gem_create_ext
>
> I think some explanation here that all new bo flags will be added here,
> and that in general we're phasing out the various SET/GET ioctls.
>
> > + */
> > +struct drm_i915_gem_create_ext {
> > + /**
> > +  * @size: Requested size for the object.
> > +  *
> > +  * The (page-aligned) allocated size for the object will be returned.
> > +  */
> > + __u64 size;
> > + /**
> > +  * @handle: Returned handle for the object.
> > +  *
> > +  * Object handles are nonzero.
> > +  */
> > + __u32 handle;
> > + /** @flags: MBZ */
> > + __u32 flags;
> > + /**
> > +  * @extensions:
> > +  * For I915_GEM_CREATE_EXT_SETPARAM extension usage see both:
> > +  *  struct drm_i915_gem_create_ext_setparam.
> > +  *  

Re: [Intel-gfx] [PATCH 03/30] drm/tegra: Don't register DP AUX channels before connectors

2021-04-14 Thread Lyude Paul
On Wed, 2021-04-14 at 18:49 +0200, Thierry Reding wrote:
> On Fri, Feb 19, 2021 at 04:52:59PM -0500, Lyude Paul wrote:
> > As pointed out by the documentation for drm_dp_aux_register(),
> > drm_dp_aux_init() should be used in situations where the AUX channel for a
> > display driver can potentially be registered before it's respective DRM
> > driver. This is the case with Tegra, since the DP aux channel exists as a
> > platform device instead of being a grandchild of the DRM device.
> > 
> > Since we're about to add a backpointer to a DP AUX channel's respective
> > DRM
> > device, let's fix this so that we don't potentially allow userspace to use
> > the AUX channel before we've associated it with it's DRM connector.
> > 
> > Signed-off-by: Lyude Paul 
> > ---
> >  drivers/gpu/drm/tegra/dpaux.c | 11 ++-
> >  1 file changed, 6 insertions(+), 5 deletions(-)
> > 
> > diff --git a/drivers/gpu/drm/tegra/dpaux.c b/drivers/gpu/drm/tegra/dpaux.c
> > index 105fb9cdbb3b..ea56c6ec25e4 100644
> > --- a/drivers/gpu/drm/tegra/dpaux.c
> > +++ b/drivers/gpu/drm/tegra/dpaux.c
> > @@ -534,9 +534,7 @@ static int tegra_dpaux_probe(struct platform_device
> > *pdev)
> > dpaux->aux.transfer = tegra_dpaux_transfer;
> > dpaux->aux.dev = &pdev->dev;
> >  
> > -   err = drm_dp_aux_register(&dpaux->aux);
> > -   if (err < 0)
> > -   return err;
> > +   drm_dp_aux_init(&dpaux->aux);
> 
> I just noticed that this change causes an error on some setups that I
> haven't seen before. The problem is that the SOR driver tries to grab a
> reference to the I2C device to make sure it doesn't go away while it has
> a pointer to it.
> 
> However, since now the I2C adapter hasn't been registered yet, I get
> this:
> 
> [   15.013969] kobject: '(null)' (5c903e43): is not
> initialized, yet kobject_get() is being called.
> 
> I recall that you wanted to make this change so that a backpointer to
> the DRM device could be added (I think that's patch 15 of the series),
> but I didn't see that patch get merged, so it's a bit difficult to try
> and fix this up.

I'm pretty sure I already merged the tegra change in drm-misc-next, so if it's
causing issues you probably should send out a revert for now and I can r-b it
so we can figure out a better solution for this in the mean time

> Has the situation changed? Do we no longer need the backpointer? If we
> still want it, what's the plan for merging the change? Should I work
> under the assumption that patch will make it in sometime and try to fix
> this on top of that?

yes we do still need the backpointer - I'm just still working on getting
reviews for some of the other parts of this series, and have been on PTO/busy
with a couple of other things.

> 
> I'm thinking that perhaps we can move the I2C adapter registration into
> drm_dp_aux_init() since that's independent of the DRM device.

Yeah this makes sense for me - I can try to make this change on the next
respin of this series. What kind of setup were you able to reproduce issues on
this with btw?

>  It would
> also make a bit more sense from the Tegra driver's point of view where
> all devices would be created during the ->probe() path, and only during
> the ->init() path would the connection between DRM device and DRM DP AUX
> device be established.
> 
> Thierry

-- 
Cheers,
 Lyude Paul (she/her)
 Software Engineer at Red Hat

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


Re: [Intel-gfx] [PATCH v2 00/18] Make vfio_mdev type safe

2021-04-14 Thread Alex Williamson
On Tue,  6 Apr 2021 16:40:23 -0300
Jason Gunthorpe  wrote:

> vfio_mdev has a number of different objects: mdev_parent, mdev_type and
> mdev_device.
> 
> Unfortunately the types of these have been erased in various places
> throughout the API, and this makes it very hard to understand this code or
> maintain it by the time it reaches all of the drivers.
> 
> This series puts in all the types and aligns some of the design with the
> driver core standard for a driver core bus driver:
> 
>  - Replace 'struct device *' with 'struct mdev_device *
>  - Replace 'struct device *' with 'struct mdev_type *' and
>mtype_get_parent_dev()
>  - Replace 'struct kobject *' with 'struct mdev_type *'
> 
> Now that types are clear it is easy to spot a few places that have
> duplicated information.
> 
> More significantly we can now understand how to directly fix the
> obfuscated 'kobj->name' matching by realizing the the kobj is a mdev_type,
> which is linked to the supported_types_list provided by the driver, and
> thus the core code can directly return the array indexes all the drivers
> actually want.
> 
> v2:
>  - Use a mdev_type local in mdev_create_sysfs_files
>  - Rename the goto unwind labels in mdev_device_free()
>  - Reorder patches, annotate reviewed-by's thanks all
> v1: https://lore.kernel.org/r/0-v1-7dedf20b2b75+4f785-vfio2_...@nvidia.com
> 
> Jason Gunthorpe (18):
>   vfio/mdev: Fix missing static's on MDEV_TYPE_ATTR's
>   vfio/mdev: Do not allow a mdev_type to have a NULL parent pointer
>   vfio/mdev: Add missing typesafety around mdev_device
>   vfio/mdev: Simplify driver registration
>   vfio/mdev: Use struct mdev_type in struct mdev_device
>   vfio/mdev: Expose mdev_get/put_parent to mdev_private.h
>   vfio/mdev: Add missing reference counting to mdev_type
>   vfio/mdev: Reorganize mdev_device_create()
>   vfio/mdev: Add missing error handling to dev_set_name()
>   vfio/mdev: Remove duplicate storage of parent in mdev_device
>   vfio/mdev: Add mdev/mtype_get_type_group_id()
>   vfio/mtty: Use mdev_get_type_group_id()
>   vfio/mdpy: Use mdev_get_type_group_id()
>   vfio/mbochs: Use mdev_get_type_group_id()
>   vfio/gvt: Make DRM_I915_GVT depend on VFIO_MDEV
>   vfio/gvt: Use mdev_get_type_group_id()
>   vfio/mdev: Remove kobj from mdev_parent_ops->create()
>   vfio/mdev: Correct the function signatures for the
> mdev_type_attributes
> 
>  .../driver-api/vfio-mediated-device.rst   |   9 +-
>  drivers/gpu/drm/i915/Kconfig  |   1 +
>  drivers/gpu/drm/i915/gvt/gvt.c|  41 ++---
>  drivers/gpu/drm/i915/gvt/gvt.h|   4 +-
>  drivers/gpu/drm/i915/gvt/kvmgt.c  |   7 +-
>  drivers/s390/cio/vfio_ccw_ops.c   |  17 +-
>  drivers/s390/crypto/vfio_ap_ops.c |  14 +-
>  drivers/vfio/mdev/mdev_core.c | 174 +++---
>  drivers/vfio/mdev/mdev_driver.c   |  19 +-
>  drivers/vfio/mdev/mdev_private.h  |  40 ++--
>  drivers/vfio/mdev/mdev_sysfs.c|  59 +++---
>  drivers/vfio/mdev/vfio_mdev.c |  29 +--
>  drivers/vfio/vfio_iommu_type1.c   |  25 +--
>  include/linux/mdev.h  |  80 +---
>  samples/vfio-mdev/mbochs.c|  55 +++---
>  samples/vfio-mdev/mdpy.c  |  56 +++---
>  samples/vfio-mdev/mtty.c  |  66 ++-
>  17 files changed, 313 insertions(+), 383 deletions(-)

Applied to vfio next branch for v5.13.  Thanks!

Alex

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


[Intel-gfx] ✓ Fi.CI.BAT: success for drm/i915/adl_p: Add support for Display Page Tables

2021-04-14 Thread Patchwork
== Series Details ==

Series: drm/i915/adl_p: Add support for Display Page Tables
URL   : https://patchwork.freedesktop.org/series/89078/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_9971 -> Patchwork_19939


Summary
---

  **SUCCESS**

  No regressions found.

  External URL: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19939/index.html

Known issues


  Here are the changes found in Patchwork_19939 that come from known issues:

### IGT changes ###

 Issues hit 

  * igt@amdgpu/amd_basic@semaphore:
- fi-bsw-nick:NOTRUN -> [SKIP][1] ([fdo#109271]) +17 similar issues
   [1]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19939/fi-bsw-nick/igt@amdgpu/amd_ba...@semaphore.html

  * igt@kms_chamelium@common-hpd-after-suspend:
- fi-kbl-7500u:   [PASS][2] -> [DMESG-FAIL][3] ([i915#165])
   [2]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9971/fi-kbl-7500u/igt@kms_chamel...@common-hpd-after-suspend.html
   [3]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19939/fi-kbl-7500u/igt@kms_chamel...@common-hpd-after-suspend.html

  * igt@kms_chamelium@dp-crc-fast:
- fi-kbl-7500u:   [PASS][4] -> [FAIL][5] ([i915#1372])
   [4]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9971/fi-kbl-7500u/igt@kms_chamel...@dp-crc-fast.html
   [5]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19939/fi-kbl-7500u/igt@kms_chamel...@dp-crc-fast.html

  
 Possible fixes 

  * igt@i915_selftest@live@execlists:
- fi-bsw-nick:[INCOMPLETE][6] ([i915#2782] / [i915#2940]) -> 
[PASS][7]
   [6]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9971/fi-bsw-nick/igt@i915_selftest@l...@execlists.html
   [7]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19939/fi-bsw-nick/igt@i915_selftest@l...@execlists.html

  
 Warnings 

  * igt@i915_pm_rpm@basic-rte:
- fi-kbl-guc: [FAIL][8] ([i915#579]) -> [SKIP][9] ([fdo#109271])
   [8]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9971/fi-kbl-guc/igt@i915_pm_...@basic-rte.html
   [9]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19939/fi-kbl-guc/igt@i915_pm_...@basic-rte.html

  
  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [i915#1372]: https://gitlab.freedesktop.org/drm/intel/issues/1372
  [i915#165]: https://gitlab.freedesktop.org/drm/intel/issues/165
  [i915#2782]: https://gitlab.freedesktop.org/drm/intel/issues/2782
  [i915#2940]: https://gitlab.freedesktop.org/drm/intel/issues/2940
  [i915#579]: https://gitlab.freedesktop.org/drm/intel/issues/579


Participating hosts (45 -> 41)
--

  Missing(4): fi-icl-y fi-ilk-m540 fi-bsw-cyan fi-bdw-samus 


Build changes
-

  * Linux: CI_DRM_9971 -> Patchwork_19939

  CI-20190529: 20190529
  CI_DRM_9971: 8f38b366ca75c83434d586430306b9f83499f1b2 @ 
git://anongit.freedesktop.org/gfx-ci/linux
  IGT_6064: 48d89e2c65c54883b0776930a884e6d3bcefb45b @ 
git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_19939: a992015218bc03e5ae4315a3c225da2336c2d001 @ 
git://anongit.freedesktop.org/gfx-ci/linux


== Linux commits ==

a992015218bc drm/i915/adl_p: Enable remapping to pad DPT FB strides to POT
a48fcda970df drm/i915/adl_p: Require a minimum of 8 tiles stride for DPT FBs
dd8b2c31734c drm/i915/adl_p: Disable support for 90/270 FB rotation
3ab439b2e61b drm/i915/adl_p: Add stride restriction when using DPT
ae0259160293 drm/i915/xelpd: Support 128k plane stride
c4779e2af5ce drm/i915/xelpd: Fallback to plane stride limitations when using DPT
4a28c5ef22b0 drm/i915/xelpd: First stab at DPT support
9c24583b5bbd drm/i915/adl_p: ADL_P device info enabling
c9f4c699d4b4 drm/i915/adl_p: Add PCI Devices IDs
ee88b73d7f94 drm/i915/xelpd: add XE_LPD display characteristics
fae46e1c4858 drm/i915: Pass intel_framebuffer instad of drm_framebuffer to 
intel_fill_fb_info()

== Logs ==

For more details see: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19939/index.html
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx


[Intel-gfx] ✗ Fi.CI.BUILD: failure for add power control in i2c

2021-04-14 Thread Patchwork
== Series Details ==

Series: add power control in i2c
URL   : https://patchwork.freedesktop.org/series/89081/
State : failure

== Summary ==

Applying: i2c: core: support bus regulator controlling in adapter
error: sha1 information is lacking or useless (drivers/i2c/i2c-core-base.c).
error: could not build fake ancestor
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 i2c: core: support bus regulator controlling in adapter
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".


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


Re: [Intel-gfx] [PATCH v2 08/12] drm/i915: finish removal of gen_mask

2021-04-14 Thread Lucas De Marchi

On Wed, Apr 14, 2021 at 12:38:44PM +0100, Tvrtko Ursulin wrote:


On 13/04/2021 06:09, Lucas De Marchi wrote:

Now that it's not used anywhere, remove it from struct
intel_device_info. To allow a period in which code will be converted to
the new macro, keep IS_GEN_RANGE() around, just redefining it to use
the new fields. The size advantage from IS_GEN_RANGE() using a mask is
not that big as it has pretty limited use througout the driver:

   textdata bss dec hex filename
2758497   959656496 2860958  2ba79e drivers/gpu/drm/i915/i915.ko.old
2758586   959536496 2861035  2ba7eb drivers/gpu/drm/i915/i915.ko.new


This delta refers to this patch - I mean this point in the series? 
Asking because it may not be 100% representative since some of the 
previous patches have already removed some gen mask usages.



yes, it doesn't consider the other patches. These numbers are also for
v1, not v2, as I didn't update the commit mesage.

I don't think the numbers will be too different though.




While I am here, I am a bit fond of the mask approach and wonder if 
using it for all (gt/media/whatelse) new fields would still make 
sense.


Presence of the range check helpers suggests that it might, but I 
haven't looked at how prevalent their usage ends up after the series 
is done. So just in principle, I don't see why not still go with masks 
since that guarantees elegant check at each range check site. It would 
be all hidden in the macro implementation so easy.


Also for historical reference, another reason why I went for masks 
everywhere approach is that at some point we had a feature request to 
allow compiling out platforms/gens. I *think* that was much easier to 
do with masking and in experiments back then I was able for instance 
to build just for Gen9+ and drop like 30% of the binary size.


Oh I found the branch now.. The reason for IS_GEN(p, v) was also in 
that series. I don't know if I ever RFC-ed or trybotted it.. google 
suggests no and I neither can find it in my mailboxes. I could send 
out the old patches for reference? But to be honest I have no idea if 
this feature request (targeted driver builds) will ever resurface..


At the time I also liked having the macros. Looking back and checking if
we really took advantage of it, I lean towards a "no". Even when and if
we are interested in compiling out some platforms, I think a better
code split would be deserved rather relying on this.

Lucas De Marchi
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx


[Intel-gfx] [PATCH v19 6/6] drm/i915/selftests: Rename functions names

2021-04-14 Thread Hsin-Yi Wang
pm_resume and pm_suspend might be conflict with the ones defined in
include/linux/suspend.h. Rename pm_resume{suspend} to
i915_pm_resume{suspend} since they are only used here.

Signed-off-by: Hsin-Yi Wang 
Reported-by: kernel test robot 
---
 drivers/gpu/drm/i915/selftests/i915_gem.c | 10 +-
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/i915/selftests/i915_gem.c 
b/drivers/gpu/drm/i915/selftests/i915_gem.c
index dc394fb7ccfa..525afda9d31f 100644
--- a/drivers/gpu/drm/i915/selftests/i915_gem.c
+++ b/drivers/gpu/drm/i915/selftests/i915_gem.c
@@ -94,7 +94,7 @@ static int pm_prepare(struct drm_i915_private *i915)
return 0;
 }
 
-static void pm_suspend(struct drm_i915_private *i915)
+static void i915_pm_suspend(struct drm_i915_private *i915)
 {
intel_wakeref_t wakeref;
 
@@ -116,7 +116,7 @@ static void pm_hibernate(struct drm_i915_private *i915)
}
 }
 
-static void pm_resume(struct drm_i915_private *i915)
+static void i915_pm_resume(struct drm_i915_private *i915)
 {
intel_wakeref_t wakeref;
 
@@ -152,12 +152,12 @@ static int igt_gem_suspend(void *arg)
if (err)
goto out;
 
-   pm_suspend(i915);
+   i915_pm_suspend(i915);
 
/* Here be dragons! Note that with S3RST any S3 may become S4! */
simulate_hibernate(i915);
 
-   pm_resume(i915);
+   i915_pm_resume(i915);
 
err = switch_to_context(ctx);
 out:
@@ -192,7 +192,7 @@ static int igt_gem_hibernate(void *arg)
/* Here be dragons! */
simulate_hibernate(i915);
 
-   pm_resume(i915);
+   i915_pm_resume(i915);
 
err = switch_to_context(ctx);
 out:
-- 
2.31.1.295.g9ea45b61b8-goog

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


[Intel-gfx] [PATCH v19 5/6] arm64: dts: mt8183: add supply name for eeprom

2021-04-14 Thread Hsin-Yi Wang
Add supplies for eeprom for mt8183 boards.

Signed-off-by: Hsin-Yi Wang 
---
 arch/arm64/boot/dts/mediatek/mt8183-kukui-kakadu.dtsi | 4 
 arch/arm64/boot/dts/mediatek/mt8183-kukui-kodama.dtsi | 4 
 arch/arm64/boot/dts/mediatek/mt8183-kukui-krane.dtsi  | 4 
 3 files changed, 12 insertions(+)

diff --git a/arch/arm64/boot/dts/mediatek/mt8183-kukui-kakadu.dtsi 
b/arch/arm64/boot/dts/mediatek/mt8183-kukui-kakadu.dtsi
index b442e38a3156..28966a65391b 100644
--- a/arch/arm64/boot/dts/mediatek/mt8183-kukui-kakadu.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8183-kukui-kakadu.dtsi
@@ -88,11 +88,13 @@ &i2c2 {
pinctrl-0 = <&i2c2_pins>;
status = "okay";
clock-frequency = <40>;
+   vbus-supply = <&mt6358_vcamio_reg>;
 
eeprom@58 {
compatible = "atmel,24c32";
reg = <0x58>;
pagesize = <32>;
+   vcc-supply = <&mt6358_vcama2_reg>;
};
 };
 
@@ -101,11 +103,13 @@ &i2c4 {
pinctrl-0 = <&i2c4_pins>;
status = "okay";
clock-frequency = <40>;
+   vbus-supply = <&mt6358_vcn18_reg>;
 
eeprom@54 {
compatible = "atmel,24c32";
reg = <0x54>;
pagesize = <32>;
+   vcc-supply = <&mt6358_vcn18_reg>;
};
 };
 
diff --git a/arch/arm64/boot/dts/mediatek/mt8183-kukui-kodama.dtsi 
b/arch/arm64/boot/dts/mediatek/mt8183-kukui-kodama.dtsi
index 2f5234a16ead..3aa79403c0c2 100644
--- a/arch/arm64/boot/dts/mediatek/mt8183-kukui-kodama.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8183-kukui-kodama.dtsi
@@ -62,11 +62,13 @@ &i2c2 {
pinctrl-0 = <&i2c2_pins>;
status = "okay";
clock-frequency = <40>;
+   vbus-supply = <&mt6358_vcamio_reg>;
 
eeprom@58 {
compatible = "atmel,24c64";
reg = <0x58>;
pagesize = <32>;
+   vcc-supply = <&mt6358_vcamio_reg>;
};
 };
 
@@ -75,11 +77,13 @@ &i2c4 {
pinctrl-0 = <&i2c4_pins>;
status = "okay";
clock-frequency = <40>;
+   vbus-supply = <&mt6358_vcn18_reg>;
 
eeprom@54 {
compatible = "atmel,24c64";
reg = <0x54>;
pagesize = <32>;
+   vcc-supply = <&mt6358_vcn18_reg>;
};
 };
 
diff --git a/arch/arm64/boot/dts/mediatek/mt8183-kukui-krane.dtsi 
b/arch/arm64/boot/dts/mediatek/mt8183-kukui-krane.dtsi
index fbc471ccf805..30c183c96a54 100644
--- a/arch/arm64/boot/dts/mediatek/mt8183-kukui-krane.dtsi
+++ b/arch/arm64/boot/dts/mediatek/mt8183-kukui-krane.dtsi
@@ -71,11 +71,13 @@ &i2c2 {
pinctrl-0 = <&i2c2_pins>;
status = "okay";
clock-frequency = <40>;
+   vbus-supply = <&mt6358_vcamio_reg>;
 
eeprom@58 {
compatible = "atmel,24c32";
reg = <0x58>;
pagesize = <32>;
+   vcc-supply = <&mt6358_vcama2_reg>;
};
 };
 
@@ -84,11 +86,13 @@ &i2c4 {
pinctrl-0 = <&i2c4_pins>;
status = "okay";
clock-frequency = <40>;
+   vbus-supply = <&mt6358_vcn18_reg>;
 
eeprom@54 {
compatible = "atmel,24c32";
reg = <0x54>;
pagesize = <32>;
+   vcc-supply = <&mt6358_vcn18_reg>;
};
 };
 
-- 
2.31.1.295.g9ea45b61b8-goog

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


[Intel-gfx] [PATCH v19 4/6] misc: eeprom: at24: check suspend status before disable regulator

2021-04-14 Thread Hsin-Yi Wang
cd5676db0574 ("misc: eeprom: at24: support pm_runtime control") disables
regulator in runtime suspend. If runtime suspend is called before
regulator disable, it will results in regulator unbalanced disabling.

Signed-off-by: Hsin-Yi Wang 
---
 drivers/misc/eeprom/at24.c | 6 --
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/drivers/misc/eeprom/at24.c b/drivers/misc/eeprom/at24.c
index 926408b41270..7a6f01ace78a 100644
--- a/drivers/misc/eeprom/at24.c
+++ b/drivers/misc/eeprom/at24.c
@@ -763,7 +763,8 @@ static int at24_probe(struct i2c_client *client)
at24->nvmem = devm_nvmem_register(dev, &nvmem_config);
if (IS_ERR(at24->nvmem)) {
pm_runtime_disable(dev);
-   regulator_disable(at24->vcc_reg);
+   if (!pm_runtime_status_suspended(dev))
+   regulator_disable(at24->vcc_reg);
return PTR_ERR(at24->nvmem);
}
 
@@ -774,7 +775,8 @@ static int at24_probe(struct i2c_client *client)
err = at24_read(at24, 0, &test_byte, 1);
if (err) {
pm_runtime_disable(dev);
-   regulator_disable(at24->vcc_reg);
+   if (!pm_runtime_status_suspended(dev))
+   regulator_disable(at24->vcc_reg);
return -ENODEV;
}
 
-- 
2.31.1.295.g9ea45b61b8-goog

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


[Intel-gfx] [PATCH v19 3/6] i2c: mediatek: mt65xx: add optional vbus-supply

2021-04-14 Thread Hsin-Yi Wang
Add vbus-supply which provides power to SCL/SDA. Pass this regulator
into core so it can be turned on/off for low power mode support.

Signed-off-by: Hsin-Yi Wang 
---
 drivers/i2c/busses/i2c-mt65xx.c | 7 +++
 1 file changed, 7 insertions(+)

diff --git a/drivers/i2c/busses/i2c-mt65xx.c b/drivers/i2c/busses/i2c-mt65xx.c
index 2ffd2f354d0a..82f2b6716005 100644
--- a/drivers/i2c/busses/i2c-mt65xx.c
+++ b/drivers/i2c/busses/i2c-mt65xx.c
@@ -1215,6 +1215,13 @@ static int mtk_i2c_probe(struct platform_device *pdev)
i2c->adap.quirks = i2c->dev_comp->quirks;
i2c->adap.timeout = 2 * HZ;
i2c->adap.retries = 1;
+   i2c->adap.bus_regulator = devm_regulator_get_optional(&pdev->dev, 
"vbus");
+   if (IS_ERR(i2c->adap.bus_regulator)) {
+   if (PTR_ERR(i2c->adap.bus_regulator) == -ENODEV)
+   i2c->adap.bus_regulator = NULL;
+   else
+   return PTR_ERR(i2c->adap.bus_regulator);
+   }
 
ret = mtk_i2c_parse_dt(pdev->dev.of_node, i2c);
if (ret)
-- 
2.31.1.295.g9ea45b61b8-goog

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


[Intel-gfx] [PATCH v19 2/6] dt-binding: i2c: mt65xx: add vbus-supply property

2021-04-14 Thread Hsin-Yi Wang
Add vbus-supply property for mt65xx. The regulator can be passed into
core and turned off during suspend/sleep to reduce power consumption.

Signed-off-by: Hsin-Yi Wang 
---
 Documentation/devicetree/bindings/i2c/i2c-mt65xx.txt | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/i2c/i2c-mt65xx.txt 
b/Documentation/devicetree/bindings/i2c/i2c-mt65xx.txt
index 7f0194fdd0cc..2c45647e9f0b 100644
--- a/Documentation/devicetree/bindings/i2c/i2c-mt65xx.txt
+++ b/Documentation/devicetree/bindings/i2c/i2c-mt65xx.txt
@@ -32,6 +32,7 @@ Optional properties:
   - mediatek,have-pmic: platform can control i2c form special pmic side.
 Only mt6589 and mt8135 support this feature.
   - mediatek,use-push-pull: IO config use push-pull mode.
+  - vbus-supply: phandle to the regulator that provides power to SCL/SDA.
 
 Example:
 
-- 
2.31.1.295.g9ea45b61b8-goog

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


[Intel-gfx] [PATCH v19 1/6] i2c: core: support bus regulator controlling in adapter

2021-04-14 Thread Hsin-Yi Wang
From: Bibby Hsieh 

Although in the most platforms, the bus power of i2c
are alway on, some platforms disable the i2c bus power
in order to meet low power request.

We can control bulk regulator if it is provided in i2c
adapter device.

Signed-off-by: Bibby Hsieh 
Signed-off-by: Marek Szyprowski 
Signed-off-by: Hsin-Yi Wang 
---
 drivers/i2c/i2c-core-base.c | 88 +
 include/linux/i2c.h |  2 +
 2 files changed, 90 insertions(+)

diff --git a/drivers/i2c/i2c-core-base.c b/drivers/i2c/i2c-core-base.c
index 24c8f11bac73..c34920f30c5a 100644
--- a/drivers/i2c/i2c-core-base.c
+++ b/drivers/i2c/i2c-core-base.c
@@ -461,12 +461,14 @@ static int i2c_smbus_host_notify_to_irq(const struct 
i2c_client *client)
 static int i2c_device_probe(struct device *dev)
 {
struct i2c_client   *client = i2c_verify_client(dev);
+   struct i2c_adapter  *adap;
struct i2c_driver   *driver;
int status;
 
if (!client)
return 0;
 
+   adap = client->adapter;
client->irq = client->init_irq;
 
if (!client->irq) {
@@ -532,6 +534,14 @@ static int i2c_device_probe(struct device *dev)
 
dev_dbg(dev, "probe\n");
 
+   if (adap->bus_regulator) {
+   status = regulator_enable(adap->bus_regulator);
+   if (status < 0) {
+   dev_err(&adap->dev, "Failed to enable bus regulator\n");
+   goto err_clear_wakeup_irq;
+   }
+   }
+
status = of_clk_set_defaults(dev->of_node, false);
if (status < 0)
goto err_clear_wakeup_irq;
@@ -589,8 +599,10 @@ static int i2c_device_probe(struct device *dev)
 static int i2c_device_remove(struct device *dev)
 {
struct i2c_client   *client = to_i2c_client(dev);
+   struct i2c_adapter  *adap;
struct i2c_driver   *driver;
 
+   adap = client->adapter;
driver = to_i2c_driver(dev->driver);
if (driver->remove) {
int status;
@@ -605,6 +617,8 @@ static int i2c_device_remove(struct device *dev)
devres_release_group(&client->dev, client->devres_group_id);
 
dev_pm_domain_detach(&client->dev, true);
+   if (!pm_runtime_status_suspended(&client->dev) && adap->bus_regulator)
+   regulator_disable(adap->bus_regulator);
 
dev_pm_clear_wake_irq(&client->dev);
device_init_wakeup(&client->dev, false);
@@ -617,6 +631,79 @@ static int i2c_device_remove(struct device *dev)
return 0;
 }
 
+#ifdef CONFIG_PM_SLEEP
+static int i2c_resume_early(struct device *dev)
+{
+   struct i2c_client *client = i2c_verify_client(dev);
+   int err;
+
+   if (!client || !client->adapter->bus_regulator)
+   return 0;
+
+   if (!pm_runtime_status_suspended(&client->dev)) {
+   err = regulator_enable(client->adapter->bus_regulator);
+   if (err)
+   return err;
+   }
+
+   return pm_generic_resume_early(&client->dev);
+}
+
+static int i2c_suspend_late(struct device *dev)
+{
+   struct i2c_client *client = i2c_verify_client(dev);
+   int err;
+
+   if (!client || !client->adapter->bus_regulator)
+   return 0;
+
+   err = pm_generic_suspend_late(&client->dev);
+   if (err)
+   return err;
+
+   if (!pm_runtime_status_suspended(&client->dev))
+   return regulator_disable(client->adapter->bus_regulator);
+
+   return 0;
+}
+#endif
+
+#ifdef CONFIG_PM
+static int i2c_runtime_resume(struct device *dev)
+{
+   struct i2c_client *client = i2c_verify_client(dev);
+   int err;
+
+   if (!client || !client->adapter->bus_regulator)
+   return 0;
+
+   err = regulator_enable(client->adapter->bus_regulator);
+   if (err)
+   return err;
+   return pm_generic_runtime_resume(&client->dev);
+}
+
+static int i2c_runtime_suspend(struct device *dev)
+{
+   struct i2c_client *client = i2c_verify_client(dev);
+   int err;
+
+   if (!client || !client->adapter->bus_regulator)
+   return 0;
+
+   err = pm_generic_runtime_suspend(&client->dev);
+   if (err)
+   return err;
+
+   return regulator_disable(client->adapter->bus_regulator);
+}
+#endif
+
+static const struct dev_pm_ops i2c_device_pm = {
+   SET_LATE_SYSTEM_SLEEP_PM_OPS(i2c_suspend_late, i2c_resume_early)
+   SET_RUNTIME_PM_OPS(i2c_runtime_suspend, i2c_runtime_resume, NULL)
+};
+
 static void i2c_device_shutdown(struct device *dev)
 {
struct i2c_client *client = i2c_verify_client(dev);
@@ -674,6 +761,7 @@ struct bus_type i2c_bus_type = {
.probe  = i2c_device_probe,
.remove = i2c_device_remove,
.shutdown   = i2c_device_shutdown,
+   .pm = &i2c_device_pm,
 };
 EXPORT_SYMBOL_GPL(i2c_bus_type);
 
diff --git a/include/linux/i2c.h b/include/linux/i2c.h
index e

[Intel-gfx] [PATCH v19 0/6] add power control in i2c

2021-04-14 Thread Hsin-Yi Wang
Although in the most platforms, the power of eeprom
and i2c are alway on, some platforms disable the
eeprom and i2c power in order to meet low power request.

This patch add the pm_runtime ops to control power to
support all platforms.

Changes since v18:
 - Fix a function name conflict with drivers/gpu/drm/i915/selftests/i915_gem.c

Changes since v17:
 - Add a patch to fix unbalanced regulator disabling.
 - Add dts patch.

Changes since v16:
 - request regulator in device instead of in the core.
 - control regulator only if it's provided.

Changes since v15:
 - Squash the fix[1] for v15.
[1] 
https://patchwork.ozlabs.org/project/linux-i2c/patch/20200522101327.13456-1-m.szyprow...@samsung.com/

Changes since v14:
 - change the return value in normal condition
 - access the variable after NULL pointer checking
 - add ack tag

Changes since v13:
 - fixup some logic error

Changes since v12:
 - rebase onto v5.7-rc1
 - change the property description in binding

Changes since v11:
 - use suspend_late/resume_early instead of suspend/resume
 - rebase onto v5.6-rc1

Changes since v10:
 - fixup some worng codes

Changes since v9:
 - fixup build error
 - remove redundant code

Changes since v8:
 - fixup some wrong code
 - remove redundant message

[... snip ...]

Bibby Hsieh (1):
  i2c: core: support bus regulator controlling in adapter

Hsin-Yi Wang (5):
  dt-binding: i2c: mt65xx: add vbus-supply property
  i2c: mediatek: mt65xx: add optional vbus-supply
  misc: eeprom: at24: check suspend status before disable regulator
  arm64: dts: mt8183: add supply name for eeprom
  drm/i915/selftests: Rename functions names

 .../devicetree/bindings/i2c/i2c-mt65xx.txt|  1 +
 .../dts/mediatek/mt8183-kukui-kakadu.dtsi |  4 +
 .../dts/mediatek/mt8183-kukui-kodama.dtsi |  4 +
 .../boot/dts/mediatek/mt8183-kukui-krane.dtsi |  4 +
 drivers/gpu/drm/i915/selftests/i915_gem.c | 10 +--
 drivers/i2c/busses/i2c-mt65xx.c   |  7 ++
 drivers/i2c/i2c-core-base.c   | 88 +++
 drivers/misc/eeprom/at24.c|  6 +-
 include/linux/i2c.h   |  2 +
 9 files changed, 119 insertions(+), 7 deletions(-)

-- 
2.31.1.295.g9ea45b61b8-goog

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


[Intel-gfx] ✗ Fi.CI.CHECKPATCH: warning for drm/i915/adl_p: Add support for Display Page Tables

2021-04-14 Thread Patchwork
== Series Details ==

Series: drm/i915/adl_p: Add support for Display Page Tables
URL   : https://patchwork.freedesktop.org/series/89078/
State : warning

== Summary ==

$ dim checkpatch origin/drm-tip
fae46e1c4858 drm/i915: Pass intel_framebuffer instad of drm_framebuffer to 
intel_fill_fb_info()
-:156: CHECK:LINE_SPACING: Please don't use multiple blank lines
#156: FILE: drivers/gpu/drm/i915/display/intel_fb.h:49:
 
+

total: 0 errors, 0 warnings, 1 checks, 129 lines checked
ee88b73d7f94 drm/i915/xelpd: add XE_LPD display characteristics
c9f4c699d4b4 drm/i915/adl_p: Add PCI Devices IDs
-:25: ERROR:COMPLEX_MACRO: Macros with complex values should be enclosed in 
parentheses
#25: FILE: include/drm/i915_pciids.h:649:
+#define INTEL_ADLP_IDS(info) \
+   INTEL_VGA_DEVICE(0x46A0, info), \
+   INTEL_VGA_DEVICE(0x46A1, info), \
+   INTEL_VGA_DEVICE(0x46A2, info), \
+   INTEL_VGA_DEVICE(0x46A3, info), \
+   INTEL_VGA_DEVICE(0x46A6, info), \
+   INTEL_VGA_DEVICE(0x46A8, info), \
+   INTEL_VGA_DEVICE(0x46AA, info), \
+   INTEL_VGA_DEVICE(0x462A, info), \
+   INTEL_VGA_DEVICE(0x4626, info), \
+   INTEL_VGA_DEVICE(0x4628, info), \
+   INTEL_VGA_DEVICE(0x46B0, info), \
+   INTEL_VGA_DEVICE(0x46B1, info), \
+   INTEL_VGA_DEVICE(0x46B2, info), \
+   INTEL_VGA_DEVICE(0x46B3, info), \
+   INTEL_VGA_DEVICE(0x46C0, info), \
+   INTEL_VGA_DEVICE(0x46C1, info), \
+   INTEL_VGA_DEVICE(0x46C2, info), \
+   INTEL_VGA_DEVICE(0x46C3, info)

-:25: CHECK:MACRO_ARG_REUSE: Macro argument reuse 'info' - possible 
side-effects?
#25: FILE: include/drm/i915_pciids.h:649:
+#define INTEL_ADLP_IDS(info) \
+   INTEL_VGA_DEVICE(0x46A0, info), \
+   INTEL_VGA_DEVICE(0x46A1, info), \
+   INTEL_VGA_DEVICE(0x46A2, info), \
+   INTEL_VGA_DEVICE(0x46A3, info), \
+   INTEL_VGA_DEVICE(0x46A6, info), \
+   INTEL_VGA_DEVICE(0x46A8, info), \
+   INTEL_VGA_DEVICE(0x46AA, info), \
+   INTEL_VGA_DEVICE(0x462A, info), \
+   INTEL_VGA_DEVICE(0x4626, info), \
+   INTEL_VGA_DEVICE(0x4628, info), \
+   INTEL_VGA_DEVICE(0x46B0, info), \
+   INTEL_VGA_DEVICE(0x46B1, info), \
+   INTEL_VGA_DEVICE(0x46B2, info), \
+   INTEL_VGA_DEVICE(0x46B3, info), \
+   INTEL_VGA_DEVICE(0x46C0, info), \
+   INTEL_VGA_DEVICE(0x46C1, info), \
+   INTEL_VGA_DEVICE(0x46C2, info), \
+   INTEL_VGA_DEVICE(0x46C3, info)

total: 1 errors, 0 warnings, 1 checks, 25 lines checked
9c24583b5bbd drm/i915/adl_p: ADL_P device info enabling
4a28c5ef22b0 drm/i915/xelpd: First stab at DPT support
-:583: WARNING:UNNECESSARY_ELSE: else is not generally useful after a break or 
return
#583: FILE: drivers/gpu/drm/i915/display/skl_universal_plane.c:945:
+   return offset >> 9;
+   } else {

total: 0 errors, 1 warnings, 0 checks, 586 lines checked
c4779e2af5ce drm/i915/xelpd: Fallback to plane stride limitations when using DPT
ae0259160293 drm/i915/xelpd: Support 128k plane stride
3ab439b2e61b drm/i915/adl_p: Add stride restriction when using DPT
dd8b2c31734c drm/i915/adl_p: Disable support for 90/270 FB rotation
a48fcda970df drm/i915/adl_p: Require a minimum of 8 tiles stride for DPT FBs
a992015218bc drm/i915/adl_p: Enable remapping to pad DPT FB strides to POT


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


Re: [Intel-gfx] [PATCH 03/30] drm/tegra: Don't register DP AUX channels before connectors

2021-04-14 Thread Thierry Reding
On Fri, Feb 19, 2021 at 04:52:59PM -0500, Lyude Paul wrote:
> As pointed out by the documentation for drm_dp_aux_register(),
> drm_dp_aux_init() should be used in situations where the AUX channel for a
> display driver can potentially be registered before it's respective DRM
> driver. This is the case with Tegra, since the DP aux channel exists as a
> platform device instead of being a grandchild of the DRM device.
> 
> Since we're about to add a backpointer to a DP AUX channel's respective DRM
> device, let's fix this so that we don't potentially allow userspace to use
> the AUX channel before we've associated it with it's DRM connector.
> 
> Signed-off-by: Lyude Paul 
> ---
>  drivers/gpu/drm/tegra/dpaux.c | 11 ++-
>  1 file changed, 6 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/gpu/drm/tegra/dpaux.c b/drivers/gpu/drm/tegra/dpaux.c
> index 105fb9cdbb3b..ea56c6ec25e4 100644
> --- a/drivers/gpu/drm/tegra/dpaux.c
> +++ b/drivers/gpu/drm/tegra/dpaux.c
> @@ -534,9 +534,7 @@ static int tegra_dpaux_probe(struct platform_device *pdev)
>   dpaux->aux.transfer = tegra_dpaux_transfer;
>   dpaux->aux.dev = &pdev->dev;
>  
> - err = drm_dp_aux_register(&dpaux->aux);
> - if (err < 0)
> - return err;
> + drm_dp_aux_init(&dpaux->aux);

I just noticed that this change causes an error on some setups that I
haven't seen before. The problem is that the SOR driver tries to grab a
reference to the I2C device to make sure it doesn't go away while it has
a pointer to it.

However, since now the I2C adapter hasn't been registered yet, I get
this:

[   15.013969] kobject: '(null)' (5c903e43): is not 
initialized, yet kobject_get() is being called.

I recall that you wanted to make this change so that a backpointer to
the DRM device could be added (I think that's patch 15 of the series),
but I didn't see that patch get merged, so it's a bit difficult to try
and fix this up.

Has the situation changed? Do we no longer need the backpointer? If we
still want it, what's the plan for merging the change? Should I work
under the assumption that patch will make it in sometime and try to fix
this on top of that?

I'm thinking that perhaps we can move the I2C adapter registration into
drm_dp_aux_init() since that's independent of the DRM device. It would
also make a bit more sense from the Tegra driver's point of view where
all devices would be created during the ->probe() path, and only during
the ->init() path would the connection between DRM device and DRM DP AUX
device be established.

Thierry


signature.asc
Description: PGP signature
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx


[Intel-gfx] ✗ Fi.CI.IGT: failure for drm/i915: Fix "mitigations" parsing if i915 is builtin (rev2)

2021-04-14 Thread Patchwork
== Series Details ==

Series: drm/i915: Fix "mitigations" parsing if i915 is builtin (rev2)
URL   : https://patchwork.freedesktop.org/series/88998/
State : failure

== Summary ==

CI Bug Log - changes from CI_DRM_9971_full -> Patchwork_19937_full


Summary
---

  **FAILURE**

  Serious unknown changes coming with Patchwork_19937_full absolutely need to be
  verified manually.
  
  If you think the reported changes have nothing to do with the changes
  introduced in Patchwork_19937_full, please notify your bug team to allow them
  to document this new failure mode, which will reduce false positives in CI.

  

Possible new issues
---

  Here are the unknown changes that may have been introduced in 
Patchwork_19937_full:

### IGT changes ###

 Possible regressions 

  * igt@gem_eio@in-flight-contexts-10ms:
- shard-snb:  NOTRUN -> [INCOMPLETE][1]
   [1]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19937/shard-snb6/igt@gem_...@in-flight-contexts-10ms.html

  
Known issues


  Here are the changes found in Patchwork_19937_full that come from known 
issues:

### IGT changes ###

 Issues hit 

  * igt@gem_create@create-massive:
- shard-snb:  NOTRUN -> [DMESG-WARN][2] ([i915#3002]) +1 similar 
issue
   [2]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19937/shard-snb2/igt@gem_cre...@create-massive.html

  * igt@gem_ctx_persistence@engines-hostile-preempt:
- shard-snb:  NOTRUN -> [SKIP][3] ([fdo#109271] / [i915#1099]) +1 
similar issue
   [3]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19937/shard-snb2/igt@gem_ctx_persiste...@engines-hostile-preempt.html

  * igt@gem_eio@unwedge-stress:
- shard-tglb: [PASS][4] -> [TIMEOUT][5] ([i915#2369] / [i915#3063])
   [4]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9971/shard-tglb1/igt@gem_...@unwedge-stress.html
   [5]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19937/shard-tglb5/igt@gem_...@unwedge-stress.html
- shard-snb:  NOTRUN -> [FAIL][6] ([i915#3354])
   [6]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19937/shard-snb2/igt@gem_...@unwedge-stress.html

  * igt@gem_exec_fair@basic-deadline:
- shard-apl:  NOTRUN -> [FAIL][7] ([i915#2846])
   [7]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19937/shard-apl8/igt@gem_exec_f...@basic-deadline.html

  * igt@gem_exec_fair@basic-flow@rcs0:
- shard-tglb: [PASS][8] -> [FAIL][9] ([i915#2842])
   [8]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9971/shard-tglb2/igt@gem_exec_fair@basic-f...@rcs0.html
   [9]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19937/shard-tglb6/igt@gem_exec_fair@basic-f...@rcs0.html

  * igt@gem_exec_fair@basic-pace-share@rcs0:
- shard-glk:  [PASS][10] -> [FAIL][11] ([i915#2842])
   [10]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9971/shard-glk9/igt@gem_exec_fair@basic-pace-sh...@rcs0.html
   [11]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19937/shard-glk6/igt@gem_exec_fair@basic-pace-sh...@rcs0.html

  * igt@gem_exec_reloc@basic-wide-active@vcs1:
- shard-iclb: NOTRUN -> [FAIL][12] ([i915#2389])
   [12]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19937/shard-iclb2/igt@gem_exec_reloc@basic-wide-act...@vcs1.html

  * igt@gem_exec_whisper@basic-queues-forked-all:
- shard-glk:  [PASS][13] -> [DMESG-WARN][14] ([i915#118] / 
[i915#95])
   [13]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9971/shard-glk9/igt@gem_exec_whis...@basic-queues-forked-all.html
   [14]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19937/shard-glk6/igt@gem_exec_whis...@basic-queues-forked-all.html

  * igt@gem_mmap_gtt@big-copy-odd:
- shard-glk:  [PASS][15] -> [FAIL][16] ([i915#307])
   [15]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9971/shard-glk6/igt@gem_mmap_...@big-copy-odd.html
   [16]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19937/shard-glk5/igt@gem_mmap_...@big-copy-odd.html

  * igt@gem_mmap_gtt@cpuset-basic-small-copy-xy:
- shard-iclb: [PASS][17] -> [FAIL][18] ([i915#2428])
   [17]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9971/shard-iclb6/igt@gem_mmap_...@cpuset-basic-small-copy-xy.html
   [18]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19937/shard-iclb4/igt@gem_mmap_...@cpuset-basic-small-copy-xy.html

  * igt@gem_pread@exhaustion:
- shard-snb:  NOTRUN -> [WARN][19] ([i915#2658])
   [19]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19937/shard-snb2/igt@gem_pr...@exhaustion.html

  * igt@gem_pwrite@basic-exhaustion:
- shard-apl:  NOTRUN -> [WARN][20] ([i915#2658])
   [20]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19937/shard-apl1/igt@gem_pwr...@basic-exhaustion.html

  * igt@gem_render_copy@yf-tiled-to-vebox-x-tiled:
- shard-kbl:  NOTRUN -> [SKIP][21] ([fdo#109271]) +73 similar issues
   [21]: 
ht

Re: [Intel-gfx] [PATCH 11/19] drm/i915: Update the helper to set correct mapping

2021-04-14 Thread Matthew Auld
On Wed, 14 Apr 2021 at 16:22, Tvrtko Ursulin
 wrote:
>
>
> On 12/04/2021 10:05, Matthew Auld wrote:
> > From: Venkata Sandeep Dhanalakota 
> >
> > Determine the possible coherent map type based on object location,
> > and if target has llc or if user requires an always coherent
> > mapping.
> >
> > Cc: Matthew Auld 
> > Cc: CQ Tang 
> > Suggested-by: Michal Wajdeczko 
> > Signed-off-by: Venkata Sandeep Dhanalakota 
> > ---
> >   drivers/gpu/drm/i915/gt/intel_engine_cs.c|  3 ++-
> >   drivers/gpu/drm/i915/gt/intel_engine_pm.c|  2 +-
> >   drivers/gpu/drm/i915/gt/intel_lrc.c  |  4 +++-
> >   drivers/gpu/drm/i915/gt/intel_ring.c |  9 ++---
> >   drivers/gpu/drm/i915/gt/selftest_context.c   |  3 ++-
> >   drivers/gpu/drm/i915/gt/selftest_hangcheck.c |  4 ++--
> >   drivers/gpu/drm/i915/gt/selftest_lrc.c   |  4 +++-
> >   drivers/gpu/drm/i915/gt/uc/intel_guc.c   |  4 +++-
> >   drivers/gpu/drm/i915/gt/uc/intel_huc.c   |  4 +++-
> >   drivers/gpu/drm/i915/i915_drv.h  | 11 +--
> >   drivers/gpu/drm/i915/selftests/igt_spinner.c |  4 ++--
> >   11 files changed, 36 insertions(+), 16 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c 
> > b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> > index efe935f80c1a..b79568d370f5 100644
> > --- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> > +++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
> > @@ -664,7 +664,8 @@ static int init_status_page(struct intel_engine_cs 
> > *engine)
> >   if (ret)
> >   goto err;
> >
> > - vaddr = i915_gem_object_pin_map(obj, I915_MAP_WB);
> > + vaddr = i915_gem_object_pin_map(obj,
> > + i915_coherent_map_type(engine->i915, 
> > obj, true));
> >   if (IS_ERR(vaddr)) {
> >   ret = PTR_ERR(vaddr);
> >   goto err_unpin;
> > diff --git a/drivers/gpu/drm/i915/gt/intel_engine_pm.c 
> > b/drivers/gpu/drm/i915/gt/intel_engine_pm.c
> > index 7c9af86fdb1e..47f4397095e5 100644
> > --- a/drivers/gpu/drm/i915/gt/intel_engine_pm.c
> > +++ b/drivers/gpu/drm/i915/gt/intel_engine_pm.c
> > @@ -23,7 +23,7 @@ static void dbg_poison_ce(struct intel_context *ce)
> >
> >   if (ce->state) {
> >   struct drm_i915_gem_object *obj = ce->state->obj;
> > - int type = i915_coherent_map_type(ce->engine->i915);
> > + int type = i915_coherent_map_type(ce->engine->i915, obj, 
> > true);
> >   void *map;
> >
> >   if (!i915_gem_object_trylock(obj))
> > diff --git a/drivers/gpu/drm/i915/gt/intel_lrc.c 
> > b/drivers/gpu/drm/i915/gt/intel_lrc.c
> > index e86897cde984..aafe2a4df496 100644
> > --- a/drivers/gpu/drm/i915/gt/intel_lrc.c
> > +++ b/drivers/gpu/drm/i915/gt/intel_lrc.c
> > @@ -903,7 +903,9 @@ lrc_pre_pin(struct intel_context *ce,
> >   GEM_BUG_ON(!i915_vma_is_pinned(ce->state));
> >
> >   *vaddr = i915_gem_object_pin_map(ce->state->obj,
> > -  
> > i915_coherent_map_type(ce->engine->i915) |
> > +  
> > i915_coherent_map_type(ce->engine->i915,
> > + 
> > ce->state->obj,
> > + false) |
> >I915_MAP_OVERRIDE);
> >
> >   return PTR_ERR_OR_ZERO(*vaddr);
> > diff --git a/drivers/gpu/drm/i915/gt/intel_ring.c 
> > b/drivers/gpu/drm/i915/gt/intel_ring.c
> > index aee0a77c77e0..3cf6c7e68108 100644
> > --- a/drivers/gpu/drm/i915/gt/intel_ring.c
> > +++ b/drivers/gpu/drm/i915/gt/intel_ring.c
> > @@ -53,9 +53,12 @@ int intel_ring_pin(struct intel_ring *ring, struct 
> > i915_gem_ww_ctx *ww)
> >
> >   if (i915_vma_is_map_and_fenceable(vma))
> >   addr = (void __force *)i915_vma_pin_iomap(vma);
> > - else
> > - addr = i915_gem_object_pin_map(vma->obj,
> > -
> > i915_coherent_map_type(vma->vm->i915));
> > + else {
> > + int type = i915_coherent_map_type(vma->vm->i915, vma->obj, 
> > false);
> > +
> > + addr = i915_gem_object_pin_map(vma->obj, type);
> > + }
> > +
> >   if (IS_ERR(addr)) {
> >   ret = PTR_ERR(addr);
> >   goto err_ring;
> > diff --git a/drivers/gpu/drm/i915/gt/selftest_context.c 
> > b/drivers/gpu/drm/i915/gt/selftest_context.c
> > index b9bdd1d23243..26685b927169 100644
> > --- a/drivers/gpu/drm/i915/gt/selftest_context.c
> > +++ b/drivers/gpu/drm/i915/gt/selftest_context.c
> > @@ -88,7 +88,8 @@ static int __live_context_size(struct intel_engine_cs 
> > *engine)
> >   goto err;
> >
> >   vaddr = i915_gem_object_pin_map_unlocked(ce->state->obj,
> > -  
> > i915_coherent_map_type(engine->i915));
> > +  
> > i915_coherent_map_type(engine->i915,
> > + 

[Intel-gfx] [PATCH 10/11] drm/i915/adl_p: Require a minimum of 8 tiles stride for DPT FBs

2021-04-14 Thread Imre Deak
The specification only requires DPT FB strides to be POT aligned, but
there seems to be also a minimum of 8 stride tile requirement. Scanning
out FBs with < 8 stride tiles will result in pipe faults (even though
the stride is POT aligned).

Signed-off-by: Imre Deak 
Acked-by: Ville Syrjälä 
---
 drivers/gpu/drm/i915/display/intel_fb.c | 6 +-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/display/intel_fb.c 
b/drivers/gpu/drm/i915/display/intel_fb.c
index bd862f77762a2..2ee10ece27c57 100644
--- a/drivers/gpu/drm/i915/display/intel_fb.c
+++ b/drivers/gpu/drm/i915/display/intel_fb.c
@@ -609,7 +609,11 @@ plane_view_dst_stride_tiles(const struct intel_framebuffer 
*fb, int color_plane,
unsigned int pitch_tiles)
 {
if (intel_fb_needs_pot_stride_remap(fb))
-   return roundup_pow_of_two(pitch_tiles);
+   /*
+* ADL_P, the only platform needing a POT stride has a minimum
+* of 8 stride tiles.
+*/
+   return roundup_pow_of_two(max(pitch_tiles, 8u));
else
return pitch_tiles;
 }
-- 
2.27.0

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


[Intel-gfx] [PATCH 11/11] drm/i915/adl_p: Enable remapping to pad DPT FB strides to POT

2021-04-14 Thread Imre Deak
Enable padding of DPT FB strides to POT, using the FB remapping logic.

Signed-off-by: Imre Deak 
Reviewed-by: Ville Syrjälä 
---
 drivers/gpu/drm/i915/display/intel_display.c | 16 
 drivers/gpu/drm/i915/display/intel_fb.c  |  7 +--
 drivers/gpu/drm/i915/display/intel_fb.h  |  1 +
 3 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display.c 
b/drivers/gpu/drm/i915/display/intel_display.c
index 2eba13898fbea..bb5cb3f37c408 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -227,16 +227,22 @@ static void dpt_cleanup(struct i915_address_space *vm)
 }
 
 static struct i915_address_space *
-intel_dpt_create(struct drm_gem_object *obj)
+intel_dpt_create(struct intel_framebuffer *fb)
 {
+   struct drm_gem_object *obj = &intel_fb_obj(&fb->base)->base;
struct drm_i915_private *i915 = to_i915(obj->dev);
-   size_t size = DIV_ROUND_UP_ULL(obj->size, 512);
struct drm_i915_gem_object *dpt_obj;
struct i915_address_space *vm;
struct i915_dpt *dpt;
+   size_t size;
int ret;
 
-   size = round_up(size, 4096);
+   if (intel_fb_needs_pot_stride_remap(fb))
+   size = 
intel_remapped_info_size(&fb->remapped_view.gtt.remapped);
+   else
+   size = DIV_ROUND_UP_ULL(obj->size, I915_GTT_PAGE_SIZE);
+
+   size = round_up(size * sizeof(gen8_pte_t), I915_GTT_PAGE_SIZE);
 
dpt_obj = i915_gem_object_create_stolen(i915, size);
if (IS_ERR(dpt_obj))
@@ -11558,8 +11564,10 @@ static int intel_framebuffer_init(struct 
intel_framebuffer *intel_fb,
}
}
 
+   /* TODO: Add POT stride remapping support for CCS formats as 
well. */
if (IS_ALDERLAKE_P(dev_priv) &&
mode_cmd->modifier[i] != DRM_FORMAT_MOD_LINEAR &&
+   !intel_fb_needs_pot_stride_remap(intel_fb) &&
!is_power_of_2(mode_cmd->pitches[i])) {
drm_dbg_kms(&dev_priv->drm,
"plane %d pitch (%d) must be power of two 
for tiled buffers\n",
@@ -11577,7 +11585,7 @@ static int intel_framebuffer_init(struct 
intel_framebuffer *intel_fb,
if (intel_fb_uses_dpt(fb)) {
struct i915_address_space *vm;
 
-   vm = intel_dpt_create(&obj->base);
+   vm = intel_dpt_create(intel_fb);
if (IS_ERR(vm)) {
ret = PTR_ERR(vm);
goto err;
diff --git a/drivers/gpu/drm/i915/display/intel_fb.c 
b/drivers/gpu/drm/i915/display/intel_fb.c
index 2ee10ece27c57..ebfee5e7cbc8b 100644
--- a/drivers/gpu/drm/i915/display/intel_fb.c
+++ b/drivers/gpu/drm/i915/display/intel_fb.c
@@ -486,9 +486,12 @@ static bool intel_plane_can_remap(const struct 
intel_plane_state *plane_state)
return true;
 }
 
-static bool intel_fb_needs_pot_stride_remap(const struct intel_framebuffer *fb)
+bool intel_fb_needs_pot_stride_remap(const struct intel_framebuffer *fb)
 {
-   return false;
+   struct drm_i915_private *i915 = to_i915(fb->base.dev);
+
+   return IS_ALDERLAKE_P(i915) && fb->base.modifier != 
DRM_FORMAT_MOD_LINEAR &&
+  !is_ccs_modifier(fb->base.modifier);
 }
 
 static int intel_fb_pitch(const struct intel_framebuffer *fb, int color_plane, 
unsigned int rotation)
diff --git a/drivers/gpu/drm/i915/display/intel_fb.h 
b/drivers/gpu/drm/i915/display/intel_fb.h
index 47716487de19c..f1c9754001e52 100644
--- a/drivers/gpu/drm/i915/display/intel_fb.h
+++ b/drivers/gpu/drm/i915/display/intel_fb.h
@@ -46,6 +46,7 @@ u32 intel_plane_compute_aligned_offset(int *x, int *y,
   const struct intel_plane_state *state,
   int color_plane);
 
+bool intel_fb_needs_pot_stride_remap(const struct intel_framebuffer *fb);
 bool intel_fb_supports_90_270_rotation(const struct intel_framebuffer *fb);
 
 int intel_fill_fb_info(struct drm_i915_private *i915, struct intel_framebuffer 
*fb);
-- 
2.27.0

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


[Intel-gfx] [PATCH 08/11] drm/i915/adl_p: Add stride restriction when using DPT

2021-04-14 Thread Imre Deak
From: José Roberto de Souza 

Alderlake-P have a new stride restriction when using DPT and it is used
by non linear framebuffers. Stride needs to be a power of two to take
full DPT rows, but stride is a parameter set by userspace.

What we could do is use a fake stride when doing DPT allocation so
HW requirements are met and userspace don't need to be changed to
met this power of two restrictions but this change will take a while
to be implemented so for now adding this restriction in driver to
reject atomic commits that would cause visual corruptions.

BSpec: 53393
Acked-by: Matt Roper 
Cc: Matt Roper 
Cc: Ville Syrjälä 
Cc: Stanislav Lisovskiy 
Signed-off-by: José Roberto de Souza 
---
 drivers/gpu/drm/i915/display/intel_display.c | 9 +
 1 file changed, 9 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/intel_display.c 
b/drivers/gpu/drm/i915/display/intel_display.c
index ce685a7ba6a1d..2eba13898fbea 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -11558,6 +11558,15 @@ static int intel_framebuffer_init(struct 
intel_framebuffer *intel_fb,
}
}
 
+   if (IS_ALDERLAKE_P(dev_priv) &&
+   mode_cmd->modifier[i] != DRM_FORMAT_MOD_LINEAR &&
+   !is_power_of_2(mode_cmd->pitches[i])) {
+   drm_dbg_kms(&dev_priv->drm,
+   "plane %d pitch (%d) must be power of two 
for tiled buffers\n",
+   i, mode_cmd->pitches[i]);
+   goto err;
+   }
+
fb->obj[i] = &obj->base;
}
 
-- 
2.27.0

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


[Intel-gfx] [PATCH 07/11] drm/i915/xelpd: Support 128k plane stride

2021-04-14 Thread Imre Deak
From: Juha-Pekka Heikkilä 

XE_LPD supports plane strides up to 128KB.

Cc: Vandita Kulkarni 
Signed-off-by: Juha-Pekka Heikkilä 
Signed-off-by: Matt Roper 
Reviewed-by: Lucas De Marchi 
---
 .../drm/i915/display/skl_universal_plane.c| 46 +++
 drivers/gpu/drm/i915/i915_reg.h   |  2 +
 2 files changed, 39 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane.c 
b/drivers/gpu/drm/i915/display/skl_universal_plane.c
index 349a53cef0a94..c5b9669d2aacf 100644
--- a/drivers/gpu/drm/i915/display/skl_universal_plane.c
+++ b/drivers/gpu/drm/i915/display/skl_universal_plane.c
@@ -481,17 +481,35 @@ skl_plane_max_stride(struct intel_plane *plane,
 u32 pixel_format, u64 modifier,
 unsigned int rotation)
 {
+   struct drm_i915_private *i915 = to_i915(plane->base.dev);
const struct drm_format_info *info = drm_format_info(pixel_format);
int cpp = info->cpp[0];
+   int max_horizontal_pixels = 8192;
+   int max_stride_bytes;
+
+   if (DISPLAY_VER(i915) >= 13) {
+   /*
+* The stride in bytes must not exceed of the size
+* of 128K bytes. For pixel formats of 64bpp will allow
+* for a 16K pixel surface.
+*/
+   max_stride_bytes = 131072;
+   if (cpp == 8)
+   max_horizontal_pixels = 16384;
+   else
+   max_horizontal_pixels = 65536;
+   } else {
+   /*
+* "The stride in bytes must not exceed the
+* of the size of 8K pixels and 32K bytes."
+*/
+   max_stride_bytes = 32768;
+   }
 
-   /*
-* "The stride in bytes must not exceed the
-* of the size of 8K pixels and 32K bytes."
-*/
if (drm_rotation_90_or_270(rotation))
-   return min(8192, 32768 / cpp);
+   return min(max_horizontal_pixels, max_stride_bytes / cpp);
else
-   return min(8192 * cpp, 32768);
+   return min(max_horizontal_pixels * cpp, max_stride_bytes);
 }
 
 
@@ -1451,7 +1469,10 @@ static int skl_check_main_surface(struct 
intel_plane_state *plane_state)
}
}
 
-   drm_WARN_ON(&dev_priv->drm, x > 8191 || y > 8191);
+   if (DISPLAY_VER(dev_priv) >= 13)
+   drm_WARN_ON(&dev_priv->drm, x > 65535 || y > 65535);
+   else
+   drm_WARN_ON(&dev_priv->drm, x > 8191 || y > 8191);
 
plane_state->view.color_plane[0].offset = offset;
plane_state->view.color_plane[0].x = x;
@@ -1525,7 +1546,10 @@ static int skl_check_nv12_aux_surface(struct 
intel_plane_state *plane_state)
}
}
 
-   drm_WARN_ON(&i915->drm, x > 8191 || y > 8191);
+   if (DISPLAY_VER(i915) >= 13)
+   drm_WARN_ON(&i915->drm, x > 65535 || y > 65535);
+   else
+   drm_WARN_ON(&i915->drm, x > 8191 || y > 8191);
 
plane_state->view.color_plane[uv_plane].offset = offset;
plane_state->view.color_plane[uv_plane].x = x;
@@ -2238,7 +2262,11 @@ skl_get_initial_plane_config(struct intel_crtc *crtc,
 
val = intel_de_read(dev_priv, PLANE_STRIDE(pipe, plane_id));
stride_mult = skl_plane_stride_mult(fb, 0, DRM_MODE_ROTATE_0);
-   fb->pitches[0] = (val & 0x3ff) * stride_mult;
+
+   if (DISPLAY_VER(dev_priv) >= 13)
+   fb->pitches[0] = (val & PLANE_STRIDE_MASK_XELPD) * stride_mult;
+   else
+   fb->pitches[0] = (val & PLANE_STRIDE_MASK) * stride_mult;
 
aligned_height = intel_fb_align_height(fb, 0, fb->height);
 
diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
index f80d656331f42..cdcb60b3fa063 100644
--- a/drivers/gpu/drm/i915/i915_reg.h
+++ b/drivers/gpu/drm/i915/i915_reg.h
@@ -7210,6 +7210,8 @@ enum {
_PIPE(pipe, _PLANE_STRIDE_3_A, _PLANE_STRIDE_3_B)
 #define PLANE_STRIDE(pipe, plane)  \
_MMIO_PLANE(plane, _PLANE_STRIDE_1(pipe), _PLANE_STRIDE_2(pipe))
+#define PLANE_STRIDE_MASK  REG_GENMASK(10, 0)
+#define PLANE_STRIDE_MASK_XELPDREG_GENMASK(11, 0)
 
 #define _PLANE_POS_1_B 0x7118c
 #define _PLANE_POS_2_B 0x7128c
-- 
2.27.0

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


[Intel-gfx] [PATCH 09/11] drm/i915/adl_p: Disable support for 90/270 FB rotation

2021-04-14 Thread Imre Deak
The latest specification removed the support for 90/270 FB rotation on
ADL_P, even though legacy Y-tiled surfaces are supported. Align the code
accordingly.

Signed-off-by: Imre Deak 
Reviewed-by: Ville Syrjälä 
---
 .../drm/i915/display/intel_display_types.h|  6 +++--
 drivers/gpu/drm/i915/display/intel_fb.c   | 24 +++
 drivers/gpu/drm/i915/display/intel_fb.h   |  1 +
 .../drm/i915/display/skl_universal_plane.c|  3 +--
 4 files changed, 25 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h 
b/drivers/gpu/drm/i915/display/intel_display_types.h
index cdc8fcb8c2aa7..a4c898dd71abb 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -127,8 +127,10 @@ struct intel_framebuffer {
 
/* Params to remap the FB pages and program the plane registers in each 
view. */
struct intel_fb_view normal_view;
-   struct intel_fb_view rotated_view;
-   struct intel_fb_view remapped_view;
+   union {
+   struct intel_fb_view rotated_view;
+   struct intel_fb_view remapped_view;
+   };
 
struct i915_address_space *dpt_vm;
 };
diff --git a/drivers/gpu/drm/i915/display/intel_fb.c 
b/drivers/gpu/drm/i915/display/intel_fb.c
index 1b690b21310de..bd862f77762a2 100644
--- a/drivers/gpu/drm/i915/display/intel_fb.c
+++ b/drivers/gpu/drm/i915/display/intel_fb.c
@@ -743,6 +743,15 @@ static void intel_fb_view_init(struct intel_fb_view *view, 
enum i915_ggtt_view_t
view->gtt.type = view_type;
 }
 
+bool intel_fb_supports_90_270_rotation(const struct intel_framebuffer *fb)
+{
+   if (DISPLAY_VER(to_i915(fb->base.dev)) >= 13)
+   return false;
+
+   return fb->base.modifier == I915_FORMAT_MOD_Y_TILED ||
+  fb->base.modifier == I915_FORMAT_MOD_Yf_TILED;
+}
+
 int intel_fill_fb_info(struct drm_i915_private *i915, struct intel_framebuffer 
*fb)
 {
struct drm_i915_gem_object *obj = intel_fb_obj(&fb->base);
@@ -753,8 +762,15 @@ int intel_fill_fb_info(struct drm_i915_private *i915, 
struct intel_framebuffer *
unsigned int tile_size = intel_tile_size(i915);
 
intel_fb_view_init(&fb->normal_view, I915_GGTT_VIEW_NORMAL);
-   intel_fb_view_init(&fb->rotated_view, I915_GGTT_VIEW_ROTATED);
-   intel_fb_view_init(&fb->remapped_view, I915_GGTT_VIEW_REMAPPED);
+
+   drm_WARN_ON(&i915->drm,
+   intel_fb_supports_90_270_rotation(fb) &&
+   intel_fb_needs_pot_stride_remap(fb));
+
+   if (intel_fb_supports_90_270_rotation(fb))
+   intel_fb_view_init(&fb->rotated_view, I915_GGTT_VIEW_ROTATED);
+   if (intel_fb_needs_pot_stride_remap(fb))
+   intel_fb_view_init(&fb->remapped_view, I915_GGTT_VIEW_REMAPPED);
 
for (i = 0; i < num_planes; i++) {
struct fb_plane_view_dims view_dims;
@@ -795,9 +811,7 @@ int intel_fill_fb_info(struct drm_i915_private *i915, 
struct intel_framebuffer *
 
offset = calc_plane_aligned_offset(fb, i, &x, &y);
 
-   /* Y or Yf modifiers required for 90/270 rotation */
-   if (fb->base.modifier == I915_FORMAT_MOD_Y_TILED ||
-   fb->base.modifier == I915_FORMAT_MOD_Yf_TILED)
+   if (intel_fb_supports_90_270_rotation(fb))
gtt_offset_rotated += calc_plane_remap_info(fb, i, 
&view_dims,
offset, 
gtt_offset_rotated, x, y,

&fb->rotated_view);
diff --git a/drivers/gpu/drm/i915/display/intel_fb.h 
b/drivers/gpu/drm/i915/display/intel_fb.h
index e0953d8855b6b..47716487de19c 100644
--- a/drivers/gpu/drm/i915/display/intel_fb.h
+++ b/drivers/gpu/drm/i915/display/intel_fb.h
@@ -46,6 +46,7 @@ u32 intel_plane_compute_aligned_offset(int *x, int *y,
   const struct intel_plane_state *state,
   int color_plane);
 
+bool intel_fb_supports_90_270_rotation(const struct intel_framebuffer *fb);
 
 int intel_fill_fb_info(struct drm_i915_private *i915, struct intel_framebuffer 
*fb);
 void intel_fb_fill_view(const struct intel_framebuffer *fb, unsigned int 
rotation,
diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane.c 
b/drivers/gpu/drm/i915/display/skl_universal_plane.c
index c5b9669d2aacf..c06a3d4a9429d 100644
--- a/drivers/gpu/drm/i915/display/skl_universal_plane.c
+++ b/drivers/gpu/drm/i915/display/skl_universal_plane.c
@@ -1160,8 +1160,7 @@ static int skl_plane_check_fb(const struct 
intel_crtc_state *crtc_state,
}
 
if (drm_rotation_90_or_270(rotation)) {
-   if (fb->modifier != I915_FORMAT_MOD_Y_TILED &&
-   fb->modifier != I915_FORMAT_MOD_Yf_TILED) {
+   if 
(!intel_fb_supports_90_270_rotation(to_intel_framebuffer(fb))) {

[Intel-gfx] [PATCH 06/11] drm/i915/xelpd: Fallback to plane stride limitations when using DPT

2021-04-14 Thread Imre Deak
From: José Roberto de Souza 

GTT remapping allow us to have planes with strides larger than HW
supports but DPT + GTT remapping is still not properly handled so
falling back to plane HW limitations for now.

This patch can be dropped when DPT + GTT remapping is correctly
handled but until then we need this limitation for all display13
platforms to avoid pipe faults.

Reviewed-by: Matt Roper 
Cc: Ville Syrjälä 
Cc: Clint Taylor 
Cc: Matt Roper 
Suggested-by: Ville Syrjälä 
Signed-off-by: José Roberto de Souza 
---
 drivers/gpu/drm/i915/display/intel_display.c  | 15 +++
 .../gpu/drm/i915/display/intel_display_types.h|  8 ++--
 2 files changed, 13 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display.c 
b/drivers/gpu/drm/i915/display/intel_display.c
index 00621ccea2c40..ce685a7ba6a1d 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -1588,14 +1588,13 @@ u32 intel_fb_max_stride(struct drm_i915_private 
*dev_priv,
 *
 * The new CCS hash mode makes remapping impossible
 */
-   if (!is_ccs_modifier(modifier)) {
-   if (DISPLAY_VER(dev_priv) >= 7)
-   return 256*1024;
-   else if (DISPLAY_VER(dev_priv) >= 4)
-   return 128*1024;
-   }
-
-   return intel_plane_fb_max_stride(dev_priv, pixel_format, modifier);
+   if (DISPLAY_VER(dev_priv) < 4 || is_ccs_modifier(modifier) ||
+   intel_modifier_uses_dpt(dev_priv, modifier))
+   return intel_plane_fb_max_stride(dev_priv, pixel_format, 
modifier);
+   else if (DISPLAY_VER(dev_priv) >= 7)
+   return 256 * 1024;
+   else
+   return 128 * 1024;
 }
 
 static u32
diff --git a/drivers/gpu/drm/i915/display/intel_display_types.h 
b/drivers/gpu/drm/i915/display/intel_display_types.h
index 3c73737f88da4..cdc8fcb8c2aa7 100644
--- a/drivers/gpu/drm/i915/display/intel_display_types.h
+++ b/drivers/gpu/drm/i915/display/intel_display_types.h
@@ -1976,10 +1976,14 @@ intel_wait_for_vblank_if_active(struct drm_i915_private 
*dev_priv, enum pipe pip
intel_wait_for_vblank(dev_priv, pipe);
 }
 
+static inline bool intel_modifier_uses_dpt(struct drm_i915_private *i915, u64 
modifier)
+{
+   return DISPLAY_VER(i915) >= 13 && modifier != DRM_FORMAT_MOD_LINEAR;
+}
+
 static inline bool intel_fb_uses_dpt(const struct drm_framebuffer *fb)
 {
-   return fb && DISPLAY_VER(to_i915(fb->dev)) >= 13 &&
-   fb->modifier != DRM_FORMAT_MOD_LINEAR;
+   return fb && intel_modifier_uses_dpt(to_i915(fb->dev), fb->modifier);
 }
 
 static inline u32 intel_plane_ggtt_offset(const struct intel_plane_state 
*plane_state)
-- 
2.27.0

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


[Intel-gfx] [PATCH 03/11] drm/i915/adl_p: Add PCI Devices IDs

2021-04-14 Thread Imre Deak
From: Clinton Taylor 

Add 18 known PCI device IDs

Bspec: 55376
Cc: Caz Yokoyama 
Cc: Matt Atwood 
Cc: Matt Roper 
Signed-off-by: Clinton Taylor 
Signed-off-by: Matt Roper 
Reviewed-by: Anusha Srivatsa 
---
 include/drm/i915_pciids.h | 21 +
 1 file changed, 21 insertions(+)

diff --git a/include/drm/i915_pciids.h b/include/drm/i915_pciids.h
index ebd0dd1c35b33..2448be8c72f89 100644
--- a/include/drm/i915_pciids.h
+++ b/include/drm/i915_pciids.h
@@ -645,4 +645,25 @@
INTEL_VGA_DEVICE(0x4692, info), \
INTEL_VGA_DEVICE(0x4693, info)
 
+/* ADL-P */
+#define INTEL_ADLP_IDS(info) \
+   INTEL_VGA_DEVICE(0x46A0, info), \
+   INTEL_VGA_DEVICE(0x46A1, info), \
+   INTEL_VGA_DEVICE(0x46A2, info), \
+   INTEL_VGA_DEVICE(0x46A3, info), \
+   INTEL_VGA_DEVICE(0x46A6, info), \
+   INTEL_VGA_DEVICE(0x46A8, info), \
+   INTEL_VGA_DEVICE(0x46AA, info), \
+   INTEL_VGA_DEVICE(0x462A, info), \
+   INTEL_VGA_DEVICE(0x4626, info), \
+   INTEL_VGA_DEVICE(0x4628, info), \
+   INTEL_VGA_DEVICE(0x46B0, info), \
+   INTEL_VGA_DEVICE(0x46B1, info), \
+   INTEL_VGA_DEVICE(0x46B2, info), \
+   INTEL_VGA_DEVICE(0x46B3, info), \
+   INTEL_VGA_DEVICE(0x46C0, info), \
+   INTEL_VGA_DEVICE(0x46C1, info), \
+   INTEL_VGA_DEVICE(0x46C2, info), \
+   INTEL_VGA_DEVICE(0x46C3, info)
+
 #endif /* _I915_PCIIDS_H */
-- 
2.27.0

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


[Intel-gfx] [PATCH 00/11] drm/i915/adl_p: Add support for Display Page Tables

2021-04-14 Thread Imre Deak
Alder Lake-P adds a new Display Page Table hardware structure, mapping
tiled framebuffer pages to the display engine, reducing the address
space required in GGTT for these framebuffers.

This patchset adds support for this taking a minimum set of dependency
patches from the ADL_P enabling patchset at
https://patchwork.freedesktop.org/series/87897/

Clinton Taylor (2):
  drm/i915/adl_p: Add PCI Devices IDs
  drm/i915/adl_p: ADL_P device info enabling

Imre Deak (4):
  drm/i915: Pass intel_framebuffer instad of drm_framebuffer to
intel_fill_fb_info()
  drm/i915/adl_p: Disable support for 90/270 FB rotation
  drm/i915/adl_p: Require a minimum of 8 tiles stride for DPT FBs
  drm/i915/adl_p: Enable remapping to pad DPT FB strides to POT

José Roberto de Souza (2):
  drm/i915/xelpd: Fallback to plane stride limitations when using DPT
  drm/i915/adl_p: Add stride restriction when using DPT

Juha-Pekka Heikkilä (1):
  drm/i915/xelpd: Support 128k plane stride

Matt Roper (1):
  drm/i915/xelpd: add XE_LPD display characteristics

Ville Syrjälä (1):
  drm/i915/xelpd: First stab at DPT support

 arch/x86/kernel/early-quirks.c|   1 +
 .../gpu/drm/i915/display/intel_atomic_plane.c |   7 +-
 drivers/gpu/drm/i915/display/intel_display.c  | 381 --
 drivers/gpu/drm/i915/display/intel_display.h  |   1 +
 .../drm/i915/display/intel_display_types.h|  25 +-
 drivers/gpu/drm/i915/display/intel_fb.c   |  92 +++--
 drivers/gpu/drm/i915/display/intel_fb.h   |   5 +-
 drivers/gpu/drm/i915/display/intel_fbc.c  |   6 +-
 .../drm/i915/display/skl_universal_plane.c|  68 +++-
 drivers/gpu/drm/i915/gt/gen8_ppgtt.h  |   7 +
 drivers/gpu/drm/i915/gt/intel_ggtt.c  |   7 +-
 drivers/gpu/drm/i915/gt/intel_gtt.h   |   5 +
 drivers/gpu/drm/i915/i915_drv.h   |   1 +
 drivers/gpu/drm/i915/i915_pci.c   |  22 +
 drivers/gpu/drm/i915/i915_reg.h   |   2 +
 drivers/gpu/drm/i915/intel_device_info.c  |   1 +
 drivers/gpu/drm/i915/intel_device_info.h  |   1 +
 include/drm/i915_pciids.h |  21 +
 18 files changed, 567 insertions(+), 86 deletions(-)

-- 
2.27.0

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


[Intel-gfx] [PATCH 01/11] drm/i915: Pass intel_framebuffer instad of drm_framebuffer to intel_fill_fb_info()

2021-04-14 Thread Imre Deak
Make one step to pass intel_framebuffer to all intel_fb functions.

Signed-off-by: Imre Deak 
Reviewed-by: Ville Syrjälä 
---
 drivers/gpu/drm/i915/display/intel_display.c |  2 +-
 drivers/gpu/drm/i915/display/intel_fb.c  | 63 ++--
 drivers/gpu/drm/i915/display/intel_fb.h  |  3 +-
 3 files changed, 34 insertions(+), 34 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_display.c 
b/drivers/gpu/drm/i915/display/intel_display.c
index 9c13d0ac022bc..dd92c97eb8ca0 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -11255,7 +11255,7 @@ static int intel_framebuffer_init(struct 
intel_framebuffer *intel_fb,
fb->obj[i] = &obj->base;
}
 
-   ret = intel_fill_fb_info(dev_priv, fb);
+   ret = intel_fill_fb_info(dev_priv, intel_fb);
if (ret)
goto err;
 
diff --git a/drivers/gpu/drm/i915/display/intel_fb.c 
b/drivers/gpu/drm/i915/display/intel_fb.c
index 0ec9ad7220a14..1b690b21310de 100644
--- a/drivers/gpu/drm/i915/display/intel_fb.c
+++ b/drivers/gpu/drm/i915/display/intel_fb.c
@@ -171,17 +171,17 @@ void intel_fb_plane_get_subsampling(int *hsub, int *vsub,
*vsub = 32;
 }
 
-static void intel_fb_plane_dims(int *w, int *h, struct drm_framebuffer *fb, 
int color_plane)
+static void intel_fb_plane_dims(const struct intel_framebuffer *fb, int 
color_plane, int *w, int *h)
 {
-   int main_plane = is_ccs_plane(fb, color_plane) ?
-skl_ccs_to_main_plane(fb, color_plane) : 0;
+   int main_plane = is_ccs_plane(&fb->base, color_plane) ?
+skl_ccs_to_main_plane(&fb->base, color_plane) : 0;
int main_hsub, main_vsub;
int hsub, vsub;
 
-   intel_fb_plane_get_subsampling(&main_hsub, &main_vsub, fb, main_plane);
-   intel_fb_plane_get_subsampling(&hsub, &vsub, fb, color_plane);
-   *w = fb->width / main_hsub / hsub;
-   *h = fb->height / main_vsub / vsub;
+   intel_fb_plane_get_subsampling(&main_hsub, &main_vsub, &fb->base, 
main_plane);
+   intel_fb_plane_get_subsampling(&hsub, &vsub, &fb->base, color_plane);
+   *w = fb->base.width / main_hsub / hsub;
+   *h = fb->base.height / main_vsub / vsub;
 }
 
 static u32 intel_adjust_tile_offset(int *x, int *y,
@@ -743,19 +743,18 @@ static void intel_fb_view_init(struct intel_fb_view 
*view, enum i915_ggtt_view_t
view->gtt.type = view_type;
 }
 
-int intel_fill_fb_info(struct drm_i915_private *i915, struct drm_framebuffer 
*fb)
+int intel_fill_fb_info(struct drm_i915_private *i915, struct intel_framebuffer 
*fb)
 {
-   struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb);
-   struct drm_i915_gem_object *obj = intel_fb_obj(fb);
+   struct drm_i915_gem_object *obj = intel_fb_obj(&fb->base);
u32 gtt_offset_rotated = 0;
u32 gtt_offset_remapped = 0;
unsigned int max_size = 0;
-   int i, num_planes = fb->format->num_planes;
+   int i, num_planes = fb->base.format->num_planes;
unsigned int tile_size = intel_tile_size(i915);
 
-   intel_fb_view_init(&intel_fb->normal_view, I915_GGTT_VIEW_NORMAL);
-   intel_fb_view_init(&intel_fb->rotated_view, I915_GGTT_VIEW_ROTATED);
-   intel_fb_view_init(&intel_fb->remapped_view, I915_GGTT_VIEW_REMAPPED);
+   intel_fb_view_init(&fb->normal_view, I915_GGTT_VIEW_NORMAL);
+   intel_fb_view_init(&fb->rotated_view, I915_GGTT_VIEW_ROTATED);
+   intel_fb_view_init(&fb->remapped_view, I915_GGTT_VIEW_REMAPPED);
 
for (i = 0; i < num_planes; i++) {
struct fb_plane_view_dims view_dims;
@@ -770,45 +769,45 @@ int intel_fill_fb_info(struct drm_i915_private *i915, 
struct drm_framebuffer *fb
 * is consumed by the driver and not passed to DE. Skip the
 * arithmetic related to alignment and offset calculation.
 */
-   if (is_gen12_ccs_cc_plane(fb, i)) {
-   if (IS_ALIGNED(fb->offsets[i], PAGE_SIZE))
+   if (is_gen12_ccs_cc_plane(&fb->base, i)) {
+   if (IS_ALIGNED(fb->base.offsets[i], PAGE_SIZE))
continue;
else
return -EINVAL;
}
 
-   cpp = fb->format->cpp[i];
-   intel_fb_plane_dims(&width, &height, fb, i);
+   cpp = fb->base.format->cpp[i];
+   intel_fb_plane_dims(fb, i, &width, &height);
 
-   ret = convert_plane_offset_to_xy(intel_fb, i, width, &x, &y);
+   ret = convert_plane_offset_to_xy(fb, i, width, &x, &y);
if (ret)
return ret;
 
-   init_plane_view_dims(intel_fb, i, width, height, &view_dims);
+   init_plane_view_dims(fb, i, width, height, &view_dims);
 
/*
 * First pixel of the framebuffer from
 * the st

[Intel-gfx] [PATCH 05/11] drm/i915/xelpd: First stab at DPT support

2021-04-14 Thread Imre Deak
From: Ville Syrjälä 

Add support for DPT (display page table). DPT is a
slightly peculiar two level page table scheme used for
tiled scanout buffers (linear uses direct ggtt mapping
still). The plane surface address will point at a page
in the DPT which holds the PTEs for 512 actual pages.
Thus we require 1/512 of the ggttt address space
compared to a direct ggtt mapping.

We create a new DPT address space for each framebuffer and
track two vmas (one for the DPT, another for the ggtt).

TODO:
- Is the i915_address_space approaach sane?
- Maybe don't map the whole DPT to write the PTEs?
- Deal with remapping/rotation? Need to create a
  separate DPT for each remapped/rotated plane I
  guess. Or else we'd need to make the per-fb DPT
  large enough to support potentially several
  remapped/rotated vmas. How large should that be?

Reviewed-by: Uma Shankar 
Signed-off-by: Ville Syrjälä 
Signed-off-by: Bommu Krishnaiah 
Cc: Wilson Chris P 
Cc: Tang CQ 
Cc: Auld Matthew 
Reviewed-by: Wilson Chris P 
---
 .../gpu/drm/i915/display/intel_atomic_plane.c |   7 +-
 drivers/gpu/drm/i915/display/intel_display.c  | 347 +-
 drivers/gpu/drm/i915/display/intel_display.h  |   1 +
 .../drm/i915/display/intel_display_types.h|  15 +-
 drivers/gpu/drm/i915/display/intel_fbc.c  |   6 +-
 .../drm/i915/display/skl_universal_plane.c|  19 +-
 drivers/gpu/drm/i915/gt/gen8_ppgtt.h  |   7 +
 drivers/gpu/drm/i915/gt/intel_ggtt.c  |   7 +-
 drivers/gpu/drm/i915/gt/intel_gtt.h   |   5 +
 9 files changed, 387 insertions(+), 27 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_atomic_plane.c 
b/drivers/gpu/drm/i915/display/intel_atomic_plane.c
index c3f2962aa1ebc..fc68c6ffd9d73 100644
--- a/drivers/gpu/drm/i915/display/intel_atomic_plane.c
+++ b/drivers/gpu/drm/i915/display/intel_atomic_plane.c
@@ -102,7 +102,8 @@ intel_plane_duplicate_state(struct drm_plane *plane)
 
__drm_atomic_helper_plane_duplicate_state(plane, &intel_state->uapi);
 
-   intel_state->vma = NULL;
+   intel_state->ggtt_vma = NULL;
+   intel_state->dpt_vma = NULL;
intel_state->flags = 0;
 
/* add reference to fb */
@@ -125,7 +126,9 @@ intel_plane_destroy_state(struct drm_plane *plane,
  struct drm_plane_state *state)
 {
struct intel_plane_state *plane_state = to_intel_plane_state(state);
-   drm_WARN_ON(plane->dev, plane_state->vma);
+
+   drm_WARN_ON(plane->dev, plane_state->ggtt_vma);
+   drm_WARN_ON(plane->dev, plane_state->dpt_vma);
 
__drm_atomic_helper_plane_destroy_state(&plane_state->uapi);
if (plane_state->hw.fb)
diff --git a/drivers/gpu/drm/i915/display/intel_display.c 
b/drivers/gpu/drm/i915/display/intel_display.c
index dd92c97eb8ca0..00621ccea2c40 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -66,6 +66,7 @@
 #include "gem/i915_gem_object.h"
 
 #include "gt/intel_rps.h"
+#include "gt/gen8_ppgtt.h"
 
 #include "g4x_dp.h"
 #include "g4x_hdmi.h"
@@ -122,6 +123,171 @@ static void ilk_pfit_enable(const struct intel_crtc_state 
*crtc_state);
 static void intel_modeset_setup_hw_state(struct drm_device *dev,
 struct drm_modeset_acquire_ctx *ctx);
 
+struct i915_dpt {
+   struct i915_address_space vm;
+
+   struct drm_i915_gem_object *obj;
+   struct i915_vma *vma;
+   void __iomem *iomem;
+};
+
+#define i915_is_dpt(vm) ((vm)->is_dpt)
+
+static inline struct i915_dpt *
+i915_vm_to_dpt(struct i915_address_space *vm)
+{
+   BUILD_BUG_ON(offsetof(struct i915_dpt, vm));
+   GEM_BUG_ON(!i915_is_dpt(vm));
+   return container_of(vm, struct i915_dpt, vm);
+}
+
+#define dpt_total_entries(dpt) ((dpt)->vm.total >> PAGE_SHIFT)
+
+static void gen8_set_pte(void __iomem *addr, gen8_pte_t pte)
+{
+   writeq(pte, addr);
+}
+
+static void dpt_insert_page(struct i915_address_space *vm,
+   dma_addr_t addr,
+   u64 offset,
+   enum i915_cache_level level,
+   u32 flags)
+{
+   struct i915_dpt *dpt = i915_vm_to_dpt(vm);
+   gen8_pte_t __iomem *base = dpt->iomem;
+
+   gen8_set_pte(base + offset / I915_GTT_PAGE_SIZE,
+vm->pte_encode(addr, level, flags));
+}
+
+static void dpt_insert_entries(struct i915_address_space *vm,
+  struct i915_vma *vma,
+  enum i915_cache_level level,
+  u32 flags)
+{
+   struct i915_dpt *dpt = i915_vm_to_dpt(vm);
+   gen8_pte_t __iomem *base = dpt->iomem;
+   const gen8_pte_t pte_encode = vm->pte_encode(0, level, flags);
+   struct sgt_iter sgt_iter;
+   dma_addr_t addr;
+   int i;
+
+   /*
+* Note that we ignore PTE_READ_ONLY here. The caller must be careful
+* not to allow the user to override access to a read only pag

[Intel-gfx] [PATCH 02/11] drm/i915/xelpd: add XE_LPD display characteristics

2021-04-14 Thread Imre Deak
From: Matt Roper 

Let's start preparing for upcoming platforms that will use an XE_LPD
design.

v2:
 - Use the now-preferred "XE_LPD" term to refer to this design
 - Utilize DISPLAY_VER() rather than a feature flag
 - Drop unused mbus_size field (Lucas)

Signed-off-by: Matt Roper 
---
 drivers/gpu/drm/i915/i915_pci.c | 10 ++
 1 file changed, 10 insertions(+)

diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
index 44e7b94db63dc..40b58a6dc3193 100644
--- a/drivers/gpu/drm/i915/i915_pci.c
+++ b/drivers/gpu/drm/i915/i915_pci.c
@@ -939,6 +939,16 @@ static const struct intel_device_info adl_s_info = {
.dma_mask_size = 46,
 };
 
+#define XE_LPD_FEATURES \
+   .display.ver = 13,  \
+   .display.has_psr_hw_tracking = 0,   \
+   .abox_mask = GENMASK(1, 0), \
+   .pipe_mask = BIT(PIPE_A) | BIT(PIPE_B) | BIT(PIPE_C) | BIT(PIPE_D), \
+   .cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) |  \
+   BIT(TRANSCODER_C) | BIT(TRANSCODER_D),  \
+   .ddb_size = 4096,   \
+   .num_supported_dbuf_slices = 4
+
 #undef GEN
 #undef PLATFORM
 
-- 
2.27.0

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


[Intel-gfx] [PATCH 04/11] drm/i915/adl_p: ADL_P device info enabling

2021-04-14 Thread Imre Deak
From: Clinton Taylor 

Add ADL-P to the device_info table and support MACROS.

Bspec: 49185, 55372, 55373
Cc: Matt Atwood 
Cc: Matt Roper 
Signed-off-by: Clinton Taylor 
Signed-off-by: Matt Roper 
---
 arch/x86/kernel/early-quirks.c   |  1 +
 drivers/gpu/drm/i915/i915_drv.h  |  1 +
 drivers/gpu/drm/i915/i915_pci.c  | 12 
 drivers/gpu/drm/i915/intel_device_info.c |  1 +
 drivers/gpu/drm/i915/intel_device_info.h |  1 +
 5 files changed, 16 insertions(+)

diff --git a/arch/x86/kernel/early-quirks.c b/arch/x86/kernel/early-quirks.c
index 6edd1e2ee8afa..b553ffe9b9851 100644
--- a/arch/x86/kernel/early-quirks.c
+++ b/arch/x86/kernel/early-quirks.c
@@ -552,6 +552,7 @@ static const struct pci_device_id intel_early_ids[] 
__initconst = {
INTEL_TGL_12_IDS(&gen11_early_ops),
INTEL_RKL_IDS(&gen11_early_ops),
INTEL_ADLS_IDS(&gen11_early_ops),
+   INTEL_ADLP_IDS(&gen11_early_ops),
 };
 
 struct resource intel_graphics_stolen_res __ro_after_init = DEFINE_RES_MEM(0, 
0);
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index e20294e9227a4..e5513e19beb5c 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1392,6 +1392,7 @@ IS_SUBPLATFORM(const struct drm_i915_private *i915,
 #define IS_ROCKETLAKE(dev_priv)IS_PLATFORM(dev_priv, INTEL_ROCKETLAKE)
 #define IS_DG1(dev_priv)IS_PLATFORM(dev_priv, INTEL_DG1)
 #define IS_ALDERLAKE_S(dev_priv) IS_PLATFORM(dev_priv, INTEL_ALDERLAKE_S)
+#define IS_ALDERLAKE_P(dev_priv) IS_PLATFORM(dev_priv, INTEL_ALDERLAKE_P)
 #define IS_HSW_EARLY_SDV(dev_priv) (IS_HASWELL(dev_priv) && \
(INTEL_DEVID(dev_priv) & 0xFF00) == 0x0C00)
 #define IS_BDW_ULT(dev_priv) \
diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
index 40b58a6dc3193..2384198e41f85 100644
--- a/drivers/gpu/drm/i915/i915_pci.c
+++ b/drivers/gpu/drm/i915/i915_pci.c
@@ -949,6 +949,17 @@ static const struct intel_device_info adl_s_info = {
.ddb_size = 4096,   \
.num_supported_dbuf_slices = 4
 
+static const struct intel_device_info adl_p_info = {
+   GEN12_FEATURES,
+   XE_LPD_FEATURES,
+   PLATFORM(INTEL_ALDERLAKE_P),
+   .require_force_probe = 1,
+   .platform_engine_mask =
+   BIT(RCS0) | BIT(BCS0) | BIT(VECS0) | BIT(VCS0) | BIT(VCS2),
+   .ppgtt_size = 48,
+   .dma_mask_size = 39,
+};
+
 #undef GEN
 #undef PLATFORM
 
@@ -1026,6 +1037,7 @@ static const struct pci_device_id pciidlist[] = {
INTEL_TGL_12_IDS(&tgl_info),
INTEL_RKL_IDS(&rkl_info),
INTEL_ADLS_IDS(&adl_s_info),
+   INTEL_ADLP_IDS(&adl_p_info),
{0, 0, 0}
 };
 MODULE_DEVICE_TABLE(pci, pciidlist);
diff --git a/drivers/gpu/drm/i915/intel_device_info.c 
b/drivers/gpu/drm/i915/intel_device_info.c
index 6a351a7094174..3b975ce1ff591 100644
--- a/drivers/gpu/drm/i915/intel_device_info.c
+++ b/drivers/gpu/drm/i915/intel_device_info.c
@@ -67,6 +67,7 @@ static const char * const platform_names[] = {
PLATFORM_NAME(ROCKETLAKE),
PLATFORM_NAME(DG1),
PLATFORM_NAME(ALDERLAKE_S),
+   PLATFORM_NAME(ALDERLAKE_P),
 };
 #undef PLATFORM_NAME
 
diff --git a/drivers/gpu/drm/i915/intel_device_info.h 
b/drivers/gpu/drm/i915/intel_device_info.h
index 8ab4fa6c7fdd7..edf68244be2bc 100644
--- a/drivers/gpu/drm/i915/intel_device_info.h
+++ b/drivers/gpu/drm/i915/intel_device_info.h
@@ -87,6 +87,7 @@ enum intel_platform {
INTEL_ROCKETLAKE,
INTEL_DG1,
INTEL_ALDERLAKE_S,
+   INTEL_ALDERLAKE_P,
INTEL_MAX_PLATFORMS
 };
 
-- 
2.27.0

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


Re: [Intel-gfx] [PATCH 19/19] drm/i915/gtt/dgfx: place the PD in LMEM

2021-04-14 Thread Tvrtko Ursulin



On 12/04/2021 10:05, Matthew Auld wrote:

It's a requirement that for dgfx we place all the paging structures in
device local-memory.

Signed-off-by: Matthew Auld 
---
  drivers/gpu/drm/i915/gt/gen8_ppgtt.c |  5 -
  drivers/gpu/drm/i915/gt/intel_gtt.c  | 27 +--
  drivers/gpu/drm/i915/gt/intel_gtt.h  |  1 +
  3 files changed, 30 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/gen8_ppgtt.c 
b/drivers/gpu/drm/i915/gt/gen8_ppgtt.c
index f83496836f0f..11fb5df45a0f 100644
--- a/drivers/gpu/drm/i915/gt/gen8_ppgtt.c
+++ b/drivers/gpu/drm/i915/gt/gen8_ppgtt.c
@@ -712,7 +712,10 @@ struct i915_ppgtt *gen8_ppgtt_create(struct intel_gt *gt)
 */
ppgtt->vm.has_read_only = !IS_GEN_RANGE(gt->i915, 11, 12);
  
-	ppgtt->vm.alloc_pt_dma = alloc_pt_dma;

+   if (HAS_LMEM(gt->i915))
+   ppgtt->vm.alloc_pt_dma = alloc_pt_lmem;
+   else
+   ppgtt->vm.alloc_pt_dma = alloc_pt_dma;
  
  	err = gen8_init_scratch(&ppgtt->vm);

if (err)
diff --git a/drivers/gpu/drm/i915/gt/intel_gtt.c 
b/drivers/gpu/drm/i915/gt/intel_gtt.c
index d386b89e2758..1eeeab45445c 100644
--- a/drivers/gpu/drm/i915/gt/intel_gtt.c
+++ b/drivers/gpu/drm/i915/gt/intel_gtt.c
@@ -7,10 +7,23 @@
  
  #include 
  
+#include "gem/i915_gem_lmem.h"

  #include "i915_trace.h"
  #include "intel_gt.h"
  #include "intel_gtt.h"
  
+struct drm_i915_gem_object *alloc_pt_lmem(struct i915_address_space *vm, int sz)

+{
+   struct drm_i915_gem_object *obj;
+
+   obj = i915_gem_object_create_lmem(vm->i915, sz, 0);
+
+   /* ensure all dma objects have the same reservation class */
+   if (!IS_ERR(obj))
+   obj->base.resv = &vm->resv;
+   return obj;
+}
+
  struct drm_i915_gem_object *alloc_pt_dma(struct i915_address_space *vm, int 
sz)
  {
struct drm_i915_gem_object *obj;
@@ -27,9 +40,14 @@ struct drm_i915_gem_object *alloc_pt_dma(struct 
i915_address_space *vm, int sz)
  
  int map_pt_dma(struct i915_address_space *vm, struct drm_i915_gem_object *obj)

  {
+   enum i915_map_type type;
void *vaddr;
  
-	vaddr = i915_gem_object_pin_map_unlocked(obj, I915_MAP_WB);

+   type = I915_MAP_WB;
+   if (i915_gem_object_is_lmem(obj))
+   type = I915_MAP_WC;


Not trusting the "always coherent" helper from earlier in the series?

Regards,

Tvrtko


+
+   vaddr = i915_gem_object_pin_map_unlocked(obj, type);
if (IS_ERR(vaddr))
return PTR_ERR(vaddr);
  
@@ -39,9 +57,14 @@ int map_pt_dma(struct i915_address_space *vm, struct drm_i915_gem_object *obj)
  
  int map_pt_dma_locked(struct i915_address_space *vm, struct drm_i915_gem_object *obj)

  {
+   enum i915_map_type type;
void *vaddr;
  
-	vaddr = i915_gem_object_pin_map(obj, I915_MAP_WB);

+   type = I915_MAP_WB;
+   if (i915_gem_object_is_lmem(obj))
+   type = I915_MAP_WC;
+
+   vaddr = i915_gem_object_pin_map(obj, type);
if (IS_ERR(vaddr))
return PTR_ERR(vaddr);
  
diff --git a/drivers/gpu/drm/i915/gt/intel_gtt.h b/drivers/gpu/drm/i915/gt/intel_gtt.h

index 40e486704558..44ce27c51631 100644
--- a/drivers/gpu/drm/i915/gt/intel_gtt.h
+++ b/drivers/gpu/drm/i915/gt/intel_gtt.h
@@ -527,6 +527,7 @@ int setup_scratch_page(struct i915_address_space *vm);
  void free_scratch(struct i915_address_space *vm);
  
  struct drm_i915_gem_object *alloc_pt_dma(struct i915_address_space *vm, int sz);

+struct drm_i915_gem_object *alloc_pt_lmem(struct i915_address_space *vm, int 
sz);
  struct i915_page_table *alloc_pt(struct i915_address_space *vm);
  struct i915_page_directory *alloc_pd(struct i915_address_space *vm);
  struct i915_page_directory *__alloc_pd(int npde);


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


Re: [Intel-gfx] [PATCH 12/19] drm/i915/lmem: Bypass aperture when lmem is available

2021-04-14 Thread Tvrtko Ursulin


On 12/04/2021 10:05, Matthew Auld wrote:

From: Anusha Srivatsa 

In the scenario where local memory is available, we have
rely on CPU access via lmem directly instead of aperture.

v2:
gmch is only relevant for much older hw, therefore we can drop the
has_aperture check since it should always be present on such platforms.
(Chris)

Cc: Ville Syrjälä 
Cc: Dhinakaran Pandiyan 
Cc: Maarten Lankhorst 
Cc: Chris P Wilson 
Cc: Daniel Vetter 
Cc: Joonas Lahtinen 
Cc: Daniele Ceraolo Spurio 
Cc: CQ Tang 
Signed-off-by: Anusha Srivatsa 
---
  drivers/gpu/drm/i915/display/intel_fbdev.c | 22 +++---
  drivers/gpu/drm/i915/gem/i915_gem_lmem.c   | 15 +++
  drivers/gpu/drm/i915/gem/i915_gem_lmem.h   |  5 +
  drivers/gpu/drm/i915/i915_vma.c| 19 +--
  4 files changed, 48 insertions(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/i915/display/intel_fbdev.c 
b/drivers/gpu/drm/i915/display/intel_fbdev.c
index 2b37959da747..4af40229f5ec 100644
--- a/drivers/gpu/drm/i915/display/intel_fbdev.c
+++ b/drivers/gpu/drm/i915/display/intel_fbdev.c
@@ -139,14 +139,22 @@ static int intelfb_alloc(struct drm_fb_helper *helper,
size = mode_cmd.pitches[0] * mode_cmd.height;
size = PAGE_ALIGN(size);
  
-	/* If the FB is too big, just don't use it since fbdev is not very

-* important and we should probably use that space with FBC or other
-* features. */
obj = ERR_PTR(-ENODEV);
-   if (size * 2 < dev_priv->stolen_usable_size)
-   obj = i915_gem_object_create_stolen(dev_priv, size);
-   if (IS_ERR(obj))
-   obj = i915_gem_object_create_shmem(dev_priv, size);
+   if (HAS_LMEM(dev_priv)) {
+   obj = i915_gem_object_create_lmem(dev_priv, size,
+ I915_BO_ALLOC_CONTIGUOUS);


Has to be contiguous? Question for display experts I guess.

[Comes back later.] Ah for iomap? Put a comment to that effect perhaps?


+   } else {
+   /*
+* If the FB is too big, just don't use it since fbdev is not 
very
+* important and we should probably use that space with FBC or 
other
+* features.
+*/
+   if (size * 2 < dev_priv->stolen_usable_size)
+   obj = i915_gem_object_create_stolen(dev_priv, size);
+   if (IS_ERR(obj))
+   obj = i915_gem_object_create_shmem(dev_priv, size);
+   }


Could we keep the IS_ERR ordered allocation order to save having to 
re-indent? Bike shed so optional..



+
if (IS_ERR(obj)) {
drm_err(&dev_priv->drm, "failed to allocate framebuffer\n");
return PTR_ERR(obj);
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_lmem.c 
b/drivers/gpu/drm/i915/gem/i915_gem_lmem.c
index 017db8f71130..f44bdd08f7cb 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_lmem.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_lmem.c
@@ -17,6 +17,21 @@ const struct drm_i915_gem_object_ops i915_gem_lmem_obj_ops = 
{
.release = i915_gem_object_release_memory_region,
  };
  
+void __iomem *

+i915_gem_object_lmem_io_map(struct drm_i915_gem_object *obj,
+   unsigned long n,
+   unsigned long size)
+{
+   resource_size_t offset;
+
+   GEM_BUG_ON(!i915_gem_object_is_contiguous(obj));
+
+   offset = i915_gem_object_get_dma_address(obj, n);
+   offset -= obj->mm.region->region.start;
+
+   return io_mapping_map_wc(&obj->mm.region->iomap, offset, size);
+}
+
  bool i915_gem_object_is_lmem(struct drm_i915_gem_object *obj)
  {
struct intel_memory_region *mr = obj->mm.region;
diff --git a/drivers/gpu/drm/i915/gem/i915_gem_lmem.h 
b/drivers/gpu/drm/i915/gem/i915_gem_lmem.h
index 036d53c01de9..fac6bc5a5ebb 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_lmem.h
+++ b/drivers/gpu/drm/i915/gem/i915_gem_lmem.h
@@ -14,6 +14,11 @@ struct intel_memory_region;
  
  extern const struct drm_i915_gem_object_ops i915_gem_lmem_obj_ops;
  
+void __iomem *

+i915_gem_object_lmem_io_map(struct drm_i915_gem_object *obj,
+   unsigned long n,
+   unsigned long size);
+
  bool i915_gem_object_is_lmem(struct drm_i915_gem_object *obj);
  
  struct drm_i915_gem_object *

diff --git a/drivers/gpu/drm/i915/i915_vma.c b/drivers/gpu/drm/i915/i915_vma.c
index 07490db51cdc..e24d33aecac4 100644
--- a/drivers/gpu/drm/i915/i915_vma.c
+++ b/drivers/gpu/drm/i915/i915_vma.c
@@ -27,6 +27,7 @@
  
  #include "display/intel_frontbuffer.h"
  
+#include "gem/i915_gem_lmem.h"

  #include "gt/intel_engine.h"
  #include "gt/intel_engine_heartbeat.h"
  #include "gt/intel_gt.h"
@@ -448,9 +449,11 @@ void __iomem *i915_vma_pin_iomap(struct i915_vma *vma)
void __iomem *ptr;
int err;
  
-	if (GEM_WARN_ON(!i915_vma_is_map_and_fenceable(vma))) {

-   err = -ENODEV;
-   goto err;
+   if (!i915_

Re: [Intel-gfx] [PATCH 11/19] drm/i915: Update the helper to set correct mapping

2021-04-14 Thread Tvrtko Ursulin



On 12/04/2021 10:05, Matthew Auld wrote:

From: Venkata Sandeep Dhanalakota 

Determine the possible coherent map type based on object location,
and if target has llc or if user requires an always coherent
mapping.

Cc: Matthew Auld 
Cc: CQ Tang 
Suggested-by: Michal Wajdeczko 
Signed-off-by: Venkata Sandeep Dhanalakota 
---
  drivers/gpu/drm/i915/gt/intel_engine_cs.c|  3 ++-
  drivers/gpu/drm/i915/gt/intel_engine_pm.c|  2 +-
  drivers/gpu/drm/i915/gt/intel_lrc.c  |  4 +++-
  drivers/gpu/drm/i915/gt/intel_ring.c |  9 ++---
  drivers/gpu/drm/i915/gt/selftest_context.c   |  3 ++-
  drivers/gpu/drm/i915/gt/selftest_hangcheck.c |  4 ++--
  drivers/gpu/drm/i915/gt/selftest_lrc.c   |  4 +++-
  drivers/gpu/drm/i915/gt/uc/intel_guc.c   |  4 +++-
  drivers/gpu/drm/i915/gt/uc/intel_huc.c   |  4 +++-
  drivers/gpu/drm/i915/i915_drv.h  | 11 +--
  drivers/gpu/drm/i915/selftests/igt_spinner.c |  4 ++--
  11 files changed, 36 insertions(+), 16 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/intel_engine_cs.c 
b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
index efe935f80c1a..b79568d370f5 100644
--- a/drivers/gpu/drm/i915/gt/intel_engine_cs.c
+++ b/drivers/gpu/drm/i915/gt/intel_engine_cs.c
@@ -664,7 +664,8 @@ static int init_status_page(struct intel_engine_cs *engine)
if (ret)
goto err;
  
-	vaddr = i915_gem_object_pin_map(obj, I915_MAP_WB);

+   vaddr = i915_gem_object_pin_map(obj,
+   i915_coherent_map_type(engine->i915, 
obj, true));
if (IS_ERR(vaddr)) {
ret = PTR_ERR(vaddr);
goto err_unpin;
diff --git a/drivers/gpu/drm/i915/gt/intel_engine_pm.c 
b/drivers/gpu/drm/i915/gt/intel_engine_pm.c
index 7c9af86fdb1e..47f4397095e5 100644
--- a/drivers/gpu/drm/i915/gt/intel_engine_pm.c
+++ b/drivers/gpu/drm/i915/gt/intel_engine_pm.c
@@ -23,7 +23,7 @@ static void dbg_poison_ce(struct intel_context *ce)
  
  	if (ce->state) {

struct drm_i915_gem_object *obj = ce->state->obj;
-   int type = i915_coherent_map_type(ce->engine->i915);
+   int type = i915_coherent_map_type(ce->engine->i915, obj, true);
void *map;
  
  		if (!i915_gem_object_trylock(obj))

diff --git a/drivers/gpu/drm/i915/gt/intel_lrc.c 
b/drivers/gpu/drm/i915/gt/intel_lrc.c
index e86897cde984..aafe2a4df496 100644
--- a/drivers/gpu/drm/i915/gt/intel_lrc.c
+++ b/drivers/gpu/drm/i915/gt/intel_lrc.c
@@ -903,7 +903,9 @@ lrc_pre_pin(struct intel_context *ce,
GEM_BUG_ON(!i915_vma_is_pinned(ce->state));
  
  	*vaddr = i915_gem_object_pin_map(ce->state->obj,

-
i915_coherent_map_type(ce->engine->i915) |
+
i915_coherent_map_type(ce->engine->i915,
+   ce->state->obj,
+   false) |
 I915_MAP_OVERRIDE);
  
  	return PTR_ERR_OR_ZERO(*vaddr);

diff --git a/drivers/gpu/drm/i915/gt/intel_ring.c 
b/drivers/gpu/drm/i915/gt/intel_ring.c
index aee0a77c77e0..3cf6c7e68108 100644
--- a/drivers/gpu/drm/i915/gt/intel_ring.c
+++ b/drivers/gpu/drm/i915/gt/intel_ring.c
@@ -53,9 +53,12 @@ int intel_ring_pin(struct intel_ring *ring, struct 
i915_gem_ww_ctx *ww)
  
  	if (i915_vma_is_map_and_fenceable(vma))

addr = (void __force *)i915_vma_pin_iomap(vma);
-   else
-   addr = i915_gem_object_pin_map(vma->obj,
-  
i915_coherent_map_type(vma->vm->i915));
+   else {
+   int type = i915_coherent_map_type(vma->vm->i915, vma->obj, 
false);
+
+   addr = i915_gem_object_pin_map(vma->obj, type);
+   }
+
if (IS_ERR(addr)) {
ret = PTR_ERR(addr);
goto err_ring;
diff --git a/drivers/gpu/drm/i915/gt/selftest_context.c 
b/drivers/gpu/drm/i915/gt/selftest_context.c
index b9bdd1d23243..26685b927169 100644
--- a/drivers/gpu/drm/i915/gt/selftest_context.c
+++ b/drivers/gpu/drm/i915/gt/selftest_context.c
@@ -88,7 +88,8 @@ static int __live_context_size(struct intel_engine_cs *engine)
goto err;
  
  	vaddr = i915_gem_object_pin_map_unlocked(ce->state->obj,

-
i915_coherent_map_type(engine->i915));
+
i915_coherent_map_type(engine->i915,
+   
ce->state->obj, false));
if (IS_ERR(vaddr)) {
err = PTR_ERR(vaddr);
intel_context_unpin(ce);
diff --git a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c 
b/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
index 746985971c3a..5b63d4df8c93 100644
--- a/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
+++ b/drivers/gpu/drm/i915/gt/selftest_hangcheck.c
@@ -69,7 +69,7 @@ stati

Re: [Intel-gfx] [PATCH 08/19] drm/i915: Return error value when bo not in LMEM for discrete

2021-04-14 Thread Tvrtko Ursulin



On 12/04/2021 10:05, Matthew Auld wrote:

From: Mohammed Khajapasha 

Return EREMOTE value when frame buffer object is not backed by LMEM
for discrete. If Local memory is supported by hardware the framebuffer
backing gem objects should be from local memory.

Signed-off-by: Mohammed Khajapasha 
---
  drivers/gpu/drm/i915/display/intel_display.c | 10 ++
  1 file changed, 10 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/intel_display.c 
b/drivers/gpu/drm/i915/display/intel_display.c
index 411b46c012f8..57b06d8728af 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -63,6 +63,7 @@
  #include "display/intel_vdsc.h"
  #include "display/intel_vrr.h"
  
+#include "gem/i915_gem_lmem.h"

  #include "gem/i915_gem_object.h"
  
  #include "gt/intel_rps.h"

@@ -11279,11 +11280,20 @@ intel_user_framebuffer_create(struct drm_device *dev,
struct drm_framebuffer *fb;
struct drm_i915_gem_object *obj;
struct drm_mode_fb_cmd2 mode_cmd = *user_mode_cmd;
+   struct drm_i915_private *i915;
  
  	obj = i915_gem_object_lookup(filp, mode_cmd.handles[0]);

if (!obj)
return ERR_PTR(-ENOENT);
  
+	/* object is backed with LMEM for discrete */

+   i915 = to_i915(obj->base.dev);
+   if (HAS_LMEM(i915) && !i915_gem_object_is_lmem(obj)) {
+   /* object is "remote", not in local memory */
+   i915_gem_object_put(obj);
+   return ERR_PTR(-EREMOTE);


I am a fan of rich errnos and this one feels appropriately descriptive, 
but please get an ack from Daniel or so.


Reviewed-by: Tvrtko Ursulin 

Regards,

Tvrtko


+   }
+
fb = intel_framebuffer_create(obj, &mode_cmd);
i915_gem_object_put(obj);
  


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


[Intel-gfx] ✗ Fi.CI.BUILD: failure for drm: Add privacy-screen class and connector properties (rev2)

2021-04-14 Thread Patchwork
== Series Details ==

Series: drm: Add privacy-screen class and connector properties (rev2)
URL   : https://patchwork.freedesktop.org/series/79259/
State : failure

== Summary ==

CALLscripts/checksyscalls.sh
  CALLscripts/atomic/check-atomics.sh
  DESCEND  objtool
  CHK include/generated/compile.h
  GEN .version
  CHK include/generated/compile.h
  UPD include/generated/compile.h
  CC  init/version.o
  AR  init/built-in.a
  LD  vmlinux.o
  MODPOST vmlinux.symvers
  MODINFO modules.builtin.modinfo
  GEN modules.builtin
  LD  .tmp_vmlinux.kallsyms1
drivers/gpu/drm/drm_connector.o: In function `drm_connector_unregister':
/home/cidrm/kernel/drivers/gpu/drm/drm_connector.c:573: undefined reference to 
`drm_privacy_screen_unregister_notifier'
drivers/gpu/drm/drm_connector.o: In function 
`drm_connector_update_privacy_screen_properties':
/home/cidrm/kernel/drivers/gpu/drm/drm_connector.c:2377: undefined reference to 
`drm_privacy_screen_get_state'
drivers/gpu/drm/drm_connector.o: In function `drm_connector_register':
/home/cidrm/kernel/drivers/gpu/drm/drm_connector.c:541: undefined reference to 
`drm_privacy_screen_register_notifier'
drivers/gpu/drm/drm_connector.o: In function 
`drm_connector_update_privacy_screen':
/home/cidrm/kernel/drivers/gpu/drm/drm_connector.c:2457: undefined reference to 
`drm_privacy_screen_set_sw_state'
drivers/gpu/drm/drm_connector.o: In function `drm_connector_cleanup':
/home/cidrm/kernel/drivers/gpu/drm/drm_connector.c:457: undefined reference to 
`drm_privacy_screen_put'
Makefile:1199: recipe for target 'vmlinux' failed
make: *** [vmlinux] Error 1


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


[Intel-gfx] [PATCH resend 9/9] drm/i915: Add privacy-screen support

2021-04-14 Thread Hans de Goede
Add support for eDP panels with a built-in privacy screen using the
new drm_privacy_screen class.

One thing which stands out here is the addition of these 2 lines to
intel_atomic_commit_tail:

for_each_new_connector_in_state(&state->base, connector, ...
drm_connector_update_privacy_screen(connector, state);

It may seem more logical to instead take care of updating the
privacy-screen state by marking the crtc as needing a modeset and then
do this in both the encoder update_pipe (for fast-sets) and enable
(for full modesets) callbacks. But ATM these callbacks only get passed
the new connector_state and these callbacks are all called after
drm_atomic_helper_swap_state() at which point there is no way to get
the old state from the new state.

Without access to the old state, we do not know if the sw_state of
the privacy-screen has changes so we would need to call
drm_privacy_screen_set_sw_state() unconditionally. This is undesirable
since all current known privacy-screen providers use ACPI calls which
are somewhat expensive to make.

Also, as all providers use ACPI calls, rather then poking GPU registers,
there is no need to order this together with other encoder operations.
Since no GPU poking is involved having this as a separate step of the
commit process actually is the logical thing to do.

Signed-off-by: Hans de Goede 
---
 drivers/gpu/drm/i915/display/intel_display.c |  5 +
 drivers/gpu/drm/i915/display/intel_dp.c  | 10 ++
 drivers/gpu/drm/i915/i915_pci.c  | 12 
 3 files changed, 27 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/intel_display.c 
b/drivers/gpu/drm/i915/display/intel_display.c
index 411b46c012f8..620d11d6bb31 100644
--- a/drivers/gpu/drm/i915/display/intel_display.c
+++ b/drivers/gpu/drm/i915/display/intel_display.c
@@ -10169,6 +10169,8 @@ static void intel_atomic_commit_tail(struct 
intel_atomic_state *state)
struct drm_device *dev = state->base.dev;
struct drm_i915_private *dev_priv = to_i915(dev);
struct intel_crtc_state *new_crtc_state, *old_crtc_state;
+   struct drm_connector_state *new_connector_state;
+   struct drm_connector *connector;
struct intel_crtc *crtc;
u64 put_domains[I915_MAX_PIPES] = {};
intel_wakeref_t wakeref = 0;
@@ -10266,6 +10268,9 @@ static void intel_atomic_commit_tail(struct 
intel_atomic_state *state)
intel_color_load_luts(new_crtc_state);
}
 
+   for_each_new_connector_in_state(&state->base, connector, 
new_connector_state, i)
+   drm_connector_update_privacy_screen(connector, &state->base);
+
/*
 * Now that the vblank has passed, we can go ahead and program the
 * optimal watermarks on platforms that need two-step watermark
diff --git a/drivers/gpu/drm/i915/display/intel_dp.c 
b/drivers/gpu/drm/i915/display/intel_dp.c
index 6750949aa261..8ca3909e2ec9 100644
--- a/drivers/gpu/drm/i915/display/intel_dp.c
+++ b/drivers/gpu/drm/i915/display/intel_dp.c
@@ -37,6 +37,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 
 #include "g4x_dp.h"
@@ -5178,6 +5179,7 @@ static bool intel_edp_init_connector(struct intel_dp 
*intel_dp,
struct drm_connector *connector = &intel_connector->base;
struct drm_display_mode *fixed_mode = NULL;
struct drm_display_mode *downclock_mode = NULL;
+   struct drm_privacy_screen *privacy_screen;
bool has_dpcd;
enum pipe pipe = INVALID_PIPE;
struct edid *edid;
@@ -5268,6 +5270,14 @@ static bool intel_edp_init_connector(struct intel_dp 
*intel_dp,
fixed_mode->hdisplay, fixed_mode->vdisplay);
}
 
+   privacy_screen = drm_privacy_screen_get(&dev->pdev->dev, NULL);
+   if (!IS_ERR(privacy_screen)) {
+   drm_connector_attach_privacy_screen_provider(connector,
+privacy_screen);
+   } else if (PTR_ERR(privacy_screen) != -ENODEV) {
+   drm_warn(&dev_priv->drm, "Error getting privacy-screen\n");
+   }
+
return true;
 
 out_vdd_off:
diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
index 480553746794..95426e365400 100644
--- a/drivers/gpu/drm/i915/i915_pci.c
+++ b/drivers/gpu/drm/i915/i915_pci.c
@@ -26,6 +26,7 @@
 #include 
 
 #include 
+#include 
 #include 
 
 #include "display/intel_fbdev.h"
@@ -1064,6 +1065,7 @@ static int i915_pci_probe(struct pci_dev *pdev, const 
struct pci_device_id *ent)
 {
struct intel_device_info *intel_info =
(struct intel_device_info *) ent->driver_data;
+   struct drm_privacy_screen *privacy_screen;
int err;
 
if (intel_info->require_force_probe &&
@@ -1092,7 +1094,17 @@ static int i915_pci_probe(struct pci_dev *pdev, const 
struct pci_device_id *ent)
if (vga_switcheroo_client_probe_defer(pdev))
return -EPROBE_DEFER;
 
+   

[Intel-gfx] [PATCH resend 8/9] platform/x86: thinkpad_acpi: Register a privacy-screen device

2021-04-14 Thread Hans de Goede
Register a privacy-screen device on laptops with a privacy-screen,
this exports the PrivacyGuard features to user-space using a
standardized vendor-agnostic sysfs interface. Note the sysfs interface
is read-only.

Registering a privacy-screen device with the new privacy-screen class
code will also allow the GPU driver to get a handle to it and export
the privacy-screen setting as a property on the DRM connector object
for the LCD panel. This DRM connector property is news standardized
interface which all user-space code should use to query and control
the privacy-screen.

Signed-off-by: Hans de Goede 
---
Changes in v2:
- Make the new lcdshadow_set_sw_state, lcdshadow_get_hw_state and
  lcdshadow_ops symbols static
- Update state and call drm_privacy_screen_call_notifier_chain()
  when the state is changed by pressing the Fn + D hotkey combo
---
 drivers/platform/x86/Kconfig |  1 +
 drivers/platform/x86/thinkpad_acpi.c | 91 
 2 files changed, 67 insertions(+), 25 deletions(-)

diff --git a/drivers/platform/x86/Kconfig b/drivers/platform/x86/Kconfig
index 461ec61530eb..404d80f99a03 100644
--- a/drivers/platform/x86/Kconfig
+++ b/drivers/platform/x86/Kconfig
@@ -485,6 +485,7 @@ config THINKPAD_ACPI
depends on ACPI_VIDEO || ACPI_VIDEO = n
depends on BACKLIGHT_CLASS_DEVICE
select ACPI_PLATFORM_PROFILE
+   select DRM_PRIVACY_SCREEN
select HWMON
select NVRAM
select NEW_LEDS
diff --git a/drivers/platform/x86/thinkpad_acpi.c 
b/drivers/platform/x86/thinkpad_acpi.c
index fe919700b8ae..766c6d64b0fb 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -73,6 +73,7 @@
 #include 
 #include 
 #include 
+#include 
 
 /* ThinkPad CMOS commands */
 #define TP_CMOS_VOLUME_DOWN0
@@ -156,6 +157,7 @@ enum tpacpi_hkey_event_t {
TP_HKEY_EV_VOL_UP   = 0x1015, /* Volume up or unmute */
TP_HKEY_EV_VOL_DOWN = 0x1016, /* Volume down or unmute */
TP_HKEY_EV_VOL_MUTE = 0x1017, /* Mixer output mute */
+   TP_HKEY_EV_PRIVACYGUARD_TOGGLE  = 0x130f, /* Toggle priv.guard on/off */
 
/* Reasons for waking up from S3/S4 */
TP_HKEY_EV_WKUP_S3_UNDOCK   = 0x2304, /* undock requested, S3 */
@@ -3882,6 +3884,12 @@ static bool hotkey_notify_extended_hotkey(const u32 hkey)
 {
unsigned int scancode;
 
+   switch (hkey) {
+   case TP_HKEY_EV_PRIVACYGUARD_TOGGLE:
+   tpacpi_driver_event(hkey);
+   return true;
+   }
+
/* Extended keycodes start at 0x300 and our offset into the map
 * TP_ACPI_HOTKEYSCAN_EXTENDED_START. The calculated scancode
 * will be positive, but might not be in the correct range.
@@ -9759,30 +9767,40 @@ static struct ibm_struct battery_driver_data = {
  * LCD Shadow subdriver, for the Lenovo PrivacyGuard feature
  */
 
+static struct drm_privacy_screen *lcdshadow_dev;
 static acpi_handle lcdshadow_get_handle;
 static acpi_handle lcdshadow_set_handle;
-static int lcdshadow_state;
 
-static int lcdshadow_on_off(bool state)
+static int lcdshadow_set_sw_state(struct drm_privacy_screen *priv,
+ enum drm_privacy_screen_status state)
 {
int output;
 
+   if (WARN_ON(!mutex_is_locked(&priv->lock)))
+   return -EIO;
+
if (!acpi_evalf(lcdshadow_set_handle, &output, NULL, "dd", (int)state))
return -EIO;
 
-   lcdshadow_state = state;
+   priv->hw_state = priv->sw_state = state;
return 0;
 }
 
-static int lcdshadow_set(bool on)
+static void lcdshadow_get_hw_state(struct drm_privacy_screen *priv)
 {
-   if (lcdshadow_state < 0)
-   return lcdshadow_state;
-   if (lcdshadow_state == on)
-   return 0;
-   return lcdshadow_on_off(on);
+   int output;
+
+   if (!acpi_evalf(lcdshadow_get_handle, &output, NULL, "dd", 0))
+   return;
+
+   priv->hw_state = priv->sw_state = output & 0x1;
 }
 
+static const struct drm_privacy_screen_ops lcdshadow_ops = {
+   .set_sw_state = lcdshadow_set_sw_state,
+   .get_hw_state = lcdshadow_get_hw_state,
+};
+
 static int tpacpi_lcdshadow_init(struct ibm_init_struct *iibm)
 {
acpi_status status1, status2;
@@ -9790,36 +9808,44 @@ static int tpacpi_lcdshadow_init(struct ibm_init_struct 
*iibm)
 
status1 = acpi_get_handle(hkey_handle, "GSSS", &lcdshadow_get_handle);
status2 = acpi_get_handle(hkey_handle, "", &lcdshadow_set_handle);
-   if (ACPI_FAILURE(status1) || ACPI_FAILURE(status2)) {
-   lcdshadow_state = -ENODEV;
+   if (ACPI_FAILURE(status1) || ACPI_FAILURE(status2))
return 0;
-   }
 
-   if (!acpi_evalf(lcdshadow_get_handle, &output, NULL, "dd", 0)) {
-   lcdshadow_state = -EIO;
+   if (!acpi_evalf(lcdshadow_get_handle, &output, NULL, "dd", 0))
return -EIO;
-   }
-

[Intel-gfx] [PATCH resend 7/9] platform/x86: thinkpad_acpi: Get privacy-screen / lcdshadow ACPI handles only once

2021-04-14 Thread Hans de Goede
Get the privacy-screen / lcdshadow ACPI handles once and cache them,
instead of retrieving them every time we need them.

Signed-off-by: Hans de Goede 
---
 drivers/platform/x86/thinkpad_acpi.c | 18 --
 1 file changed, 8 insertions(+), 10 deletions(-)

diff --git a/drivers/platform/x86/thinkpad_acpi.c 
b/drivers/platform/x86/thinkpad_acpi.c
index 683c175cc28a..fe919700b8ae 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -9759,19 +9759,15 @@ static struct ibm_struct battery_driver_data = {
  * LCD Shadow subdriver, for the Lenovo PrivacyGuard feature
  */
 
+static acpi_handle lcdshadow_get_handle;
+static acpi_handle lcdshadow_set_handle;
 static int lcdshadow_state;
 
 static int lcdshadow_on_off(bool state)
 {
-   acpi_handle set_shadow_handle;
int output;
 
-   if (ACPI_FAILURE(acpi_get_handle(hkey_handle, "", 
&set_shadow_handle))) {
-   pr_warn("Thinkpad ACPI has no %s interface.\n", "");
-   return -EIO;
-   }
-
-   if (!acpi_evalf(set_shadow_handle, &output, NULL, "dd", (int)state))
+   if (!acpi_evalf(lcdshadow_set_handle, &output, NULL, "dd", (int)state))
return -EIO;
 
lcdshadow_state = state;
@@ -9789,15 +9785,17 @@ static int lcdshadow_set(bool on)
 
 static int tpacpi_lcdshadow_init(struct ibm_init_struct *iibm)
 {
-   acpi_handle get_shadow_handle;
+   acpi_status status1, status2;
int output;
 
-   if (ACPI_FAILURE(acpi_get_handle(hkey_handle, "GSSS", 
&get_shadow_handle))) {
+   status1 = acpi_get_handle(hkey_handle, "GSSS", &lcdshadow_get_handle);
+   status2 = acpi_get_handle(hkey_handle, "", &lcdshadow_set_handle);
+   if (ACPI_FAILURE(status1) || ACPI_FAILURE(status2)) {
lcdshadow_state = -ENODEV;
return 0;
}
 
-   if (!acpi_evalf(get_shadow_handle, &output, NULL, "dd", 0)) {
+   if (!acpi_evalf(lcdshadow_get_handle, &output, NULL, "dd", 0)) {
lcdshadow_state = -EIO;
return -EIO;
}
-- 
2.31.1

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


[Intel-gfx] [PATCH resend 6/9] platform/x86: thinkpad_acpi: Add hotkey_notify_extended_hotkey() helper

2021-04-14 Thread Hans de Goede
Factor the extended hotkey handling out of hotkey_notify_hotkey() and
into a new hotkey_notify_extended_hotkey() helper.

This is a preparation patch for adding support the privacy-screen hotkey
toggle (which needs some special handling, it should NOT send an evdev
key-event to userspace...).

Signed-off-by: Hans de Goede 
---
 drivers/platform/x86/thinkpad_acpi.c | 30 ++--
 1 file changed, 19 insertions(+), 11 deletions(-)

diff --git a/drivers/platform/x86/thinkpad_acpi.c 
b/drivers/platform/x86/thinkpad_acpi.c
index 0d9e2ddbf904..683c175cc28a 100644
--- a/drivers/platform/x86/thinkpad_acpi.c
+++ b/drivers/platform/x86/thinkpad_acpi.c
@@ -3878,6 +3878,24 @@ static bool 
adaptive_keyboard_hotkey_notify_hotkey(unsigned int scancode)
}
 }
 
+static bool hotkey_notify_extended_hotkey(const u32 hkey)
+{
+   unsigned int scancode;
+
+   /* Extended keycodes start at 0x300 and our offset into the map
+* TP_ACPI_HOTKEYSCAN_EXTENDED_START. The calculated scancode
+* will be positive, but might not be in the correct range.
+*/
+   scancode = (hkey & 0xfff) - (0x300 - TP_ACPI_HOTKEYSCAN_EXTENDED_START);
+   if (scancode >= TP_ACPI_HOTKEYSCAN_EXTENDED_START &&
+   scancode < TPACPI_HOTKEY_MAP_LEN) {
+   tpacpi_input_send_key(scancode);
+   return true;
+   }
+
+   return false;
+}
+
 static bool hotkey_notify_hotkey(const u32 hkey,
 bool *send_acpi_ev,
 bool *ignore_acpi_ev)
@@ -3912,17 +3930,7 @@ static bool hotkey_notify_hotkey(const u32 hkey,
return adaptive_keyboard_hotkey_notify_hotkey(scancode);
 
case 3:
-   /* Extended keycodes start at 0x300 and our offset into the map
-* TP_ACPI_HOTKEYSCAN_EXTENDED_START. The calculated scancode
-* will be positive, but might not be in the correct range.
-*/
-   scancode -= (0x300 - TP_ACPI_HOTKEYSCAN_EXTENDED_START);
-   if (scancode >= TP_ACPI_HOTKEYSCAN_EXTENDED_START &&
-   scancode < TPACPI_HOTKEY_MAP_LEN) {
-   tpacpi_input_send_key(scancode);
-   return true;
-   }
-   break;
+   return hotkey_notify_extended_hotkey(hkey);
}
 
return false;
-- 
2.31.1

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


[Intel-gfx] [PATCH resend 5/9] drm/connector: Add a drm_connector privacy-screen helper functions

2021-04-14 Thread Hans de Goede
Add 2 drm_connector privacy-screen helper functions:

1. drm_connector_attach_privacy_screen_provider(), this function creates
and attaches the standard privacy-screen properties and registers a
generic notifier for generating sysfs-connector-status-events on external
changes to the privacy-screen status.

2. drm_connector_update_privacy_screen(), Check if the passed in atomic
state contains a privacy-screen sw_state change for the connector and if
it does, call drm_privacy_screen_set_sw_state() with the new sw_state.

Signed-off-by: Hans de Goede 
---
 drivers/gpu/drm/drm_connector.c | 113 
 include/drm/drm_connector.h |  12 
 2 files changed, 125 insertions(+)

diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
index ca8a76decd4c..958a332374af 100644
--- a/drivers/gpu/drm/drm_connector.c
+++ b/drivers/gpu/drm/drm_connector.c
@@ -20,6 +20,7 @@
  * OF THIS SOFTWARE.
  */
 
+#include 
 #include 
 #include 
 #include 
@@ -27,6 +28,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 
 #include 
@@ -451,6 +453,11 @@ void drm_connector_cleanup(struct drm_connector *connector)
DRM_CONNECTOR_REGISTERED))
drm_connector_unregister(connector);
 
+   if (connector->privacy_screen) {
+   drm_privacy_screen_put(connector->privacy_screen);
+   connector->privacy_screen = NULL;
+   }
+
if (connector->tile_group) {
drm_mode_put_tile_group(dev, connector->tile_group);
connector->tile_group = NULL;
@@ -530,6 +537,10 @@ int drm_connector_register(struct drm_connector *connector)
/* Let userspace know we have a new connector */
drm_sysfs_hotplug_event(connector->dev);
 
+   if (connector->privacy_screen)
+   drm_privacy_screen_register_notifier(connector->privacy_screen,
+  &connector->privacy_screen_notifier);
+
goto unlock;
 
 err_debugfs:
@@ -558,6 +569,11 @@ void drm_connector_unregister(struct drm_connector 
*connector)
return;
}
 
+   if (connector->privacy_screen)
+   drm_privacy_screen_unregister_notifier(
+   connector->privacy_screen,
+   &connector->privacy_screen_notifier);
+
if (connector->funcs->early_unregister)
connector->funcs->early_unregister(connector);
 
@@ -2353,6 +2369,103 @@ drm_connector_attach_privacy_screen_properties(struct 
drm_connector *connector)
 }
 EXPORT_SYMBOL(drm_connector_attach_privacy_screen_properties);
 
+static void drm_connector_update_privacy_screen_properties(
+   struct drm_connector *connector)
+{
+   enum drm_privacy_screen_status sw_state, hw_state;
+
+   drm_privacy_screen_get_state(connector->privacy_screen,
+&sw_state, &hw_state);
+
+   connector->state->privacy_screen_sw_state = sw_state;
+   drm_object_property_set_value(&connector->base,
+   connector->privacy_screen_hw_state_property, hw_state);
+}
+
+static int drm_connector_privacy_screen_notifier(
+   struct notifier_block *nb, unsigned long action, void *data)
+{
+   struct drm_connector *connector =
+   container_of(nb, struct drm_connector, privacy_screen_notifier);
+   struct drm_device *dev = connector->dev;
+
+   drm_modeset_lock(&dev->mode_config.connection_mutex, NULL);
+   drm_connector_update_privacy_screen_properties(connector);
+   drm_modeset_unlock(&dev->mode_config.connection_mutex);
+
+   drm_sysfs_connector_status_event(connector,
+   connector->privacy_screen_sw_state_property);
+   drm_sysfs_connector_status_event(connector,
+   connector->privacy_screen_hw_state_property);
+
+   return NOTIFY_DONE;
+}
+
+/**
+ * drm_connector_attach_privacy_screen_provider - attach a privacy-screen to
+ *the connector
+ * @connector: connector to attach the privacy-screen to
+ * @priv: drm_privacy_screen to attach
+ *
+ * Create and attach the standard privacy-screen properties and register
+ * a generic notifier for generating sysfs-connector-status-events
+ * on external changes to the privacy-screen status.
+ * This function takes ownership of the passed in drm_privacy_screen and will
+ * call drm_privacy_screen_put() on it when the connector is destroyed.
+ */
+void drm_connector_attach_privacy_screen_provider(
+   struct drm_connector *connector, struct drm_privacy_screen *priv)
+{
+   connector->privacy_screen = priv;
+   connector->privacy_screen_notifier.notifier_call =
+   drm_connector_privacy_screen_notifier;
+
+   drm_connector_create_privacy_screen_properties(connector);
+   drm_connector_update_privacy_screen_properties(connector);
+   drm_connector_attach_privacy_screen_properties(connector

[Intel-gfx] [PATCH resend 4/9] drm/privacy-screen: Add notifier support

2021-04-14 Thread Hans de Goede
Add support for privacy-screen consumers to register a notifier to
be notified of external (e.g. done by the hw itself on a hotkey press)
state changes.

Signed-off-by: Hans de Goede 
---
 drivers/gpu/drm/drm_privacy_screen.c  | 67 +++
 include/drm/drm_privacy_screen_consumer.h |  5 ++
 include/drm/drm_privacy_screen_driver.h   |  4 ++
 3 files changed, 76 insertions(+)

diff --git a/drivers/gpu/drm/drm_privacy_screen.c 
b/drivers/gpu/drm/drm_privacy_screen.c
index 6296fd46156c..7e78b4068e8f 100644
--- a/drivers/gpu/drm/drm_privacy_screen.c
+++ b/drivers/gpu/drm/drm_privacy_screen.c
@@ -254,6 +254,49 @@ void drm_privacy_screen_get_state(struct 
drm_privacy_screen *priv,
 }
 EXPORT_SYMBOL(drm_privacy_screen_get_state);
 
+/**
+ * drm_privacy_screen_register_notifier - register a notifier
+ * @priv: Privacy screen to register the notifier with
+ * @nb: Notifier-block for the notifier to register
+ *
+ * Register a notifier with the privacy-screen to be notified of changes made
+ * to the privacy-screen state from outside of the privacy-screen class.
+ * E.g. the state may be changed by the hardware itself in response to a
+ * hotkey press.
+ *
+ * The notifier is called with no locks held. The new hw_state and sw_state
+ * can be retrieved using the drm_privacy_screen_get_state() function.
+ * A pointer to the drm_privacy_screen's struct is passed as the void *data
+ * argument of the notifier_block's notifier_call.
+ *
+ * The notifier will NOT be called when changes are made through
+ * drm_privacy_screen_set_sw_state(). It is only called for external changes.
+ *
+ * Return: 0 on success, negative error code on failure.
+ */
+int drm_privacy_screen_register_notifier(struct drm_privacy_screen *priv,
+struct notifier_block *nb)
+{
+   return blocking_notifier_chain_register(&priv->notifier_head, nb);
+}
+EXPORT_SYMBOL(drm_privacy_screen_register_notifier);
+
+/**
+ * drm_privacy_screen_unregister_notifier - unregister a notifier
+ * @priv: Privacy screen to register the notifier with
+ * @nb: Notifier-block for the notifier to register
+ *
+ * Unregister a notifier registered with 
drm_privacy_screen_register_notifier().
+ *
+ * Return: 0 on success, negative error code on failure.
+ */
+int drm_privacy_screen_unregister_notifier(struct drm_privacy_screen *priv,
+  struct notifier_block *nb)
+{
+   return blocking_notifier_chain_unregister(&priv->notifier_head, nb);
+}
+EXPORT_SYMBOL(drm_privacy_screen_unregister_notifier);
+
 /*** drm_privacy_screen_driver.h functions ***/
 
 static ssize_t sw_state_show(struct device *dev,
@@ -352,6 +395,7 @@ struct drm_privacy_screen *drm_privacy_screen_register(
return ERR_PTR(-ENOMEM);
 
mutex_init(&priv->lock);
+   BLOCKING_INIT_NOTIFIER_HEAD(&priv->notifier_head);
 
priv->dev.class = &drm_privacy_screen_class;
priv->dev.parent = parent;
@@ -399,6 +443,29 @@ void drm_privacy_screen_unregister(struct 
drm_privacy_screen *priv)
 }
 EXPORT_SYMBOL(drm_privacy_screen_unregister);
 
+/**
+ * drm_privacy_screen_call_notifier_chain - notify consumers of state change
+ * @priv: Privacy screen to register the notifier with
+ *
+ * A privacy-screen provider driver can call this functions upon external
+ * changes to the privacy-screen state. E.g. the state may be changed by the
+ * hardware itself in response to a hotkey press.
+ * This function must be called without holding the privacy-screen lock.
+ * the driver must update sw_state and hw_state to reflect the new state before
+ * calling this function.
+ * The expected behavior from the driver upon receiving an external state
+ * change event is: 1. Take the lock; 2. Update sw_state and hw_state;
+ * 3. Release the lock. 4. Call drm_privacy_screen_call_notifier_chain().
+ */
+void drm_privacy_screen_call_notifier_chain(struct drm_privacy_screen *priv)
+{
+   if (WARN_ON(mutex_is_locked(&priv->lock)))
+   return;
+
+   blocking_notifier_call_chain(&priv->notifier_head, 0, priv);
+}
+EXPORT_SYMBOL(drm_privacy_screen_call_notifier_chain);
+
 static int __init drm_privacy_screen_init(void)
 {
int ret;
diff --git a/include/drm/drm_privacy_screen_consumer.h 
b/include/drm/drm_privacy_screen_consumer.h
index 169ba72bd60d..1f33dc1457ff 100644
--- a/include/drm/drm_privacy_screen_consumer.h
+++ b/include/drm/drm_privacy_screen_consumer.h
@@ -24,4 +24,9 @@ void drm_privacy_screen_get_state(struct drm_privacy_screen 
*priv,
  enum drm_privacy_screen_status *sw_state_ret,
  enum drm_privacy_screen_status *hw_state_ret);
 
+int drm_privacy_screen_register_notifier(struct drm_privacy_screen *priv,
+struct notifier_block *nb);
+int drm_privacy_screen_unregister_notifier(struct drm_privacy_screen *priv,
+  struct notif

[Intel-gfx] [PATCH resend 1/9] drm/connector: Add support for privacy-screen properties (v4)

2021-04-14 Thread Hans de Goede
From: Rajat Jain 

Add support for generic electronic privacy screen properties, that
can be added by systems that have an integrated EPS.

Changes in v2 (Hans de Goede)
- Create 2 properties, "privacy-screen sw-state" and
  "privacy-screen hw-state", to deal with devices where the OS might be
  locked out of making state changes
- Write kerneldoc explaining how the 2 properties work together, what
  happens when changes to the state are made outside of the DRM code's
  control, etc.

Changes in v3 (Hans de Goede)
- Some small tweaks to the kerneldoc describing the 2 properties

Changes in v4 (Hans de Goede)
- Change the "Enabled, locked" and "Disabled, locked" hw-state enum value
  names to "Enabled-locked" and "Disabled-locked". The xrandr command shows
  all possible enum values separated by commas in its output, so having a
  comma in an enum name is not a good idea.
- Do not add a privacy_screen_hw_state member to drm_connector_state
  since this property is immutable its value must be directly stored in the
  obj->properties->values array

Signed-off-by: Rajat Jain 
Co-authored-by: Hans de Goede 
Acked-by: Pekka Paalanen 
Reviewed-by: Mario Limonciello 
Signed-off-by: Hans de Goede 
---
 Documentation/gpu/drm-kms.rst |   2 +
 drivers/gpu/drm/drm_atomic_uapi.c |   4 ++
 drivers/gpu/drm/drm_connector.c   | 101 ++
 include/drm/drm_connector.h   |  44 +
 4 files changed, 151 insertions(+)

diff --git a/Documentation/gpu/drm-kms.rst b/Documentation/gpu/drm-kms.rst
index 87e5023e3f55..36943f2b0c5d 100644
--- a/Documentation/gpu/drm-kms.rst
+++ b/Documentation/gpu/drm-kms.rst
@@ -475,6 +475,8 @@ Property Types and Blob Property Support
 .. kernel-doc:: drivers/gpu/drm/drm_property.c
:export:
 
+.. _standard_connector_properties:
+
 Standard Connector Properties
 -
 
diff --git a/drivers/gpu/drm/drm_atomic_uapi.c 
b/drivers/gpu/drm/drm_atomic_uapi.c
index 268bb69c2e2f..d5339b683156 100644
--- a/drivers/gpu/drm/drm_atomic_uapi.c
+++ b/drivers/gpu/drm/drm_atomic_uapi.c
@@ -796,6 +796,8 @@ static int drm_atomic_connector_set_property(struct 
drm_connector *connector,
   fence_ptr);
} else if (property == connector->max_bpc_property) {
state->max_requested_bpc = val;
+   } else if (property == connector->privacy_screen_sw_state_property) {
+   state->privacy_screen_sw_state = val;
} else if (connector->funcs->atomic_set_property) {
return connector->funcs->atomic_set_property(connector,
state, property, val);
@@ -873,6 +875,8 @@ drm_atomic_connector_get_property(struct drm_connector 
*connector,
*val = 0;
} else if (property == connector->max_bpc_property) {
*val = state->max_requested_bpc;
+   } else if (property == connector->privacy_screen_sw_state_property) {
+   *val = state->privacy_screen_sw_state;
} else if (connector->funcs->atomic_get_property) {
return connector->funcs->atomic_get_property(connector,
state, property, val);
diff --git a/drivers/gpu/drm/drm_connector.c b/drivers/gpu/drm/drm_connector.c
index 7631f76e7f34..ca8a76decd4c 100644
--- a/drivers/gpu/drm/drm_connector.c
+++ b/drivers/gpu/drm/drm_connector.c
@@ -1244,6 +1244,46 @@ static const struct drm_prop_enum_list dp_colorspaces[] 
= {
  * For DVI-I and TVout there is also a matching property "select 
subconnector"
  * allowing to switch between signal types.
  * DP subconnector corresponds to a downstream port.
+ *
+ * privacy-screen sw-state, privacy-screen hw-state:
+ * These 2 optional properties can be used to query the state of the
+ * electronic privacy screen that is available on some displays; and in
+ * some cases also control the state. If a driver implements these
+ * properties then both properties must be present.
+ *
+ * "privacy-screen hw-state" is read-only and reflects the actual state
+ * of the privacy-screen, possible values: "Enabled", "Disabled,
+ * "Enabled-locked", "Disabled-locked". The locked states indicate
+ * that the state cannot be changed through the DRM API. E.g. there
+ * might be devices where the firmware-setup options, or a hardware
+ * slider-switch, offer always on / off modes.
+ *
+ * "privacy-screen sw-state" can be set to change the privacy-screen state
+ * when not locked. In this case the driver must update the hw-state
+ * property to reflect the new state on completion of the commit of the
+ * sw-state property. Setting the sw-state property when the hw-state is
+ * locked must be interpreted by the driver as a request to change the
+ * state to the set state when the hw-state becomes unlocked. E.g. if
+ * "privacy-screen hw-state" is "Enabled-locked" and the sw-state
+ * gets set t

[Intel-gfx] [PATCH resend 3/9] drm/privacy-screen: Add X86 specific arch init code

2021-04-14 Thread Hans de Goede
Add X86 specific arch init code, which fills the privacy-screen lookup
table by checking for various vendor specific ACPI interfaces for
controlling the privacy-screen.

This initial version only checks for the Lenovo Thinkpad specific ACPI
methods for privacy-screen control.

Signed-off-by: Hans de Goede 
---
 drivers/gpu/drm/Makefile |  5 +-
 drivers/gpu/drm/drm_privacy_screen_x86.c | 82 
 include/drm/drm_privacy_screen_machine.h |  5 ++
 3 files changed, 91 insertions(+), 1 deletion(-)
 create mode 100644 drivers/gpu/drm/drm_privacy_screen_x86.c

diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
index 9a802605249d..75166bd53e00 100644
--- a/drivers/gpu/drm/Makefile
+++ b/drivers/gpu/drm/Makefile
@@ -58,11 +58,14 @@ drm_kms_helper-$(CONFIG_DRM_DP_CEC) += drm_dp_cec.o
 obj-$(CONFIG_DRM_KMS_HELPER) += drm_kms_helper.o
 obj-$(CONFIG_DRM_DEBUG_SELFTEST) += selftests/
 
+drm_privacy_screen_helper-y := drm_privacy_screen.o
+drm_privacy_screen_helper-$(CONFIG_X86) += drm_privacy_screen_x86.o
+obj-$(CONFIG_DRM_PRIVACY_SCREEN) += drm_privacy_screen_helper.o
+
 obj-$(CONFIG_DRM)  += drm.o
 obj-$(CONFIG_DRM_MIPI_DBI) += drm_mipi_dbi.o
 obj-$(CONFIG_DRM_MIPI_DSI) += drm_mipi_dsi.o
 obj-$(CONFIG_DRM_PANEL_ORIENTATION_QUIRKS) += drm_panel_orientation_quirks.o
-obj-$(CONFIG_DRM_PRIVACY_SCREEN) += drm_privacy_screen.o
 obj-y  += arm/
 obj-$(CONFIG_DRM_TTM)  += ttm/
 obj-$(CONFIG_DRM_SCHED)+= scheduler/
diff --git a/drivers/gpu/drm/drm_privacy_screen_x86.c 
b/drivers/gpu/drm/drm_privacy_screen_x86.c
new file mode 100644
index ..f486d9087819
--- /dev/null
+++ b/drivers/gpu/drm/drm_privacy_screen_x86.c
@@ -0,0 +1,82 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright (C) 2020 Red Hat, Inc.
+ *
+ * Authors:
+ * Hans de Goede 
+ */
+
+#include 
+#include 
+
+static struct drm_privacy_screen_lookup arch_lookup;
+
+struct arch_init_data {
+   struct drm_privacy_screen_lookup lookup;
+   bool (*detect)(void);
+};
+
+static acpi_status __init acpi_set_handle(acpi_handle handle, u32 level,
+ void *context, void **return_value)
+{
+   *(acpi_handle *)return_value = handle;
+   return AE_CTRL_TERMINATE;
+}
+
+static bool __init detect_thinkpad_privacy_screen(void)
+{
+   union acpi_object obj = { .type = ACPI_TYPE_INTEGER };
+   struct acpi_object_list args = { .count = 1, .pointer = &obj, };
+   acpi_handle ec_handle = NULL;
+   unsigned long long output;
+   acpi_status status;
+
+   /* Get embedded-controller handle */
+   status = acpi_get_devices("PNP0C09", acpi_set_handle, NULL, &ec_handle);
+   if (ACPI_FAILURE(status) || !ec_handle)
+   return false;
+
+   /* And call the privacy-screen get-status method */
+   status = acpi_evaluate_integer(ec_handle, "HKEY.GSSS", &args, &output);
+   if (ACPI_FAILURE(status))
+   return false;
+
+   return (output & 0x1) ? true : false;
+}
+
+static const struct arch_init_data arch_init_data[] __initconst = {
+#if IS_ENABLED(CONFIG_THINKPAD_ACPI)
+   {
+   .lookup = {
+   .dev_id = NULL,
+   .con_id = NULL,
+   .provider = "thinkpad_acpi",
+   },
+   .detect = detect_thinkpad_privacy_screen,
+   },
+#endif
+};
+
+void __init drm_privacy_screen_arch_init(void)
+{
+   int i;
+
+   for (i = 0; i < ARRAY_SIZE(arch_init_data); i++) {
+   if (!arch_init_data[i].detect())
+   continue;
+
+   pr_info("Found '%s' privacy-screen provider\n",
+   arch_init_data[i].lookup.provider);
+
+   /* Make a copy because arch_init_data is __initconst */
+   arch_lookup = arch_init_data[i].lookup;
+   drm_privacy_screen_lookup_add(&arch_lookup);
+   break;
+   }
+}
+
+void __exit drm_privacy_screen_arch_exit(void)
+{
+   if (arch_lookup.provider)
+   drm_privacy_screen_lookup_remove(&arch_lookup);
+}
diff --git a/include/drm/drm_privacy_screen_machine.h 
b/include/drm/drm_privacy_screen_machine.h
index 55f4b4fd8e4e..0d2f2a443e8c 100644
--- a/include/drm/drm_privacy_screen_machine.h
+++ b/include/drm/drm_privacy_screen_machine.h
@@ -31,11 +31,16 @@ struct drm_privacy_screen_lookup {
 void drm_privacy_screen_lookup_add(struct drm_privacy_screen_lookup *lookup);
 void drm_privacy_screen_lookup_remove(struct drm_privacy_screen_lookup 
*lookup);
 
+#ifdef CONFIG_X86
+void drm_privacy_screen_arch_init(void);
+void drm_privacy_screen_arch_exit(void);
+#else
 static inline void drm_privacy_screen_arch_init(void)
 {
 }
 static inline void drm_privacy_screen_arch_exit(void)
 {
 }
+#endif
 
 #endif
-- 
2.31.1

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

[Intel-gfx] [PATCH resend 2/9] drm: Add privacy-screen class

2021-04-14 Thread Hans de Goede
On some new laptops the LCD panel has a builtin electronic privacy-screen.
We want to export this functionality as a property on the drm connector
object. But often this functionality is not exposed on the GPU but on some
other (ACPI) device.

This commit adds a privacy-screen class allowing the driver for these
other devices to register themselves as a privacy-screen provider; and
allowing the drm/kms code to get a privacy-screen provider associated
with a specific GPU/connector combo.

Signed-off-by: Hans de Goede 
---
 Documentation/gpu/drm-kms-helpers.rst |  15 +
 MAINTAINERS   |   8 +
 drivers/gpu/drm/Kconfig   |   5 +
 drivers/gpu/drm/Makefile  |   1 +
 drivers/gpu/drm/drm_privacy_screen.c  | 426 ++
 include/drm/drm_privacy_screen_consumer.h |  27 ++
 include/drm/drm_privacy_screen_driver.h   |  80 
 include/drm/drm_privacy_screen_machine.h  |  41 +++
 8 files changed, 603 insertions(+)
 create mode 100644 drivers/gpu/drm/drm_privacy_screen.c
 create mode 100644 include/drm/drm_privacy_screen_consumer.h
 create mode 100644 include/drm/drm_privacy_screen_driver.h
 create mode 100644 include/drm/drm_privacy_screen_machine.h

diff --git a/Documentation/gpu/drm-kms-helpers.rst 
b/Documentation/gpu/drm-kms-helpers.rst
index 389892f36185..5d8715d2f998 100644
--- a/Documentation/gpu/drm-kms-helpers.rst
+++ b/Documentation/gpu/drm-kms-helpers.rst
@@ -423,3 +423,18 @@ Legacy CRTC/Modeset Helper Functions Reference
 
 .. kernel-doc:: drivers/gpu/drm/drm_crtc_helper.c
:export:
+
+Privacy-screen class
+
+
+.. kernel-doc:: drivers/gpu/drm/drm_privacy_screen.c
+   :doc: overview
+
+.. kernel-doc:: include/drm/drm_privacy_screen_driver.h
+   :internal:
+
+.. kernel-doc:: include/drm/drm_privacy_screen_machine.h
+   :internal:
+
+.. kernel-doc:: drivers/gpu/drm/drm_privacy_screen.c
+   :export:
diff --git a/MAINTAINERS b/MAINTAINERS
index 7c45120759e6..8220295b2670 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -6129,6 +6129,14 @@ F:   drivers/gpu/drm/drm_panel.c
 F: drivers/gpu/drm/panel/
 F: include/drm/drm_panel.h
 
+DRM PRIVACY-SCREEN CLASS
+M: Hans de Goede 
+L: dri-de...@lists.freedesktop.org
+S: Maintained
+T: git git://anongit.freedesktop.org/drm/drm-misc
+F: drivers/gpu/drm/drm_privacy_screen*
+F: include/drm/drm_privacy_screen*
+
 DRM TTM SUBSYSTEM
 M: Christian Koenig 
 M: Huang Rui 
diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
index 3c16bd1afd87..da25ff3a0a34 100644
--- a/drivers/gpu/drm/Kconfig
+++ b/drivers/gpu/drm/Kconfig
@@ -474,3 +474,8 @@ config DRM_PANEL_ORIENTATION_QUIRKS
 config DRM_LIB_RANDOM
bool
default n
+
+# Separate option, used by drivers outside of drivers/gpu/drm
+config DRM_PRIVACY_SCREEN
+   tristate
+   default n
diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
index 5279db4392df..9a802605249d 100644
--- a/drivers/gpu/drm/Makefile
+++ b/drivers/gpu/drm/Makefile
@@ -62,6 +62,7 @@ obj-$(CONFIG_DRM) += drm.o
 obj-$(CONFIG_DRM_MIPI_DBI) += drm_mipi_dbi.o
 obj-$(CONFIG_DRM_MIPI_DSI) += drm_mipi_dsi.o
 obj-$(CONFIG_DRM_PANEL_ORIENTATION_QUIRKS) += drm_panel_orientation_quirks.o
+obj-$(CONFIG_DRM_PRIVACY_SCREEN) += drm_privacy_screen.o
 obj-y  += arm/
 obj-$(CONFIG_DRM_TTM)  += ttm/
 obj-$(CONFIG_DRM_SCHED)+= scheduler/
diff --git a/drivers/gpu/drm/drm_privacy_screen.c 
b/drivers/gpu/drm/drm_privacy_screen.c
new file mode 100644
index ..6296fd46156c
--- /dev/null
+++ b/drivers/gpu/drm/drm_privacy_screen.c
@@ -0,0 +1,426 @@
+// SPDX-License-Identifier: MIT
+/*
+ * Copyright (C) 2020 Red Hat, Inc.
+ *
+ * Authors:
+ * Hans de Goede 
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+/**
+ * DOC: overview
+ *
+ * This class allows non KMS drivers, from e.g. drivers/platform/x86 to
+ * register a privacy-screen device, which the KMS drivers can then use
+ * to implement the standard privacy-screen properties, see
+ * :ref:`Standard Connector Properties`.
+ *
+ * KMS drivers using a privacy-screen class device are advised to use the
+ * drm_connector_attach_privacy_screen_provider() and
+ * drm_connector_update_privacy_screen() helpers for dealing with this.
+ */
+
+#define to_drm_privacy_screen(dev) \
+   container_of(dev, struct drm_privacy_screen, dev)
+
+static DEFINE_MUTEX(drm_privacy_screen_lookup_lock);
+static LIST_HEAD(drm_privacy_screen_lookup_list);
+
+static DEFINE_MUTEX(drm_privacy_screen_devs_lock);
+static LIST_HEAD(drm_privacy_screen_devs);
+
+/*** drm_privacy_screen_machine.h functions ***/
+
+/**
+ * drm_privacy_screen_lookup_add - add an entry to the static privacy-screen
+ *lookup list
+ * @lookup: lookup list entry to add
+ *
+ * Add an entry to the static privacy-screen lookup list. Note the
+ * &struct list_head which is part of the &struct drm_privacy_scr

[Intel-gfx] [PATCH resend 0/9] drm: Add privacy-screen class and connector properties

2021-04-14 Thread Hans de Goede
Hi All,

Here is the privacy-screen related code which I last posted in August
of last year. To the best of my knowledge there is consensus about /
everyone is in agreement with the new userspace API (2 connector properties)
this patch-set add (patch 1 of the series).

The blocker the last time was that there were no userspace users of
the new properties and as a rule we don't add new drm userspace API
without users.

There now is GNOME userspace code using the new properties:
https://hackmd.io/@3v1n0/rkyIy3BOw

The new API works as designed for this userspace user and the branches
mentioned at the above link add the following features to GNOME:

1. Showing an OSD notification when the privacy-screen is toggled on/off
   through hotkeys handled by the embedded-controller
2. Allowing control of the privacy-screen from the GNOME control-panel,
   including the on/off slider shown there updating to match the hw-setting
   when the setting is changed with the control-panel open.
3. Restoring the last user-setting at login

This series consists of a number of different parts:

1. A new version of Rajat's privacy-screen connector properties patch,
this adds new userspace API in the form of new properties

2. Since on most devices the privacy screen is actually controlled by
some vendor specific ACPI/WMI interface which has a driver under
drivers/platform/x86, we need some "glue" code to make this functionality
available to KMS drivers. Patches 2-4 add a new privacy-screen class for
this, which allows non KMS drivers (and possibly KMS drivers too) to
register a privacy-screen device and also adds an interface for KMS drivers
to get access to the privacy-screen associated with a specific connector.
This is modelled similar to how we deal with e.g. PWMs and GPIOs in the
kernel, including separate includes for consumers and providers(drivers).

3. Some drm_connector helper functions to keep the actual changes needed
for this in individual KMS drivers as small as possible (patch 5).

4. Make the thinkpad_acpi code register a privacy-screen device on
ThinkPads with a privacy-screen (patches 6-8)

5. Make the i915 driver export the privacy-screen functionality through
the connector properties on the eDP connector.

I believe that it would be best to merge the entire series, including
the thinkpad_acpi changes through drm-misc in one go. As the pdx86
subsys maintainer I hereby give my ack for merging the thinkpad_acpi
changes through drm-misc.

There is one small caveat with this series, which it is good to be
aware of. The i915 driver will now return -EPROBE_DEFER on Thinkpads
with an eprivacy screen, until the thinkpad_acpi driver is loaded.
This means that initrd generation tools will need to be updated to
include thinkpad_acpi when the i915 driver is added to the initrd.
Without this the loading of the i915 driver will be delayed to after
the switch to real rootfs.

Regards,

Hans


Hans de Goede (8):
  drm: Add privacy-screen class
  drm/privacy-screen: Add X86 specific arch init code
  drm/privacy-screen: Add notifier support
  drm/connector: Add a drm_connector privacy-screen helper functions
  platform/x86: thinkpad_acpi: Add hotkey_notify_extended_hotkey()
helper
  platform/x86: thinkpad_acpi: Get privacy-screen / lcdshadow ACPI
handles only once
  platform/x86: thinkpad_acpi: Register a privacy-screen device
  drm/i915: Add privacy-screen support

Rajat Jain (1):
  drm/connector: Add support for privacy-screen properties (v4)

 Documentation/gpu/drm-kms-helpers.rst|  15 +
 Documentation/gpu/drm-kms.rst|   2 +
 MAINTAINERS  |   8 +
 drivers/gpu/drm/Kconfig  |   5 +
 drivers/gpu/drm/Makefile |   4 +
 drivers/gpu/drm/drm_atomic_uapi.c|   4 +
 drivers/gpu/drm/drm_connector.c  | 214 
 drivers/gpu/drm/drm_privacy_screen.c | 493 +++
 drivers/gpu/drm/drm_privacy_screen_x86.c |  82 +++
 drivers/gpu/drm/i915/display/intel_display.c |   5 +
 drivers/gpu/drm/i915/display/intel_dp.c  |  10 +
 drivers/gpu/drm/i915/i915_pci.c  |  12 +
 drivers/platform/x86/Kconfig |   1 +
 drivers/platform/x86/thinkpad_acpi.c | 131 +++--
 include/drm/drm_connector.h  |  56 +++
 include/drm/drm_privacy_screen_consumer.h|  32 ++
 include/drm/drm_privacy_screen_driver.h  |  84 
 include/drm/drm_privacy_screen_machine.h |  46 ++
 18 files changed, 1162 insertions(+), 42 deletions(-)
 create mode 100644 drivers/gpu/drm/drm_privacy_screen.c
 create mode 100644 drivers/gpu/drm/drm_privacy_screen_x86.c
 create mode 100644 include/drm/drm_privacy_screen_consumer.h
 create mode 100644 include/drm/drm_privacy_screen_driver.h
 create mode 100644 include/drm/drm_privacy_screen_machine.h

-- 
2.31.1

___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesk

Re: [Intel-gfx] [PATCH 06/19] drm/i915/stolen: pass the allocation flags

2021-04-14 Thread Tvrtko Ursulin



On 12/04/2021 10:05, Matthew Auld wrote:

From: CQ Tang 

Stolen memory is always allocated as physically contiguous pages, mark
the object flags as such.

Signed-off-by: CQ Tang 
Signed-off-by: Matthew Auld 
---
  drivers/gpu/drm/i915/gem/i915_gem_stolen.c | 10 ++
  1 file changed, 6 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c 
b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
index f713eabb7671..49a2dfcc8ba7 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
@@ -633,14 +633,15 @@ static const struct drm_i915_gem_object_ops 
i915_gem_object_stolen_ops = {
  
  static int __i915_gem_object_create_stolen(struct intel_memory_region *mem,

   struct drm_i915_gem_object *obj,
-  struct drm_mm_node *stolen)
+  struct drm_mm_node *stolen,
+  unsigned int flags)
  {
static struct lock_class_key lock_class;
unsigned int cache_level;
int err;
  
  	drm_gem_private_object_init(&mem->i915->drm, &obj->base, stolen->size);

-   i915_gem_object_init(obj, &i915_gem_object_stolen_ops, &lock_class, 0);
+   i915_gem_object_init(obj, &i915_gem_object_stolen_ops, &lock_class, 
flags);
  
  	obj->stolen = stolen;

obj->read_domains = I915_GEM_DOMAIN_CPU | I915_GEM_DOMAIN_GTT;
@@ -682,7 +683,7 @@ static int _i915_gem_object_stolen_init(struct 
intel_memory_region *mem,
if (ret)
goto err_free;
  
-	ret = __i915_gem_object_create_stolen(mem, obj, stolen);

+   ret = __i915_gem_object_create_stolen(mem, obj, stolen, flags);
if (ret)
goto err_remove;
  
@@ -840,7 +841,8 @@ i915_gem_object_create_stolen_for_preallocated(struct drm_i915_private *i915,

goto err_stolen;
}
  
-	ret = __i915_gem_object_create_stolen(mem, obj, stolen);

+   ret = __i915_gem_object_create_stolen(mem, obj, stolen,
+ I915_BO_ALLOC_CONTIGUOUS);
if (ret)
goto err_object_free;
  



Are all stolen objects always contiguous or only ones allocated by 
i915_gem_object_create_stolen_for_preallocated? If former should 
__i915_gem_object_create_stolen just set the flag without the need to 
pass it in?


Regards,

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


Re: [Intel-gfx] [PATCH 2/8] drm/i915: Rewrite the FBC tiling check a bit

2021-04-14 Thread Jani Nikula
On Wed, 14 Apr 2021, Ville Syrjala  wrote:
> From: Ville Syrjälä 
>
> Write the tiling check in a nicer form.
>
> Signed-off-by: Ville Syrjälä 
> ---
>  drivers/gpu/drm/i915/display/intel_fbc.c | 6 ++
>  1 file changed, 2 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/display/intel_fbc.c 
> b/drivers/gpu/drm/i915/display/intel_fbc.c
> index 04d9c7d22b04..178243a6d3a2 100644
> --- a/drivers/gpu/drm/i915/display/intel_fbc.c
> +++ b/drivers/gpu/drm/i915/display/intel_fbc.c
> @@ -681,11 +681,9 @@ static bool tiling_is_valid(struct drm_i915_private 
> *dev_priv,
>  {
>   switch (modifier) {
>   case DRM_FORMAT_MOD_LINEAR:
> - if (DISPLAY_VER(dev_priv) >= 9)
> - return true;
> - return false;
> - case I915_FORMAT_MOD_X_TILED:
>   case I915_FORMAT_MOD_Y_TILED:
> + return DISPLAY_VER(dev_priv) >= 9;

So this adds the version check on I915_FORMAT_MOD_Y_TILED which didn't
have it before?

BR,
Jani.


> + case I915_FORMAT_MOD_X_TILED:
>   return true;
>   default:
>   return false;

-- 
Jani Nikula, Intel Open Source Graphics Center
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx


Re: [Intel-gfx] [PATCH 05/19] drm/i915/stolen: enforce the min_page_size contract

2021-04-14 Thread Tvrtko Ursulin



On 12/04/2021 10:05, Matthew Auld wrote:

From: CQ Tang 

Since stolen can now be device local-memory underneath, we should try to
enforce any min_page_size restrictions when allocating pages.

Signed-off-by: CQ Tang 
Signed-off-by: Matthew Auld 
---
  drivers/gpu/drm/i915/gem/i915_gem_stolen.c | 7 ---
  1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c 
b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
index 56dd58bef5ee..f713eabb7671 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
@@ -677,7 +677,8 @@ static int _i915_gem_object_stolen_init(struct 
intel_memory_region *mem,
if (!stolen)
return -ENOMEM;
  
-	ret = i915_gem_stolen_insert_node(i915, stolen, size, 4096);

+   ret = i915_gem_stolen_insert_node(i915, stolen, size,
+ mem->min_page_size);
if (ret)
goto err_free;
  
@@ -817,8 +818,8 @@ i915_gem_object_create_stolen_for_preallocated(struct drm_i915_private *i915,
  
  	/* KISS and expect everything to be page-aligned */

if (GEM_WARN_ON(size == 0) ||
-   GEM_WARN_ON(!IS_ALIGNED(size, I915_GTT_PAGE_SIZE)) ||
-   GEM_WARN_ON(!IS_ALIGNED(stolen_offset, I915_GTT_MIN_ALIGNMENT)))
+   GEM_WARN_ON(!IS_ALIGNED(size, mem->min_page_size)) ||
+   GEM_WARN_ON(!IS_ALIGNED(stolen_offset, mem->min_page_size)))
return ERR_PTR(-EINVAL);
  
  	stolen = kzalloc(sizeof(*stolen), GFP_KERNEL);




Reviewed-by: Tvrtko Ursulin 

Regards,

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


Re: [Intel-gfx] [PATCH 04/19] drm/i915/stolen: treat stolen local as normal local memory

2021-04-14 Thread Tvrtko Ursulin



On 12/04/2021 10:05, Matthew Auld wrote:

Underneath it's the same stuff, so things like the PTE_LM bits for the
GTT should just keep working as-is.

Signed-off-by: Matthew Auld 
---
  drivers/gpu/drm/i915/gem/i915_gem_lmem.c | 5 -
  1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_lmem.c 
b/drivers/gpu/drm/i915/gem/i915_gem_lmem.c
index ce1c83c13d05..017db8f71130 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_lmem.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_lmem.c
@@ -19,7 +19,10 @@ const struct drm_i915_gem_object_ops i915_gem_lmem_obj_ops = 
{
  
  bool i915_gem_object_is_lmem(struct drm_i915_gem_object *obj)

  {
-   return obj->ops == &i915_gem_lmem_obj_ops;
+   struct intel_memory_region *mr = obj->mm.region;
+
+   return mr && (mr->type == INTEL_MEMORY_LOCAL ||
+ mr->type == INTEL_MEMORY_STOLEN_LOCAL);
  }
  
  struct drm_i915_gem_object *




Passable I guess. Although there is also i915_gem_object_is_stolen so it 
is not immediately clear what are the semantics of 
i915_gem_object_is_lmem vs that one. Almost like we need more 
"hierarchy" in region types, or flags of some sort, but I haven't looked 
at the callers to have a good idea what would work best.


Reviewed-by: Tvrtko Ursulin 

Regards,

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


Re: [Intel-gfx] [PATCH 03/19] drm/i915: Create stolen memory region from local memory

2021-04-14 Thread Tvrtko Ursulin



On 12/04/2021 10:05, Matthew Auld wrote:

From: CQ Tang 

Add "REGION_STOLEN" device info to dg1, create stolen memory
region from upper portion of local device memory, starting
from DSMBASE.

v2:
 - s/drm_info/drm_dbg; userspace likely doesn't care about stolen.
 - mem->type is only setup after the region probe, so setting the name
   as stolen-local or stolen-system based on this value won't work. Split
   system vs local stolen setup to fix this.
 - kill all the region->devmem/is_devmem stuff. We already differentiate
   the different types of stolen so such things shouldn't be needed
   anymore.

Signed-off-by: CQ Tang 
Signed-off-by: Matthew Auld 
---
  drivers/gpu/drm/i915/gem/i915_gem_stolen.c | 99 +++---
  drivers/gpu/drm/i915/gem/i915_gem_stolen.h |  3 +
  drivers/gpu/drm/i915/i915_pci.c|  2 +-
  drivers/gpu/drm/i915/i915_reg.h|  1 +
  drivers/gpu/drm/i915/intel_memory_region.c |  6 ++
  drivers/gpu/drm/i915/intel_memory_region.h |  5 +-
  6 files changed, 102 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c 
b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
index b0597de206de..56dd58bef5ee 100644
--- a/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
+++ b/drivers/gpu/drm/i915/gem/i915_gem_stolen.c
@@ -10,6 +10,7 @@
  #include 
  #include 
  
+#include "gem/i915_gem_lmem.h"

  #include "gem/i915_gem_region.h"
  #include "i915_drv.h"
  #include "i915_gem_stolen.h"
@@ -121,6 +122,14 @@ static int i915_adjust_stolen(struct drm_i915_private 
*i915,
}
}
  
+	/*

+* With device local memory, we don't need to check the address range,
+* this is device memory physical address, could overlap with system
+* memory.
+*/
+   if (HAS_LMEM(i915))
+   return 0;
+
/*
 * Verify that nothing else uses this physical address. Stolen
 * memory should be reserved by the BIOS and hidden from the
@@ -374,8 +383,9 @@ static void icl_get_stolen_reserved(struct drm_i915_private 
*i915,
}
  }
  
-static int i915_gem_init_stolen(struct drm_i915_private *i915)

+static int i915_gem_init_stolen(struct intel_memory_region *mem)
  {
+   struct drm_i915_private *i915 = mem->i915;
struct intel_uncore *uncore = &i915->uncore;
resource_size_t reserved_base, stolen_top;
resource_size_t reserved_total, reserved_size;
@@ -396,10 +406,10 @@ static int i915_gem_init_stolen(struct drm_i915_private 
*i915)
return 0;
}
  
-	if (resource_size(&intel_graphics_stolen_res) == 0)

+   if (resource_size(&mem->region) == 0)
return 0;
  
-	i915->dsm = intel_graphics_stolen_res;

+   i915->dsm = mem->region;
  
  	if (i915_adjust_stolen(i915, &i915->dsm))

return 0;
@@ -684,23 +694,36 @@ static int _i915_gem_object_stolen_init(struct 
intel_memory_region *mem,
return ret;
  }
  
+struct intel_memory_region *i915_stolen_region(struct drm_i915_private *i915)

+{
+   if (HAS_LMEM(i915))
+   return i915->mm.regions[INTEL_REGION_STOLEN_LMEM];
+
+   return i915->mm.regions[INTEL_REGION_STOLEN_SMEM];
+}


Could be a bikeshedding comment only - especially since I think this 
path gets very little used at runtime so it is most likely pointless to 
fiddle with it, but it just strikes me a bit not fully elegant to do:


i915_gem_object_create_stolen
 -> i915_gem_object_create_region
-> i915_stolen_region

And end up in here, when alternative could be at driver init:

i915->stolen_region_id = HAS_LMEM() ? ... : ...;

i915_gem_object_create_stolen
 -> 
i915_gem_object_create_region(i915->mm.regions[i915->stolen_region_id]);


Or pointer to region. Would avoid having to export i915_stolen_region as 
well.


Or is i915->dsm already the right thing? Because..


+
  struct drm_i915_gem_object *
  i915_gem_object_create_stolen(struct drm_i915_private *i915,
  resource_size_t size)
  {
-   return 
i915_gem_object_create_region(i915->mm.regions[INTEL_REGION_STOLEN_SMEM],
+   return i915_gem_object_create_region(i915_stolen_region(i915),
 size, I915_BO_ALLOC_CONTIGUOUS);
  }
  
  static int init_stolen(struct intel_memory_region *mem)

  {
-   intel_memory_region_set_name(mem, "stolen");
+   if (HAS_LMEM(mem->i915)) {
+   if (!io_mapping_init_wc(&mem->iomap,
+   mem->io_start,
+   resource_size(&mem->region)))
+   return -EIO;
+   }
  
  	/*

 * Initialise stolen early so that we may reserve preallocated
 * objects for the BIOS to KMS transition.
 */
-   return i915_gem_init_stolen(mem->i915);
+   return i915_gem_init_stolen(mem);


... I find the mem region init paths a bit convoluted, stolen 
especially, and struggle to fig

Re: [Intel-gfx] [PATCH v2 08/12] drm/i915: finish removal of gen_mask

2021-04-14 Thread Tvrtko Ursulin



On 14/04/2021 14:13, Jani Nikula wrote:

On Wed, 14 Apr 2021, Tvrtko Ursulin  wrote:

On 13/04/2021 06:09, Lucas De Marchi wrote:

Now that it's not used anywhere, remove it from struct
intel_device_info. To allow a period in which code will be converted to
the new macro, keep IS_GEN_RANGE() around, just redefining it to use
the new fields. The size advantage from IS_GEN_RANGE() using a mask is
not that big as it has pretty limited use througout the driver:

 textdata bss dec hex filename
2758497   959656496 2860958  2ba79e drivers/gpu/drm/i915/i915.ko.old
2758586   959536496 2861035  2ba7eb drivers/gpu/drm/i915/i915.ko.new


This delta refers to this patch - I mean this point in the series?
Asking because it may not be 100% representative since some of the
previous patches have already removed some gen mask usages.

While I am here, I am a bit fond of the mask approach and wonder if
using it for all (gt/media/whatelse) new fields would still make sense.

Presence of the range check helpers suggests that it might, but I
haven't looked at how prevalent their usage ends up after the series is
done. So just in principle, I don't see why not still go with masks
since that guarantees elegant check at each range check site. It would
be all hidden in the macro implementation so easy.

Also for historical reference, another reason why I went for masks
everywhere approach is that at some point we had a feature request to
allow compiling out platforms/gens. I *think* that was much easier to do
with masking and in experiments back then I was able for instance to
build just for Gen9+ and drop like 30% of the binary size.

Oh I found the branch now.. The reason for IS_GEN(p, v) was also in that
series. I don't know if I ever RFC-ed or trybotted it.. google suggests
no and I neither can find it in my mailboxes. I could send out the old
patches for reference? But to be honest I have no idea if this feature
request (targeted driver builds) will ever resurface..


I completely agreed with the direction of using the masks way back when,
especially with the goal of the conditional/targeted compilation.

I think the question now is whether we want to keep maintaining them
just for the sake of the masks. Keeping them means having three masks
instead of one. And we wouldn't be using most of the benefits with them,
we'd mostly just get the downsides.

Having the masks per se is not such a big deal, but they're also not
such a big deal to add back later on if needed. It's the codebase all
over that's the hard part. And arguably it's not getting that much
different with the series at hand; the direct uses of INTEL_GEN() and
DISPLAY_VER() vastly outnumber IS_GEN(), IS_GEN_RANGE() and
IS_DISPLAY_RANGE() which could benefit from the mask.

We'd still be retaining the range macros as IS_GRAPHICS_VER(),
IS_MEDIA_VER() and IS_DISPLAY_VER(), although more for clarity than for
any other reason.


Adding masks later would not a big deal, but another cycle of changing 
"xxx_VER == n" to "IS_xxx_VER(n)" is a churn which could presumably be 
avoided.


It is moot yes, but I don't see a clear case for doing the reversal as 
part of this series. With a disclaimer that I only glanced over the 
commit messages today for the first time.


So I think from me its neither ack or nack, at least since I don't 
understand the attractiveness of using the "ver == n" and numerical 
range check forms everywhere. As said, if we are churning I'd rather go 
the other direction. But that's a soft objection only so feel free to 
proceed.


Regards,

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


Re: [Intel-gfx] [PATCH v2 08/12] drm/i915: finish removal of gen_mask

2021-04-14 Thread Jani Nikula
On Wed, 14 Apr 2021, Tvrtko Ursulin  wrote:
> On 13/04/2021 06:09, Lucas De Marchi wrote:
>> Now that it's not used anywhere, remove it from struct
>> intel_device_info. To allow a period in which code will be converted to
>> the new macro, keep IS_GEN_RANGE() around, just redefining it to use
>> the new fields. The size advantage from IS_GEN_RANGE() using a mask is
>> not that big as it has pretty limited use througout the driver:
>> 
>> textdata bss dec hex filename
>> 2758497   959656496 2860958  2ba79e drivers/gpu/drm/i915/i915.ko.old
>> 2758586   959536496 2861035  2ba7eb drivers/gpu/drm/i915/i915.ko.new
>
> This delta refers to this patch - I mean this point in the series? 
> Asking because it may not be 100% representative since some of the 
> previous patches have already removed some gen mask usages.
>
> While I am here, I am a bit fond of the mask approach and wonder if 
> using it for all (gt/media/whatelse) new fields would still make sense.
>
> Presence of the range check helpers suggests that it might, but I 
> haven't looked at how prevalent their usage ends up after the series is 
> done. So just in principle, I don't see why not still go with masks 
> since that guarantees elegant check at each range check site. It would 
> be all hidden in the macro implementation so easy.
>
> Also for historical reference, another reason why I went for masks 
> everywhere approach is that at some point we had a feature request to 
> allow compiling out platforms/gens. I *think* that was much easier to do 
> with masking and in experiments back then I was able for instance to 
> build just for Gen9+ and drop like 30% of the binary size.
>
> Oh I found the branch now.. The reason for IS_GEN(p, v) was also in that 
> series. I don't know if I ever RFC-ed or trybotted it.. google suggests 
> no and I neither can find it in my mailboxes. I could send out the old 
> patches for reference? But to be honest I have no idea if this feature 
> request (targeted driver builds) will ever resurface..

I completely agreed with the direction of using the masks way back when,
especially with the goal of the conditional/targeted compilation.

I think the question now is whether we want to keep maintaining them
just for the sake of the masks. Keeping them means having three masks
instead of one. And we wouldn't be using most of the benefits with them,
we'd mostly just get the downsides.

Having the masks per se is not such a big deal, but they're also not
such a big deal to add back later on if needed. It's the codebase all
over that's the hard part. And arguably it's not getting that much
different with the series at hand; the direct uses of INTEL_GEN() and
DISPLAY_VER() vastly outnumber IS_GEN(), IS_GEN_RANGE() and
IS_DISPLAY_RANGE() which could benefit from the mask.

We'd still be retaining the range macros as IS_GRAPHICS_VER(),
IS_MEDIA_VER() and IS_DISPLAY_VER(), although more for clarity than for
any other reason.


BR,
Jani.


-- 
Jani Nikula, Intel Open Source Graphics Center
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx


[Intel-gfx] ✓ Fi.CI.BAT: success for drm/i915: Fix "mitigations" parsing if i915 is builtin (rev2)

2021-04-14 Thread Patchwork
== Series Details ==

Series: drm/i915: Fix "mitigations" parsing if i915 is builtin (rev2)
URL   : https://patchwork.freedesktop.org/series/88998/
State : success

== Summary ==

CI Bug Log - changes from CI_DRM_9971 -> Patchwork_19937


Summary
---

  **SUCCESS**

  No regressions found.

  External URL: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19937/index.html

Known issues


  Here are the changes found in Patchwork_19937 that come from known issues:

### IGT changes ###

 Issues hit 

  * igt@amdgpu/amd_basic@semaphore:
- fi-bsw-nick:NOTRUN -> [SKIP][1] ([fdo#109271]) +17 similar issues
   [1]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19937/fi-bsw-nick/igt@amdgpu/amd_ba...@semaphore.html

  * igt@amdgpu/amd_cs_nop@sync-fork-compute0:
- fi-snb-2600:NOTRUN -> [SKIP][2] ([fdo#109271]) +17 similar issues
   [2]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19937/fi-snb-2600/igt@amdgpu/amd_cs_...@sync-fork-compute0.html

  * igt@i915_selftest@live@gt_heartbeat:
- fi-tgl-y:   [PASS][3] -> [DMESG-FAIL][4] ([i915#541])
   [3]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9971/fi-tgl-y/igt@i915_selftest@live@gt_heartbeat.html
   [4]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19937/fi-tgl-y/igt@i915_selftest@live@gt_heartbeat.html

  * igt@kms_chamelium@dp-crc-fast:
- fi-kbl-7500u:   [PASS][5] -> [FAIL][6] ([i915#1372])
   [5]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9971/fi-kbl-7500u/igt@kms_chamel...@dp-crc-fast.html
   [6]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19937/fi-kbl-7500u/igt@kms_chamel...@dp-crc-fast.html

  
 Possible fixes 

  * igt@i915_selftest@live@execlists:
- fi-bsw-nick:[INCOMPLETE][7] ([i915#2782] / [i915#2940]) -> 
[PASS][8]
   [7]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9971/fi-bsw-nick/igt@i915_selftest@l...@execlists.html
   [8]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19937/fi-bsw-nick/igt@i915_selftest@l...@execlists.html

  * igt@i915_selftest@live@hangcheck:
- fi-snb-2600:[INCOMPLETE][9] ([i915#2782]) -> [PASS][10]
   [9]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9971/fi-snb-2600/igt@i915_selftest@l...@hangcheck.html
   [10]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19937/fi-snb-2600/igt@i915_selftest@l...@hangcheck.html

  
 Warnings 

  * igt@i915_pm_rpm@basic-rte:
- fi-kbl-guc: [FAIL][11] ([i915#579]) -> [SKIP][12] ([fdo#109271])
   [11]: 
https://intel-gfx-ci.01.org/tree/drm-tip/CI_DRM_9971/fi-kbl-guc/igt@i915_pm_...@basic-rte.html
   [12]: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19937/fi-kbl-guc/igt@i915_pm_...@basic-rte.html

  
  [fdo#109271]: https://bugs.freedesktop.org/show_bug.cgi?id=109271
  [i915#1372]: https://gitlab.freedesktop.org/drm/intel/issues/1372
  [i915#2782]: https://gitlab.freedesktop.org/drm/intel/issues/2782
  [i915#2940]: https://gitlab.freedesktop.org/drm/intel/issues/2940
  [i915#541]: https://gitlab.freedesktop.org/drm/intel/issues/541
  [i915#579]: https://gitlab.freedesktop.org/drm/intel/issues/579


Participating hosts (45 -> 41)
--

  Missing(4): fi-icl-y fi-ilk-m540 fi-bsw-cyan fi-bdw-samus 


Build changes
-

  * Linux: CI_DRM_9971 -> Patchwork_19937

  CI-20190529: 20190529
  CI_DRM_9971: 8f38b366ca75c83434d586430306b9f83499f1b2 @ 
git://anongit.freedesktop.org/gfx-ci/linux
  IGT_6064: 48d89e2c65c54883b0776930a884e6d3bcefb45b @ 
git://anongit.freedesktop.org/xorg/app/intel-gpu-tools
  Patchwork_19937: fbfc58ce6f5e7ebb4a633166f528c4567f0f7f8f @ 
git://anongit.freedesktop.org/gfx-ci/linux


== Linux commits ==

fbfc58ce6f5e drm/i915: Fix "mitigations" parsing if i915 is builtin

== Logs ==

For more details see: 
https://intel-gfx-ci.01.org/tree/drm-tip/Patchwork_19937/index.html
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx


[Intel-gfx] ✗ Fi.CI.DOCS: warning for drm/i915: Fix "mitigations" parsing if i915 is builtin (rev2)

2021-04-14 Thread Patchwork
== Series Details ==

Series: drm/i915: Fix "mitigations" parsing if i915 is builtin (rev2)
URL   : https://patchwork.freedesktop.org/series/88998/
State : warning

== Summary ==

$ make htmldocs 2>&1 > /dev/null | grep i915
./drivers/gpu/drm/i915/gem/i915_gem_shrinker.c:102: warning: Function parameter 
or member 'ww' not described in 'i915_gem_shrink'
./drivers/gpu/drm/i915/i915_cmd_parser.c:1420: warning: Excess function 
parameter 'trampoline' description in 'intel_engine_cmd_parser'
./drivers/gpu/drm/i915/i915_cmd_parser.c:1420: warning: Function parameter or 
member 'jump_whitelist' not described in 'intel_engine_cmd_parser'
./drivers/gpu/drm/i915/i915_cmd_parser.c:1420: warning: Function parameter or 
member 'shadow_map' not described in 'intel_engine_cmd_parser'
./drivers/gpu/drm/i915/i915_cmd_parser.c:1420: warning: Function parameter or 
member 'batch_map' not described in 'intel_engine_cmd_parser'
./drivers/gpu/drm/i915/i915_cmd_parser.c:1420: warning: Excess function 
parameter 'trampoline' description in 'intel_engine_cmd_parser'


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


[Intel-gfx] ✗ Fi.CI.BUILD: failure for drm/i915/gt: Fix a lockdep warnning on RT kernel

2021-04-14 Thread Patchwork
== Series Details ==

Series: drm/i915/gt: Fix a lockdep warnning on RT kernel
URL   : https://patchwork.freedesktop.org/series/89071/
State : failure

== Summary ==

Applying: drm/i915/gt: Fix a lockdep warning on RT kernel
error: sha1 information is lacking or useless 
(drivers/gpu/drm/i915/gt/intel_breadcrumbs.c).
error: could not build fake ancestor
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 drm/i915/gt: Fix a lockdep warning on RT kernel
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".


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


[Intel-gfx] ✗ Fi.CI.BUILD: failure for drm/i915/gt: Fix a lockdep warnning on RT kernel

2021-04-14 Thread Patchwork
== Series Details ==

Series: drm/i915/gt: Fix a lockdep warnning on RT kernel
URL   : https://patchwork.freedesktop.org/series/89070/
State : failure

== Summary ==

Applying: drm/i915/gt: Fix a lockdep warnning on RT kernel
error: sha1 information is lacking or useless 
(drivers/gpu/drm/i915/gt/intel_breadcrumbs.c).
error: could not build fake ancestor
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 drm/i915/gt: Fix a lockdep warnning on RT kernel
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".


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


[Intel-gfx] ✗ Fi.CI.BUILD: failure for Old platform/gen kconfig options series

2021-04-14 Thread Patchwork
== Series Details ==

Series: Old platform/gen kconfig options series
URL   : https://patchwork.freedesktop.org/series/89069/
State : failure

== Summary ==

Applying: drm/i915: Make I830 platform support optional
Using index info to reconstruct a base tree...
M   drivers/gpu/drm/i915/Kconfig
M   drivers/gpu/drm/i915/i915_drv.h
M   drivers/gpu/drm/i915/i915_pci.c
Falling back to patching base and 3-way merge...
Auto-merging drivers/gpu/drm/i915/i915_pci.c
CONFLICT (content): Merge conflict in drivers/gpu/drm/i915/i915_pci.c
Auto-merging drivers/gpu/drm/i915/i915_drv.h
Auto-merging drivers/gpu/drm/i915/Kconfig
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0001 drm/i915: Make I830 platform support optional
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".


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


[Intel-gfx] ✗ Fi.CI.BUILD: failure for series starting with [01/12] drm/arm: Don't set allow_fb_modifiers explicitly (rev2)

2021-04-14 Thread Patchwork
== Series Details ==

Series: series starting with [01/12] drm/arm: Don't set allow_fb_modifiers 
explicitly (rev2)
URL   : https://patchwork.freedesktop.org/series/88999/
State : failure

== Summary ==

Applying: drm/arm: Don't set allow_fb_modifiers explicitly
Applying: drm/arm/malidp: Always list modifiers
Applying: drm/exynos: Don't set allow_fb_modifiers explicitly
Applying: drm/i915: Don't set allow_fb_modifiers explicitly
Applying: drm/imx: Don't set allow_fb_modifiers explicitly
Applying: drm/msm/dpu1: Don't set allow_fb_modifiers explicitly
Using index info to reconstruct a base tree...
M   drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
Falling back to patching base and 3-way merge...
Auto-merging drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
CONFLICT (content): Merge conflict in drivers/gpu/drm/msm/disp/dpu1/dpu_kms.c
error: Failed to merge in the changes.
hint: Use 'git am --show-current-patch=diff' to see the failed patch
Patch failed at 0006 drm/msm/dpu1: Don't set allow_fb_modifiers explicitly
When you have resolved this problem, run "git am --continue".
If you prefer to skip this patch, run "git am --skip" instead.
To restore the original branch and stop patching, run "git am --abort".


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


Re: [Intel-gfx] [PATCH] drm/modifiers: Enforce consistency between the cap an IN_FORMATS

2021-04-14 Thread Pekka Paalanen
On Wed, 14 Apr 2021 11:08:15 +0200
Daniel Vetter  wrote:

> It's very confusing for userspace to have to deal with inconsistencies
> here, and some drivers screwed this up a bit. Most just ommitted the
> format list when they meant to say that only linear modifier is
> allowed, but some also meant that only implied modifiers are
> acceptable (because actually none of the planes registered supported
> modifiers).
> 
> Now that this is all done consistently across all drivers, document
> the rules and enforce it in the drm core.
> 
> v2:
> - Make the capability a link (Simon)
> - Note that all is lost before 5.1.
> 
> Acked-by: Maxime Ripard 
> Cc: Simon Ser 
> Reviewed-by: Lucas Stach 
> Cc: Pekka Paalanen 
> Signed-off-by: Daniel Vetter 
> Cc: Maarten Lankhorst 
> Cc: Maxime Ripard 
> Cc: Thomas Zimmermann 
> Cc: David Airlie 
> Cc: Daniel Vetter 
> ---
>  drivers/gpu/drm/drm_plane.c   | 18 +-
>  include/drm/drm_mode_config.h |  2 ++
>  2 files changed, 19 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
> index 0dd43882fe7c..20c7a1665414 100644
> --- a/drivers/gpu/drm/drm_plane.c
> +++ b/drivers/gpu/drm/drm_plane.c
> @@ -128,6 +128,13 @@
>   * pairs supported by this plane. The blob is a struct
>   * drm_format_modifier_blob. Without this property the plane doesn't
>   * support buffers with modifiers. Userspace cannot change this property.
> + *
> + * Note that userspace can check the &DRM_CAP_ADDFB2_MODIFIERS driver
> + * capability for general modifier support. If this flag is set then 
> every
> + * plane will have the IN_FORMATS property, even when it only supports
> + * DRM_FORMAT_MOD_LINEAR. Before linux kernel release v5.1 there have 
> been
> + * various bugs in this area with inconsistencies between the capability
> + * flag and per-plane properties.
>   */
>  
>  static unsigned int drm_num_planes(struct drm_device *dev)
> @@ -277,8 +284,14 @@ static int __drm_universal_plane_init(struct drm_device 
> *dev,
>   format_modifier_count++;
>   }
>  
> - if (format_modifier_count)
> + /* autoset the cap and check for consistency across all planes */
> + if (format_modifier_count) {
> + WARN_ON(!config->allow_fb_modifiers &&
> + !list_empty(&config->plane_list));
>   config->allow_fb_modifiers = true;
> + } else {
> + WARN_ON(config->allow_fb_modifiers);
> + }
>  
>   plane->modifier_count = format_modifier_count;
>   plane->modifiers = kmalloc_array(format_modifier_count,
> @@ -360,6 +373,9 @@ static int __drm_universal_plane_init(struct drm_device 
> *dev,
>   * drm_universal_plane_init() to let the DRM managed resource infrastructure
>   * take care of cleanup and deallocation.
>   *
> + * Drivers supporting modifiers must set @format_modifiers on all their 
> planes,
> + * even those that only support DRM_FORMAT_MOD_LINEAR.
> + *
>   * Returns:
>   * Zero on success, error code on failure.
>   */
> diff --git a/include/drm/drm_mode_config.h b/include/drm/drm_mode_config.h
> index ab424ddd7665..1ddf7783fdf7 100644
> --- a/include/drm/drm_mode_config.h
> +++ b/include/drm/drm_mode_config.h
> @@ -909,6 +909,8 @@ struct drm_mode_config {
>* @allow_fb_modifiers:
>*
>* Whether the driver supports fb modifiers in the ADDFB2.1 ioctl call.
> +  * Note that drivers should not set this directly, it is automatically
> +  * set in drm_universal_plane_init().
>*
>* IMPORTANT:
>*

Acked-by: Pekka Paalanen 


Thanks,
pq


pgpqBp5UgCxOF.pgp
Description: OpenPGP digital signature
___
Intel-gfx mailing list
Intel-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx


[Intel-gfx] [PATCH 0/1] drm/i915/gt: Fix a lockdep warnning on RT kernel

2021-04-14 Thread Jun Miao
Hi,all 
This lockdep warning is only in the RT kernel.
Which is introduced by this 
path:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c?h=v5.12-rc7&id=9d5612ca165a58aacc160465532e7998b9aab270
Fix it. 

Jun Miao (1):
  drm/i915/gt: Fix a lockdep warnning on RT kernel

 drivers/gpu/drm/i915/gt/intel_breadcrumbs.c | 7 +++
 1 file changed, 3 insertions(+), 4 deletions(-)

-- 
2.25.1

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


Re: [Intel-gfx] [PATCH] drm/i915: Fix "mitigations" parsing if i915 is builtin

2021-04-14 Thread Jisheng Zhang
On Tue, 13 Apr 2021 19:59:34 +0300 Ville Syrjälä wrote:


> 
> On Tue, Apr 13, 2021 at 05:02:40PM +0800, Jisheng Zhang wrote:
> > I met below error during boot with i915 builtin if pass
> > "i915.mitigations=off":
> > [0.015589] Booting kernel: `off' invalid for parameter 
> > `i915.mitigations'
> >
> > The reason is slab subsystem isn't ready at that time, so kstrdup()
> > returns NULL. Fix this issue by using stack var instead of kstrdup().
> >
> > Fixes: 984cadea032b ("drm/i915: Allow the sysadmin to override security 
> > mitigations")
> > Signed-off-by: Jisheng Zhang 
> > ---
> >  drivers/gpu/drm/i915/i915_mitigations.c | 7 ++-
> >  1 file changed, 2 insertions(+), 5 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/i915_mitigations.c 
> > b/drivers/gpu/drm/i915/i915_mitigations.c
> > index 84f12598d145..7dadf41064e0 100644
> > --- a/drivers/gpu/drm/i915/i915_mitigations.c
> > +++ b/drivers/gpu/drm/i915/i915_mitigations.c
> > @@ -29,15 +29,13 @@ bool i915_mitigate_clear_residuals(void)
> >  static int mitigations_set(const char *val, const struct kernel_param *kp)
> >  {
> >   unsigned long new = ~0UL;
> > - char *str, *sep, *tok;
> > + char str[64], *sep, *tok;
> >   bool first = true;
> >   int err = 0;
> >
> >   BUILD_BUG_ON(ARRAY_SIZE(names) >= BITS_PER_TYPE(mitigations));
> >
> > - str = kstrdup(val, GFP_KERNEL);
> > - if (!str)
> > - return -ENOMEM;
> > + strncpy(str, val, sizeof(str) - 1);  
> 
> I don't think strncpy() guarantees that the string is properly
> terminated.
> 
> Also commit b1b6bed3b503 ("usb: core: fix quirks_param_set() writing to
> a const pointer") looks broken as well given your findings, and
> arch/um/drivers/virtio_uml.c seems to suffer from this as well.

wow thank you so much. I will send out patches to fix them as well.

> kernel/params.c itself seems to have some slab_is_available() magic
> around kmalloc().
> 
> I used the following cocci snippet to find these:

Nice cocci script.


> @find@
> identifier O, F;
> position PS;
> @@
> struct kernel_param_ops O = {
> ...,
> .set = F@PS
> ,...
> };
> 
> @alloc@
> identifier ALLOC =~ "^k.*(alloc|dup)";
> identifier find.F;
> position PA;
> @@
> F(...) {
> <+...
> ALLOC@PA(...)
> ...+>  
> }
> 
> @script:python depends on alloc@
> ps << find.PS;
> pa << alloc.PA;
> @@
> coccilib.report.print_report(ps[0], "struct")
> coccilib.report.print_report(pa[0], "alloc")
> 
> That could of course miss a bunch more if they allocate
> via some other function I didn't consider.
> 
> --
> Ville Syrjälä
> Intel

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


[Intel-gfx] [PATCH 1/1] drm/i915/gt: Fix a lockdep warning on RT kernel

2021-04-14 Thread Jun Miao
Don`t simple disable all the HD-irq, should race the region in the
intel_breadcrumbs_disarm_irq() only.

BUG: sleeping function called from invalid context at 
kernel/locking/rtmutex.c:969
  #0: 89c4c00ca970 ((wq_completion)events){+.+.}-{0:0}, at: 
process_one_work+0x1cf/0x6d0
  #1: a433c1f53e60 ((work_completion)(&engine->retire_work)){+.+.}-{0:0}, 
at: process_one_work+0x1cf 0x6d
  #2: 89c4ccb0a0a8 (kernel_context){+.+.}-{0:0}, at: 
engine_retire+0x62/0x110 [i915]
  #3: 89c4cf682300 (wakeref.mutex#3){+.+.}-{0:0}, at: 
__intel_wakeref_put_last+0x20/0x60 [i915]
  #4: 89c4ccb08398 (&b->irq_lock){+.+.}-{0:0}, at: 
intel_breadcrumbs_disarm_irq+0x20/0xd0 [i915]
 irq event stamp: 2126
 hardirqs last  enabled at (2125): [] 
cancel_delayed_work+0xa9/0xc0
 hardirqs last disabled at (2126): [] 
__intel_breadcrumbs_park+0x76/0x80 [i915]
 softirqs last  enabled at (0): [] copy_process+0x63e/0x1630
 softirqs last disabled at (0): [<>] 0x0
 CPU: 3 PID: 281 Comm: kworker/3:3 Not tainted 5.10.27-rt34-yocto-preempt-rt #1
 Hardware name: Intel(R) Client Systems NUC7i5DNKE/NUC7i5DNB, BIOS 
DNKBLi5v.86A.0064.2019.0523.1933 05/23 2019
 Workqueue: events engine_retire [i915]
 Call Trace:
  show_stack+0x52/0x58
  dump_stack+0x7d/0x9f
  ___might_sleep.cold+0xe3/0xf4
  rt_spin_lock+0x3f/0xc0
  ? intel_breadcrumbs_disarm_irq+0x20/0xd0 [i915]
  intel_breadcrumbs_disarm_irq+0x20/0xd0 [i915]
  signal_irq_work+0x241/0x660 [i915]
  ? __this_cpu_preempt_check+0x13/0x20
  ? lockdep_hardirqs_off+0x106/0x120
  __intel_breadcrumbs_park+0x3f/0x80 [i915]
  __engine_park+0xbd/0xe0 [i915]
  intel_wakeref_put_last+0x22/0x60 [i915]
  __intel_wakeref_put_last+0x50/0x60 [i915]
  intel_context_exit_engine+0x5f/0x70 [i915]
  i915_request_retire+0x139/0x2d0 [i915]
  engine_retire+0xb0/0x110 [i915]
  process_one_work+0x26d/0x6d0
  worker_thread+0x53/0x330
  kthread+0x1b0/0x1d0
  ? process_one_work+0x6d0/0x6d0
  ? __kthread_parkme+0xc0/0xc0
  ret_from_fork+0x22/0x30

Fixes: 9d5612ca165a ("drm/i915/gt: Defer enabling the breadcrumb interrupt to 
after submission")
Signed-off-by: Jun Miao 
---
 drivers/gpu/drm/i915/gt/intel_breadcrumbs.c | 7 +++
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c 
b/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c
index 0040b4765a54..89c2874ecc76 100644
--- a/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c
+++ b/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c
@@ -103,10 +103,11 @@ static void __intel_breadcrumbs_disarm_irq(struct 
intel_breadcrumbs *b)
 
 static void intel_breadcrumbs_disarm_irq(struct intel_breadcrumbs *b)
 {
-   spin_lock(&b->irq_lock);
+   unsigned long flags;
+   spin_lock_irqsave(&b->irq_lock,flags);
if (b->irq_armed)
__intel_breadcrumbs_disarm_irq(b);
-   spin_unlock(&b->irq_lock);
+   spin_unlock_irqrestore(&b->irq_lock,flags);
 }
 
 static void add_signaling_context(struct intel_breadcrumbs *b,
@@ -342,9 +343,7 @@ void intel_breadcrumbs_park(struct intel_breadcrumbs *b)
/* Kick the work once more to drain the signalers */
irq_work_sync(&b->irq_work);
while (unlikely(READ_ONCE(b->irq_armed))) {
-   local_irq_disable();
signal_irq_work(&b->irq_work);
-   local_irq_enable();
cond_resched();
}
GEM_BUG_ON(!list_empty(&b->signalers));
-- 
2.25.1

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


[Intel-gfx] [PATCH v2] drm/i915: Fix "mitigations" parsing if i915 is builtin

2021-04-14 Thread Jisheng Zhang
I met below error during boot with i915 builtin if pass
"i915.mitigations=off":
[0.015589] Booting kernel: `off' invalid for parameter `i915.mitigations'

The reason is slab subsystem isn't ready at that time, so kstrdup()
returns NULL. Fix this issue by using stack var instead of kstrdup().

Fixes: 984cadea032b ("drm/i915: Allow the sysadmin to override security 
mitigations")
Signed-off-by: Jisheng Zhang 
---
Since v1:
 - Ensure "str" is properly terminated. Thanks Ville for pointing this out.

 drivers/gpu/drm/i915/i915_mitigations.c | 8 +++-
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_mitigations.c 
b/drivers/gpu/drm/i915/i915_mitigations.c
index 84f12598d145..231aad5ff46c 100644
--- a/drivers/gpu/drm/i915/i915_mitigations.c
+++ b/drivers/gpu/drm/i915/i915_mitigations.c
@@ -29,15 +29,14 @@ bool i915_mitigate_clear_residuals(void)
 static int mitigations_set(const char *val, const struct kernel_param *kp)
 {
unsigned long new = ~0UL;
-   char *str, *sep, *tok;
+   char str[64], *sep, *tok;
bool first = true;
int err = 0;
 
BUILD_BUG_ON(ARRAY_SIZE(names) >= BITS_PER_TYPE(mitigations));
 
-   str = kstrdup(val, GFP_KERNEL);
-   if (!str)
-   return -ENOMEM;
+   strncpy(str, val, sizeof(str) - 1);
+   str[sizeof(str) - 1] = '\0';
 
for (sep = str; (tok = strsep(&sep, ","));) {
bool enable = true;
@@ -86,7 +85,6 @@ static int mitigations_set(const char *val, const struct 
kernel_param *kp)
break;
}
}
-   kfree(str);
if (err)
return err;
 
-- 
2.31.0

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


Re: [Intel-gfx] [PATCH 05/12] drm/imx: Don't set allow_fb_modifiers explicitly

2021-04-14 Thread Liu Ying
Hi Daniel,

On Tue, 2021-04-13 at 16:14 +0200, Lucas Stach wrote:
> Am Dienstag, dem 13.04.2021 um 16:04 +0200 schrieb Daniel Vetter:
> > On Tue, Apr 13, 2021 at 01:47:28PM +0200, Lucas Stach wrote:
> > > Am Dienstag, dem 13.04.2021 um 11:48 +0200 schrieb Daniel Vetter:
> > > > Since
> > > > 
> > > > commit 890880ddfdbe256083170866e49c87618b706ac7
> > > > Author: Paul Kocialkowski 
> > > > Date:   Fri Jan 4 09:56:10 2019 +0100
> > > > 
> > > > drm: Auto-set allow_fb_modifiers when given modifiers at plane init
> > > > 
> > > > this is done automatically as part of plane init, if drivers set the
> > > > modifier list correctly. Which is the case here.
> > > > 
> > > > This one actually set it twice on top of what drm_plane_init does, so
> > > > double-redundant!
> > > 
> > > That's not true. imx-dcss and imx-drm are two totally separate drivers.
> > > Maybe we should move imx-drm into its own ipuv3 directory one day to
> > > make this more clear. Change is still correct, though.
> > 
> > Hm I greeped for drm_universal_plane_init and didn't find anythinf for the
> > imx main driver ... where are planes set up for that? Need to review that
> > they have the modifiers listed in all cases.
> 
> That's in drivers/gpu/drm/imx/ipuv3-plane.c and modifiers are always
> set on plane init.
> 
> Regards,
> Lucas
> 
> > > Reviewed-by: Lucas Stach 
> > > 
> > > > Signed-off-by: Daniel Vetter 
> > > > Cc: Philipp Zabel 
> > > > Cc: Shawn Guo 
> > > > Cc: Sascha Hauer 
> > > > Cc: Pengutronix Kernel Team 
> > > > Cc: Fabio Estevam 
> > > > Cc: NXP Linux Team 
> > > > Cc: linux-arm-ker...@lists.infradead.org
> > > > ---
> > > >  drivers/gpu/drm/imx/dcss/dcss-kms.c | 1 -
> > > >  drivers/gpu/drm/imx/imx-drm-core.c  | 1 -

Nit: Since this patch touches two totally separate drivers(imx-dcss and
imx-drm), it would be good to split it into two patches.

Thanks,
Liu Ying

> > > >  2 files changed, 2 deletions(-)
> > > > 
> > > > diff --git a/drivers/gpu/drm/imx/dcss/dcss-kms.c 
> > > > b/drivers/gpu/drm/imx/dcss/dcss-kms.c
> > > > index b549ce5e7607..37ae68a7fba5 100644
> > > > --- a/drivers/gpu/drm/imx/dcss/dcss-kms.c
> > > > +++ b/drivers/gpu/drm/imx/dcss/dcss-kms.c
> > > > @@ -52,7 +52,6 @@ static void dcss_kms_mode_config_init(struct 
> > > > dcss_kms_dev *kms)
> > > > config->min_height = 1;
> > > > config->max_width = 4096;
> > > > config->max_height = 4096;
> > > > -   config->allow_fb_modifiers = true;
> > > > config->normalize_zpos = true;
> > > >  
> > > > 
> > > > 
> > > > 
> > > > config->funcs = &dcss_drm_mode_config_funcs;
> > > > diff --git a/drivers/gpu/drm/imx/imx-drm-core.c 
> > > > b/drivers/gpu/drm/imx/imx-drm-core.c
> > > > index 2ded8e4f32d0..8be4edaec958 100644
> > > > --- a/drivers/gpu/drm/imx/imx-drm-core.c
> > > > +++ b/drivers/gpu/drm/imx/imx-drm-core.c
> > > > @@ -209,7 +209,6 @@ static int imx_drm_bind(struct device *dev)
> > > > drm->mode_config.max_height = 4096;
> > > > drm->mode_config.funcs = &imx_drm_mode_config_funcs;
> > > > drm->mode_config.helper_private = &imx_drm_mode_config_helpers;
> > > > -   drm->mode_config.allow_fb_modifiers = true;
> > > > drm->mode_config.normalize_zpos = true;
> > > >  
> > > > 
> > > > 
> > > > 
> > > > ret = drmm_mode_config_init(drm);
> 
> 

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


Re: [Intel-gfx] [PATCH] drm/i915: Fix "mitigations" parsing if i915 is builtin

2021-04-14 Thread Jisheng Zhang
Hi Ville,

On Tue, 13 Apr 2021 19:59:34 +0300 Ville Syrjälä wrote:


> 
> 
> On Tue, Apr 13, 2021 at 05:02:40PM +0800, Jisheng Zhang wrote:
> > I met below error during boot with i915 builtin if pass
> > "i915.mitigations=off":
> > [0.015589] Booting kernel: `off' invalid for parameter 
> > `i915.mitigations'
> >
> > The reason is slab subsystem isn't ready at that time, so kstrdup()
> > returns NULL. Fix this issue by using stack var instead of kstrdup().
> >
> > Fixes: 984cadea032b ("drm/i915: Allow the sysadmin to override security 
> > mitigations")
> > Signed-off-by: Jisheng Zhang 
> > ---
> >  drivers/gpu/drm/i915/i915_mitigations.c | 7 ++-
> >  1 file changed, 2 insertions(+), 5 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/i915/i915_mitigations.c 
> > b/drivers/gpu/drm/i915/i915_mitigations.c
> > index 84f12598d145..7dadf41064e0 100644
> > --- a/drivers/gpu/drm/i915/i915_mitigations.c
> > +++ b/drivers/gpu/drm/i915/i915_mitigations.c
> > @@ -29,15 +29,13 @@ bool i915_mitigate_clear_residuals(void)
> >  static int mitigations_set(const char *val, const struct kernel_param *kp)
> >  {
> >   unsigned long new = ~0UL;
> > - char *str, *sep, *tok;
> > + char str[64], *sep, *tok;
> >   bool first = true;
> >   int err = 0;
> >
> >   BUILD_BUG_ON(ARRAY_SIZE(names) >= BITS_PER_TYPE(mitigations));
> >
> > - str = kstrdup(val, GFP_KERNEL);
> > - if (!str)
> > - return -ENOMEM;
> > + strncpy(str, val, sizeof(str) - 1);  
> 
> I don't think strncpy() guarantees that the string is properly
> terminated.
> 
> Also commit b1b6bed3b503 ("usb: core: fix quirks_param_set() writing to
> a const pointer") looks broken as well given your findings, and
> arch/um/drivers/virtio_uml.c seems to suffer from this as well.
> kernel/params.c itself seems to have some slab_is_available() magic
> around kmalloc().

Just tried the "usbcore.quirks" with usb builtin, I can't reproduce the
issue. Futher investigation shows that device_param_cb() macro is the
key, or the "6" in __level_param_cb(name, ops, arg, perm, 6) is the key.
While i915.mitigations uses module_param_cb_unsafe(), in which the level
will be "-1"

arch/um/drivers/virtio_uml.c also makes use of device_param_cb()

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


[Intel-gfx] [PATCH 0/1] drm/i915/gt: Fix a lockdep warnning on RT kernel

2021-04-14 Thread Jun Miao
Hi,all 
This lockdep warning is only in the RT kernel.
Which is introduced by this 
path:https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c?h=v5.12-rc7&id=9d5612ca165a58aacc160465532e7998b9aab270
Fix it. 

Jun Miao (1):
  drm/i915/gt: Fix a lockdep warnning on RT kernel

 drivers/gpu/drm/i915/gt/intel_breadcrumbs.c | 7 +++
 1 file changed, 3 insertions(+), 4 deletions(-)

-- 
2.25.1

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


[Intel-gfx] RT-BUG report: i915/gt/intel_breadcrumbs.c

2021-04-14 Thread jun.miao

kernel version: 5.10-rt


BUG: sleeping function called from invalid context at 
kernel/locking/rtmutex.c:969
[   57.899678] in_atomic(): 0, irqs_disabled(): 1, non_block: 0, pid: 
281, name: kworker/3:3

[   57.899679] 5 locks held by kworker/3:3/281:
[   57.899681]  #0: 89c4c00ca970 
((wq_completion)events){+.+.}-{0:0}, at: process_one_work+0x1cf/0x6d0
[   57.899691]  #1: a433c1f53e60 
((work_completion)(&engine->retire_work)){+.+.}-{0:0}, at: 
process_one_work+0x1cf/0x6d0
[   57.899696]  #2: 89c4ccb0a0a8 (kernel_context){+.+.}-{0:0}, at: 
engine_retire+0x62/0x110 [i915]
[   57.899795]  #3: 89c4cf682300 (wakeref.mutex#3){+.+.}-{0:0}, at: 
__intel_wakeref_put_last+0x20/0x60 [i915]
[   57.899866]  #4: 89c4ccb08398 (&b->irq_lock){+.+.}-{0:0}, at: 
intel_breadcrumbs_disarm_irq+0x20/0xd0 [i915]

[   57.899937] irq event stamp: 2126
[   57.899938] hardirqs last  enabled at (2125): [] 
cancel_delayed_work+0xa9/0xc0
[   57.899942] hardirqs last disabled at (2126): [] 
__intel_breadcrumbs_park+0x76/0x80 [i915]
[   57.98] softirqs last  enabled at (0): [] 
copy_process+0x63e/0x1630

[   57.900012] softirqs last disabled at (0): [<>] 0x0
[   57.900015] CPU: 3 PID: 281 Comm: kworker/3:3 Not tainted 
5.10.27-rt34-yocto-preempt-rt #1
[   57.900017] Hardware name: Intel(R) Client Systems 
NUC7i5DNKE/NUC7i5DNB, BIOS DNKBLi5v.86A.0064.2019.0523.1933 05/23/2019

[   57.900019] Workqueue: events engine_retire [i915]
[   57.900091] Call Trace:
[   57.900094]  show_stack+0x52/0x58
[   57.900100]  dump_stack+0x7d/0x9f
[   57.900108]  ___might_sleep.cold+0xe3/0xf4
[   57.900119]  rt_spin_lock+0x3f/0xc0
[   57.900122]  ? intel_breadcrumbs_disarm_irq+0x20/0xd0 [i915]
[   57.900192]  intel_breadcrumbs_disarm_irq+0x20/0xd0 [i915]
[   57.900264]  signal_irq_work+0x241/0x660 [i915]
[   57.900334]  ? __this_cpu_preempt_check+0x13/0x20
[   57.900339]  ? lockdep_hardirqs_off+0x106/0x120
[   57.900353]  __intel_breadcrumbs_park+0x3f/0x80 [i915]
[   57.900420]  __engine_park+0xbd/0xe0 [i915]
[   57.900490]  intel_wakeref_put_last+0x22/0x60 [i915]
[   57.900557]  __intel_wakeref_put_last+0x50/0x60 [i915]
[   57.900623]  intel_context_exit_engine+0x5f/0x70 [i915]
[   57.900694]  i915_request_retire+0x139/0x2d0 [i915]
[   57.900783]  engine_retire+0xb0/0x110 [i915]
[   57.900862]  process_one_work+0x26d/0x6d0
[   57.900886]  worker_thread+0x53/0x330
[   57.900897]  kthread+0x1b0/0x1d0
[   57.900901]  ? process_one_work+0x6d0/0x6d0
[   57.900903]  ? __kthread_parkme+0xc0/0xc0
[   57.900912]  ret_from_fork+0x22/0x30


Follow patch cause this bug warning:

https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c?h=v5.12-rc7&id=9d5612ca165a58aacc160465532e7998b9aab270

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


[Intel-gfx] [PATCH 1/1] drm/i915/gt: Fix a lockdep warnning on RT kernel

2021-04-14 Thread Jun Miao
Don`t simple disable all the HD-irq, should race the region in the
intel_breadcrumbs_disarm_irq() only.

BUG: sleeping function called from invalid context at 
kernel/locking/rtmutex.c:969
  #0: 89c4c00ca970 ((wq_completion)events){+.+.}-{0:0}, at: 
process_one_work+0x1cf/0x6d0
  #1: a433c1f53e60 ((work_completion)(&engine->retire_work)){+.+.}-{0:0}, 
at: process_one_work+0x1cf 0x6d
  #2: 89c4ccb0a0a8 (kernel_context){+.+.}-{0:0}, at: 
engine_retire+0x62/0x110 [i915]
  #3: 89c4cf682300 (wakeref.mutex#3){+.+.}-{0:0}, at: 
__intel_wakeref_put_last+0x20/0x60 [i915]
  #4: 89c4ccb08398 (&b->irq_lock){+.+.}-{0:0}, at: 
intel_breadcrumbs_disarm_irq+0x20/0xd0 [i915]
 irq event stamp: 2126
 hardirqs last  enabled at (2125): [] 
cancel_delayed_work+0xa9/0xc0
 hardirqs last disabled at (2126): [] 
__intel_breadcrumbs_park+0x76/0x80 [i915]
 softirqs last  enabled at (0): [] copy_process+0x63e/0x1630
 softirqs last disabled at (0): [<>] 0x0
 CPU: 3 PID: 281 Comm: kworker/3:3 Not tainted 5.10.27-rt34-yocto-preempt-rt #1
 Hardware name: Intel(R) Client Systems NUC7i5DNKE/NUC7i5DNB, BIOS 
DNKBLi5v.86A.0064.2019.0523.1933 05/23 2019
 Workqueue: events engine_retire [i915]
 Call Trace:
  show_stack+0x52/0x58
  dump_stack+0x7d/0x9f
  ___might_sleep.cold+0xe3/0xf4
  rt_spin_lock+0x3f/0xc0
  ? intel_breadcrumbs_disarm_irq+0x20/0xd0 [i915]
  intel_breadcrumbs_disarm_irq+0x20/0xd0 [i915]
  signal_irq_work+0x241/0x660 [i915]
  ? __this_cpu_preempt_check+0x13/0x20
  ? lockdep_hardirqs_off+0x106/0x120
  __intel_breadcrumbs_park+0x3f/0x80 [i915]
  __engine_park+0xbd/0xe0 [i915]
  intel_wakeref_put_last+0x22/0x60 [i915]
  __intel_wakeref_put_last+0x50/0x60 [i915]
  intel_context_exit_engine+0x5f/0x70 [i915]
  i915_request_retire+0x139/0x2d0 [i915]
  engine_retire+0xb0/0x110 [i915]
  process_one_work+0x26d/0x6d0
  worker_thread+0x53/0x330
  kthread+0x1b0/0x1d0
  ? process_one_work+0x6d0/0x6d0
  ? __kthread_parkme+0xc0/0xc0
  ret_from_fork+0x22/0x30

Fixes: 9d5612ca165a ("drm/i915/gt: Defer enabling the breadcrumb interrupt to 
after submission")
Signed-off-by: Jun Miao 
---
 drivers/gpu/drm/i915/gt/intel_breadcrumbs.c | 7 +++
 1 file changed, 3 insertions(+), 4 deletions(-)

diff --git a/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c 
b/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c
index 0040b4765a54..89c2874ecc76 100644
--- a/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c
+++ b/drivers/gpu/drm/i915/gt/intel_breadcrumbs.c
@@ -103,10 +103,11 @@ static void __intel_breadcrumbs_disarm_irq(struct 
intel_breadcrumbs *b)
 
 static void intel_breadcrumbs_disarm_irq(struct intel_breadcrumbs *b)
 {
-   spin_lock(&b->irq_lock);
+   unsigned long flags;
+   spin_lock_irqsave(&b->irq_lock,flags);
if (b->irq_armed)
__intel_breadcrumbs_disarm_irq(b);
-   spin_unlock(&b->irq_lock);
+   spin_unlock_irqrestore(&b->irq_lock,flags);
 }
 
 static void add_signaling_context(struct intel_breadcrumbs *b,
@@ -342,9 +343,7 @@ void intel_breadcrumbs_park(struct intel_breadcrumbs *b)
/* Kick the work once more to drain the signalers */
irq_work_sync(&b->irq_work);
while (unlikely(READ_ONCE(b->irq_armed))) {
-   local_irq_disable();
signal_irq_work(&b->irq_work);
-   local_irq_enable();
cond_resched();
}
GEM_BUG_ON(!list_empty(&b->signalers));
-- 
2.25.1

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


[Intel-gfx] [RFC 28/28] drm/i915: Enable dropping small cores when not enabled

2021-04-14 Thread Tvrtko Ursulin
From: Tvrtko Ursulin 

Signed-off-by: Tvrtko Ursulin 
---
 drivers/gpu/drm/i915/Kconfig.platforms | 7 +++
 drivers/gpu/drm/i915/i915_drv.h| 8 ++--
 2 files changed, 13 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/Kconfig.platforms 
b/drivers/gpu/drm/i915/Kconfig.platforms
index 4208222b2aaf..9884ccb7af26 100644
--- a/drivers/gpu/drm/i915/Kconfig.platforms
+++ b/drivers/gpu/drm/i915/Kconfig.platforms
@@ -152,11 +152,15 @@ config DRM_I915_PLATFORM_INTEL_IVYBRIDGE
help
  Include support for Intel Ivybridge platforms.
 
+config DRM_I915_LP
+   bool
+
 config DRM_I915_PLATFORM_INTEL_VALLEYVIEW
bool "Intel Valleyview platform support"
default y
depends on DRM_I915
select DRM_I915_GEN7
+   select DRM_I915_LP
help
  Include support for Intel Valleyview platforms.
 
@@ -184,6 +188,7 @@ config DRM_I915_PLATFORM_INTEL_CHERRYVIEW
default y
depends on DRM_I915
select DRM_I915_GEN8
+   select DRM_I915_LP
help
  Include support for Intel Cherryview platforms.
 
@@ -203,6 +208,7 @@ config DRM_I915_PLATFORM_INTEL_BROXTON
default y
depends on DRM_I915
select DRM_I915_GEN9
+   select DRM_I915_LP
help
  Include support for Intel Broxton platforms.
 
@@ -211,6 +217,7 @@ config DRM_I915_PLATFORM_INTEL_BROXTON
default y
depends on DRM_I915
select DRM_I915_GEN9
+   select DRM_I915_LP
help
  Include support for Intel Geminilake platforms.
 
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 6f56f3a42cd1..b6b98de675b3 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2767,9 +2767,13 @@ intel_info(const struct drm_i915_private *dev_priv)
 #define IS_GEN10(p) IS_GENx(p, 10)
 #define IS_GEN11(p) IS_GENx(p, 11)
 
-#define IS_LP(dev_priv)(INTEL_INFO(dev_priv)->is_lp)
+#define IS_LP(dev_priv)(IS_ENABLED(CONFIG_DRM_I915_LP) && \
+(dev_priv)->info.is_lp)
+#define IS_BC(dev_priv)(!IS_ENABLED(CONFIG_DRM_I915_LP) || \
+!(dev_priv)->info.is_lp)
+
 #define IS_GEN9_LP(dev_priv)   (IS_GEN9(dev_priv) && IS_LP(dev_priv))
-#define IS_GEN9_BC(dev_priv)   (IS_GEN9(dev_priv) && !IS_LP(dev_priv))
+#define IS_GEN9_BC(dev_priv)   (IS_GEN9(dev_priv) && IS_BC(dev_priv))
 
 #define ENGINE_MASK(id)BIT(id)
 #define RENDER_RINGENGINE_MASK(RCS)
-- 
2.27.0

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


[Intel-gfx] [RFC 25/28] drm/i915: Use IS_GEN in intel_engine_cs.c

2021-04-14 Thread Tvrtko Ursulin
From: Tvrtko Ursulin 

Signed-off-by: Tvrtko Ursulin 
---
 drivers/gpu/drm/i915/intel_engine_cs.c | 92 +++---
 1 file changed, 38 insertions(+), 54 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c 
b/drivers/gpu/drm/i915/intel_engine_cs.c
index 32a1fee719a0..3f97e1491fad 100644
--- a/drivers/gpu/drm/i915/intel_engine_cs.c
+++ b/drivers/gpu/drm/i915/intel_engine_cs.c
@@ -156,36 +156,30 @@ __intel_engine_context_size(struct drm_i915_private 
*dev_priv, u8 class)
 
switch (class) {
case RENDER_CLASS:
-   switch (INTEL_GEN(dev_priv)) {
-   default:
-   MISSING_CASE(INTEL_GEN(dev_priv));
-   return DEFAULT_LR_CONTEXT_RENDER_SIZE;
-   case 11:
+   if (IS_GEN(dev_priv, 11, GEN_FOREVER)) {
return GEN11_LR_CONTEXT_RENDER_SIZE;
-   case 10:
+   } else if (IS_GEN(dev_priv, 10, GEN_FOREVER)) {
return GEN10_LR_CONTEXT_RENDER_SIZE;
-   case 9:
+   } else if (IS_GEN(dev_priv, 9, GEN_FOREVER)) {
return GEN9_LR_CONTEXT_RENDER_SIZE;
-   case 8:
+   } else if (IS_GEN(dev_priv, 8, GEN_FOREVER)) {
return GEN8_LR_CONTEXT_RENDER_SIZE;
-   case 7:
+   } else if (IS_GEN(dev_priv, 7, GEN_FOREVER)) {
if (IS_HASWELL(dev_priv))
return HSW_CXT_TOTAL_SIZE;
 
cxt_size = I915_READ(GEN7_CXT_SIZE);
return round_up(GEN7_CXT_TOTAL_SIZE(cxt_size) * 64,
PAGE_SIZE);
-   case 6:
+   } else if (IS_GEN(dev_priv, 6, GEN_FOREVER)) {
cxt_size = I915_READ(CXT_SIZE);
return round_up(GEN6_CXT_TOTAL_SIZE(cxt_size) * 64,
PAGE_SIZE);
-   case 5:
-   case 4:
-   case 3:
-   case 2:
-   /* For the special day when i810 gets merged. */
-   case 1:
+   } else if (IS_GEN(dev_priv, 1, 5)) {
return 0;
+   } else {
+   MISSING_CASE(INTEL_GEN(dev_priv));
+   return DEFAULT_LR_CONTEXT_RENDER_SIZE;
}
break;
default:
@@ -781,47 +775,39 @@ void intel_engine_get_instdone(struct intel_engine_cs 
*engine,
 
memset(instdone, 0, sizeof(*instdone));
 
-   switch (INTEL_GEN(dev_priv)) {
-   default:
+   if (IS_GEN7(dev_priv)) {
instdone->instdone = I915_READ(RING_INSTDONE(mmio_base));
 
-   if (engine->id != RCS)
-   break;
-
-   instdone->slice_common = I915_READ(GEN7_SC_INSTDONE);
-   for_each_instdone_slice_subslice(dev_priv, slice, subslice) {
-   instdone->sampler[slice][subslice] =
-   read_subslice_reg(dev_priv, slice, subslice,
- GEN7_SAMPLER_INSTDONE);
-   instdone->row[slice][subslice] =
-   read_subslice_reg(dev_priv, slice, subslice,
- GEN7_ROW_INSTDONE);
+   if (engine->id == RCS) {
+   instdone->slice_common = I915_READ(GEN7_SC_INSTDONE);
+   instdone->sampler[0][0] = 
I915_READ(GEN7_SAMPLER_INSTDONE);
+   instdone->row[0][0] = I915_READ(GEN7_ROW_INSTDONE);
}
-   break;
-   case 7:
-   instdone->instdone = I915_READ(RING_INSTDONE(mmio_base));
-
-   if (engine->id != RCS)
-   break;
-
-   instdone->slice_common = I915_READ(GEN7_SC_INSTDONE);
-   instdone->sampler[0][0] = I915_READ(GEN7_SAMPLER_INSTDONE);
-   instdone->row[0][0] = I915_READ(GEN7_ROW_INSTDONE);
-
-   break;
-   case 6:
-   case 5:
-   case 4:
+   } else if (IS_GEN(dev_priv, 4, 6)) {
instdone->instdone = I915_READ(RING_INSTDONE(mmio_base));
 
if (engine->id == RCS)
/* HACK: Using the wrong struct member */
instdone->slice_common = I915_READ(GEN4_INSTDONE1);
-   break;
-   case 3:
-   case 2:
+   } else if (IS_GEN(dev_priv, 2, 3)) {
instdone->instdone = I915_READ(GEN2_INSTDONE);
-   break;
+   } else {
+   instdone->instdone = I915_READ(RING_INSTDONE(mmio_base));
+
+   if (engine->id == RCS) {
+   instdone->slice_common = I915_READ(GEN7_SC_INSTDONE);
+   for_each_instdone_slice_subslice(dev_priv, slice,
+ 

[Intel-gfx] [RFC 27/28] drm/i915: Use IS_GEN in intel_lrc.c

2021-04-14 Thread Tvrtko Ursulin
From: Tvrtko Ursulin 

Signed-off-by: Tvrtko Ursulin 
---
 drivers/gpu/drm/i915/intel_lrc.c | 29 +++--
 1 file changed, 11 insertions(+), 18 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
index 55df19ec879e..63872514213c 100644
--- a/drivers/gpu/drm/i915/intel_lrc.c
+++ b/drivers/gpu/drm/i915/intel_lrc.c
@@ -1413,20 +1413,16 @@ static int intel_init_workaround_bb(struct 
intel_engine_cs *engine)
if (GEM_WARN_ON(engine->id != RCS))
return -EINVAL;
 
-   switch (INTEL_GEN(engine->i915)) {
-   case 10:
+   if (IS_GEN10(engine->i915)) {
wa_bb_fn[0] = gen10_init_indirectctx_bb;
wa_bb_fn[1] = NULL;
-   break;
-   case 9:
+   } else if (IS_GEN9(engine->i915)) {
wa_bb_fn[0] = gen9_init_indirectctx_bb;
wa_bb_fn[1] = NULL;
-   break;
-   case 8:
+   } else if (IS_GEN8(engine->i915)) {
wa_bb_fn[0] = gen8_init_indirectctx_bb;
wa_bb_fn[1] = NULL;
-   break;
-   default:
+   } else {
MISSING_CASE(INTEL_GEN(engine->i915));
return 0;
}
@@ -2149,22 +2145,19 @@ static u32 intel_lr_indirect_ctx_offset(struct 
intel_engine_cs *engine)
 {
u32 indirect_ctx_offset;
 
-   switch (INTEL_GEN(engine->i915)) {
-   default:
-   MISSING_CASE(INTEL_GEN(engine->i915));
-   /* fall through */
-   case 10:
+   if (IS_GEN10(engine->i915)) {
indirect_ctx_offset =
GEN10_CTX_RCS_INDIRECT_CTX_OFFSET_DEFAULT;
-   break;
-   case 9:
+   } else if (IS_GEN9(engine->i915)) {
indirect_ctx_offset =
GEN9_CTX_RCS_INDIRECT_CTX_OFFSET_DEFAULT;
-   break;
-   case 8:
+   } else if (IS_GEN8(engine->i915)) {
indirect_ctx_offset =
GEN8_CTX_RCS_INDIRECT_CTX_OFFSET_DEFAULT;
-   break;
+   } else {
+   MISSING_CASE(INTEL_GEN(engine->i915));
+   indirect_ctx_offset =
+   GEN10_CTX_RCS_INDIRECT_CTX_OFFSET_DEFAULT;
}
 
return indirect_ctx_offset;
-- 
2.27.0

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


[Intel-gfx] [RFC 26/28] drm/i915: Use IS_GEN in intel_guc.c

2021-04-14 Thread Tvrtko Ursulin
From: Tvrtko Ursulin 

Signed-off-by: Tvrtko Ursulin 
---
 drivers/gpu/drm/i915/intel_guc.c | 10 +++---
 1 file changed, 3 insertions(+), 7 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_guc.c b/drivers/gpu/drm/i915/intel_guc.c
index 21140ccd7a97..e67283947624 100644
--- a/drivers/gpu/drm/i915/intel_guc.c
+++ b/drivers/gpu/drm/i915/intel_guc.c
@@ -208,14 +208,10 @@ static u32 get_gt_type(struct drm_i915_private *dev_priv)
 
 static u32 get_core_family(struct drm_i915_private *dev_priv)
 {
-   u32 gen = INTEL_GEN(dev_priv);
-
-   switch (gen) {
-   case 9:
+   if (IS_GEN9(dev_priv)) {
return GUC_CORE_FAMILY_GEN9;
-
-   default:
-   MISSING_CASE(gen);
+   } else {
+   MISSING_CASE(INTEL_GEN(dev_priv));
return GUC_CORE_FAMILY_UNKNOWN;
}
 }
-- 
2.27.0

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


[Intel-gfx] [RFC 24/28] drm/i915: Use IS_GEN in intel_fb_pitch_limit

2021-04-14 Thread Tvrtko Ursulin
From: Tvrtko Ursulin 

Signed-off-by: Tvrtko Ursulin 
---
 drivers/gpu/drm/i915/intel_display.c | 11 +--
 1 file changed, 5 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_display.c 
b/drivers/gpu/drm/i915/intel_display.c
index f7a3cefaaaed..5d1d67a7c368 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -13848,23 +13848,22 @@ static
 u32 intel_fb_pitch_limit(struct drm_i915_private *dev_priv,
 uint64_t fb_modifier, uint32_t pixel_format)
 {
-   u32 gen = INTEL_GEN(dev_priv);
-
-   if (gen >= 9) {
+   if (IS_GEN(dev_priv, 9, GEN_FOREVER)) {
int cpp = drm_format_plane_cpp(pixel_format, 0);
 
/* "The stride in bytes must not exceed the of the size of 8K
 *  pixels and 32K bytes."
 */
return min(8192 * cpp, 32768);
-   } else if (gen >= 5 && !HAS_GMCH_DISPLAY(dev_priv)) {
+   } else if (IS_GEN(dev_priv, 5, GEN_FOREVER) &&
+  !HAS_GMCH_DISPLAY(dev_priv)) {
return 32*1024;
-   } else if (gen >= 4) {
+   } else if (IS_GEN(dev_priv, 4, GEN_FOREVER)) {
if (fb_modifier == I915_FORMAT_MOD_X_TILED)
return 16*1024;
else
return 32*1024;
-   } else if (gen >= 3) {
+   } else if (IS_GEN(dev_priv, 3, GEN_FOREVER)) {
if (fb_modifier == I915_FORMAT_MOD_X_TILED)
return 8*1024;
else
-- 
2.27.0

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


[Intel-gfx] [RFC 22/28] drm/i915: Use IS_GEN in stolen

2021-04-14 Thread Tvrtko Ursulin
From: Tvrtko Ursulin 

Signed-off-by: Tvrtko Ursulin 
---
 drivers/gpu/drm/i915/i915_gem_stolen.c | 36 ++
 1 file changed, 14 insertions(+), 22 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_gem_stolen.c 
b/drivers/gpu/drm/i915/i915_gem_stolen.c
index 0afd50cf71de..4a9f545f0c4e 100644
--- a/drivers/gpu/drm/i915/i915_gem_stolen.c
+++ b/drivers/gpu/drm/i915/i915_gem_stolen.c
@@ -356,34 +356,26 @@ int i915_gem_init_stolen(struct drm_i915_private 
*dev_priv)
reserved_base = 0;
reserved_size = 0;
 
-   switch (INTEL_GEN(dev_priv)) {
-   case 2:
-   case 3:
-   break;
-   case 4:
-   if (!IS_G4X(dev_priv))
-   break;
-   /* fall through */
-   case 5:
-   g4x_get_stolen_reserved(dev_priv,
-   &reserved_base, &reserved_size);
-   break;
-   case 6:
-   gen6_get_stolen_reserved(dev_priv,
-&reserved_base, &reserved_size);
-   break;
-   case 7:
-   gen7_get_stolen_reserved(dev_priv,
-&reserved_base, &reserved_size);
-   break;
-   default:
+   if (IS_GEN(dev_priv, 8, GEN_FOREVER)) {
if (IS_LP(dev_priv))
chv_get_stolen_reserved(dev_priv,
&reserved_base, &reserved_size);
else
bdw_get_stolen_reserved(dev_priv,
&reserved_base, &reserved_size);
-   break;
+
+   } else if (IS_GEN(dev_priv, 7, GEN_FOREVER)) {
+   gen7_get_stolen_reserved(dev_priv,
+   &reserved_base, &reserved_size);
+   } else if (IS_GEN(dev_priv, 6, GEN_FOREVER)) {
+   gen6_get_stolen_reserved(dev_priv,
+&reserved_base, &reserved_size);
+   } else if (IS_GEN(dev_priv, 5, GEN_FOREVER)) {
+   g4x_get_stolen_reserved(dev_priv,
+   &reserved_base, &reserved_size);
+   } else if (IS_GEN(dev_priv, 4, GEN_FOREVER) && IS_G4X(dev_priv)) {
+   g4x_get_stolen_reserved(dev_priv,
+   &reserved_base, &reserved_size);
}
 
/* It is possible for the reserved base to be zero, but the register
-- 
2.27.0

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


[Intel-gfx] [RFC 23/28] drm/i915: Use IS_GEN in intel_bios.c

2021-04-14 Thread Tvrtko Ursulin
From: Tvrtko Ursulin 

Signed-off-by: Tvrtko Ursulin 
---
 drivers/gpu/drm/i915/intel_bios.c | 9 +++--
 1 file changed, 3 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_bios.c 
b/drivers/gpu/drm/i915/intel_bios.c
index aa4df6548771..15c18d24e4e9 100644
--- a/drivers/gpu/drm/i915/intel_bios.c
+++ b/drivers/gpu/drm/i915/intel_bios.c
@@ -391,15 +391,12 @@ parse_sdvo_panel_data(struct drm_i915_private *dev_priv,
 static int intel_bios_ssc_frequency(struct drm_i915_private *dev_priv,
bool alternate)
 {
-   switch (INTEL_GEN(dev_priv)) {
-   case 2:
+   if (IS_GEN2(dev_priv))
return alternate ? 7 : 48000;
-   case 3:
-   case 4:
+   else if (IS_GEN(dev_priv, 3, 4))
return alternate ? 10 : 96000;
-   default:
+   else
return alternate ? 10 : 12;
-   }
 }
 
 static void
-- 
2.27.0

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


[Intel-gfx] [RFC 21/28] drm/i915: Allow render state to be compiled out

2021-04-14 Thread Tvrtko Ursulin
From: Tvrtko Ursulin 

Signed-off-by: Tvrtko Ursulin 
---
 drivers/gpu/drm/i915/Makefile|  8 
 drivers/gpu/drm/i915/i915_gem_render_state.c | 10 --
 2 files changed, 8 insertions(+), 10 deletions(-)

diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
index f55cc028b2eb..dd523e037523 100644
--- a/drivers/gpu/drm/i915/Makefile
+++ b/drivers/gpu/drm/i915/Makefile
@@ -92,10 +92,10 @@ i915-y += intel_uc.o \
  intel_huc.o
 
 # autogenerated null render state
-i915-y += intel_renderstate_gen6.o \
- intel_renderstate_gen7.o \
- intel_renderstate_gen8.o \
- intel_renderstate_gen9.o
+i915-$(CONFIG_DRM_I915_GEN6) += intel_renderstate_gen6.o
+i915-$(CONFIG_DRM_I915_GEN7) += intel_renderstate_gen7.o
+i915-$(CONFIG_DRM_I915_GEN8) += intel_renderstate_gen8.o
+i915-$(CONFIG_DRM_I915_GEN9) += intel_renderstate_gen9.o
 
 # modesetting core code
 i915-y += intel_audio.o \
diff --git a/drivers/gpu/drm/i915/i915_gem_render_state.c 
b/drivers/gpu/drm/i915/i915_gem_render_state.c
index f7fc0df251ac..26f7940049dc 100644
--- a/drivers/gpu/drm/i915/i915_gem_render_state.c
+++ b/drivers/gpu/drm/i915/i915_gem_render_state.c
@@ -45,16 +45,14 @@ render_state_get_rodata(const struct intel_engine_cs 
*engine)
if (engine->id != RCS)
return NULL;
 
-   switch (INTEL_GEN(engine->i915)) {
-   case 6:
+   if (IS_GEN6(engine->i915))
return &gen6_null_state;
-   case 7:
+   else if (IS_GEN7(engine->i915))
return &gen7_null_state;
-   case 8:
+   else if (IS_GEN8(engine->i915))
return &gen8_null_state;
-   case 9:
+   else if (IS_GEN9(engine->i915))
return &gen9_null_state;
-   }
 
return NULL;
 }
-- 
2.27.0

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


[Intel-gfx] [RFC 20/28] drm/i915: Use IS_GEN in execbuffer

2021-04-14 Thread Tvrtko Ursulin
From: Tvrtko Ursulin 

Stop caching the gen and use the macros to enable compile time
optimisation.

Signed-off-by: Tvrtko Ursulin 
---
 drivers/gpu/drm/i915/i915_gem_execbuffer.c | 14 ++
 1 file changed, 6 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c 
b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
index 22b8ba9c94a2..090b43be3153 100644
--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
+++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
@@ -221,7 +221,6 @@ struct i915_execbuffer {
struct drm_mm_node node; /** temporary GTT binding */
unsigned long vaddr; /** Current kmap address */
unsigned long page; /** Currently mapped page index */
-   unsigned int gen; /** Cached value of INTEL_GEN */
bool use_64bit_reloc : 1;
bool has_llc : 1;
bool has_fence : 1;
@@ -848,10 +847,9 @@ static void reloc_cache_init(struct reloc_cache *cache,
cache->page = -1;
cache->vaddr = 0;
/* Must be a variable in the struct to allow GCC to unroll. */
-   cache->gen = INTEL_GEN(i915);
cache->has_llc = HAS_LLC(i915);
cache->use_64bit_reloc = HAS_64BIT_RELOC(i915);
-   cache->has_fence = cache->gen < 4;
+   cache->has_fence = IS_GEN(i915, GEN_FOREVER, 3);
cache->needs_unfenced = INTEL_INFO(i915)->unfenced_needs_alignment;
cache->node.allocated = false;
cache->rq = NULL;
@@ -1113,7 +,8 @@ static int __reloc_gpu_alloc(struct i915_execbuffer *eb,
 
err = eb->engine->emit_bb_start(rq,
batch->node.start, PAGE_SIZE,
-   cache->gen > 5 ? 0 : 
I915_DISPATCH_SECURE);
+   IS_GEN(eb->i915, 6, GEN_FOREVER) ?
+   0 : I915_DISPATCH_SECURE);
if (err)
goto err_request;
 
@@ -1192,14 +1191,13 @@ relocate_entry(struct i915_vma *vma,
if (!eb->reloc_cache.vaddr &&
(DBG_FORCE_RELOC == FORCE_GPU_RELOC ||
 !reservation_object_test_signaled_rcu(vma->resv, true))) {
-   const unsigned int gen = eb->reloc_cache.gen;
unsigned int len;
u32 *batch;
u64 addr;
 
if (wide)
len = offset & 7 ? 8 : 5;
-   else if (gen >= 4)
+   else if (IS_GEN(eb->i915, 4, GEN_FOREVER))
len = 4;
else
len = 3;
@@ -1229,12 +1227,12 @@ relocate_entry(struct i915_vma *vma,
*batch++ = lower_32_bits(target_offset);
*batch++ = upper_32_bits(target_offset);
}
-   } else if (gen >= 6) {
+   } else if (IS_GEN(eb->i915, 6, GEN_FOREVER)) {
*batch++ = MI_STORE_DWORD_IMM_GEN4;
*batch++ = 0;
*batch++ = addr;
*batch++ = target_offset;
-   } else if (gen >= 4) {
+   } else if (IS_GEN(eb->i915, 4, GEN_FOREVER)) {
*batch++ = MI_STORE_DWORD_IMM_GEN4 | MI_USE_GGTT;
*batch++ = 0;
*batch++ = addr;
-- 
2.27.0

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


[Intel-gfx] [RFC 18/28] drm/i915: Use Gen Kconfig items in IS_GEN macro

2021-04-14 Thread Tvrtko Ursulin
From: Tvrtko Ursulin 

Signed-off-by: Tvrtko Ursulin 
---
 drivers/gpu/drm/i915/i915_drv.h | 31 ++-
 1 file changed, 30 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 4f140e95207e..0e65e0bc3d09 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2557,13 +2557,42 @@ intel_info(const struct drm_i915_private *dev_priv)
(s) != GEN_FOREVER ? (s) - 1 : 0) \
 )
 
+#define __gen_test_mask(s, e) \
+({ \
+   u16 m__ = (u16)INTEL_GEN_MASK((s), (e)); \
+\
+   m__ &= ~BIT(0); \
+   if (!IS_ENABLED(CONFIG_DRM_I915_GEN2)) \
+   m__ &= ~BIT(1); \
+   if (!IS_ENABLED(CONFIG_DRM_I915_GEN3)) \
+   m__ &= ~BIT(2); \
+   if (!IS_ENABLED(CONFIG_DRM_I915_GEN4)) \
+   m__ &= ~BIT(3); \
+   if (!IS_ENABLED(CONFIG_DRM_I915_GEN5)) \
+   m__ &= ~BIT(4); \
+   if (!IS_ENABLED(CONFIG_DRM_I915_GEN6)) \
+   m__ &= ~BIT(5); \
+   if (!IS_ENABLED(CONFIG_DRM_I915_GEN7)) \
+   m__ &= ~BIT(6); \
+   if (!IS_ENABLED(CONFIG_DRM_I915_GEN8)) \
+   m__ &= ~BIT(7); \
+   if (!IS_ENABLED(CONFIG_DRM_I915_GEN9)) \
+   m__ &= ~BIT(8); \
+   if (!IS_ENABLED(CONFIG_DRM_I915_GEN10)) \
+   m__ &= ~BIT(9); \
+   if (!IS_ENABLED(CONFIG_DRM_I915_GEN11)) \
+   m__ &= ~BIT(10); \
+\
+   m__; \
+})
+
 /*
  * Returns true if Gen is in inclusive range [Start, End].
  *
  * Use GEN_FOREVER for unbound start and or end.
  */
 #define IS_GEN(dev_priv, s, e) \
-   (!!((dev_priv)->info.gen_mask & INTEL_GEN_MASK((s), (e
+   (!!(__gen_test_mask((s), (e)) & (dev_priv)->info.gen_mask))
 
 /*
  * Return true if revision is in range [since,until] inclusive.
-- 
2.27.0

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


[Intel-gfx] [RFC 13/28] drm/i915: Make Gen10 platform support optional

2021-04-14 Thread Tvrtko Ursulin
From: Tvrtko Ursulin 

Signed-off-by: Tvrtko Ursulin 
---
 drivers/gpu/drm/i915/Kconfig.platforms | 11 +++
 drivers/gpu/drm/i915/i915_drv.h|  6 --
 drivers/gpu/drm/i915/i915_pci.c|  4 
 3 files changed, 19 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/Kconfig.platforms 
b/drivers/gpu/drm/i915/Kconfig.platforms
index 5a7aeebee482..3d4d6deea0de 100644
--- a/drivers/gpu/drm/i915/Kconfig.platforms
+++ b/drivers/gpu/drm/i915/Kconfig.platforms
@@ -230,3 +230,14 @@ config DRM_I915_PLATFORM_INTEL_BROXTON
help
  Include support for Intel Coffeelake platforms.
 
+config DRM_I915_GEN10
+   bool
+
+config DRM_I915_PLATFORM_INTEL_CANNONLAKE
+   bool "Intel Cannonlake platform support"
+   default y
+   depends on DRM_I915
+   select DRM_I915_GEN10
+   help
+ Include support for Intel Cannonlake platforms.
+
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 32b22b379a0c..90a83876b72d 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2611,7 +2611,7 @@ intel_info(const struct drm_i915_private *dev_priv)
 #define IS_KABYLAKE(dev_priv)  IS_OPT_PLATFORM(dev_priv, INTEL_KABYLAKE)
 #define IS_GEMINILAKE(dev_priv)IS_OPT_PLATFORM(dev_priv, 
INTEL_GEMINILAKE)
 #define IS_COFFEELAKE(dev_priv)IS_OPT_PLATFORM(dev_priv, 
INTEL_COFFEELAKE)
-#define IS_CANNONLAKE(dev_priv)IS_PLATFORM(dev_priv, INTEL_CANNONLAKE)
+#define IS_CANNONLAKE(dev_priv)IS_OPT_PLATFORM(dev_priv, 
INTEL_CANNONLAKE)
 #define IS_ICELAKE(dev_priv)   IS_PLATFORM(dev_priv, INTEL_ICELAKE)
 #define IS_MOBILE(dev_priv)((dev_priv)->info.is_mobile)
 #define IS_HSW_EARLY_SDV(dev_priv) (IS_HASWELL(dev_priv) && \
@@ -2747,7 +2747,9 @@ intel_info(const struct drm_i915_private *dev_priv)
 #define IS_GEN9(dev_priv) \
(IS_ENABLED(CONFIG_DRM_I915_GEN9) && \
 ((dev_priv)->info.gen_mask & BIT(8)))
-#define IS_GEN10(dev_priv) (!!((dev_priv)->info.gen_mask & BIT(9)))
+#define IS_GEN10(dev_priv) \
+   (IS_ENABLED(CONFIG_DRM_I915_GEN10) && \
+((dev_priv)->info.gen_mask & BIT(9)))
 #define IS_GEN11(dev_priv) (!!((dev_priv)->info.gen_mask & BIT(10)))
 
 #define IS_LP(dev_priv)(INTEL_INFO(dev_priv)->is_lp)
diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
index 49b0cbfcd76c..4d0d84dec9df 100644
--- a/drivers/gpu/drm/i915/i915_pci.c
+++ b/drivers/gpu/drm/i915/i915_pci.c
@@ -629,6 +629,7 @@ static const struct intel_device_info 
intel_coffeelake_gt3_info = {
.ddb_size = 1024, \
GLK_COLORS
 
+#ifdef CONFIG_DRM_I915_PLATFORM_INTEL_CANNONLAKE
 static const struct intel_device_info intel_cannonlake_info = {
GEN10_FEATURES,
.is_alpha_support = 1,
@@ -636,6 +637,7 @@ static const struct intel_device_info intel_cannonlake_info 
= {
.gen = 10,
.gt = 2,
 };
+#endif
 
 #define GEN11_FEATURES \
GEN10_FEATURES, \
@@ -759,7 +761,9 @@ static const struct pci_device_id pciidlist[] = {
INTEL_CFL_U_GT2_IDS(&intel_coffeelake_gt2_info),
INTEL_CFL_U_GT3_IDS(&intel_coffeelake_gt3_info),
 #endif
+#ifdef CONFIG_DRM_I915_PLATFORM_INTEL_CANNONLAKE
INTEL_CNL_IDS(&intel_cannonlake_info),
+#endif
{0, 0, 0}
 };
 MODULE_DEVICE_TABLE(pci, pciidlist);
-- 
2.27.0

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


[Intel-gfx] [RFC 17/28] drm/i915: Favour IS_GENx

2021-04-14 Thread Tvrtko Ursulin
From: Tvrtko Ursulin 

Replace INTEL_GEN (not-)equals with IS_GENx for more optimisation
opportunities.

Signed-off-by: Tvrtko Ursulin 
---
 drivers/gpu/drm/i915/intel_device_info.c | 4 ++--
 drivers/gpu/drm/i915/intel_fbc.c | 2 +-
 drivers/gpu/drm/i915/intel_pm.c  | 6 +++---
 drivers/gpu/drm/i915/intel_ringbuffer.h  | 4 ++--
 4 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/drivers/gpu/drm/i915/intel_device_info.c 
b/drivers/gpu/drm/i915/intel_device_info.c
index 298f8996cc54..3983d6a44f78 100644
--- a/drivers/gpu/drm/i915/intel_device_info.c
+++ b/drivers/gpu/drm/i915/intel_device_info.c
@@ -483,7 +483,7 @@ void intel_device_info_runtime_init(struct 
intel_device_info *info)
if (INTEL_GEN(dev_priv) >= 10) {
for_each_pipe(dev_priv, pipe)
info->num_scalers[pipe] = 2;
-   } else if (INTEL_GEN(dev_priv) == 9) {
+   } else if (IS_GEN9(dev_priv)) {
info->num_scalers[PIPE_A] = 2;
info->num_scalers[PIPE_B] = 2;
info->num_scalers[PIPE_C] = 1;
@@ -578,7 +578,7 @@ void intel_device_info_runtime_init(struct 
intel_device_info *info)
cherryview_sseu_info_init(dev_priv);
else if (IS_BROADWELL(dev_priv))
broadwell_sseu_info_init(dev_priv);
-   else if (INTEL_GEN(dev_priv) == 9)
+   else if (IS_GEN9(dev_priv))
gen9_sseu_info_init(dev_priv);
else if (INTEL_GEN(dev_priv) >= 10)
gen10_sseu_info_init(dev_priv);
diff --git a/drivers/gpu/drm/i915/intel_fbc.c b/drivers/gpu/drm/i915/intel_fbc.c
index d7d1ac79c38a..0ad854095c38 100644
--- a/drivers/gpu/drm/i915/intel_fbc.c
+++ b/drivers/gpu/drm/i915/intel_fbc.c
@@ -94,7 +94,7 @@ static int intel_fbc_calculate_cfb_size(struct 
drm_i915_private *dev_priv,
int lines;
 
intel_fbc_get_plane_source_size(cache, NULL, &lines);
-   if (INTEL_GEN(dev_priv) == 7)
+   if (IS_GEN7(dev_priv))
lines = min(lines, 2048);
else if (INTEL_GEN(dev_priv) >= 8)
lines = min(lines, 2560);
diff --git a/drivers/gpu/drm/i915/intel_pm.c b/drivers/gpu/drm/i915/intel_pm.c
index 6f98d144924e..b026b020d8b8 100644
--- a/drivers/gpu/drm/i915/intel_pm.c
+++ b/drivers/gpu/drm/i915/intel_pm.c
@@ -7554,7 +7554,7 @@ unsigned long i915_chipset_val(struct drm_i915_private 
*dev_priv)
 {
unsigned long val;
 
-   if (INTEL_GEN(dev_priv) != 5)
+   if (!IS_GEN5(dev_priv))
return 0;
 
spin_lock_irq(&mchdev_lock);
@@ -7638,7 +7638,7 @@ static void __i915_update_gfx_val(struct drm_i915_private 
*dev_priv)
 
 void i915_update_gfx_val(struct drm_i915_private *dev_priv)
 {
-   if (INTEL_GEN(dev_priv) != 5)
+   if (!IS_GEN5(dev_priv))
return;
 
spin_lock_irq(&mchdev_lock);
@@ -7689,7 +7689,7 @@ unsigned long i915_gfx_val(struct drm_i915_private 
*dev_priv)
 {
unsigned long val;
 
-   if (INTEL_GEN(dev_priv) != 5)
+   if (!IS_GEN5(dev_priv))
return 0;
 
spin_lock_irq(&mchdev_lock);
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.h 
b/drivers/gpu/drm/i915/intel_ringbuffer.h
index 8f1a4badf812..6b9a0c7f0af4 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.h
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.h
@@ -85,11 +85,11 @@ hangcheck_action_to_str(const enum 
intel_engine_hangcheck_action a)
 #define I915_MAX_SUBSLICES 3
 
 #define instdone_slice_mask(dev_priv__) \
-   (INTEL_GEN(dev_priv__) == 7 ? \
+   (IS_GEN7(dev_priv__) ? \
 1 : INTEL_INFO(dev_priv__)->sseu.slice_mask)
 
 #define instdone_subslice_mask(dev_priv__) \
-   (INTEL_GEN(dev_priv__) == 7 ? \
+   (IS_GEN7(dev_priv__) ? \
 1 : INTEL_INFO(dev_priv__)->sseu.subslice_mask)
 
 #define for_each_instdone_slice_subslice(dev_priv__, slice__, subslice__) \
-- 
2.27.0

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


[Intel-gfx] [RFC 15/28] drm/i915: Simplify IS_GEN macros

2021-04-14 Thread Tvrtko Ursulin
From: Tvrtko Ursulin 

Signed-off-by: Tvrtko Ursulin 
---
 drivers/gpu/drm/i915/i915_drv.h | 44 +++--
 1 file changed, 14 insertions(+), 30 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index fa5aa0e3a776..4f140e95207e 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2723,36 +2723,20 @@ intel_info(const struct drm_i915_private *dev_priv)
  * have their own (e.g. HAS_PCH_SPLIT for ILK+ display, IS_foo for particular
  * chips, etc.).
  */
-#define IS_GEN2(dev_priv) \
-   (IS_ENABLED(CONFIG_DRM_I915_GEN2) && \
-((dev_priv)->info.gen_mask & BIT(1)))
-#define IS_GEN3(dev_priv) \
-   (IS_ENABLED(CONFIG_DRM_I915_GEN3) && \
-((dev_priv)->info.gen_mask & BIT(2)))
-#define IS_GEN4(dev_priv) \
-   (IS_ENABLED(CONFIG_DRM_I915_GEN4) && \
-((dev_priv)->info.gen_mask & BIT(3)))
-#define IS_GEN5(dev_priv) \
-   (IS_ENABLED(CONFIG_DRM_I915_GEN5) && \
-((dev_priv)->info.gen_mask & BIT(4)))
-#define IS_GEN6(dev_priv) \
-   (IS_ENABLED(CONFIG_DRM_I915_GEN6) && \
-((dev_priv)->info.gen_mask & BIT(5)))
-#define IS_GEN7(dev_priv) \
-   (IS_ENABLED(CONFIG_DRM_I915_GEN7) && \
-((dev_priv)->info.gen_mask & BIT(6)))
-#define IS_GEN8(dev_priv) \
-   (IS_ENABLED(CONFIG_DRM_I915_GEN8) && \
-((dev_priv)->info.gen_mask & BIT(7)))
-#define IS_GEN9(dev_priv) \
-   (IS_ENABLED(CONFIG_DRM_I915_GEN9) && \
-((dev_priv)->info.gen_mask & BIT(8)))
-#define IS_GEN10(dev_priv) \
-   (IS_ENABLED(CONFIG_DRM_I915_GEN10) && \
-((dev_priv)->info.gen_mask & BIT(9)))
-#define IS_GEN11(dev_priv) \
-   (IS_ENABLED(CONFIG_DRM_I915_GEN11) && \
-((dev_priv)->info.gen_mask & BIT(10)))
+#define IS_GENx(p, g) \
+   (IS_ENABLED(CONFIG_DRM_I915_GEN##g) && \
+((p)->info.gen_mask & BIT((g) - 1)))
+
+#define IS_GEN2(p) IS_GENx(p, 2)
+#define IS_GEN3(p) IS_GENx(p, 3)
+#define IS_GEN4(p) IS_GENx(p, 4)
+#define IS_GEN5(p) IS_GENx(p, 5)
+#define IS_GEN6(p) IS_GENx(p, 6)
+#define IS_GEN7(p) IS_GENx(p, 7)
+#define IS_GEN8(p) IS_GENx(p, 8)
+#define IS_GEN9(p) IS_GENx(p, 9)
+#define IS_GEN10(p) IS_GENx(p, 10)
+#define IS_GEN11(p) IS_GENx(p, 11)
 
 #define IS_LP(dev_priv)(INTEL_INFO(dev_priv)->is_lp)
 #define IS_GEN9_LP(dev_priv)   (IS_GEN9(dev_priv) && IS_LP(dev_priv))
-- 
2.27.0

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


[Intel-gfx] [RFC 16/28] drm/i915: Use INTEL_GEN everywhere

2021-04-14 Thread Tvrtko Ursulin
From: Tvrtko Ursulin 

Coccinelle patch:

 @@
 identifier p;
 @@
 -INTEL_INFO(p)->gen
 +INTEL_GEN(p)

Signed-off-by: Tvrtko Ursulin 
---
 drivers/gpu/drm/i915/i915_gem.c |  4 ++--
 drivers/gpu/drm/i915/i915_gem_gtt.c |  2 +-
 drivers/gpu/drm/i915/i915_gem_stolen.c  |  2 +-
 drivers/gpu/drm/i915/intel_audio.c  |  2 +-
 drivers/gpu/drm/i915/intel_bios.c   |  2 +-
 drivers/gpu/drm/i915/intel_cdclk.c  |  2 +-
 drivers/gpu/drm/i915/intel_ddi.c|  2 +-
 drivers/gpu/drm/i915/intel_display.c| 12 ++--
 drivers/gpu/drm/i915/intel_dp.c |  4 ++--
 drivers/gpu/drm/i915/intel_lvds.c   |  2 +-
 drivers/gpu/drm/i915/intel_mocs.c   |  2 +-
 drivers/gpu/drm/i915/intel_panel.c  |  2 +-
 drivers/gpu/drm/i915/intel_pm.c |  8 
 drivers/gpu/drm/i915/intel_psr.c|  4 ++--
 drivers/gpu/drm/i915/intel_ringbuffer.c |  2 +-
 drivers/gpu/drm/i915/intel_uncore.c |  6 +++---
 16 files changed, 29 insertions(+), 29 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 349f127330c8..fc68b35854df 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -5424,10 +5424,10 @@ i915_gem_load_init_fences(struct drm_i915_private 
*dev_priv)
 {
int i;
 
-   if (INTEL_INFO(dev_priv)->gen >= 7 && !IS_VALLEYVIEW(dev_priv) &&
+   if (INTEL_GEN(dev_priv) >= 7 && !IS_VALLEYVIEW(dev_priv) &&
!IS_CHERRYVIEW(dev_priv))
dev_priv->num_fence_regs = 32;
-   else if (INTEL_INFO(dev_priv)->gen >= 4 ||
+   else if (INTEL_GEN(dev_priv) >= 4 ||
 IS_I945G(dev_priv) || IS_I945GM(dev_priv) ||
 IS_G33(dev_priv) || IS_PINEVIEW(dev_priv))
dev_priv->num_fence_regs = 16;
diff --git a/drivers/gpu/drm/i915/i915_gem_gtt.c 
b/drivers/gpu/drm/i915/i915_gem_gtt.c
index 955ce7bee448..0c0f1affddad 100644
--- a/drivers/gpu/drm/i915/i915_gem_gtt.c
+++ b/drivers/gpu/drm/i915/i915_gem_gtt.c
@@ -2109,7 +2109,7 @@ static int __hw_ppgtt_init(struct i915_hw_ppgtt *ppgtt,
ppgtt->base.i915 = dev_priv;
ppgtt->base.dma = &dev_priv->drm.pdev->dev;
 
-   if (INTEL_INFO(dev_priv)->gen < 8)
+   if (INTEL_GEN(dev_priv) < 8)
return gen6_ppgtt_init(ppgtt);
else
return gen8_ppgtt_init(ppgtt);
diff --git a/drivers/gpu/drm/i915/i915_gem_stolen.c 
b/drivers/gpu/drm/i915/i915_gem_stolen.c
index d3f222fa6356..f18da9e2be8e 100644
--- a/drivers/gpu/drm/i915/i915_gem_stolen.c
+++ b/drivers/gpu/drm/i915/i915_gem_stolen.c
@@ -356,7 +356,7 @@ int i915_gem_init_stolen(struct drm_i915_private *dev_priv)
reserved_base = 0;
reserved_size = 0;
 
-   switch (INTEL_INFO(dev_priv)->gen) {
+   switch (INTEL_GEN(dev_priv)) {
case 2:
case 3:
break;
diff --git a/drivers/gpu/drm/i915/intel_audio.c 
b/drivers/gpu/drm/i915/intel_audio.c
index 522d54fecb53..ff455c724775 100644
--- a/drivers/gpu/drm/i915/intel_audio.c
+++ b/drivers/gpu/drm/i915/intel_audio.c
@@ -704,7 +704,7 @@ void intel_init_audio_hooks(struct drm_i915_private 
*dev_priv)
} else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) {
dev_priv->display.audio_codec_enable = ilk_audio_codec_enable;
dev_priv->display.audio_codec_disable = ilk_audio_codec_disable;
-   } else if (IS_HASWELL(dev_priv) || INTEL_INFO(dev_priv)->gen >= 8) {
+   } else if (IS_HASWELL(dev_priv) || INTEL_GEN(dev_priv) >= 8) {
dev_priv->display.audio_codec_enable = hsw_audio_codec_enable;
dev_priv->display.audio_codec_disable = hsw_audio_codec_disable;
} else if (HAS_PCH_SPLIT(dev_priv)) {
diff --git a/drivers/gpu/drm/i915/intel_bios.c 
b/drivers/gpu/drm/i915/intel_bios.c
index 4e74aa2f16bc..aa4df6548771 100644
--- a/drivers/gpu/drm/i915/intel_bios.c
+++ b/drivers/gpu/drm/i915/intel_bios.c
@@ -391,7 +391,7 @@ parse_sdvo_panel_data(struct drm_i915_private *dev_priv,
 static int intel_bios_ssc_frequency(struct drm_i915_private *dev_priv,
bool alternate)
 {
-   switch (INTEL_INFO(dev_priv)->gen) {
+   switch (INTEL_GEN(dev_priv)) {
case 2:
return alternate ? 7 : 48000;
case 3:
diff --git a/drivers/gpu/drm/i915/intel_cdclk.c 
b/drivers/gpu/drm/i915/intel_cdclk.c
index ee788d5be5e3..aab6d1538fff 100644
--- a/drivers/gpu/drm/i915/intel_cdclk.c
+++ b/drivers/gpu/drm/i915/intel_cdclk.c
@@ -2233,7 +2233,7 @@ static int intel_compute_max_dotclk(struct 
drm_i915_private *dev_priv)
return max_cdclk_freq;
else if (IS_CHERRYVIEW(dev_priv))
return max_cdclk_freq*95/100;
-   else if (INTEL_INFO(dev_priv)->gen < 4)
+   else if (INTEL_GEN(dev_priv) < 4)
return 2*max_cdclk_freq*90/100;
else
return max_cdclk_freq*90/100;
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu

[Intel-gfx] [RFC 11/28] drm/i915: Make Gen8 platform support optional

2021-04-14 Thread Tvrtko Ursulin
From: Tvrtko Ursulin 

Signed-off-by: Tvrtko Ursulin 
---
 drivers/gpu/drm/i915/Kconfig.platforms | 19 +++
 drivers/gpu/drm/i915/i915_drv.h|  8 +---
 drivers/gpu/drm/i915/i915_pci.c|  8 
 3 files changed, 32 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/i915/Kconfig.platforms 
b/drivers/gpu/drm/i915/Kconfig.platforms
index 1fe95996879a..346d440d049c 100644
--- a/drivers/gpu/drm/i915/Kconfig.platforms
+++ b/drivers/gpu/drm/i915/Kconfig.platforms
@@ -167,3 +167,22 @@ config DRM_I915_PLATFORM_INTEL_HASWELL
select DRM_I915_GEN7
help
  Include support for Intel Haswell platforms.
+
+config DRM_I915_GEN8
+   bool
+
+config DRM_I915_PLATFORM_INTEL_BROADWELL
+   bool "Intel Broadwell platform support"
+   default y
+   depends on DRM_I915
+   select DRM_I915_GEN8
+   help
+ Include support for Intel Broadwell platforms.
+
+config DRM_I915_PLATFORM_INTEL_CHERRYVIEW
+   bool "Intel Cherryview platform support"
+   default y
+   depends on DRM_I915
+   select DRM_I915_GEN8
+   help
+ Include support for Intel Cherryview platforms.
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 1b82dadc7b0b..6658015c4a9f 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2603,9 +2603,9 @@ intel_info(const struct drm_i915_private *dev_priv)
 #define IS_IVB_GT1(dev_priv)   (IS_IVYBRIDGE(dev_priv) && \
 (dev_priv)->info.gt == 1)
 #define IS_VALLEYVIEW(dev_priv)IS_OPT_PLATFORM(dev_priv, 
INTEL_VALLEYVIEW)
-#define IS_CHERRYVIEW(dev_priv)IS_PLATFORM(dev_priv, INTEL_CHERRYVIEW)
+#define IS_CHERRYVIEW(dev_priv)IS_OPT_PLATFORM(dev_priv, 
INTEL_CHERRYVIEW)
 #define IS_HASWELL(dev_priv)   IS_OPT_PLATFORM(dev_priv, INTEL_HASWELL)
-#define IS_BROADWELL(dev_priv) IS_PLATFORM(dev_priv, INTEL_BROADWELL)
+#define IS_BROADWELL(dev_priv) IS_OPT_PLATFORM(dev_priv, INTEL_BROADWELL)
 #define IS_SKYLAKE(dev_priv)   IS_PLATFORM(dev_priv, INTEL_SKYLAKE)
 #define IS_BROXTON(dev_priv)   IS_PLATFORM(dev_priv, INTEL_BROXTON)
 #define IS_KABYLAKE(dev_priv)  IS_PLATFORM(dev_priv, INTEL_KABYLAKE)
@@ -2736,7 +2736,9 @@ intel_info(const struct drm_i915_private *dev_priv)
 #define IS_GEN7(dev_priv) \
(IS_ENABLED(CONFIG_DRM_I915_GEN7) && \
 ((dev_priv)->info.gen_mask & BIT(6)))
-#define IS_GEN8(dev_priv)  (!!((dev_priv)->info.gen_mask & BIT(7)))
+#define IS_GEN8(dev_priv) \
+   (IS_ENABLED(CONFIG_DRM_I915_GEN8) && \
+((dev_priv)->info.gen_mask & BIT(7)))
 #define IS_GEN9(dev_priv)  (!!((dev_priv)->info.gen_mask & BIT(8)))
 #define IS_GEN10(dev_priv) (!!((dev_priv)->info.gen_mask & BIT(9)))
 #define IS_GEN11(dev_priv) (!!((dev_priv)->info.gen_mask & BIT(10)))
diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
index 205a8fc5e8be..4645f3e2eea4 100644
--- a/drivers/gpu/drm/i915/i915_pci.c
+++ b/drivers/gpu/drm/i915/i915_pci.c
@@ -430,6 +430,7 @@ static const struct intel_device_info 
intel_haswell_gt3_info = {
.gen = 8, \
.platform = INTEL_BROADWELL
 
+#ifdef CONFIG_DRM_I915_PLATFORM_INTEL_BROADWELL
 static const struct intel_device_info intel_broadwell_gt1_info = {
BDW_PLATFORM,
.gt = 1,
@@ -453,7 +454,9 @@ static const struct intel_device_info 
intel_broadwell_gt3_info = {
.gt = 3,
.ring_mask = RENDER_RING | BSD_RING | BLT_RING | VEBOX_RING | BSD2_RING,
 };
+#endif
 
+#ifdef CONFIG_DRM_I915_PLATFORM_INTEL_CHERRYVIEW
 static const struct intel_device_info intel_cherryview_info = {
.gen = 8, .num_pipes = 3,
.has_hotplug = 1,
@@ -477,6 +480,7 @@ static const struct intel_device_info intel_cherryview_info 
= {
CURSOR_OFFSETS,
CHV_COLORS,
 };
+#endif
 
 #define GEN9_DEFAULT_PAGE_SIZES \
.page_sizes = I915_GTT_PAGE_SIZE_4K | \
@@ -708,11 +712,15 @@ static const struct pci_device_id pciidlist[] = {
 #ifdef CONFIG_DRM_I915_PLATFORM_INTEL_VALLEYVIEW
INTEL_VLV_IDS(&intel_valleyview_info),
 #endif
+#ifdef CONFIG_DRM_I915_PLATFORM_INTEL_BROADWELL
INTEL_BDW_GT1_IDS(&intel_broadwell_gt1_info),
INTEL_BDW_GT2_IDS(&intel_broadwell_gt2_info),
INTEL_BDW_GT3_IDS(&intel_broadwell_gt3_info),
INTEL_BDW_RSVD_IDS(&intel_broadwell_rsvd_info),
+#endif
+#ifdef CONFIG_DRM_I915_PLATFORM_INTEL_CHERRYVIEW
INTEL_CHV_IDS(&intel_cherryview_info),
+#endif
INTEL_SKL_GT1_IDS(&intel_skylake_gt1_info),
INTEL_SKL_GT2_IDS(&intel_skylake_gt2_info),
INTEL_SKL_GT3_IDS(&intel_skylake_gt3_info),
-- 
2.27.0

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


[Intel-gfx] [RFC 12/28] drm/i915: Make Gen9 platform support optional

2021-04-14 Thread Tvrtko Ursulin
From: Tvrtko Ursulin 

Signed-off-by: Tvrtko Ursulin 
---
 drivers/gpu/drm/i915/Kconfig.platforms | 44 +
 drivers/gpu/drm/i915/i915_drv.h| 53 +++---
 drivers/gpu/drm/i915/i915_pci.c| 22 +++
 3 files changed, 96 insertions(+), 23 deletions(-)

diff --git a/drivers/gpu/drm/i915/Kconfig.platforms 
b/drivers/gpu/drm/i915/Kconfig.platforms
index 346d440d049c..5a7aeebee482 100644
--- a/drivers/gpu/drm/i915/Kconfig.platforms
+++ b/drivers/gpu/drm/i915/Kconfig.platforms
@@ -186,3 +186,47 @@ config DRM_I915_PLATFORM_INTEL_CHERRYVIEW
select DRM_I915_GEN8
help
  Include support for Intel Cherryview platforms.
+
+config DRM_I915_GEN9
+   bool
+
+config DRM_I915_PLATFORM_INTEL_SKYLAKE
+   bool "Intel Skylake platform support"
+   default y
+   depends on DRM_I915
+   select DRM_I915_GEN9
+   help
+ Include support for Intel Skylake platforms.
+
+config DRM_I915_PLATFORM_INTEL_BROXTON
+   bool "Intel Broxton platform support"
+   default y
+   depends on DRM_I915
+   select DRM_I915_GEN9
+   help
+ Include support for Intel Broxton platforms.
+
+ config DRM_I915_PLATFORM_INTEL_GEMINILAKE
+   bool "Intel Geminilake platform support"
+   default y
+   depends on DRM_I915
+   select DRM_I915_GEN9
+   help
+ Include support for Intel Geminilake platforms.
+
+ config DRM_I915_PLATFORM_INTEL_KABYLAKE
+   bool "Intel Kabylake platform support"
+   default y
+   depends on DRM_I915
+   select DRM_I915_GEN9
+   help
+ Include support for Intel Kabylake platforms.
+
+ config DRM_I915_PLATFORM_INTEL_COFFEELAKE
+   bool "Intel Coffeelake platform support"
+   default y
+   depends on DRM_I915
+   select DRM_I915_GEN9
+   help
+ Include support for Intel Coffeelake platforms.
+
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 6658015c4a9f..32b22b379a0c 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2606,11 +2606,11 @@ intel_info(const struct drm_i915_private *dev_priv)
 #define IS_CHERRYVIEW(dev_priv)IS_OPT_PLATFORM(dev_priv, 
INTEL_CHERRYVIEW)
 #define IS_HASWELL(dev_priv)   IS_OPT_PLATFORM(dev_priv, INTEL_HASWELL)
 #define IS_BROADWELL(dev_priv) IS_OPT_PLATFORM(dev_priv, INTEL_BROADWELL)
-#define IS_SKYLAKE(dev_priv)   IS_PLATFORM(dev_priv, INTEL_SKYLAKE)
-#define IS_BROXTON(dev_priv)   IS_PLATFORM(dev_priv, INTEL_BROXTON)
-#define IS_KABYLAKE(dev_priv)  IS_PLATFORM(dev_priv, INTEL_KABYLAKE)
-#define IS_GEMINILAKE(dev_priv)IS_PLATFORM(dev_priv, INTEL_GEMINILAKE)
-#define IS_COFFEELAKE(dev_priv)IS_PLATFORM(dev_priv, INTEL_COFFEELAKE)
+#define IS_SKYLAKE(dev_priv)   IS_OPT_PLATFORM(dev_priv, INTEL_SKYLAKE)
+#define IS_BROXTON(dev_priv)   IS_OPT_PLATFORM(dev_priv, INTEL_BROXTON)
+#define IS_KABYLAKE(dev_priv)  IS_OPT_PLATFORM(dev_priv, INTEL_KABYLAKE)
+#define IS_GEMINILAKE(dev_priv)IS_OPT_PLATFORM(dev_priv, 
INTEL_GEMINILAKE)
+#define IS_COFFEELAKE(dev_priv)IS_OPT_PLATFORM(dev_priv, 
INTEL_COFFEELAKE)
 #define IS_CANNONLAKE(dev_priv)IS_PLATFORM(dev_priv, INTEL_CANNONLAKE)
 #define IS_ICELAKE(dev_priv)   IS_PLATFORM(dev_priv, INTEL_ICELAKE)
 #define IS_MOBILE(dev_priv)((dev_priv)->info.is_mobile)
@@ -2633,22 +2633,26 @@ intel_info(const struct drm_i915_private *dev_priv)
 #define IS_HSW_ULX(dev_priv)   (IS_HASWELL(dev_priv) && \
 (INTEL_DEVID(dev_priv) == 0x0A0E || \
  INTEL_DEVID(dev_priv) == 0x0A1E))
-#define IS_SKL_ULT(dev_priv)   (INTEL_DEVID(dev_priv) == 0x1906 || \
-INTEL_DEVID(dev_priv) == 0x1913 || \
-INTEL_DEVID(dev_priv) == 0x1916 || \
-INTEL_DEVID(dev_priv) == 0x1921 || \
-INTEL_DEVID(dev_priv) == 0x1926)
-#define IS_SKL_ULX(dev_priv)   (INTEL_DEVID(dev_priv) == 0x190E || \
-INTEL_DEVID(dev_priv) == 0x1915 || \
-INTEL_DEVID(dev_priv) == 0x191E)
-#define IS_KBL_ULT(dev_priv)   (INTEL_DEVID(dev_priv) == 0x5906 || \
-INTEL_DEVID(dev_priv) == 0x5913 || \
-INTEL_DEVID(dev_priv) == 0x5916 || \
-INTEL_DEVID(dev_priv) == 0x5921 || \
-INTEL_DEVID(dev_priv) == 0x5926)
-#define IS_KBL_ULX(dev_priv)   (INTEL_DEVID(dev_priv) == 0x590E || \
-INTEL_DEVID(dev_priv) == 0x5915 || \
-INTEL_DEVID(dev_priv) == 0x591E)
+#define IS_SKL_ULT(dev_priv)   (IS_SKYLAKE(dev_priv) && \
+(INTEL_DEVID(dev_priv) == 0x1906 || \
+ INTEL_DEVID(dev_priv) == 0x1913 || \
+ IN

[Intel-gfx] [RFC 14/28] drm/i915: Make Gen11 platform support optional

2021-04-14 Thread Tvrtko Ursulin
From: Tvrtko Ursulin 

Signed-off-by: Tvrtko Ursulin 
---
 drivers/gpu/drm/i915/Kconfig.platforms | 11 +++
 drivers/gpu/drm/i915/i915_drv.h|  6 --
 drivers/gpu/drm/i915/i915_pci.c|  2 ++
 3 files changed, 17 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/Kconfig.platforms 
b/drivers/gpu/drm/i915/Kconfig.platforms
index 3d4d6deea0de..4208222b2aaf 100644
--- a/drivers/gpu/drm/i915/Kconfig.platforms
+++ b/drivers/gpu/drm/i915/Kconfig.platforms
@@ -241,3 +241,14 @@ config DRM_I915_PLATFORM_INTEL_CANNONLAKE
help
  Include support for Intel Cannonlake platforms.
 
+config DRM_I915_GEN11
+   bool
+
+config DRM_I915_PLATFORM_INTEL_ICELAKE
+   bool "Intel Icelake platform support"
+   default y
+   depends on DRM_I915
+   select DRM_I915_GEN11
+   help
+ Include support for Intel Icelake platforms.
+
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 90a83876b72d..fa5aa0e3a776 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2612,7 +2612,7 @@ intel_info(const struct drm_i915_private *dev_priv)
 #define IS_GEMINILAKE(dev_priv)IS_OPT_PLATFORM(dev_priv, 
INTEL_GEMINILAKE)
 #define IS_COFFEELAKE(dev_priv)IS_OPT_PLATFORM(dev_priv, 
INTEL_COFFEELAKE)
 #define IS_CANNONLAKE(dev_priv)IS_OPT_PLATFORM(dev_priv, 
INTEL_CANNONLAKE)
-#define IS_ICELAKE(dev_priv)   IS_PLATFORM(dev_priv, INTEL_ICELAKE)
+#define IS_ICELAKE(dev_priv)   IS_OPT_PLATFORM(dev_priv, INTEL_ICELAKE)
 #define IS_MOBILE(dev_priv)((dev_priv)->info.is_mobile)
 #define IS_HSW_EARLY_SDV(dev_priv) (IS_HASWELL(dev_priv) && \
(INTEL_DEVID(dev_priv) & 0xFF00) == 0x0C00)
@@ -2750,7 +2750,9 @@ intel_info(const struct drm_i915_private *dev_priv)
 #define IS_GEN10(dev_priv) \
(IS_ENABLED(CONFIG_DRM_I915_GEN10) && \
 ((dev_priv)->info.gen_mask & BIT(9)))
-#define IS_GEN11(dev_priv) (!!((dev_priv)->info.gen_mask & BIT(10)))
+#define IS_GEN11(dev_priv) \
+   (IS_ENABLED(CONFIG_DRM_I915_GEN11) && \
+((dev_priv)->info.gen_mask & BIT(10)))
 
 #define IS_LP(dev_priv)(INTEL_INFO(dev_priv)->is_lp)
 #define IS_GEN9_LP(dev_priv)   (IS_GEN9(dev_priv) && IS_LP(dev_priv))
diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
index 4d0d84dec9df..44de0057f19c 100644
--- a/drivers/gpu/drm/i915/i915_pci.c
+++ b/drivers/gpu/drm/i915/i915_pci.c
@@ -645,12 +645,14 @@ static const struct intel_device_info 
intel_cannonlake_info = {
.ddb_size = 2048, \
.has_csr = 0
 
+#ifdef CONFIG_DRM_I915_PLATFORM_INTEL_ICELAKE
 static const struct intel_device_info intel_icelake_11_info = {
GEN11_FEATURES,
.platform = INTEL_ICELAKE,
.is_alpha_support = 1,
.has_resource_streamer = 0,
 };
+#endif
 
 /*
  * Make sure any device matches here are from most specific to most
-- 
2.27.0

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


[Intel-gfx] [RFC 06/28] drm/i915: Make Gen3 platforms support optional

2021-04-14 Thread Tvrtko Ursulin
From: Tvrtko Ursulin 

Signed-off-by: Tvrtko Ursulin 
---
 drivers/gpu/drm/i915/Kconfig.platforms | 51 ++
 drivers/gpu/drm/i915/i915_drv.h| 22 ++-
 drivers/gpu/drm/i915/i915_pci.c| 28 +-
 3 files changed, 90 insertions(+), 11 deletions(-)

diff --git a/drivers/gpu/drm/i915/Kconfig.platforms 
b/drivers/gpu/drm/i915/Kconfig.platforms
index 23a44c8eb07b..1fa09884a290 100644
--- a/drivers/gpu/drm/i915/Kconfig.platforms
+++ b/drivers/gpu/drm/i915/Kconfig.platforms
@@ -32,3 +32,54 @@ config DRM_I915_PLATFORM_INTEL_I865G
select DRM_I915_GEN2
help
  Include support for Intel i865G platform.
+
+config DRM_I915_GEN3
+   bool
+
+config DRM_I915_PLATFORM_INTEL_I915G
+   bool "Intel i915G platform support"
+   default y
+   depends on DRM_I915
+   select DRM_I915_GEN3
+   help
+ Include support for Intel i915G platform.
+
+config DRM_I915_PLATFORM_INTEL_I915GM
+   bool "Intel i915GM platform support"
+   default y
+   depends on DRM_I915
+   select DRM_I915_GEN3
+   help
+ Include support for Intel i915GM platform.
+
+config DRM_I915_PLATFORM_INTEL_I945G
+   bool "Intel i945G platform support"
+   default y
+   depends on DRM_I915
+   select DRM_I915_GEN3
+   help
+ Include support for Intel i945G platform.
+
+config DRM_I915_PLATFORM_INTEL_I945GM
+   bool "Intel i945GM platform support"
+   default y
+   depends on DRM_I915
+   select DRM_I915_GEN3
+   help
+ Include support for Intel i945GM platform.
+
+config DRM_I915_PLATFORM_INTEL_G33
+   bool "Intel G33 platform support"
+   default y
+   depends on DRM_I915
+   select DRM_I915_GEN3
+   help
+ Include support for Intel G33 platform.
+
+config DRM_I915_PLATFORM_INTEL_PINEVIEW
+   bool "Intel Pineview platform support"
+   default y
+   depends on DRM_I915
+   select DRM_I915_GEN3
+   help
+ Include support for Intel Pineview platform.
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index f718655294ea..949a8bf54d55 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2582,19 +2582,21 @@ intel_info(const struct drm_i915_private *dev_priv)
 #define IS_I845G(dev_priv) IS_OPT_PLATFORM(dev_priv, INTEL_I845G)
 #define IS_I85X(dev_priv)  IS_OPT_PLATFORM(dev_priv, INTEL_I85X)
 #define IS_I865G(dev_priv) IS_OPT_PLATFORM(dev_priv, INTEL_I865G)
-#define IS_I915G(dev_priv) IS_PLATFORM(dev_priv, INTEL_I915G)
-#define IS_I915GM(dev_priv)IS_PLATFORM(dev_priv, INTEL_I915GM)
-#define IS_I945G(dev_priv) IS_PLATFORM(dev_priv, INTEL_I945G)
-#define IS_I945GM(dev_priv)IS_PLATFORM(dev_priv, INTEL_I945GM)
+#define IS_I915G(dev_priv) IS_OPT_PLATFORM(dev_priv, INTEL_I915G)
+#define IS_I915GM(dev_priv)IS_OPT_PLATFORM(dev_priv, INTEL_I915GM)
+#define IS_I945G(dev_priv) IS_OPT_PLATFORM(dev_priv, INTEL_I945G)
+#define IS_I945GM(dev_priv)IS_OPT_PLATFORM(dev_priv, INTEL_I945GM)
 #define IS_I965G(dev_priv) IS_PLATFORM(dev_priv, INTEL_I965G)
 #define IS_I965GM(dev_priv)IS_PLATFORM(dev_priv, INTEL_I965GM)
 #define IS_G45(dev_priv)   IS_PLATFORM(dev_priv, INTEL_G45)
 #define IS_GM45(dev_priv)  IS_PLATFORM(dev_priv, INTEL_GM45)
 #define IS_G4X(dev_priv)   (IS_G45(dev_priv) || IS_GM45(dev_priv))
-#define IS_PINEVIEW_G(dev_priv)(INTEL_DEVID(dev_priv) == 0xa001)
-#define IS_PINEVIEW_M(dev_priv)(INTEL_DEVID(dev_priv) == 0xa011)
-#define IS_PINEVIEW(dev_priv)  IS_PLATFORM(dev_priv, INTEL_PINEVIEW)
-#define IS_G33(dev_priv)   IS_PLATFORM(dev_priv, INTEL_G33)
+#define IS_PINEVIEW_G(dev_priv)(IS_OPT_PLATFORM(dev_priv, 
INTEL_PINEVIEW) && \
+   (INTEL_DEVID(dev_priv) == 0xa001))
+#define IS_PINEVIEW_M(dev_priv)(IS_OPT_PLATFORM(dev_priv, 
INTEL_PINEVIEW) && \
+   (INTEL_DEVID(dev_priv) == 0xa011))
+#define IS_PINEVIEW(dev_priv)  IS_OPT_PLATFORM(dev_priv, INTEL_PINEVIEW)
+#define IS_G33(dev_priv)   IS_OPT_PLATFORM(dev_priv, INTEL_G33)
 #define IS_IRONLAKE_M(dev_priv)(INTEL_DEVID(dev_priv) == 0x0046)
 #define IS_IVYBRIDGE(dev_priv) IS_PLATFORM(dev_priv, INTEL_IVYBRIDGE)
 #define IS_IVB_GT1(dev_priv)   (IS_IVYBRIDGE(dev_priv) && \
@@ -2717,7 +2719,9 @@ intel_info(const struct drm_i915_private *dev_priv)
 #define IS_GEN2(dev_priv) \
(IS_ENABLED(CONFIG_DRM_I915_GEN2) && \
 ((dev_priv)->info.gen_mask & BIT(1)))
-#define IS_GEN3(dev_priv)  (!!((dev_priv)->info.gen_mask & BIT(2)))
+#define IS_GEN3(dev_priv) \
+   (IS_ENABLED(CONFIG_DRM_I915_GEN3) && \
+((dev_priv)->info.gen_mask & BIT(2)))
 #define IS_GEN4(dev_priv)  (!!((dev_priv)->info.gen_mask & BIT(3)))
 #define IS_GEN5(dev_priv)  (!!((dev_priv)->info.gen_mask & BIT(4)))
 #define IS_GEN6(dev_priv)  (!!((dev_priv)->info.gen_mask & BIT(5)))
di

[Intel-gfx] [RFC 10/28] drm/i915: Make Gen7/7.5 platform support optional

2021-04-14 Thread Tvrtko Ursulin
From: Tvrtko Ursulin 

Signed-off-by: Tvrtko Ursulin 
---
 drivers/gpu/drm/i915/Kconfig.platforms | 26 ++
 drivers/gpu/drm/i915/i915_drv.h| 15 +--
 drivers/gpu/drm/i915/i915_pci.c| 14 ++
 3 files changed, 49 insertions(+), 6 deletions(-)

diff --git a/drivers/gpu/drm/i915/Kconfig.platforms 
b/drivers/gpu/drm/i915/Kconfig.platforms
index 1302eb3989be..1fe95996879a 100644
--- a/drivers/gpu/drm/i915/Kconfig.platforms
+++ b/drivers/gpu/drm/i915/Kconfig.platforms
@@ -141,3 +141,29 @@ config DRM_I915_PLATFORM_INTEL_SANDYBRIDGE
help
  Include support for Intel Sandybridge platforms.
 
+config DRM_I915_GEN7
+   bool
+
+config DRM_I915_PLATFORM_INTEL_IVYBRIDGE
+   bool "Intel Ivybridge platform support"
+   default y
+   depends on DRM_I915
+   select DRM_I915_GEN7
+   help
+ Include support for Intel Ivybridge platforms.
+
+config DRM_I915_PLATFORM_INTEL_VALLEYVIEW
+   bool "Intel Valleyview platform support"
+   default y
+   depends on DRM_I915
+   select DRM_I915_GEN7
+   help
+ Include support for Intel Valleyview platforms.
+
+config DRM_I915_PLATFORM_INTEL_HASWELL
+   bool "Intel Haswell platform support"
+   default y
+   depends on DRM_I915
+   select DRM_I915_GEN7
+   help
+ Include support for Intel Haswell platforms.
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 2bb6e88f4f63..1b82dadc7b0b 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2599,12 +2599,12 @@ intel_info(const struct drm_i915_private *dev_priv)
 #define IS_G33(dev_priv)   IS_OPT_PLATFORM(dev_priv, INTEL_G33)
 #define IS_IRONLAKE_M(dev_priv)(IS_OPT_PLATFORM(dev_priv, 
INTEL_IRONLAKE) && \
 (INTEL_DEVID(dev_priv) == 0x0046))
-#define IS_IVYBRIDGE(dev_priv) IS_PLATFORM(dev_priv, INTEL_IVYBRIDGE)
+#define IS_IVYBRIDGE(dev_priv) IS_OPT_PLATFORM(dev_priv, INTEL_IVYBRIDGE)
 #define IS_IVB_GT1(dev_priv)   (IS_IVYBRIDGE(dev_priv) && \
 (dev_priv)->info.gt == 1)
-#define IS_VALLEYVIEW(dev_priv)IS_PLATFORM(dev_priv, INTEL_VALLEYVIEW)
+#define IS_VALLEYVIEW(dev_priv)IS_OPT_PLATFORM(dev_priv, 
INTEL_VALLEYVIEW)
 #define IS_CHERRYVIEW(dev_priv)IS_PLATFORM(dev_priv, INTEL_CHERRYVIEW)
-#define IS_HASWELL(dev_priv)   IS_PLATFORM(dev_priv, INTEL_HASWELL)
+#define IS_HASWELL(dev_priv)   IS_OPT_PLATFORM(dev_priv, INTEL_HASWELL)
 #define IS_BROADWELL(dev_priv) IS_PLATFORM(dev_priv, INTEL_BROADWELL)
 #define IS_SKYLAKE(dev_priv)   IS_PLATFORM(dev_priv, INTEL_SKYLAKE)
 #define IS_BROXTON(dev_priv)   IS_PLATFORM(dev_priv, INTEL_BROXTON)
@@ -2630,8 +2630,9 @@ intel_info(const struct drm_i915_private *dev_priv)
 #define IS_HSW_GT3(dev_priv)   (IS_HASWELL(dev_priv) && \
 (dev_priv)->info.gt == 3)
 /* ULX machines are also considered ULT. */
-#define IS_HSW_ULX(dev_priv)   (INTEL_DEVID(dev_priv) == 0x0A0E || \
-INTEL_DEVID(dev_priv) == 0x0A1E)
+#define IS_HSW_ULX(dev_priv)   (IS_HASWELL(dev_priv) && \
+(INTEL_DEVID(dev_priv) == 0x0A0E || \
+ INTEL_DEVID(dev_priv) == 0x0A1E))
 #define IS_SKL_ULT(dev_priv)   (INTEL_DEVID(dev_priv) == 0x1906 || \
 INTEL_DEVID(dev_priv) == 0x1913 || \
 INTEL_DEVID(dev_priv) == 0x1916 || \
@@ -2732,7 +2733,9 @@ intel_info(const struct drm_i915_private *dev_priv)
 #define IS_GEN6(dev_priv) \
(IS_ENABLED(CONFIG_DRM_I915_GEN6) && \
 ((dev_priv)->info.gen_mask & BIT(5)))
-#define IS_GEN7(dev_priv)  (!!((dev_priv)->info.gen_mask & BIT(6)))
+#define IS_GEN7(dev_priv) \
+   (IS_ENABLED(CONFIG_DRM_I915_GEN7) && \
+((dev_priv)->info.gen_mask & BIT(6)))
 #define IS_GEN8(dev_priv)  (!!((dev_priv)->info.gen_mask & BIT(7)))
 #define IS_GEN9(dev_priv)  (!!((dev_priv)->info.gen_mask & BIT(8)))
 #define IS_GEN10(dev_priv) (!!((dev_priv)->info.gen_mask & BIT(9)))
diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
index 8a7399787f4b..205a8fc5e8be 100644
--- a/drivers/gpu/drm/i915/i915_pci.c
+++ b/drivers/gpu/drm/i915/i915_pci.c
@@ -322,6 +322,7 @@ static const struct intel_device_info 
intel_sandybridge_m_gt2_info = {
.platform = INTEL_IVYBRIDGE, \
.has_l3_dpf = 1
 
+#ifdef CONFIG_DRM_I915_PLATFORM_INTEL_IVYBRIDGE
 static const struct intel_device_info intel_ivybridge_d_gt1_info = {
IVB_D_PLATFORM,
.gt = 1,
@@ -331,6 +332,7 @@ static const struct intel_device_info 
intel_ivybridge_d_gt2_info = {
IVB_D_PLATFORM,
.gt = 2,
 };
+#endif
 
 #define IVB_M_PLATFORM \
GEN7_FEATURES, \
@@ -338,6 +340,7 @@ static const struct intel_device_info 
intel_ivybridge_d_gt2_info = {
.is_mobile = 1, \
.has_l3

[Intel-gfx] [RFC 09/28] drm/i915: Make Sandybridge/Gen6 platforms support optional

2021-04-14 Thread Tvrtko Ursulin
From: Tvrtko Ursulin 

Signed-off-by: Tvrtko Ursulin 
---
 drivers/gpu/drm/i915/Kconfig.platforms | 12 
 drivers/gpu/drm/i915/i915_drv.h|  4 +++-
 drivers/gpu/drm/i915/i915_pci.c|  6 ++
 3 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/Kconfig.platforms 
b/drivers/gpu/drm/i915/Kconfig.platforms
index ade0520a1559..1302eb3989be 100644
--- a/drivers/gpu/drm/i915/Kconfig.platforms
+++ b/drivers/gpu/drm/i915/Kconfig.platforms
@@ -129,3 +129,15 @@ config DRM_I915_PLATFORM_INTEL_IRONLAKE
select DRM_I915_GEN5
help
  Include support for Intel Ironlake platforms.
+
+config DRM_I915_GEN6
+   bool
+
+config DRM_I915_PLATFORM_INTEL_SANDYBRIDGE
+   bool "Intel Sandybridge platform support"
+   default y
+   depends on DRM_I915
+   select DRM_I915_GEN6
+   help
+ Include support for Intel Sandybridge platforms.
+
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 741c1fff3616..2bb6e88f4f63 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2729,7 +2729,9 @@ intel_info(const struct drm_i915_private *dev_priv)
 #define IS_GEN5(dev_priv) \
(IS_ENABLED(CONFIG_DRM_I915_GEN5) && \
 ((dev_priv)->info.gen_mask & BIT(4)))
-#define IS_GEN6(dev_priv)  (!!((dev_priv)->info.gen_mask & BIT(5)))
+#define IS_GEN6(dev_priv) \
+   (IS_ENABLED(CONFIG_DRM_I915_GEN6) && \
+((dev_priv)->info.gen_mask & BIT(5)))
 #define IS_GEN7(dev_priv)  (!!((dev_priv)->info.gen_mask & BIT(6)))
 #define IS_GEN8(dev_priv)  (!!((dev_priv)->info.gen_mask & BIT(7)))
 #define IS_GEN9(dev_priv)  (!!((dev_priv)->info.gen_mask & BIT(8)))
diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
index dbc580f05678..8a7399787f4b 100644
--- a/drivers/gpu/drm/i915/i915_pci.c
+++ b/drivers/gpu/drm/i915/i915_pci.c
@@ -273,6 +273,7 @@ static const struct intel_device_info intel_ironlake_m_info 
= {
GEN6_FEATURES, \
.platform = INTEL_SANDYBRIDGE
 
+#ifdef CONFIG_DRM_I915_PLATFORM_INTEL_SANDYBRIDGE
 static const struct intel_device_info intel_sandybridge_d_gt1_info = {
SNB_D_PLATFORM,
.gt = 1,
@@ -282,6 +283,7 @@ static const struct intel_device_info 
intel_sandybridge_d_gt2_info = {
SNB_D_PLATFORM,
.gt = 2,
 };
+#endif
 
 #define SNB_M_PLATFORM \
GEN6_FEATURES, \
@@ -289,6 +291,7 @@ static const struct intel_device_info 
intel_sandybridge_d_gt2_info = {
.is_mobile = 1
 
 
+#ifdef CONFIG_DRM_I915_PLATFORM_INTEL_SANDYBRIDGE
 static const struct intel_device_info intel_sandybridge_m_gt1_info = {
SNB_M_PLATFORM,
.gt = 1,
@@ -298,6 +301,7 @@ static const struct intel_device_info 
intel_sandybridge_m_gt2_info = {
SNB_M_PLATFORM,
.gt = 2,
 };
+#endif
 
 #define GEN7_FEATURES  \
.gen = 7, .num_pipes = 3, \
@@ -675,10 +679,12 @@ static const struct pci_device_id pciidlist[] = {
INTEL_IRONLAKE_D_IDS(&intel_ironlake_d_info),
INTEL_IRONLAKE_M_IDS(&intel_ironlake_m_info),
 #endif
+#ifdef CONFIG_DRM_I915_PLATFORM_INTEL_SANDYBRIDGE
INTEL_SNB_D_GT1_IDS(&intel_sandybridge_d_gt1_info),
INTEL_SNB_D_GT2_IDS(&intel_sandybridge_d_gt2_info),
INTEL_SNB_M_GT1_IDS(&intel_sandybridge_m_gt1_info),
INTEL_SNB_M_GT2_IDS(&intel_sandybridge_m_gt2_info),
+#endif
INTEL_IVB_Q_IDS(&intel_ivybridge_q_info), /* must be first IVB */
INTEL_IVB_M_GT1_IDS(&intel_ivybridge_m_gt1_info),
INTEL_IVB_M_GT2_IDS(&intel_ivybridge_m_gt2_info),
-- 
2.27.0

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


[Intel-gfx] [RFC 08/28] drm/i915: Make Ironlake/Gen5 platforms support optional

2021-04-14 Thread Tvrtko Ursulin
From: Tvrtko Ursulin 

Signed-off-by: Tvrtko Ursulin 
---
 drivers/gpu/drm/i915/Kconfig.platforms | 11 +++
 drivers/gpu/drm/i915/i915_drv.h|  7 +--
 drivers/gpu/drm/i915/i915_pci.c|  4 
 3 files changed, 20 insertions(+), 2 deletions(-)

diff --git a/drivers/gpu/drm/i915/Kconfig.platforms 
b/drivers/gpu/drm/i915/Kconfig.platforms
index 559d563e8f2e..ade0520a1559 100644
--- a/drivers/gpu/drm/i915/Kconfig.platforms
+++ b/drivers/gpu/drm/i915/Kconfig.platforms
@@ -118,3 +118,14 @@ config DRM_I915_PLATFORM_INTEL_GM45
select DRM_I915_GEN4
help
  Include support for Intel GM45 platform.
+
+config DRM_I915_GEN5
+   bool
+
+config DRM_I915_PLATFORM_INTEL_IRONLAKE
+   bool "Intel Ironlake platform support"
+   default y
+   depends on DRM_I915
+   select DRM_I915_GEN5
+   help
+ Include support for Intel Ironlake platforms.
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 0d0c6ac043d1..741c1fff3616 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2597,7 +2597,8 @@ intel_info(const struct drm_i915_private *dev_priv)
(INTEL_DEVID(dev_priv) == 0xa011))
 #define IS_PINEVIEW(dev_priv)  IS_OPT_PLATFORM(dev_priv, INTEL_PINEVIEW)
 #define IS_G33(dev_priv)   IS_OPT_PLATFORM(dev_priv, INTEL_G33)
-#define IS_IRONLAKE_M(dev_priv)(INTEL_DEVID(dev_priv) == 0x0046)
+#define IS_IRONLAKE_M(dev_priv)(IS_OPT_PLATFORM(dev_priv, 
INTEL_IRONLAKE) && \
+(INTEL_DEVID(dev_priv) == 0x0046))
 #define IS_IVYBRIDGE(dev_priv) IS_PLATFORM(dev_priv, INTEL_IVYBRIDGE)
 #define IS_IVB_GT1(dev_priv)   (IS_IVYBRIDGE(dev_priv) && \
 (dev_priv)->info.gt == 1)
@@ -2725,7 +2726,9 @@ intel_info(const struct drm_i915_private *dev_priv)
 #define IS_GEN4(dev_priv) \
(IS_ENABLED(CONFIG_DRM_I915_GEN4) && \
 ((dev_priv)->info.gen_mask & BIT(3)))
-#define IS_GEN5(dev_priv)  (!!((dev_priv)->info.gen_mask & BIT(4)))
+#define IS_GEN5(dev_priv) \
+   (IS_ENABLED(CONFIG_DRM_I915_GEN5) && \
+((dev_priv)->info.gen_mask & BIT(4)))
 #define IS_GEN6(dev_priv)  (!!((dev_priv)->info.gen_mask & BIT(5)))
 #define IS_GEN7(dev_priv)  (!!((dev_priv)->info.gen_mask & BIT(6)))
 #define IS_GEN8(dev_priv)  (!!((dev_priv)->info.gen_mask & BIT(7)))
diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
index 20043a75b40f..dbc580f05678 100644
--- a/drivers/gpu/drm/i915/i915_pci.c
+++ b/drivers/gpu/drm/i915/i915_pci.c
@@ -243,6 +243,7 @@ static const struct intel_device_info intel_gm45_info = {
GEN_DEFAULT_PAGE_SIZES, \
CURSOR_OFFSETS
 
+#ifdef CONFIG_DRM_I915_PLATFORM_INTEL_IRONLAKE
 static const struct intel_device_info intel_ironlake_d_info = {
GEN5_FEATURES,
.platform = INTEL_IRONLAKE,
@@ -253,6 +254,7 @@ static const struct intel_device_info intel_ironlake_m_info 
= {
.platform = INTEL_IRONLAKE,
.is_mobile = 1, .has_fbc = 1,
 };
+#endif
 
 #define GEN6_FEATURES \
.gen = 6, .num_pipes = 2, \
@@ -669,8 +671,10 @@ static const struct pci_device_id pciidlist[] = {
 #ifdef CONFIG_DRM_I915_PLATFORM_INTEL_G45
INTEL_G45_IDS(&intel_g45_info),
 #endif
+#ifdef CONFIG_DRM_I915_PLATFORM_INTEL_IRONLAKE
INTEL_IRONLAKE_D_IDS(&intel_ironlake_d_info),
INTEL_IRONLAKE_M_IDS(&intel_ironlake_m_info),
+#endif
INTEL_SNB_D_GT1_IDS(&intel_sandybridge_d_gt1_info),
INTEL_SNB_D_GT2_IDS(&intel_sandybridge_d_gt2_info),
INTEL_SNB_M_GT1_IDS(&intel_sandybridge_m_gt1_info),
-- 
2.27.0

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


[Intel-gfx] [RFC 07/28] drm/i915: Make Gen4 platforms support optional

2021-04-14 Thread Tvrtko Ursulin
From: Tvrtko Ursulin 

Signed-off-by: Tvrtko Ursulin 
---
 drivers/gpu/drm/i915/Kconfig.platforms | 35 ++
 drivers/gpu/drm/i915/i915_drv.h| 12 +
 drivers/gpu/drm/i915/i915_pci.c| 16 
 3 files changed, 58 insertions(+), 5 deletions(-)

diff --git a/drivers/gpu/drm/i915/Kconfig.platforms 
b/drivers/gpu/drm/i915/Kconfig.platforms
index 1fa09884a290..559d563e8f2e 100644
--- a/drivers/gpu/drm/i915/Kconfig.platforms
+++ b/drivers/gpu/drm/i915/Kconfig.platforms
@@ -83,3 +83,38 @@ config DRM_I915_PLATFORM_INTEL_PINEVIEW
select DRM_I915_GEN3
help
  Include support for Intel Pineview platform.
+
+config DRM_I915_GEN4
+   bool
+
+config DRM_I915_PLATFORM_INTEL_I965G
+   bool "Intel i965G platform support"
+   default y
+   depends on DRM_I915
+   select DRM_I915_GEN4
+   help
+ Include support for Intel i965G platform.
+
+config DRM_I915_PLATFORM_INTEL_I965GM
+   bool "Intel i965GM platform support"
+   default y
+   depends on DRM_I915
+   select DRM_I915_GEN4
+   help
+ Include support for Intel i965GM platform.
+
+config DRM_I915_PLATFORM_INTEL_G45
+   bool "Intel G45 platform support"
+   default y
+   depends on DRM_I915
+   select DRM_I915_GEN4
+   help
+ Include support for Intel G45 platform.
+
+config DRM_I915_PLATFORM_INTEL_GM45
+   bool "Intel GM45 platform support"
+   default y
+   depends on DRM_I915
+   select DRM_I915_GEN4
+   help
+ Include support for Intel GM45 platform.
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 949a8bf54d55..0d0c6ac043d1 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2586,10 +2586,10 @@ intel_info(const struct drm_i915_private *dev_priv)
 #define IS_I915GM(dev_priv)IS_OPT_PLATFORM(dev_priv, INTEL_I915GM)
 #define IS_I945G(dev_priv) IS_OPT_PLATFORM(dev_priv, INTEL_I945G)
 #define IS_I945GM(dev_priv)IS_OPT_PLATFORM(dev_priv, INTEL_I945GM)
-#define IS_I965G(dev_priv) IS_PLATFORM(dev_priv, INTEL_I965G)
-#define IS_I965GM(dev_priv)IS_PLATFORM(dev_priv, INTEL_I965GM)
-#define IS_G45(dev_priv)   IS_PLATFORM(dev_priv, INTEL_G45)
-#define IS_GM45(dev_priv)  IS_PLATFORM(dev_priv, INTEL_GM45)
+#define IS_I965G(dev_priv) IS_OPT_PLATFORM(dev_priv, INTEL_I965G)
+#define IS_I965GM(dev_priv)IS_OPT_PLATFORM(dev_priv, INTEL_I965GM)
+#define IS_G45(dev_priv)   IS_OPT_PLATFORM(dev_priv, INTEL_G45)
+#define IS_GM45(dev_priv)  IS_OPT_PLATFORM(dev_priv, INTEL_GM45)
 #define IS_G4X(dev_priv)   (IS_G45(dev_priv) || IS_GM45(dev_priv))
 #define IS_PINEVIEW_G(dev_priv)(IS_OPT_PLATFORM(dev_priv, 
INTEL_PINEVIEW) && \
(INTEL_DEVID(dev_priv) == 0xa001))
@@ -2722,7 +2722,9 @@ intel_info(const struct drm_i915_private *dev_priv)
 #define IS_GEN3(dev_priv) \
(IS_ENABLED(CONFIG_DRM_I915_GEN3) && \
 ((dev_priv)->info.gen_mask & BIT(2)))
-#define IS_GEN4(dev_priv)  (!!((dev_priv)->info.gen_mask & BIT(3)))
+#define IS_GEN4(dev_priv) \
+   (IS_ENABLED(CONFIG_DRM_I915_GEN4) && \
+((dev_priv)->info.gen_mask & BIT(3)))
 #define IS_GEN5(dev_priv)  (!!((dev_priv)->info.gen_mask & BIT(4)))
 #define IS_GEN6(dev_priv)  (!!((dev_priv)->info.gen_mask & BIT(5)))
 #define IS_GEN7(dev_priv)  (!!((dev_priv)->info.gen_mask & BIT(6)))
diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
index 9b47cba66d3d..20043a75b40f 100644
--- a/drivers/gpu/drm/i915/i915_pci.c
+++ b/drivers/gpu/drm/i915/i915_pci.c
@@ -192,6 +192,7 @@ static const struct intel_device_info intel_pineview_info = 
{
GEN_DEFAULT_PAGE_SIZES, \
CURSOR_OFFSETS
 
+#ifdef CONFIG_DRM_I915_PLATFORM_INTEL_I965G
 static const struct intel_device_info intel_i965g_info = {
GEN4_FEATURES,
.platform = INTEL_I965G,
@@ -199,7 +200,9 @@ static const struct intel_device_info intel_i965g_info = {
.hws_needs_physical = 1,
.has_snoop = false,
 };
+#endif
 
+#ifdef CONFIG_DRM_I915_PLATFORM_INTEL_I965GM
 static const struct intel_device_info intel_i965gm_info = {
GEN4_FEATURES,
.platform = INTEL_I965GM,
@@ -209,13 +212,17 @@ static const struct intel_device_info intel_i965gm_info = 
{
.hws_needs_physical = 1,
.has_snoop = false,
 };
+#endif
 
+#ifdef CONFIG_DRM_I915_PLATFORM_INTEL_G45
 static const struct intel_device_info intel_g45_info = {
GEN4_FEATURES,
.platform = INTEL_G45,
.ring_mask = RENDER_RING | BSD_RING,
 };
+#endif
 
+#ifdef CONFIG_DRM_I915_PLATFORM_INTEL_GM45
 static const struct intel_device_info intel_gm45_info = {
GEN4_FEATURES,
.platform = INTEL_GM45,
@@ -223,6 +230,7 @@ static const struct intel_device_info intel_gm45_info = {
.supports_tv = 1,
.ring_mask = RENDER_RING | BSD_RING,
 };
+#endif
 
 #define GEN5_

[Intel-gfx] [RFC 05/28] drm/i915: Make GEN2 support optional

2021-04-14 Thread Tvrtko Ursulin
From: Tvrtko Ursulin 

By adding a hidden Kconfig option selected by all Gen2 platforms, we can
eliminate more code when none of those is selected.

Signed-off-by: Tvrtko Ursulin 
---
 drivers/gpu/drm/i915/Kconfig.platforms | 7 +++
 drivers/gpu/drm/i915/i915_drv.h| 4 +++-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/Kconfig.platforms 
b/drivers/gpu/drm/i915/Kconfig.platforms
index 46b78425e6da..23a44c8eb07b 100644
--- a/drivers/gpu/drm/i915/Kconfig.platforms
+++ b/drivers/gpu/drm/i915/Kconfig.platforms
@@ -1,7 +1,11 @@
+config DRM_I915_GEN2
+   bool
+
 config DRM_I915_PLATFORM_INTEL_I830
bool "Intel i830 platform support"
default y
depends on DRM_I915
+   select DRM_I915_GEN2
help
  Include support for Intel i830 platform.
 
@@ -9,6 +13,7 @@ config DRM_I915_PLATFORM_INTEL_I845G
bool "Intel i845G platform support"
default y
depends on DRM_I915
+   select DRM_I915_GEN2
help
  Include support for Intel i845G platform.
 
@@ -16,6 +21,7 @@ config DRM_I915_PLATFORM_INTEL_I85X
bool "Intel i85X platform support"
default y
depends on DRM_I915
+   select DRM_I915_GEN2
help
  Include support for Intel i85X platforms.
 
@@ -23,5 +29,6 @@ config DRM_I915_PLATFORM_INTEL_I865G
bool "Intel i865G platform support"
default y
depends on DRM_I915
+   select DRM_I915_GEN2
help
  Include support for Intel i865G platform.
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 4a350a6b1800..f718655294ea 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2714,7 +2714,9 @@ intel_info(const struct drm_i915_private *dev_priv)
  * have their own (e.g. HAS_PCH_SPLIT for ILK+ display, IS_foo for particular
  * chips, etc.).
  */
-#define IS_GEN2(dev_priv)  (!!((dev_priv)->info.gen_mask & BIT(1)))
+#define IS_GEN2(dev_priv) \
+   (IS_ENABLED(CONFIG_DRM_I915_GEN2) && \
+((dev_priv)->info.gen_mask & BIT(1)))
 #define IS_GEN3(dev_priv)  (!!((dev_priv)->info.gen_mask & BIT(2)))
 #define IS_GEN4(dev_priv)  (!!((dev_priv)->info.gen_mask & BIT(3)))
 #define IS_GEN5(dev_priv)  (!!((dev_priv)->info.gen_mask & BIT(4)))
-- 
2.27.0

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


[Intel-gfx] [RFC 04/28] drm/i915: Make I865G platform support optional

2021-04-14 Thread Tvrtko Ursulin
From: Tvrtko Ursulin 

Signed-off-by: Tvrtko Ursulin 
---
 drivers/gpu/drm/i915/Kconfig.platforms | 7 +++
 drivers/gpu/drm/i915/i915_drv.h| 2 +-
 drivers/gpu/drm/i915/i915_pci.c| 4 
 3 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/Kconfig.platforms 
b/drivers/gpu/drm/i915/Kconfig.platforms
index ab5ad0eaf4e7..46b78425e6da 100644
--- a/drivers/gpu/drm/i915/Kconfig.platforms
+++ b/drivers/gpu/drm/i915/Kconfig.platforms
@@ -18,3 +18,10 @@ config DRM_I915_PLATFORM_INTEL_I85X
depends on DRM_I915
help
  Include support for Intel i85X platforms.
+
+config DRM_I915_PLATFORM_INTEL_I865G
+   bool "Intel i865G platform support"
+   default y
+   depends on DRM_I915
+   help
+ Include support for Intel i865G platform.
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 585e6d61a2bd..4a350a6b1800 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2581,7 +2581,7 @@ intel_info(const struct drm_i915_private *dev_priv)
 #define IS_I830(dev_priv)  IS_OPT_PLATFORM(dev_priv, INTEL_I830)
 #define IS_I845G(dev_priv) IS_OPT_PLATFORM(dev_priv, INTEL_I845G)
 #define IS_I85X(dev_priv)  IS_OPT_PLATFORM(dev_priv, INTEL_I85X)
-#define IS_I865G(dev_priv) IS_PLATFORM(dev_priv, INTEL_I865G)
+#define IS_I865G(dev_priv) IS_OPT_PLATFORM(dev_priv, INTEL_I865G)
 #define IS_I915G(dev_priv) IS_PLATFORM(dev_priv, INTEL_I915G)
 #define IS_I915GM(dev_priv)IS_PLATFORM(dev_priv, INTEL_I915GM)
 #define IS_I945G(dev_priv) IS_PLATFORM(dev_priv, INTEL_I945G)
diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
index 47aeaf817b8c..9f5054c009b6 100644
--- a/drivers/gpu/drm/i915/i915_pci.c
+++ b/drivers/gpu/drm/i915/i915_pci.c
@@ -100,10 +100,12 @@ static const struct intel_device_info intel_i85x_info = {
 };
 #endif
 
+#ifdef CONFIG_DRM_I915_PLATFORM_INTEL_I865G
 static const struct intel_device_info intel_i865g_info = {
GEN2_FEATURES,
.platform = INTEL_I865G,
 };
+#endif
 
 #define GEN3_FEATURES \
.gen = 3, .num_pipes = 2, \
@@ -614,7 +616,9 @@ static const struct pci_device_id pciidlist[] = {
 #ifdef CONFIG_DRM_I915_PLATFORM_INTEL_I85X
INTEL_I85X_IDS(&intel_i85x_info),
 #endif
+#ifdef CONFIG_DRM_I915_PLATFORM_INTEL_I865G
INTEL_I865G_IDS(&intel_i865g_info),
+#endif
INTEL_I915G_IDS(&intel_i915g_info),
INTEL_I915GM_IDS(&intel_i915gm_info),
INTEL_I945G_IDS(&intel_i945g_info),
-- 
2.27.0

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


[Intel-gfx] [RFC 03/28] drm/i915: Make I85X platform support optional

2021-04-14 Thread Tvrtko Ursulin
From: Tvrtko Ursulin 

Signed-off-by: Tvrtko Ursulin 
---
 drivers/gpu/drm/i915/Kconfig.platforms | 7 +++
 drivers/gpu/drm/i915/i915_drv.h| 2 +-
 drivers/gpu/drm/i915/i915_pci.c| 4 
 3 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/Kconfig.platforms 
b/drivers/gpu/drm/i915/Kconfig.platforms
index cf06ed3b0727..ab5ad0eaf4e7 100644
--- a/drivers/gpu/drm/i915/Kconfig.platforms
+++ b/drivers/gpu/drm/i915/Kconfig.platforms
@@ -11,3 +11,10 @@ config DRM_I915_PLATFORM_INTEL_I845G
depends on DRM_I915
help
  Include support for Intel i845G platform.
+
+config DRM_I915_PLATFORM_INTEL_I85X
+   bool "Intel i85X platform support"
+   default y
+   depends on DRM_I915
+   help
+ Include support for Intel i85X platforms.
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 59231e500f78..585e6d61a2bd 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2580,7 +2580,7 @@ intel_info(const struct drm_i915_private *dev_priv)
 
 #define IS_I830(dev_priv)  IS_OPT_PLATFORM(dev_priv, INTEL_I830)
 #define IS_I845G(dev_priv) IS_OPT_PLATFORM(dev_priv, INTEL_I845G)
-#define IS_I85X(dev_priv)  IS_PLATFORM(dev_priv, INTEL_I85X)
+#define IS_I85X(dev_priv)  IS_OPT_PLATFORM(dev_priv, INTEL_I85X)
 #define IS_I865G(dev_priv) IS_PLATFORM(dev_priv, INTEL_I865G)
 #define IS_I915G(dev_priv) IS_PLATFORM(dev_priv, INTEL_I915G)
 #define IS_I915GM(dev_priv)IS_PLATFORM(dev_priv, INTEL_I915GM)
diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
index d98c35d2ff9d..47aeaf817b8c 100644
--- a/drivers/gpu/drm/i915/i915_pci.c
+++ b/drivers/gpu/drm/i915/i915_pci.c
@@ -90,6 +90,7 @@ static const struct intel_device_info intel_i845g_info = {
 };
 #endif
 
+#ifdef CONFIG_DRM_I915_PLATFORM_INTEL_I85X
 static const struct intel_device_info intel_i85x_info = {
GEN2_FEATURES,
.platform = INTEL_I85X, .is_mobile = 1,
@@ -97,6 +98,7 @@ static const struct intel_device_info intel_i85x_info = {
.cursor_needs_physical = 1,
.has_fbc = 1,
 };
+#endif
 
 static const struct intel_device_info intel_i865g_info = {
GEN2_FEATURES,
@@ -609,7 +611,9 @@ static const struct pci_device_id pciidlist[] = {
 #ifdef CONFIG_DRM_I915_PLATFORM_INTEL_I845G
INTEL_I845G_IDS(&intel_i845g_info),
 #endif
+#ifdef CONFIG_DRM_I915_PLATFORM_INTEL_I85X
INTEL_I85X_IDS(&intel_i85x_info),
+#endif
INTEL_I865G_IDS(&intel_i865g_info),
INTEL_I915G_IDS(&intel_i915g_info),
INTEL_I915GM_IDS(&intel_i915gm_info),
-- 
2.27.0

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


[Intel-gfx] [RFC 01/28] drm/i915: Make I830 platform support optional

2021-04-14 Thread Tvrtko Ursulin
From: Tvrtko Ursulin 

Signed-off-by: Tvrtko Ursulin 
---
 drivers/gpu/drm/i915/Kconfig   | 5 +
 drivers/gpu/drm/i915/Kconfig.platforms | 6 ++
 drivers/gpu/drm/i915/i915_drv.h| 5 -
 drivers/gpu/drm/i915/i915_pci.c| 4 
 4 files changed, 19 insertions(+), 1 deletion(-)
 create mode 100644 drivers/gpu/drm/i915/Kconfig.platforms

diff --git a/drivers/gpu/drm/i915/Kconfig b/drivers/gpu/drm/i915/Kconfig
index dfd95889f4b7..1363d05e6ec5 100644
--- a/drivers/gpu/drm/i915/Kconfig
+++ b/drivers/gpu/drm/i915/Kconfig
@@ -131,3 +131,8 @@ depends on DRM_I915
 depends on EXPERT
 source drivers/gpu/drm/i915/Kconfig.debug
 endmenu
+
+menu "Platform support"
+depends on DRM_I915
+source drivers/gpu/drm/i915/Kconfig.platforms
+endmenu
diff --git a/drivers/gpu/drm/i915/Kconfig.platforms 
b/drivers/gpu/drm/i915/Kconfig.platforms
new file mode 100644
index ..f3949fff21e9
--- /dev/null
+++ b/drivers/gpu/drm/i915/Kconfig.platforms
@@ -0,0 +1,6 @@
+config DRM_I915_PLATFORM_INTEL_I830
+   bool "Intel i830 platform support"
+   default y
+   depends on DRM_I915
+   help
+ Include support for Intel i830 platform.
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 7db3557b945c..6ea33c92ccef 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2575,7 +2575,10 @@ intel_info(const struct drm_i915_private *dev_priv)
 
 #define IS_PLATFORM(dev_priv, p) ((dev_priv)->info.platform_mask & BIT(p))
 
-#define IS_I830(dev_priv)  IS_PLATFORM(dev_priv, INTEL_I830)
+#define IS_OPT_PLATFORM(dev_priv, p) \
+   (IS_ENABLED(CONFIG_DRM_I915_PLATFORM_##p) && IS_PLATFORM(dev_priv, p))
+
+#define IS_I830(dev_priv)  IS_OPT_PLATFORM(dev_priv, INTEL_I830)
 #define IS_I845G(dev_priv) IS_PLATFORM(dev_priv, INTEL_I845G)
 #define IS_I85X(dev_priv)  IS_PLATFORM(dev_priv, INTEL_I85X)
 #define IS_I865G(dev_priv) IS_PLATFORM(dev_priv, INTEL_I865G)
diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
index 4e7a10c89782..81573073dceb 100644
--- a/drivers/gpu/drm/i915/i915_pci.c
+++ b/drivers/gpu/drm/i915/i915_pci.c
@@ -74,12 +74,14 @@
GEN_DEFAULT_PAGE_SIZES, \
CURSOR_OFFSETS
 
+#ifdef CONFIG_DRM_I915_PLATFORM_INTEL_I830
 static const struct intel_device_info intel_i830_info = {
GEN2_FEATURES,
.platform = INTEL_I830,
.is_mobile = 1, .cursor_needs_physical = 1,
.num_pipes = 2, /* legal, last one wins */
 };
+#endif
 
 static const struct intel_device_info intel_i845g_info = {
GEN2_FEATURES,
@@ -599,7 +601,9 @@ static const struct intel_device_info intel_icelake_11_info 
= {
  * PCI ID matches, otherwise we'll use the wrong info struct above.
  */
 static const struct pci_device_id pciidlist[] = {
+#ifdef CONFIG_DRM_I915_PLATFORM_INTEL_I830
INTEL_I830_IDS(&intel_i830_info),
+#endif
INTEL_I845G_IDS(&intel_i845g_info),
INTEL_I85X_IDS(&intel_i85x_info),
INTEL_I865G_IDS(&intel_i865g_info),
-- 
2.27.0

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


[Intel-gfx] [RFC 02/28] drm/i915: Make I845G platform support optional

2021-04-14 Thread Tvrtko Ursulin
From: Tvrtko Ursulin 

Signed-off-by: Tvrtko Ursulin 
---
 drivers/gpu/drm/i915/Kconfig.platforms | 7 +++
 drivers/gpu/drm/i915/i915_drv.h| 2 +-
 drivers/gpu/drm/i915/i915_pci.c| 4 
 3 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/i915/Kconfig.platforms 
b/drivers/gpu/drm/i915/Kconfig.platforms
index f3949fff21e9..cf06ed3b0727 100644
--- a/drivers/gpu/drm/i915/Kconfig.platforms
+++ b/drivers/gpu/drm/i915/Kconfig.platforms
@@ -4,3 +4,10 @@ config DRM_I915_PLATFORM_INTEL_I830
depends on DRM_I915
help
  Include support for Intel i830 platform.
+
+config DRM_I915_PLATFORM_INTEL_I845G
+   bool "Intel i845G platform support"
+   default y
+   depends on DRM_I915
+   help
+ Include support for Intel i845G platform.
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 6ea33c92ccef..59231e500f78 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -2579,7 +2579,7 @@ intel_info(const struct drm_i915_private *dev_priv)
(IS_ENABLED(CONFIG_DRM_I915_PLATFORM_##p) && IS_PLATFORM(dev_priv, p))
 
 #define IS_I830(dev_priv)  IS_OPT_PLATFORM(dev_priv, INTEL_I830)
-#define IS_I845G(dev_priv) IS_PLATFORM(dev_priv, INTEL_I845G)
+#define IS_I845G(dev_priv) IS_OPT_PLATFORM(dev_priv, INTEL_I845G)
 #define IS_I85X(dev_priv)  IS_PLATFORM(dev_priv, INTEL_I85X)
 #define IS_I865G(dev_priv) IS_PLATFORM(dev_priv, INTEL_I865G)
 #define IS_I915G(dev_priv) IS_PLATFORM(dev_priv, INTEL_I915G)
diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
index 81573073dceb..d98c35d2ff9d 100644
--- a/drivers/gpu/drm/i915/i915_pci.c
+++ b/drivers/gpu/drm/i915/i915_pci.c
@@ -83,10 +83,12 @@ static const struct intel_device_info intel_i830_info = {
 };
 #endif
 
+#ifdef CONFIG_DRM_I915_PLATFORM_INTEL_I845G
 static const struct intel_device_info intel_i845g_info = {
GEN2_FEATURES,
.platform = INTEL_I845G,
 };
+#endif
 
 static const struct intel_device_info intel_i85x_info = {
GEN2_FEATURES,
@@ -604,7 +606,9 @@ static const struct pci_device_id pciidlist[] = {
 #ifdef CONFIG_DRM_I915_PLATFORM_INTEL_I830
INTEL_I830_IDS(&intel_i830_info),
 #endif
+#ifdef CONFIG_DRM_I915_PLATFORM_INTEL_I845G
INTEL_I845G_IDS(&intel_i845g_info),
+#endif
INTEL_I85X_IDS(&intel_i85x_info),
INTEL_I865G_IDS(&intel_i865g_info),
INTEL_I915G_IDS(&intel_i915g_info),
-- 
2.27.0

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


[Intel-gfx] [RFC 00/28] Old platform/gen kconfig options series

2021-04-14 Thread Tvrtko Ursulin
From: Tvrtko Ursulin 

Triggered by the recent work around INTEL_GEN etc and probably just for
historical reference since I can't remember if I ever sent it out. So sending
now but unrebased.

This series from early 2018 is the reason why I was converting to mask based
check everywhere. There was as feature request to enable compiling out parts of
the driver for embedded deployments. Or inversely, to build for a single
platform only.

With the mask approach and this series I was able to demonstrate substantial
savings in binary size. If only I could remember if I was building for Gen9
only or Gen9+.. But memory says savings around 30-40% were easy to get.

Then the experiment was dropped, don't remember why. I also tried LTO on top of
this but kernel support for it was immature back then (maybe still is, no idea).

Anyway, sending for historical reference why masks for everything were doubly
good. I mean they are good for all the range check in my opinion.

Cc: Lucas De Marchi 
Cc: Jani Nikula 

Tvrtko Ursulin (28):
  drm/i915: Make I830 platform support optional
  drm/i915: Make I845G platform support optional
  drm/i915: Make I85X platform support optional
  drm/i915: Make I865G platform support optional
  drm/i915: Make GEN2 support optional
  drm/i915: Make Gen3 platforms support optional
  drm/i915: Make Gen4 platforms support optional
  drm/i915: Make Ironlake/Gen5 platforms support optional
  drm/i915: Make Sandybridge/Gen6 platforms support optional
  drm/i915: Make Gen7/7.5 platform support optional
  drm/i915: Make Gen8 platform support optional
  drm/i915: Make Gen9 platform support optional
  drm/i915: Make Gen10 platform support optional
  drm/i915: Make Gen11 platform support optional
  drm/i915: Simplify IS_GEN macros
  drm/i915: Use INTEL_GEN everywhere
  drm/i915: Favour IS_GENx
  drm/i915: Use Gen Kconfig items in IS_GEN macro
  drm/i915: Replace arithmetic INTEL_GEN checks with the IS_GEN macro
  drm/i915: Use IS_GEN in execbuffer
  drm/i915: Allow render state to be compiled out
  drm/i915: Use IS_GEN in stolen
  drm/i915: Use IS_GEN in intel_bios.c
  drm/i915: Use IS_GEN in intel_fb_pitch_limit
  drm/i915: Use IS_GEN in intel_engine_cs.c
  drm/i915: Use IS_GEN in intel_guc.c
  drm/i915: Use IS_GEN in intel_lrc.c
  drm/i915: Enable dropping small cores when not enabled

 drivers/gpu/drm/i915/Kconfig  |   5 +
 drivers/gpu/drm/i915/Kconfig.platforms| 261 ++
 drivers/gpu/drm/i915/Makefile |   8 +-
 drivers/gpu/drm/i915/i915_debugfs.c   |  86 +++---
 drivers/gpu/drm/i915/i915_drv.c   |  16 +-
 drivers/gpu/drm/i915/i915_drv.h   | 187 -
 drivers/gpu/drm/i915/i915_gem.c   |  18 +-
 drivers/gpu/drm/i915/i915_gem_execbuffer.c|  16 +-
 drivers/gpu/drm/i915/i915_gem_fence_reg.c |   4 +-
 drivers/gpu/drm/i915/i915_gem_gtt.c   |  30 +-
 drivers/gpu/drm/i915/i915_gem_render_state.c  |  10 +-
 drivers/gpu/drm/i915/i915_gem_request.c   |   2 +-
 drivers/gpu/drm/i915/i915_gem_stolen.c|  42 ++-
 drivers/gpu/drm/i915/i915_gem_tiling.c|   8 +-
 drivers/gpu/drm/i915/i915_gpu_error.c |  40 +--
 drivers/gpu/drm/i915/i915_irq.c   |  58 ++--
 drivers/gpu/drm/i915/i915_pci.c   | 120 +++-
 drivers/gpu/drm/i915/i915_perf.c  |   2 +-
 drivers/gpu/drm/i915/i915_pmu.c   |   6 +-
 drivers/gpu/drm/i915/i915_reg.h   |   4 +-
 drivers/gpu/drm/i915/i915_suspend.c   |  12 +-
 drivers/gpu/drm/i915/i915_sysfs.c |   2 +-
 drivers/gpu/drm/i915/intel_atomic_plane.c |   2 +-
 drivers/gpu/drm/i915/intel_audio.c|   2 +-
 drivers/gpu/drm/i915/intel_bios.c |   9 +-
 drivers/gpu/drm/i915/intel_cdclk.c|   8 +-
 drivers/gpu/drm/i915/intel_color.c|   2 +-
 drivers/gpu/drm/i915/intel_crt.c  |   6 +-
 drivers/gpu/drm/i915/intel_ddi.c  |  10 +-
 drivers/gpu/drm/i915/intel_device_info.c  |  18 +-
 drivers/gpu/drm/i915/intel_display.c  | 205 +++---
 drivers/gpu/drm/i915/intel_dp.c   |  28 +-
 drivers/gpu/drm/i915/intel_dpll_mgr.c |   4 +-
 drivers/gpu/drm/i915/intel_engine_cs.c| 114 
 drivers/gpu/drm/i915/intel_fbc.c  |  32 +--
 drivers/gpu/drm/i915/intel_fifo_underrun.c|   2 +-
 drivers/gpu/drm/i915/intel_guc.c  |  10 +-
 drivers/gpu/drm/i915/intel_hangcheck.c|   2 +-
 drivers/gpu/drm/i915/intel_hdcp.c |   2 +-
 drivers/gpu/drm/i915/intel_hdmi.c |  10 +-
 drivers/gpu/drm/i915/intel_lrc.c  |  35 +--
 drivers/gpu/drm/i915/intel_lvds.c |  10 +-
 drivers/gpu/drm/i915/intel_mocs.c |   2 +-
 drivers/gpu/drm/i915/intel_overlay.c  |   2 +-
 drivers/gpu/drm/i915/intel_panel.c|  10 +-
 drivers/gpu/drm/i915/intel_pipe_crc.c |   2 +-
 drivers/gpu/drm/i915/intel_pm.c

Re: [Intel-gfx] [PATCH v2 08/12] drm/i915: finish removal of gen_mask

2021-04-14 Thread Tvrtko Ursulin



On 13/04/2021 06:09, Lucas De Marchi wrote:

Now that it's not used anywhere, remove it from struct
intel_device_info. To allow a period in which code will be converted to
the new macro, keep IS_GEN_RANGE() around, just redefining it to use
the new fields. The size advantage from IS_GEN_RANGE() using a mask is
not that big as it has pretty limited use througout the driver:

textdata bss dec hex filename
2758497   959656496 2860958  2ba79e drivers/gpu/drm/i915/i915.ko.old
2758586   959536496 2861035  2ba7eb drivers/gpu/drm/i915/i915.ko.new


This delta refers to this patch - I mean this point in the series? 
Asking because it may not be 100% representative since some of the 
previous patches have already removed some gen mask usages.


While I am here, I am a bit fond of the mask approach and wonder if 
using it for all (gt/media/whatelse) new fields would still make sense.


Presence of the range check helpers suggests that it might, but I 
haven't looked at how prevalent their usage ends up after the series is 
done. So just in principle, I don't see why not still go with masks 
since that guarantees elegant check at each range check site. It would 
be all hidden in the macro implementation so easy.


Also for historical reference, another reason why I went for masks 
everywhere approach is that at some point we had a feature request to 
allow compiling out platforms/gens. I *think* that was much easier to do 
with masking and in experiments back then I was able for instance to 
build just for Gen9+ and drop like 30% of the binary size.


Oh I found the branch now.. The reason for IS_GEN(p, v) was also in that 
series. I don't know if I ever RFC-ed or trybotted it.. google suggests 
no and I neither can find it in my mailboxes. I could send out the old 
patches for reference? But to be honest I have no idea if this feature 
request (targeted driver builds) will ever resurface..


Regards,

Tvrtko


Signed-off-by: Lucas De Marchi 
---
  drivers/gpu/drm/i915/i915_drv.c  |  2 --
  drivers/gpu/drm/i915/i915_drv.h  | 13 -
  drivers/gpu/drm/i915/i915_pci.c  |  1 -
  drivers/gpu/drm/i915/intel_device_info.h |  2 --
  4 files changed, 4 insertions(+), 14 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index 305557e1942a..825b45cb3543 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -768,8 +768,6 @@ i915_driver_create(struct pci_dev *pdev, const struct 
pci_device_id *ent)
memcpy(device_info, match_info, sizeof(*device_info));
RUNTIME_INFO(i915)->device_id = pdev->device;
  
-	BUG_ON(device_info->gen > BITS_PER_TYPE(device_info->gen_mask));

-
return i915;
  }
  
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h

index cb59eb0f6c5b..b984a340b21f 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1241,6 +1241,10 @@ static inline struct drm_i915_private 
*pdev_to_i915(struct pci_dev *pdev)
   * GRAPHICS_VER(), MEDIA_VER and DISPLAY_VER()
   */
  #define INTEL_GEN(dev_priv)   (INTEL_INFO(dev_priv)->gen)
+/*
+ * Deprecated: use IS_GRAPHICS_VER()
+ */
+#define IS_GEN_RANGE(dev_priv, s, e)   IS_GRAPHICS_VER(dev_priv, (s), (e))
  
  #define GRAPHICS_VER(i915)		(INTEL_INFO(i915)->graphics_ver)

  #define IS_GRAPHICS_VER(i915, from, until) \
@@ -1257,15 +1261,6 @@ static inline struct drm_i915_private 
*pdev_to_i915(struct pci_dev *pdev)
  #define REVID_FOREVER 0xff
  #define INTEL_REVID(dev_priv) (to_pci_dev((dev_priv)->drm.dev)->revision)
  
-#define INTEL_GEN_MASK(s, e) ( \

-   BUILD_BUG_ON_ZERO(!__builtin_constant_p(s)) + \
-   BUILD_BUG_ON_ZERO(!__builtin_constant_p(e)) + \
-   GENMASK((e) - 1, (s) - 1))
-
-/* Returns true if Gen is in inclusive range [Start, End] */
-#define IS_GEN_RANGE(dev_priv, s, e) \
-   (!!(INTEL_INFO(dev_priv)->gen_mask & INTEL_GEN_MASK((s), (e
-
  #define IS_GEN(dev_priv, n) \
(BUILD_BUG_ON_ZERO(!__builtin_constant_p(n)) + \
 INTEL_INFO(dev_priv)->gen == (n))
diff --git a/drivers/gpu/drm/i915/i915_pci.c b/drivers/gpu/drm/i915/i915_pci.c
index 97ab73276334..3b9cd1af0f28 100644
--- a/drivers/gpu/drm/i915/i915_pci.c
+++ b/drivers/gpu/drm/i915/i915_pci.c
@@ -37,7 +37,6 @@
  
  #define PLATFORM(x) .platform = (x)

  #define GEN(x) \
-   .gen_mask = BIT((x) - 1), \
.gen = (x), \
.graphics_ver = (x), \
.media_ver = (x), \
diff --git a/drivers/gpu/drm/i915/intel_device_info.h 
b/drivers/gpu/drm/i915/intel_device_info.h
index 405883a8cc84..b8f7b996f140 100644
--- a/drivers/gpu/drm/i915/intel_device_info.h
+++ b/drivers/gpu/drm/i915/intel_device_info.h
@@ -160,8 +160,6 @@ enum intel_ppgtt_type {
func(supports_tv);
  
  struct intel_device_info {

-   u16 gen_mask;
-
u8 graphics_ver;
u8 media_ver;
  


___
Intel-gfx mai

  1   2   >