diff mbox

[U-Boot,3/7] rockchip: rk3328: add sdram driver in U-Boot

Message ID 1497346202-774-4-git-send-email-kever.yang@rock-chips.com
State Superseded
Delegated to: Philipp Tomsich
Headers show

Commit Message

Kever Yang June 13, 2017, 9:29 a.m. UTC
Add sdram driver in U-Boot for get the correct sdram size from
sys_reg, so that U-Boot can co-work with Rockchip loader or SPL
to get different dram capability and then tell the kernel.

Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
---

 arch/arm/mach-rockchip/rk3328/Makefile       |  1 +
 arch/arm/mach-rockchip/rk3328/sdram_rk3328.c | 66 ++++++++++++++++++++++++++++
 2 files changed, 67 insertions(+)
 create mode 100644 arch/arm/mach-rockchip/rk3328/sdram_rk3328.c

Comments

Simon Glass June 17, 2017, 3:41 a.m. UTC | #1
On 13 June 2017 at 03:29, Kever Yang <kever.yang@rock-chips.com> wrote:
> Add sdram driver in U-Boot for get the correct sdram size from
> sys_reg, so that U-Boot can co-work with Rockchip loader or SPL
> to get different dram capability and then tell the kernel.

Do you think we might be able to retire the Rockchip loader one day?

>
> Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
> ---
>
>  arch/arm/mach-rockchip/rk3328/Makefile       |  1 +
>  arch/arm/mach-rockchip/rk3328/sdram_rk3328.c | 66 ++++++++++++++++++++++++++++
>  2 files changed, 67 insertions(+)
>  create mode 100644 arch/arm/mach-rockchip/rk3328/sdram_rk3328.c

Reviewed-by: Simon Glass <sjg@chromium.org>
Kever Yang June 23, 2017, 8:22 a.m. UTC | #2
Hi Simon,


On 06/17/2017 11:41 AM, Simon Glass wrote:
> On 13 June 2017 at 03:29, Kever Yang <kever.yang@rock-chips.com> wrote:
>> Add sdram driver in U-Boot for get the correct sdram size from
>> sys_reg, so that U-Boot can co-work with Rockchip loader or SPL
>> to get different dram capability and then tell the kernel.
> Do you think we might be able to retire the Rockchip loader one day?

If the feature and performance is almost the same, then Rockchip loader
is no need any more, and that's what I'm try to do.
- rockcusb & fastboot gadget performance, as I have comment in Eddie's 
patch long
     time ago, the dfu in U-Boot is using single buffer, which is very 
slow compare
     to mass storage gadget.
- Android boot, it's still not have full support for Android image like 
recovery in U-Boot now.
- Secure boot, I have not verify this part on upstream U-Boot, but 
rockchip needs it.
- some other feature used by our product

Thanks,
- Kever
>
>> Signed-off-by: Kever Yang <kever.yang@rock-chips.com>
>> ---
>>
>>   arch/arm/mach-rockchip/rk3328/Makefile       |  1 +
>>   arch/arm/mach-rockchip/rk3328/sdram_rk3328.c | 66 ++++++++++++++++++++++++++++
>>   2 files changed, 67 insertions(+)
>>   create mode 100644 arch/arm/mach-rockchip/rk3328/sdram_rk3328.c
> Reviewed-by: Simon Glass <sjg@chromium.org>
>
Simon Glass July 6, 2017, 4:49 a.m. UTC | #3
Hi Kever,

On 23 June 2017 at 02:22, Kever Yang <kever.yang@rock-chips.com> wrote:
> Hi Simon,
>
>
> On 06/17/2017 11:41 AM, Simon Glass wrote:
>>
>> On 13 June 2017 at 03:29, Kever Yang <kever.yang@rock-chips.com> wrote:
>>>
>>> Add sdram driver in U-Boot for get the correct sdram size from
>>> sys_reg, so that U-Boot can co-work with Rockchip loader or SPL
>>> to get different dram capability and then tell the kernel.
>>
>> Do you think we might be able to retire the Rockchip loader one day?
>
>
> If the feature and performance is almost the same, then Rockchip loader
> is no need any more, and that's what I'm try to do.
> - rockcusb & fastboot gadget performance, as I have comment in Eddie's patch
> long
>     time ago, the dfu in U-Boot is using single buffer, which is very slow
> compare
>     to mass storage gadget.
> - Android boot, it's still not have full support for Android image like
> recovery in U-Boot now.
> - Secure boot, I have not verify this part on upstream U-Boot, but rockchip
> needs it.
> - some other feature used by our product

OK, good to know the plan, thank you. Hopefully there are no obstacles
to getting all the above features into mainline.

Regards,
Simon
diff mbox

Patch

diff --git a/arch/arm/mach-rockchip/rk3328/Makefile b/arch/arm/mach-rockchip/rk3328/Makefile
index bbab036..72873e2 100644
--- a/arch/arm/mach-rockchip/rk3328/Makefile
+++ b/arch/arm/mach-rockchip/rk3328/Makefile
@@ -6,4 +6,5 @@ 
 
 obj-y += clk_rk3328.o
 obj-y += rk3328.o
+obj-y += sdram_rk3328.o
 obj-y += syscon_rk3328.o
diff --git a/arch/arm/mach-rockchip/rk3328/sdram_rk3328.c b/arch/arm/mach-rockchip/rk3328/sdram_rk3328.c
new file mode 100644
index 0000000..79dd8ae
--- /dev/null
+++ b/arch/arm/mach-rockchip/rk3328/sdram_rk3328.c
@@ -0,0 +1,66 @@ 
+/*
+ * (C) Copyright 2016 Rockchip Electronics Co., Ltd.
+ *
+ * SPDX-License-Identifier:     GPL-2.0
+ */
+
+#include <common.h>
+#include <dm.h>
+#include <ram.h>
+#include <syscon.h>
+#include <asm/arch/clock.h>
+#include <asm/arch/grf_rk3328.h>
+#include <asm/arch/sdram_common.h>
+
+DECLARE_GLOBAL_DATA_PTR;
+struct dram_info {
+	struct ram_info info;
+	struct rk3328_grf_regs *grf;
+};
+
+static int rk3328_dmc_probe(struct udevice *dev)
+{
+	struct dram_info *priv = dev_get_priv(dev);
+
+	priv->grf = syscon_get_first_range(ROCKCHIP_SYSCON_GRF);
+	debug("%s: grf=%p\n", __func__, priv->grf);
+	priv->info.base = CONFIG_SYS_SDRAM_BASE;
+	priv->info.size = rockchip_sdram_size(
+				(phys_addr_t)&priv->grf->os_reg[2]);
+	/*
+	* we use the 0x00000000~0xfdffffff space since 0xff000000~0xffffffff
+	* is SoC register space (i.e. reserved), and 0xfe000000~0xfeffffff is
+	* inaccessible for some IP controller.
+	*/
+	priv->info.size = min(priv->info.size, 0xfe000000);
+
+	return 0;
+}
+
+static int rk3328_dmc_get_info(struct udevice *dev, struct ram_info *info)
+{
+	struct dram_info *priv = dev_get_priv(dev);
+
+	*info = priv->info;
+
+	return 0;
+}
+
+static struct ram_ops rk3328_dmc_ops = {
+	.get_info = rk3328_dmc_get_info,
+};
+
+
+static const struct udevice_id rk3328_dmc_ids[] = {
+	{ .compatible = "rockchip,rk3328-dmc" },
+	{ }
+};
+
+U_BOOT_DRIVER(dmc_rk3328) = {
+	.name = "rockchip_rk3328_dmc",
+	.id = UCLASS_RAM,
+	.of_match = rk3328_dmc_ids,
+	.ops = &rk3328_dmc_ops,
+	.probe = rk3328_dmc_probe,
+	.priv_auto_alloc_size = sizeof(struct dram_info),
+};