From patchwork Thu Apr 30 14:18:59 2015 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Ulrich Hecht X-Patchwork-Id: 6304011 X-Patchwork-Delegate: horms@verge.net.au Return-Path: X-Original-To: patchwork-linux-sh@patchwork.kernel.org Delivered-To: patchwork-parsemail@patchwork1.web.kernel.org Received: from mail.kernel.org (mail.kernel.org [198.145.29.136]) by patchwork1.web.kernel.org (Postfix) with ESMTP id CB0649F373 for ; Thu, 30 Apr 2015 14:19:45 +0000 (UTC) Received: from mail.kernel.org (localhost [127.0.0.1]) by mail.kernel.org (Postfix) with ESMTP id BEC23201EC for ; Thu, 30 Apr 2015 14:19:44 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id BB4C4201F5 for ; Thu, 30 Apr 2015 14:19:43 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751798AbbD3OT1 (ORCPT ); Thu, 30 Apr 2015 10:19:27 -0400 Received: from mail-wi0-f176.google.com ([209.85.212.176]:38651 "EHLO mail-wi0-f176.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751800AbbD3OTZ (ORCPT ); Thu, 30 Apr 2015 10:19:25 -0400 Received: by wiun10 with SMTP id n10so19749535wiu.1 for ; Thu, 30 Apr 2015 07:19:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references; bh=b47BzTS7A8xqxAKmpegsCqE0515wucK1Zs46a4fHYD4=; b=oQxpcjHAPTsukg/M8SUMWD5vswM3DsRp7ov7ZM1H7x74X2H7ZQ98bWacZZznR9+0aF dJWUGpemCaov87lgIulJpEAe1rPWRVd2ZuWW0frfl5vODVcg0+WDolGPhvR5NForgqbT NKRlfJrRLBARp9S5rQMgm6mF7WY1628+VA20Jh81mojqOaHElEzm+YpMaX8FKtf24rp5 u5myS9+6FXr2TJs2pDjNA0bTWPbZCjclTE7xh9F5V6fvwH/hvm+yPqvchRVZbN1awop7 ZTbmNWxY6mJp6dAX+LJpRm+LPGEN/LjSSUAOVZRmO1ognShYRCeIiy/BsYGf4kLALf6+ 91Tg== X-Received: by 10.194.84.179 with SMTP id a19mr8939617wjz.29.1430403564223; Thu, 30 Apr 2015 07:19:24 -0700 (PDT) Received: from groucho.site ([46.166.186.249]) by mx.google.com with ESMTPSA id z13sm3508122wjr.44.2015.04.30.07.19.22 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 30 Apr 2015 07:19:23 -0700 (PDT) From: Ulrich Hecht To: geert@linux-m68k.org, horms@verge.net.au, linux-sh@vger.kernel.org Cc: magnus.damm@gmail.com, laurent.pinchart+renesas@ideasonboard.com, kuninori.morimoto.gx@renesas.com, linus.walleij@linaro.org, Ulrich Hecht , Hisashi Nakamura Subject: [PATCH v2 10/15] ARM: shmobile: r8a7793: add SMP support Date: Thu, 30 Apr 2015 16:18:59 +0200 Message-Id: <1430403544-26742-11-git-send-email-ulrich.hecht+renesas@gmail.com> X-Mailer: git-send-email 2.3.5 In-Reply-To: <1430403544-26742-1-git-send-email-ulrich.hecht+renesas@gmail.com> References: <1430403544-26742-1-git-send-email-ulrich.hecht+renesas@gmail.com> Sender: linux-sh-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-sh@vger.kernel.org X-Spam-Status: No, score=-6.8 required=5.0 tests=BAYES_00, DKIM_ADSP_CUSTOM_MED, DKIM_SIGNED, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, T_DKIM_INVALID, T_RP_MATCHES_RCVD, UNPARSEABLE_RELAY autolearn=ham version=3.3.1 X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on mail.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP Enables SMP support, similar to other R-Car Gen2 SoCs. Signed-off-by: Hisashi Nakamura [uli: moved reset handling to PM, minor adjustments] Signed-off-by: Ulrich Hecht --- arch/arm/mach-shmobile/Makefile | 1 + arch/arm/mach-shmobile/r8a7793.h | 6 +++ arch/arm/mach-shmobile/setup-r8a7793.c | 2 + arch/arm/mach-shmobile/smp-r8a7793.c | 67 ++++++++++++++++++++++++++++++++++ 4 files changed, 76 insertions(+) create mode 100644 arch/arm/mach-shmobile/r8a7793.h create mode 100644 arch/arm/mach-shmobile/smp-r8a7793.c diff --git a/arch/arm/mach-shmobile/Makefile b/arch/arm/mach-shmobile/Makefile index e4b8fdb..a8f5d5d 100644 --- a/arch/arm/mach-shmobile/Makefile +++ b/arch/arm/mach-shmobile/Makefile @@ -42,6 +42,7 @@ smp-$(CONFIG_ARCH_SH73A0) += smp-sh73a0.o headsmp-scu.o platsmp-scu.o smp-$(CONFIG_ARCH_R8A7779) += smp-r8a7779.o headsmp-scu.o platsmp-scu.o smp-$(CONFIG_ARCH_R8A7790) += smp-r8a7790.o smp-$(CONFIG_ARCH_R8A7791) += smp-r8a7791.o +smp-$(CONFIG_ARCH_R8A7793) += smp-r8a7793.o smp-$(CONFIG_ARCH_EMEV2) += smp-emev2.o headsmp-scu.o platsmp-scu.o # PM objects diff --git a/arch/arm/mach-shmobile/r8a7793.h b/arch/arm/mach-shmobile/r8a7793.h new file mode 100644 index 0000000..f961677 --- /dev/null +++ b/arch/arm/mach-shmobile/r8a7793.h @@ -0,0 +1,6 @@ +#ifndef __ASM_R8A7793_H__ +#define __ASM_R8A7793_H__ + +extern struct smp_operations r8a7793_smp_ops; + +#endif /* __ASM_R8A7793_H__ */ diff --git a/arch/arm/mach-shmobile/setup-r8a7793.c b/arch/arm/mach-shmobile/setup-r8a7793.c index 1d2825c..d20cf2a 100644 --- a/arch/arm/mach-shmobile/setup-r8a7793.c +++ b/arch/arm/mach-shmobile/setup-r8a7793.c @@ -17,6 +17,7 @@ #include #include "common.h" +#include "r8a7793.h" #include "rcar-gen2.h" static const char *r8a7793_boards_compat_dt[] __initconst = { @@ -25,6 +26,7 @@ static const char *r8a7793_boards_compat_dt[] __initconst = { }; DT_MACHINE_START(R8A7793_DT, "Generic R8A7793 (Flattened Device Tree)") + .smp = smp_ops(r8a7793_smp_ops), .init_early = shmobile_init_delay, .init_time = rcar_gen2_timer_init, .init_late = shmobile_init_late, diff --git a/arch/arm/mach-shmobile/smp-r8a7793.c b/arch/arm/mach-shmobile/smp-r8a7793.c new file mode 100644 index 0000000..59b77b2 --- /dev/null +++ b/arch/arm/mach-shmobile/smp-r8a7793.c @@ -0,0 +1,67 @@ +/* + * SMP support for r8a7793 + * + * Copyright (C) 2014 Renesas Electronics Corporation + * Copyright (C) 2015 Ulrich Hecht + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; version 2 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + */ +#include +#include +#include +#include + +#include +#include "platsmp-apmu.h" + +#include "common.h" +#include "pm-rcar.h" +#include "r8a7793.h" +#include "rcar-gen2.h" + +#define APMU 0xe6151000 +#define CA15DBGRCR 0x1180 +#define CA15RESCNT 0x0040 + +static struct rcar_apmu_config r8a7793_apmu_config[] = { + { + .iomem = DEFINE_RES_MEM(0xe6152000, 0x88), + .cpus = { 0, 1 }, + }, +}; + +static void __init r8a7793_smp_prepare_cpus(unsigned int max_cpus) +{ + void __iomem *p; + u32 val; + + /* let APMU code install data related to shmobile_boot_vector */ + shmobile_smp_apmu_prepare_cpus(max_cpus, + r8a7793_apmu_config, + ARRAY_SIZE(r8a7793_apmu_config)); + + /* setup for debug mode */ + if (rcar_gen2_read_mode_pins() & MD(21)) { + p = ioremap_nocache(APMU, 0x2000); + val = readl_relaxed(p + CA15DBGRCR); + writel_relaxed((val | 0x01f80000), p + CA15DBGRCR); + iounmap(p); + } +} + +struct smp_operations r8a7793_smp_ops __initdata = { + .smp_prepare_cpus = r8a7793_smp_prepare_cpus, + .smp_boot_secondary = shmobile_smp_apmu_boot_secondary, +#ifdef CONFIG_HOTPLUG_CPU + .cpu_disable = shmobile_smp_cpu_disable, + .cpu_die = shmobile_smp_apmu_cpu_die, + .cpu_kill = shmobile_smp_apmu_cpu_kill, +#endif +};