From: Maxime Ripard <maxime.ripard@bootlin.com>
To: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Sean Paul <seanpaul@chromium.org>,
Maxime Ripard <maxime.ripard@bootlin.com>,
Daniel Vetter <daniel.vetter@intel.com>,
David Airlie <airlied@linux.ie>
Cc: eben@raspberrypi.org, dri-devel@lists.freedesktop.org,
Paul Kocialkowski <paul.kocialkowski@bootlin.com>,
Eric Anholt <eric@anholt.net>,
Thomas Petazzoni <thomas.petazzoni@bootlin.com>,
linux-arm-kernel@lists.infradead.org
Subject: [PATCH 7/7] drm/modes: Parse overscan properties
Date: Mon, 4 Mar 2019 15:52:40 +0100 [thread overview]
Message-ID: <2ed59d66a88ff8f077aa0db98de2c5622d4a5b43.1551711042.git-series.maxime.ripard@bootlin.com> (raw)
In-Reply-To: <cover.39761cc6c9d070568123e328cd216367c4c660b4.1551711042.git-series.maxime.ripard@bootlin.com>
Properly configuring the overscan properties might be needed for the
initial setup of the framebuffer for display that still have overscan.
Let's allow for more properties on the kernel command line to setup each
margin.
Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
---
drivers/gpu/drm/drm_fb_helper.c | 47 ++++++++++++++++++++++++++++++++++-
drivers/gpu/drm/drm_modes.c | 44 ++++++++++++++++++++++++++++++++-
include/drm/drm_connector.h | 1 +-
3 files changed, 92 insertions(+)
diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
index 1457a1d1a423..3569016111a4 100644
--- a/drivers/gpu/drm/drm_fb_helper.c
+++ b/drivers/gpu/drm/drm_fb_helper.c
@@ -2569,6 +2569,51 @@ static void drm_setup_crtc_rotation(struct drm_fb_helper *fb_helper,
fb_helper->sw_rotations |= DRM_MODE_ROTATE_0;
}
+static void drm_setup_connector_margins(struct drm_connector *connector)
+{
+ struct drm_cmdline_mode *cmdline = &connector->cmdline_mode;
+ struct drm_modeset_acquire_ctx ctx;
+ struct drm_atomic_state *state;
+ struct drm_device *dev = connector->dev;
+ int ret;
+
+ if (!drm_drv_uses_atomic_modeset(dev))
+ return;
+
+ drm_modeset_acquire_init(&ctx, 0);
+
+ state = drm_atomic_state_alloc(dev);
+ state->acquire_ctx = &ctx;
+
+retry:
+ drm_atomic_set_property(state, &connector->base,
+ dev->mode_config.tv_left_margin_property,
+ cmdline->overscan_left);
+
+ drm_atomic_set_property(state, &connector->base,
+ dev->mode_config.tv_right_margin_property,
+ cmdline->overscan_right);
+
+ drm_atomic_set_property(state, &connector->base,
+ dev->mode_config.tv_top_margin_property,
+ cmdline->overscan_top);
+
+ drm_atomic_set_property(state, &connector->base,
+ dev->mode_config.tv_bottom_margin_property,
+ cmdline->overscan_bottom);
+
+ ret = drm_atomic_commit(state);
+ if (ret == -EDEADLK) {
+ drm_atomic_state_clear(state);
+ drm_modeset_backoff(&ctx);
+ goto retry;
+ }
+
+ drm_atomic_state_put(state);
+ drm_modeset_drop_locks(&ctx);
+ drm_modeset_acquire_fini(&ctx);
+}
+
static void drm_setup_crtcs(struct drm_fb_helper *fb_helper,
u32 width, u32 height)
{
@@ -2682,6 +2727,8 @@ static void drm_setup_crtcs_fb(struct drm_fb_helper *fb_helper)
struct drm_connector *connector =
fb_helper->connector_info[i]->connector;
+ drm_setup_connector_margins(connector);
+
/* use first connected connector for the physical dimensions */
if (connector->status == connector_status_connected) {
info->var.width = connector->display_info.width_mm;
diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
index 10c7e9322f76..6613db04cf77 100644
--- a/drivers/gpu/drm/drm_modes.c
+++ b/drivers/gpu/drm/drm_modes.c
@@ -1586,6 +1586,50 @@ static int drm_mode_parse_cmdline_options(char *str, size_t len,
} else if (!strncmp(option, "reflect_y", delim - option)) {
rotation |= DRM_MODE_REFLECT_Y;
sep = delim;
+ } else if (!strncmp(option, "overscan_right", delim - option)) {
+ const char *value = delim + 1;
+ unsigned int margin;
+
+ margin = simple_strtol(value, &sep, 10);
+
+ /* Make sure we have parsed something */
+ if (sep == value)
+ return -EINVAL;
+
+ mode->overscan_right = margin;
+ } else if (!strncmp(option, "overscan_left", delim - option)) {
+ const char *value = delim + 1;
+ unsigned int margin;
+
+ margin = simple_strtol(value, &sep, 10);
+
+ /* Make sure we have parsed something */
+ if (sep == value)
+ return -EINVAL;
+
+ mode->overscan_left = margin;
+ } else if (!strncmp(option, "overscan_top", delim - option)) {
+ const char *value = delim + 1;
+ unsigned int margin;
+
+ margin = simple_strtol(value, &sep, 10);
+
+ /* Make sure we have parsed something */
+ if (sep == value)
+ return -EINVAL;
+
+ mode->overscan_top = margin;
+ } else if (!strncmp(option, "overscan_bottom", delim - option)) {
+ const char *value = delim + 1;
+ unsigned int margin;
+
+ margin = simple_strtol(value, &sep, 10);
+
+ /* Make sure we have parsed something */
+ if (sep == value)
+ return -EINVAL;
+
+ mode->overscan_bottom = margin;
} else {
return -EINVAL;
}
diff --git a/include/drm/drm_connector.h b/include/drm/drm_connector.h
index cff18360f52a..731a79752d13 100644
--- a/include/drm/drm_connector.h
+++ b/include/drm/drm_connector.h
@@ -830,6 +830,7 @@ struct drm_cmdline_mode {
int xres, yres;
int bpp;
int refresh;
+ int overscan_right, overscan_top, overscan_left, overscan_bottom;
bool rb;
bool interlace;
bool cvt;
--
git-series 0.9.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next prev parent reply other threads:[~2019-03-04 14:54 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-04 14:52 [PATCH 0/7] drm/vc4: Allow for more boot-time configuration Maxime Ripard
2019-03-04 14:52 ` [PATCH 1/7] drm/vc4: hdmi: Check that the monitor supports HDMI audio Maxime Ripard
2019-03-04 15:10 ` Paul Kocialkowski
2019-03-04 15:54 ` Stefan Wahren
2019-03-04 18:28 ` Eric Anholt
2019-03-04 20:06 ` Stefan Wahren
2019-03-04 21:09 ` Eric Anholt
2019-03-04 14:52 ` [PATCH 2/7] drm/edid: Allow to ignore the audio EDID data Maxime Ripard
2019-03-04 15:47 ` Jani Nikula
2019-03-04 15:51 ` Adam Jackson
2019-03-05 8:08 ` Maxime Ripard
2019-03-05 10:33 ` Jani Nikula
2019-03-05 15:08 ` Adam Jackson
2019-03-04 15:59 ` Ville Syrjälä
2019-03-04 19:53 ` Eric Anholt
2019-03-04 20:05 ` Alex Deucher
2019-03-05 9:12 ` Maxime Ripard
2019-03-05 15:24 ` Ville Syrjälä
2019-03-05 19:15 ` Ville Syrjälä
2019-03-05 19:21 ` Alex Deucher
2019-03-05 19:36 ` Ville Syrjälä
2019-03-13 10:44 ` Takashi Iwai
2019-03-13 14:03 ` Maxime Ripard
2019-03-05 18:11 ` Eric Anholt
2019-03-11 13:07 ` Daniel Vetter
2019-03-05 21:47 ` Eric Anholt
2019-03-06 8:52 ` Maxime Ripard
2019-03-06 13:22 ` Maxime Ripard
2019-03-06 17:51 ` Eric Anholt
2019-03-04 14:52 ` [PATCH 3/7] drm/edid: Allow to ignore the HDMI monitor mode Maxime Ripard
2019-03-04 15:14 ` Paul Kocialkowski
2019-03-04 15:48 ` Jani Nikula
2019-03-04 20:02 ` Eric Anholt
2019-03-05 9:24 ` Maxime Ripard
2019-03-04 14:52 ` [PATCH 4/7] drm/modes: Rewrite the command line parser Maxime Ripard
2019-03-04 14:52 ` [PATCH 5/7] drm/modes: Support modes names on the command line Maxime Ripard
2019-03-04 14:52 ` [PATCH 6/7] drm/modes: Allow to specify rotation and reflection on the commandline Maxime Ripard
2019-03-04 14:52 ` Maxime Ripard [this message]
2019-03-04 15:21 ` [PATCH 0/7] drm/vc4: Allow for more boot-time configuration Peter Stuge
2019-03-04 15:56 ` Maxime Ripard
2019-03-04 15:44 ` Stefan Wahren
2019-03-04 20:06 ` Eric Anholt
2019-03-05 9:14 ` Maxime Ripard
2019-03-11 13:00 ` Daniel Vetter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=2ed59d66a88ff8f077aa0db98de2c5622d4a5b43.1551711042.git-series.maxime.ripard@bootlin.com \
--to=maxime.ripard@bootlin.com \
--cc=airlied@linux.ie \
--cc=daniel.vetter@intel.com \
--cc=dri-devel@lists.freedesktop.org \
--cc=eben@raspberrypi.org \
--cc=eric@anholt.net \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=maarten.lankhorst@linux.intel.com \
--cc=paul.kocialkowski@bootlin.com \
--cc=seanpaul@chromium.org \
--cc=thomas.petazzoni@bootlin.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).