[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