public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Marek Vasut <marex@denx.de>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v7 2/7] mips: ath79: add support for AR933x SOCs
Date: Sat, 16 Jan 2016 20:31:38 +0100	[thread overview]
Message-ID: <201601162031.38563.marex@denx.de> (raw)
In-Reply-To: <BLU436-SMTP89047880CC5D693E5FDE56FFCE0@phx.gbl>

On Saturday, January 16, 2016 at 07:13:48 PM, Wills Wang wrote:
> This patch enable work for ar933x SOC.

And it adds DDR code and clock code ... which is missing from the commit 
message.

> Signed-off-by: Wills Wang <wills.wang@live.com>
> ---

[...]

> +void ddr_init(void)
> +{
> +	void __iomem *regs;
> +	u32 val;
> +
> +	regs = map_physmem(AR71XX_DDR_CTRL_BASE, AR71XX_DDR_CTRL_SIZE,
> +			   MAP_NOCACHE);
> +
> +	writel(DDR_CONF_REG_VAL, regs + AR71XX_DDR_REG_CONFIG);
> +	writel(DDR_CONF2_REG_VAL, regs + AR71XX_DDR_REG_CONFIG2);
> +
> +	val = get_bootstrap();
> +	if (val & AR933X_BOOTSTRAP_DDR2) {
> +		/* AHB maximum timeout */
> +		writel(0xfffff, regs + AR933X_DDR_REG_TIMEOUT_MAX);
> +
> +		/* Enable DDR2 */
> +		writel(DDR2_CONF_VAL, regs + AR933X_DDR_REG_DDR2_CONFIG);
> +
> +		/* Precharge All */
> +		writel(DDR_CTRL_PRECHARGE, regs + AR71XX_DDR_REG_CONTROL);
> +
> +		/* Disable High Temperature Self-Refresh, Full Array */
> +		writel(0x00, regs + AR933X_DDR_REG_EMR2);
> +		/* Extended Mode Register 2 Set (EMR2S) */
> +		writel(DDR_CTRL_UPD_EMR2S, regs + AR71XX_DDR_REG_CONTROL);
> +
> +		writel(0x00, regs + AR933X_DDR_REG_EMR3);
> +		/* Extended Mode Register 3 Set (EMR3S) */
> +		writel(DDR_CTRL_UPD_EMR3S, regs + AR71XX_DDR_REG_CONTROL);
> +
> +		/* Enable DLL,  Full strength, ODT Disabled */
> +		writel(0x00, regs + AR71XX_DDR_REG_EMR);
> +		/* Extended Mode Register Set (EMRS) */
> +		writel(DDR_CTRL_UPD_EMRS, regs + AR71XX_DDR_REG_CONTROL);
> +
> +		/* Reset DLL */
> +		writel(DDR2_MODE_DLL_VAL, regs + AR71XX_DDR_REG_MODE);
> +		/* Mode Register Set (MRS) */
> +		writel(DDR_CTRL_UPD_MRS, regs + AR71XX_DDR_REG_CONTROL);

Make sure that there is at least a newline before comment, to improve the
readability of the code.

> +		/* Precharge All */
> +		writel(DDR_CTRL_PRECHARGE, regs + AR71XX_DDR_REG_CONTROL);
> +
> +		/* Auto Refresh */
> +		writel(DDR_CTRL_AUTO_REFRESH, regs + AR71XX_DDR_REG_CONTROL);
> +		writel(DDR_CTRL_AUTO_REFRESH, regs + AR71XX_DDR_REG_CONTROL);
> +
> +		/* Write recovery (WR) 6 clock, CAS Latency 3,
> +		 * Burst Length 8 */

Fix the multiline comments please.

> +		writel(DDR2_MODE_VAL, regs + AR71XX_DDR_REG_MODE);
> +		/* Mode Register Set (MRS) */
> +		writel(DDR_CTRL_UPD_MRS, regs + AR71XX_DDR_REG_CONTROL);
> +
> +		/* Enable OCD defaults, Enable DLL,
> +		 * Reduced Drive Strength */
> +		writel(DDR2_EXT_MODE_OCD_VAL, regs + AR71XX_DDR_REG_EMR);
> +		/* Extended Mode Register Set (EMRS) */
> +		writel(DDR_CTRL_UPD_EMRS, regs + AR71XX_DDR_REG_CONTROL);

[...]

> +void ddr_tap_tuning(void)
> +{
> +	void __iomem *regs;
> +	u32 *addr_k0, *addr_k1, *addr;
> +	u32 val, tap, upper, lower;
> +	int i, j, dir, err, done;
> +
> +	regs = map_physmem(AR71XX_DDR_CTRL_BASE, AR71XX_DDR_CTRL_SIZE,
> +			   MAP_NOCACHE);

Explanation of this code would be great. To an external reviewer, this
is entirely inobvious.

> +	addr = (void *)CKSEG0ADDR(0x2000);
> +	for (i = 0; i < 256; i++) {
> +		val = 0;
> +		for (j = 0; j < 8; j++) {
> +			if (i & (1 << j)) {
> +				if (j % 2)
> +					val |= 0xffff0000;
> +				else
> +					val |= 0x0000ffff;
> +			}
> +
> +			if (j % 2) {
> +				*addr++ = val;
> +				val = 0;
> +			}
> +		}
> +	}
> +
> +	err = 0;
> +	done = 0;
> +	dir = 1;
> +	tap = readl(regs + AR71XX_DDR_REG_TAP_CTRL0);
> +	val = tap;
> +	while (!done) {
> +		err = 0;
> +		writel(val, regs + AR71XX_DDR_REG_TAP_CTRL0);
> +		writel(val, regs + AR71XX_DDR_REG_TAP_CTRL1);
> +		for (i = 0; i < 2; i++) {
> +			addr_k1 = (void *)CKSEG1ADDR(0x2000);
> +			addr_k0 = (void *)CKSEG0ADDR(0x2000);
> +			addr = (void *)CKSEG0ADDR(0x3000);
> +
> +			while (addr_k0 < addr) {
> +				if (*addr_k1++ != *addr_k0++) {
> +					err = 1;
> +					break;
> +				}
> +			}
> +
> +			if (err)
> +				break;
> +		}
> +
> +		if (err) {
> +			if (dir) {
> +				dir = 0;
> +				val--;
> +				upper = val;
> +				val = tap;
> +			} else {
> +				val++;
> +				lower = val;
> +				done = 1;
> +			}
> +		} else {
> +			if (dir) {
> +				if (val < 0x20) {
> +					val++;
> +				} else {
> +					dir = 0;
> +					upper = val;
> +					val = tap;
> +				}
> +			} else {
> +				if (!val) {
> +					lower = val;
> +					done = 1;
> +				} else {
> +					val--;
> +				}
> +			}
> +		}
> +	}
> +	val = (upper + lower) / 2;
> +	writel(val, regs + AR71XX_DDR_REG_TAP_CTRL0);
> +	val++;
> +	writel(val, regs + AR71XX_DDR_REG_TAP_CTRL1);
> +}

[...]

  reply	other threads:[~2016-01-16 19:31 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <1452968033-4460-1-git-send-email-wills.wang@live.com>
2016-01-16 18:13 ` [U-Boot] [PATCH v7 1/7] mips: add base support for QCA/Atheros ath79 SOCs Wills Wang
2016-01-16 19:19   ` Marek Vasut
2016-01-22  9:02     ` Wills Wang
2016-01-22 14:44       ` Marek Vasut
2016-01-23  1:31         ` Wills Wang
2016-01-23  3:06           ` Marek Vasut
2016-01-23  5:25             ` Wills Wang
2016-02-01 19:19   ` Marek Vasut
2016-01-16 18:13 ` [U-Boot] [PATCH v7 2/7] mips: ath79: add support for AR933x SOCs Wills Wang
2016-01-16 19:31   ` Marek Vasut [this message]
2016-01-22  9:10     ` Wills Wang
2016-01-22 14:46       ` Marek Vasut
2016-01-16 18:13 ` [U-Boot] [PATCH v7 3/7] mips: ath79: add support for QCA953x SOCs Wills Wang
2016-01-16 19:33   ` Marek Vasut
2016-01-22  9:17     ` Wills Wang
2016-01-22 14:49       ` Marek Vasut
2016-01-16 18:13 ` [U-Boot] [PATCH v7 4/7] mips: ath79: add serial driver for ar933x SOC Wills Wang
2016-01-16 19:17   ` Daniel Schwierzeck
2016-01-18  3:58   ` Simon Glass
2016-01-16 18:13 ` [U-Boot] [PATCH v7 5/7] mips: ath79: add spi driver Wills Wang
2016-01-16 19:37   ` Daniel Schwierzeck
2016-01-22  9:24     ` Wills Wang
2016-01-27  1:33   ` Marek Vasut
2016-02-02 15:38     ` Wills Wang
2016-02-02 16:07       ` Marek Vasut
2016-01-16 18:13 ` [U-Boot] [PATCH v7 6/7] mips: ath79: add AP121 reference board Wills Wang
2016-01-16 19:50   ` Daniel Schwierzeck
2016-01-22  9:36     ` Wills Wang
2016-01-16 18:13 ` [U-Boot] [PATCH v7 7/7] mips: ath79: add AP143 " Wills Wang
2016-01-16 19:53   ` Daniel Schwierzeck

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=201601162031.38563.marex@denx.de \
    --to=marex@denx.de \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox