[U-Boot] [PATCH 13/13] rockchip: rk3066: add sdram init code for tpl
Simon Glass
sjg at chromium.org
Mon Jun 12 23:50:58 UTC 2017
Hi Pawel,
On 9 June 2017 at 07:15, Paweł Jarosz <paweljarosz3691 at gmail.com> wrote:
>
>
> W dniu 09.06.2017 o 14:27, Simon Glass pisze:
>
>> Hi Pawel,
>>
>> On 7 June 2017 at 09:44, Paweł Jarosz <paweljarosz3691 at gmail.com> wrote:
>>>
>>> Hi Simon,
>>>
>>>
>>> W dniu 06.06.2017 o 23:10, Simon Glass pisze:
>>>
>>>> Hi Pawel,
>>>>
>>>> On 6 June 2017 at 12:53, Paweł Jarosz <paweljarosz3691 at gmail.com> wrote:
>>>>>
>>>>> Add sdram initialisation code which will be ussed by tpl first boot
>>>>> stage.
>>>>> We need to implement sdram initialisation in tpl due to size issues on
>>>>> rk3066
>>>>> platform.
>>>>>
>>>>> Signed-off-by: Paweł Jarosz <paweljarosz3691 at gmail.com>
>>>>> ---
>>>>> arch/arm/include/asm/arch-rockchip/ddr_rk3188.h | 5 +
>>>>> arch/arm/mach-rockchip/rk3066/sdram_init.c | 995
>>>>> ++++++++++++++++++++++++
>>>>> 2 files changed, 1000 insertions(+)
>>>>> create mode 100644 arch/arm/mach-rockchip/rk3066/sdram_init.c
>>>>>
>>>>> diff --git a/arch/arm/include/asm/arch-rockchip/ddr_rk3188.h
>>>>> b/arch/arm/include/asm/arch-rockchip/ddr_rk3188.h
>>>>> index 3d7929f..74d11c6 100644
>>>>> --- a/arch/arm/include/asm/arch-rockchip/ddr_rk3188.h
>>>>> +++ b/arch/arm/include/asm/arch-rockchip/ddr_rk3188.h
>>>>> @@ -10,6 +10,11 @@
>>>>> #include <asm/arch/ddr_rk3288.h>
>>>>>
>>>>> /*
>>>>> + * RK3066 Tpl memory init.
>>>>> + */
>>>>> +void sdram_initialise(void);
>>>>> +
>>>>> +/*
>>>>> * RK3188 Memory scheduler register map.
>>>>> */
>>>>> struct rk3188_msch {
>>>>> diff --git a/arch/arm/mach-rockchip/rk3066/sdram_init.c
>>>>> b/arch/arm/mach-rockchip/rk3066/sdram_init.c
>>>>> new file mode 100644
>>>>> index 0000000..e7e506a
>>>>> --- /dev/null
>>>>> +++ b/arch/arm/mach-rockchip/rk3066/sdram_init.c
>>>>> @@ -0,0 +1,995 @@
>>>>> +/*
>>>>> + * (C) Copyright 2015 Google, Inc
>>>>> + * Copyright 2014 Rockchip Inc.
>>>>> + *
>>>>> + * SPDX-License-Identifier: GPL-2.0
>>>>> + *
>>>>> + * Adapted from the very similar rk3288 ddr init.
>>>>> + */
>>>>> +
>>>>> +#include <common.h>
>>>>> +#include <clk.h>
>>>>> +#include <errno.h>
>>>>> +#include <ram.h>
>>>>> +#include <asm/io.h>
>>>>> +#include <asm/arch/clock.h>
>>>>> +#include <asm/arch/cru_rk3066.h>
>>>>> +#include <asm/arch/ddr_rk3188.h>
>>>>> +#include <asm/arch/grf_rk3066.h>
>>>>> +#include <asm/arch/pmu_rk3188.h>
>>>>> +#include <asm/arch/sdram.h>
>>>>> +#include <linux/err.h>
>>>>> +
>>>>> +DECLARE_GLOBAL_DATA_PTR;
>>>>> +
>>>>> +struct pll_div {
>>>>> + u32 nr;
>>>>> + u32 nf;
>>>>> + u32 no;
>>>>> +};
>>>>> +
>>>>> +enum {
>>>>> + VCO_MAX_HZ = 1416U * 1000000,
>>>>> + VCO_MIN_HZ = 300 * 1000000,
>>>>> + OUTPUT_MAX_HZ = 1416U * 1000000,
>>>>> + OUTPUT_MIN_HZ = 30 * 1000000,
>>>>> + FREF_MAX_HZ = 1416U * 1000000,
>>>>> + FREF_MIN_HZ = 30 * 1000,
>>>>> +};
>>>>> +
>>>>> +enum {
>>>>> + /* PLL CON0 */
>>>>> + PLL_OD_MASK = 0x0f,
>>>>> +
>>>>> + /* PLL CON1 */
>>>>> + PLL_NF_MASK = 0x1fff,
>>>>> +
>>>>> + /* PLL CON2 */
>>>>> + PLL_BWADJ_MASK = 0x0fff,
>>>>> +
>>>>> + /* PLL CON3 */
>>>>> + PLL_RESET_SHIFT = 5,
>>>>> +
>>>>> + /* GRF_SOC_STATUS0 */
>>>>> + SOCSTS_DPLL_LOCK = 1 << 4,
>>>>> + SOCSTS_APLL_LOCK = 1 << 5,
>>>>> + SOCSTS_CPLL_LOCK = 1 << 6,
>>>>> + SOCSTS_GPLL_LOCK = 1 << 7,
>>>>> +};
>>>>> +
>>>>> +#define CRU_BASE 0x20000000
>>>>> +#define GRF_BASE 0x20008000
>>>>> +#define PMU_BASE 0x20004000
>>>>> +#define PCTL_BASE 0x20020000
>>>>> +#define PUBL_BASE 0x20040000
>>>>> +#define NOC_BASE 0x10128000
>>>>
>>>> I'm assume we cannot use the DT / syscon because of space constraints?
>>>
>>> Correct.
>>>>>
>>>>> +
>>>>> +#define RK3066_PCTL_TIMING_DEFAULT { \
>>>>
>>>> Do you need this? Why not just put these values below and avoid the
>>>> indirection?
>>>
>>> Some board may need this in the future as sdram timings are not
>>> universal.
>>> Default timings are dumped from rockchip proprietary loader.
>>> Look here:
>>
>> In that case these should go in the device tree like with other Rockchip
>> boards.
>> [...]
>
>
> It's tpl build. Is device tree supported in tpl?
Well maybe, but you only use TPL if things are really tight, so I
wouldn't recommend it.
>
>>>> How similar is this to rk3288? Could we put common code in a separate
>>>> file?
>>>
>>> Not sure how similar is it to rk3288. CRU, GRF, PMU differ a little
>>> between
>>> socs.
>>
>> Where did you get the code from? I want to avoid duplicate code and
>> factor out the differences if we can.
>
>
> It's adjusted code from rk3188 sdram driver.
>
>>> Also i needed to add few adjustments to make it build and run with tpl.
>>
>> I am still hoping we can drop TPL.
>>
>> Regards,
>> Simon
>
>
> Regards
> Paweł
Regards,
Simon
More information about the U-Boot
mailing list