From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Zimmermann Date: Mon, 14 Oct 2019 14:04:04 +0000 Subject: [PATCH v2 03/15] drm/simple-kms-helper: Add mode_fixup() to simple display pipe Message-Id: <20191014140416.28517-4-tzimmermann@suse.de> List-Id: References: <20191014140416.28517-1-tzimmermann@suse.de> In-Reply-To: <20191014140416.28517-1-tzimmermann@suse.de> MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: airlied@linux.ie, daniel@ffwll.ch, maarten.lankhorst@linux.intel.com, mripard@kernel.org, sean@poorly.run, b.zolnierkie@samsung.com, ajax@redhat.com, ville.syrjala@linux.intel.com, malat@debian.org, michel@daenzer.net Cc: gregkh@linuxfoundation.org, linux-fbdev@vger.kernel.org, Thomas Zimmermann , dri-devel@lists.freedesktop.org, corbet@lwn.net The mode fix-up function for simple display helpers is equivalent to the regular pipeline's CRTC mode fix-up function. It's called to adjust the CRTC's display mode for the encoder. Add this function for DRM fbconv helpers. Signed-off-by: Thomas Zimmermann --- drivers/gpu/drm/drm_simple_kms_helper.c | 15 +++++++++ include/drm/drm_simple_kms_helper.h | 43 +++++++++++++++++++++++++ 2 files changed, 58 insertions(+) diff --git a/drivers/gpu/drm/drm_simple_kms_helper.c b/drivers/gpu/drm/drm_simple_kms_helper.c index 046055719245..acd9b79bf92a 100644 --- a/drivers/gpu/drm/drm_simple_kms_helper.c +++ b/drivers/gpu/drm/drm_simple_kms_helper.c @@ -46,6 +46,20 @@ drm_simple_kms_crtc_mode_valid(struct drm_crtc *crtc, return pipe->funcs->mode_valid(crtc, mode); } +static bool +drm_simple_kms_crtc_mode_fixup(struct drm_crtc *crtc, + const struct drm_display_mode *mode, + struct drm_display_mode *adjusted_mode) +{ + struct drm_simple_display_pipe *pipe; + + pipe = container_of(crtc, struct drm_simple_display_pipe, crtc); + if (!pipe->funcs || !pipe->funcs->mode_fixup) + return true; + + return pipe->funcs->mode_fixup(crtc, mode, adjusted_mode); +} + static int drm_simple_kms_crtc_check(struct drm_crtc *crtc, struct drm_crtc_state *state) { @@ -87,6 +101,7 @@ static void drm_simple_kms_crtc_disable(struct drm_crtc *crtc, static const struct drm_crtc_helper_funcs drm_simple_kms_crtc_helper_funcs = { .mode_valid = drm_simple_kms_crtc_mode_valid, + .mode_fixup = drm_simple_kms_crtc_mode_fixup, .atomic_check = drm_simple_kms_crtc_check, .atomic_enable = drm_simple_kms_crtc_enable, .atomic_disable = drm_simple_kms_crtc_disable, diff --git a/include/drm/drm_simple_kms_helper.h b/include/drm/drm_simple_kms_helper.h index 4d89cd0a60db..1b975ab67144 100644 --- a/include/drm/drm_simple_kms_helper.h +++ b/include/drm/drm_simple_kms_helper.h @@ -52,6 +52,49 @@ struct drm_simple_display_pipe_funcs { enum drm_mode_status (*mode_valid)(struct drm_crtc *crtc, const struct drm_display_mode *mode); + /** + * @mode_fixup: + * + * This callback is used to validate a mode. The parameter mode is the + * display mode that userspace requested, adjusted_mode is the mode the + * encoders need to be fed with. Note that this is the inverse semantics + * of the meaning for the &drm_encoder and &drm_bridge_funcs.mode_fixup + * vfunc. If the CRTC of the simple display pipe cannot support the + * requested conversion from mode to adjusted_mode it should reject the + * modeset. + * + * This function is optional. + * + * NOTE: + * + * This function is called in the check phase of atomic modesets, which + * can be aborted for any reason (including on userspace's request to + * just check whether a configuration would be possible). Atomic drivers + * MUST NOT touch any persistent state (hardware or software) or data + * structures except the passed in adjusted_mode parameter. + * + * Atomic drivers which need to inspect and adjust more state should + * instead use the @atomic_check callback, but note that they're not + * perfectly equivalent: @mode_valid is called from + * drm_atomic_helper_check_modeset(), but @atomic_check is called from + * drm_atomic_helper_check_planes(), because originally it was meant for + * plane update checks only. + * + * Also beware that userspace can request its own custom modes, neither + * core nor helpers filter modes to the list of probe modes reported by + * the GETCONNECTOR IOCTL and stored in &drm_connector.modes. To ensure + * that modes are filtered consistently put any CRTC constraints and + * limits checks into @mode_valid. + * + * RETURNS: + * + * True if an acceptable configuration is possible, false if the modeset + * operation should be rejected. + */ + bool (*mode_fixup)(struct drm_crtc *crtc, + const struct drm_display_mode *mode, + struct drm_display_mode *adjusted_mode); + /** * @enable: * -- 2.23.0 From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thomas Zimmermann Subject: [PATCH v2 03/15] drm/simple-kms-helper: Add mode_fixup() to simple display pipe Date: Mon, 14 Oct 2019 16:04:04 +0200 Message-ID: <20191014140416.28517-4-tzimmermann@suse.de> References: <20191014140416.28517-1-tzimmermann@suse.de> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mx1.suse.de (mx2.suse.de [195.135.220.15]) by gabe.freedesktop.org (Postfix) with ESMTPS id 54D6B6E2DE for ; Mon, 14 Oct 2019 14:04:22 +0000 (UTC) In-Reply-To: <20191014140416.28517-1-tzimmermann@suse.de> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: airlied@linux.ie, daniel@ffwll.ch, maarten.lankhorst@linux.intel.com, mripard@kernel.org, sean@poorly.run, b.zolnierkie@samsung.com, ajax@redhat.com, ville.syrjala@linux.intel.com, malat@debian.org, michel@daenzer.net Cc: gregkh@linuxfoundation.org, linux-fbdev@vger.kernel.org, Thomas Zimmermann , dri-devel@lists.freedesktop.org, corbet@lwn.net List-Id: dri-devel@lists.freedesktop.org VGhlIG1vZGUgZml4LXVwIGZ1bmN0aW9uIGZvciBzaW1wbGUgZGlzcGxheSBoZWxwZXJzIGlzIGVx dWl2YWxlbnQgdG8gdGhlCnJlZ3VsYXIgcGlwZWxpbmUncyBDUlRDIG1vZGUgZml4LXVwIGZ1bmN0 aW9uLiBJdCdzIGNhbGxlZCB0byBhZGp1c3QgdGhlCkNSVEMncyBkaXNwbGF5IG1vZGUgZm9yIHRo ZSBlbmNvZGVyLiBBZGQgdGhpcyBmdW5jdGlvbiBmb3IgRFJNIGZiY29udgpoZWxwZXJzLgoKU2ln bmVkLW9mZi1ieTogVGhvbWFzIFppbW1lcm1hbm4gPHR6aW1tZXJtYW5uQHN1c2UuZGU+Ci0tLQog ZHJpdmVycy9ncHUvZHJtL2RybV9zaW1wbGVfa21zX2hlbHBlci5jIHwgMTUgKysrKysrKysrCiBp bmNsdWRlL2RybS9kcm1fc2ltcGxlX2ttc19oZWxwZXIuaCAgICAgfCA0MyArKysrKysrKysrKysr KysrKysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDU4IGluc2VydGlvbnMoKykKCmRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3NpbXBsZV9rbXNfaGVscGVyLmMgYi9kcml2ZXJzL2dw dS9kcm0vZHJtX3NpbXBsZV9rbXNfaGVscGVyLmMKaW5kZXggMDQ2MDU1NzE5MjQ1Li5hY2Q5Yjc5 YmY5MmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fc2ltcGxlX2ttc19oZWxwZXIu YworKysgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3NpbXBsZV9rbXNfaGVscGVyLmMKQEAgLTQ2LDYg KzQ2LDIwIEBAIGRybV9zaW1wbGVfa21zX2NydGNfbW9kZV92YWxpZChzdHJ1Y3QgZHJtX2NydGMg KmNydGMsCiAJcmV0dXJuIHBpcGUtPmZ1bmNzLT5tb2RlX3ZhbGlkKGNydGMsIG1vZGUpOwogfQog CitzdGF0aWMgYm9vbAorZHJtX3NpbXBsZV9rbXNfY3J0Y19tb2RlX2ZpeHVwKHN0cnVjdCBkcm1f Y3J0YyAqY3J0YywKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqbW9k ZSwKKwkJCSAgICAgICBzdHJ1Y3QgZHJtX2Rpc3BsYXlfbW9kZSAqYWRqdXN0ZWRfbW9kZSkKK3sK KwlzdHJ1Y3QgZHJtX3NpbXBsZV9kaXNwbGF5X3BpcGUgKnBpcGU7CisKKwlwaXBlID0gY29udGFp bmVyX29mKGNydGMsIHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZSwgY3J0Yyk7CisJaWYg KCFwaXBlLT5mdW5jcyB8fCAhcGlwZS0+ZnVuY3MtPm1vZGVfZml4dXApCisJCXJldHVybiB0cnVl OworCisJcmV0dXJuIHBpcGUtPmZ1bmNzLT5tb2RlX2ZpeHVwKGNydGMsIG1vZGUsIGFkanVzdGVk X21vZGUpOworfQorCiBzdGF0aWMgaW50IGRybV9zaW1wbGVfa21zX2NydGNfY2hlY2soc3RydWN0 IGRybV9jcnRjICpjcnRjLAogCQkJCSAgICAgc3RydWN0IGRybV9jcnRjX3N0YXRlICpzdGF0ZSkK IHsKQEAgLTg3LDYgKzEwMSw3IEBAIHN0YXRpYyB2b2lkIGRybV9zaW1wbGVfa21zX2NydGNfZGlz YWJsZShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHJtX2Ny dGNfaGVscGVyX2Z1bmNzIGRybV9zaW1wbGVfa21zX2NydGNfaGVscGVyX2Z1bmNzID0gewogCS5t b2RlX3ZhbGlkID0gZHJtX3NpbXBsZV9rbXNfY3J0Y19tb2RlX3ZhbGlkLAorCS5tb2RlX2ZpeHVw ID0gZHJtX3NpbXBsZV9rbXNfY3J0Y19tb2RlX2ZpeHVwLAogCS5hdG9taWNfY2hlY2sgPSBkcm1f c2ltcGxlX2ttc19jcnRjX2NoZWNrLAogCS5hdG9taWNfZW5hYmxlID0gZHJtX3NpbXBsZV9rbXNf Y3J0Y19lbmFibGUsCiAJLmF0b21pY19kaXNhYmxlID0gZHJtX3NpbXBsZV9rbXNfY3J0Y19kaXNh YmxlLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX3NpbXBsZV9rbXNfaGVscGVyLmggYi9p bmNsdWRlL2RybS9kcm1fc2ltcGxlX2ttc19oZWxwZXIuaAppbmRleCA0ZDg5Y2QwYTYwZGIuLjFi OTc1YWI2NzE0NCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX3NpbXBsZV9rbXNfaGVscGVy LmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX3NpbXBsZV9rbXNfaGVscGVyLmgKQEAgLTUyLDYgKzUy LDQ5IEBAIHN0cnVjdCBkcm1fc2ltcGxlX2Rpc3BsYXlfcGlwZV9mdW5jcyB7CiAJZW51bSBkcm1f bW9kZV9zdGF0dXMgKCptb2RlX3ZhbGlkKShzdHJ1Y3QgZHJtX2NydGMgKmNydGMsCiAJCQkJCSAg IGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKTsKIAorCS8qKgorCSAqIEBtb2Rl X2ZpeHVwOgorCSAqCisJICogVGhpcyBjYWxsYmFjayBpcyB1c2VkIHRvIHZhbGlkYXRlIGEgbW9k ZS4gVGhlIHBhcmFtZXRlciBtb2RlIGlzIHRoZQorCSAqIGRpc3BsYXkgbW9kZSB0aGF0IHVzZXJz cGFjZSByZXF1ZXN0ZWQsIGFkanVzdGVkX21vZGUgaXMgdGhlIG1vZGUgdGhlCisJICogZW5jb2Rl cnMgbmVlZCB0byBiZSBmZWQgd2l0aC4gTm90ZSB0aGF0IHRoaXMgaXMgdGhlIGludmVyc2Ugc2Vt YW50aWNzCisJICogb2YgdGhlIG1lYW5pbmcgZm9yIHRoZSAmZHJtX2VuY29kZXIgYW5kICZkcm1f YnJpZGdlX2Z1bmNzLm1vZGVfZml4dXAKKwkgKiB2ZnVuYy4gSWYgdGhlIENSVEMgb2YgdGhlIHNp bXBsZSBkaXNwbGF5IHBpcGUgY2Fubm90IHN1cHBvcnQgdGhlCisJICogcmVxdWVzdGVkIGNvbnZl cnNpb24gZnJvbSBtb2RlIHRvIGFkanVzdGVkX21vZGUgaXQgc2hvdWxkIHJlamVjdCB0aGUKKwkg KiBtb2Rlc2V0LgorCSAqCisJICogVGhpcyBmdW5jdGlvbiBpcyBvcHRpb25hbC4KKwkgKgorCSAq IE5PVEU6CisJICoKKwkgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBpbiB0aGUgY2hlY2sgcGhh c2Ugb2YgYXRvbWljIG1vZGVzZXRzLCB3aGljaAorCSAqIGNhbiBiZSBhYm9ydGVkIGZvciBhbnkg cmVhc29uIChpbmNsdWRpbmcgb24gdXNlcnNwYWNlJ3MgcmVxdWVzdCB0bworCSAqIGp1c3QgY2hl Y2sgd2hldGhlciBhIGNvbmZpZ3VyYXRpb24gd291bGQgYmUgcG9zc2libGUpLiBBdG9taWMgZHJp dmVycworCSAqIE1VU1QgTk9UIHRvdWNoIGFueSBwZXJzaXN0ZW50IHN0YXRlIChoYXJkd2FyZSBv ciBzb2Z0d2FyZSkgb3IgZGF0YQorCSAqIHN0cnVjdHVyZXMgZXhjZXB0IHRoZSBwYXNzZWQgaW4g YWRqdXN0ZWRfbW9kZSBwYXJhbWV0ZXIuCisJICoKKwkgKiBBdG9taWMgZHJpdmVycyB3aGljaCBu ZWVkIHRvIGluc3BlY3QgYW5kIGFkanVzdCBtb3JlIHN0YXRlIHNob3VsZAorCSAqIGluc3RlYWQg dXNlIHRoZSBAYXRvbWljX2NoZWNrIGNhbGxiYWNrLCBidXQgbm90ZSB0aGF0IHRoZXkncmUgbm90 CisJICogcGVyZmVjdGx5IGVxdWl2YWxlbnQ6IEBtb2RlX3ZhbGlkIGlzIGNhbGxlZCBmcm9tCisJ ICogZHJtX2F0b21pY19oZWxwZXJfY2hlY2tfbW9kZXNldCgpLCBidXQgQGF0b21pY19jaGVjayBp cyBjYWxsZWQgZnJvbQorCSAqIGRybV9hdG9taWNfaGVscGVyX2NoZWNrX3BsYW5lcygpLCBiZWNh dXNlIG9yaWdpbmFsbHkgaXQgd2FzIG1lYW50IGZvcgorCSAqIHBsYW5lIHVwZGF0ZSBjaGVja3Mg b25seS4KKwkgKgorCSAqIEFsc28gYmV3YXJlIHRoYXQgdXNlcnNwYWNlIGNhbiByZXF1ZXN0IGl0 cyBvd24gY3VzdG9tIG1vZGVzLCBuZWl0aGVyCisJICogY29yZSBub3IgaGVscGVycyBmaWx0ZXIg bW9kZXMgdG8gdGhlIGxpc3Qgb2YgcHJvYmUgbW9kZXMgcmVwb3J0ZWQgYnkKKwkgKiB0aGUgR0VU Q09OTkVDVE9SIElPQ1RMIGFuZCBzdG9yZWQgaW4gJmRybV9jb25uZWN0b3IubW9kZXMuIFRvIGVu c3VyZQorCSAqIHRoYXQgbW9kZXMgYXJlIGZpbHRlcmVkIGNvbnNpc3RlbnRseSBwdXQgYW55IENS VEMgY29uc3RyYWludHMgYW5kCisJICogbGltaXRzIGNoZWNrcyBpbnRvIEBtb2RlX3ZhbGlkLgor CSAqCisJICogUkVUVVJOUzoKKwkgKgorCSAqIFRydWUgaWYgYW4gYWNjZXB0YWJsZSBjb25maWd1 cmF0aW9uIGlzIHBvc3NpYmxlLCBmYWxzZSBpZiB0aGUgbW9kZXNldAorCSAqIG9wZXJhdGlvbiBz aG91bGQgYmUgcmVqZWN0ZWQuCisJICovCisJYm9vbCAoKm1vZGVfZml4dXApKHN0cnVjdCBkcm1f Y3J0YyAqY3J0YywKKwkJCSAgIGNvbnN0IHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlLAor CQkJICAgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKmFkanVzdGVkX21vZGUpOworCiAJLyoqCiAJ ICogQGVuYWJsZToKIAkgKgotLSAKMi4yMy4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9s aXN0aW5mby9kcmktZGV2ZWw=