[{"id":1762683,"web_url":"http://patchwork.ozlabs.org/comment/1762683/","msgid":"<CAP6Zq1i98sUmJW8j2=5WRomBchmVSBmHEfb3Vn18-r-zPrZG=Q@mail.gmail.com>","list_archive_url":null,"date":"2017-09-04T14:24:05","subject":"Re: [PATCH v2 1/3] arm: npcm: add basic support for Nuvoton BMCs","submitter":{"id":72291,"url":"http://patchwork.ozlabs.org/api/people/72291/","name":"Tomer Maimon","email":"tmaimon77@gmail.com"},"content":"On 1 September 2017 at 01:53, Brendan Higgins <brendanhiggins@google.com> wrote:\n> Adds basic support for the Nuvoton NPCM750 BMC.\n>\n> Signed-off-by: Brendan Higgins <brendanhiggins@google.com>\n> ---\n>  arch/arm/Kconfig             |   2 +\n>  arch/arm/Makefile            |   1 +\n>  arch/arm/mach-npcm/Kconfig   |  58 +++++++++++++++\n>  arch/arm/mach-npcm/Makefile  |   3 +\n>  arch/arm/mach-npcm/headsmp.S | 120 +++++++++++++++++++++++++++++++\n>  arch/arm/mach-npcm/npcm7xx.c |  34 +++++++++\n>  arch/arm/mach-npcm/platsmp.c | 168 +++++++++++++++++++++++++++++++++++++++++++\n>  7 files changed, 386 insertions(+)\n>  create mode 100644 arch/arm/mach-npcm/Kconfig\n>  create mode 100644 arch/arm/mach-npcm/Makefile\n>  create mode 100644 arch/arm/mach-npcm/headsmp.S\n>  create mode 100644 arch/arm/mach-npcm/npcm7xx.c\n>  create mode 100644 arch/arm/mach-npcm/platsmp.c\n>\n> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig\n> index 61a0cb15067e..05543f1cfbde 100644\n> --- a/arch/arm/Kconfig\n> +++ b/arch/arm/Kconfig\n> @@ -782,6 +782,8 @@ source \"arch/arm/mach-netx/Kconfig\"\n>\n>  source \"arch/arm/mach-nomadik/Kconfig\"\n>\n> +source \"arch/arm/mach-npcm/Kconfig\"\n> +\n>  source \"arch/arm/mach-nspire/Kconfig\"\n>\n>  source \"arch/arm/plat-omap/Kconfig\"\n> diff --git a/arch/arm/Makefile b/arch/arm/Makefile\n> index 47d3a1ab08d2..60ca50c7d762 100644\n> --- a/arch/arm/Makefile\n> +++ b/arch/arm/Makefile\n> @@ -191,6 +191,7 @@ machine-$(CONFIG_ARCH_MEDIATEK)             += mediatek\n>  machine-$(CONFIG_ARCH_MXS)             += mxs\n>  machine-$(CONFIG_ARCH_NETX)            += netx\n>  machine-$(CONFIG_ARCH_NOMADIK)         += nomadik\n> +machine-$(CONFIG_ARCH_NPCM)            += npcm\n>  machine-$(CONFIG_ARCH_NSPIRE)          += nspire\n>  machine-$(CONFIG_ARCH_OXNAS)           += oxnas\n>  machine-$(CONFIG_ARCH_OMAP1)           += omap1\n> diff --git a/arch/arm/mach-npcm/Kconfig b/arch/arm/mach-npcm/Kconfig\n> new file mode 100644\n> index 000000000000..a45670e516b4\n> --- /dev/null\n> +++ b/arch/arm/mach-npcm/Kconfig\n> @@ -0,0 +1,58 @@\n> +menuconfig ARCH_NPCM\n> +       bool \"Nuvoton NPCM Architecture\"\n> +       select ARCH_REQUIRE_GPIOLIB\n> +       select USE_OF\n> +       select PINCTRL\n> +       select PINCTRL_NPCM7XX\n> +\n> +if ARCH_NPCM\n> +\n> +comment \"NPCMX50 CPU type\"\n> +\n> +config CPU_NPCM750\n> +       depends on ARCH_NPCM && ARCH_MULTI_V7 && !CPU_V6 && !CPU_V6K\n> +       bool \"Support for NPCM750 BMC CPU (Poleg)\"\n> +       select CACHE_L2X0\n> +       select CPU_V7\n> +       select ARM_GIC\n> +       select ARM_ERRATA_754322\n> +       select ARM_ERRATA_764369\n> +       select USB_EHCI_ROOT_HUB_TT\n> +       select USB_ARCH_HAS_HCD\n> +       select USB_ARCH_HAS_EHCI\n> +       select USB_EHCI_HCD\n> +       select USB_ARCH_HAS_OHCI\n> +       select USB_OHCI_HCD\n> +       select USB\n> +       select FIQ\n> +       select CPU_USE_DOMAINS\n> +       select COMMON_CLK if OF\n> +       select NPCM750_TIMER\n> +       select MFD_SYSCON\n> +       help\n> +         Support for single core NPCM750 BMC CPU (Poleg).\n> +\n> +         Single core variant of the Nuvoton NPCM750 BMC based on the Cortex A9.\n> +\n> +config CPU_NPCM750_SMP\n> +       depends on CPU_NPCM750\n> +       bool \"Support for NPCM750 BMC CPU SMP (Poleg)\"\n> +       select HAVE_SMP\n> +       select HAVE_ARM_SCU\n> +       select ARM_ERRATA_794072\n> +       select PL310_ERRATA_588369\n> +       select PL310_ERRATA_727915\n> +       select ARM_ERRATA_720789\n> +       select DEBUG_SPINLOCK\n> +       select GENERIC_CLOCKEVENTS\n> +       select SMP\n> +       select HAVE_ARM_TWD if SMP\n> +       select HAVE_ARM_SCU if SMP\n> +       select CLKDEV_LOOKUP\n> +       select COMMON_CLK if OF\n> +       help\n> +         Support for dual core NPCM750 BMC CPU (Poleg).\n> +\n> +         Dual core variant of the Nuvoton NPCM750 BMC based on the Cortex A9.\n> +\n> +endif\n> diff --git a/arch/arm/mach-npcm/Makefile b/arch/arm/mach-npcm/Makefile\n> new file mode 100644\n> index 000000000000..634e7c4d6b98\n> --- /dev/null\n> +++ b/arch/arm/mach-npcm/Makefile\n> @@ -0,0 +1,3 @@\n> +obj-$(CONFIG_CPU_NPCM750_SMP)  += platsmp.o headsmp.o\n> +\n> +obj-$(CONFIG_CPU_NPCM750)      += npcm7xx.o\n> diff --git a/arch/arm/mach-npcm/headsmp.S b/arch/arm/mach-npcm/headsmp.S\n> new file mode 100644\n> index 000000000000..d22d2fc1a35c\n> --- /dev/null\n> +++ b/arch/arm/mach-npcm/headsmp.S\n> @@ -0,0 +1,120 @@\n> +/*\n> + * linux/arch/arm/mach-realview/headsmp.S\n> + *\n> + * Copyright (c) 2003 ARM Limited\n> + * Copyright 2017 Google, Inc.\n> + *  All Rights Reserved\n> + *\n> + * This program is free software; you can redistribute it and/or modify\n> + * it under the terms of the GNU General Public License version 2 as\n> + * published by the Free Software Foundation.\n> + */\n> +\n> +#include <linux/linkage.h>\n> +#include <linux/init.h>\n> +\n> +.equ SVC_MODE, 0x13\n> +.equ I_BIT, 0x80\n> +.equ F_BIT, 0x40\n> +\n> +ENTRY(npcm7xx_wakeup_z1)\n> +       stmfd   sp!, {r0-r12, lr}\n> +       ldr     r0, =0x01\n> +       ldr     r1, =0x01\n> +       ldr     r2, =0x01\n> +\n> +       and     r3, r0, #0x0F /* Mask off unused bits of ID, and move to r3 */\n> +       and     r1, r1, #0x0F /* Mask off unused bits of target_filter */\n> +       and     r2, r2, #0x0F /* Mask off unused bits of filter_list */\n> +\n> +       orr     r3, r3, r1, LSL #16 /* Combine ID and target_filter */\n> +       orr     r3, r3, r2, LSL #24 /* and now the filter list */\n> +\n> +       /* Get the address of the GIC */\n> +       mrc     p15, 4, r0, c15, c0, 0 /* Read periph base address */\n> +       add     r0, r0, #0x1F00 /* Add offset of the sgi_trigger reg */\n> +\n> +       /* Write to the Software Generated Interrupt Register (ICDSGIR) */\n> +       str     r3, [r0]\n> +\n> +       ldmfd   sp!, {r0-r12, pc}\n> +ENDPROC(npcm7xx_wakeup_z1)\n> +\n> +ENTRY(v7_invalidate_l1_npcmX50)\n> +       mov     r0, #0\n> +       mcr     p15, 0, r0, c7, c5, 0 /* invalidate I cache */\n> +       mcr     p15, 2, r0, c0, c0, 0\n> +       mrc     p15, 1, r0, c0, c0, 0\n> +\n> +       ldr     r1, =0x7fff\n> +       and     r2, r1, r0, lsr #13\n> +\n> +       ldr     r1, =0x3ff\n> +\n> +       and     r3, r1, r0, lsr #3 /* NumWays - 1 */\n> +       add     r2, r2, #1         /* NumSets */\n> +\n> +       and     r0, r0, #0x7\n> +       add     r0, r0, #4 /* SetShift */\n> +\n> +       clz     r1, r3     /* WayShift */\n> +       add     r4, r3, #1 /* NumWays */\n> +1:     sub     r2, r2, #1 /* NumSets-- */\n> +       mov     r3, r4     /* Temp = NumWays */\n> +2:     subs    r3, r3, #1 /* Temp-- */\n> +       mov     r5, r3, lsl r1\n> +       mov     r6, r2, lsl r0\n> +       /* Reg = (Temp << WayShift) | (NumSets << SetShift) */\n> +       orr     r5, r5, r6\n> +       mcr     p15, 0, r5, c7, c6, 2\n> +       bgt     2b\n> +       cmp     r2, #0\n> +       bgt     1b\n> +       dsb\n> +       isb\n> +       mov     pc, lr\n> +ENDPROC(v7_invalidate_l1_npcmX50)\n> +\n> +/*\n> + * MSM specific entry point for secondary CPUs.  This provides\n> + * a \"holding pen\" into which all secondary cores are held until we're\n> + * ready for them to initialise.\n> + */\n> +ENTRY(npcm7xx_secondary_startup)\n> +       msr     CPSR_c, #(SVC_MODE)\n> +\n> +       bl      v7_invalidate_l1_npcmX50\n> +       /* disable vector table remapping */\n> +       mrc     p15, 0,r0, c1, c0, 0\n> +       and     r0, #0xffffdfff\n> +       mcr     p15, 0,r0, c1, c0, 0\n> +\n> +#ifdef CONFIG_CACHE_L2X0\n> +       /* Enable L1 & L2 prefetch + Zero line */\n> +       mrc     p15, 0, r0, c1, c0, 1\n> +       orr     r0, r0, #(7 << 1)\n> +       mcr     p15, 0, r0, c1, c0, 1\n> +#endif /* CONFIG_CACHE_L2X0 */\n> +\n> +       mrc     p15, 0, r0, c0, c0, 5\n> +       and     r0, r0, #15\n> +       adr     r4, 1f\n> +       ldmia   r4, {r5, r6}\n> +       sub     r4, r4, r5\n> +       add     r6, r6, r4\n> +       str r3,[r2]\n> +\n> +pen:   ldr     r7, [r6]\n> +       cmp     r7, r0\n> +       bne     pen\n> +\n> +       /*\n> +        * we've been released from the holding pen: secondary_stack\n> +        * should now contain the SVC stack for this core\n> +        */\n> +       b       secondary_startup\n> +ENDPROC(npcm7xx_secondary_startup)\n> +\n> +       .align\n> +1:     .long   .\n> +       .long   pen_release\n> diff --git a/arch/arm/mach-npcm/npcm7xx.c b/arch/arm/mach-npcm/npcm7xx.c\n> new file mode 100644\n> index 000000000000..106dc62dd62b\n> --- /dev/null\n> +++ b/arch/arm/mach-npcm/npcm7xx.c\n> @@ -0,0 +1,34 @@\n> +/*\n> + * Copyright (c) 2014 Nuvoton Technology corporation.\n> + * Copyright 2017 Google, Inc.\n> + *\n> + * This program is free software; you can redistribute it and/or modify\n> + * it under the terms of the GNU General Public License as published by\n> + * the Free Software Foundation;version 2 of the License.\n> + */\n> +\n> +#include <linux/kernel.h>\n> +#include <linux/types.h>\n> +#include <asm/mach/arch.h>\n> +#include <asm/mach-types.h>\n> +#include <asm/mach/map.h>\n> +#include <asm/hardware/cache-l2x0.h>\n> +\n> +#define NPCM7XX_AUX_VAL (L310_AUX_CTRL_INSTR_PREFETCH |                               \\\n> +                        L310_AUX_CTRL_DATA_PREFETCH |                         \\\n> +                        L310_AUX_CTRL_NS_LOCKDOWN |                           \\\n> +                        L310_AUX_CTRL_CACHE_REPLACE_RR |                      \\\n> +                        L2C_AUX_CTRL_SHARED_OVERRIDE |                        \\\n> +                        L310_AUX_CTRL_FULL_LINE_ZERO)\n> +\n> +static const char *const npcm7xx_dt_match[] = {\n> +       \"nuvoton,npcm750\",\n> +       NULL\n> +};\n> +\n> +DT_MACHINE_START(NPCM7XX_DT, \"NPCMX50 Chip family\")\n> +       .atag_offset    = 0x100,\n> +       .dt_compat      = npcm7xx_dt_match,\n> +       .l2c_aux_val    = NPCM7XX_AUX_VAL,\n> +       .l2c_aux_mask   = ~NPCM7XX_AUX_VAL,\n> +MACHINE_END\n> diff --git a/arch/arm/mach-npcm/platsmp.c b/arch/arm/mach-npcm/platsmp.c\n> new file mode 100644\n> index 000000000000..4b53adb467fc\n> --- /dev/null\n> +++ b/arch/arm/mach-npcm/platsmp.c\n> @@ -0,0 +1,168 @@\n> +/*\n> + * Copyright (C) 2002 ARM Ltd.\n> + * Copyright (C) 2008 STMicroelctronics.\n> + * Copyright (C) 2009 ST-Ericsson.\n> + * Copyright 2017 Google, Inc.\n> + *\n> + * This file is based on arm realview platform\n> + *\n> + * This program is free software; you can redistribute it and/or modify\n> + * it under the terms of the GNU General Public License version 2 as\n> + * published by the Free Software Foundation.\n> + */\n> +\n> +#define pr_fmt(fmt) \"PLATSMP: \" fmt\n> +\n> +#include <linux/delay.h>\n> +#include <linux/device.h>\n> +#include <linux/smp.h>\n> +#include <linux/io.h>\n> +#include <linux/of.h>\n> +#include <linux/of_device.h>\n> +#include <linux/of_platform.h>\n> +#include <linux/of_address.h>\n> +#include <asm/cacheflush.h>\n> +#include <asm/smp.h>\n> +#include <asm/smp_plat.h>\n> +#include <asm/smp_scu.h>\n> +\n> +#define NPCM7XX_SCRPAD_REG 0x13c\n> +\n> +static void __iomem *gcr_base;\n> +static void __iomem *scu_base;\n> +\n> +/* This is called from headsmp.S to wakeup the secondary core */\n> +extern void npcm7xx_secondary_startup(void);\n> +extern void npcm7xx_wakeup_z1(void);\n> +\n> +/*\n> + * Write pen_release in a way that is guaranteed to be visible to all\n> + * observers, irrespective of whether they're taking part in coherency\n> + * or not.  This is necessary for the hotplug code to work reliably.\n> + */\n> +static void npcm7xx_write_pen_release(int val)\n> +{\n> +       pen_release = val;\n> +       /* write to pen_release must be visible to all observers. */\n> +       smp_wmb();\n> +       __cpuc_flush_dcache_area((void *) &pen_release, sizeof(pen_release));\n> +       outer_clean_range(__pa(&pen_release), __pa(&pen_release + 1));\n> +}\n> +\n> +static DEFINE_SPINLOCK(boot_lock);\n> +\n> +static void npcm7xx_smp_secondary_init(unsigned int cpu)\n> +{\n> +       /*\n> +        * let the primary processor know we're out of the\n> +        * pen, then head off into the C entry point\n> +        */\n> +       npcm7xx_write_pen_release(-1);\n> +\n> +       /*\n> +        * Synchronise with the boot thread.\n> +        */\n> +       spin_lock(&boot_lock);\n> +       spin_unlock(&boot_lock);\n> +}\n> +\n> +static int npcm7xx_smp_boot_secondary(unsigned int cpu, struct task_struct *idle)\n> +{\n> +       unsigned long timeout;\n> +\n> +       if (!gcr_base)\n> +               return -EIO;\n> +\n> +       /*\n> +        * set synchronisation state between this boot processor\n> +        * and the secondary one\n> +        */\n> +       spin_lock(&boot_lock);\n> +\n> +       /*\n> +        * The secondary processor is waiting to be released from\n> +        * the holding pen - release it, then wait for it to flag\n> +        * that it has been released by resetting pen_release.\n> +        */\n> +       npcm7xx_write_pen_release(cpu_logical_map(cpu));\n> +       iowrite32(virt_to_phys(npcm7xx_secondary_startup),\n> +                 gcr_base + NPCM7XX_SCRPAD_REG);\n> +       /* make npcm7xx_secondary_startup visible to all observers. */\n> +       smp_rmb();\n> +\n> +       arch_send_wakeup_ipi_mask(cpumask_of(cpu));\n> +       timeout  = jiffies + (HZ * 1);\n> +       while (time_before(jiffies, timeout)) {\n> +               /* make sure we see any writes to pen_release. */\n> +               smp_rmb();\n> +               if (pen_release == -1)\n> +                       break;\n> +\n> +               udelay(10);\n> +       }\n> +\n> +       /*\n> +        * now the secondary core is starting up let it run its\n> +        * calibrations, then wait for it to finish\n> +        */\n> +       spin_unlock(&boot_lock);\n> +\n> +       return pen_release != -1 ? -EIO : 0;\n> +}\n> +\n> +\n> +static void __init npcm7xx_wakeup_secondary(void)\n> +{\n> +       /*\n> +        * write the address of secondary startup into the backup ram register\n> +        * at offset 0x1FF4, then write the magic number 0xA1FEED01 to the\n> +        * backup ram register at offset 0x1FF0, which is what boot rom code\n> +        * is waiting for. This would wake up the secondary core from WFE\n> +        */\n> +       iowrite32(virt_to_phys(npcm7xx_secondary_startup), gcr_base +\n> +                 NPCM7XX_SCRPAD_REG);\n> +       /* make sure npcm7xx_secondary_startup is seen by all observers. */\n> +       smp_wmb();\n> +       dsb_sev();\n> +\n> +       /* make sure write buffer is drained */\n> +       mb();\n> +}\n> +\n> +static void __init npcm7xx_smp_prepare_cpus(unsigned int max_cpus)\n> +{\n> +       struct device_node *gcr_np, *scu_np;\n> +\n> +       gcr_np = of_find_compatible_node(NULL, NULL, \"nuvoton,npcm750-gcr\");\n> +       if (!gcr_np) {\n> +               pr_err(\"no gcr device node\\n\");\n> +               return;\n> +       }\n> +       gcr_base = of_iomap(gcr_np, 0);\n> +       if (!gcr_base) {\n> +               pr_err(\"could not iomap gcr at: 0x%llx\\n\", gcr_base);\n> +               return;\n> +       }\n> +\n> +       scu_np = of_find_compatible_node(NULL, NULL, \"arm,cortex-a9-scu\");\n> +       if (!scu_np) {\n> +               pr_err(\"no scu device node\\n\");\n> +               return;\n> +       }\n> +       scu_base = of_iomap(scu_np, 0);\n> +       if (!scu_base) {\n> +               pr_err(\"could not iomap gcr at: 0x%llx\\n\", scu_base);\n> +               return;\n> +       }\n> +\n> +       scu_enable(scu_base);\n> +       npcm7xx_wakeup_secondary();\n> +}\n> +\n> +static struct smp_operations npcm7xx_smp_ops __initdata = {\n> +       .smp_prepare_cpus = npcm7xx_smp_prepare_cpus,\n> +       .smp_boot_secondary = npcm7xx_smp_boot_secondary,\n> +       .smp_secondary_init = npcm7xx_smp_secondary_init,\n> +};\n> +\n> +CPU_METHOD_OF_DECLARE(npcm7xx_smp, \"nuvoton,npcm7xx-smp\", &npcm7xx_smp_ops);\n> --\n> 2.14.1.581.gf28d330327-goog\n>\n\nReviewed-by: Tomer Maimon <tmaimon77@gmail.com>\nTested-by: Tomer Maimon <tmaimon77@gmail.com>\n\nReviewed-by: Avi Fishman <avifishman70@gmail.com>\nTested-by: Avi Fishman <avifishman70@gmail.com>\n--\nTo unsubscribe from this list: send the line \"unsubscribe devicetree\" in\nthe body of a message to majordomo@vger.kernel.org\nMore majordomo info at  http://vger.kernel.org/majordomo-info.html","headers":{"Return-Path":"<devicetree-owner@vger.kernel.org>","X-Original-To":"incoming-dt@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming-dt@bilbo.ozlabs.org","Authentication-Results":["ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=devicetree-owner@vger.kernel.org; receiver=<UNKNOWN>)","ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"p96a1VJ5\"; dkim-atps=neutral"],"Received":["from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xmBtL0k32z9t2R\n\tfor <incoming-dt@patchwork.ozlabs.org>;\n\tTue,  5 Sep 2017 00:24:10 +1000 (AEST)","(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1753779AbdIDOYI (ORCPT\n\t<rfc822;incoming-dt@patchwork.ozlabs.org>);\n\tMon, 4 Sep 2017 10:24:08 -0400","from mail-vk0-f65.google.com ([209.85.213.65]:36581 \"EHLO\n\tmail-vk0-f65.google.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1753687AbdIDOYH (ORCPT\n\t<rfc822; devicetree@vger.kernel.org>); Mon, 4 Sep 2017 10:24:07 -0400","by mail-vk0-f65.google.com with SMTP id x85so174242vkx.3;\n\tMon, 04 Sep 2017 07:24:06 -0700 (PDT)","by 10.176.90.193 with HTTP; Mon, 4 Sep 2017 07:24:05 -0700 (PDT)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;\n\th=mime-version:in-reply-to:references:from:date:message-id:subject:to\n\t:cc; bh=3BhWn/TT7YXVb+yHBLC+vXjReDcw1hRTHSJ5i0LRNBs=;\n\tb=p96a1VJ5E9awtSRsN/Y6Sfw8VTWAuJETWHGY+dQLJTZc4BCDn+Bb+mXeSvCUcB615y\n\tAXHJhbmdhAWJ6tvzJM2r27oel2INfsbX2+95e1E12s+kgJidti9fIZ7GdS/PG/LwrNlY\n\tkAojeTHIeQ0RnCBi+ShiiBAybNIhPpbLuK5UCQuRL9JUJekBJ37ma3r1LWFRiI1DR6E3\n\t/hn2eS7nQUpdZXyHE1lwEQxTRf0qPdoc4Wln1NnrqXLJyxXMwXsKLSmwdd3SYkVATUIC\n\tuAxOUmVhQgDvlZ8jv+Fu3kbrbgQVXx35eO83I44Tko7gRpB1XSO+3yL7EWg1pobPxIV0\n\tmiAw==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:mime-version:in-reply-to:references:from:date\n\t:message-id:subject:to:cc;\n\tbh=3BhWn/TT7YXVb+yHBLC+vXjReDcw1hRTHSJ5i0LRNBs=;\n\tb=r8G8pvVJ7DRcJOIJZkPxM1OmZoK39OwnY06YvzZMzRoGx69Wfb6CvDKBd88h/Sy6Lq\n\tL9ZZxRPLyDAUFbpvaopOoPO3MikEiVNn0d8QhifBge/XmgAlLAxNwP9vWSKftZDfnAFr\n\tTuxe0dQ/EG1xFlofbLMp5CrZgdVOOfahoDSkPyXRtkbkyoSNa0WtZZ7YOtR5iIO7Bufn\n\tCayPWNsTRZHf+X2Dvqdsutv0BLfSdGon6EgwUyl4P2gCbd1d28ejJQcwypuHutukUfBa\n\t+TcHTDp5Ty3VLYRoyn9nsy/Qho0fQOF66pR3NqzXUXbNdpClvfMisZefMcE+gIdNKrom\n\tiA4g==","X-Gm-Message-State":"AHPjjUjAI7NiGQ0bPjZOTdXy+NCI7a0jcX0keo385qvbggaAEARwmbEk\n\tV5X6GVu1kxtNQ75xhHJNPVdh2ans/Q==","X-Google-Smtp-Source":"ADKCNb6DqiGMYxoeS4hUh6ZGuHyR1Xo9LEOCeXmDPk7PKXP9sXpGFBPTW9lzvDk9xsUIsCddgdy4MsoXbRWKvMxw2lk=","X-Received":"by 10.31.216.195 with SMTP id p186mr350975vkg.89.1504535046062; \n\tMon, 04 Sep 2017 07:24:06 -0700 (PDT)","MIME-Version":"1.0","In-Reply-To":"<20170831225400.19756-2-brendanhiggins@google.com>","References":"<20170831225400.19756-1-brendanhiggins@google.com>\n\t<20170831225400.19756-2-brendanhiggins@google.com>","From":"Tomer Maimon <tmaimon77@gmail.com>","Date":"Mon, 4 Sep 2017 17:24:05 +0300","Message-ID":"<CAP6Zq1i98sUmJW8j2=5WRomBchmVSBmHEfb3Vn18-r-zPrZG=Q@mail.gmail.com>","Subject":"Re: [PATCH v2 1/3] arm: npcm: add basic support for Nuvoton BMCs","To":"Brendan Higgins <brendanhiggins@google.com>","Cc":"robh+dt@kernel.org, mark.rutland@arm.com, linux@armlinux.org.uk,\n\tavifishman70@gmail.com, raltherr@google.com,\n\tdevicetree@vger.kernel.org, linux-kernel@vger.kernel.org,\n\tlinux-arm-kernel@lists.infradead.org, openbmc@lists.ozlabs.org","Content-Type":"text/plain; charset=\"UTF-8\"","Sender":"devicetree-owner@vger.kernel.org","Precedence":"bulk","List-ID":"<devicetree.vger.kernel.org>","X-Mailing-List":"devicetree@vger.kernel.org"}},{"id":1762686,"web_url":"http://patchwork.ozlabs.org/comment/1762686/","msgid":"<CAP6Zq1husO0G+Prjn4Fge8icDhfO-kw0TdHDZ=wxFcpagD-6VA@mail.gmail.com>","list_archive_url":null,"date":"2017-09-04T14:25:11","subject":"Re: [PATCH v2 3/3] MAINTAINERS: Add entry for the Nuvoton NPCM\n\tarchitecture","submitter":{"id":72291,"url":"http://patchwork.ozlabs.org/api/people/72291/","name":"Tomer Maimon","email":"tmaimon77@gmail.com"},"content":"On 1 September 2017 at 01:54, Brendan Higgins <brendanhiggins@google.com> wrote:\n> Add maintainers and reviewers for the Nuvoton NPCM architecture.\n>\n> Signed-off-by: Brendan Higgins <brendanhiggins@google.com>\n> ---\n>  MAINTAINERS | 13 +++++++++++++\n>  1 file changed, 13 insertions(+)\n>\n> diff --git a/MAINTAINERS b/MAINTAINERS\n> index 44cb004c765d..67064bf11904 100644\n> --- a/MAINTAINERS\n> +++ b/MAINTAINERS\n> @@ -1598,6 +1598,19 @@ F:       drivers/pinctrl/nomadik/\n>  F:     drivers/i2c/busses/i2c-nomadik.c\n>  T:     git git://git.kernel.org/pub/scm/linux/kernel/git/linusw/linux-nomadik.git\n>\n> +ARM/NUVOTON NPCM ARCHITECTURE\n> +M:     Avi Fishman <avifishman70@gmail.com>\n> +M:     Tomer Maimon <tmaimon77@gmail.com>\n> +R:     Brendan Higgins <brendanhiggins@google.com>\n> +R:     Rick Altherr <raltherr@google.com>\n> +L:     openbmc@lists.ozlabs.org (moderated for non-subscribers)\n> +S:     Maintained\n> +F:     arch/arm/mach-npcm/\n> +F:     arch/arm/boot/dts/nuvoton-npcm*\n> +F:     include/dt-bindings/clock/nuvoton,npcm7xx-clks.h\n> +F:     drivers/*/*npcm*\n> +F:     Documentation/*/*npcm*\n> +\n>  ARM/NUVOTON W90X900 ARM ARCHITECTURE\n>  M:     Wan ZongShun <mcuos.com@gmail.com>\n>  L:     linux-arm-kernel@lists.infradead.org (moderated for non-subscribers)\n> --\n> 2.14.1.581.gf28d330327-goog\n>\n\nReviewed-by: Tomer Maimon <tmaimon77@gmail.com>\nTested-by: Tomer Maimon <tmaimon77@gmail.com>\n\nReviewed-by: Avi Fishman <avifishman70@gmail.com>\nTested-by: Avi Fishman <avifishman70@gmail.com>\n--\nTo unsubscribe from this list: send the line \"unsubscribe devicetree\" in\nthe body of a message to majordomo@vger.kernel.org\nMore majordomo info at  http://vger.kernel.org/majordomo-info.html","headers":{"Return-Path":"<devicetree-owner@vger.kernel.org>","X-Original-To":"incoming-dt@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming-dt@bilbo.ozlabs.org","Authentication-Results":["ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=devicetree-owner@vger.kernel.org; receiver=<UNKNOWN>)","ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"qQEHdKTz\"; dkim-atps=neutral"],"Received":["from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xmBvZ6Dhjz9s7h\n\tfor <incoming-dt@patchwork.ozlabs.org>;\n\tTue,  5 Sep 2017 00:25:14 +1000 (AEST)","(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1753820AbdIDOZN (ORCPT\n\t<rfc822;incoming-dt@patchwork.ozlabs.org>);\n\tMon, 4 Sep 2017 10:25:13 -0400","from mail-ua0-f195.google.com ([209.85.217.195]:37251 \"EHLO\n\tmail-ua0-f195.google.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1753803AbdIDOZM (ORCPT\n\t<rfc822; devicetree@vger.kernel.org>); Mon, 4 Sep 2017 10:25:12 -0400","by mail-ua0-f195.google.com with SMTP id q29so203422uaf.4;\n\tMon, 04 Sep 2017 07:25:12 -0700 (PDT)","by 10.176.90.193 with HTTP; Mon, 4 Sep 2017 07:25:11 -0700 (PDT)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;\n\th=mime-version:in-reply-to:references:from:date:message-id:subject:to\n\t:cc; bh=+wYJjulXrRGzgL+GyZGluGxunu6FvsF0EOQX9MRGjMo=;\n\tb=qQEHdKTzQUoA1NTC55irYsQeq5kLvv9bXwpYQ5uijUqfTjdiAKTQV76k/QuzwdPGcQ\n\t264ihPPblZpHGEnjOS3eveaqdFDPqHWjSNqyQqCUPbHKxjQQ4xbWFNddkEPZUUbCJYQJ\n\tUZDk8PPUO42s+c2j5ocyRph7FZa+d1yvOLTrwTo+noVJD7RILMecWjmLaFriuwJvdKOc\n\tZmw3yTbZmHoWoArDbIoJBrfvjsqeuJYnOz8bFw5JutdyNmMA8EctRm/d6kGlOTDtmusx\n\tQY62rkZKnTAl2kZLX0xajQ5N4af0SeG/E/KKAE7N8nFeZ6G64RPa/1sGohxKgTAUiCzC\n\t0TAw==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:mime-version:in-reply-to:references:from:date\n\t:message-id:subject:to:cc;\n\tbh=+wYJjulXrRGzgL+GyZGluGxunu6FvsF0EOQX9MRGjMo=;\n\tb=bxygXdf/e9PS0trYDBiN1X/vzZ2+M6AnfNwOMH0P6UPdvPK9AS8SqvnZDSLTbdXwR0\n\tqM93b65AKlubp+9Woksb1hcNa1trEgJ0XW+MrPqoagqSIGB8rLBJsAZWiuJzQAOXAoIo\n\tqD03+okYJvyjsgMtf0S/9kOhKcLDyOcEvXAbvkFneZLWWWh/c2Jcv6oyxVr2iisZSpqB\n\tzznixxiCgYfSBk0zg0ArdbP9j7Zjb9dmlpt7xx8GF4Zlocc6f4XBLmcdcyzkIK4GC2hw\n\tX3vEX/pvMWULDtncVZxdu59GkU/ZsqUzoXLhW0c6ldo28qiNVvThJnrgpbib1MT0O6W8\n\t9hSw==","X-Gm-Message-State":"AHPjjUjj61zNWhtSHFKkZpxOsVRRDCstY+U4TRYV+ikto982KdZCxH71\n\tyKWjOKMKmSdnlPMQIPGECtYR1iDp/Q==","X-Google-Smtp-Source":"ADKCNb6YgMNnF47lw8Yq7UQo2rY7P92+Yei7m2iVA8USnL7U3B//jrrEkAVnoq9+KnfMeqlX9jlF/k68RLs7DGU4+cE=","X-Received":"by 10.176.80.42 with SMTP id b39mr475427uaa.34.1504535111594;\n\tMon, 04 Sep 2017 07:25:11 -0700 (PDT)","MIME-Version":"1.0","In-Reply-To":"<20170831225400.19756-4-brendanhiggins@google.com>","References":"<20170831225400.19756-1-brendanhiggins@google.com>\n\t<20170831225400.19756-4-brendanhiggins@google.com>","From":"Tomer Maimon <tmaimon77@gmail.com>","Date":"Mon, 4 Sep 2017 17:25:11 +0300","Message-ID":"<CAP6Zq1husO0G+Prjn4Fge8icDhfO-kw0TdHDZ=wxFcpagD-6VA@mail.gmail.com>","Subject":"Re: [PATCH v2 3/3] MAINTAINERS: Add entry for the Nuvoton NPCM\n\tarchitecture","To":"Brendan Higgins <brendanhiggins@google.com>","Cc":"robh+dt@kernel.org, mark.rutland@arm.com, linux@armlinux.org.uk,\n\tavifishman70@gmail.com, raltherr@google.com,\n\tdevicetree@vger.kernel.org, linux-kernel@vger.kernel.org,\n\tlinux-arm-kernel@lists.infradead.org, openbmc@lists.ozlabs.org","Content-Type":"text/plain; charset=\"UTF-8\"","Sender":"devicetree-owner@vger.kernel.org","Precedence":"bulk","List-ID":"<devicetree.vger.kernel.org>","X-Mailing-List":"devicetree@vger.kernel.org"}},{"id":1762923,"web_url":"http://patchwork.ozlabs.org/comment/1762923/","msgid":"<8fd55a57-946d-f53f-e10b-c73d1f70d1dc@gmail.com>","list_archive_url":null,"date":"2017-09-05T02:47:16","subject":"Re: [PATCH v2 1/3] arm: npcm: add basic support for Nuvoton BMCs","submitter":{"id":2800,"url":"http://patchwork.ozlabs.org/api/people/2800/","name":"Florian Fainelli","email":"f.fainelli@gmail.com"},"content":"Le 08/31/17 à 15:53, Brendan Higgins a écrit :\n> Adds basic support for the Nuvoton NPCM750 BMC.\n> \n> Signed-off-by: Brendan Higgins <brendanhiggins@google.com>\n> ---\n>  arch/arm/Kconfig             |   2 +\n>  arch/arm/Makefile            |   1 +\n>  arch/arm/mach-npcm/Kconfig   |  58 +++++++++++++++\n>  arch/arm/mach-npcm/Makefile  |   3 +\n>  arch/arm/mach-npcm/headsmp.S | 120 +++++++++++++++++++++++++++++++\n>  arch/arm/mach-npcm/npcm7xx.c |  34 +++++++++\n>  arch/arm/mach-npcm/platsmp.c | 168 +++++++++++++++++++++++++++++++++++++++++++\n>  7 files changed, 386 insertions(+)\n>  create mode 100644 arch/arm/mach-npcm/Kconfig\n>  create mode 100644 arch/arm/mach-npcm/Makefile\n>  create mode 100644 arch/arm/mach-npcm/headsmp.S\n>  create mode 100644 arch/arm/mach-npcm/npcm7xx.c\n>  create mode 100644 arch/arm/mach-npcm/platsmp.c\n> \n> diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig\n> index 61a0cb15067e..05543f1cfbde 100644\n> --- a/arch/arm/Kconfig\n> +++ b/arch/arm/Kconfig\n> @@ -782,6 +782,8 @@ source \"arch/arm/mach-netx/Kconfig\"\n>  \n>  source \"arch/arm/mach-nomadik/Kconfig\"\n>  \n> +source \"arch/arm/mach-npcm/Kconfig\"\n> +\n>  source \"arch/arm/mach-nspire/Kconfig\"\n>  \n>  source \"arch/arm/plat-omap/Kconfig\"\n> diff --git a/arch/arm/Makefile b/arch/arm/Makefile\n> index 47d3a1ab08d2..60ca50c7d762 100644\n> --- a/arch/arm/Makefile\n> +++ b/arch/arm/Makefile\n> @@ -191,6 +191,7 @@ machine-$(CONFIG_ARCH_MEDIATEK)\t\t+= mediatek\n>  machine-$(CONFIG_ARCH_MXS)\t\t+= mxs\n>  machine-$(CONFIG_ARCH_NETX)\t\t+= netx\n>  machine-$(CONFIG_ARCH_NOMADIK)\t\t+= nomadik\n> +machine-$(CONFIG_ARCH_NPCM)\t\t+= npcm\n>  machine-$(CONFIG_ARCH_NSPIRE)\t\t+= nspire\n>  machine-$(CONFIG_ARCH_OXNAS)\t\t+= oxnas\n>  machine-$(CONFIG_ARCH_OMAP1)\t\t+= omap1\n> diff --git a/arch/arm/mach-npcm/Kconfig b/arch/arm/mach-npcm/Kconfig\n> new file mode 100644\n> index 000000000000..a45670e516b4\n> --- /dev/null\n> +++ b/arch/arm/mach-npcm/Kconfig\n> @@ -0,0 +1,58 @@\n> +menuconfig ARCH_NPCM\n> +\tbool \"Nuvoton NPCM Architecture\"\n> +\tselect ARCH_REQUIRE_GPIOLIB\n> +\tselect USE_OF\n> +\tselect PINCTRL\n> +\tselect PINCTRL_NPCM7XX\n> +\n> +if ARCH_NPCM\n> +\n> +comment \"NPCMX50 CPU type\"\n> +\n> +config CPU_NPCM750\n> +\tdepends on ARCH_NPCM && ARCH_MULTI_V7 && !CPU_V6 && !CPU_V6K\n\nWhy the !CPU_V6 and !CPU_V6K, you indicate in your cover letter that\nthis is because headsmp.S requires ARMv7 instructions, so just tell the\nassembler that with:\n\nAFLAGS_headsmp.o\t+= -march=armv7-a\n\n> +\tbool \"Support for NPCM750 BMC CPU (Poleg)\"\n> +\tselect CACHE_L2X0\n> +\tselect CPU_V7\n> +\tselect ARM_GIC\n> +\tselect ARM_ERRATA_754322\n> +\tselect ARM_ERRATA_764369\n> +\tselect USB_EHCI_ROOT_HUB_TT\n> +\tselect USB_ARCH_HAS_HCD\n> +\tselect USB_ARCH_HAS_EHCI\n> +\tselect USB_EHCI_HCD\n> +\tselect USB_ARCH_HAS_OHCI\n> +\tselect USB_OHCI_HCD\n> +\tselect USB\n> +\tselect FIQ\n> +\tselect CPU_USE_DOMAINS\n> +\tselect COMMON_CLK if OF\n> +\tselect NPCM750_TIMER\n> +\tselect MFD_SYSCON\n> +\thelp\n> +\t  Support for single core NPCM750 BMC CPU (Poleg).\n> +\n> +\t  Single core variant of the Nuvoton NPCM750 BMC based on the Cortex A9.\n> +\n> +config CPU_NPCM750_SMP\n> +\tdepends on CPU_NPCM750\n> +\tbool \"Support for NPCM750 BMC CPU SMP (Poleg)\"\n> +\tselect HAVE_SMP\n> +\tselect HAVE_ARM_SCU\n> +\tselect ARM_ERRATA_794072\n> +\tselect PL310_ERRATA_588369\n> +\tselect PL310_ERRATA_727915\n> +\tselect ARM_ERRATA_720789\n> +\tselect DEBUG_SPINLOCK\n> +\tselect GENERIC_CLOCKEVENTS\n> +\tselect SMP\n> +\tselect HAVE_ARM_TWD if SMP\n> +\tselect HAVE_ARM_SCU if SMP\n> +\tselect CLKDEV_LOOKUP\n> +\tselect COMMON_CLK if OF\n> +\thelp\n> +\t  Support for dual core NPCM750 BMC CPU (Poleg).\n> +\n> +\t  Dual core variant of the Nuvoton NPCM750 BMC based on the Cortex A9.\n\nThis is something that you could determine entirely from Device Tree and\njust have this code unconditionally be built into the kernel and have\nyour SMP operations do nothing if only one CPU is enabled/declared in\nDT. The runtime overhead of running SMP_ON_UP is largely negligible that\nit is worth having fewer configuration options to support.\n\n\n> diff --git a/arch/arm/mach-npcm/headsmp.S b/arch/arm/mach-npcm/headsmp.S\n> new file mode 100644\n> index 000000000000..d22d2fc1a35c\n> --- /dev/null\n> +++ b/arch/arm/mach-npcm/headsmp.S\n> @@ -0,0 +1,120 @@\n> +/*\n> + * linux/arch/arm/mach-realview/headsmp.S\n\nThe filename no longer matches but this also indicates that this was\nlargely based on the realview board's SMP bring-up code which Russell\nKing repeatedly tells people to move away from since it is made for a\nboard with a ton of limitations.\n\n> + *\n> + * Copyright (c) 2003 ARM Limited\n> + * Copyright 2017 Google, Inc.\n> + *  All Rights Reserved\n> + *\n> + * This program is free software; you can redistribute it and/or modify\n> + * it under the terms of the GNU General Public License version 2 as\n> + * published by the Free Software Foundation.\n> + */\n> +\n> +#include <linux/linkage.h>\n> +#include <linux/init.h>\n> +\n> +.equ SVC_MODE, 0x13\n> +.equ I_BIT, 0x80\n> +.equ F_BIT, 0x40\n\nYou can use the C preprocessor to make this more readable and/or re-use\nexisting defines from other header files.\n\n> +\n> +ENTRY(npcm7xx_wakeup_z1)\n> +\tstmfd\tsp!, {r0-r12, lr}\n> +\tldr\tr0, =0x01\n> +\tldr\tr1, =0x01\n> +\tldr\tr2, =0x01\n> +\n> +\tand\tr3, r0, #0x0F /* Mask off unused bits of ID, and move to r3 */\n> +\tand\tr1, r1, #0x0F /* Mask off unused bits of target_filter */\n> +\tand\tr2, r2, #0x0F /* Mask off unused bits of filter_list */\n> +\n> +\torr\tr3, r3, r1, LSL #16 /* Combine ID and target_filter */\n> +\torr\tr3, r3, r2, LSL #24 /* and now the filter list */\n> +\n> +\t/* Get the address of the GIC */\n> +\tmrc\tp15, 4, r0, c15, c0, 0 /* Read periph base address */\n> +\tadd\tr0, r0, #0x1F00 /* Add offset of the sgi_trigger reg */\n> +\n> +\t/* Write to the Software Generated Interrupt Register (ICDSGIR) */\n> +\tstr\tr3, [r0]\n\nDon't you need some kind of barrier here?\n\n> +\n> +\tldmfd\tsp!, {r0-r12, pc}\n> +ENDPROC(npcm7xx_wakeup_z1)\n> +\n> +ENTRY(v7_invalidate_l1_npcmX50)\n> +\tmov\tr0, #0\n> +\tmcr\tp15, 0, r0, c7, c5, 0 /* invalidate I cache */\n> +\tmcr\tp15, 2, r0, c0, c0, 0\n> +\tmrc\tp15, 1, r0, c0, c0, 0\n> +\n> +\tldr\tr1, =0x7fff\n> +\tand\tr2, r1, r0, lsr #13\n> +\n> +\tldr\tr1, =0x3ff\n> +\n> +\tand\tr3, r1, r0, lsr #3 /* NumWays - 1 */\n> +\tadd\tr2, r2, #1         /* NumSets */\n> +\n> +\tand\tr0, r0, #0x7\n> +\tadd\tr0, r0, #4 /* SetShift */\n> +\n> +\tclz\tr1, r3     /* WayShift */\n> +\tadd\tr4, r3, #1 /* NumWays */\n> +1:\tsub\tr2, r2, #1 /* NumSets-- */\n> +\tmov\tr3, r4     /* Temp = NumWays */\n> +2:\tsubs\tr3, r3, #1 /* Temp-- */\n> +\tmov\tr5, r3, lsl r1\n> +\tmov\tr6, r2, lsl r0\n> +\t/* Reg = (Temp << WayShift) | (NumSets << SetShift) */\n> +\torr\tr5, r5, r6\n> +\tmcr\tp15, 0, r5, c7, c6, 2\n> +\tbgt\t2b\n> +\tcmp\tr2, #0\n> +\tbgt\t1b\n> +\tdsb\n> +\tisb\n> +\tmov\tpc, lr\n> +ENDPROC(v7_invalidate_l1_npcmX50)\n\nThis looks a lot, if not nearly the same thing as v7_invalidate_l1 which\nis already called by secondary_startup, can you see if you can re-use it\ndirectly?\n\n> +\n> +/*\n> + * MSM specific entry point for secondary CPUs.  This provides\n> + * a \"holding pen\" into which all secondary cores are held until we're\n> + * ready for them to initialise.\n> + */\n\nAssuming this was copied from a Qualcomm MSM routine, you may want to\nfix the comment, typo on \"initialis.\n\n> +ENTRY(npcm7xx_secondary_startup)\n> +\tmsr\tCPSR_c, #(SVC_MODE)\n\nIs there a BootROM or something that would not make the secondary cores\nstart in supervisor mode?\n\n> +\n> +\tbl\tv7_invalidate_l1_npcmX50\n> +\t/* disable vector table remapping */\n> +\tmrc\tp15, 0,r0, c1, c0, 0\n> +\tand\tr0, #0xffffdfff\n> +\tmcr\tp15, 0,r0, c1, c0, 0\n> +\n> +#ifdef CONFIG_CACHE_L2X0\n> +\t/* Enable L1 & L2 prefetch + Zero line */\n> +\tmrc\tp15, 0, r0, c1, c0, 1\n> +\torr\tr0, r0, #(7 << 1)\n> +\tmcr\tp15, 0, r0, c1, c0, 1\n> +#endif /* CONFIG_CACHE_L2X0 */\n> +\n> +\tmrc\tp15, 0, r0, c0, c0, 5\n> +\tand\tr0, r0, #15\n> +\tadr\tr4, 1f\n> +\tldmia\tr4, {r5, r6}\n> +\tsub\tr4, r4, r5\n> +\tadd\tr6, r6, r4\n> +\tstr r3,[r2]\n> +\n> +pen:\tldr\tr7, [r6]\n> +\tcmp\tr7, r0\n> +\tbne\tpen\n> +\n> +\t/*\n> +\t * we've been released from the holding pen: secondary_stack\n> +\t * should now contain the SVC stack for this core\n> +\t */\n> +\tb\tsecondary_startup\n> +ENDPROC(npcm7xx_secondary_startup)\n> +\n> +\t.align\n> +1:\t.long\t.\n> +\t.long\tpen_release\n> diff --git a/arch/arm/mach-npcm/npcm7xx.c b/arch/arm/mach-npcm/npcm7xx.c\n> new file mode 100644\n> index 000000000000..106dc62dd62b\n> --- /dev/null\n> +++ b/arch/arm/mach-npcm/npcm7xx.c\n> @@ -0,0 +1,34 @@\n> +/*\n> + * Copyright (c) 2014 Nuvoton Technology corporation.\n> + * Copyright 2017 Google, Inc.\n> + *\n> + * This program is free software; you can redistribute it and/or modify\n> + * it under the terms of the GNU General Public License as published by\n> + * the Free Software Foundation;version 2 of the License.\n> + */\n> +\n> +#include <linux/kernel.h>\n> +#include <linux/types.h>\n> +#include <asm/mach/arch.h>\n> +#include <asm/mach-types.h>\n> +#include <asm/mach/map.h>\n> +#include <asm/hardware/cache-l2x0.h>\n> +\n> +#define NPCM7XX_AUX_VAL (L310_AUX_CTRL_INSTR_PREFETCH |\t\t\t       \\\n> +\t\t\t L310_AUX_CTRL_DATA_PREFETCH |\t\t\t       \\\n> +\t\t\t L310_AUX_CTRL_NS_LOCKDOWN |\t\t\t       \\\n> +\t\t\t L310_AUX_CTRL_CACHE_REPLACE_RR |\t\t       \\\n> +\t\t\t L2C_AUX_CTRL_SHARED_OVERRIDE |\t\t\t       \\\n> +\t\t\t L310_AUX_CTRL_FULL_LINE_ZERO)\n> +\n> +static const char *const npcm7xx_dt_match[] = {\n> +\t\"nuvoton,npcm750\",\n> +\tNULL\n> +};\n> +\n> +DT_MACHINE_START(NPCM7XX_DT, \"NPCMX50 Chip family\")\n> +\t.atag_offset\t= 0x100,\n> +\t.dt_compat\t= npcm7xx_dt_match,\n> +\t.l2c_aux_val\t= NPCM7XX_AUX_VAL,\n> +\t.l2c_aux_mask\t= ~NPCM7XX_AUX_VAL,\n> +MACHINE_END\n> diff --git a/arch/arm/mach-npcm/platsmp.c b/arch/arm/mach-npcm/platsmp.c\n> new file mode 100644\n> index 000000000000..4b53adb467fc\n> --- /dev/null\n> +++ b/arch/arm/mach-npcm/platsmp.c\n> @@ -0,0 +1,168 @@\n> +/*\n> + * Copyright (C) 2002 ARM Ltd.\n> + * Copyright (C) 2008 STMicroelctronics.\n> + * Copyright (C) 2009 ST-Ericsson.\n> + * Copyright 2017 Google, Inc.\n> + *\n> + * This file is based on arm realview platform\n> + *\n> + * This program is free software; you can redistribute it and/or modify\n> + * it under the terms of the GNU General Public License version 2 as\n> + * published by the Free Software Foundation.\n> + */\n> +\n> +#define pr_fmt(fmt) \"PLATSMP: \" fmt\n> +\n> +#include <linux/delay.h>\n> +#include <linux/device.h>\n> +#include <linux/smp.h>\n> +#include <linux/io.h>\n> +#include <linux/of.h>\n> +#include <linux/of_device.h>\n> +#include <linux/of_platform.h>\n> +#include <linux/of_address.h>\n> +#include <asm/cacheflush.h>\n> +#include <asm/smp.h>\n> +#include <asm/smp_plat.h>\n> +#include <asm/smp_scu.h>\n> +\n> +#define NPCM7XX_SCRPAD_REG 0x13c\n> +\n> +static void __iomem *gcr_base;\n> +static void __iomem *scu_base;\n> +\n> +/* This is called from headsmp.S to wakeup the secondary core */\n> +extern void npcm7xx_secondary_startup(void);\n> +extern void npcm7xx_wakeup_z1(void);\n\nThis routine is not called, was it for an early revision of the silicon,\nor is it for CPU hotplugging maybe?\n\n> +\n> +/*\n> + * Write pen_release in a way that is guaranteed to be visible to all\n> + * observers, irrespective of whether they're taking part in coherency\n> + * or not.  This is necessary for the hotplug code to work reliably.\n> + */\n> +static void npcm7xx_write_pen_release(int val)\n> +{\n> +\tpen_release = val;\n> +\t/* write to pen_release must be visible to all observers. */\n> +\tsmp_wmb();\n> +\t__cpuc_flush_dcache_area((void *) &pen_release, sizeof(pen_release));\n> +\touter_clean_range(__pa(&pen_release), __pa(&pen_release + 1));\n> +}\n> +\n> +static DEFINE_SPINLOCK(boot_lock);\n> +\n> +static void npcm7xx_smp_secondary_init(unsigned int cpu)\n> +{\n> +\t/*\n> +\t * let the primary processor know we're out of the\n> +\t * pen, then head off into the C entry point\n> +\t */\n> +\tnpcm7xx_write_pen_release(-1);\n> +\n> +\t/*\n> +\t * Synchronise with the boot thread.\n> +\t */\n> +\tspin_lock(&boot_lock);\n> +\tspin_unlock(&boot_lock);\n> +}\n> +\n> +static int npcm7xx_smp_boot_secondary(unsigned int cpu, struct task_struct *idle)\n> +{\n> +\tunsigned long timeout;\n> +\n> +\tif (!gcr_base)\n> +\t\treturn -EIO;\n> +\n> +\t/*\n> +\t * set synchronisation state between this boot processor\n> +\t * and the secondary one\n> +\t */\n> +\tspin_lock(&boot_lock);\n> +\n> +\t/*\n> +\t * The secondary processor is waiting to be released from\n> +\t * the holding pen - release it, then wait for it to flag\n> +\t * that it has been released by resetting pen_release.\n> +\t */\n> +\tnpcm7xx_write_pen_release(cpu_logical_map(cpu));\n> +\tiowrite32(virt_to_phys(npcm7xx_secondary_startup),\n> +\t\t  gcr_base + NPCM7XX_SCRPAD_REG);\n\nPlease use __pa_symbol here instead of virt_to_phys() since you are\ncalling this against a kernel image symbol.\n\n> +\t/* make npcm7xx_secondary_startup visible to all observers. */\n> +\tsmp_rmb();\n> +\n> +\tarch_send_wakeup_ipi_mask(cpumask_of(cpu));\n> +\ttimeout  = jiffies + (HZ * 1);\n> +\twhile (time_before(jiffies, timeout)) {\n> +\t\t/* make sure we see any writes to pen_release. */\n> +\t\tsmp_rmb();\n> +\t\tif (pen_release == -1)\n> +\t\t\tbreak;\n> +\n> +\t\tudelay(10);\n> +\t}\n> +\n> +\t/*\n> +\t * now the secondary core is starting up let it run its\n> +\t * calibrations, then wait for it to finish\n> +\t */\n> +\tspin_unlock(&boot_lock);\n> +\n> +\treturn pen_release != -1 ? -EIO : 0;\n> +}\n> +\n> +\n> +static void __init npcm7xx_wakeup_secondary(void)\n> +{\n> +\t/*\n> +\t * write the address of secondary startup into the backup ram register\n> +\t * at offset 0x1FF4, then write the magic number 0xA1FEED01f to the\n> +\t * backup ram register at offset 0x1FF0, which is what boot rom code\n> +\t * is waiting for. This would wake up the secondary core from WFE\n> +\t */\n\nThe comment does not seem to match what you are doing.\n\n> +\tiowrite32(virt_to_phys(npcm7xx_secondary_startup), gcr_base +\n> +\t\t  NPCM7XX_SCRPAD_REG);\n\nSame here please use __pa_symbol().\n\n> +\t/* make sure npcm7xx_secondary_startup is seen by all observers. */\n> +\tsmp_wmb();\n> +\tdsb_sev();\n> +\n> +\t/* make sure write buffer is drained */\n> +\tmb();\n> +}\n> +\n> +static void __init npcm7xx_smp_prepare_cpus(unsigned int max_cpus)\n> +{\n> +\tstruct device_node *gcr_np, *scu_np;\n> +\n> +\tgcr_np = of_find_compatible_node(NULL, NULL, \"nuvoton,npcm750-gcr\");\n> +\tif (!gcr_np) {\n> +\t\tpr_err(\"no gcr device node\\n\");\n> +\t\treturn;\n> +\t}\n> +\tgcr_base = of_iomap(gcr_np, 0);\n> +\tif (!gcr_base) {\n> +\t\tpr_err(\"could not iomap gcr at: 0x%llx\\n\", gcr_base);\n> +\t\treturn;\n> +\t}\n> +\n> +\tscu_np = of_find_compatible_node(NULL, NULL, \"arm,cortex-a9-scu\");\n> +\tif (!scu_np) {\n> +\t\tpr_err(\"no scu device node\\n\");\n> +\t\treturn;\n> +\t}\n> +\tscu_base = of_iomap(scu_np, 0);\n> +\tif (!scu_base) {\n> +\t\tpr_err(\"could not iomap gcr at: 0x%llx\\n\", scu_base);\n> +\t\treturn;\n> +\t}\n> +\n> +\tscu_enable(scu_base);\n> +\tnpcm7xx_wakeup_secondary();\n> +}\n> +\n> +static struct smp_operations npcm7xx_smp_ops __initdata = {\n> +\t.smp_prepare_cpus = npcm7xx_smp_prepare_cpus,\n> +\t.smp_boot_secondary = npcm7xx_smp_boot_secondary,\n> +\t.smp_secondary_init = npcm7xx_smp_secondary_init,\n> +};\n\nOverall you have copied the realview pen hold/release mechanism and this\nis really frowned upon especially if you have a better way to control\nthe bring-up of secondary cores, e.g: via writing a special word to a\nspecific register, or setting a special address bit (e.g: bit 31 of the\nphysical address | secondary_startup) or anything that acts as a \"GO\"\nsignal of some sort.","headers":{"Return-Path":"<devicetree-owner@vger.kernel.org>","X-Original-To":"incoming-dt@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming-dt@bilbo.ozlabs.org","Authentication-Results":["ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=devicetree-owner@vger.kernel.org; receiver=<UNKNOWN>)","ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=gmail.com header.i=@gmail.com\n\theader.b=\"fENfZf6g\"; dkim-atps=neutral"],"Received":["from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xmWMx4cMKz9sP3\n\tfor <incoming-dt@patchwork.ozlabs.org>;\n\tTue,  5 Sep 2017 12:47:25 +1000 (AEST)","(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1753758AbdIECrY (ORCPT\n\t<rfc822;incoming-dt@patchwork.ozlabs.org>);\n\tMon, 4 Sep 2017 22:47:24 -0400","from mail-io0-f193.google.com ([209.85.223.193]:37440 \"EHLO\n\tmail-io0-f193.google.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1753672AbdIECrW (ORCPT\n\t<rfc822; devicetree@vger.kernel.org>); Mon, 4 Sep 2017 22:47:22 -0400","by mail-io0-f193.google.com with SMTP id i200so1664821ioa.4;\n\tMon, 04 Sep 2017 19:47:22 -0700 (PDT)","from ?IPv6:2001:470:d:73f:94d3:4b37:3fbf:f2bd?\n\t([2001:470:d:73f:94d3:4b37:3fbf:f2bd])\n\tby smtp.googlemail.com with ESMTPSA id\n\to1sm2068490iod.53.2017.09.04.19.47.19\n\t(version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128);\n\tMon, 04 Sep 2017 19:47:20 -0700 (PDT)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025;\n\th=subject:to:cc:references:from:message-id:date:user-agent\n\t:mime-version:in-reply-to:content-language:content-transfer-encoding; \n\tbh=fVf4jmmOPFLPYsPh/lLBPazV3H8pruhnDyS4IrgS+Mw=;\n\tb=fENfZf6g4ySK08GLHyhLw2wbIWnEC9mrne+PRydeUUNrfKzgbTKL8McdB+Sdoi5mgl\n\tEeshlO2CVQjrVYrfII/pqNngmfyydGT9XfbyEVXbIYAaQi8lCRf3VRka2iTI28w1VKOb\n\tomCF4ifHQRurfCyAkiaK5yn6yibV8HqCrY1zJx1CB6G2zxBgSuuvKKk1oRFRuqccIEpu\n\tYgK2KBV7gAdPwsf8XxCTTTWqZITj5GPD7uK3SFhR6ueMLmuS5Pn2gNudDgGkUrrcmQ6L\n\tYVA5ZLn+McwBnsFCv6KJWowh3DuGFCyR+R44C+vlgRG8bOLmn6lVWAdKvjEYuD+MM1/0\n\ttkaQ==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:subject:to:cc:references:from:message-id:date\n\t:user-agent:mime-version:in-reply-to:content-language\n\t:content-transfer-encoding;\n\tbh=fVf4jmmOPFLPYsPh/lLBPazV3H8pruhnDyS4IrgS+Mw=;\n\tb=oXkoUftpHbg/Ctc2YVub/EYvXU36hLENxfnf+UrgRTa87vg/IW1pKhYI/Av8KhMF4R\n\tOdyId+K7CP7SNV9UACBn2n+XJcNkR/YiQBk9FeDlWEEXoblnV8CfL17PfWdsAmx/4FYR\n\tgx2KbXfYRWSzHmhpdNKNrPSjLnh3YJi1o2RWHqWhdnsYEH1ZJIf7nbygFghmhUP/vd6s\n\t3u9hAONwWUmI/tVpjNmJytqKG6toyoNgk4GwQ/v17AbO4kYLBfZOOa8girm0mhuAfIVg\n\tlKzy+vUm68PugKJo1TxjItib7yOqkkAh8QCBsRWL2hqfE2GZzM97juNfjHLo5Z9XB/1G\n\tsStw==","X-Gm-Message-State":"AHPjjUgycBVvjh3fpJkebnX8lMiKyWTN4LAhq1bKcmiGtFbVbGKNzfZ0\n\tArZAoBeUWaji/Q==","X-Google-Smtp-Source":"ADKCNb6Nk/HVmYF+VwhPGVDxqDvR7w/yLyvAv8llbfhQ+s5muw4vigPfhu9yUCrGhWEQsZhanyuayQ==","X-Received":"by 10.36.65.134 with SMTP id b6mr2445460itd.115.1504579641608;\n\tMon, 04 Sep 2017 19:47:21 -0700 (PDT)","Subject":"Re: [PATCH v2 1/3] arm: npcm: add basic support for Nuvoton BMCs","To":"Brendan Higgins <brendanhiggins@google.com>, robh+dt@kernel.org,\n\tmark.rutland@arm.com, linux@armlinux.org.uk,\n\tavifishman70@gmail.com, tmaimon77@gmail.com, raltherr@google.com","Cc":"devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,\n\tlinux-arm-kernel@lists.infradead.org, openbmc@lists.ozlabs.org","References":"<20170831225400.19756-1-brendanhiggins@google.com>\n\t<20170831225400.19756-2-brendanhiggins@google.com>","From":"Florian Fainelli <f.fainelli@gmail.com>","Message-ID":"<8fd55a57-946d-f53f-e10b-c73d1f70d1dc@gmail.com>","Date":"Mon, 4 Sep 2017 19:47:16 -0700","User-Agent":"Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101\n\tThunderbird/52.2.1","MIME-Version":"1.0","In-Reply-To":"<20170831225400.19756-2-brendanhiggins@google.com>","Content-Type":"text/plain; charset=utf-8","Content-Language":"en-US","Content-Transfer-Encoding":"8bit","Sender":"devicetree-owner@vger.kernel.org","Precedence":"bulk","List-ID":"<devicetree.vger.kernel.org>","X-Mailing-List":"devicetree@vger.kernel.org"}},{"id":1763749,"web_url":"http://patchwork.ozlabs.org/comment/1763749/","msgid":"<CAFd5g45W0jBFe-Uhjv07fxsaxtAbHmxkJU=RQu+qWT=Ohf8s+g@mail.gmail.com>","list_archive_url":null,"date":"2017-09-06T00:42:46","subject":"Re: [PATCH v2 1/3] arm: npcm: add basic support for Nuvoton BMCs","submitter":{"id":69647,"url":"http://patchwork.ozlabs.org/api/people/69647/","name":"Brendan Higgins","email":"brendanhiggins@google.com"},"content":"With the exception of one comment, which I have responded to\nbelow, I have addressed your comments in my new version of\nthis patch: https://patchwork.kernel.org/patch/9914153/\n\nOn Mon, Sep 4, 2017 at 7:47 PM, Florian Fainelli <f.fainelli@gmail.com> wrote:\n...\n>> +\n>> +ENTRY(v7_invalidate_l1_npcmX50)\n>> +     mov     r0, #0\n>> +     mcr     p15, 0, r0, c7, c5, 0 /* invalidate I cache */\n>> +     mcr     p15, 2, r0, c0, c0, 0\n>> +     mrc     p15, 1, r0, c0, c0, 0\n>> +\n>> +     ldr     r1, =0x7fff\n>> +     and     r2, r1, r0, lsr #13\n>> +\n>> +     ldr     r1, =0x3ff\n>> +\n>> +     and     r3, r1, r0, lsr #3 /* NumWays - 1 */\n>> +     add     r2, r2, #1         /* NumSets */\n>> +\n>> +     and     r0, r0, #0x7\n>> +     add     r0, r0, #4 /* SetShift */\n>> +\n>> +     clz     r1, r3     /* WayShift */\n>> +     add     r4, r3, #1 /* NumWays */\n>> +1:   sub     r2, r2, #1 /* NumSets-- */\n>> +     mov     r3, r4     /* Temp = NumWays */\n>> +2:   subs    r3, r3, #1 /* Temp-- */\n>> +     mov     r5, r3, lsl r1\n>> +     mov     r6, r2, lsl r0\n>> +     /* Reg = (Temp << WayShift) | (NumSets << SetShift) */\n>> +     orr     r5, r5, r6\n>> +     mcr     p15, 0, r5, c7, c6, 2\n>> +     bgt     2b\n>> +     cmp     r2, #0\n>> +     bgt     1b\n>> +     dsb\n>> +     isb\n>> +     mov     pc, lr\n>> +ENDPROC(v7_invalidate_l1_npcmX50)\n>\n> This looks a lot, if not nearly the same thing as v7_invalidate_l1 which\n> is already called by secondary_startup, can you see if you can re-use it\n> directly?\n>\n>> +\n>> +/*\n>> + * MSM specific entry point for secondary CPUs.  This provides\n>> + * a \"holding pen\" into which all secondary cores are held until we're\n>> + * ready for them to initialise.\n>> + */\n>\n> Assuming this was copied from a Qualcomm MSM routine, you may want to\n> fix the comment, typo on \"initialis.\n>\n>> +ENTRY(npcm7xx_secondary_startup)\n>> +     msr     CPSR_c, #(SVC_MODE)\n>\n> Is there a BootROM or something that would not make the secondary cores\n> start in supervisor mode?\n\nUnfortunately, yes; however, I was able to cut all of the other code out of\nnpcm7xx_secondary_startup, so now it just puts the core in SVC mode and\nrelies on secondary_startup to do all of the L1 cache invalidation.\n\n>\n>> +\n>> +     bl      v7_invalidate_l1_npcmX50\n>> +     /* disable vector table remapping */\n>> +     mrc     p15, 0,r0, c1, c0, 0\n>> +     and     r0, #0xffffdfff\n>> +     mcr     p15, 0,r0, c1, c0, 0\n>> +\n>> +#ifdef CONFIG_CACHE_L2X0\n>> +     /* Enable L1 & L2 prefetch + Zero line */\n>> +     mrc     p15, 0, r0, c1, c0, 1\n>> +     orr     r0, r0, #(7 << 1)\n>> +     mcr     p15, 0, r0, c1, c0, 1\n>> +#endif /* CONFIG_CACHE_L2X0 */\n>> +\n>> +     mrc     p15, 0, r0, c0, c0, 5\n>> +     and     r0, r0, #15\n>> +     adr     r4, 1f\n>> +     ldmia   r4, {r5, r6}\n>> +     sub     r4, r4, r5\n>> +     add     r6, r6, r4\n>> +     str r3,[r2]\n>> +\n>> +pen: ldr     r7, [r6]\n>> +     cmp     r7, r0\n>> +     bne     pen\n>> +\n...\n--\nTo unsubscribe from this list: send the line \"unsubscribe devicetree\" in\nthe body of a message to majordomo@vger.kernel.org\nMore majordomo info at  http://vger.kernel.org/majordomo-info.html","headers":{"Return-Path":"<devicetree-owner@vger.kernel.org>","X-Original-To":"incoming-dt@patchwork.ozlabs.org","Delivered-To":"patchwork-incoming-dt@bilbo.ozlabs.org","Authentication-Results":["ozlabs.org;\n\tspf=none (mailfrom) smtp.mailfrom=vger.kernel.org\n\t(client-ip=209.132.180.67; helo=vger.kernel.org;\n\tenvelope-from=devicetree-owner@vger.kernel.org; receiver=<UNKNOWN>)","ozlabs.org;\n\tdkim=fail reason=\"signature verification failed\" (2048-bit key;\n\tunprotected) header.d=google.com header.i=@google.com\n\theader.b=\"MfxWl7Xr\"; dkim-atps=neutral"],"Received":["from vger.kernel.org (vger.kernel.org [209.132.180.67])\n\tby ozlabs.org (Postfix) with ESMTP id 3xn4Yy5McBz9t3Z\n\tfor <incoming-dt@patchwork.ozlabs.org>;\n\tWed,  6 Sep 2017 10:43:02 +1000 (AEST)","(majordomo@vger.kernel.org) by vger.kernel.org via listexpand\n\tid S1752792AbdIFAmt (ORCPT\n\t<rfc822;incoming-dt@patchwork.ozlabs.org>);\n\tTue, 5 Sep 2017 20:42:49 -0400","from mail-qt0-f182.google.com ([209.85.216.182]:35349 \"EHLO\n\tmail-qt0-f182.google.com\" rhost-flags-OK-OK-OK-OK) by vger.kernel.org\n\twith ESMTP id S1752619AbdIFAms (ORCPT\n\t<rfc822; devicetree@vger.kernel.org>); Tue, 5 Sep 2017 20:42:48 -0400","by mail-qt0-f182.google.com with SMTP id k2so16318742qte.2\n\tfor <devicetree@vger.kernel.org>;\n\tTue, 05 Sep 2017 17:42:47 -0700 (PDT)","by 10.140.33.197 with HTTP; Tue, 5 Sep 2017 17:42:46 -0700 (PDT)"],"DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com;\n\ts=20161025; \n\th=mime-version:in-reply-to:references:from:date:message-id:subject:to\n\t:cc; bh=0eNLMu1mwaj+pmMymgBbdfxkVmc6naS5nehHrb3ILbk=;\n\tb=MfxWl7Xr2/1ef8PLdb4tUlKW4+Y/wTE5HIK8jFaBAKVD3q6VVy5z5dRuHKE8DQj5DV\n\twxgetynp3Zc/Jl/9HH7yQQ20lmMDQdrG4ZkIAE1ew6Jz/SwhLzMZ3Nb/9wWq0e3oJQvT\n\t56lN39h/2QoJg8F2OuzBoC1fIRp/7tzPcss4drzZz3OpY4OgXChbpUTZxoYYmjHjYDW5\n\tiQa1kbg9WOuXynQO3riYNVnNNDsJoW0tfW8BSMua+VmL/lgFSvABqNS7XGZxeY4mVFMV\n\tx6lQGviCWYLgBqvJYh/kOQRE2dvnp4F3aAZ2zVMVvsLj9USLYkUAYU4awsYualDCc/qK\n\tTLeA==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n\td=1e100.net; s=20161025;\n\th=x-gm-message-state:mime-version:in-reply-to:references:from:date\n\t:message-id:subject:to:cc;\n\tbh=0eNLMu1mwaj+pmMymgBbdfxkVmc6naS5nehHrb3ILbk=;\n\tb=hnDmXw128zFdZCCB0sMjp0/okpzFRq0X5iN10TUqv8hg4bYbhWrNrKrIer3KPFzCYb\n\t6oIEucHYzwyLHkfvWzbX5Vo1yqBk8M7C8N9E9raSA79gOiZJ9OYfGzzTKT+NbQsK+zDs\n\tD2YHpu/EC56jcXR44eR9hz1FgR1437/Wy+ClwwLfj7x7E2YsvuS+GozznJkyoUPD/m/B\n\trxNPvlbmU3CpqEJMdpVhZyq8/nu/NOnbrwEf0bT/FPctkr4AC0CslyxJEh1rlWF0/HGJ\n\tVyYY8VFnll8OAiwa2n4oZr9/uah3tybpO/RwqNE4t/ce7LjKeRHdcsFxuG/HTUXwGY8G\n\tLQQw==","X-Gm-Message-State":"AHPjjUg5kzmmF0nndc8CZsdcH6FzCuFXgsFEN5bhgVo++vS2CwfjlGqh\n\tjBRkIlOXZdAZDDlJ7PjIYjkdHB09/lnb","X-Google-Smtp-Source":"ADKCNb4ZGyf3ttQdaoUKuVNLNsOA+wCZOo1fP/TZkqckN0IP2UY1hWHuK10dVoHpf43GPJiJ4P3Vnxg8DX5AqJsdRbA=","X-Received":"by 10.237.43.67 with SMTP id p61mr1347551qtd.172.1504658566944; \n\tTue, 05 Sep 2017 17:42:46 -0700 (PDT)","MIME-Version":"1.0","In-Reply-To":"<8fd55a57-946d-f53f-e10b-c73d1f70d1dc@gmail.com>","References":"<20170831225400.19756-1-brendanhiggins@google.com>\n\t<20170831225400.19756-2-brendanhiggins@google.com>\n\t<8fd55a57-946d-f53f-e10b-c73d1f70d1dc@gmail.com>","From":"Brendan Higgins <brendanhiggins@google.com>","Date":"Tue, 5 Sep 2017 17:42:46 -0700","Message-ID":"<CAFd5g45W0jBFe-Uhjv07fxsaxtAbHmxkJU=RQu+qWT=Ohf8s+g@mail.gmail.com>","Subject":"Re: [PATCH v2 1/3] arm: npcm: add basic support for Nuvoton BMCs","To":"Florian Fainelli <f.fainelli@gmail.com>","Cc":"Rob Herring <robh+dt@kernel.org>,\n\tMark Rutland <mark.rutland@arm.com>, linux@armlinux.org.uk,\n\tavifishman70@gmail.com, tmaimon77@gmail.com,\n\tRick Altherr <raltherr@google.com>,\n\tdevicetree <devicetree@vger.kernel.org>,\n\tLinux Kernel Mailing List <linux-kernel@vger.kernel.org>,\n\tlinux-arm-kernel@lists.infradead.org,\n\tOpenBMC Maillist <openbmc@lists.ozlabs.org>","Content-Type":"text/plain; charset=\"UTF-8\"","Sender":"devicetree-owner@vger.kernel.org","Precedence":"bulk","List-ID":"<devicetree.vger.kernel.org>","X-Mailing-List":"devicetree@vger.kernel.org"}}]