drm/hisilicon: Fix DRM_INFO printed issue
authorXinliang Liu <xinliang.liu@linaro.org>
Mon, 9 May 2016 01:59:50 +0000 (09:59 +0800)
committerXinliang Liu <xinliang.liu@linaro.org>
Wed, 11 May 2016 11:05:36 +0000 (19:05 +0800)
This patch fixed the bellow no DRM_INFO is printed issue:

if (!delay_count)
DRM_INFO("phylock and phystopstateclklane is not ready.\n");

There will some printed issues with above info, under certain
circumstances:

If ((BIT(0) | BIT(2)) & val) is never true, break will not happen and
delay_count will be max u32 value (?), and no DRM_INFO is printed.

Also if ((BIT(0) | BIT(2)) & val) is true at the last possible
loop round, break happens, but now delay_count is already zero
( because of earlier delay_count-- ) and DRM_INFO is erroneously
printed.

Thanks to Juha Leppänen, he reports to me this issue.

Signed-off-by: Xinliang Liu <xinliang.liu@linaro.org>
Reported-by: Juha Leppänen <juha_efku@dnainternet.net>
drivers/gpu/drm/hisilicon/kirin/dw_drm_dsi.c

index bfbc2159250d1b0bdb1e97293f895f141fcb100c..998452ad0fcb992cbef4169c9b5073c7c999bcc3 100644 (file)
@@ -430,12 +430,13 @@ static void dsi_set_mipi_phy(void __iomem *base,
         * wait for phy's clock ready
         */
        delay_count = 100;
-       while (delay_count--) {
+       while (delay_count) {
                val = readl(base +  PHY_STATUS);
                if ((BIT(0) | BIT(2)) & val)
                        break;
 
                udelay(1);
+               delay_count--;
        }
 
        if (!delay_count)