mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-12-23 03:23:47 +00:00
da2616543a
The Allwinner H6 SoC comes with a set of new DRAM controller+PHY combo. Both the controller and the PHY seem to be originate from DesignWare, and are similar to the ones in ZynqMP SoCs. This commit introduces an initial DRAM driver for H6, which contains only LPDDR3 support. The currently known SBCs with H6 all come with LPDDR3 memory, including Pine H64 and several Orange Pi's. The BSP DRAM initialization code is closed source and violates GPL. Code in this commit is written by experimenting, referring the code/document of other users of the IPs (mainly the ZynqMP, as it's the only found PHY reference) and disassebling the BSP blob. Thanks for Jernej Skrabec for review and fix some issues in this driver (including the most critical one which made it to work), and rewrite some code from register dump! Signed-off-by: Icenowy Zheng <icenowy@aosc.io> Acked-by: Maxime Ripard <maxime.ripard@bootlin.com> Acked-by: Jagan Teki <jagan@openedev.com> Tested-by: Jagan Teki <jagan@amarulasolutions.com>
40 lines
1.1 KiB
C
40 lines
1.1 KiB
C
/* SPDX-License-Identifier: GPL-2.0+ */
|
|
/*
|
|
* (C) Copyright 2007-2012
|
|
* Allwinner Technology Co., Ltd. <www.allwinnertech.com>
|
|
* Berg Xing <bergxing@allwinnertech.com>
|
|
* Tom Cubie <tangliang@allwinnertech.com>
|
|
*
|
|
* Sunxi platform dram register definition.
|
|
*/
|
|
|
|
#ifndef _SUNXI_DRAM_H
|
|
#define _SUNXI_DRAM_H
|
|
|
|
#include <asm/io.h>
|
|
#include <linux/types.h>
|
|
|
|
/* dram regs definition */
|
|
#if defined(CONFIG_MACH_SUN6I)
|
|
#include <asm/arch/dram_sun6i.h>
|
|
#elif defined(CONFIG_MACH_SUN8I_A23)
|
|
#include <asm/arch/dram_sun8i_a23.h>
|
|
#elif defined(CONFIG_MACH_SUN8I_A33)
|
|
#include <asm/arch/dram_sun8i_a33.h>
|
|
#elif defined(CONFIG_MACH_SUN8I_A83T)
|
|
#include <asm/arch/dram_sun8i_a83t.h>
|
|
#elif defined(CONFIG_SUNXI_DRAM_DW)
|
|
#include <asm/arch/dram_sunxi_dw.h>
|
|
#elif defined(CONFIG_MACH_SUN9I)
|
|
#include <asm/arch/dram_sun9i.h>
|
|
#elif defined(CONFIG_MACH_SUN50I_H6)
|
|
#include <asm/arch/dram_sun50i_h6.h>
|
|
#else
|
|
#include <asm/arch/dram_sun4i.h>
|
|
#endif
|
|
|
|
unsigned long sunxi_dram_init(void);
|
|
void mctl_await_completion(u32 *reg, u32 mask, u32 val);
|
|
bool mctl_mem_matches(u32 offset);
|
|
|
|
#endif /* _SUNXI_DRAM_H */
|