linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Rob Herring <robh+dt@kernel.org>
To: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
Cc: arcml <linux-snps-arc@lists.infradead.org>,
	"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
	Vineet Gupta <Vineet.Gupta1@synopsys.com>,
	Alexey Brodkin <Alexey.Brodkin@synopsys.com>,
	"devicetree@vger.kernel.org" <devicetree@vger.kernel.org>
Subject: Re: [PATCH 3/3 v6] ARC: hsdk: initial port for HSDK board
Date: Mon, 26 Jun 2017 10:51:04 -0500	[thread overview]
Message-ID: <CAL_JsqJBPL+AuYNP=JgXWOGNFxdenKY4Rt3_f6tG6MYDLncRNg@mail.gmail.com> (raw)
In-Reply-To: <20170626151118.19507-4-Eugeniy.Paltsev@synopsys.com>

On Mon, Jun 26, 2017 at 10:11 AM, Eugeniy Paltsev
<Eugeniy.Paltsev@synopsys.com> wrote:
> From: Alexey Brodkin <abrodkin@synopsys.com>
>
> This initial port adds support of ARC HS Development Kit board with some
> basic features such serial port, USB, SD/MMC and Ethernet.
>
> Essentially we run Linux kernel on all 4 cores (i.e. utilize SMP) and
> heavily use IO Coherency for speeding-up DMA-aware peripherals.
>
> Note as opposed to other ARC boards we link Linux kernel to
> 0x9000_0000 intentionally because cores 1 and 3 configured with DCCM
> situated at our more usual link base 0x8000_0000. We still can use
> memory region starting at 0x8000_0000 as we reallocate DCCM in our
> platform code.
>
> Note that PAE remapping for DMA clients does not work due to an RTL bug,
> so CREG_PAE register must be programmed to all zeroes, otherwise it will
> cause problems with DMA to/from peripherals even if PAE40 is not used.
>
> Signed-off-by: Alexey Brodkin <abrodkin@synopsys.com>
> Signed-off-by: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
> ---
>  Documentation/devicetree/bindings/arc/hsdk.txt |   7 ++
>  arch/arc/Kconfig                               |   1 +
>  arch/arc/Makefile                              |   1 +
>  arch/arc/boot/dts/hsdk.dts                     | 150 +++++++++++++++++++++++++
>  arch/arc/configs/hsdk_defconfig                |  75 +++++++++++++
>  arch/arc/kernel/devtree.c                      |   5 +-
>  arch/arc/plat-hsdk/Kconfig                     |  12 ++
>  arch/arc/plat-hsdk/Makefile                    |   9 ++
>  arch/arc/plat-hsdk/platform.c                  |  79 +++++++++++++
>  9 files changed, 337 insertions(+), 2 deletions(-)
>  create mode 100644 Documentation/devicetree/bindings/arc/hsdk.txt
>  create mode 100644 arch/arc/boot/dts/hsdk.dts
>  create mode 100644 arch/arc/configs/hsdk_defconfig
>  create mode 100644 arch/arc/plat-hsdk/Kconfig
>  create mode 100644 arch/arc/plat-hsdk/Makefile
>  create mode 100644 arch/arc/plat-hsdk/platform.c
>
> diff --git a/Documentation/devicetree/bindings/arc/hsdk.txt b/Documentation/devicetree/bindings/arc/hsdk.txt
> new file mode 100644
> index 0000000..be50654
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/arc/hsdk.txt
> @@ -0,0 +1,7 @@
> +Synopsys DesignWare ARC HS Development Kit Device Tree Bindings
> +---------------------------------------------------------------------------
> +
> +ARC HSDK Board with quad-core ARC HS38x4 in silicon.
> +
> +Required root node properties:
> +    - compatible = "snps,hsdk";
> diff --git a/arch/arc/Kconfig b/arch/arc/Kconfig
> index 75e5276..825a112 100644
> --- a/arch/arc/Kconfig
> +++ b/arch/arc/Kconfig
> @@ -101,6 +101,7 @@ source "arch/arc/plat-tb10x/Kconfig"
>  source "arch/arc/plat-axs10x/Kconfig"
>  #New platform adds here
>  source "arch/arc/plat-eznps/Kconfig"
> +source "arch/arc/plat-hsdk/Kconfig"
>
>  endmenu
>
> diff --git a/arch/arc/Makefile b/arch/arc/Makefile
> index 44ef35d..55ca925 100644
> --- a/arch/arc/Makefile
> +++ b/arch/arc/Makefile
> @@ -111,6 +111,7 @@ core-$(CONFIG_ARC_PLAT_SIM) += arch/arc/plat-sim/
>  core-$(CONFIG_ARC_PLAT_TB10X)  += arch/arc/plat-tb10x/
>  core-$(CONFIG_ARC_PLAT_AXS10X) += arch/arc/plat-axs10x/
>  core-$(CONFIG_ARC_PLAT_EZNPS)  += arch/arc/plat-eznps/
> +core-$(CONFIG_ARC_PLAT_HSDK)   += arch/arc/plat-hsdk/
>
>  ifdef CONFIG_ARC_PLAT_EZNPS
>  KBUILD_CPPFLAGS += -I$(srctree)/arch/arc/plat-eznps/include
> diff --git a/arch/arc/boot/dts/hsdk.dts b/arch/arc/boot/dts/hsdk.dts
> new file mode 100644
> index 0000000..6a4e471
> --- /dev/null
> +++ b/arch/arc/boot/dts/hsdk.dts
> @@ -0,0 +1,150 @@
> +/*
> + * Copyright (C) 2017 Synopsys, Inc. (www.synopsys.com)
> + *
> + * 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.
> + */
> +
> +/*
> + * Device Tree for ARC HS Development Kit
> + */
> +/dts-v1/;
> +
> +/include/ "skeleton_hs_idu.dtsi"
> +
> +#include <dt-bindings/net/ti-dp83867.h>
> +
> +/ {
> +       model = "snps,hsdk";
> +       compatible = "snps,hsdk";
> +
> +       #address-cells = <1>;
> +       #size-cells = <1>;
> +
> +       chosen {
> +               bootargs = "earlycon=uart8250,mmio32,0xf0005000,115200n8 console=ttyS0,115200n8 debug print-fatal-signals=1";

Use stdout-path for the console. Really, the bootargs should be blank
and populated by the bootloader especially debug options.

> +       };
> +
> +       cpu {

'cpu' is for cpu nodes, so need something different.

> +               compatible = "simple-bus";
> +               #address-cells = <1>;
> +               #size-cells = <1>;

There are no reg properties, so these aren't needed. This doesn't look
like a simple-bus either.

Probably these child nodes should just be moved up to root level.

> +               interrupt-parent = <&core_intc>;
> +
> +               core_clk: core_clk {

core-clk {

> +                       #clock-cells = <0>;
> +                       compatible = "fixed-clock";
> +                       clock-frequency = <1000000000>;
> +               };
> +
> +               core_intc: archs-intc@cpu {

cpu is not a valid unit-address. How are these interrupt controllers addressed?

> +                       compatible = "snps,archs-intc";
> +                       interrupt-controller;
> +                       #interrupt-cells = <1>;
> +               };
> +
> +               idu_intc: idu-interrupt-controller {
> +                       compatible = "snps,archs-idu-intc";
> +                       interrupt-controller;
> +                       #interrupt-cells = <1>;
> +               };
> +
> +               arcpct0: pct {
> +                       compatible = "snps,archs-pct";
> +               };
> +       };
> +
> +       soc {
> +               compatible = "simple-bus";
> +               #address-cells = <1>;
> +               #size-cells = <1>;
> +               interrupt-parent = <&idu_intc>;
> +
> +               ranges = <0x00000000 0xf0000000 0x10000000>;
> +
> +               uart: dw-apb-uart@5000 {

serial@...

> +                       compatible = "snps,dw-apb-uart";
> +                       reg = <0x5000 0x100>;
> +                       clock-frequency = <33330000>;
> +                       interrupts = <6>;
> +                       baud = <115200>;
> +                       reg-shift = <2>;
> +                       reg-io-width = <4>;
> +               };
> +
> +               gmacclk: gmacclk {
> +                       compatible = "fixed-clock";
> +                       clock-frequency = <400000000>;
> +                       #clock-cells = <0>;
> +               };
> +
> +               mmcclk_ciu: mmcclk_ciu {

Don't use underscores in node names.

> +                       compatible = "fixed-clock";
> +                       clock-frequency = <100000000>;
> +                       #clock-cells = <0>;
> +               };
> +
> +               mmcclk_biu: mmcclk_biu {
> +                       compatible = "fixed-clock";
> +                       clock-frequency = <400000000>;
> +                       #clock-cells = <0>;
> +               };
> +
> +               ethernet@8000 {
> +                       #interrupt-cells = <1>;
> +                       compatible = "snps,dwmac";
> +                       reg = <0x8000 0x2000>;
> +                       interrupts = <10>;
> +                       interrupt-names = "macirq";
> +                       phy-mode = "rgmii";
> +                       snps,pbl = <32>;
> +                       clocks = <&gmacclk>;
> +                       clock-names = "stmmaceth";
> +                       phy-handle = <&phy0>;
> +
> +                       mdio0 {

mdio {

> +                               #address-cells = <1>;
> +                               #size-cells = <0>;
> +                               compatible = "snps,dwmac-mdio";
> +                               phy0: ethernet-phy@0 {
> +                                       reg = <0>;
> +                                       ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>;
> +                                       ti,tx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>;
> +                                       ti,fifo-depth = <DP83867_PHYCR_FIFO_DEPTH_4_B_NIB>;
> +                               };
> +                       };
> +               };
> +
> +               ohci@60000 {
> +                       compatible = "generic-ohci";

This should have an SoC specific compatible.

> +                       reg = <0x60000 0x100>;
> +                       interrupts = <15>;
> +               };
> +
> +               ehci@40000 {
> +                       compatible = "generic-ehci";

This should have an SoC specific compatible.

> +                       reg = <0x40000 0x100>;
> +                       interrupts = <15>;
> +               };
> +
> +               mmc@a000 {
> +                       compatible = "altr,socfpga-dw-mshc";
> +                       reg = <0xa000 0x400>;
> +                       num-slots = <1>;
> +                       fifo-depth = <16>;
> +                       card-detect-delay = <200>;
> +                       clocks = <&mmcclk_biu>, <&mmcclk_ciu>;
> +                       clock-names = "biu", "ciu";
> +                       interrupts = <12>;
> +                       bus-width = <4>;
> +               };
> +       };
> +
> +       memory {

memory@80000000

> +               #address-cells = <1>;
> +               #size-cells = <1>;
> +               device_type = "memory";
> +               reg = <0x80000000 0x40000000>;  /* 1 GiB */
> +       };
> +};
> diff --git a/arch/arc/configs/hsdk_defconfig b/arch/arc/configs/hsdk_defconfig
> new file mode 100644
> index 0000000..53bc9f3
> --- /dev/null
> +++ b/arch/arc/configs/hsdk_defconfig
> @@ -0,0 +1,75 @@
> +CONFIG_DEFAULT_HOSTNAME="ARCLinux"
> +CONFIG_SYSVIPC=y
> +# CONFIG_CROSS_MEMORY_ATTACH is not set
> +CONFIG_NO_HZ_IDLE=y
> +CONFIG_HIGH_RES_TIMERS=y
> +CONFIG_IKCONFIG=y
> +CONFIG_IKCONFIG_PROC=y
> +CONFIG_NAMESPACES=y
> +# CONFIG_UTS_NS is not set
> +# CONFIG_PID_NS is not set
> +CONFIG_BLK_DEV_INITRD=y
> +CONFIG_INITRAMFS_SOURCE="../../arc_initramfs_hs/"
> +CONFIG_EMBEDDED=y
> +CONFIG_PERF_EVENTS=y
> +# CONFIG_VM_EVENT_COUNTERS is not set
> +# CONFIG_COMPAT_BRK is not set
> +CONFIG_SLAB=y
> +CONFIG_ARC_PLAT_HSDK=y
> +CONFIG_ISA_ARCV2=y
> +CONFIG_SMP=y
> +CONFIG_LINUX_LINK_BASE=0x90000000
> +CONFIG_KERNEL_RAM_BASE_ADDRESS=0x80000000
> +CONFIG_ARC_BUILTIN_DTB_NAME="hsdk"
> +CONFIG_PREEMPT=y
> +# CONFIG_COMPACTION is not set
> +CONFIG_NET=y
> +CONFIG_PACKET=y
> +CONFIG_UNIX=y
> +CONFIG_INET=y
> +CONFIG_DEVTMPFS=y
> +# CONFIG_STANDALONE is not set
> +# CONFIG_PREVENT_FIRMWARE_BUILD is not set
> +# CONFIG_FIRMWARE_IN_KERNEL is not set
> +CONFIG_SCSI=y
> +CONFIG_BLK_DEV_SD=y
> +CONFIG_NETDEVICES=y
> +CONFIG_STMMAC_ETH=y
> +CONFIG_MICREL_PHY=y
> +# CONFIG_INPUT_KEYBOARD is not set
> +# CONFIG_INPUT_MOUSE is not set
> +# CONFIG_SERIO is not set
> +# CONFIG_LEGACY_PTYS is not set
> +CONFIG_SERIAL_8250=y
> +CONFIG_SERIAL_8250_CONSOLE=y
> +CONFIG_SERIAL_8250_DW=y
> +CONFIG_SERIAL_OF_PLATFORM=y
> +# CONFIG_HW_RANDOM is not set
> +# CONFIG_HWMON is not set
> +CONFIG_FB=y
> +CONFIG_FB_UDL=y
> +CONFIG_FRAMEBUFFER_CONSOLE=y
> +CONFIG_USB=y
> +CONFIG_USB_EHCI_HCD=y
> +CONFIG_USB_EHCI_HCD_PLATFORM=y
> +CONFIG_USB_OHCI_HCD=y
> +CONFIG_USB_OHCI_HCD_PLATFORM=y
> +CONFIG_USB_STORAGE=y
> +CONFIG_MMC=y
> +CONFIG_MMC_SDHCI=y
> +CONFIG_MMC_SDHCI_PLTFM=y
> +CONFIG_MMC_DW=y
> +# CONFIG_IOMMU_SUPPORT is not set
> +CONFIG_EXT3_FS=y
> +CONFIG_VFAT_FS=y
> +CONFIG_TMPFS=y
> +CONFIG_NLS_CODEPAGE_437=y
> +CONFIG_NLS_ISO8859_1=y
> +# CONFIG_ENABLE_WARN_DEPRECATED is not set
> +# CONFIG_ENABLE_MUST_CHECK is not set
> +CONFIG_STRIP_ASM_SYMS=y
> +CONFIG_LOCKUP_DETECTOR=y
> +CONFIG_DEFAULT_HUNG_TASK_TIMEOUT=10
> +# CONFIG_SCHED_DEBUG is not set
> +# CONFIG_DEBUG_PREEMPT is not set
> +# CONFIG_FTRACE is not set
> diff --git a/arch/arc/kernel/devtree.c b/arch/arc/kernel/devtree.c
> index 3b67f53..521ef35 100644
> --- a/arch/arc/kernel/devtree.c
> +++ b/arch/arc/kernel/devtree.c
> @@ -29,8 +29,9 @@ static void __init arc_set_early_base_baud(unsigned long dt_root)
>  {
>         if (of_flat_dt_is_compatible(dt_root, "abilis,arc-tb10x"))
>                 arc_base_baud = 166666666;      /* Fixed 166.6MHz clk (TB10x) */
> -       else if (of_flat_dt_is_compatible(dt_root, "snps,arc-sdp"))
> -               arc_base_baud = 33333333;       /* Fixed 33MHz clk (AXS10x) */
> +       else if (of_flat_dt_is_compatible(dt_root, "snps,arc-sdp") ||
> +                of_flat_dt_is_compatible(dt_root, "snps,hsdk"))
> +               arc_base_baud = 33333333;       /* Fixed 33MHz clk (AXS10x & HSDK) */

You should get this info from DT. You don't need to address that now though.

>         else if (of_flat_dt_is_compatible(dt_root, "ezchip,arc-nps"))
>                 arc_base_baud = 800000000;      /* Fixed 800MHz clk (NPS) */
>         else
> diff --git a/arch/arc/plat-hsdk/Kconfig b/arch/arc/plat-hsdk/Kconfig
> new file mode 100644
> index 0000000..29dffed
> --- /dev/null
> +++ b/arch/arc/plat-hsdk/Kconfig
> @@ -0,0 +1,12 @@
> +#
> +# Copyright (C) 2017 Synopsys, Inc. (www.synopsys.com)
> +#
> +# 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.
> +#
> +
> +menuconfig ARC_PLAT_HSDK
> +       bool "ARC HS Development Kit board"

Per board config options don't scale and shouldn't be necessary with DT...

Rob

  reply	other threads:[~2017-06-26 15:51 UTC|newest]

Thread overview: 10+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-06-26 15:11 [PATCH 0/3 v6] hsdk: initial port for HSDK board Eugeniy Paltsev
2017-06-26 15:11 ` [PATCH 1/3 v6] ARC: Set IO-coherency aperture base to LINUX_LINK_BASE Eugeniy Paltsev
2017-06-26 15:11 ` [PATCH 2/3 v6] ARC: Decouple linux kernel memory address and link address Eugeniy Paltsev
2017-06-26 15:11 ` [PATCH 3/3 v6] ARC: hsdk: initial port for HSDK board Eugeniy Paltsev
2017-06-26 15:51   ` Rob Herring [this message]
2017-06-26 16:25     ` Alexey Brodkin
2017-06-27  4:25       ` stdout-path (was Re: [PATCH 3/3 v6] ARC: hsdk: initial port for HSDK board) Vineet Gupta
2017-06-28 22:50       ` [PATCH 3/3 v6] ARC: hsdk: initial port for HSDK board Rob Herring
2017-06-29 16:39         ` Eugeniy Paltsev
2017-06-29  7:27   ` Vineet Gupta

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='CAL_JsqJBPL+AuYNP=JgXWOGNFxdenKY4Rt3_f6tG6MYDLncRNg@mail.gmail.com' \
    --to=robh+dt@kernel.org \
    --cc=Alexey.Brodkin@synopsys.com \
    --cc=Eugeniy.Paltsev@synopsys.com \
    --cc=Vineet.Gupta1@synopsys.com \
    --cc=devicetree@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-snps-arc@lists.infradead.org \
    /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).