diff options
Diffstat (limited to 'common/recipes-kernel/linux/linux-yocto-4.19.8/0712-drm-Introduce-per-device-driver_features.patch')
-rw-r--r-- | common/recipes-kernel/linux/linux-yocto-4.19.8/0712-drm-Introduce-per-device-driver_features.patch | 104 |
1 files changed, 104 insertions, 0 deletions
diff --git a/common/recipes-kernel/linux/linux-yocto-4.19.8/0712-drm-Introduce-per-device-driver_features.patch b/common/recipes-kernel/linux/linux-yocto-4.19.8/0712-drm-Introduce-per-device-driver_features.patch new file mode 100644 index 00000000..fd37f8a4 --- /dev/null +++ b/common/recipes-kernel/linux/linux-yocto-4.19.8/0712-drm-Introduce-per-device-driver_features.patch @@ -0,0 +1,104 @@ +From 159837a24a804aa0dc55a1150d9a99f4b8bb5b13 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Ville=20Syrj=C3=A4l=C3=A4?= <ville.syrjala@linux.intel.com> +Date: Thu, 13 Sep 2018 16:16:21 +0300 +Subject: [PATCH 0712/2940] drm: Introduce per-device driver_features +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +We wish to control certain driver_features flags on a per-device basis +while still sharing a single drm_driver instance across all the +devices. To that end introduce device.driver_features. By default +it will be set to ~0 to not impose any limits beyond +driver.driver_features. Drivers can then clear specific flags +in the per-device bitmask to limit the capabilities of the device. + +An alternative approach would be to copy the driver_features from +the driver into the device in drm_dev_init(), however that would +require verifying that no driver is currently changing +driver.driver_features after drm_dev_init(). Hence the ~0 apporach +was easier. + +Ideally we'd also make drm_driver const but there is plenty of code +left that wants to mutate it (eg. various vfunc assignments). We'll +need to fix all that up before we can make it const. + +And while at it fix up the type of the feature flag passed to +drm_core_check_feature(). + +v2: Streamline the && vs. & (Chris) + s/int/u32/ in drm_core_check_feature() args + +Cc: Chris Wilson <chris@chris-wilson.co.uk> +Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> +Link: https://patchwork.freedesktop.org/patch/msgid/20180913131622.17690-1-ville.syrjala@linux.intel.com +Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> +Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> +Reviewed-by: Michel Dänzer <michel.daenzer@amd.com> +--- + drivers/gpu/drm/drm_drv.c | 3 +++ + include/drm/drm_device.h | 10 ++++++++++ + include/drm/drm_drv.h | 8 ++++---- + 3 files changed, 17 insertions(+), 4 deletions(-) + +diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c +index ea4941da9b27..36e8e9cbec52 100644 +--- a/drivers/gpu/drm/drm_drv.c ++++ b/drivers/gpu/drm/drm_drv.c +@@ -506,6 +506,9 @@ int drm_dev_init(struct drm_device *dev, + dev->dev = parent; + dev->driver = driver; + ++ /* no per-device feature limits by default */ ++ dev->driver_features = ~0u; ++ + INIT_LIST_HEAD(&dev->filelist); + INIT_LIST_HEAD(&dev->filelist_internal); + INIT_LIST_HEAD(&dev->clientlist); +diff --git a/include/drm/drm_device.h b/include/drm/drm_device.h +index f9c6e0e3aec7..42411b3ea0c8 100644 +--- a/include/drm/drm_device.h ++++ b/include/drm/drm_device.h +@@ -45,6 +45,16 @@ struct drm_device { + /* currently active master for this device. Protected by master_mutex */ + struct drm_master *master; + ++ /** ++ * @driver_features: per-device driver features ++ * ++ * Drivers can clear specific flags here to disallow ++ * certain features on a per-device basis while still ++ * sharing a single &struct drm_driver instance across ++ * all devices. ++ */ ++ u32 driver_features; ++ + /** + * @unplugged: + * +diff --git a/include/drm/drm_drv.h b/include/drm/drm_drv.h +index 152b3055e9e1..001836f7493a 100644 +--- a/include/drm/drm_drv.h ++++ b/include/drm/drm_drv.h +@@ -654,14 +654,14 @@ static inline bool drm_dev_is_unplugged(struct drm_device *dev) + * @dev: DRM device to check + * @feature: feature flag + * +- * This checks @dev for driver features, see &drm_driver.driver_features and the +- * various DRIVER_\* flags. ++ * This checks @dev for driver features, see &drm_driver.driver_features, ++ * &drm_device.driver_features, and the various DRIVER_\* flags. + * + * Returns true if the @feature is supported, false otherwise. + */ +-static inline bool drm_core_check_feature(struct drm_device *dev, int feature) ++static inline bool drm_core_check_feature(struct drm_device *dev, u32 feature) + { +- return dev->driver->driver_features & feature; ++ return dev->driver->driver_features & dev->driver_features & feature; + } + + /** +-- +2.17.1 + |