From patchwork Mon Jun 17 07:32:02 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jagan Teki X-Patchwork-Id: 620 Return-Path: X-Original-To: linux-amarula@patchwork.amarulasolutions.com Delivered-To: linux-amarula@patchwork.amarulasolutions.com Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by ganimede.amarulasolutions.com (Postfix) with ESMTPS id 832B73F353 for ; Mon, 17 Jun 2019 09:39:06 +0200 (CEST) Received: by mail-pl1-f198.google.com with SMTP id i33sf5514004pld.15 for ; Mon, 17 Jun 2019 00:39:06 -0700 (PDT) ARC-Seal: i=2; a=rsa-sha256; t=1560757145; cv=pass; d=google.com; s=arc-20160816; b=FZv231VJRj60BbP+NUDj1j1NLE+Id10gvYpXLmaun13ODqYbUsx5eMIxs94AJkztwH Nry1tWdnJN/V73DnHQSBVHpzFxKZj/gjElps/c1OrLMDQmyLrlClt2FCveAWCi6ywAIL ugp9QrCq80zILZoHSWjz5wVMTPXyjqQ2Q6zau8B8xzxF6Lq/lmDMOQKqApnKYQmIN75j bsZ6NWiHfkBrpbVNOM2LWmRaB/pgp+7VtVmK5LV7W+W2UeQY4Qg4ueogFyFQFX2w/zsA h6+jDgghiLjTh3EhpzU1gnuwPqKushnLWVOSl5zgo3T9ftU0bD8jt4RwtFcozdyjpLDM 3+aQ== 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=fKzLjFOwCbp/pGBNK5kbkID/lcih5M0SkCtWLorwOBQ=; b=N0ISW6T23hAcHCYqpc/aTs2AxpBJxtipVE9YvhyNUFSLjBr4oucFxUNAbGEgkavBX9 z0EM5gcY/l5m5RM5D69z24rDyg5VDcFmPlMs5ZrCJvwep5rpvduFu2P+2lZOSYc41Fqq rwH2vS4DbYbpWBOIurK8XsTRKYZV9J3K5c/ZbLTZI6ZOnNgyHyrZPYyWTSmC81eB6og2 jmm2zvp7W139+g8bEx61qGzruZBPSjGinR6Zr4VUFPzmc+Czjwqqkbh3pJfyxeffONjm Qip70PMNxfrQIgYWTB8W5YJW0hNhOpzHDwujECnyjzjPEPCWL1MrgJzG+VySIUbcJ+NQ IgwQ== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=RKK0qGla; 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=fKzLjFOwCbp/pGBNK5kbkID/lcih5M0SkCtWLorwOBQ=; b=rQknAnDmCk/FC8jrB6woCxBlHno5UXWdHo1SDCSx7Dmb7tD2f7ymShoiW2aRRkQlMl 2HgxN4rNFs2s/mBHolfoGGf3fqGRv8FOL0t8LaGyhnqLutjl7J+cpsTYWYfHAe/uhvjh 5jNm8t79ZcDv3DySX++C6M1WXoWdpF8MvioHw= 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=fKzLjFOwCbp/pGBNK5kbkID/lcih5M0SkCtWLorwOBQ=; b=otVfB59WlNute+XBV/WJ1cnTO5RuvMyraxqYQ8ZnUmgM5QtM0SAvI9Bcf/8K6fjUz1 bm0XyI9V/xX62lQqY/4DUfAX7ZzvrsS2vjKuGzBxOoj0Pn+NJbs1YWvS33ec3W1AxBsi MK4JXj4Y/h2b1RyMfUPBL4KRWtLDoWCBLRvtrbyQMJfHjBmfFRbCpe0807tjUC8iclBT g71mNyxOka13Bmgd+NAgDKKRXs0BD8LoNTJFjxNhEJ7MDuLGUVb77MhCYmmYIk/lRjiR K8odwV76tGxD8T0q0iAYunlCG0T5uf/CM1Xzjs6wuI7Xl9bqpGF8t/JqPOSO4y++4JGR tgvw== X-Gm-Message-State: APjAAAU/30HLjuOLMu9mj5tSwI6P8BWF7ieYrmEjHHNdUqsx4zXA0AWj 7Q7m1JqX/i+5DUw9yzagl3KcTISe X-Google-Smtp-Source: APXvYqxytXY8TofhQm1tkmClrCYaX/Y/VRIw0sRuhkW90EjyJYVKmYBHlXzkMzmVQaPYwUPFGFU9tw== X-Received: by 2002:a17:90a:1ac5:: with SMTP id p63mr24412993pjp.25.1560757145365; Mon, 17 Jun 2019 00:39:05 -0700 (PDT) X-BeenThere: linux-amarula@amarulasolutions.com Received: by 2002:a17:902:bd8b:: with SMTP id q11ls3753992pls.4.gmail; Mon, 17 Jun 2019 00:39:05 -0700 (PDT) X-Received: by 2002:a17:902:7043:: with SMTP id h3mr47041835plt.10.1560757145049; Mon, 17 Jun 2019 00:39:05 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1560757145; cv=none; d=google.com; s=arc-20160816; b=Bj2cukXZDO1Pdq8Ih6qxFz+VxRDAOpLcN66xHL1fBubZ5Nc2Ca6A1IaHfYLkCYYUYM 4DiytvoYssGnIPtOxMZbq+yTMqgAEXBwRoaixxlSCAlLsdMPoGLDUbT37foo00q7SbrK caNrH+vLmFNmgA7XEetoDdb55MFZmNnhw1cta4dPOfdiJ/xk8KQDMONX/99sYFxawqvf DmPkOh22A97FcgkL1fLXQJqRFWgdA6LAwvWTADks8q0hnnaYaIDBxxnB2jakORZbUh7o b5XuPk93yBTVQ9U5oE+aYhnsAl+r35L2RMfSrfJJEZQ+yaVZglh0Qs3LMOyLvcVPD4xy TNOw== 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=RBCV64wyEGkRjSj+SOeXha5NbkhBngESdnqw+b6RGoY=; b=UaFTJEcVqg4vXd80X+JyoX81YZbz9+HIepHaK1P9K9PdO26vOytN4VftKHaD2mQ++7 wWhxD6JDQpGPzbKO9129b/uge+GMHifN7giopTPCLFN87FVvrJUpTYMjTHzGkpjwqrBM vkN0um8+YfCZ9GFOm8ieChAac5qXR50QNoUBvlrGvICURWtQGXoI8H0SDe3ShYohWmnL DehQXBknCPJowuZ7Q0mr3b7YrVdQmrxabU6829dcSgqSJR96INdJey13wiUoJs59IW1t xnLogcsXuPVBNBIHVZEaE5gb3KcWisLc91GJ2lnMUK0beYXbswVPk+kfRg77Hax82EUt oE1g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@amarulasolutions.com header.s=google header.b=RKK0qGla; 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 p13sor10305760pgd.38.2019.06.17.00.39.05 for (Google Transport Security); Mon, 17 Jun 2019 00:39:05 -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:a63:68c5:: with SMTP id d188mr48898815pgc.429.1560757144661; Mon, 17 Jun 2019 00:39:04 -0700 (PDT) Received: from localhost.localdomain ([49.206.203.245]) by smtp.gmail.com with ESMTPSA id m41sm15205998pje.18.2019.06.17.00.39.01 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Mon, 17 Jun 2019 00:39:04 -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 49/99] ram: rk3399: Compute stride for 2 channels Date: Mon, 17 Jun 2019 13:02:02 +0530 Message-Id: <20190617073252.27810-50-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=RKK0qGla; 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: , stride value from sdram timings can be computed dynamically based on the determined capacity for the given channel. Right now these stride values are taken as part of sdram timings via dtsi, but it possible to use same timings dtsi for given frequency even though the configured board sdram do support single channel with different size by dynamically detect the stride value. Example, NanoPi NEO4 do have DDR3-1866, but with single channel and 1GB size with dynamic stride detection it is possible to use existing rk3399-sdram-ddr3-1866.dtsi whose stride, number of channels and capacity it support is d efferent. So, add initial support to calculate the stride value for 2 channels sdram, which is available by default on existing boards. Signed-off-by: Jagan Teki Signed-off-by: YouMin Chen --- drivers/ram/rockchip/sdram_rk3399.c | 71 ++++++++++++++++++++++++++++- 1 file changed, 70 insertions(+), 1 deletion(-) diff --git a/drivers/ram/rockchip/sdram_rk3399.c b/drivers/ram/rockchip/sdram_rk3399.c index 231f69b173..75df469952 100644 --- a/drivers/ram/rockchip/sdram_rk3399.c +++ b/drivers/ram/rockchip/sdram_rk3399.c @@ -1180,8 +1180,75 @@ static int switch_to_phy_index1(struct dram_info *dram, return 0; } +static unsigned char calculate_stride(struct rk3399_sdram_params *params) +{ + unsigned int stride = params->base.stride; + unsigned int channel, chinfo = 0; + unsigned int ch_cap[2] = {0, 0}; + u64 cap; + + for (channel = 0; channel < 2; channel++) { + unsigned int cs0_cap = 0; + unsigned int cs1_cap = 0; + struct sdram_cap_info *cap_info = ¶ms->ch[channel].cap_info; + + if (cap_info->col == 0) + continue; + + cs0_cap = (1 << (cap_info->cs0_row + cap_info->col + + cap_info->bk + cap_info->bw - 20)); + if (cap_info->rank > 1) + cs1_cap = cs0_cap >> (cap_info->cs0_row + - cap_info->cs1_row); + if (cap_info->row_3_4) { + cs0_cap = cs0_cap * 3 / 4; + cs1_cap = cs1_cap * 3 / 4; + } + ch_cap[channel] = cs0_cap + cs1_cap; + chinfo |= 1 << channel; + } + + /* stride calculation for 2 channels, default gstride type is 256B */ + if (ch_cap[0] == ch_cap[1]) { + cap = ch_cap[0] + ch_cap[1]; + switch (cap) { + /* 512MB */ + case 512: + stride = 0; + break; + /* 1GB */ + case 1024: + stride = 0x5; + break; + /* + * 768MB + 768MB same as total 2GB memory + * useful space: 0-768MB 1GB-1792MB + */ + case 1536: + /* 2GB */ + case 2048: + stride = 0x9; + break; + /* 1536MB + 1536MB */ + case 3072: + stride = 0x11; + break; + /* 4GB */ + case 4096: + stride = 0xD; + break; + default: + printf("%s: Unable to calculate stride for ", __func__); + print_size((cap * (1 << 20)), " capacity\n"); + break; + } + } + + return stride; +} + static int sdram_init(struct dram_info *dram, - const struct rk3399_sdram_params *params) + struct rk3399_sdram_params *params) { unsigned char dramtype = params->base.dramtype; unsigned int ddr_freq = params->base.ddr_freq; @@ -1229,6 +1296,8 @@ static int sdram_init(struct dram_info *dram, set_ddrconfig(chan, params, channel, params->ch[channel].cap_info.ddrconfig); } + + params->base.stride = calculate_stride(params); dram_all_config(dram, params); switch_to_phy_index1(dram, params);