[PATCH v3 2/4] mips: octeon: Initial minimal support for the Marvell Octeon SoC

Stefan Roese sr at denx.de
Tue Jun 30 11:29:53 CEST 2020


On 30.06.20 00:34, Daniel Schwierzeck wrote:
> Am Freitag, den 19.06.2020, 15:44 +0200 schrieb Stefan Roese:
>> From: Aaron Williams <awilliams at marvell.com>
>>
>> This patch adds very basic support for the Octeon III SoCs. Only
>> CFI parallel NOR flash and UART is supported for now.
>>
>> Please note that the basic Octeon port does not include the DDR3/4
>> initialization yet. This will be added in some follow-up patches
>> later. To still use U-Boot on with this port, the L2 cache (4MiB on
>> Octeon III CN73xx) is used as RAM. This way, U-Boot can boot to the
>> prompt on such boards.
>>
>> Signed-off-by: Aaron Williams <awilliams at marvell.com>
>> Signed-off-by: Stefan Roese <sr at denx.de>
>>
>> ---
>>
>> Changes in v3:
>> - Don't "relocate" to L2 cache for now
>> - Remove inclusion of "common.h"
>>
>> Changes in v2:
>> - Remove custom start.S and use common start.S. Minimal custom lowlevel
>>    init code is currently added in the custom lowlevel_init.S. This needs
>>    to be extended with necessary code, like errata handling etc. But for
>>    a very first basic port, this seems to be all thats needed to boot on
>>    the EBB7304 to the prompt.
>> - Removed select CREATE_ARCH_SYMLINK
>> - Removed Octeon II support, as its currently no added in this patchset
>> - Added cache.c to add the platform specific cache functions as no-ops
>>    for Octeon as the platform is cache coherent
>> - Removed CONFIG_MIPS_CACHE_COHERENT
>> - Added CONFIG_CPU_CAVIUM_OCTEON to Kconfig and selected it for Octeon
>>    to enable better sync with the Linux files in the future
>> - Add get_tbclk() -> no need to define CONFIG_SYS_MIPS_TIMER_FREQ any more
>>
>>   MAINTAINERS                                   |  6 ++
>>   arch/mips/Kconfig                             | 41 +++++++++++++
>>   arch/mips/Makefile                            |  3 +
>>   arch/mips/mach-octeon/Kconfig                 | 46 +++++++++++++++
>>   arch/mips/mach-octeon/Makefile                | 10 ++++
>>   arch/mips/mach-octeon/cache.c                 | 20 +++++++
>>   arch/mips/mach-octeon/clock.c                 | 27 +++++++++
>>   arch/mips/mach-octeon/cpu.c                   | 57 +++++++++++++++++++
>>   arch/mips/mach-octeon/dram.c                  | 28 +++++++++
>>   arch/mips/mach-octeon/include/ioremap.h       | 30 ++++++++++
>>   arch/mips/mach-octeon/include/mach/cavm-reg.h | 42 ++++++++++++++
>>   arch/mips/mach-octeon/include/mach/clock.h    | 22 +++++++
>>   arch/mips/mach-octeon/lowlevel_init.S         | 19 +++++++
>>   scripts/config_whitelist.txt                  |  1 -
>>   14 files changed, 351 insertions(+), 1 deletion(-)
>>   create mode 100644 arch/mips/mach-octeon/Kconfig
>>   create mode 100644 arch/mips/mach-octeon/Makefile
>>   create mode 100644 arch/mips/mach-octeon/cache.c
>>   create mode 100644 arch/mips/mach-octeon/clock.c
>>   create mode 100644 arch/mips/mach-octeon/cpu.c
>>   create mode 100644 arch/mips/mach-octeon/dram.c
>>   create mode 100644 arch/mips/mach-octeon/include/ioremap.h
>>   create mode 100644 arch/mips/mach-octeon/include/mach/cavm-reg.h
>>   create mode 100644 arch/mips/mach-octeon/include/mach/clock.h
>>   create mode 100644 arch/mips/mach-octeon/lowlevel_init.S
>>
>> diff --git a/MAINTAINERS b/MAINTAINERS
>> index 1fd975c72f..0aa0357967 100644
>> --- a/MAINTAINERS
>> +++ b/MAINTAINERS
>> @@ -763,6 +763,12 @@ M:	Ezequiel Garcia <ezequiel at collabora.com>
>>   S:	Maintained
>>   F:	arch/mips/mach-jz47xx/
>>   
>> +MIPS Octeon
>> +M:	Aaron Williams <awilliams at marvell.com>
>> +S:	Maintained
>> +F:	arch/mips/mach-octeon/
>> +F:	arch/mips/include/asm/arch-octeon/
>> +
>>   MMC
>>   M:	Peng Fan <peng.fan at nxp.com>
>>   S:	Maintained
>> diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig
>> index bccd06cb0c..dd56da6dae 100644
>> --- a/arch/mips/Kconfig
>> +++ b/arch/mips/Kconfig
>> @@ -106,6 +106,23 @@ config ARCH_JZ47XX
>>   	select OF_CONTROL
>>   	select DM
>>   
>> +config ARCH_OCTEON
>> +	bool "Support Marvell Octeon CN7xxx platforms"
>> +	select CPU_CAVIUM_OCTEON
>> +	select DISPLAY_CPUINFO
>> +	select DMA_ADDR_T_64BIT
>> +	select DM
>> +	select DM_SERIAL
>> +	select MIPS_L2_CACHE
>> +	select MIPS_TUNE_OCTEON3
>> +	select ROM_EXCEPTION_VECTORS
>> +	select SUPPORTS_BIG_ENDIAN
>> +	select SUPPORTS_CPU_MIPS64_OCTEON
>> +	select PHYS_64BIT
>> +	select OF_CONTROL
>> +	select OF_LIVE
>> +	imply CMD_DM
>> +
>>   config MACH_PIC32
>>   	bool "Support Microchip PIC32"
>>   	select DM
>> @@ -160,6 +177,7 @@ source "arch/mips/mach-bmips/Kconfig"
>>   source "arch/mips/mach-jz47xx/Kconfig"
>>   source "arch/mips/mach-pic32/Kconfig"
>>   source "arch/mips/mach-mtmips/Kconfig"
>> +source "arch/mips/mach-octeon/Kconfig"
>>   
>>   if MIPS
>>   
>> @@ -233,6 +251,14 @@ config CPU_MIPS64_R6
>>   	  Choose this option to build a kernel for release 6 or later of the
>>   	  MIPS64 architecture.
>>   
>> +config CPU_MIPS64_OCTEON
>> +	bool "Marvell Octeon series of CPUs"
>> +	depends on SUPPORTS_CPU_MIPS64_OCTEON
>> +	select 64BIT
>> +	help
>> +	 Choose this option for Marvell Octeon CPUs.  These CPUs are between
>> +	 MIPS64 R5 and R6 with other extensions.
>> +
>>   endchoice
>>   
>>   menu "General setup"
>> @@ -408,6 +434,12 @@ config SUPPORTS_CPU_MIPS64_R2
>>   config SUPPORTS_CPU_MIPS64_R6
>>   	bool
>>   
>> +config SUPPORTS_CPU_MIPS64_OCTEON
>> +	bool
>> +
>> +config CPU_CAVIUM_OCTEON
>> +	bool
>> +
>>   config CPU_MIPS32
>>   	bool
>>   	default y if CPU_MIPS32_R1 || CPU_MIPS32_R2 || CPU_MIPS32_R6
>> @@ -415,6 +447,7 @@ config CPU_MIPS32
>>   config CPU_MIPS64
>>   	bool
>>   	default y if CPU_MIPS64_R1 || CPU_MIPS64_R2 || CPU_MIPS64_R6
>> +	default y if CPU_MIPS64_OCTEON
>>   
>>   config MIPS_TUNE_4KC
>>   	bool
>> @@ -431,6 +464,9 @@ config MIPS_TUNE_34KC
>>   config MIPS_TUNE_74KC
>>   	bool
>>   
>> +config MIPS_TUNE_OCTEON3
>> +	bool
>> +
>>   config 32BIT
>>   	bool
>>   
>> @@ -463,6 +499,11 @@ config MIPS_SRAM_INIT
>>   	  before it can be used. If enabled, a function mips_sram_init() will
>>   	  be called just before setup_stack_gd.
>>   
>> +config DMA_ADDR_T_64BIT
>> +	bool
>> +	help
>> +	 Select this to enable 64-bit DMA addressing
>> +
>>   config SYS_DCACHE_SIZE
>>   	int
>>   	default 0
>> diff --git a/arch/mips/Makefile b/arch/mips/Makefile
>> index af3f227436..6502aebd29 100644
>> --- a/arch/mips/Makefile
>> +++ b/arch/mips/Makefile
>> @@ -17,6 +17,7 @@ machine-$(CONFIG_ARCH_JZ47XX) += jz47xx
>>   machine-$(CONFIG_MACH_PIC32) += pic32
>>   machine-$(CONFIG_ARCH_MTMIPS) += mtmips
>>   machine-$(CONFIG_ARCH_MSCC) += mscc
>> +machine-${CONFIG_ARCH_OCTEON} += octeon
>>   
>>   machdirs := $(patsubst %,arch/mips/mach-%/,$(machine-y))
>>   libs-y += $(machdirs)
>> @@ -30,6 +31,7 @@ arch-$(CONFIG_CPU_MIPS32_R6) += -march=mips32r6 -Wa,-mips32r6
>>   arch-$(CONFIG_CPU_MIPS64_R1) += -march=mips64 -Wa,-mips64
>>   arch-$(CONFIG_CPU_MIPS64_R2) += -march=mips64r2 -Wa,-mips64r2
>>   arch-$(CONFIG_CPU_MIPS64_R6) += -march=mips64r6 -Wa,-mips64r6
>> +arch-${CONFIG_CPU_MIPS64_OCTEON} += -march=octeon2
>>   
>>   # Allow extra optimization for specific CPUs/SoCs
>>   tune-$(CONFIG_MIPS_TUNE_4KC) += -mtune=4kc
>> @@ -37,6 +39,7 @@ tune-$(CONFIG_MIPS_TUNE_14KC) += -mtune=14kc
>>   tune-$(CONFIG_MIPS_TUNE_24KC) += -mtune=24kc
>>   tune-$(CONFIG_MIPS_TUNE_34KC) += -mtune=34kc
>>   tune-$(CONFIG_MIPS_TUNE_74KC) += -mtune=74kc
>> +tune-${CONFIG_MIPS_TUNE_OCTEON3} += -mtune=octeon2
>>   
>>   # Include default header files
>>   cflags-y += -I$(srctree)/arch/mips/include/asm/mach-generic
>> diff --git a/arch/mips/mach-octeon/Kconfig b/arch/mips/mach-octeon/Kconfig
>> new file mode 100644
>> index 0000000000..3c8ca8dd36
>> --- /dev/null
>> +++ b/arch/mips/mach-octeon/Kconfig
>> @@ -0,0 +1,46 @@
>> +menu "Octeon platforms"
>> +	depends on ARCH_OCTEON
>> +
>> +config SYS_SOC
>> +	string
>> +	default "octeon"
>> +
>> +config OCTEON_CN7XXX
>> +	bool "Octeon CN7XXX SoC"
>> +
>> +config OCTEON_CN70XX
>> +	bool "Octeon CN70XX SoC"
>> +	select OCTEON_CN7XXX
>> +
>> +config OCTEON_CN73XX
>> +	bool "Octeon CN73XX SoC"
>> +	select OCTEON_CN7XXX
>> +
>> +config OCTEON_CN78XX
>> +	bool "Octeon CN78XX SoC"
>> +	select OCTEON_CN7XXX
>> +
>> +choice
>> +	prompt "Octeon MIPS family select"
>> +
>> +config SOC_OCTEON3
>> +	bool "Octeon III family"
>> +	help
>> +	 This selects the Octeon III SoC family CN70xx, CN73XX, CN78xx
>> +	 and CNF75XX.
>> +
>> +endchoice
>> +
>> +config SYS_DCACHE_SIZE
>> +	default 32768
>> +
>> +config SYS_DCACHE_LINE_SIZE
>> +	default 128
>> +
>> +config SYS_ICACHE_SIZE
>> +	default	79872
>> +
>> +config SYS_ICACHE_LINE_SIZE
>> +	default 128
>> +
>> +endmenu
>> diff --git a/arch/mips/mach-octeon/Makefile b/arch/mips/mach-octeon/Makefile
>> new file mode 100644
>> index 0000000000..2e37ca572c
>> --- /dev/null
>> +++ b/arch/mips/mach-octeon/Makefile
>> @@ -0,0 +1,10 @@
>> +# (C) Copyright 2019 Marvell, Inc.
>> +#
>> +# SPDX-License-Identifier:	GPL-2.0+
>> +#
>> +
>> +obj-y += lowlevel_init.o
>> +obj-y += cache.o
>> +obj-y += clock.o
>> +obj-y += cpu.o
>> +obj-y += dram.o
>> diff --git a/arch/mips/mach-octeon/cache.c b/arch/mips/mach-octeon/cache.c
>> new file mode 100644
>> index 0000000000..bea846d757
>> --- /dev/null
>> +++ b/arch/mips/mach-octeon/cache.c
>> @@ -0,0 +1,20 @@
>> +// SPDX-License-Identifier: GPL-2.0+
>> +/*
>> + * Copyright (C) 2020 Marvell International Ltd.
>> + */
>> +
>> +#include <cpu_func.h>
>> +
>> +/*
>> + * The Octeon platform is cache coherent and cache flushes and invalidates
>> + * are not needed. Define some platform specific empty flush_foo()
>> + * functions here to overwrite the _weak common function as a no-op.
>> + * This effectively disables all cache operations.
>> + */
>> +void flush_dcache_range(ulong start_addr, ulong stop)
>> +{
>> +}
>> +
>> +void flush_cache(ulong start_addr, ulong size)
>> +{
>> +}
>> diff --git a/arch/mips/mach-octeon/clock.c b/arch/mips/mach-octeon/clock.c
>> new file mode 100644
>> index 0000000000..fc3776dc8f
>> --- /dev/null
>> +++ b/arch/mips/mach-octeon/clock.c
>> @@ -0,0 +1,27 @@
>> +// SPDX-License-Identifier: GPL-2.0
>> +/*
>> + * Copyright (C) 2018, 2019 Marvell International Ltd.
>> + */
>> +
>> +#include <asm/global_data.h>
>> +#include <mach/clock.h>
>> +
>> +DECLARE_GLOBAL_DATA_PTR;
>> +
>> +ulong notrace get_tbclk(void)
>> +{
>> +	return gd->cpu_clk;
>> +}
>> +
>> +int octeon_get_timer_freq(void)
>> +{
>> +	return gd->cpu_clk;
>> +}
>> +
>> +/**
>> + * Returns the I/O clock speed in Hz
>> + */
>> +u64 octeon_get_io_clock(void)
>> +{
>> +	return gd->bus_clk;
>> +}
> 
> do you plan to add a clock driver later? Than you could use the generic
> clock API in driver and wouldn't need to add custom functions ;)

I know thats a bit cumbersome. I'll remove the custom functions
in the next version.

>> diff --git a/arch/mips/mach-octeon/cpu.c b/arch/mips/mach-octeon/cpu.c
>> new file mode 100644
>> index 0000000000..7ef17a7d66
>> --- /dev/null
>> +++ b/arch/mips/mach-octeon/cpu.c
>> @@ -0,0 +1,57 @@
>> +// SPDX-License-Identifier: GPL-2.0+
>> +/*
>> + * Copyright (C) 2020 Marvell International Ltd.
>> + */
>> +
>> +#include <asm/global_data.h>
>> +#include <linux/bitops.h>
>> +#include <linux/compat.h>
>> +#include <linux/io.h>
>> +#include <mach/clock.h>
>> +#include <mach/cavm-reg.h>
>> +
>> +DECLARE_GLOBAL_DATA_PTR;
>> +
>> +static int get_clocks(void)
>> +{
>> +	const u64 ref_clock = PLL_REF_CLK;
>> +	union cavm_rst_boot rst_boot;
>> +
>> +	rst_boot.u = ioread64(CAVM_RST_BOOT);
>> +	gd->cpu_clk = ref_clock * rst_boot.s.c_mul;
>> +	gd->bus_clk = ref_clock * rst_boot.s.pnr_mul;
>> +
>> +	debug("%s: cpu: %lu, bus: %lu\n", __func__, gd->cpu_clk, gd->bus_clk);
>> +
>> +	return 0;
>> +}
>> +
>> +/* Early mach init code run from flash */
>> +int mach_cpu_init(void)
>> +{
>> +	/* Remap boot-bus 0x1fc0.0000 -> 0x1f40.0000 */
>> +	/* ToDo: Move this to an early running bus (bootbus) DM driver */
>> +	clrsetbits_be64(CAVM_MIO_BOOT_REG_CFG0, 0xffff, 0x1f40);
>> +
>> +	/* Get clocks and store them in GD */
>> +	get_clocks();
>> +
>> +	return 0;
>> +}
>> +
>> +/**
>> + * Returns number of cores
>> + *
>> + * @return	number of CPU cores for the specified node
>> + */
>> +static int cavm_octeon_num_cores(void)
>> +{
>> +	return fls64(ioread64(CAVM_CIU_FUSE) & 0xffffffffffff);
>> +}
>> +
>> +int print_cpuinfo(void)
>> +{
>> +	printf("SoC:   Octeon CN73xx (%d cores)\n", cavm_octeon_num_cores());
>> +
>> +	return 0;
>> +}
>> diff --git a/arch/mips/mach-octeon/dram.c b/arch/mips/mach-octeon/dram.c
>> new file mode 100644
>> index 0000000000..ff7a59f2ab
>> --- /dev/null
>> +++ b/arch/mips/mach-octeon/dram.c
>> @@ -0,0 +1,28 @@
>> +// SPDX-License-Identifier: GPL-2.0+
>> +/*
>> + * Copyright (C) Stefan Roese <sr at denx.de>
>> + */
>> +
>> +#include <dm.h>
>> +#include <ram.h>
>> +#include <asm/global_data.h>
>> +#include <linux/compat.h>
>> +
>> +DECLARE_GLOBAL_DATA_PTR;
>> +
>> +int dram_init(void)
>> +{
>> +	/*
>> +	 * No DDR init yet -> run in L2 cache
>> +	 */
>> +	gd->ram_size = (4 << 20);
>> +	gd->bd->bi_dram[0].size = gd->ram_size;
>> +	gd->bd->bi_dram[1].size = 0;
>> +
>> +	return 0;
>> +}
>> +
>> +ulong board_get_usable_ram_top(ulong total_size)
>> +{
>> +	return gd->ram_top;
>> +}
>> diff --git a/arch/mips/mach-octeon/include/ioremap.h b/arch/mips/mach-octeon/include/ioremap.h
>> new file mode 100644
>> index 0000000000..59b75008a2
>> --- /dev/null
>> +++ b/arch/mips/mach-octeon/include/ioremap.h
>> @@ -0,0 +1,30 @@
>> +/* SPDX-License-Identifier: GPL-2.0 */
>> +#ifndef __ASM_MACH_OCTEON_IOREMAP_H
>> +#define __ASM_MACH_OCTEON_IOREMAP_H
>> +
>> +#include <linux/types.h>
>> +
>> +/*
>> + * Allow physical addresses to be fixed up to help peripherals located
>> + * outside the low 32-bit range -- generic pass-through version.
>> + */
>> +static inline phys_addr_t fixup_bigphys_addr(phys_addr_t phys_addr,
>> +					     phys_addr_t size)
>> +{
>> +	return phys_addr;
>> +}
>> +
>> +static inline void __iomem *plat_ioremap(phys_addr_t offset, unsigned long size,
>> +					 unsigned long flags)
>> +{
>> +	return (void __iomem *)(XKPHYS | offset);
>> +}
>> +
>> +static inline int plat_iounmap(const volatile void __iomem *addr)
>> +{
>> +	return 0;
>> +}
>> +
>> +#define _page_cachable_default	_CACHE_CACHABLE_NONCOHERENT
>> +
>> +#endif /* __ASM_MACH_OCTEON_IOREMAP_H */
>> diff --git a/arch/mips/mach-octeon/include/mach/cavm-reg.h b/arch/mips/mach-octeon/include/mach/cavm-reg.h
>> new file mode 100644
>> index 0000000000..b961e54956
>> --- /dev/null
>> +++ b/arch/mips/mach-octeon/include/mach/cavm-reg.h
>> @@ -0,0 +1,42 @@
>> +/* SPDX-License-Identifier:    GPL-2.0 */
>> +/*
>> + * Copyright (C) 2020 Marvell International Ltd.
>> + */
>> +
>> +#ifndef __CAVM_REG_H__
>> +
>> +/* Register offsets */
>> +#define CAVM_CIU_FUSE			((u64 *)0x80010100000001a0)
>> +#define CAVM_MIO_BOOT_REG_CFG0		((u64 *)0x8001180000000000)
>> +#define CAVM_RST_BOOT			((u64 *)0x8001180006001600)
> 
> are those mapped or mappable addresses? The preferred way would be to
> just define the physical address and do a ioremap when needed. For
> example:
> 
> void __iomem *rst_boot = ioremap(CAVM_RST_BOOT, 0);

Will update in next version.

> If not mappable, just define the addresses without the (u64 *) cast and
> do that in the code when needed like that:
> 
> void __iomem *rst_boot = (void __iomem *)CAVM_RST_BOOT;
> 
> 
>> +
>> +/* Register structs */
>> +
>> +/**
>> + * Register (RSL) rst_boot
>> + *
>> + * RST Boot Register
>> + */
>> +union cavm_rst_boot {
>> +	u64 u;
>> +	struct cavm_rst_boot_s {
>> +		u64 chipkill                         : 1;
>> +		u64 jtcsrdis                         : 1;
>> +		u64 ejtagdis                         : 1;
>> +		u64 romen                            : 1;
>> +		u64 ckill_ppdis                      : 1;
>> +		u64 jt_tstmode                       : 1;
>> +		u64 vrm_err                          : 1;
>> +		u64 reserved_37_56                   : 20;
>> +		u64 c_mul                            : 7;
>> +		u64 pnr_mul                          : 6;
>> +		u64 reserved_21_23                   : 3;
>> +		u64 lboot_oci                        : 3;
>> +		u64 lboot_ext                        : 6;
>> +		u64 lboot                            : 10;
>> +		u64 rboot                            : 1;
>> +		u64 rboot_pin                        : 1;
>> +	} s;
>> +};
> 
> I'm not sure but bitfields are maybe frowned upon.

I'm not too happy with them as well. But that's whats used in the
original Octeon code. I assume that its auto generated.

> I guess the usual
> and preferred way would be to just define the really needed bits and
> masks with BIT() and GENMASK().

I agree. Using bitfields also has the great disadvantage, that it
can't be used with different endianesses. And this hits us when
using drivers for MIPS Octeon and ARM Octeon TX/TX2 (like I2C etc).

I'll move to BIT() etc in the next version here.

>> +
>> +#endif /* __CAVM_REG_H__ */
>> diff --git a/arch/mips/mach-octeon/include/mach/clock.h b/arch/mips/mach-octeon/include/mach/clock.h
>> new file mode 100644
>> index 0000000000..a3c1d8b2cd
>> --- /dev/null
>> +++ b/arch/mips/mach-octeon/include/mach/clock.h
>> @@ -0,0 +1,22 @@
>> +/* SPDX-License-Identifier:    GPL-2.0 */
>> +/*
>> + * Copyright (C) 2018, 2019 Marvell International Ltd.
>> + */
>> +
>> +#ifndef __CLOCK_H__
>> +
>> +/** System PLL reference clock */
>> +#define PLL_REF_CLK                     50000000        /* 50 MHz */
>> +#define NS_PER_REF_CLK_TICK             (1000000000 / PLL_REF_CLK)
>> +
>> +/**
>> + * Returns the I/O clock speed in Hz
>> + */
>> +u64 octeon_get_io_clock(void);
>> +
>> +/**
>> + * Returns the core clock speed in Hz
>> + */
>> +u64 octeon_get_core_clock(void);
>> +
>> +#endif /* __CLOCK_H__ */
>> diff --git a/arch/mips/mach-octeon/lowlevel_init.S b/arch/mips/mach-octeon/lowlevel_init.S
>> new file mode 100644
>> index 0000000000..d9aab38cde
>> --- /dev/null
>> +++ b/arch/mips/mach-octeon/lowlevel_init.S
>> @@ -0,0 +1,19 @@
>> +/* SPDX-License-Identifier: GPL-2.0 */
>> +/*
>> + * Copyright (C) 2020 Stefan Roese <sr at denx.de>
>> + */
>> +
>> +#include <config.h>
>> +#include <asm-offsets.h>
>> +#include <asm/cacheops.h>
>> +#include <asm/regdef.h>
>> +#include <asm/mipsregs.h>
>> +#include <asm/addrspace.h>
>> +#include <asm/asm.h>
>> +
>> +	.set noreorder
>> +
>> +LEAF(lowlevel_init)
>> +	jr	ra
>> +	 nop
>> +	END(lowlevel_init)
>> diff --git a/scripts/config_whitelist.txt b/scripts/config_whitelist.txt
>> index f6bf6f2474..f0e13389d0 100644
>> --- a/scripts/config_whitelist.txt
>> +++ b/scripts/config_whitelist.txt
>> @@ -230,7 +230,6 @@ CONFIG_CPLD_BR_PRELIM
>>   CONFIG_CPLD_OR_PRELIM
>>   CONFIG_CPM2
>>   CONFIG_CPU_ARMV8
>> -CONFIG_CPU_CAVIUM_OCTEON
>>   CONFIG_CPU_FREQ_HZ
>>   CONFIG_CPU_HAS_LLSC
>>   CONFIG_CPU_HAS_PREFETCH


Viele Grüße,
Stefan

-- 
DENX Software Engineering GmbH,      Managing Director: Wolfgang Denk
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-51 Fax: (+49)-8142-66989-80 Email: sr at denx.de


More information about the U-Boot mailing list