1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228 |
- From 4953294aa8f8b9023e6b5f7f39059706c72d916c Mon Sep 17 00:00:00 2001
- From: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
- Date: Sun, 9 Dec 2012 17:54:56 +0100
- Subject: MIPS: lantiq: add support for Lantiq XWAY ARX100 SoC family
- Signed-off-by: Luka Perkov <luka@openwrt.org>
- Signed-off-by: John Crispin <blogic@openwrt.org>
- Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@gmail.com>
- --- /dev/null
- +++ b/arch/mips/cpu/mips32/arx100/Makefile
- @@ -0,0 +1,31 @@
- +#
- +# Copyright (C) 2000-2011 Wolfgang Denk, DENX Software Engineering, wd@denx.de
- +#
- +# SPDX-License-Identifier: GPL-2.0+
- +#
- +
- +include $(TOPDIR)/config.mk
- +
- +LIB = $(obj)lib$(SOC).o
- +
- +COBJS-y += cgu.o chipid.o ebu.o mem.o pmu.o rcu.o
- +SOBJS-y += cgu_init.o mem_init.o
- +
- +COBJS := $(COBJS-y)
- +SOBJS := $(SOBJS-y)
- +SRCS := $(SOBJS:.o=.S) $(COBJS:.o=.c)
- +OBJS := $(addprefix $(obj),$(SOBJS) $(COBJS))
- +
- +all: $(LIB)
- +
- +$(LIB): $(obj).depend $(OBJS)
- + $(call cmd_link_o_target, $(OBJS))
- +
- +#########################################################################
- +
- +# defines $(obj).depend target
- +include $(SRCTREE)/rules.mk
- +
- +sinclude $(obj).depend
- +
- +#########################################################################
- --- /dev/null
- +++ b/arch/mips/cpu/mips32/arx100/cgu.c
- @@ -0,0 +1,109 @@
- +/*
- + * Copyright (C) 2007-2010 Lantiq Deutschland GmbH
- + * Copyright (C) 2012 Daniel Schwierzeck, daniel.schwierzeck@gmail.com
- + *
- + * SPDX-License-Identifier: GPL-2.0+
- + */
- +
- +#include <common.h>
- +#include <asm/arch/soc.h>
- +#include <asm/lantiq/clk.h>
- +#include <asm/lantiq/io.h>
- +
- +#define CGU_SYS_DDR_SEL (1 << 0)
- +#define CGU_SYS_CPU_SEL (1 << 2)
- +#define CGU_SYS_SYS_SHIFT 3
- +#define CGU_SYS_SYS_MASK (0x3 << CGU_SYS_SYS_SHIFT)
- +#define CGU_SYS_FPI_SEL (1 << 6)
- +#define CGU_SYS_PPE_SEL (1 << 7)
- +
- +struct ltq_cgu_regs {
- + u32 rsvd0;
- + __be32 pll0_cfg; /* PLL0 config */
- + __be32 pll1_cfg; /* PLL1 config */
- + u32 rsvd2;
- + __be32 sys; /* System clock */
- + __be32 update; /* CGU update control */
- + __be32 if_clk; /* Interface clock */
- + u32 rsvd3;
- + __be32 smd; /* SDRAM Memory Control */
- + u32 rsvd4;
- + __be32 ct1_sr; /* CT status 1 */
- + __be32 ct_kval; /* CT K value */
- + __be32 pcm_cr; /* PCM control */
- +};
- +
- +static struct ltq_cgu_regs *ltq_cgu_regs =
- + (struct ltq_cgu_regs *) CKSEG1ADDR(LTQ_CGU_BASE);
- +
- +static inline u32 ltq_cgu_sys_readl(u32 mask, u32 shift)
- +{
- + return (ltq_readl(<q_cgu_regs->sys) & mask) >> shift;
- +}
- +
- +static unsigned long ltq_get_system_clock(void)
- +{
- + u32 sys_sel;
- + unsigned long clk;
- +
- + sys_sel = ltq_cgu_sys_readl(CGU_SYS_SYS_MASK, CGU_SYS_SYS_SHIFT);
- +
- + switch (sys_sel) {
- + case 0:
- + clk = CLOCK_333_MHZ;
- + break;
- + case 2:
- + clk = CLOCK_393_MHZ;
- + break;
- + default:
- + clk = 0;
- + break;
- + }
- +
- + return clk;
- +}
- +
- +unsigned long ltq_get_io_region_clock(void)
- +{
- + u32 ddr_sel;
- + unsigned long clk;
- +
- + ddr_sel = ltq_cgu_sys_readl(1, CGU_SYS_DDR_SEL);
- +
- + if (ddr_sel)
- + clk = ltq_get_system_clock() / 3;
- + else
- + clk = ltq_get_system_clock() / 2;
- +
- + return clk;
- +}
- +
- +unsigned long ltq_get_cpu_clock(void)
- +{
- + u32 cpu_sel;
- + unsigned long clk;
- +
- + cpu_sel = ltq_cgu_sys_readl(1, CGU_SYS_CPU_SEL);
- +
- + if (cpu_sel)
- + clk = ltq_get_io_region_clock();
- + else
- + clk = ltq_get_system_clock();
- +
- + return clk;
- +}
- +
- +unsigned long ltq_get_bus_clock(void)
- +{
- + u32 fpi_sel;
- + unsigned long clk;
- +
- + fpi_sel = ltq_cgu_sys_readl(1, CGU_SYS_FPI_SEL);
- +
- + if (fpi_sel)
- + clk = ltq_get_io_region_clock() / 2;
- + else
- + clk = ltq_get_io_region_clock();
- +
- + return clk;
- +}
- --- /dev/null
- +++ b/arch/mips/cpu/mips32/arx100/cgu_init.S
- @@ -0,0 +1,105 @@
- +/*
- + * Copyright (C) 2007-2010 Lantiq Deutschland GmbH
- + * Copyright (C) 2012-2013 Daniel Schwierzeck, daniel.schwierzeck@gmail.com
- + *
- + * SPDX-License-Identifier: GPL-2.0+
- + */
- +
- +#include <config.h>
- +#include <asm/asm.h>
- +#include <asm/regdef.h>
- +#include <asm/addrspace.h>
- +#include <asm/arch/soc.h>
- +
- +/* CGU module register */
- +#define CGU_PLL0_CFG 0x0004 /* PLL0 config */
- +#define CGU_PLL1_CFG 0x0008 /* PLL1 config */
- +#define CGU_SYS 0x0010 /* System clock */
- +#define CGU_UPDATE 0x0014 /* Clock update control */
- +
- +/* Valid SYS.PPE_SEL values */
- +#define CGU_SYS_PPESEL_SHIFT 7
- +#define CGU_SYS_PPESEL_250_MHZ (0x1 << CGU_SYS_PPESEL_SHIFT)
- +
- +/* Valid SYS.SYS_SEL values */
- +#define CGU_SYS_SYSSEL_SHIFT 3
- +#define CGU_SYS_SYSSEL_PLL0_333_MHZ (0x0 << CGU_SYS_SYSSEL_SHIFT)
- +#define CGU_SYS_SYSSEL_PLL1_393_MHZ (0x2 << CGU_SYS_SYSSEL_SHIFT)
- +
- +/* Valid SYS.CPU_SEL values */
- +#define CGU_SYS_CPUSEL_SHIFT 2
- +#define CGU_SYS_CPUSEL_EQUAL_SYSCLK (0x0 << CGU_SYS_CPUSEL_SHIFT)
- +#define CGU_SYS_CPUSEL_EQUAL_DDRCLK (0x1 << CGU_SYS_CPUSEL_SHIFT)
- +
- +/* Valid SYS.DDR_SEL values */
- +#define CGU_SYS_DDRSEL_HALF_SYSCLK 0x0
- +#define CGU_SYS_DDRSEL_THIRD_SYSCLK 0x1
- +
- +#define CGU_UPDATE_UPD 0x1
- +
- +#if (CONFIG_SYS_CLOCK_MODE == LTQ_CLK_CPU_393_DDR_197)
- +#define CGU_SYS_PPESEL_CONFIG CGU_SYS_PPESEL_250_MHZ
- +#define CGU_SYS_SYSSEL_CONFIG CGU_SYS_SYSSEL_PLL1_393_MHZ
- +#define CGU_SYS_CPUSEL_CONFIG CGU_SYS_CPUSEL_EQUAL_SYSCLK
- +#define CGU_SYS_DDRSEL_CONFIG CGU_SYS_DDRSEL_HALF_SYSCLK
- +#elif (CONFIG_SYS_CLOCK_MODE == LTQ_CLK_CPU_197_DDR_197)
- +#define CGU_SYS_PPESEL_CONFIG CGU_SYS_PPESEL_250_MHZ
- +#define CGU_SYS_SYSSEL_CONFIG CGU_SYS_SYSSEL_PLL1_393_MHZ
- +#define CGU_SYS_CPUSEL_CONFIG CGU_SYS_CPUSEL_EQUAL_DDRCLK
- +#define CGU_SYS_DDRSEL_CONFIG CGU_SYS_DDRSEL_HALF_SYSCLK
- +#elif (CONFIG_SYS_CLOCK_MODE == LTQ_CLK_CPU_333_DDR_167)
- +#define CGU_SYS_PPESEL_CONFIG CGU_SYS_PPESEL_250_MHZ
- +#define CGU_SYS_SYSSEL_CONFIG CGU_SYS_SYSSEL_PLL0_333_MHZ
- +#define CGU_SYS_CPUSEL_CONFIG CGU_SYS_CPUSEL_EQUAL_SYSCLK
- +#define CGU_SYS_DDRSEL_CONFIG CGU_SYS_DDRSEL_HALF_SYSCLK
- +#elif (CONFIG_SYS_CLOCK_MODE == LTQ_CLK_CPU_167_DDR_167)
- +#define CGU_SYS_PPESEL_CONFIG CGU_SYS_PPESEL_250_MHZ
- +#define CGU_SYS_SYSSEL_CONFIG CGU_SYS_SYSSEL_PLL0_333_MHZ
- +#define CGU_SYS_CPUSEL_CONFIG CGU_SYS_CPUSEL_EQUAL_DDRCLK
- +#define CGU_SYS_DDRSEL_CONFIG CGU_SYS_DDRSEL_HALF_SYSCLK
- +#elif (CONFIG_SYS_CLOCK_MODE == LTQ_CLK_CPU_131_DDR_131)
- +#define CGU_SYS_PPESEL_CONFIG CGU_SYS_PPESEL_250_MHZ
- +#define CGU_SYS_SYSSEL_CONFIG CGU_SYS_SYSSEL_PLL1_393_MHZ
- +#define CGU_SYS_CPUSEL_CONFIG CGU_SYS_CPUSEL_EQUAL_DDRCLK
- +#define CGU_SYS_DDRSEL_CONFIG CGU_SYS_DDRSEL_THIRD_SYSCLK
- +#elif (CONFIG_SYS_CLOCK_MODE == LTQ_CLK_CPU_111_DDR_111)
- +#define CGU_SYS_PPESEL_CONFIG CGU_SYS_PPESEL_250_MHZ
- +#define CGU_SYS_SYSSEL_CONFIG CGU_SYS_SYSSEL_PLL0_333_MHZ
- +#define CGU_SYS_CPUSEL_CONFIG CGU_SYS_CPUSEL_EQUAL_DDRCLK
- +#define CGU_SYS_DDRSEL_CONFIG CGU_SYS_DDRSEL_THIRD_SYSCLK
- +#else
- +#error "Invalid system clock configuration!"
- +#endif
- +
- +/* Build register values */
- +#define CGU_SYS_VALUE (CGU_SYS_PPESEL_CONFIG | \
- + CGU_SYS_SYSSEL_CONFIG | \
- + CGU_SYS_CPUSEL_CONFIG | \
- + CGU_SYS_DDRSEL_CONFIG)
- +
- + .set noreorder
- +
- +LEAF(ltq_cgu_init)
- + /* Load current CGU register value */
- + li t0, (LTQ_CGU_BASE | KSEG1)
- + lw t1, CGU_SYS(t0)
- +
- + /* Load target CGU register values */
- + li t2, CGU_SYS_VALUE
- +
- + /* Only update registers if values differ */
- + beq t1, t2, finished
- + nop
- +
- + /* Store target register values */
- + sw t2, CGU_SYS(t0)
- +
- + /* Trigger CGU update */
- + li t1, CGU_UPDATE_UPD
- + sw t1, CGU_UPDATE(t0)
- +
- +finished:
- + jr ra
- + nop
- +
- + END(ltq_cgu_init)
- --- /dev/null
- +++ b/arch/mips/cpu/mips32/arx100/chipid.c
- @@ -0,0 +1,60 @@
- +/*
- + * Copyright (C) 2012 Daniel Schwierzeck, daniel.schwierzeck@gmail.com
- + *
- + * SPDX-License-Identifier: GPL-2.0+
- + */
- +
- +#include <common.h>
- +#include <asm/lantiq/io.h>
- +#include <asm/lantiq/chipid.h>
- +#include <asm/arch/soc.h>
- +
- +#define LTQ_CHIPID_VERSION_SHIFT 28
- +#define LTQ_CHIPID_VERSION_MASK (0xF << LTQ_CHIPID_VERSION_SHIFT)
- +#define LTQ_CHIPID_PNUM_SHIFT 12
- +#define LTQ_CHIPID_PNUM_MASK (0xFFFF << LTQ_CHIPID_PNUM_SHIFT)
- +
- +struct ltq_chipid_regs {
- + u32 manid; /* Manufacturer identification */
- + u32 chipid; /* Chip identification */
- +};
- +
- +static struct ltq_chipid_regs *ltq_chipid_regs =
- + (struct ltq_chipid_regs *) CKSEG1ADDR(LTQ_CHIPID_BASE);
- +
- +unsigned int ltq_chip_version_get(void)
- +{
- + u32 chipid;
- +
- + chipid = ltq_readl(<q_chipid_regs->chipid);
- +
- + return (chipid & LTQ_CHIPID_VERSION_MASK) >> LTQ_CHIPID_VERSION_SHIFT;
- +}
- +
- +unsigned int ltq_chip_partnum_get(void)
- +{
- + u32 chipid;
- +
- + chipid = ltq_readl(<q_chipid_regs->chipid);
- +
- + return (chipid & LTQ_CHIPID_PNUM_MASK) >> LTQ_CHIPID_PNUM_SHIFT;
- +}
- +
- +const char *ltq_chip_partnum_str(void)
- +{
- + enum ltq_chip_partnum partnum = ltq_chip_partnum_get();
- +
- + switch (partnum) {
- + case LTQ_SOC_ARX188:
- + return "ARX188";
- + case LTQ_SOC_ARX186:
- + case LTQ_SOC_ARX186_2:
- + return "ARX186";
- + case LTQ_SOC_ARX182:
- + return "ARX182";
- + default:
- + printf("Unknown partnum: %x\n", partnum);
- + }
- +
- + return "";
- +}
- --- /dev/null
- +++ b/arch/mips/cpu/mips32/arx100/config.mk
- @@ -0,0 +1,30 @@
- +#
- +# Copyright (C) 2011-2013 Daniel Schwierzeck, daniel.schwierzeck@gmail.com
- +#
- +# SPDX-License-Identifier: GPL-2.0+
- +#
- +
- +PF_CPPFLAGS_XRX := $(call cc-option,-mtune=34kc,)
- +PLATFORM_CPPFLAGS += $(PF_CPPFLAGS_XRX)
- +
- +ifdef CONFIG_SPL_BUILD
- +PF_ABICALLS := -mno-abicalls
- +PF_PIC := -fno-pic
- +PF_PIE :=
- +USE_PRIVATE_LIBGCC := yes
- +endif
- +
- +LIBS-y += $(CPUDIR)/lantiq-common/liblantiq-common.o
- +
- +ifndef CONFIG_SPL_BUILD
- +ifdef CONFIG_SYS_BOOT_SFSPL
- +ALL-y += $(obj)u-boot.ltq.sfspl
- +ALL-$(CONFIG_SPL_LZO_SUPPORT) += $(obj)u-boot.ltq.lzo.sfspl
- +ALL-$(CONFIG_SPL_LZMA_SUPPORT) += $(obj)u-boot.ltq.lzma.sfspl
- +endif
- +ifdef CONFIG_SYS_BOOT_NORSPL
- +ALL-y += $(obj)u-boot.ltq.norspl
- +ALL-$(CONFIG_SPL_LZO_SUPPORT) += $(obj)u-boot.ltq.lzo.norspl
- +ALL-$(CONFIG_SPL_LZMA_SUPPORT) += $(obj)u-boot.ltq.lzma.norspl
- +endif
- +endif
- --- /dev/null
- +++ b/arch/mips/cpu/mips32/arx100/ebu.c
- @@ -0,0 +1,111 @@
- +/*
- + * Copyright (C) 2011-2013 Daniel Schwierzeck, daniel.schwierzeck@gmail.com
- + *
- + * SPDX-License-Identifier: GPL-2.0+
- + */
- +
- +#include <common.h>
- +#include <asm/arch/soc.h>
- +#include <asm/lantiq/io.h>
- +
- +#define EBU_ADDRSEL_MASK(mask) ((mask & 0xf) << 4)
- +#define EBU_ADDRSEL_REGEN (1 << 0)
- +
- +#define EBU_CON_WRDIS (1 << 31)
- +#define EBU_CON_AGEN_DEMUX (0x0 << 24)
- +#define EBU_CON_AGEN_MUX (0x2 << 24)
- +#define EBU_CON_SETUP (1 << 22)
- +#define EBU_CON_WAIT_DIS (0x0 << 20)
- +#define EBU_CON_WAIT_ASYNC (0x1 << 20)
- +#define EBU_CON_WAIT_SYNC (0x2 << 20)
- +#define EBU_CON_WINV (1 << 19)
- +#define EBU_CON_PW_8BIT (0x0 << 16)
- +#define EBU_CON_PW_16BIT (0x1 << 16)
- +#define EBU_CON_ALEC(cycles) ((cycles & 0x3) << 14)
- +#define EBU_CON_BCGEN_CS (0x0 << 12)
- +#define EBU_CON_BCGEN_INTEL (0x1 << 12)
- +#define EBU_CON_BCGEN_MOTOROLA (0x2 << 12)
- +#define EBU_CON_WAITWRC(cycles) ((cycles & 0x7) << 8)
- +#define EBU_CON_WAITRDC(cycles) ((cycles & 0x3) << 6)
- +#define EBU_CON_HOLDC(cycles) ((cycles & 0x3) << 4)
- +#define EBU_CON_RECOVC(cycles) ((cycles & 0x3) << 2)
- +#define EBU_CON_CMULT_1 0x0
- +#define EBU_CON_CMULT_4 0x1
- +#define EBU_CON_CMULT_8 0x2
- +#define EBU_CON_CMULT_16 0x3
- +
- +#if defined(CONFIG_LTQ_SUPPORT_NOR_FLASH)
- +#define ebu_region0_enable 1
- +#else
- +#define ebu_region0_enable 0
- +#endif
- +
- +#if defined(CONFIG_LTQ_SUPPORT_NAND_FLASH)
- +#define ebu_region1_enable 1
- +#else
- +#define ebu_region1_enable 0
- +#endif
- +
- +struct ltq_ebu_regs {
- + u32 clc;
- + u32 rsvd0;
- + u32 id;
- + u32 rsvd1;
- + u32 con;
- + u32 rsvd2[3];
- + u32 addr_sel_0;
- + u32 addr_sel_1;
- + u32 addr_sel_2;
- + u32 addr_sel_3;
- + u32 rsvd3[12];
- + u32 con_0;
- + u32 con_1;
- + u32 con_2;
- + u32 con_3;
- +};
- +
- +static struct ltq_ebu_regs *ltq_ebu_regs =
- + (struct ltq_ebu_regs *) CKSEG1ADDR(LTQ_EBU_BASE);
- +
- +void ltq_ebu_init(void)
- +{
- + if (ebu_region0_enable) {
- + /*
- + * Map EBU region 0 to range 0x10000000-0x13ffffff and enable
- + * region control. This supports up to 32 MiB NOR flash in
- + * bank 0.
- + */
- + ltq_writel(<q_ebu_regs->addr_sel_0, LTQ_EBU_REGION0_BASE |
- + EBU_ADDRSEL_MASK(1) | EBU_ADDRSEL_REGEN);
- +
- + ltq_writel(<q_ebu_regs->con_0, EBU_CON_AGEN_DEMUX |
- + EBU_CON_WAIT_DIS | EBU_CON_PW_16BIT |
- + EBU_CON_ALEC(3) | EBU_CON_BCGEN_INTEL |
- + EBU_CON_WAITWRC(7) | EBU_CON_WAITRDC(3) |
- + EBU_CON_HOLDC(3) | EBU_CON_RECOVC(3) |
- + EBU_CON_CMULT_16);
- + } else
- + ltq_clrbits(<q_ebu_regs->addr_sel_0, EBU_ADDRSEL_REGEN);
- +
- + if (ebu_region1_enable) {
- + /*
- + * Map EBU region 1 to range 0x14000000-0x13ffffff and enable
- + * region control. This supports NAND flash in bank 1.
- + */
- + ltq_writel(<q_ebu_regs->addr_sel_1, LTQ_EBU_REGION1_BASE |
- + EBU_ADDRSEL_MASK(3) | EBU_ADDRSEL_REGEN);
- +
- + ltq_writel(<q_ebu_regs->con_1, EBU_CON_AGEN_DEMUX |
- + EBU_CON_SETUP | EBU_CON_WAIT_DIS | EBU_CON_PW_8BIT |
- + EBU_CON_ALEC(3) | EBU_CON_BCGEN_INTEL |
- + EBU_CON_WAITWRC(2) | EBU_CON_WAITRDC(2) |
- + EBU_CON_HOLDC(1) | EBU_CON_RECOVC(1) |
- + EBU_CON_CMULT_4);
- + } else
- + ltq_clrbits(<q_ebu_regs->addr_sel_1, EBU_ADDRSEL_REGEN);
- +}
- +
- +void *flash_swap_addr(unsigned long addr)
- +{
- + return (void *)(addr ^ 2);
- +}
- --- /dev/null
- +++ b/arch/mips/cpu/mips32/arx100/mem.c
- @@ -0,0 +1,30 @@
- +/*
- + * Copyright (C) 2012 Daniel Schwierzeck, daniel.schwierzeck@gmail.com
- + *
- + * SPDX-License-Identifier: GPL-2.0+
- + */
- +
- +#include <common.h>
- +#include <asm/arch/soc.h>
- +#include <asm/lantiq/io.h>
- +
- +static void *ltq_mc_ddr_base = (void *) CKSEG1ADDR(LTQ_MC_DDR_BASE);
- +
- +static inline u32 ltq_mc_dc_read(u32 index)
- +{
- + return ltq_readl(ltq_mc_ddr_base + LTQ_MC_DDR_DC_OFFSET(index));
- +}
- +
- +phys_size_t initdram(int board_type)
- +{
- + u32 col, row, dc04, dc19, dc20;
- +
- + dc04 = ltq_mc_dc_read(4);
- + dc19 = ltq_mc_dc_read(19);
- + dc20 = ltq_mc_dc_read(20);
- +
- + row = (dc04 & 0xF) - ((dc19 & 0x700) >> 8);
- + col = ((dc04 & 0xF00) >> 8) - (dc20 & 0x7);
- +
- + return (1 << (row + col)) * 4 * 2;
- +}
- --- /dev/null
- +++ b/arch/mips/cpu/mips32/arx100/mem_init.S
- @@ -0,0 +1,114 @@
- +/*
- + * Copyright (C) 2007-2010 Lantiq Deutschland GmbH
- + * Copyright (C) 2012 Daniel Schwierzeck, daniel.schwierzeck@gmail.com
- + *
- + * SPDX-License-Identifier: GPL-2.0+
- + */
- +
- +#include <config.h>
- +#include <asm/asm.h>
- +#include <asm/regdef.h>
- +#include <asm/addrspace.h>
- +#include <asm/arch/soc.h>
- +
- +/* Must be configured in BOARDDIR */
- +#include <ddr_settings.h>
- +
- +#define LTQ_MC_GEN_ERRCAUSE 0x0010
- +#define LTQ_MC_GEN_ERRADDR 0x0020
- +#define LTQ_MC_GEN_CON 0x0060
- +#define LTQ_MC_GEN_STAT 0x0070
- +#define LTQ_MC_GEN_CON_SRAM_DDR_ENABLE 0xD
- +#define LTQ_MC_GEN_STAT_DLCK_PWRON 0xC
- +
- +#define LTQ_MC_DDR_DC03_MC_START 0x100
- +
- + /* Store given value in MC DDR CCRx register */
- + .macro dc_sw num, val
- + li t2, \val
- + sw t2, LTQ_MC_DDR_DC_OFFSET(\num)(t1)
- + .endm
- +
- +LEAF(ltq_mem_init)
- + /* Load MC General and MC DDR module base */
- + li t0, (LTQ_MC_GEN_BASE | KSEG1)
- + li t1, (LTQ_MC_DDR_BASE | KSEG1)
- +
- + /* Clear access error log registers */
- + sw zero, LTQ_MC_GEN_ERRCAUSE(t0)
- + sw zero, LTQ_MC_GEN_ERRADDR(t0)
- +
- + /* Enable DDR and SRAM module in memory controller */
- + li t2, LTQ_MC_GEN_CON_SRAM_DDR_ENABLE
- + sw t2, LTQ_MC_GEN_CON(t0)
- +
- + /* Clear start bit of DDR memory controller */
- + sw zero, LTQ_MC_DDR_DC_OFFSET(3)(t1)
- +
- + /* Init memory controller registers with values ddr_settings.h */
- + dc_sw 0, MC_DC00_VALUE
- + dc_sw 1, MC_DC01_VALUE
- + dc_sw 2, MC_DC02_VALUE
- + dc_sw 4, MC_DC04_VALUE
- + dc_sw 5, MC_DC05_VALUE
- + dc_sw 6, MC_DC06_VALUE
- + dc_sw 7, MC_DC07_VALUE
- + dc_sw 8, MC_DC08_VALUE
- + dc_sw 9, MC_DC09_VALUE
- +
- + dc_sw 10, MC_DC10_VALUE
- + dc_sw 11, MC_DC11_VALUE
- + dc_sw 12, MC_DC12_VALUE
- + dc_sw 13, MC_DC13_VALUE
- + dc_sw 14, MC_DC14_VALUE
- + dc_sw 15, MC_DC15_VALUE
- + dc_sw 16, MC_DC16_VALUE
- + dc_sw 17, MC_DC17_VALUE
- + dc_sw 18, MC_DC18_VALUE
- + dc_sw 19, MC_DC19_VALUE
- +
- + dc_sw 20, MC_DC20_VALUE
- + dc_sw 21, MC_DC21_VALUE
- + dc_sw 22, MC_DC22_VALUE
- + dc_sw 23, MC_DC23_VALUE
- + dc_sw 24, MC_DC24_VALUE
- + dc_sw 25, MC_DC25_VALUE
- + dc_sw 26, MC_DC26_VALUE
- + dc_sw 27, MC_DC27_VALUE
- + dc_sw 28, MC_DC28_VALUE
- + dc_sw 29, MC_DC29_VALUE
- +
- + dc_sw 30, MC_DC30_VALUE
- + dc_sw 31, MC_DC31_VALUE
- + dc_sw 32, MC_DC32_VALUE
- + dc_sw 33, MC_DC33_VALUE
- + dc_sw 34, MC_DC34_VALUE
- + dc_sw 35, MC_DC35_VALUE
- + dc_sw 36, MC_DC36_VALUE
- + dc_sw 37, MC_DC37_VALUE
- + dc_sw 38, MC_DC38_VALUE
- + dc_sw 39, MC_DC39_VALUE
- +
- + dc_sw 40, MC_DC40_VALUE
- + dc_sw 41, MC_DC41_VALUE
- + dc_sw 42, MC_DC42_VALUE
- + dc_sw 43, MC_DC43_VALUE
- + dc_sw 44, MC_DC44_VALUE
- + dc_sw 45, MC_DC45_VALUE
- + dc_sw 46, MC_DC46_VALUE
- +
- + /* Set start bit of DDR memory controller */
- + li t2, LTQ_MC_DDR_DC03_MC_START
- + sw t2, LTQ_MC_DDR_DC_OFFSET(3)(t1)
- +
- + /* Wait until DLL has locked and core is ready for data transfers */
- +wait_ready:
- + lw t2, LTQ_MC_GEN_STAT(t0)
- + li t3, LTQ_MC_GEN_STAT_DLCK_PWRON
- + and t2, t3
- + bne t2, t3, wait_ready
- +
- +finished:
- + jr ra
- +
- + END(ltq_mem_init)
- --- /dev/null
- +++ b/arch/mips/cpu/mips32/arx100/pmu.c
- @@ -0,0 +1,120 @@
- +/*
- + * Copyright (C) 2012 Daniel Schwierzeck, daniel.schwierzeck@gmail.com
- + *
- + * SPDX-License-Identifier: GPL-2.0+
- + */
- +
- +#include <common.h>
- +#include <asm/lantiq/io.h>
- +#include <asm/lantiq/pm.h>
- +#include <asm/arch/soc.h>
- +
- +#define LTQ_PMU_PWDCR_RESERVED 0xE00C200C
- +
- +#define LTQ_PMU_PWDCR_SWITCH (1 << 28)
- +#define LTQ_PMU_PWDCR_USB1 (1 << 27)
- +#define LTQ_PMU_PWDCR_USB1_PHY (1 << 26)
- +#define LTQ_PMU_PWDCR_TDM (1 << 25)
- +#define LTQ_PMU_PWDCR_DDR_MEM (1 << 24)
- +#define LTQ_PMU_PWDCR_PPE_DP (1 << 23)
- +#define LTQ_PMU_PWDCR_PPE_EMA (1 << 22)
- +#define LTQ_PMU_PWDCR_PPE_TC (1 << 21)
- +#define LTQ_PMU_PWDCR_DEU (1 << 20)
- +#define LTQ_PMU_PWDCR_UART1 (1 << 17)
- +#define LTQ_PMU_PWDCR_SDIO (1 << 16)
- +#define LTQ_PMU_PWDCR_AHB (1 << 15)
- +#define LTQ_PMU_PWDCR_FPI0 (1 << 14)
- +#define LTQ_PMU_PWDCR_GPTC (1 << 12)
- +#define LTQ_PMU_PWDCR_LEDC (1 << 11)
- +#define LTQ_PMU_PWDCR_EBU (1 << 10)
- +#define LTQ_PMU_PWDCR_DSL (1 << 9)
- +#define LTQ_PMU_PWDCR_SPI (1 << 8)
- +#define LTQ_PMU_PWDCR_UART0 (1 << 7)
- +#define LTQ_PMU_PWDCR_USB (1 << 6)
- +#define LTQ_PMU_PWDCR_DMA (1 << 5)
- +#define LTQ_PMU_PWDCR_PCI (1 << 4)
- +#define LTQ_PMU_PWDCR_FPI1 (1 << 1)
- +#define LTQ_PMU_PWDCR_USB0_PHY (1 << 0)
- +
- +struct ltq_pmu_regs {
- + u32 rsvd0[7];
- + __be32 pwdcr;
- + __be32 sr;
- +};
- +
- +static struct ltq_pmu_regs *ltq_pmu_regs =
- + (struct ltq_pmu_regs *) CKSEG1ADDR(LTQ_PMU_BASE);
- +
- +u32 ltq_pm_map(enum ltq_pm_modules module)
- +{
- + u32 val;
- +
- + switch (module) {
- + case LTQ_PM_CORE:
- + val = LTQ_PMU_PWDCR_DDR_MEM | LTQ_PMU_PWDCR_UART1 |
- + LTQ_PMU_PWDCR_FPI0 | LTQ_PMU_PWDCR_LEDC |
- + LTQ_PMU_PWDCR_EBU;
- + break;
- + case LTQ_PM_DMA:
- + val = LTQ_PMU_PWDCR_DMA;
- + break;
- + case LTQ_PM_ETH:
- + val = LTQ_PMU_PWDCR_SWITCH | LTQ_PMU_PWDCR_PPE_DP |
- + LTQ_PMU_PWDCR_PPE_EMA | LTQ_PMU_PWDCR_PPE_TC;
- + break;
- + case LTQ_PM_SPI:
- + val = LTQ_PMU_PWDCR_SPI;
- + break;
- + default:
- + val = 0;
- + break;
- + }
- +
- + return val;
- +}
- +
- +int ltq_pm_enable(enum ltq_pm_modules module)
- +{
- + const unsigned long timeout = 1000;
- + unsigned long timebase;
- + u32 sr, val;
- +
- + val = ltq_pm_map(module);
- + if (unlikely(!val))
- + return 1;
- +
- + ltq_clrbits(<q_pmu_regs->pwdcr, val);
- +
- + timebase = get_timer(0);
- +
- + do {
- + sr = ltq_readl(<q_pmu_regs->sr);
- + if (~sr & val)
- + return 0;
- + } while (get_timer(timebase) < timeout);
- +
- + return 1;
- +}
- +
- +int ltq_pm_disable(enum ltq_pm_modules module)
- +{
- + u32 val;
- +
- + val = ltq_pm_map(module);
- + if (unlikely(!val))
- + return 1;
- +
- + ltq_setbits(<q_pmu_regs->pwdcr, val);
- +
- + return 0;
- +}
- +
- +void ltq_pmu_init(void)
- +{
- + u32 set, clr;
- +
- + clr = ltq_pm_map(LTQ_PM_CORE);
- + set = ~(LTQ_PMU_PWDCR_RESERVED | clr);
- +
- + ltq_clrsetbits(<q_pmu_regs->pwdcr, clr, set);
- +}
- --- /dev/null
- +++ b/arch/mips/cpu/mips32/arx100/rcu.c
- @@ -0,0 +1,130 @@
- +/*
- + * Copyright (C) 2012 Daniel Schwierzeck, daniel.schwierzeck@gmail.com
- + *
- + * SPDX-License-Identifier: GPL-2.0+
- + */
- +
- +#include <common.h>
- +#include <asm/lantiq/io.h>
- +#include <asm/lantiq/reset.h>
- +#include <asm/lantiq/cpu.h>
- +#include <asm/arch/soc.h>
- +
- +#define LTQ_RCU_RD_SRST (1 << 30) /* Global SW Reset */
- +#define LTQ_RCU_RD_USB1 (1 << 28) /* USB1 MAC and PHY */
- +#define LTQ_RCU_RD_REG25_PD (1 << 26) /* Power down 2.5V regulator */
- +#define LTQ_RCU_RD_PPE_ATM_TC (1 << 22) /* PPE ATM TC */
- +#define LTQ_RCU_RD_ETHSW (1 << 21) /* Ethernet switch */
- +#define LTQ_RCU_RD_DSP_DEN (1 << 20) /* Enable DSP JTAG */
- +#define LTQ_RCU_RD_TDM (1 << 19) /* TDM module interface */
- +#define LTQ_RCU_RD_MC (1 << 14) /* Memory Controller */
- +#define LTQ_RCU_RD_PCI (1 << 13) /* PCI core */
- +#define LTQ_RCU_RD_SDIO (1 << 10) /* SDIO core */
- +#define LTQ_RCU_RD_DMA (1 << 9) /* DMA core */
- +#define LTQ_RCU_RD_PPE (1 << 8) /* PPE core */
- +#define LTQ_RCU_RD_ARC_DFE (1 << 7) /* ARC/DFE core */
- +#define LTQ_RCU_RD_AHB (1 << 6) /* AHB bus */
- +#define LTQ_RCU_RD_USB (1 << 4) /* USB and Phy core */
- +#define LTQ_RCU_RD_FPI (1 << 2) /* FPI bus */
- +#define LTQ_RCU_RD_CPU0 (1 << 1) /* CPU0 subsystem */
- +#define LTQ_RCU_RD_HRST (1 << 0) /* HW reset via HRST pin */
- +
- +#define LTQ_RCU_STAT_BOOT_SHIFT 17
- +#define LTQ_RCU_STAT_BOOT_MASK (0xf << LTQ_RCU_STAT_BOOT_SHIFT)
- +
- +struct ltq_rcu_regs {
- + u32 rsvd0[4];
- + __be32 req; /* Reset request */
- + __be32 stat; /* Reset status */
- + __be32 usb0_cfg; /* USB0 config */
- + u32 rsvd1[2];
- + __be32 pci_rdy; /* PCI boot ready */
- + __be32 ppe_conf; /* PPE config */
- + u32 rsvd2;
- + __be32 usb1_cfg; /* USB1 config */
- +};
- +
- +static struct ltq_rcu_regs *ltq_rcu_regs =
- + (struct ltq_rcu_regs *) CKSEG1ADDR(LTQ_RCU_BASE);
- +
- +u32 ltq_reset_map(enum ltq_reset_modules module)
- +{
- + u32 val;
- +
- + switch (module) {
- + case LTQ_RESET_CORE:
- + case LTQ_RESET_SOFT:
- + val = LTQ_RCU_RD_SRST | LTQ_RCU_RD_CPU0;
- + break;
- + case LTQ_RESET_DMA:
- + val = LTQ_RCU_RD_DMA;
- + break;
- + case LTQ_RESET_ETH:
- + val = LTQ_RCU_RD_PPE | LTQ_RCU_RD_ETHSW;
- + break;
- + case LTQ_RESET_HARD:
- + val = LTQ_RCU_RD_HRST;
- + break;
- + default:
- + val = 0;
- + break;
- + }
- +
- + return val;
- +}
- +
- +int ltq_reset_activate(enum ltq_reset_modules module)
- +{
- + u32 val;
- +
- + val = ltq_reset_map(module);
- + if (unlikely(!val))
- + return 1;
- +
- + ltq_setbits(<q_rcu_regs->req, val);
- +
- + return 0;
- +}
- +
- +int ltq_reset_deactivate(enum ltq_reset_modules module)
- +{
- + u32 val;
- +
- + val = ltq_reset_map(module);
- + if (unlikely(!val))
- + return 1;
- +
- + ltq_clrbits(<q_rcu_regs->req, val);
- +
- + return 0;
- +}
- +
- +enum ltq_boot_select ltq_boot_select(void)
- +{
- + u32 stat;
- + unsigned int bootstrap;
- +
- + stat = ltq_readl(<q_rcu_regs->stat);
- + bootstrap = (stat & LTQ_RCU_STAT_BOOT_MASK) >> LTQ_RCU_STAT_BOOT_SHIFT;
- +
- + switch (bootstrap) {
- + case 0:
- + return BOOT_NOR_NO_BOOTROM;
- + case 1:
- + return BOOT_RGMII0;
- + case 2:
- + return BOOT_NOR;
- + case 3:
- + return BOOT_MII0;
- + case 5:
- + return BOOT_RMII0;
- + case 6:
- + return BOOT_PCI;
- + case 8:
- + return BOOT_UART;
- + case 10:
- + return BOOT_SPI;
- + default:
- + return BOOT_UNKNOWN;
- + }
- +}
- --- a/arch/mips/cpu/mips32/lantiq-common/cpu.c
- +++ b/arch/mips/cpu/mips32/lantiq-common/cpu.c
- @@ -20,6 +20,7 @@ static const char ltq_bootsel_strings[][
- "PCI",
- "MII0",
- "RMII0",
- + "RGMII0",
- "RGMII1",
- "unknown",
- };
- --- a/arch/mips/cpu/mips32/lantiq-common/start.S
- +++ b/arch/mips/cpu/mips32/lantiq-common/start.S
- @@ -64,6 +64,11 @@
- #define STATUS_LANTIQ (STATUS_MIPS24K | STATUS_MIPS32_64)
- #endif
-
- +#ifdef CONFIG_SOC_XWAY_ARX100
- +#define CONFIG0_LANTIQ (CONFIG0_MIPS34K | CONFIG0_MIPS32_64)
- +#define STATUS_LANTIQ (STATUS_MIPS34K | STATUS_MIPS32_64)
- +#endif
- +
- #ifdef CONFIG_SOC_XWAY_VRX200
- #define CONFIG0_LANTIQ (CONFIG0_MIPS34K | CONFIG0_MIPS32_64)
- #define STATUS_LANTIQ (STATUS_MIPS34K | STATUS_MIPS32_64)
- --- /dev/null
- +++ b/arch/mips/include/asm/arch-arx100/config.h
- @@ -0,0 +1,175 @@
- +/*
- + * Copyright (C) 2007-2010 Lantiq Deutschland GmbH
- + * Copyright (C) 2011-2013 Daniel Schwierzeck, daniel.schwierzeck@gmail.com
- + *
- + * SPDX-License-Identifier: GPL-2.0+
- + *
- + * Common board configuration for Lantiq XWAY ARX100 family
- + *
- + * Use following defines in your board config to enable specific features
- + * and drivers for this SoC:
- + *
- + * CONFIG_LTQ_SUPPORT_UART
- + * - support the Danube ASC/UART interface and console
- + *
- + * CONFIG_LTQ_SUPPORT_NOR_FLASH
- + * - support a parallel NOR flash via the CFI interface in flash bank 0
- + *
- + * CONFIG_LTQ_SUPPORT_ETHERNET
- + * - support the Danube ETOP and MAC interface
- + *
- + * CONFIG_LTQ_SUPPORT_SPI_FLASH
- + * - support the Danube SPI interface and serial flash drivers
- + * - specific SPI flash drivers must be configured separately
- + */
- +
- +#ifndef __ARX100_CONFIG_H__
- +#define __ARX100_CONFIG_H__
- +
- +/* CPU and SoC type */
- +#define CONFIG_SOC_LANTIQ
- +#define CONFIG_SOC_XWAY_ARX100
- +
- +/* Cache configuration */
- +#define CONFIG_SYS_MIPS_CACHE_MODE CONF_CM_CACHABLE_NONCOHERENT
- +#define CONFIG_SYS_DCACHE_SIZE (16 * 1024)
- +#define CONFIG_SYS_ICACHE_SIZE (32 * 1024)
- +#define CONFIG_SYS_CACHELINE_SIZE 32
- +#define CONFIG_SYS_MIPS_CACHE_EXT_INIT
- +
- +/*
- + * Supported clock modes
- + * PLL0: rational PLL running at 500 MHz
- + * PLL1: fractional PLL running at 393.219 MHz
- + */
- +#define LTQ_CLK_CPU_393_DDR_197 0
- +#define LTQ_CLK_CPU_197_DDR_197 1
- +#define LTQ_CLK_CPU_333_DDR_167 2
- +#define LTQ_CLK_CPU_167_DDR_167 3
- +#define LTQ_CLK_CPU_131_DDR_131 4
- +#define LTQ_CLK_CPU_111_DDR_111 5
- +
- +/* CPU speed */
- +#define CONFIG_SYS_CLOCK_MODE LTQ_CLK_CPU_333_DDR_167
- +#define CONFIG_SYS_MIPS_TIMER_FREQ 166666667
- +#define CONFIG_SYS_HZ 1000
- +
- +/* RAM */
- +#define CONFIG_NR_DRAM_BANKS 1
- +#define CONFIG_SYS_SDRAM_BASE 0x80000000
- +#define CONFIG_SYS_SDRAM_BASE_UC 0xa0000000
- +#define CONFIG_SYS_MEMTEST_START 0x81000000
- +#define CONFIG_SYS_MEMTEST_END 0x82000000
- +#define CONFIG_SYS_LOAD_ADDR 0x81000000
- +#define CONFIG_SYS_INIT_SP_OFFSET (32 * 1024)
- +
- +/* SRAM */
- +#define CONFIG_SYS_SRAM_BASE 0xBE1A0000
- +#define CONFIG_SYS_SRAM_SIZE 0x10000
- +
- +/* ASC/UART driver and console */
- +#define CONFIG_LANTIQ_SERIAL
- +#define CONFIG_SYS_BAUDRATE_TABLE { 9600, 19200, 38400, 57600, 115200 }
- +
- +/* GPIO */
- +#define CONFIG_LANTIQ_GPIO
- +#define CONFIG_LTQ_GPIO_MAX_BANKS 3
- +#define CONFIG_LTQ_HAS_GPIO_BANK3
- +
- +/* FLASH driver */
- +#if defined(CONFIG_LTQ_SUPPORT_NOR_FLASH)
- +#define CONFIG_SYS_MAX_FLASH_BANKS 1
- +#define CONFIG_SYS_MAX_FLASH_SECT 256
- +#define CONFIG_SYS_FLASH_BASE 0xB0000000
- +#define CONFIG_FLASH_16BIT
- +#define CONFIG_SYS_FLASH_CFI
- +#define CONFIG_FLASH_CFI_DRIVER
- +#define CONFIG_SYS_FLASH_CFI_WIDTH FLASH_CFI_16BIT
- +#define CONFIG_SYS_FLASH_USE_BUFFER_WRITE
- +#define CONFIG_FLASH_SHOW_PROGRESS 50
- +#define CONFIG_SYS_FLASH_PROTECTION
- +#define CONFIG_CFI_FLASH_USE_WEAK_ADDR_SWAP
- +
- +#define CONFIG_CMD_FLASH
- +#else
- +#define CONFIG_SYS_NO_FLASH
- +#endif /* CONFIG_NOR_FLASH */
- +
- +#if defined(CONFIG_LTQ_SUPPORT_SPI_FLASH)
- +#define CONFIG_LANTIQ_SPI
- +#define CONFIG_SPI_FLASH
- +
- +#define CONFIG_CMD_SF
- +#define CONFIG_CMD_SPI
- +#endif
- +
- +#if defined(CONFIG_LTQ_SUPPORT_NAND_FLASH)
- +#define CONFIG_NAND_LANTIQ
- +#define CONFIG_SYS_MAX_NAND_DEVICE 1
- +#define CONFIG_SYS_NAND_BASE 0xB4000000
- +
- +#define CONFIG_CMD_NAND
- +#endif
- +
- +#if defined(CONFIG_LTQ_SUPPORT_ETHERNET)
- +#define CONFIG_LANTIQ_DMA
- +#define CONFIG_LANTIQ_ARX100_SWITCH
- +
- +#define CONFIG_PHYLIB
- +#define CONFIG_MII
- +#define CONFIG_UDP_CHECKSUM
- +
- +#define CONFIG_CMD_MII
- +#define CONFIG_CMD_NET
- +#endif
- +
- +#define CONFIG_SPL_MAX_SIZE (32 * 1024)
- +#define CONFIG_SPL_BSS_MAX_SIZE (8 * 1024)
- +#define CONFIG_SPL_STACK_MAX_SIZE (8 * 1024)
- +#define CONFIG_SPL_MALLOC_MAX_SIZE (32 * 1024)
- +#define CONFIG_SPL_STACK_BSS_IN_SRAM
- +
- +#if defined(CONFIG_SPL_STACK_BSS_IN_SRAM)
- +#define CONFIG_SPL_STACK_BASE (CONFIG_SYS_SRAM_BASE + \
- + CONFIG_SPL_MAX_SIZE + \
- + CONFIG_SPL_STACK_MAX_SIZE - 1)
- +#define CONFIG_SPL_BSS_BASE (CONFIG_SPL_STACK_BASE + 1)
- +#define CONFIG_SPL_MALLOC_BASE (CONFIG_SYS_SDRAM_BASE + \
- + CONFIG_SYS_INIT_SP_OFFSET)
- +#else
- +#define CONFIG_SPL_STACK_BASE (CONFIG_SYS_SDRAM_BASE + \
- + CONFIG_SYS_INIT_SP_OFFSET + \
- + CONFIG_SPL_STACK_MAX_SIZE - 1)
- +#define CONFIG_SPL_BSS_BASE (CONFIG_SPL_STACK_BASE + 1)
- +#define CONFIG_SPL_MALLOC_BASE (CONFIG_SPL_BSS_BASE + \
- + CONFIG_SPL_BSS_MAX_SIZE)
- +#endif
- +
- +#if defined(CONFIG_SYS_BOOT_RAM)
- +#define CONFIG_SYS_TEXT_BASE 0xA0100000
- +#define CONFIG_SKIP_LOWLEVEL_INIT
- +#define CONFIG_SYS_DISABLE_CACHE
- +#endif
- +
- +#if defined(CONFIG_SYS_BOOT_NOR)
- +#define CONFIG_SYS_TEXT_BASE 0xB0000000
- +#endif
- +
- +#if defined(CONFIG_SYS_BOOT_SFSPL) || defined(CONFIG_SYS_BOOT_NANDSPL)
- +#define CONFIG_SYS_TEXT_BASE 0x80100000
- +#define CONFIG_SPL_TEXT_BASE 0xBE1A0000
- +#endif
- +
- +#if defined(CONFIG_SYS_BOOT_NORSPL)
- +#define CONFIG_SYS_TEXT_BASE 0x80100000
- +#define CONFIG_SPL_TEXT_BASE 0xB0000000
- +#endif
- +
- +#if defined(CONFIG_SYS_BOOT_NOR) || defined(CONFIG_SYS_BOOT_NORSPL)
- +#define CONFIG_SYS_XWAY_EBU_BOOTCFG 0x688C688C
- +#define CONFIG_XWAY_SWAP_BYTES
- +#endif
- +
- +#define CONFIG_SYS_MONITOR_BASE CONFIG_SYS_TEXT_BASE
- +
- +#endif /* __ARX100_CONFIG_H__ */
- --- /dev/null
- +++ b/arch/mips/include/asm/arch-arx100/gpio.h
- @@ -0,0 +1,12 @@
- +/*
- + * Copyright (C) 2012 Daniel Schwierzeck, daniel.schwierzeck@gmail.com
- + *
- + * SPDX-License-Identifier: GPL-2.0+
- + */
- +
- +#ifndef __ARX100_GPIO_H__
- +#define __ARX100_GPIO_H__
- +
- +#include <asm/lantiq/gpio.h>
- +
- +#endif /* __ARX100_GPIO_H__ */
- --- /dev/null
- +++ b/arch/mips/include/asm/arch-arx100/nand.h
- @@ -0,0 +1,13 @@
- +/*
- + * Copyright (C) 2012-2013 Daniel Schwierzeck, daniel.schwierzeck@gmail.com
- + *
- + * SPDX-License-Identifier: GPL-2.0+
- + */
- +
- +#ifndef __VRX200_NAND_H__
- +#define __VRX200_NAND_H__
- +
- +struct nand_chip;
- +int ltq_nand_init(struct nand_chip *nand);
- +
- +#endif /* __VRX200_NAND_H__ */
- --- /dev/null
- +++ b/arch/mips/include/asm/arch-arx100/soc.h
- @@ -0,0 +1,37 @@
- +/*
- + * Copyright (C) 2007-2010 Lantiq Deutschland GmbH
- + * Copyright (C) 2012 Daniel Schwierzeck, daniel.schwierzeck@gmail.com
- + *
- + * SPDX-License-Identifier: GPL-2.0+
- + */
- +
- +#ifndef __ARX100_SOC_H__
- +#define __ARX100_SOC_H__
- +
- +#define LTQ_ASC0_BASE 0x1E100400
- +#define LTQ_SPI_BASE 0x1E100800
- +#define LTQ_GPIO_BASE 0x1E100B00
- +#define LTQ_SSIO_BASE 0x1E100BB0
- +#define LTQ_ASC1_BASE 0x1E100C00
- +#define LTQ_DMA_BASE 0x1E104100
- +
- +#define LTQ_EBU_BASE 0x1E105300
- +#define LTQ_EBU_REGION0_BASE 0x10000000
- +#define LTQ_EBU_REGION1_BASE 0x14000000
- +#define LTQ_EBU_NAND_BASE (LTQ_EBU_BASE + 0xB0)
- +
- +#define LTQ_PPE_BASE 0x1E180000
- +#define LTQ_SWITCH_BASE 0x1E108000
- +
- +#define LTQ_PMU_BASE 0x1F102000
- +#define LTQ_CGU_BASE 0x1F103000
- +#define LTQ_MPS_BASE 0x1F107000
- +#define LTQ_CHIPID_BASE (LTQ_MPS_BASE + 0x340)
- +#define LTQ_RCU_BASE 0x1F203000
- +
- +#define LTQ_MC_GEN_BASE 0x1F800000
- +#define LTQ_MC_SDR_BASE 0x1F800200
- +#define LTQ_MC_DDR_BASE 0x1F801000
- +#define LTQ_MC_DDR_DC_OFFSET(x) (x * 0x10)
- +
- +#endif /* __ARX100_SOC_H__ */
- --- a/arch/mips/include/asm/lantiq/chipid.h
- +++ b/arch/mips/include/asm/lantiq/chipid.h
- @@ -15,6 +15,10 @@ enum ltq_chip_partnum {
- LTQ_SOC_DANUBE = 0x0129,
- LTQ_SOC_DANUBE_S = 0x012B,
- LTQ_SOC_TWINPASS = 0x012D,
- + LTQ_SOC_ARX188 = 0x016C, /* ARX188 */
- + LTQ_SOC_ARX186 = 0x016D, /* ARX186 v1.1 */
- + LTQ_SOC_ARX186_2 = 0x016E, /* ARX186 v1.2 */
- + LTQ_SOC_ARX182 = 0x016F, /* ARX182 */
- LTQ_SOC_VRX288 = 0x01C0, /* VRX288 v1.1 */
- LTQ_SOC_VRX268 = 0x01C2, /* VRX268 v1.1 */
- LTQ_SOC_GRX288 = 0x01C9, /* GRX288 v1.1 */
- @@ -36,6 +40,38 @@ static inline int ltq_soc_is_danube(void
- {
- return 0;
- }
- +#endif
- +
- +#ifdef CONFIG_SOC_XWAY_ARX100
- +static inline int ltq_soc_is_arx100(void)
- +{
- + return 1;
- +}
- +
- +static inline int ltq_soc_is_arx100_v1(void)
- +{
- + return ltq_chip_version_get() == 1;
- +}
- +
- +static inline int ltq_soc_is_arx100_v2(void)
- +{
- + return ltq_chip_version_get() == 2;
- +}
- +#else
- +static inline int ltq_soc_is_arx100(void)
- +{
- + return 0;
- +}
- +
- +static inline int ltq_soc_is_arx100_v1(void)
- +{
- + return 0;
- +}
- +
- +static inline int ltq_soc_is_arx100_v2(void)
- +{
- + return 0;
- +}
- #endif
-
- #ifdef CONFIG_SOC_XWAY_VRX200
- --- a/arch/mips/include/asm/lantiq/clk.h
- +++ b/arch/mips/include/asm/lantiq/clk.h
- @@ -13,9 +13,10 @@ enum ltq_clk {
- CLOCK_83_MHZ = 83333333,
- CLOCK_111_MHZ = 111111111,
- CLOCK_125_MHZ = 125000000,
- + CLOCK_131_MHZ = 131073000,
- CLOCK_133_MHZ = 133333333,
- CLOCK_166_MHZ = 166666667,
- - CLOCK_197_MHZ = 197000000,
- + CLOCK_197_MHZ = 196609500,
- CLOCK_333_MHZ = 333333333,
- CLOCK_393_MHZ = 393219000,
- CLOCK_500_MHZ = 500000000,
- --- a/arch/mips/include/asm/lantiq/cpu.h
- +++ b/arch/mips/include/asm/lantiq/cpu.h
- @@ -17,6 +17,7 @@ enum ltq_boot_select {
- BOOT_PCI,
- BOOT_MII0,
- BOOT_RMII0,
- + BOOT_RGMII0,
- BOOT_RGMII1,
- BOOT_UNKNOWN,
- };
|