Received: by 2002:ac0:a5b6:0:0:0:0:0 with SMTP id m51-v6csp1201208imm; Tue, 5 Jun 2018 10:35:12 -0700 (PDT) X-Google-Smtp-Source: ADUXVKJiv3mLe9r03mFg8qnYU86C3a5zTnR4uwRe3jd9uggyksALpdg7oEktju1cl3AsSVYviCH/ X-Received: by 2002:a65:520c:: with SMTP id o12-v6mr14042540pgp.15.1528220112225; Tue, 05 Jun 2018 10:35:12 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1528220112; cv=none; d=google.com; s=arc-20160816; b=ZYQ/wi0EuPql3urycjYW9ygJBU4FyvaDxmK0m7BbzIa3c29l3p8y+yzw+VkS/tqWOb uRENpsvbC5hwK8wKQwFOx/1LBeBYIzjnnIFtzK4vS2Jfp4eG9xKALuqs7mv/9NcWrvBM wycXlZIO3ilQ27EDuXPsOjm8Bwoql7XmN2mPOhI/EFaKJViypqmQW2pXgDzXaL1dOSP9 KH3/DjKfb8yA+eOtWBF4Kavzaw/MF0JYC76w+AGHkzrE0zZ1oy3VxNAfz0B2oSHVLtdW uubsgssexAORmoUQ84FobCKS6TbOJ3polYUv4qR6P2Mf34GHO+iXHw7UxLVK2vx8ke/L dCpg== 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 :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject:dkim-signature :arc-authentication-results; bh=PIysd3JXaZhd1/qzzJSwAJHRqAeRPoY3Qh5eVW7zHl4=; b=v0wkICw4Et1C9ytNXrZEU421xRvNMPIhPrnhnGuoJXZP5PmLCYi11WJd5mAcJtEReZ iAmZ427SHAi1P2qae+BPIpDP+RHyD43XbfLGDLCtpr924zgweAcsOjZS/aMHXz3HsyPM jacKkHh1LoD17pvtjNvSoFTXTLQMmj4u7VWeG58aw9uGuQaNZMKfgY6GZmfdzVlX73fH LYZr2Td4PVOuEGT0PB0vuHOVhmrIUH9xSvke35d61vqg/QH9e1z9FCOssLdlC7W2YoqG TjXyOEADorCrd8ZHfGydxi+5tapW2O53UnP6cAPIbYW5dYKKinpnkDHQIptDQLE4181y OBMQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=lG0dYUkU; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id t5-v6si29406965plj.112.2018.06.05.10.34.57; Tue, 05 Jun 2018 10:35:12 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20161025 header.b=lG0dYUkU; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751895AbeFEReb (ORCPT + 99 others); Tue, 5 Jun 2018 13:34:31 -0400 Received: from mail-pf0-f195.google.com ([209.85.192.195]:43515 "EHLO mail-pf0-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751764AbeFERe3 (ORCPT ); Tue, 5 Jun 2018 13:34:29 -0400 Received: by mail-pf0-f195.google.com with SMTP id j20-v6so1650255pff.10; Tue, 05 Jun 2018 10:34:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=PIysd3JXaZhd1/qzzJSwAJHRqAeRPoY3Qh5eVW7zHl4=; b=lG0dYUkU5waOFp4OpRG22zowUy4gpnP6AiP5DcIbvVzFv5lFcmsYQM0PnrtHg/1rym UjSzAkO4Ndc9MtbEVWEeLWbBU6J/0wCmLSZ/8lwp+4umKv5z5dICvQ1QvoQjVdF/LObG 75h793RNML4bpoCwdwHnBAj4pTZ8lKrt3+zvcQutvrcm49Jtia1dr3yRXrYFta42LY42 6CsEqugpbLNcwvlQJvW4aFdTRfSI4RkoX4XwzrIilCiLCxMfmP4oc91Bx5KS2iyoer2z KvJyI9FICVYJIzIubV6RVA3qRXoU53njFg8vPN1uwNMIPqii5w0KuNB4x0Y5TA2U1nZt BxNg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=PIysd3JXaZhd1/qzzJSwAJHRqAeRPoY3Qh5eVW7zHl4=; b=b84N6ao9HmHKANHYmNYI7zp/DqUiuFG3yRlXzMu01LOM0c7hDCKCoDsz5wNq2RZ2Du f7m+GTPqNmfGeL0uDvxJkV+EGLr0NGk7CRIygzj84HT0AUrqZEySNVCAp0Ux9e6DoPHJ rDxse3fO/blMsz0A7I3pCF/Uhyw5W1MiTCNZr1VkKZQzl4zPGkTjQAvUSC1dsWL9ul7p acq6Uy2Uj4ht5EGpOU07+0UnGDJnlowz3eS3TcPSZmE5NtqqGAeCK5ULdHwZOOHg2QCi kJHq4ghc2hL+ozJjAOV1f8ELmJJq9G9lO1ThY/+MTvWAX+j8/nzH+ZI/jWICGfvpPSWY RC5Q== X-Gm-Message-State: ALKqPwfP/As9HbmpSMRChKDFXCrIoQjjCfhUktuHfmMYwMAkBGlv9ZIO FM0GgbFTXy9ctck+FfKsYquAT38B X-Received: by 2002:a63:3807:: with SMTP id f7-v6mr21662692pga.446.1528220068386; Tue, 05 Jun 2018 10:34:28 -0700 (PDT) Received: from [192.168.1.70] (c-24-6-192-50.hsd1.ca.comcast.net. [24.6.192.50]) by smtp.gmail.com with ESMTPSA id c74-v6sm15295250pfd.19.2018.06.05.10.34.26 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 05 Jun 2018 10:34:27 -0700 (PDT) Subject: Re: [PATCH v4 2/3] arm: shmobile: Add the R9A06G032 SMP enabler driver To: Michel Pollet , linux-renesas-soc@vger.kernel.org, Simon Horman Cc: Michel Pollet , Mark Rutland , phil.edworthy@renesas.com, Florian Fainelli , Rajendra Nayak , devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, Stefan Wahren , Magnus Damm , Russell King , Douglas Anderson , Chen-Yu Tsai , Rob Herring , Carlo Caione , =?UTF-8?Q?Andreas_F=c3=a4rber?= , Frank Rowand , linux-arm-kernel@lists.infradead.org References: <1528198148-23308-1-git-send-email-michel.pollet@bp.renesas.com> <1528198148-23308-3-git-send-email-michel.pollet@bp.renesas.com> From: Frank Rowand Message-ID: <0481173f-6384-98d6-707c-89dc5ef103f0@gmail.com> Date: Tue, 5 Jun 2018 10:34:26 -0700 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.8.0 MIME-Version: 1.0 In-Reply-To: <1528198148-23308-3-git-send-email-michel.pollet@bp.renesas.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 06/05/18 04:28, Michel Pollet wrote: > The Renesas R9A06G032 second CA7 is parked in a ROM pen at boot time, it > requires a special enable method to get it started. > > Signed-off-by: Michel Pollet > --- > arch/arm/mach-shmobile/Makefile | 1 + > arch/arm/mach-shmobile/smp-r9a06g032.c | 79 ++++++++++++++++++++++++++++++++++ > 2 files changed, 80 insertions(+) > create mode 100644 arch/arm/mach-shmobile/smp-r9a06g032.c > > diff --git a/arch/arm/mach-shmobile/Makefile b/arch/arm/mach-shmobile/Makefile > index 1939f52..d7fc98f 100644 > --- a/arch/arm/mach-shmobile/Makefile > +++ b/arch/arm/mach-shmobile/Makefile > @@ -34,6 +34,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_R9A06G032) += smp-r9a06g032.o > smp-$(CONFIG_ARCH_EMEV2) += smp-emev2.o headsmp-scu.o platsmp-scu.o > > # PM objects > diff --git a/arch/arm/mach-shmobile/smp-r9a06g032.c b/arch/arm/mach-shmobile/smp-r9a06g032.c > new file mode 100644 > index 0000000..cd40e6e > --- /dev/null > +++ b/arch/arm/mach-shmobile/smp-r9a06g032.c > @@ -0,0 +1,79 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* > + * R9A06G032 Second CA7 enabler. > + * > + * Copyright (C) 2018 Renesas Electronics Europe Limited > + * > + * Michel Pollet , > + * Derived from action,s500-smp > + */ > + > +#include > +#include > +#include > +#include > + > +/* > + * The second CPU is parked in ROM at boot time. It requires waking it after > + * writing an address into the BOOTADDR register of sysctrl. > + * > + * So the default value of the "cpu-release-addr" corresponds to BOOTADDR... > + * > + * *However* the BOOTADDR register is not available when the kernel > + * starts in NONSEC mode. > + * > + * So for NONSEC mode, the bootloader re-parks the second CPU into a pen > + * in SRAM, and changes the "cpu-release-addr" of linux's DT to a SRAM address, > + * which is not restricted. The binding document for cpu-release-addr does not have a definition for 32 bit arm. The existing definition is only 64 bit arm. Please add the definition for 32 bit arm to patch 1. -Frank > + */ > + > +static void __iomem *cpu_bootaddr; > + > +static DEFINE_SPINLOCK(cpu_lock); > + > +static int r9a06g032_smp_boot_secondary(unsigned int cpu, struct task_struct *idle) > +{ > + if (!cpu_bootaddr) > + return -ENODEV; > + > + spin_lock(&cpu_lock); > + > + writel(__pa_symbol(secondary_startup), cpu_bootaddr); > + arch_send_wakeup_ipi_mask(cpumask_of(cpu)); > + > + spin_unlock(&cpu_lock); > + > + return 0; > +} > + > +static void __init r9a06g032_smp_prepare_cpus(unsigned int max_cpus) > +{ > + struct device_node *dn; > + int ret; > + u32 bootaddr; > + > + dn = of_get_cpu_node(1, NULL); > + if (!dn) { > + pr_err("CPU#1: missing device tree node\n"); > + return; > + } > + /* > + * Determine the address from which the CPU is polling. > + * The bootloader *does* change this property > + */ > + ret = of_property_read_u32(dn, "cpu-release-addr", &bootaddr); > + of_node_put(dn); > + if (ret) { > + pr_err("CPU#1: invalid cpu-release-addr property\n"); > + return; > + } > + pr_info("CPU#1: cpu-release-addr %08x\n", bootaddr); > + > + cpu_bootaddr = ioremap(bootaddr, sizeof(bootaddr)); > +} > + > +static const struct smp_operations r9a06g032_smp_ops __initconst = { > + .smp_prepare_cpus = r9a06g032_smp_prepare_cpus, > + .smp_boot_secondary = r9a06g032_smp_boot_secondary, > +}; > +CPU_METHOD_OF_DECLARE(r9a06g032_smp, "renesas,r9a06g032-smp", &r9a06g032_smp_ops); >