From patchwork Mon Jun 17 07:32:34 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jagan Teki X-Patchwork-Id: 652 Return-Path: X-Original-To: linux-amarula@patchwork.amarulasolutions.com Delivered-To: linux-amarula@patchwork.amarulasolutions.com Received: from mail-pf1-f197.google.com (mail-pf1-f197.google.com [209.85.210.197]) by ganimede.amarulasolutions.com (Postfix) with ESMTPS id CB31B3F353 for ; Mon, 17 Jun 2019 09:40:51 +0200 (CEST) Received: by mail-pf1-f197.google.com with SMTP id i2sf6578877pfe.1 for ; Mon, 17 Jun 2019 00:40:51 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1560757250; cv=pass; d=google.com; s=arc-20160816; b=ERXEz1YEHPvVk6Y+nqPoakEXW7k4MN2MxikhdCO0AhF4ex3FEvCJeIkIUMvF/aOsww BIBeVicLhVms7/xNlAvrX8G7u64/1jIgKqsqal5Ta6XFViKtccj3rXJ6+VvqPlj/B0X/ Rwsy12u1uPQrJzoEubjBCXCE46WjtqhjTIKl4DuUdbT+RNxgHurxxul3fg9MYaG9iLqI dPkPeYQIKwxGZqkqq5BRpti9UAn1aiMfWzWyYCa5fdUl3YDp6X1ZURIqVdUYCJAe4ycK wYKFPu/VoAZrl6bCO5Tg8MgW8M2kM4BeTgFpx5TPGcGCLvH2On3z9w5SvEWhpJPCSwjL pE+g== 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=1TqTbKETMLs38tBmd/AqncGBypYdOb9qP6pkz2bYDVA=; b=yNShnRxa8UD9Ldnmz20iIv7trzMYBPx1rXQs+r2U9ZvLEyo0ZsCJq7H31Y4K/MWKhC 8ToCux832XTS/mgt0uOKevDyd+6ugTG/1fDpfimeT7GDHisyzsFQyHxXXySYwLF6qXvM Hf3a+Bbnq1iqzAXBCv5GRMi0n/HzVShed9kjOg9Ybc6QilL5gO2sDrNqgvl0PFsfnn9v Tb6+KLSrk0boHheT1A+IoYqIpBteKZNmNsX4mejRLO1iy+KG+wwiJrTghuT27lY7CnR9 uX94Z51LvJRpLEtt3aZRznMFA4Rb5WHooZT+XSHHWKk/rsWOtlqRu/tj/12b3D3i6zUd ACqg== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=d7ng15FL; 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=1TqTbKETMLs38tBmd/AqncGBypYdOb9qP6pkz2bYDVA=; b=ii3DxlJfv/edr1FHtFOXDFOO19HdlbiZJWKwbrZT6sKP8oipPn3TJL2j4I27s/oLc0 BaOkaxsrXJ1cfqL3lJTC1fuz2yiBRP36Z9DvfsMJ5X2n2e6Q2pg5j4mzW4e5NOb+JOTD 0j79KR0WGYQwQOIYPvTN25sLunzGzhl+iSm6w= 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=1TqTbKETMLs38tBmd/AqncGBypYdOb9qP6pkz2bYDVA=; b=aSn7Y7uEAViqv0hiOTPJ5l4DxdumT0ls+iFItlqyRPFLaWuec+1fpi6JYk63eU/EQK SEgB8G7a9S8gqlxSyJUPAkpEWuOYAVraFzkI6MUwOV5F86wgTwfSiGTUNBTlW8M2dGLL EsCbEcg52iOsW1OyBeiNtHUVLULKEzZg1bZlv2Fr/k68YQ7trhSCZ43EbFpC0SnZt/rs CAKe6Cp3fXmxGinM5RHQtaGdvv8r6xic/pS4agQgwECdXLRYpK52t8cLgbtb/Czb2O0/ UUoiBX8R8pxlSQUQHsAvZN6rQj0zM/pvjeOwtcpXelFZUnCIhMjqcmCxF7uOENnRntdR 2/9Q== X-Gm-Message-State: APjAAAUbqk1N24GMuDCzvXyeOYOKPAmsRtVjqwerj9wNk4PMUnj4cEDV pMDan2J/WClr+nrx/xIR09Bdh4c6 X-Google-Smtp-Source: APXvYqxYj7gTBY/Wr7uzQxGPTjw+aArVi2tg9E4gJnsZtnRBbtXybP9V+O9MuyV9LdgUMbrVYjdqjw== X-Received: by 2002:a62:e518:: with SMTP id n24mr56588255pff.102.1560757250629; Mon, 17 Jun 2019 00:40:50 -0700 (PDT) X-BeenThere: linux-amarula@amarulasolutions.com Received: by 2002:a17:902:760d:: with SMTP id k13ls3750398pll.14.gmail; Mon, 17 Jun 2019 00:40:50 -0700 (PDT) X-Received: by 2002:a17:90a:2525:: with SMTP id j34mr21070317pje.11.1560757250350; Mon, 17 Jun 2019 00:40:50 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1560757250; cv=none; d=google.com; s=arc-20160816; b=DbJVWQkz8QR/uxPMA6GeS+z83S1AR7SbzTOnFQW2vlqvsIBSlDjq/gizrWNS/YF21D N1nr9HaRQBpFYm6kddAmjqXuQNpt5iOWSR+dmjfX7d0ZwUFTD4Eb1e7ySsi4ZtrHTkVZ maDQvftbObLaKhDqqEh3oyNgl+T2bZ32HQXuiV+KDr0buBrGGOiE5QCGkfJVID0HqJZ5 ZttpKlVxZKJS0cI3s3ZdJjMOE44uJw934SQ1IhlLFRT+5lFx+gZ8cH80hUaapb7lmXIF FVpmDsXk3aKYekXT6zXBOzmoU6tcrnyV1xh1oPlijKDKd66wTtdNXrhMJvwvz1ftsw18 WMqA== 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=5ZvAC+l3x0po8psNwv8zcgjebp2Xr4SvK0wKkKf1BIo=; b=x3Qc5M8VePKC9GuNluMqRXvG3X2azqgWmb3aA+Cq/1KfP6xDyz9/2phzTETJpGP+DB o72yPYklc3moh8U7/WFilsBZ2nXiPPZsSX8JI/8QmYGiRstmA25u9bIvP4gjske4Zhsg qO9F7y0ga6PYd6BEabloO7uuPD4LLTHSEqNGA8GmtJn+7ohpOxPPK8Dt2Jhhsn2a5nTh tdJXHLyNUw8sI5IcSdH3PRQlXMLZTr+qncICZxeFIFrHm4EMUOzcODaFzt0akKIa2Lo/ I1uHTbYTkS40sL9Swm/Cd0dVX5ojNubOjR0d0PRTsMEhE/iHNqmIpR5XBnX3CzhLXlD7 HlYw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=d7ng15FL; 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 a21sor10371248pgh.0.2019.06.17.00.40.50 for (Google Transport Security); Mon, 17 Jun 2019 00:40:50 -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:a65:4c44:: with SMTP id l4mr3158197pgr.62.1560757249930; Mon, 17 Jun 2019 00:40:49 -0700 (PDT) Received: from localhost.localdomain ([49.206.203.245]) by smtp.gmail.com with ESMTPSA id m41sm15205998pje.18.2019.06.17.00.40.47 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 17 Jun 2019 00:40:49 -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 81/99] ram: rk3399: Handle data training via ops Date: Mon, 17 Jun 2019 13:02:34 +0530 Message-Id: <20190617073252.27810-82-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=d7ng15FL; 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: , data training can be even required for lpddr4 and we need to keep the lpddr4 code to compile only for relevant boards which do support lpddr4. For this requirement, and for code readability handle data training via sdram_rk3399_ops and same will update in future while supporting lpddr4 code. Signed-off-by: Jagan Teki --- drivers/ram/rockchip/sdram_rk3399.c | 43 ++++++++++++++++++++++------- 1 file changed, 33 insertions(+), 10 deletions(-) diff --git a/drivers/ram/rockchip/sdram_rk3399.c b/drivers/ram/rockchip/sdram_rk3399.c index 927c7cced3..e2b311193d 100644 --- a/drivers/ram/rockchip/sdram_rk3399.c +++ b/drivers/ram/rockchip/sdram_rk3399.c @@ -65,11 +65,17 @@ struct dram_info { struct rk3399_pmucru *pmucru; struct rk3399_pmusgrf_regs *pmusgrf; struct rk3399_ddr_cic_regs *cic; + const struct sdram_rk3399_ops *ops; #endif struct ram_info info; struct rk3399_pmugrf_regs *pmugrf; }; +struct sdram_rk3399_ops { + int (*data_training)(struct dram_info *dram, u32 channel, u8 rank, + struct rk3399_sdram_params *sdram); +}; + #if defined(CONFIG_TPL_BUILD) || \ (!defined(CONFIG_TPL) && defined(CONFIG_SPL_BUILD)) @@ -1465,6 +1471,23 @@ static void dram_all_config(struct dram_info *dram, clrsetbits_le32(&dram->cru->glb_rst_con, 0x3, 0x3); } +static int default_data_training(struct dram_info *dram, u32 channel, u8 rank, + struct rk3399_sdram_params *params) +{ + u8 training_flag = PI_READ_GATE_TRAINING; + + /* + * LPDDR3 CA training msut be trigger before + * other training. + * DDR3 is not have CA training. + */ + + if (params->base.dramtype == LPDDR3) + training_flag |= PI_CA_TRAINING; + + return data_training(dram, channel, params, training_flag); +} + static int switch_to_phy_index1(struct dram_info *dram, const struct rk3399_sdram_params *params) { @@ -1627,7 +1650,6 @@ static int sdram_init(struct dram_info *dram, { unsigned char dramtype = params->base.dramtype; unsigned int ddr_freq = params->base.ddr_freq; - u32 training_flag = PI_READ_GATE_TRAINING; int channel, ch, rank; int ret; @@ -1655,16 +1677,12 @@ static int sdram_init(struct dram_info *dram, params->ch[ch].cap_info.rank = rank; - /* - * LPDDR3 CA training msut be trigger before - * other training. - * DDR3 is not have CA training. - */ - if (params->base.dramtype == LPDDR3) - training_flag |= PI_CA_TRAINING; - - if (!(data_training(dram, ch, params, training_flag))) + ret = dram->ops->data_training(dram, ch, rank, params); + if (!ret) { + debug("%s: data trained for rank %d, ch %d\n", + __func__, rank, ch); break; + } } /* Computed rank with associated channel number */ params->ch[ch].cap_info.rank = rank; @@ -1744,6 +1762,10 @@ static int conv_of_platdata(struct udevice *dev) } #endif +static const struct sdram_rk3399_ops rk3399_ops = { + .data_training = default_data_training, +}; + static int rk3399_dmc_init(struct udevice *dev) { struct dram_info *priv = dev_get_priv(dev); @@ -1761,6 +1783,7 @@ static int rk3399_dmc_init(struct udevice *dev) return ret; #endif + priv->ops = &rk3399_ops; 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);