Received: by 2002:a05:6a10:af89:0:0:0:0 with SMTP id iu9csp121317pxb; Thu, 20 Jan 2022 10:02:14 -0800 (PST) X-Google-Smtp-Source: ABdhPJw1cqJr2qBoa1d7I/rePQ6IsC8lkYsShtL4smA5Yc+Ffx/wvfWzPJ5e0aF0BXfptDF4riIZ X-Received: by 2002:a17:902:8bcb:b0:149:907d:80c9 with SMTP id r11-20020a1709028bcb00b00149907d80c9mr38292126plo.15.1642701734473; Thu, 20 Jan 2022 10:02:14 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1642701734; cv=none; d=google.com; s=arc-20160816; b=LzvB/5Y4yr6hLmom6xXRr5I1IBIvKFI+jT5YlssDN3IuEEeTtT6gH/WBPOmcJre2cb wQDoh3TVVLJLBQbKo9ixMkFmxGNJ7Ib75WxwDG3/ZhQjHkaCto8k1TndG/IdE0filjKW XVBJCpP36wSXTrtWccvqhJ9t4iuFior3LuSXBNSmXPhg9OqQZk8pK9Vx/gwaJsqxXGRT 7uT2zBSP6dgMs4/v7SLvlx6LOcqLyy4MBGTmMo8ThNn2Yi+dUDD5NrwoyNx3qu4gREtR bUN/ODFPr71B+9x6yZB8jcptIWjj/yY7157Gq1Hq2n/ptA7LCxe0bXF84EMgt6zMo5CL 5D6A== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:cc:to:subject:from:date; bh=OQZ7ZAhKCvQV4+CxkT8zaxrDfkkq9v/Ash/Rubaj7Fk=; b=g59Ll1kl3IG2yMbxrJ/BPDjCUj/3KQ8OEPIIlt6bA6sdIvna0m/crTh5n810ZkAmXI TuTU6eWhcvUee8Cto9HZzOTbg6LVYQ4UO3Urfq70TeYzDjQ4CZmbc4MSeRNZTKR/fkxz PnMSfMOMs7bwAH3nlNGylmKJKae8vOk7u/gzGx6tRmu7QBLkc5e3ymhhi6EMqS8rdH62 Tzz5i9b/VIA1nl7uRwzAyZbjLNRhj42raNiws3jC7W5zBQO+TuOZnbHy1LYNYQkd1OVe dTRelQWo2chkB2o6QOILoTWKwhyHNxX7ChfjiUhuBBhob/MvbEaMLX4NjdLzO1LOpneb 6jvg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=crapouillou.net Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id f9si4366426plg.447.2022.01.20.10.02.00; Thu, 20 Jan 2022 10:02:14 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=crapouillou.net Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1346851AbiARQ7P convert rfc822-to-8bit (ORCPT + 99 others); Tue, 18 Jan 2022 11:59:15 -0500 Received: from aposti.net ([89.234.176.197]:56650 "EHLO aposti.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231494AbiARQ7O (ORCPT ); Tue, 18 Jan 2022 11:59:14 -0500 Date: Tue, 18 Jan 2022 16:58:58 +0000 From: Paul Cercueil Subject: Re: [PATCH v5 2/7] drm/ingenic: Add support for JZ4780 and HDMI output To: "H. Nikolaus Schaller" Cc: Mark Rutland , Paul Boddie , Geert Uytterhoeven , Neil Armstrong , David Airlie , dri-devel , linux-mips , Andrzej Hajda , Laurent Pinchart , Miquel Raynal , Sam Ravnborg , Jernej Skrabec , Harry Wentland , OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS , Kees Cook , Jonas Karlman , Mark Brown , Maxime Ripard , Thomas Bogendoerfer , Liam Girdwood , Robert Foss , linux-kernel , Rob Herring , "Eric W. Biederman" , Daniel Vetter , Hans Verkuil , Discussions about the Letux Kernel Message-Id: In-Reply-To: References: <2c7d0aa7d3ef480ebb996d37c27cbaa6f722728b.1633436959.git.hns@goldelico.com> <7CEBB741-2218-40A7-9800-B3A154895274@goldelico.com> <229EBE4C-6555-41DE-962F-D82798AEC650@goldelico.com> <5BC61397-AF28-45CD-83F6-FA2C760F3995@goldelico.com> MIME-Version: 1.0 Content-Type: text/plain; charset=iso-8859-1; format=flowed Content-Transfer-Encoding: 8BIT Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Nikolaus, Le mar., janv. 18 2022 at 15:50:01 +0100, H. Nikolaus Schaller a ?crit : > Hi Paul, > any insights on the JZ_REG_LCD_OSDC issue below? Sorry, I missed your previous email. I blame the holidays ;) > There is a second, unrelated issue with the introduction of > > "drm/bridge: display-connector: implement bus fmts callbacks" > > which breaks bus format negotiations. > > These are the two last unsolved issues to submit a fully working > driver. > >> Am 22.12.2021 um 15:03 schrieb H. Nikolaus Schaller >> : >> >>> Am 08.11.2021 um 10:37 schrieb Paul Cercueil >>> : >>> >>> Hi Nikolaus, >>> >>> Le dim., nov. 7 2021 at 21:25:38 +0100, H. Nikolaus Schaller >>> a ?crit : >>>> Hi Paul, >>>>>>>> >>>>>>>> @@ -1274,7 +1319,7 @@ static int ingenic_drm_bind(struct >>>>>>>> device *dev, bool has_components) >>>>>>>> /* Enable OSD if available */ >>>>>>>> if (soc_info->has_osd) >>>>>>>> - regmap_write(priv->map, JZ_REG_LCD_OSDC, >>>>>>>> JZ_LCD_OSDC_OSDEN); >>>>>>>> + regmap_set_bits(priv->map, JZ_REG_LCD_OSDC, >>>>>>>> JZ_LCD_OSDC_OSDEN); >>>>>>> This change is unrelated to this patch, and I'm not even sure >>>>>>> it's a valid change. The driver shouldn't rely on previous >>>>>>> register values. >>>>>> I think I already commented that I think the driver should also >>>>>> not reset >>>>>> previous register values to zero. >>>>> You did comment this, yes, but I don't agree. The driver >>>>> *should* reset the registers to zero. It should *not* have to >>>>> rely on whatever was configured before. >>>>> Even if I did agree, this is a functional change unrelated to >>>>> JZ4780 support, so it would have to be splitted to its own patch. >>>> Well it is in preparation of setting more bits that are only >>>> available for the jz4780. >>>> But it will be splitted into its own patch for other reasons - if >>>> we ever make osd working... >>>>>> If I counted correctly this register has 18 bits which seem to >>>>>> include >>>>>> some interrupt masks (which could be initialized somewhere >>>>>> else) and we >>>>>> write a constant 0x1. >>>>>> Of course most other bits are clearly OSD related (alpha >>>>>> blending), >>>>>> i.e. they can have any value (incl. 0) if OSD is disabled. But >>>>>> here we >>>>>> enable it. I think there may be missing some setting for the >>>>>> other bits. >>>>>> So are you sure, that we can unconditionally reset *all* bits >>>>>> except JZ_LCD_OSDC_OSDEN for the jz4780? >>>>>> Well I have no experience with OSD being enabled at all. I.e. I >>>>>> have no >>>>>> test scenario. >> >> It turns out that the line >> >> ret = clk_prepare_enable(priv->lcd_clk); >> >> initializes JZ_REG_LCD_OSDC to 0x00010005 (i.e. printk tells 0x0 >> before). > > more detailled test shows that it is the underlying > > clk_enable(priv->lcd_clk) > > (i.e. not the prepare). >> >> and writing >> >> regmap_write(priv->map, JZ_REG_LCD_OSDC, JZ_LCD_OSDC_OSDEN); >> >> overwrites it with 0x00000001. >> >> This makes the HDMI monitor go/stay black until I write manually >> 0x5 to >> JZ_REG_LCD_OSDC. >> >> This means that JZ_LCD_OSDC_ALPHAEN must be enabled on jz4780 as >> well. >> Hence overwriting just with JZ_LCD_OSDC_OSDEN breaks it. >> >> Now the questions: >> a) 0x5 is understandable that it sets JZ_LCD_OSDC_ALPHAEN - but why >> is it needed? >> Is this a not well documented difference between jz4740/60/70/80? >> b) how can clk_prepare_enable() write 0x00010005 to >> JZ_REG_LCD_OSDC? Bug or feature? >> Something in cgu driver going wrong? > > I now suspect that it is an undocumented SoC feature. Not at all. If the clock is disabled, the LCD controller is disabled, so all the registers read zero, this makes sense. You can only read the registers when the clock is enabled. On some SoCs, reading disabled registers can even cause a complete lockup. Why is this JZ_LCD_OSDC_ALPHAEN bit needed now? I remember it working fine last time I tried, and now I indeed get a black screen unless this bit is set. The PM doesn't make it obvious that the bit is required, but that wouldn't be surprising. Anyway, feel free to send a patch to fix it (with a Fixes: tag). Ideally something like this: u32 osdc = 0; ... if (soc_info->has_osd) osdc |= JZ_LCD_OSDC_OSDEN; if (soc_info->has_alpha) osdc |= JZ_LCD_OSDC_ALPHAEN; regmap_write(priv->map, JZ_REG_LCD_OSDC, osdc); This also ensures that the OSDC register is properly initialized in the !has_osd case. The driver shouldn't rely on pre-boot values in the registers. Cheers, -Paul > >> c) what do your SoC or panels do if you write 0x5 to >> JZ_REG_LCD_OSDC? >> d) 0x00010005 also has bit 16 set which is undocumented... But this >> is a don't care >> according to jz4780 PM. > > BR and thanks, > Nikolaus >