mirror of
git://git.yoctoproject.org/linux-yocto.git
synced 2026-01-27 12:47:24 +01:00
mips: Add EcoNet MIPS platform support
Add platform support for EcoNet MIPS SoCs. Signed-off-by: Caleb James DeLisle <cjd@cjdns.fr> Signed-off-by: Thomas Bogendoerfer <tsbogend@alpha.franken.de>
This commit is contained in:
parent
be8b417371
commit
35fb26f94d
|
|
@ -11,6 +11,7 @@ platform-$(CONFIG_CAVIUM_OCTEON_SOC) += cavium-octeon/
|
|||
platform-$(CONFIG_EYEQ) += mobileye/
|
||||
platform-$(CONFIG_MIPS_COBALT) += cobalt/
|
||||
platform-$(CONFIG_MACH_DECSTATION) += dec/
|
||||
platform-$(CONFIG_ECONET) += econet/
|
||||
platform-$(CONFIG_MIPS_GENERIC) += generic/
|
||||
platform-$(CONFIG_MACH_JAZZ) += jazz/
|
||||
platform-$(CONFIG_LANTIQ) += lantiq/
|
||||
|
|
|
|||
|
|
@ -391,6 +391,30 @@ config MACH_DECSTATION
|
|||
|
||||
otherwise choose R3000.
|
||||
|
||||
config ECONET
|
||||
bool "EcoNet MIPS family"
|
||||
select BOOT_RAW
|
||||
select CPU_BIG_ENDIAN
|
||||
select DEBUG_ZBOOT
|
||||
select EARLY_PRINTK_8250
|
||||
select ECONET_EN751221_TIMER
|
||||
select SERIAL_OF_PLATFORM
|
||||
select SYS_SUPPORTS_BIG_ENDIAN
|
||||
select SYS_HAS_CPU_MIPS32_R1
|
||||
select SYS_HAS_CPU_MIPS32_R2
|
||||
select SYS_HAS_EARLY_PRINTK
|
||||
select SYS_SUPPORTS_32BIT_KERNEL
|
||||
select SYS_SUPPORTS_MIPS16
|
||||
select SYS_SUPPORTS_ZBOOT_UART16550
|
||||
select USE_GENERIC_EARLY_PRINTK_8250
|
||||
select USE_OF
|
||||
help
|
||||
EcoNet EN75xx MIPS devices are big endian MIPS machines used
|
||||
in XPON (fiber) and DSL applications. They have SPI, PCI, USB,
|
||||
GPIO, and Ethernet, with optional XPON, DSL, and VoIP DSP cores.
|
||||
Don't confuse these with the Airoha ARM devices sometimes referred
|
||||
to as "EcoNet", this family is for MIPS based devices only.
|
||||
|
||||
config MACH_JAZZ
|
||||
bool "Jazz family of machines"
|
||||
select ARC_MEMORY
|
||||
|
|
@ -1021,6 +1045,7 @@ source "arch/mips/ath79/Kconfig"
|
|||
source "arch/mips/bcm47xx/Kconfig"
|
||||
source "arch/mips/bcm63xx/Kconfig"
|
||||
source "arch/mips/bmips/Kconfig"
|
||||
source "arch/mips/econet/Kconfig"
|
||||
source "arch/mips/generic/Kconfig"
|
||||
source "arch/mips/ingenic/Kconfig"
|
||||
source "arch/mips/jazz/Kconfig"
|
||||
|
|
|
|||
|
|
@ -20,6 +20,11 @@
|
|||
#define PORT(offset) (CKSEG1ADDR(INGENIC_UART_BASE_ADDR) + (4 * offset))
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_ECONET
|
||||
#define EN75_UART_BASE 0x1fbf0003
|
||||
#define PORT(offset) (CKSEG1ADDR(EN75_UART_BASE) + (4 * (offset)))
|
||||
#endif
|
||||
|
||||
#ifndef IOTYPE
|
||||
#define IOTYPE char
|
||||
#endif
|
||||
|
|
|
|||
37
arch/mips/econet/Kconfig
Normal file
37
arch/mips/econet/Kconfig
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
# SPDX-License-Identifier: GPL-2.0
|
||||
if ECONET
|
||||
|
||||
choice
|
||||
prompt "EcoNet SoC selection"
|
||||
default SOC_ECONET_EN751221
|
||||
help
|
||||
Select EcoNet MIPS SoC type. Individual SoCs within a family are
|
||||
very similar, so is it enough to select the right family, and
|
||||
then customize to the specific SoC using the device tree only.
|
||||
|
||||
config SOC_ECONET_EN751221
|
||||
bool "EN751221 family"
|
||||
select COMMON_CLK
|
||||
select ECONET_EN751221_INTC
|
||||
select IRQ_MIPS_CPU
|
||||
select SMP
|
||||
select SMP_UP
|
||||
select SYS_SUPPORTS_SMP
|
||||
help
|
||||
The EN751221 family includes EN7512, RN7513, EN7521, EN7526.
|
||||
They are based on single core MIPS 34Kc processors. To boot
|
||||
this kernel, you will need a device tree such as
|
||||
MIPS_RAW_APPENDED_DTB=y, and a root filesystem.
|
||||
endchoice
|
||||
|
||||
choice
|
||||
prompt "Devicetree selection"
|
||||
default DTB_ECONET_NONE
|
||||
help
|
||||
Select the devicetree.
|
||||
|
||||
config DTB_ECONET_NONE
|
||||
bool "None"
|
||||
endchoice
|
||||
|
||||
endif
|
||||
2
arch/mips/econet/Makefile
Normal file
2
arch/mips/econet/Makefile
Normal file
|
|
@ -0,0 +1,2 @@
|
|||
|
||||
obj-y := init.o
|
||||
5
arch/mips/econet/Platform
Normal file
5
arch/mips/econet/Platform
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
# To address a 7.2MB kernel size limit in the EcoNet SDK bootloader,
|
||||
# we put the load address well above where the bootloader loads and then use
|
||||
# zboot. So please set CONFIG_ZBOOT_LOAD_ADDRESS to the address where your
|
||||
# bootloader actually places the kernel.
|
||||
load-$(CONFIG_ECONET) += 0xffffffff81000000
|
||||
78
arch/mips/econet/init.c
Normal file
78
arch/mips/econet/init.c
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
// SPDX-License-Identifier: GPL-2.0-only
|
||||
/*
|
||||
* EcoNet setup code
|
||||
*
|
||||
* Copyright (C) 2025 Caleb James DeLisle <cjd@cjdns.fr>
|
||||
*/
|
||||
|
||||
#include <linux/init.h>
|
||||
#include <linux/of_clk.h>
|
||||
#include <linux/irqchip.h>
|
||||
|
||||
#include <asm/addrspace.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/bootinfo.h>
|
||||
#include <asm/time.h>
|
||||
#include <asm/prom.h>
|
||||
#include <asm/smp-ops.h>
|
||||
#include <asm/reboot.h>
|
||||
|
||||
#define CR_AHB_RSTCR ((void __iomem *)CKSEG1ADDR(0x1fb00040))
|
||||
#define RESET BIT(31)
|
||||
|
||||
#define UART_BASE CKSEG1ADDR(0x1fbf0003)
|
||||
#define UART_REG_SHIFT 2
|
||||
|
||||
static void hw_reset(char *command)
|
||||
{
|
||||
iowrite32(RESET, CR_AHB_RSTCR);
|
||||
}
|
||||
|
||||
/* 1. Bring up early printk. */
|
||||
void __init prom_init(void)
|
||||
{
|
||||
setup_8250_early_printk_port(UART_BASE, UART_REG_SHIFT, 0);
|
||||
_machine_restart = hw_reset;
|
||||
}
|
||||
|
||||
/* 2. Parse the DT and find memory */
|
||||
void __init plat_mem_setup(void)
|
||||
{
|
||||
void *dtb;
|
||||
|
||||
set_io_port_base(KSEG1);
|
||||
|
||||
dtb = get_fdt();
|
||||
if (!dtb)
|
||||
panic("no dtb found");
|
||||
|
||||
__dt_setup_arch(dtb);
|
||||
|
||||
early_init_dt_scan_memory();
|
||||
}
|
||||
|
||||
/* 3. Overload __weak device_tree_init(), add SMP_UP ops */
|
||||
void __init device_tree_init(void)
|
||||
{
|
||||
unflatten_and_copy_device_tree();
|
||||
|
||||
register_up_smp_ops();
|
||||
}
|
||||
|
||||
const char *get_system_type(void)
|
||||
{
|
||||
return "EcoNet-EN75xx";
|
||||
}
|
||||
|
||||
/* 4. Initialize the IRQ subsystem */
|
||||
void __init arch_init_irq(void)
|
||||
{
|
||||
irqchip_init();
|
||||
}
|
||||
|
||||
/* 5. Timers */
|
||||
void __init plat_time_init(void)
|
||||
{
|
||||
of_clk_init(NULL);
|
||||
timer_probe();
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user