This is just enough system to boot the kernel with earlycon working. Signed-off-by: Bert Vermeulen <bert@xxxxxxxx> Signed-off-by: Sander Vanheule <sander@xxxxxxxxxxxxx> --- arch/mips/Kconfig | 21 ++++++++++++++++++ arch/mips/generic/Platform | 1 + arch/mips/include/asm/realtek/ioremap.h | 29 +++++++++++++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 arch/mips/include/asm/realtek/ioremap.h diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index 0a17bedf4f0d..0986d0c4405f 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig @@ -627,6 +627,27 @@ config RALINK select ARCH_HAS_RESET_CONTROLLER select RESET_CONTROLLER +config MACH_REALTEK_RTL + bool "Realtek RTL838x/RTL839x based machines" + select MIPS_GENERIC + select DMA_NONCOHERENT + select IRQ_MIPS_CPU + select CSRC_R4K + select CEVT_R4K + select SYS_HAS_CPU_MIPS32_R1 + select SYS_HAS_CPU_MIPS32_R2 + select SYS_SUPPORTS_BIG_ENDIAN + select SYS_SUPPORTS_32BIT_KERNEL + select SYS_SUPPORTS_MIPS16 + select SYS_SUPPORTS_MULTITHREADING + select SYS_SUPPORTS_VPE_LOADER + select SYS_HAS_EARLY_PRINTK + select SYS_HAS_EARLY_PRINTK_8250 + select USE_GENERIC_EARLY_PRINTK_8250 + select BOOT_RAW + select PINCTRL + select USE_OF + config SGI_IP22 bool "SGI IP22 (Indy/Indigo2)" select ARC_MEMORY diff --git a/arch/mips/generic/Platform b/arch/mips/generic/Platform index b871af16b5b6..5dff52295b0a 100644 --- a/arch/mips/generic/Platform +++ b/arch/mips/generic/Platform @@ -10,6 +10,7 @@ # Note: order matters, keep the asm/mach-generic include last. cflags-$(CONFIG_MACH_INGENIC_SOC) += -I$(srctree)/arch/mips/include/asm/mach-ingenic +cflags-$(CONFIG_MACH_REALTEK_RTL) += -I$(srctree)/arch/mips/include/asm/realtek cflags-$(CONFIG_MIPS_GENERIC) += -I$(srctree)/arch/mips/include/asm/mach-generic load-$(CONFIG_MIPS_GENERIC) += 0xffffffff80100000 diff --git a/arch/mips/include/asm/realtek/ioremap.h b/arch/mips/include/asm/realtek/ioremap.h new file mode 100644 index 000000000000..ea51af023e26 --- /dev/null +++ b/arch/mips/include/asm/realtek/ioremap.h @@ -0,0 +1,29 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +#ifndef _REALTEK_RTL_IOREMAP_H_ +#define _REALTEK_RTL_IOREMAP_H_ + +static inline int is_rtl8380_internal_registers(phys_addr_t offset) +{ + /* IO Block */ + if (offset >= 0xb8000000 && offset < 0xb9000000) + return 1; + /* Switch block */ + if (offset >= 0xbb000000 && offset < 0xbc000000) + return 1; + return 0; +} + +static inline void __iomem *plat_ioremap(phys_addr_t offset, unsigned long size, + unsigned long flags) +{ + if (is_rtl8380_internal_registers(offset)) + return (void __iomem *)offset; + return NULL; +} + +static inline int plat_iounmap(const volatile void __iomem *addr) +{ + return is_rtl8380_internal_registers((unsigned long)addr); +} + +#endif /* _REALTEK_RTL_IOREMAP_H_ */ -- 2.25.1