[PATCH 4/4] drm/sun4i: rgb: Change the pixel clock validation check
kbuild test robot
lkp at intel.com
Wed Feb 27 04:55:17 UTC 2019
Hi Maxime,
I love your patch! Yet something to improve:
[auto build test ERROR on ]
url: https://github.com/0day-ci/linux/commits/Maxime-Ripard/drm-sun4i-rgb-Relax-the-pixel-clock-check/20190227-012757
base:
config: arm-allmodconfig (attached as .config)
compiler: arm-linux-gnueabi-gcc (Debian 8.2.0-11) 8.2.0
reproduce:
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# save the attached .config to linux build tree
GCC_VERSION=8.2.0 make.cross ARCH=arm
All errors (new ones prefixed by >>):
>> drivers/gpu//drm/sun4i/sun4i_rgb.c:62:1: error: unknown type name 'DEFINE'; did you mean 'EPIPE'?
DEFINE SUN4I_RGB_DOTCLOCK_TOLERANCE 5
^~~~~~
EPIPE
>> drivers/gpu//drm/sun4i/sun4i_rgb.c:62:37: error: expected '=', ',', ';', 'asm' or '__attribute__' before numeric constant
DEFINE SUN4I_RGB_DOTCLOCK_TOLERANCE 5
^
>> drivers/gpu//drm/sun4i/sun4i_rgb.c:191:16: error: 'sun4i_rgb_mode_valid' undeclared here (not in a function); did you mean 'sun4i_rgb_con_funcs'?
.mode_valid = sun4i_rgb_mode_valid,
^~~~~~~~~~~~~~~~~~~~
sun4i_rgb_con_funcs
vim +191 drivers/gpu//drm/sun4i/sun4i_rgb.c
29e57fab9 Maxime Ripard 2015-10-29 55
3c3671edd Maxime Ripard 2019-02-26 56 /*
3c3671edd Maxime Ripard 2019-02-26 57 * VESA DMT defines a tolerance of 0.5% on the pixel clock, while the
3c3671edd Maxime Ripard 2019-02-26 58 * CVT spec reuses that tolerance in its examples, so it looks to be a
3c3671edd Maxime Ripard 2019-02-26 59 * good default tolerance for the EDID-based modes. Define it to 5 per
3c3671edd Maxime Ripard 2019-02-26 60 * mille to avoid floating point operations.
3c3671edd Maxime Ripard 2019-02-26 61 */
3c3671edd Maxime Ripard 2019-02-26 @62 DEFINE SUN4I_RGB_DOTCLOCK_TOLERANCE 5
3c3671edd Maxime Ripard 2019-02-26 63
cde8b7548 Giulio Benetti 2018-03-13 64 static enum drm_mode_status sun4i_rgb_mode_valid(struct drm_encoder *crtc,
cde8b7548 Giulio Benetti 2018-03-13 65 const struct drm_display_mode *mode)
29e57fab9 Maxime Ripard 2015-10-29 66 {
cde8b7548 Giulio Benetti 2018-03-13 67 struct sun4i_rgb *rgb = drm_encoder_to_sun4i_rgb(crtc);
b9c8506cb Chen-Yu Tsai 2017-02-23 68 struct sun4i_tcon *tcon = rgb->tcon;
29e57fab9 Maxime Ripard 2015-10-29 69 u32 hsync = mode->hsync_end - mode->hsync_start;
29e57fab9 Maxime Ripard 2015-10-29 70 u32 vsync = mode->vsync_end - mode->vsync_start;
7659a82a3 Maxime Ripard 2019-02-26 71 unsigned long long rate = mode->clock * 1000;
3c3671edd Maxime Ripard 2019-02-26 72 unsigned long long lowest, highest;
7659a82a3 Maxime Ripard 2019-02-26 73 unsigned long long rounded_rate;
29e57fab9 Maxime Ripard 2015-10-29 74
29e57fab9 Maxime Ripard 2015-10-29 75 DRM_DEBUG_DRIVER("Validating modes...\n");
29e57fab9 Maxime Ripard 2015-10-29 76
29e57fab9 Maxime Ripard 2015-10-29 77 if (hsync < 1)
29e57fab9 Maxime Ripard 2015-10-29 78 return MODE_HSYNC_NARROW;
29e57fab9 Maxime Ripard 2015-10-29 79
29e57fab9 Maxime Ripard 2015-10-29 80 if (hsync > 0x3ff)
29e57fab9 Maxime Ripard 2015-10-29 81 return MODE_HSYNC_WIDE;
29e57fab9 Maxime Ripard 2015-10-29 82
29e57fab9 Maxime Ripard 2015-10-29 83 if ((mode->hdisplay < 1) || (mode->htotal < 1))
29e57fab9 Maxime Ripard 2015-10-29 84 return MODE_H_ILLEGAL;
29e57fab9 Maxime Ripard 2015-10-29 85
29e57fab9 Maxime Ripard 2015-10-29 86 if ((mode->hdisplay > 0x7ff) || (mode->htotal > 0xfff))
29e57fab9 Maxime Ripard 2015-10-29 87 return MODE_BAD_HVALUE;
29e57fab9 Maxime Ripard 2015-10-29 88
29e57fab9 Maxime Ripard 2015-10-29 89 DRM_DEBUG_DRIVER("Horizontal parameters OK\n");
29e57fab9 Maxime Ripard 2015-10-29 90
29e57fab9 Maxime Ripard 2015-10-29 91 if (vsync < 1)
29e57fab9 Maxime Ripard 2015-10-29 92 return MODE_VSYNC_NARROW;
29e57fab9 Maxime Ripard 2015-10-29 93
29e57fab9 Maxime Ripard 2015-10-29 94 if (vsync > 0x3ff)
29e57fab9 Maxime Ripard 2015-10-29 95 return MODE_VSYNC_WIDE;
29e57fab9 Maxime Ripard 2015-10-29 96
29e57fab9 Maxime Ripard 2015-10-29 97 if ((mode->vdisplay < 1) || (mode->vtotal < 1))
29e57fab9 Maxime Ripard 2015-10-29 98 return MODE_V_ILLEGAL;
29e57fab9 Maxime Ripard 2015-10-29 99
29e57fab9 Maxime Ripard 2015-10-29 100 if ((mode->vdisplay > 0x7ff) || (mode->vtotal > 0xfff))
29e57fab9 Maxime Ripard 2015-10-29 101 return MODE_BAD_VVALUE;
29e57fab9 Maxime Ripard 2015-10-29 102
29e57fab9 Maxime Ripard 2015-10-29 103 DRM_DEBUG_DRIVER("Vertical parameters OK\n");
29e57fab9 Maxime Ripard 2015-10-29 104
3c3671edd Maxime Ripard 2019-02-26 105 /*
3c3671edd Maxime Ripard 2019-02-26 106 * TODO: We should use the struct display_timing if available
3c3671edd Maxime Ripard 2019-02-26 107 * and / or trying to stretch the timings within that
3c3671edd Maxime Ripard 2019-02-26 108 * tolerancy to take care of panels that we wouldn't be able
3c3671edd Maxime Ripard 2019-02-26 109 * to have a exact match for.
3c3671edd Maxime Ripard 2019-02-26 110 */
3c3671edd Maxime Ripard 2019-02-26 111 if (rgb->panel) {
3c3671edd Maxime Ripard 2019-02-26 112 DRM_DEBUG_DRIVER("RGB panel used, skipping clock rate checks");
3c3671edd Maxime Ripard 2019-02-26 113 goto out;
3c3671edd Maxime Ripard 2019-02-26 114 }
3c3671edd Maxime Ripard 2019-02-26 115
3c3671edd Maxime Ripard 2019-02-26 116 /*
3c3671edd Maxime Ripard 2019-02-26 117 * That shouldn't ever happen unless something is really wrong, but it
3c3671edd Maxime Ripard 2019-02-26 118 * doesn't harm to check.
3c3671edd Maxime Ripard 2019-02-26 119 */
3c3671edd Maxime Ripard 2019-02-26 120 if (!rgb->bridge)
3c3671edd Maxime Ripard 2019-02-26 121 goto out;
3c3671edd Maxime Ripard 2019-02-26 122
5af894bd2 Maxime Ripard 2018-02-21 123 tcon->dclk_min_div = 6;
5af894bd2 Maxime Ripard 2018-02-21 124 tcon->dclk_max_div = 127;
bb43d40d7 Maxime Ripard 2016-04-21 125 rounded_rate = clk_round_rate(tcon->dclk, rate);
3c3671edd Maxime Ripard 2019-02-26 126
3c3671edd Maxime Ripard 2019-02-26 127 lowest = rate * (1000 - SUN4I_RGB_DOTCLOCK_TOLERANCE);
3c3671edd Maxime Ripard 2019-02-26 128 do_div(lowest, 1000);
3c3671edd Maxime Ripard 2019-02-26 129 if (rounded_rate < lowest)
bb43d40d7 Maxime Ripard 2016-04-21 130 return MODE_CLOCK_LOW;
bb43d40d7 Maxime Ripard 2016-04-21 131
3c3671edd Maxime Ripard 2019-02-26 132 highest = rate * (1000 + SUN4I_RGB_DOTCLOCK_TOLERANCE);
3c3671edd Maxime Ripard 2019-02-26 133 do_div(highest, 1000);
3c3671edd Maxime Ripard 2019-02-26 134 if (rounded_rate > highest)
bb43d40d7 Maxime Ripard 2016-04-21 135 return MODE_CLOCK_HIGH;
bb43d40d7 Maxime Ripard 2016-04-21 136
3c3671edd Maxime Ripard 2019-02-26 137 out:
bb43d40d7 Maxime Ripard 2016-04-21 138 DRM_DEBUG_DRIVER("Clock rate OK\n");
bb43d40d7 Maxime Ripard 2016-04-21 139
29e57fab9 Maxime Ripard 2015-10-29 140 return MODE_OK;
29e57fab9 Maxime Ripard 2015-10-29 141 }
29e57fab9 Maxime Ripard 2015-10-29 142
29e57fab9 Maxime Ripard 2015-10-29 143 static struct drm_connector_helper_funcs sun4i_rgb_con_helper_funcs = {
29e57fab9 Maxime Ripard 2015-10-29 144 .get_modes = sun4i_rgb_get_modes,
29e57fab9 Maxime Ripard 2015-10-29 145 };
29e57fab9 Maxime Ripard 2015-10-29 146
29e57fab9 Maxime Ripard 2015-10-29 147 static void
29e57fab9 Maxime Ripard 2015-10-29 148 sun4i_rgb_connector_destroy(struct drm_connector *connector)
29e57fab9 Maxime Ripard 2015-10-29 149 {
29e57fab9 Maxime Ripard 2015-10-29 150 struct sun4i_rgb *rgb = drm_connector_to_sun4i_rgb(connector);
29e57fab9 Maxime Ripard 2015-10-29 151
b413dde1a Maxime Ripard 2019-02-26 152 drm_panel_detach(rgb->panel);
29e57fab9 Maxime Ripard 2015-10-29 153 drm_connector_cleanup(connector);
29e57fab9 Maxime Ripard 2015-10-29 154 }
29e57fab9 Maxime Ripard 2015-10-29 155
32b4d5756 Bhumika Goyal 2017-08-08 156 static const struct drm_connector_funcs sun4i_rgb_con_funcs = {
29e57fab9 Maxime Ripard 2015-10-29 157 .fill_modes = drm_helper_probe_single_connector_modes,
29e57fab9 Maxime Ripard 2015-10-29 158 .destroy = sun4i_rgb_connector_destroy,
29e57fab9 Maxime Ripard 2015-10-29 159 .reset = drm_atomic_helper_connector_reset,
29e57fab9 Maxime Ripard 2015-10-29 160 .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
29e57fab9 Maxime Ripard 2015-10-29 161 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
29e57fab9 Maxime Ripard 2015-10-29 162 };
29e57fab9 Maxime Ripard 2015-10-29 163
29e57fab9 Maxime Ripard 2015-10-29 164 static void sun4i_rgb_encoder_enable(struct drm_encoder *encoder)
29e57fab9 Maxime Ripard 2015-10-29 165 {
29e57fab9 Maxime Ripard 2015-10-29 166 struct sun4i_rgb *rgb = drm_encoder_to_sun4i_rgb(encoder);
29e57fab9 Maxime Ripard 2015-10-29 167
29e57fab9 Maxime Ripard 2015-10-29 168 DRM_DEBUG_DRIVER("Enabling RGB output\n");
29e57fab9 Maxime Ripard 2015-10-29 169
b413dde1a Maxime Ripard 2019-02-26 170 if (rgb->panel) {
b413dde1a Maxime Ripard 2019-02-26 171 drm_panel_prepare(rgb->panel);
b413dde1a Maxime Ripard 2019-02-26 172 drm_panel_enable(rgb->panel);
29e57fab9 Maxime Ripard 2015-10-29 173 }
45e88f994 Maxime Ripard 2017-10-17 174 }
29e57fab9 Maxime Ripard 2015-10-29 175
29e57fab9 Maxime Ripard 2015-10-29 176 static void sun4i_rgb_encoder_disable(struct drm_encoder *encoder)
29e57fab9 Maxime Ripard 2015-10-29 177 {
29e57fab9 Maxime Ripard 2015-10-29 178 struct sun4i_rgb *rgb = drm_encoder_to_sun4i_rgb(encoder);
29e57fab9 Maxime Ripard 2015-10-29 179
29e57fab9 Maxime Ripard 2015-10-29 180 DRM_DEBUG_DRIVER("Disabling RGB output\n");
29e57fab9 Maxime Ripard 2015-10-29 181
b413dde1a Maxime Ripard 2019-02-26 182 if (rgb->panel) {
b413dde1a Maxime Ripard 2019-02-26 183 drm_panel_disable(rgb->panel);
b413dde1a Maxime Ripard 2019-02-26 184 drm_panel_unprepare(rgb->panel);
4b3095025 Jonathan Liu 2016-08-30 185 }
45e88f994 Maxime Ripard 2017-10-17 186 }
29e57fab9 Maxime Ripard 2015-10-29 187
29e57fab9 Maxime Ripard 2015-10-29 188 static struct drm_encoder_helper_funcs sun4i_rgb_enc_helper_funcs = {
29e57fab9 Maxime Ripard 2015-10-29 189 .disable = sun4i_rgb_encoder_disable,
29e57fab9 Maxime Ripard 2015-10-29 190 .enable = sun4i_rgb_encoder_enable,
cde8b7548 Giulio Benetti 2018-03-13 @191 .mode_valid = sun4i_rgb_mode_valid,
29e57fab9 Maxime Ripard 2015-10-29 192 };
29e57fab9 Maxime Ripard 2015-10-29 193
:::::: The code at line 191 was first introduced by commit
:::::: cde8b7548272640437d2fa691ae211f940066f6b drm/sun4i: move rgb mode_valid from connector to encoder
:::::: TO: Giulio Benetti <giulio.benetti at micronovasrl.com>
:::::: CC: Maxime Ripard <maxime.ripard at bootlin.com>
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/pipermail/kbuild-all Intel Corporation
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 68304 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20190227/91632833/attachment-0001.gz>
More information about the dri-devel
mailing list