Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 667ACC433FE for ; Fri, 19 Nov 2021 23:51:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236151AbhKSXy6 (ORCPT ); Fri, 19 Nov 2021 18:54:58 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45876 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234335AbhKSXy4 (ORCPT ); Fri, 19 Nov 2021 18:54:56 -0500 Received: from mail-pf1-x42f.google.com (mail-pf1-x42f.google.com [IPv6:2607:f8b0:4864:20::42f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5F192C061748 for ; Fri, 19 Nov 2021 15:51:54 -0800 (PST) Received: by mail-pf1-x42f.google.com with SMTP id g18so10618777pfk.5 for ; Fri, 19 Nov 2021 15:51:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gateworks-com.20210112.gappssmtp.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc; bh=BODgI+WH9LDVPfnVoZrz8d3kpc2ZwF9HgTMT9m1WMDQ=; b=6oYTnLaHwy9ijpC6lNTNV6Qkj2pZqSmjviJstsVZsZP0/+D50bGRVCOSNcnlrcLvw+ QAGdsMcr/2GxGj2l/vnyThoZA/kAPTn5SbqVqvzihWfmVGHn25aUwLc1xJ56lp5/r1gs FWqjp4e1lqvWB5XA2xe8CTiL7HltqlnWrQf7FGjhksEohu1BJ04N3OYL0Cm9IO+C6bOE K8+NnUheB0nFJRCcC0JAdX02mc+xgVC7A7uTQP8o2aJ5ljJpH751/Vw9JwX5tvvFTF6a RDNRdfg6YJTKJWiucUhEEDK8nCA5psGA1aNS53szgd3vHFfFH6COAlsB0mcbIUhbtSqk tIGQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc; bh=BODgI+WH9LDVPfnVoZrz8d3kpc2ZwF9HgTMT9m1WMDQ=; b=GmEJXwPhz1O6/Iz2eg0sECd4zCoIlXQeGJqfxRgPJbiYHvyLI6JSvGoP72rARzDybk 63f/Hg+BnYc3J0uXjDlFXKBHUz7ung7fWyBar5PPFUNv2l3Ze3RvdNgSPEQzGmoutTem 7LZm8+N9Fau4kixvGFx+lv6imBZdvMKafVQMR/gYsDmaiOYtdwoKj9bGsJmgVSQKKn1S 2l4SwPjIAFQvpyL/n1/ogW4Kw51e9qOHUUFERZ/oENjvzuOjhzfuFMg7Y2N6ovZdW3Gb eKnGAOBa0NvwFjPAfCvd3Q4bXNVHdgLnjNylXKsSxt+6Xg9dYZULkszlN+9NnyfsScri lz5g== X-Gm-Message-State: AOAM532ohV1fh+X9b4eO5kOQ1TD1+vNr9eIkM1eGwKUldZ4wUsj0F6Be 5S3AGui4nhjkLx2mcqLAYumDr/04kmdhuWg1QyMt1Q== X-Google-Smtp-Source: ABdhPJzMB8p8ddmaSy56jyawOAPXfj6DxYfYBB3H9qwDBj8andYHK6U8EliK1jklUWV3cYAdwsMq1nvEqhbR6YkBIqk= X-Received: by 2002:aa7:8149:0:b0:44c:916c:1fdb with SMTP id d9-20020aa78149000000b0044c916c1fdbmr26820650pfn.34.1637365913491; Fri, 19 Nov 2021 15:51:53 -0800 (PST) MIME-Version: 1.0 References: <20211106155427.753197-1-aford173@gmail.com> In-Reply-To: From: Tim Harvey Date: Fri, 19 Nov 2021 15:51:42 -0800 Message-ID: Subject: Re: [PATCH V2 1/5] soc: imx: imx8m-blk-ctrl: Fix imx8mm mipi reset To: Jagan Teki Cc: Adam Ford , Linux ARM Mailing List , Schrempf Frieder , linux-media , Laurent Pinchart , Adam Ford-BE , cstevens@beaconembedded.com, Rob Herring , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , Catalin Marinas , Will Deacon , Peng Fan , Lucas Stach , Device Tree Mailing List , open list , Marek Vasut Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thu, Nov 11, 2021 at 10:55 PM Jagan Teki wrote: > > On Sat, Nov 6, 2021 at 9:24 PM Adam Ford wrote: > > > > Most of the blk-ctrl reset bits are found in one register, however > > there are two bits in offset 8 for pulling the MIPI DPHY out of reset > > and these need to be set when IMX8MM_DISPBLK_PD_MIPI_CSI is brought > > out of reset or the MIPI_CSI hangs. > > > > Fixes: 926e57c065df ("soc: imx: imx8m-blk-ctrl: add DISP blk-ctrl") > > Signed-off-by: Adam Ford > > --- > > > > V2: Make a note that the extra register is only for Mini/Nano DISPLAY_BLK_CTRL > > Rename the new register to mipi_phy_rst_mask > > Encapsulate the edits to this register with an if-statement > > This is DPHY reset mask, not sure we can handle this via blk-ctrl. > Marek has similar patch to support this [1]. we need to phandle the > phy in host node in order to work this. > > However this current patch change seems directly handling dphy reset > which indeed fine me as well. > > > > > drivers/soc/imx/imx8m-blk-ctrl.c | 18 ++++++++++++++++++ > > 1 file changed, 18 insertions(+) > > > > diff --git a/drivers/soc/imx/imx8m-blk-ctrl.c b/drivers/soc/imx/imx8m-blk-ctrl.c > > index 519b3651d1d9..581eb4bc7f7d 100644 > > --- a/drivers/soc/imx/imx8m-blk-ctrl.c > > +++ b/drivers/soc/imx/imx8m-blk-ctrl.c > > @@ -17,6 +17,7 @@ > > > > #define BLK_SFT_RSTN 0x0 > > #define BLK_CLK_EN 0x4 > > +#define BLK_MIPI_RESET_DIV 0x8 /* Mini/Nano DISPLAY_BLK_CTRL only */ > > > > struct imx8m_blk_ctrl_domain; > > > > @@ -36,6 +37,15 @@ struct imx8m_blk_ctrl_domain_data { > > const char *gpc_name; > > u32 rst_mask; > > u32 clk_mask; > > + > > + /* > > + * i.MX8M Mini and Nano have a third DISPLAY_BLK_CTRL register > > + * which is used to control the reset for the MIPI Phy. > > + * Since it's only present in certain circumstances, > > + * an if-statement should be used before setting and clearing this > > + * register. > > + */ > > + u32 mipi_phy_rst_mask; > > May be dphy_rst_mask (above comment may not be required, as it > understand directly with commit message). > > > }; > > > > #define DOMAIN_MAX_CLKS 3 > > @@ -78,6 +88,8 @@ static int imx8m_blk_ctrl_power_on(struct generic_pm_domain *genpd) > > > > /* put devices into reset */ > > regmap_clear_bits(bc->regmap, BLK_SFT_RSTN, data->rst_mask); > > + if (data->mipi_phy_rst_mask) > > + regmap_clear_bits(bc->regmap, BLK_MIPI_RESET_DIV, data->mipi_phy_rst_mask); > > > > /* enable upstream and blk-ctrl clocks to allow reset to propagate */ > > ret = clk_bulk_prepare_enable(data->num_clks, domain->clks); > > @@ -99,6 +111,8 @@ static int imx8m_blk_ctrl_power_on(struct generic_pm_domain *genpd) > > > > /* release reset */ > > regmap_set_bits(bc->regmap, BLK_SFT_RSTN, data->rst_mask); > > + if (data->mipi_phy_rst_mask) > > + regmap_set_bits(bc->regmap, BLK_MIPI_RESET_DIV, data->mipi_phy_rst_mask); > > > > /* disable upstream clocks */ > > clk_bulk_disable_unprepare(data->num_clks, domain->clks); > > @@ -120,6 +134,9 @@ static int imx8m_blk_ctrl_power_off(struct generic_pm_domain *genpd) > > struct imx8m_blk_ctrl *bc = domain->bc; > > > > /* put devices into reset and disable clocks */ > > + if (data->mipi_phy_rst_mask) > > + regmap_clear_bits(bc->regmap, BLK_MIPI_RESET_DIV, data->mipi_phy_rst_mask); > > + > > regmap_clear_bits(bc->regmap, BLK_SFT_RSTN, data->rst_mask); > > regmap_clear_bits(bc->regmap, BLK_CLK_EN, data->clk_mask); > > > > @@ -488,6 +505,7 @@ static const struct imx8m_blk_ctrl_domain_data imx8mm_disp_blk_ctl_domain_data[] > > .gpc_name = "mipi-csi", > > .rst_mask = BIT(3) | BIT(4), > > .clk_mask = BIT(10) | BIT(11), > > + .mipi_phy_rst_mask = BIT(16) | BIT(17), > > DPHY has BIT(17) for Master reset and BIT(16) for Slave reset. I think > we just need master reset to enable. I've tested only BIT(17) on > mipi-dsi gpc and it is working. > Jagan, In my testing I had to use BIT(16) | BIT(17) in order to capture via CSI. Best regards, Tim