[PATCH 0/3 v7] hsdk: initial port for HSDK board

Eugeniy Paltsev Eugeniy.Paltsev at synopsys.com
Mon Jul 3 09:51:06 PDT 2017

This series introduces some required preparations and initial
port of ARC HS Development Kit board with some basic features such
as 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.

Note that two patches of this series ("ARC: Decouple linux kernel memory
address and link address" and "ARC: Set IO-coherency aperture base to 
LINUX_LINK_BASE") are prerequisites for HDSK support as its hardware
configuration differs quite a bit from what we used to have on other
ARC boards.

Alexey Brodkin (1):
  ARC: hsdk: initial port for HSDK board

Eugeniy Paltsev (2):
  ARC: Set IO-coherency aperture base to LINUX_LINK_BASE
  ARC: Decouple linux kernel memory address and link address

Changes v6 -> v7:
 * DTS: get rid of skeleton.dts, move cpus nodes to hsdk.dts
 * DTS: style fixes
 * Enable loadable modules, module unloading and NFS client as defaults
 * Get rid of ARC_PLAT_HSDK board config option

Changes v5 -> v6:
 * Add support of USB-to-HDMI adapter
 * Revert removing of resetting CREG_PAE bits.
   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.

Changes v4 -> v5:
 * Move DCCM outside of 0x8000_0000 adress at kernel boot time.
 * Decouple linux kernel memory address and link address.
 * Remove hardcoding of IO-coherency aperture base.
 * Remove resetting CREG_PAE bits as default value is suitable for us.

Changes v3 -> v4:
 * Removed senseless "ranges" property from "memory" node in .dts
 * Refined early-boot code:
    - ICCM relocation should be done on each and every core that sports ICCM
      so we leave it in init_per_cpu(). Even though init_per_cpu() gets called
      on the master core pretty late still it is way much earlier than that
      moment when it might affect us - as it only huts us when addresses in
      0x7z-0x7fff_ffff range are used, i.e. virtual addresses that we don't
      use during init. This also makes code much cleaner compared to
      additional check in case of master etc.

Changes v2 -> v3:
 * Added Rob to Cc-list for DT binding approval
 * Removed mention of prerequsite patch from commit message
 * Removed hsdk_early_init() as hsdk_init_per_cpu() is executed on
   all cores anyways including master
 * Cleaned-up board's .dts a little bit
 * Removed CONFIG_DP83867_PHY from defconfig as it was only used on
   FPGA prototype, on real board we use MICREL PHY which is still selected

Changes v1 -> v2:
 * Update copyright year from 2016 to more up to date 2017
 * Merge early UART clock with AXS10x as in both cases that's 33.3 MHz
 * Bump memory to 1Gb, we don't use more for now because it requires
   trickier IOC setup and usage
 * Update early platform init code:
    - Added missing fixup_pae_regs() to per-cpu init
    - Mark most of functions as "static __init"
    - Use writel_relaxed() for setting CREG_PAE, CREG_PAE_UPDATE is still
      written with stronger writel() since we don't want reordering to happen,
      otherwise value written to CREG_PAE won't be applied

 Documentation/devicetree/bindings/arc/hsdk.txt |   7 ++
 arch/arc/Kconfig                               |   6 +
 arch/arc/Makefile                              |   1 +
 arch/arc/boot/dts/hsdk.dts                     | 150 +++++++++++++++++++++++++
 arch/arc/boot/dts/include/dt-bindings          |   1 +
 arch/arc/configs/hsdk_defconfig                |  72 ++++++++++++
 arch/arc/include/asm/page.h                    |   2 +-
 arch/arc/kernel/devtree.c                      |   5 +-
 arch/arc/mm/cache.c                            |  33 ++++--
 arch/arc/mm/init.c                             |   6 +-
 arch/arc/plat-hsdk/Kconfig                     |  12 ++
 arch/arc/plat-hsdk/Makefile                    |   9 ++
 arch/arc/plat-hsdk/platform.c                  |  77 +++++++++++++
 13 files changed, 366 insertions(+), 15 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/arc/hsdk.txt
 create mode 100644 arch/arc/boot/dts/hsdk.dts
 create mode 120000 arch/arc/boot/dts/include/dt-bindings
 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


More information about the linux-snps-arc mailing list