Received: by 2002:a05:6a10:a0d1:0:0:0:0 with SMTP id j17csp2208323pxa; Mon, 3 Aug 2020 10:04:29 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyUBfKRFioAbG5P6fY180IESRSxAy0Tx3oNKBbwlV057+lg2E3oNIHgFSodpU6JSyyEJgO5 X-Received: by 2002:a17:906:3715:: with SMTP id d21mr17318212ejc.281.1596474269704; Mon, 03 Aug 2020 10:04:29 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1596474269; cv=none; d=google.com; s=arc-20160816; b=kHYWHNj+iWOa+lOTXUIn4YXoP++mY6qjEiAmwWUFAm77aQPuahr9Ka29KO6IsYvYSI k5JWwS+8ePchNoUSbATAwK83P+PvvwKHXgwVsI+DMZrZEOp3NDKyANjKSWOW+SC1mlBN 8ZNb0NxoXVV/LjLdE5pGWmt7NQMFw+pppafLdO5SzSmkcKLcCs+QgKTiTRe1pscj3V1L p4qRwsWAKRKr7/O0s8s4yGX0AONqViZIY4bomi65Zitay+hG4iZ6Qs4oEWSJ9C2BhZqi v/4pDZXdKp95JdOhhgLXCaJ/kpHWZHIYFmh99qEZRLG3l6bCsgEO2lWMB/94NhaTvT71 p2Ww== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=C8j2u/CPkvrVLUWxE49Hnc+w7ysparO3D0ir2tg24EE=; b=D7jXaCthsKnnS69JY0ss7c4R/DmAnOgNzfUVzT/8StIibMpiQ83HmbCMCP/oQ8CpSC r0OOH9qKyjU6k1Rh2g21MnJARt+QFX2NlryVaYS1OUBWWKKoMUfk+2imjZWWgn2x4oG5 fwnwfslhwSsdXeg/f6e2kwRKyxcDCrvxUZNqeeCGB57+yPVpe1ElAOT67FgsVs8ORbbg MIH9nTeKY5qtB5ienlLZl12wVyR+1DaKx3J4OBVJtwQ9fXRW6xtZ6x1OSJbrSZ+x7qY+ suOZTe/pq26AAbxS1Dfi5qASzbwG1MDllK/k1hAH/5ubark1Kxbg/dKl1CrUabCHxxuS twfA== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@crapouillou.net header.s=mail header.b="G+vm/zuO"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=crapouillou.net Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id e6si11590987edv.187.2020.08.03.10.04.06; Mon, 03 Aug 2020 10:04:29 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=fail header.i=@crapouillou.net header.s=mail header.b="G+vm/zuO"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=crapouillou.net Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728406AbgHCRDC (ORCPT + 99 others); Mon, 3 Aug 2020 13:03:02 -0400 Received: from crapouillou.net ([89.234.176.41]:38116 "EHLO crapouillou.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726878AbgHCRDB (ORCPT ); Mon, 3 Aug 2020 13:03:01 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=crapouillou.net; s=mail; t=1596474111; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=C8j2u/CPkvrVLUWxE49Hnc+w7ysparO3D0ir2tg24EE=; b=G+vm/zuO4KpKV8lqO3sChkyQuvMwNQMv+CD/PN0CC8S7dNy0yO+5Q/ktwhps6JjXCatdEM 6li2x+HogjTJfXVBEVhggEQOJy2viyMbxePZOLK+Zok5XFxDDJtVf7YkRfNqAdZGuDDOZ8 bUducvqbY0pnXKV8hTZc6XlQQvV6F5M= From: Paul Cercueil To: Thomas Bogendoerfer Cc: Paul Burton , Krzysztof Kozlowski , =?UTF-8?q?=E5=91=A8=E7=90=B0=E6=9D=B0?= , od@zcrc.me, linux-kernel@vger.kernel.org, linux-mips@vger.kernel.org, Paul Cercueil Subject: [PATCH 10/13] MIPS: generic: Add support for Ingenic SoCs Date: Mon, 3 Aug 2020 19:01:21 +0200 Message-Id: <20200803170124.231110-11-paul@crapouillou.net> In-Reply-To: <20200803170124.231110-1-paul@crapouillou.net> References: <20200803170124.231110-1-paul@crapouillou.net> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add support for Ingenic SoCs in arch/mips/generic/. The Kconfig changes are here to ensure that it is possible to compile either a generic kernel that supports Ingenic SoCs, or a Ingenic-only kernel, both using the same code base, to avoid duplicated code. Signed-off-by: Paul Cercueil --- arch/mips/Kbuild.platforms | 1 - arch/mips/Kconfig | 32 +++++---- arch/mips/generic/Kconfig | 6 ++ arch/mips/generic/Makefile | 1 + arch/mips/generic/board-ingenic.c | 108 ++++++++++++++++++++++++++++++ arch/mips/jz4740/Kconfig | 16 +++-- 6 files changed, 146 insertions(+), 18 deletions(-) create mode 100644 arch/mips/generic/board-ingenic.c diff --git a/arch/mips/Kbuild.platforms b/arch/mips/Kbuild.platforms index a13c4cf6e608..949222c09927 100644 --- a/arch/mips/Kbuild.platforms +++ b/arch/mips/Kbuild.platforms @@ -13,7 +13,6 @@ platform-$(CONFIG_MIPS_COBALT) += cobalt/ platform-$(CONFIG_MACH_DECSTATION) += dec/ platform-$(CONFIG_MIPS_GENERIC) += generic/ platform-$(CONFIG_MACH_JAZZ) += jazz/ -platform-$(CONFIG_MACH_INGENIC) += jz4740/ platform-$(CONFIG_LANTIQ) += lantiq/ platform-$(CONFIG_MACH_LOONGSON2EF) += loongson2ef/ platform-$(CONFIG_MACH_LOONGSON32) += loongson32/ diff --git a/arch/mips/Kconfig b/arch/mips/Kconfig index 0206d86dab7f..0c70cb159e8f 100644 --- a/arch/mips/Kconfig +++ b/arch/mips/Kconfig @@ -97,6 +97,23 @@ config MIPS_FIXUP_BIGPHYS_ADDR config MIPS_GENERIC bool +config MACH_INGENIC + bool + select SYS_SUPPORTS_32BIT_KERNEL + select SYS_SUPPORTS_LITTLE_ENDIAN + select SYS_SUPPORTS_ZBOOT + select CPU_SUPPORTS_HUGEPAGES + select DMA_NONCOHERENT + select IRQ_MIPS_CPU + select PINCTRL + select GPIOLIB + select COMMON_CLK + select GENERIC_IRQ_CHIP + select BUILTIN_DTB if MIPS_NO_APPENDED_DTB + select USE_OF + select CPU_SUPPORTS_CPUFREQ + select MIPS_EXTERNAL_TIMER + menu "Machine selection" choice @@ -394,20 +411,11 @@ config MACH_JAZZ Members include the Acer PICA, MIPS Magnum 4000, MIPS Millennium and Olivetti M700-10 workstations. -config MACH_INGENIC +config MACH_INGENIC_SOC bool "Ingenic SoC based machines" - select SYS_SUPPORTS_32BIT_KERNEL - select SYS_SUPPORTS_LITTLE_ENDIAN + select MIPS_GENERIC + select MACH_INGENIC select SYS_SUPPORTS_ZBOOT_UART16550 - select CPU_SUPPORTS_HUGEPAGES - select DMA_NONCOHERENT - select IRQ_MIPS_CPU - select PINCTRL - select GPIOLIB - select COMMON_CLK - select GENERIC_IRQ_CHIP - select BUILTIN_DTB if MIPS_NO_APPENDED_DTB - select USE_OF config LANTIQ bool "Lantiq based platforms" diff --git a/arch/mips/generic/Kconfig b/arch/mips/generic/Kconfig index 5216c850b7e2..55d9aed7ced9 100644 --- a/arch/mips/generic/Kconfig +++ b/arch/mips/generic/Kconfig @@ -73,6 +73,12 @@ config FIT_IMAGE_FDT_OCELOT from Microsemi in the FIT kernel image. This requires u-boot on the platform. +config BOARD_INGENIC + bool "Support boards based on Ingenic SoCs" + select MACH_INGENIC_GENERIC + help + Enable support for boards based on Ingenic SoCs. + config VIRT_BOARD_RANCHU bool "Support Ranchu platform for Android emulator" help diff --git a/arch/mips/generic/Makefile b/arch/mips/generic/Makefile index f49aeede93c2..0e6feb3f43ae 100644 --- a/arch/mips/generic/Makefile +++ b/arch/mips/generic/Makefile @@ -10,4 +10,5 @@ obj-y += irq.o obj-$(CONFIG_YAMON_DT_SHIM) += yamon-dt.o obj-$(CONFIG_LEGACY_BOARD_SEAD3) += board-sead3.o obj-$(CONFIG_LEGACY_BOARD_OCELOT) += board-ocelot.o +obj-$(CONFIG_MACH_INGENIC) += board-ingenic.o obj-$(CONFIG_VIRT_BOARD_RANCHU) += board-ranchu.o diff --git a/arch/mips/generic/board-ingenic.c b/arch/mips/generic/board-ingenic.c new file mode 100644 index 000000000000..bb50eb2eed5b --- /dev/null +++ b/arch/mips/generic/board-ingenic.c @@ -0,0 +1,108 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Support for Ingenic SoCs + * + * Copyright (C) 2009-2010, Lars-Peter Clausen + * Copyright (C) 2011, Maarten ter Huurne + * Copyright (C) 2020 Paul Cercueil + */ + +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +static __init const void *ingenic_fixup_fdt(const void *fdt, const void *match_data) +{ + /* + * Old devicetree files for the qi,lb60 board did not have a /memory + * node. Hardcode the memory info here. + */ + if (!fdt_node_check_compatible(fdt, 0, "qi,lb60") && + fdt_path_offset(fdt, "/memory") < 0) + early_init_dt_add_memory_arch(0, SZ_32M); + + mips_machtype = (enum ingenic_machine_type)match_data; + + return fdt; +} + +static const char *ingenic_get_system_type(struct device_node *dtb) +{ + switch (mips_machtype) { + case MACH_INGENIC_X1830: + return "X1830"; + case MACH_INGENIC_X1000: + return "X1000"; + case MACH_INGENIC_JZ4780: + return "JZ4780"; + case MACH_INGENIC_JZ4770: + return "JZ4770"; + case MACH_INGENIC_JZ4725B: + return "JZ4725B"; + default: + return "JZ4740"; + } +} + +static const struct of_device_id ingenic_of_match[] __initconst = { + { .compatible = "ingenic,jz4740", .data = (void *)MACH_INGENIC_JZ4740 }, + { .compatible = "ingenic,jz4725b", .data = (void *)MACH_INGENIC_JZ4725B }, + { .compatible = "ingenic,jz4770", .data = (void *)MACH_INGENIC_JZ4770 }, + { .compatible = "ingenic,jz4780", .data = (void *)MACH_INGENIC_JZ4780 }, + { .compatible = "ingenic,x1000", .data = (void *)MACH_INGENIC_X1000 }, + { .compatible = "ingenic,x1830", .data = (void *)MACH_INGENIC_X1830 }, + {} +}; + +MIPS_MACHINE(ingenic) = { + .matches = ingenic_of_match, + .fixup_fdt = ingenic_fixup_fdt, + .get_system_type = ingenic_get_system_type, +}; + +static void ingenic_wait_instr(void) +{ + __asm__(".set push;\n" + ".set mips3;\n" + "wait;\n" + ".set pop;\n" + ); +} + +static void ingenic_halt(void) +{ + for (;;) + ingenic_wait_instr(); +} + +static int __maybe_unused ingenic_pm_enter(suspend_state_t state) +{ + ingenic_wait_instr(); + + return 0; +} + +static const struct platform_suspend_ops ingenic_pm_ops __maybe_unused = { + .valid = suspend_valid_only_mem, + .enter = ingenic_pm_enter, +}; + +static int __init ingenic_pm_init(void) +{ + if (boot_cpu_type() == CPU_XBURST) { + if (IS_ENABLED(CONFIG_PM_SLEEP)) + suspend_set_ops(&ingenic_pm_ops); + _machine_halt = ingenic_halt; + } + + return 0; + +} +late_initcall(ingenic_pm_init); diff --git a/arch/mips/jz4740/Kconfig b/arch/mips/jz4740/Kconfig index c2a6fbf8e411..3238e16febd5 100644 --- a/arch/mips/jz4740/Kconfig +++ b/arch/mips/jz4740/Kconfig @@ -1,15 +1,21 @@ # SPDX-License-Identifier: GPL-2.0 + +config MACH_INGENIC_GENERIC + bool + select MACH_INGENIC + select MACH_JZ4740 + select MACH_JZ4770 + select MACH_JZ4780 + select MACH_X1000 + choice prompt "Machine type" - depends on MACH_INGENIC + depends on MACH_INGENIC_SOC default INGENIC_GENERIC_BOARD config INGENIC_GENERIC_BOARD bool "Generic board" - select MACH_JZ4740 - select MACH_JZ4770 - select MACH_JZ4780 - select MACH_X1000 + select MACH_INGENIC_GENERIC config JZ4740_QI_LB60 bool "Qi Hardware Ben NanoNote" -- 2.27.0