From patchwork Mon Jun 17 07:31:50 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jagan Teki X-Patchwork-Id: 608 Return-Path: X-Original-To: linux-amarula@patchwork.amarulasolutions.com Delivered-To: linux-amarula@patchwork.amarulasolutions.com Received: from mail-pg1-f199.google.com (mail-pg1-f199.google.com [209.85.215.199]) by ganimede.amarulasolutions.com (Postfix) with ESMTPS id B345E3F353 for ; Mon, 17 Jun 2019 09:38:26 +0200 (CEST) Received: by mail-pg1-f199.google.com with SMTP id k36sf7208697pgl.7 for ; Mon, 17 Jun 2019 00:38:26 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1560757105; cv=pass; d=google.com; s=arc-20160816; b=HFOkZ6dS4c0ThCim13mjBidCIUHwY3I5J6EtTxviQyl/zoroPnKdeuJZQ78OQ1+/kY Zv0b3LhfsvRLEmvLT3ig2fdnp0s4VZFn1U/xeBU8gqlIkEiCMF1kvvY+eV/AqyrsCD8W BV0ZvTdywTd2x28AzN9v9Ly+r1Bu3rFb8mj/RPPN6OtE/dZ9IsSdnkHsr+n8uISDMvGi e+W90CtsKhsacGinYuKjgBcychVmI9rAAC47qSjDCyxGBP5LgT6k6zM7Kgs7W48XTzGJ JKe8q9zJt4GgF9MqpbwlzGMgqZ+rBoboBVIUvDvRR9nytotpjqOwRr3eko8mbd05bSUm YXkA== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-unsubscribe:list-archive:list-help:list-post:list-id :mailing-list:precedence:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=hHvgS56O+750IBIb2kW3cCYYaZpb4rVHOQFv/dnlKWo=; b=GSLF9NuGm/cWi6Dv4+NoVSuSq+iDBx1im8tbVUkb1OS1alIW7jW0U2TJZUp+gF7/FQ ZYiAGGY4lOO2MoRKDwiVTXg3OxNtqNJiGN+7XSiy/UGD86UOCcayu84xx2AOCgJxCmkv LrLRiwgcxgorrdrfPIvQHWHgWb6ZJr20DucbJ0r6+Gs5AzDNG8oA1naf9+d7PlE6Ow06 WkGmovrjlbUACJixsKigqaXQgUy5B0TS5t/YpOyWYEilCI3zxu5r7OJ96LkJ33kqHEa1 7Pil23NhKP3dZWLagLmVyviHo4HYQubIMG0xA3IKZCB4rGUdva9B3eItYjtJkzFbAN02 RJQQ== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=qRix57kb; spf=pass (google.com: domain of jagan@amarulasolutions.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=jagan@amarulasolutions.com DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:x-original-sender:x-original-authentication-results :precedence:mailing-list:list-id:list-post:list-help:list-archive :list-unsubscribe; bh=hHvgS56O+750IBIb2kW3cCYYaZpb4rVHOQFv/dnlKWo=; b=d+L0v8Iyk60f+3quzvt/dDLizV18w9Gqs4N/Hr0Zc1a7Pn4vhzRGGR8uMCE+HVHj5v m7AvvYVHDhVZnHUVGExwuM+mEsMJmT8dx93HwcTCfoMR2bfYyaPErZxUDrihXkmPD2Pa vjnDx/DYlf92sGb14SWKkXSeiYK+o4Mtcs7OA= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:x-original-sender :x-original-authentication-results:precedence:mailing-list:list-id :x-spam-checked-in-group:list-post:list-help:list-archive :list-unsubscribe; bh=hHvgS56O+750IBIb2kW3cCYYaZpb4rVHOQFv/dnlKWo=; b=Yd6Bi7PVzzKZcoeRMhVSKgUIaQS2AsHm4fi7L9ny9MIY4dvFRBqiN8gXxBElefj+QZ ju1lyO7DUmLOEUrII08u9eVise6sMxt8wWIu8JC6PzA/89XXDLuLLEmZ2e9KTPA+4oRy we/PjO6+3lAIdSog19r4PpbhPbaWrFT6zIct6oKpdj+lVItwdri3KTcPKDUYULsIwzEi QmrfG4OVb/JSSC0XgPWLdXh2jnfmqYvR6nOoeFFYInA1HsFh90KCnE9s0ngbbo5rSp4w qEzWaRHdHdb+9iROG+B30gyn7foRge6wrTro+cFN93MF8dHkx7ODtC7m+9kU99Eg2oR+ yQJg== X-Gm-Message-State: APjAAAX3NieIHamgIljKKpPu5pihGVVkQXfOkCgGDjmUdtdI1dK0opIR 26zXs8/y3kc1Jwwbfb4PdA3H4psA X-Google-Smtp-Source: APXvYqzehZCZ+j59hLjKDnx4Gs9ALDGZO9Oourn7ck3PB+rNIFT77q/LCA3J/X0Y/9e4mfkYa27eYA== X-Received: by 2002:a62:1b85:: with SMTP id b127mr113243064pfb.165.1560757105494; Mon, 17 Jun 2019 00:38:25 -0700 (PDT) X-BeenThere: linux-amarula@amarulasolutions.com Received: by 2002:a62:ed0b:: with SMTP id u11ls181521pfh.15.gmail; Mon, 17 Jun 2019 00:38:25 -0700 (PDT) X-Received: by 2002:a62:a509:: with SMTP id v9mr111177254pfm.82.1560757105135; Mon, 17 Jun 2019 00:38:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1560757105; cv=none; d=google.com; s=arc-20160816; b=jXVX9vVgkS9s3l9fsKjFU/5WuVTWufog3vBcsniIbHIgDQakA80xN1a1ko9AhK4zVq QExUz3CY85AZO1JOkssbVRIbKtRYHcHVx7SYbcW1IIRw3ulFzMtZA3bWPZpJyvz+pRqg oLh1QZOT7lYndDMigTnuXNrOHqSkFyhQawToUmrX6jsDjlcBi65wvn6jHzZ1sDC2Q8y8 Dji7XxADy6yx5hr0+6YlkB7RTCZT4DJPYcM3KEVjbSyQ9zJaJ6gprLME+GPf4mj8GPXG qathMs2dQkhAR8/W+WpwKXqoUCq/tPdSq8+aAmb+MwJn1zSzsUdqJqwbA3lyljHaeKoI fKxg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:dkim-signature; bh=Xb2pOTLgQhBL1cgKGDlEAadOnQeynEPmgv+jvwrG8sA=; b=kKTDG7hd0J3znPN8abAFyAIHv+2tApOrbyiwnB7zTRDC8KwCLpuNDmpmVHiNxF1xXG UPG2yt4USOpDRVLxNIhm8cRiapFRVYIr3t0cwKAaO4s7d4mSuGCPuQdRv30UlzKqGnlk F5LhjmQYvxKGJJr9ikaLccK7g03cwJVfc3rXe+qpH+xOXLorrGQwXtB63WgaTvhY/vUG tMDPsxcMfO3dFjwNtp0l583QIMOSuekeXp5avkAP8rmeeAs9tm3sYKI+NzjherJml0Ks hDRvnphUPcpz1sCeN85PGO44LjeiJdKgZs8WsEyuixS4clUqQgbPODXYaV+z2c9aArQL wwGw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=qRix57kb; spf=pass (google.com: domain of jagan@amarulasolutions.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=jagan@amarulasolutions.com Received: from mail-sor-f65.google.com (mail-sor-f65.google.com. [209.85.220.65]) by mx.google.com with SMTPS id d37sor12711165pla.2.2019.06.17.00.38.25 for (Google Transport Security); Mon, 17 Jun 2019 00:38:25 -0700 (PDT) Received-SPF: pass (google.com: domain of jagan@amarulasolutions.com designates 209.85.220.65 as permitted sender) client-ip=209.85.220.65; X-Received: by 2002:a17:902:7c90:: with SMTP id y16mr17001663pll.238.1560757104846; Mon, 17 Jun 2019 00:38:24 -0700 (PDT) Received: from localhost.localdomain ([49.206.203.245]) by smtp.gmail.com with ESMTPSA id m41sm15205998pje.18.2019.06.17.00.38.21 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 17 Jun 2019 00:38:24 -0700 (PDT) From: Jagan Teki To: Simon Glass , Philipp Tomsich , Kever Yang , YouMin Chen , u-boot@lists.denx.de Cc: Manivannan Sadhasivam , gajjar04akash@gmail.com, linux-rockchip@lists.infradead.org, linux-amarula@amarulasolutions.com, Jagan Teki Subject: [PATCH v2 37/99] ram: rk3399: Add pctl start support Date: Mon, 17 Jun 2019 13:01:50 +0530 Message-Id: <20190617073252.27810-38-jagan@amarulasolutions.com> X-Mailer: git-send-email 2.18.0.321.gffc6fa0e3 In-Reply-To: <20190617073252.27810-1-jagan@amarulasolutions.com> References: <20190617073252.27810-1-jagan@amarulasolutions.com> MIME-Version: 1.0 X-Original-Sender: jagan@amarulasolutions.com X-Original-Authentication-Results: mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=qRix57kb; spf=pass (google.com: domain of jagan@amarulasolutions.com designates 209.85.220.65 as permitted sender) smtp.mailfrom=jagan@amarulasolutions.com Content-Type: text/plain; charset="UTF-8" Precedence: list Mailing-list: list linux-amarula@amarulasolutions.com; contact linux-amarula+owners@amarulasolutions.com List-ID: X-Spam-Checked-In-Group: linux-amarula@amarulasolutions.com X-Google-Group-Id: 476853432473 List-Post: , List-Help: , List-Archive: List-Unsubscribe: , Add support for pctl start for both channel 0, 1 control and phy registers. This would also handle pwrup_srefresh_exit init based on the channel number. Signed-off-by: Jagan Teki Signed-off-by: YouMin Chen --- drivers/ram/rockchip/sdram_rk3399.c | 75 +++++++++++++++++++++-------- 1 file changed, 55 insertions(+), 20 deletions(-) diff --git a/drivers/ram/rockchip/sdram_rk3399.c b/drivers/ram/rockchip/sdram_rk3399.c index 1362a5bf2d..6c3a2b5453 100644 --- a/drivers/ram/rockchip/sdram_rk3399.c +++ b/drivers/ram/rockchip/sdram_rk3399.c @@ -49,10 +49,11 @@ struct chan_info { struct dram_info { #if defined(CONFIG_TPL_BUILD) || \ (!defined(CONFIG_TPL) && defined(CONFIG_SPL_BUILD)) - u32 pwrup_srefresh_exit; + u32 pwrup_srefresh_exit[2]; struct chan_info chan[2]; struct clk ddr_clk; struct rk3399_cru *cru; + struct rk3399_grf_regs *grf; struct rk3399_pmucru *pmucru; struct rk3399_pmusgrf_regs *pmusgrf; struct rk3399_ddr_cic_regs *cic; @@ -73,6 +74,11 @@ struct rockchip_dmc_plat { struct regmap *map; }; +static void *get_ddrc0_con(struct dram_info *dram, u8 channel) +{ + return (channel == 0) ? &dram->grf->ddrc0_con0 : &dram->grf->ddrc0_con1; +} + static void copy_to_reg(u32 *dest, const u32 *src, u32 n) { int i; @@ -327,6 +333,48 @@ static void set_ds_odt(const struct chan_info *chan, clrsetbits_le32(&denali_phy[930], 0x1 << 17, reg_value); } +static void pctl_start(struct dram_info *dram, u8 channel) +{ + const struct chan_info *chan = &dram->chan[channel]; + u32 *denali_ctl = chan->pctl->denali_ctl; + u32 *denali_phy = chan->publ->denali_phy; + u32 *ddrc0_con = get_ddrc0_con(dram, channel); + u32 count = 0; + u32 byte, tmp; + + writel(0x01000000, &ddrc0_con); + + clrsetbits_le32(&denali_phy[957], 0x3 << 24, 0x2 << 24); + + while (!(readl(&denali_ctl[203]) & (1 << 3))) { + if (count > 1000) { + printf("%s: Failed to init pctl for channel %d\n", + __func__, channel); + while (1) + ; + } + + udelay(1); + count++; + } + + writel(0x01000100, &ddrc0_con); + + for (byte = 0; byte < 4; byte++) { + tmp = 0x820; + writel((tmp << 16) | tmp, &denali_phy[53 + (128 * byte)]); + writel((tmp << 16) | tmp, &denali_phy[54 + (128 * byte)]); + writel((tmp << 16) | tmp, &denali_phy[55 + (128 * byte)]); + writel((tmp << 16) | tmp, &denali_phy[56 + (128 * byte)]); + writel((tmp << 16) | tmp, &denali_phy[57 + (128 * byte)]); + + clrsetbits_le32(&denali_phy[58 + (128 * byte)], 0xffff, tmp); + } + + clrsetbits_le32(&denali_ctl[68], PWRUP_SREFRESH_EXIT, + dram->pwrup_srefresh_exit[channel]); +} + static int phy_io_config(const struct chan_info *chan, const struct rk3399_sdram_params *params) { @@ -497,7 +545,6 @@ static int pctl_cfg(struct dram_info *dram, const struct chan_info *chan, const u32 *params_phy = params->phy_regs.denali_phy; u32 tmp, tmp1, tmp2; int ret; - const ulong timeout_ms = 200; /* * work around controller bug: @@ -515,8 +562,8 @@ static int pctl_cfg(struct dram_info *dram, const struct chan_info *chan, writel(params->phy_regs.denali_phy[911], &denali_phy[911]); writel(params->phy_regs.denali_phy[912], &denali_phy[912]); - dram->pwrup_srefresh_exit = readl(&denali_ctl[68]) & - PWRUP_SREFRESH_EXIT; + dram->pwrup_srefresh_exit[channel] = readl(&denali_ctl[68]) & + PWRUP_SREFRESH_EXIT; clrbits_le32(&denali_ctl[68], PWRUP_SREFRESH_EXIT); /* PHY_DLL_RST_EN */ @@ -577,22 +624,6 @@ static int pctl_cfg(struct dram_info *dram, const struct chan_info *chan, if (ret) return ret; - /* PHY_DLL_RST_EN */ - clrsetbits_le32(&denali_phy[957], 0x3 << 24, 0x2 << 24); - - /* Waiting for PHY and DRAM init complete */ - tmp = get_timer(0); - do { - if (get_timer(tmp) > timeout_ms) { - pr_err("DRAM (%s): phy failed to lock within %ld ms\n", - __func__, timeout_ms); - return -ETIME; - } - } while (!(readl(&denali_ctl[203]) & (1 << 3))); - debug("DRAM (%s): phy locked after %ld ms\n", __func__, get_timer(tmp)); - - clrsetbits_le32(&denali_ctl[68], PWRUP_SREFRESH_EXIT, - dram->pwrup_srefresh_exit); return 0; } @@ -1182,6 +1213,9 @@ static int sdram_init(struct dram_info *dram, return ret; } + /* start to trigger initialization */ + pctl_start(dram, channel); + /* LPDDR2/LPDDR3 need to wait DAI complete, max 10us */ if (dramtype == LPDDR3) udelay(10); @@ -1258,6 +1292,7 @@ static int rk3399_dmc_init(struct udevice *dev) #endif priv->cic = syscon_get_first_range(ROCKCHIP_SYSCON_CIC); + priv->grf = syscon_get_first_range(ROCKCHIP_SYSCON_GRF); priv->pmugrf = syscon_get_first_range(ROCKCHIP_SYSCON_PMUGRF); priv->pmusgrf = syscon_get_first_range(ROCKCHIP_SYSCON_PMUSGRF); priv->pmucru = rockchip_get_pmucru();