From patchwork Tue Jun 30 12:27:23 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Paul Osmialowski X-Patchwork-Id: 489685 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id F26751402AA for ; Tue, 30 Jun 2015 22:32:32 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753114AbbF3McU (ORCPT ); Tue, 30 Jun 2015 08:32:20 -0400 Received: from fish.king.net.pl ([79.190.246.46]:56892 "EHLO king.net.pl" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1752098AbbF3McJ (ORCPT ); Tue, 30 Jun 2015 08:32:09 -0400 Received: from localhost.localdomain (fish [127.0.0.1]) by king.net.pl (8.14.9/8.14.0) with ESMTP id t5UCSMcN028351 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=NO); Tue, 30 Jun 2015 14:28:22 +0200 Received: (from newchief@localhost) by localhost.localdomain (8.14.9/8.14.9/Submit) id t5UCSMIY028350; Tue, 30 Jun 2015 14:28:22 +0200 From: Paul Osmialowski To: Greg Kroah-Hartman , Ian Campbell , Jiri Slaby , Kumar Gala , Linus Walleij , Mark Rutland , Michael Turquette , Pawel Moll , Rob Herring , Russell King , Stephen Boyd , Vinod Koul , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-clk@vger.kernel.org, linux-gpio@vger.kernel.org, linux-serial@vger.kernel.org, devicetree@vger.kernel.org, dmaengine@vger.kernel.org Cc: Arnd Bergmann , Geert Uytterhoeven , Nicolas Pitre , Paul Bolle , Thomas Gleixner , Uwe Kleine-Koenig , Paul Osmialowski , Anson Huang , Frank Li , Jingchang Lu , Rob Herring , Yuri Tikhonov , Sergei Poselenov , Alexander Potashev Subject: [PATCH v2 2/9] arm: twr-k70f120m: basic support for Kinetis TWR-K70F120M Date: Tue, 30 Jun 2015 14:27:23 +0200 Message-Id: <1435667250-28299-3-git-send-email-pawelo@king.net.pl> X-Mailer: git-send-email 2.3.6 In-Reply-To: <1435667250-28299-1-git-send-email-pawelo@king.net.pl> References: <1435667250-28299-1-git-send-email-pawelo@king.net.pl> Sender: linux-gpio-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-gpio@vger.kernel.org This one was inspired by a serie of commits published on Emcraft git repo: https://github.com/EmcraftSystems/linux-emcraft.git Entry commit: f014da1df860ad702d923c95cb97e068bd302cb0 RT75957. twr-k70f120m: basic support by: Alexander Potashev Signed-off-by: Paul Osmialowski --- Documentation/devicetree/bindings/arm/fsl.txt | 6 +++++ arch/arm/Kconfig | 9 ++++++- arch/arm/Kconfig-nommu | 1 + arch/arm/Makefile | 1 + arch/arm/boot/dts/kinetis-twr-k70f120m.dts | 16 +++++++++++++ arch/arm/boot/dts/kinetis.dtsi | 5 ++++ arch/arm/mach-kinetis/Makefile | 5 ++++ arch/arm/mach-kinetis/Makefile.boot | 3 +++ arch/arm/mach-kinetis/idle.c | 27 +++++++++++++++++++++ arch/arm/mach-kinetis/kinetis.c | 34 +++++++++++++++++++++++++++ arch/arm/mm/Kconfig | 1 + 11 files changed, 107 insertions(+), 1 deletion(-) create mode 100644 arch/arm/boot/dts/kinetis-twr-k70f120m.dts create mode 100644 arch/arm/boot/dts/kinetis.dtsi create mode 100644 arch/arm/mach-kinetis/Makefile create mode 100644 arch/arm/mach-kinetis/Makefile.boot create mode 100644 arch/arm/mach-kinetis/idle.c create mode 100644 arch/arm/mach-kinetis/kinetis.c diff --git a/Documentation/devicetree/bindings/arm/fsl.txt b/Documentation/devicetree/bindings/arm/fsl.txt index 2a3ba73..36179fd 100644 --- a/Documentation/devicetree/bindings/arm/fsl.txt +++ b/Documentation/devicetree/bindings/arm/fsl.txt @@ -135,3 +135,9 @@ LS2085A ARMv8 based Simulator model Required root node properties: - compatible = "fsl,ls2085a-simu", "fsl,ls2085a"; +Freescale Kinetis SoC Device Tree Bindings +------------------------------------------ + +TWR-K70F120M Kinetis K70 based development board. +Required root node compatible properties: + - compatible = "fsl,kinetis-twr-k70f120m" diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig index a750c14..9c89bdc 100644 --- a/arch/arm/Kconfig +++ b/arch/arm/Kconfig @@ -964,6 +964,13 @@ config ARCH_EFM32 Support for Energy Micro's (now Silicon Labs) efm32 Giant Gecko processors. +config ARCH_KINETIS + bool "Freescale Kinetis MCU" + depends on ARM_SINGLE_ARMV7M + select ARMV7M_SYSTICK + help + This enables support for the Freescale Kinetis MCUs + config ARCH_LPC18XX bool "NXP LPC18xx/LPC43xx" depends on ARM_SINGLE_ARMV7M @@ -1733,7 +1740,7 @@ source "mm/Kconfig" config FORCE_MAX_ZONEORDER int "Maximum zone order" if ARCH_SHMOBILE_LEGACY range 11 64 if ARCH_SHMOBILE_LEGACY - default "12" if SOC_AM33XX + default "12" if SOC_AM33XX || ARCH_KINETIS default "9" if SA1111 || ARCH_EFM32 default "11" help diff --git a/arch/arm/Kconfig-nommu b/arch/arm/Kconfig-nommu index d081fcb..4b9aab3 100644 --- a/arch/arm/Kconfig-nommu +++ b/arch/arm/Kconfig-nommu @@ -65,6 +65,7 @@ config ARM_MPU config COPY_VECTOR_TABLE_TO_SRAM_ADDR hex 'If non-zero, copy Vector Table to this SRAM Address' if CPU_V7M + default 0x20000000 if ARCH_KINETIS default 0x00000000 depends on CPU_V7M help diff --git a/arch/arm/Makefile b/arch/arm/Makefile index 07ab3d2..e71fc01 100644 --- a/arch/arm/Makefile +++ b/arch/arm/Makefile @@ -170,6 +170,7 @@ machine-$(CONFIG_ARCH_IOP32X) += iop32x machine-$(CONFIG_ARCH_IOP33X) += iop33x machine-$(CONFIG_ARCH_IXP4XX) += ixp4xx machine-$(CONFIG_ARCH_KEYSTONE) += keystone +machine-$(CONFIG_ARCH_KINETIS) += kinetis machine-$(CONFIG_ARCH_KS8695) += ks8695 machine-$(CONFIG_ARCH_LPC18XX) += lpc18xx machine-$(CONFIG_ARCH_LPC32XX) += lpc32xx diff --git a/arch/arm/boot/dts/kinetis-twr-k70f120m.dts b/arch/arm/boot/dts/kinetis-twr-k70f120m.dts new file mode 100644 index 0000000..edccf37 --- /dev/null +++ b/arch/arm/boot/dts/kinetis-twr-k70f120m.dts @@ -0,0 +1,16 @@ +/* + * Device tree for TWR-K70F120M development board. + * + */ + +/dts-v1/; +#include "kinetis.dtsi" + +/ { + model = "Freescale TWR-K70F120M Development Kit"; + compatible = "fsl,kinetis-twr-k70f120m"; + + memory { + reg = <0x8000000 0x8000000>; + }; +}; diff --git a/arch/arm/boot/dts/kinetis.dtsi b/arch/arm/boot/dts/kinetis.dtsi new file mode 100644 index 0000000..93d2a8a --- /dev/null +++ b/arch/arm/boot/dts/kinetis.dtsi @@ -0,0 +1,5 @@ +/* + * Device tree for Freescale Kinetis SoC. + * + */ +#include "armv7-m.dtsi" diff --git a/arch/arm/mach-kinetis/Makefile b/arch/arm/mach-kinetis/Makefile new file mode 100644 index 0000000..e759d9e --- /dev/null +++ b/arch/arm/mach-kinetis/Makefile @@ -0,0 +1,5 @@ +# +# Makefile for the Freescale Kinetis platform files +# + +obj-y += kinetis.o idle.o diff --git a/arch/arm/mach-kinetis/Makefile.boot b/arch/arm/mach-kinetis/Makefile.boot new file mode 100644 index 0000000..3b442ab --- /dev/null +++ b/arch/arm/mach-kinetis/Makefile.boot @@ -0,0 +1,3 @@ + zreladdr-y := 0x08008000 +params_phys-y := 0x08000100 +initrd_phys-y := 0x08100000 diff --git a/arch/arm/mach-kinetis/idle.c b/arch/arm/mach-kinetis/idle.c new file mode 100644 index 0000000..79d2e1c --- /dev/null +++ b/arch/arm/mach-kinetis/idle.c @@ -0,0 +1,27 @@ +/* + * arch/arm/mach-kinetis/idle.c + */ + +#include +#include +#include +#include + +static void kinetis_idle(void) +{ + asm volatile ("wfi"); + + /* + * This is a dirty hack that invalidates the I/D bus cache + * on Kinetis K70. This must be done after idle. + */ + writel(readl(IOMEM(0xe0082000)) | 0x85000000, IOMEM(0xe0082000)); +} + +static int __init kinetis_idle_init(void) +{ + arm_pm_idle = kinetis_idle; + return 0; +} + +arch_initcall(kinetis_idle_init); diff --git a/arch/arm/mach-kinetis/kinetis.c b/arch/arm/mach-kinetis/kinetis.c new file mode 100644 index 0000000..45e15c6 --- /dev/null +++ b/arch/arm/mach-kinetis/kinetis.c @@ -0,0 +1,34 @@ +/* + * kinetis.c - Freescale Kinetis K70F120M Development Board + * + * Based on legacy pre-OF code by Alexander Potashev + * + * (C) Copyright 2011, 2012 + * Emcraft Systems, + * Alexander Potashev + * + * Copyright (C) 2015 Paul Osmialowski + * + * This program is free software; you can redistribute it and/or modify it under + * the terms of the GNU General Public License version 2 as published by the + * Free Software Foundation. + */ + +#include +#include +#include +#include +#include + +static const char *const kinetis_compat[] __initconst = { + "fsl,kinetis-twr-k70f120m", + NULL +}; + +/* + * Freescale Kinetis platform machine description + */ +DT_MACHINE_START(KINETIS, "Freescale Kinetis") + .dt_compat = kinetis_compat, + .restart = armv7m_restart, +MACHINE_END diff --git a/arch/arm/mm/Kconfig b/arch/arm/mm/Kconfig index 7c6b976..121b580 100644 --- a/arch/arm/mm/Kconfig +++ b/arch/arm/mm/Kconfig @@ -609,6 +609,7 @@ config CPU_V7M_NUM_IRQ depends on CPU_V7M default 90 if ARCH_STM32 default 38 if ARCH_EFM32 + default 106 if ARCH_KINETIS default 112 if SOC_VF610 default 240 help