From: jamestai.sky@gmail.com
To: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org
Cc: Rob Herring <robh@kernel.org>,
"Jason A . Donenfeld" <Jason@zx2c4.com>,
"james.tai" <james.tai@realtek.com>,
Arnd Bergmann <arnd@arndb.de>,
Ard Biesheuvel <ard.biesheuvel@linaro.org>,
CY_Huang <cy.huang@realtek.com>,
Linus Walleij <linus.walleij@linaro.org>,
Nicolas Pitre <nico@fluxnic.net>,
Nick Desaulniers <ndesaulniers@google.com>,
Russell King <linux@armlinux.org.uk>,
Stefan Agner <stefan@agner.ch>,
Mike Rapoport <rppt@linux.ibm.com>,
Masahiro Yamada <yamada.masahiro@socionext.com>,
Paul Burton <paul.burton@mips.com>,
Benjamin Gaignard <benjamin.gaignard@linaro.org>,
Mauro Carvalho Chehab <mchehab+samsung@kernel.org>,
Doug Anderson <armlinux@m.disordat.com>,
Thierry Reding <treding@nvidia.com>,
Phinex Hung <phinex@realtek.com>
Subject: [PATCH] ARM: Add support for Realtek SOC
Date: Thu, 5 Sep 2019 13:46:47 +0800 [thread overview]
Message-ID: <20190905054647.1235-1-james.tai@realtek.com> (raw)
From: "james.tai" <james.tai@realtek.com>
This patch adds the basic machine file for
the Realtek RTD16XX platform.
Signed-off-by: james.tai <james.tai@realtek.com>
---
arch/arm/Kconfig | 2 +
arch/arm/Makefile | 2 +
arch/arm/mach-realtek/Kconfig | 32 ++++++++++++
arch/arm/mach-realtek/Makefile | 3 ++
arch/arm/mach-realtek/platsmp.c | 91 +++++++++++++++++++++++++++++++++
arch/arm/mach-realtek/platsmp.h | 7 +++
arch/arm/mach-realtek/realtek.c | 78 ++++++++++++++++++++++++++++
7 files changed, 215 insertions(+)
create mode 100644 arch/arm/mach-realtek/Kconfig
create mode 100644 arch/arm/mach-realtek/Makefile
create mode 100644 arch/arm/mach-realtek/platsmp.c
create mode 100644 arch/arm/mach-realtek/platsmp.h
create mode 100644 arch/arm/mach-realtek/realtek.c
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 33b00579beff..c7c9a3662eb7 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -836,6 +836,8 @@ source "arch/arm/mach-zx/Kconfig"
source "arch/arm/mach-zynq/Kconfig"
+source "arch/arm/mach-realtek/Kconfig"
+
# ARMv7-M architecture
config ARCH_EFM32
bool "Energy Micro efm32"
diff --git a/arch/arm/Makefile b/arch/arm/Makefile
index c3624ca6c0bc..1f0926449d47 100644
--- a/arch/arm/Makefile
+++ b/arch/arm/Makefile
@@ -148,6 +148,7 @@ endif
textofs-$(CONFIG_ARCH_MSM8X60) := 0x00208000
textofs-$(CONFIG_ARCH_MSM8960) := 0x00208000
textofs-$(CONFIG_ARCH_MESON) := 0x00208000
+textofs-$(CONFIG_ARCH_REALTEK) := 0x00208000
textofs-$(CONFIG_ARCH_AXXIA) := 0x00308000
# Machine directory name. This list is sorted alphanumerically
@@ -225,6 +226,7 @@ machine-$(CONFIG_ARCH_VT8500) += vt8500
machine-$(CONFIG_ARCH_W90X900) += w90x900
machine-$(CONFIG_ARCH_ZX) += zx
machine-$(CONFIG_ARCH_ZYNQ) += zynq
+machine-$(CONFIG_ARCH_REALTEK) += realtek
machine-$(CONFIG_PLAT_SPEAR) += spear
# Platform directory name. This list is sorted alphanumerically
diff --git a/arch/arm/mach-realtek/Kconfig b/arch/arm/mach-realtek/Kconfig
new file mode 100644
index 000000000000..a8269964dbdb
--- /dev/null
+++ b/arch/arm/mach-realtek/Kconfig
@@ -0,0 +1,32 @@
+# SPDX-License-Identifier: GPL-2.0-only
+menuconfig ARCH_REALTEK
+ bool "Realtek SoCs"
+ select ARM_GLOBAL_TIMER
+ select CLKDEV_LOOKUP
+ select HAVE_SMP
+ select HAVE_MACH_CLKDEV
+ select GENERIC_CLOCKEVENTS
+ select HAVE_SCHED_CLOCK
+ select ARCH_HAS_CPUFREQ
+ select CLKSRC_OF
+ select ARCH_REQUIRE_GPIOLIB
+ select GENERIC_IRQ_CHIP
+ select IRQ_DOMAIN
+ select PINCTRL
+ select COMMON_CLK
+ select ARCH_HAS_BARRIERS
+ select SPARSE_IRQ
+ select PM_OPP
+ select ARM_HAS_SG_CHAIN
+ select ARM_PATCH_PHYS_VIRT
+ select AUTO_ZRELADDR
+ select MIGHT_HAVE_PCI
+ select MULTI_IRQ_HANDLER
+ select PCI_DOMAINS if PCI
+ select USE_OF
+
+config ARCH_RTD16XX
+ bool "Enable support for RTD1619"
+ depends on ARCH_REALTEK
+ select ARM_GIC_V3
+ select ARM_PSCI
diff --git a/arch/arm/mach-realtek/Makefile b/arch/arm/mach-realtek/Makefile
new file mode 100644
index 000000000000..9cdc1f1f2917
--- /dev/null
+++ b/arch/arm/mach-realtek/Makefile
@@ -0,0 +1,3 @@
+# SPDX-License-Identifier: GPL-2.0-only
+obj-$(CONFIG_ARCH_REALTEK) += realtek.o
+obj-$(CONFIG_SMP) += platsmp.o
diff --git a/arch/arm/mach-realtek/platsmp.c b/arch/arm/mach-realtek/platsmp.c
new file mode 100644
index 000000000000..5c4368fe1520
--- /dev/null
+++ b/arch/arm/mach-realtek/platsmp.c
@@ -0,0 +1,91 @@
+// SPDX-License-Identifier: GPL-2.0-only
+
+/*
+ * Copyright (c) 2019 Realtek Semiconductor Corp.
+ */
+
+#include <linux/init.h>
+#include <linux/delay.h>
+#include <linux/jiffies.h>
+#include <linux/io.h>
+#include <linux/memory.h>
+#include <linux/smp.h>
+#include <linux/of.h>
+#include <linux/arm-smccc.h>
+#include <asm/smp_plat.h>
+#include <asm/cacheflush.h>
+#include <asm/cp15.h>
+#include <asm/barrier.h>
+
+#define BL31_CMD 0x8400ff04
+#define BL31_DAT 0x00001619
+#define CPUID 28
+#define CORE_PWRDN_EN 0x1
+
+#define CPUPWRCTLR __ACCESS_CP15(c15, 0, c2, 7)
+
+static u32 __iomem *cpu_release_virt;
+
+static int rtk_boot_secondary(unsigned int cpu, struct task_struct *idle)
+{
+ unsigned long entry_pa = __pa_symbol(secondary_startup);
+
+ writel_relaxed(entry_pa | (cpu << CPUID), cpu_release_virt);
+
+ arch_send_wakeup_ipi_mask(cpumask_of(cpu));
+
+ return 0;
+}
+
+void rtk_prepare_cpus(unsigned int max_cpus)
+{
+ struct device_node *np;
+ u32 release_phys;
+ int cpu;
+
+ for_each_possible_cpu(cpu) {
+
+ np = of_get_cpu_node(cpu, NULL);
+ if (!np)
+ continue;
+
+ if (of_property_read_u32(np, "cpu-release-addr", &release_phys))
+ continue;
+
+ cpu_release_virt = ioremap(release_phys, sizeof(u32));
+
+ set_cpu_present(cpu, true);
+ }
+}
+
+#ifdef CONFIG_HOTPLUG_CPU
+
+static void rtk_cpu_die(unsigned int cpu)
+{
+ struct arm_smccc_res res;
+ unsigned int cpu_pwr_ctrl;
+
+ writel_relaxed(0x0, cpu_release_virt);
+
+ /* notify BL31 cpu hotplug */
+ arm_smccc_smc(BL31_CMD, BL31_DAT, 0, 0, 0, 0, 0, 0, &res);
+ v7_exit_coherency_flush(louis);
+
+ cpu_pwr_ctrl = read_sysreg(CPUPWRCTLR);
+ cpu_pwr_ctrl |= CORE_PWRDN_EN;
+ write_sysreg(cpu_pwr_ctrl, CPUPWRCTLR);
+
+ dsb(sy);
+
+ for (;;)
+ wfi();
+}
+#endif
+
+struct smp_operations rtk_smp_ops __initdata = {
+ .smp_prepare_cpus = rtk_prepare_cpus,
+ .smp_boot_secondary = rtk_boot_secondary,
+#ifdef CONFIG_HOTPLUG_CPU
+ .cpu_die = rtk_cpu_die,
+#endif
+};
diff --git a/arch/arm/mach-realtek/platsmp.h b/arch/arm/mach-realtek/platsmp.h
new file mode 100644
index 000000000000..9c411d097c14
--- /dev/null
+++ b/arch/arm/mach-realtek/platsmp.h
@@ -0,0 +1,7 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+
+/*
+ * Copyright (c) 2019 Realtek Semiconductor Corp.
+ */
+
+extern struct smp_operations rtk_smp_ops;
diff --git a/arch/arm/mach-realtek/realtek.c b/arch/arm/mach-realtek/realtek.c
new file mode 100644
index 000000000000..d248e19f4c1d
--- /dev/null
+++ b/arch/arm/mach-realtek/realtek.c
@@ -0,0 +1,78 @@
+// SPDX-License-Identifier: GPL-2.0-only
+
+/*
+ * Copyright (c) 2019 Realtek Semiconductor Corp.
+ */
+
+#include <linux/clk-provider.h>
+#include <linux/clocksource.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/irqchip.h>
+#include <linux/of_address.h>
+#include <linux/of_irq.h>
+#include <linux/of_platform.h>
+#include <linux/io.h>
+#include <linux/memblock.h>
+#include <linux/delay.h>
+#include <linux/clockchips.h>
+#include <asm/mach/arch.h>
+#include <asm/mach/map.h>
+#include <asm/system_misc.h>
+#include <asm/system_info.h>
+
+#include "platsmp.h"
+
+#define RBUS_BASE_PHYS (0x98000000)
+#define RBUS_BASE_VIRT (0xfe000000)
+#define RBUS_BASE_SIZE (0x00100000)
+
+static struct map_desc rtk_io_desc[] __initdata = {
+ {
+ .virtual = (unsigned long) IOMEM(RBUS_BASE_VIRT),
+ .pfn = __phys_to_pfn(RBUS_BASE_PHYS),
+ .length = RBUS_BASE_SIZE,
+ .type = MT_DEVICE,
+ },
+};
+
+void __init rtk_map_io(void)
+{
+ debug_ll_io_init();
+ iotable_init(rtk_io_desc, ARRAY_SIZE(rtk_io_desc));
+}
+
+static void __init rtk_dt_init(void)
+{
+ of_platform_populate(NULL, of_default_bus_match_table, NULL, NULL);
+}
+
+static void __init rtk_timer_init(void)
+{
+#ifdef CONFIG_COMMON_CLK
+ of_clk_init(NULL);
+#endif
+ timer_probe();
+ tick_setup_hrtimer_broadcast();
+}
+
+bool __init rtk_smp_init_ops(void)
+{
+ smp_set_ops(smp_ops(rtk_smp_ops));
+
+ return true;
+}
+
+static const char *const rtd16xx_board_dt_compat[] = {
+ "realtek,rtd1619",
+ NULL,
+};
+
+DT_MACHINE_START(RTD16XX, "Realtek rtd16xx platform")
+ .map_io = rtk_map_io,
+ .init_machine = rtk_dt_init,
+ .init_time = rtk_timer_init,
+ .dt_compat = rtd16xx_board_dt_compat,
+ .smp = smp_ops(rtk_smp_ops),
+ .smp_init = smp_init_ops(rtk_smp_init_ops),
+MACHINE_END
--
2.17.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
next reply other threads:[~2019-09-05 5:49 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-09-05 5:46 jamestai.sky [this message]
2019-09-05 8:31 ` [PATCH] ARM: Add support for Realtek SOC Arnd Bergmann
2019-09-11 7:45 ` James Tai[戴志峰]
2019-09-11 8:16 ` Arnd Bergmann
2019-09-11 8:34 ` Masahiro Yamada
2019-09-23 2:32 ` James Tai
2019-09-23 2:25 ` James Tai
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190905054647.1235-1-james.tai@realtek.com \
--to=jamestai.sky@gmail.com \
--cc=Jason@zx2c4.com \
--cc=ard.biesheuvel@linaro.org \
--cc=armlinux@m.disordat.com \
--cc=arnd@arndb.de \
--cc=benjamin.gaignard@linaro.org \
--cc=cy.huang@realtek.com \
--cc=james.tai@realtek.com \
--cc=linus.walleij@linaro.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=mchehab+samsung@kernel.org \
--cc=ndesaulniers@google.com \
--cc=nico@fluxnic.net \
--cc=paul.burton@mips.com \
--cc=phinex@realtek.com \
--cc=robh@kernel.org \
--cc=rppt@linux.ibm.com \
--cc=stefan@agner.ch \
--cc=treding@nvidia.com \
--cc=yamada.masahiro@socionext.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).