Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 28 Feb 2017 14:19:54 +0000
From:      Andrew Turner <andrew@fubar.geek.nz>
To:        Ruslan Bukin <br@FreeBSD.org>
Cc:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   Re: svn commit: r314389 - in head/sys: arm/altera/socfpga arm/conf boot/fdt/dts/arm
Message-ID:  <20170228141954.25098ee4@zapp>
In-Reply-To: <201702281402.v1SE2GRw072657@repo.freebsd.org>
References:  <201702281402.v1SE2GRw072657@repo.freebsd.org>

next in thread | previous in thread | raw e-mail | index | archive | help
On Tue, 28 Feb 2017 14:02:16 +0000 (UTC)
Ruslan Bukin <br@FreeBSD.org> wrote:

> Author: br
> Date: Tue Feb 28 14:02:16 2017
> New Revision: 314389
> URL: https://svnweb.freebsd.org/changeset/base/314389
> 
> Log:
>   Add support for Intel Arria 10 SoC Development Kit.
>   Use standard DTS files for SOCKIT and SOCDK.
>   
>   Sponsored by:	DARPA, AFRL
> 
> Added:
>   head/sys/arm/conf/SOCDK   (contents, props changed)
>   head/sys/arm/conf/SOCFPGA   (contents, props changed)
>   head/sys/boot/fdt/dts/arm/socfpga_arria10_socdk_sdmmc.dts
> (contents, props changed)
> head/sys/boot/fdt/dts/arm/socfpga_cyclone5_sockit_beri_sdmmc.dts
> (contents, props changed)
> head/sys/boot/fdt/dts/arm/socfpga_cyclone5_sockit_sdmmc.dts
> (contents, props changed) Deleted: head/sys/arm/conf/SOCKIT.common
> head/sys/boot/fdt/dts/arm/socfpga-sockit-beri.dts
> head/sys/boot/fdt/dts/arm/socfpga-sockit.dts
> head/sys/boot/fdt/dts/arm/socfpga.dtsi Modified:
>   head/sys/arm/altera/socfpga/socfpga_machdep.c
>   head/sys/arm/altera/socfpga/socfpga_manager.c
>   head/sys/arm/altera/socfpga/socfpga_mp.c
>   head/sys/arm/altera/socfpga/socfpga_mp.h
>   head/sys/arm/altera/socfpga/socfpga_rstmgr.c
>   head/sys/arm/altera/socfpga/socfpga_rstmgr.h
>   head/sys/arm/conf/SOCKIT
>   head/sys/arm/conf/SOCKIT-BERI
> 
> Modified: head/sys/arm/altera/socfpga/socfpga_machdep.c
> ==============================================================================
> --- head/sys/arm/altera/socfpga/socfpga_machdep.c	Tue Feb 28
> 12:05:58 2017	(r314388) +++
> head/sys/arm/altera/socfpga/socfpga_machdep.c	Tue Feb 28
> 14:02:16 2017	(r314389) @@ -1,5 +1,5 @@ /*-
> - * Copyright (c) 2014 Ruslan Bukin <br@bsdpad.com>
> + * Copyright (c) 2014-2017 Ruslan Bukin <br@bsdpad.com>
>   * All rights reserved.
>   *
>   * This software was developed by SRI International and the
> University of @@ -83,24 +83,43 @@ socfpga_devmap_init(platform_t plat)
>  	return (0);
>  }
>  
> +static int
> +socfpga_a10_devmap_init(platform_t plat)

You should create a SOC_ALTERA_ARRIA10 (or similar) option and use it
to conditionally compile this code.

> +{
> +
> +	/* UART */
> +	devmap_add_entry(0xffc00000, 0x100000);
> +
> +	/* USB OTG */
> +	devmap_add_entry(0xffb00000, 0x100000);
> +
> +	/* dwmmc */
> +	devmap_add_entry(0xff800000, 0x100000);
> +
> +	/* scu */
> +	devmap_add_entry(0xfff00000, 0x100000);
> +
> +	return (0);
> +}
> +
>  static void
> -socfpga_cpu_reset(platform_t plat)
> +_socfpga_cpu_reset(platform_t plat, uint32_t reg)

Why are you passing the platform_t into this? And reg should be a
bus_size_t.

>  {
>  	uint32_t paddr;
>  	bus_addr_t vaddr;
>  	phandle_t node;
>  
> -	if (rstmgr_warmreset() == 0)
> +	if (rstmgr_warmreset(reg) == 0)
>  		goto end;
>  
> -	node = OF_finddevice("rstmgr");
> +	node = OF_finddevice("/soc/rstmgr");
>  	if (node == -1)
>  		goto end;
>  
>  	if ((OF_getencprop(node, "reg", &paddr, sizeof(paddr))) > 0)
> { if (bus_space_map(fdtbus_bs_tag, paddr, 0x8, 0, &vaddr) == 0) {
>  			bus_space_write_4(fdtbus_bs_tag, vaddr,
> -			    RSTMGR_CTRL, CTRL_SWWARMRSTREQ);
> +			    reg, CTRL_SWWARMRSTREQ);
>  		}
>  	}
>  
> @@ -108,16 +127,38 @@ end:
>  	while (1);
>  }
>  
> +static void
> +socfpga_cpu_reset(platform_t plat)
> +{
> +
> +	_socfpga_cpu_reset(plat, RSTMGR_CTRL);
> +}
> +
> +static void
> +socfpga_a10_cpu_reset(platform_t plat)
> +{
> +
> +	_socfpga_cpu_reset(plat, RSTMGR_A10_CTRL);
> +}

these two and the methods below should be under SOC_ checks.

> +
>  static platform_method_t socfpga_methods[] = {
>  	PLATFORMMETHOD(platform_devmap_init,
> socfpga_devmap_init), PLATFORMMETHOD(platform_cpu_reset,
> socfpga_cpu_reset), -
>  #ifdef SMP
>  	PLATFORMMETHOD(platform_mp_setmaxid,
> socfpga_mp_setmaxid), PLATFORMMETHOD(platform_mp_start_ap,
> socfpga_mp_start_ap), #endif
> -
>  	PLATFORMMETHOD_END,
>  };
> +FDT_PLATFORM_DEF(socfpga, "socfpga", 0, "altr,socfpga-cyclone5",
> 200); 
> -FDT_PLATFORM_DEF(socfpga, "socfpga", 0, "altr,socfpga", 0);
> +static platform_method_t socfpga_a10_methods[] = {
> +	PLATFORMMETHOD(platform_devmap_init,
> socfpga_a10_devmap_init),
> +	PLATFORMMETHOD(platform_cpu_reset,
> socfpga_a10_cpu_reset), +#ifdef SMP
> +	PLATFORMMETHOD(platform_mp_setmaxid,
> socfpga_mp_setmaxid),
> +	PLATFORMMETHOD(platform_mp_start_ap,
> socfpga_a10_mp_start_ap), +#endif
> +	PLATFORMMETHOD_END,
> +};
> +FDT_PLATFORM_DEF(socfpga_a10, "socfpga", 0, "altr,socfpga-arria10",
> 200);
> 
> Modified: head/sys/arm/altera/socfpga/socfpga_manager.c
> ==============================================================================
> --- head/sys/arm/altera/socfpga/socfpga_manager.c	Tue Feb 28
> 12:05:58 2017	(r314388) +++
> head/sys/arm/altera/socfpga/socfpga_manager.c	Tue Feb 28
> 14:02:16 2017	(r314389) @@ -377,7 +377,7 @@
> fpgamgr_probe(device_t dev) if (!ofw_bus_status_okay(dev)) return
> (ENXIO); 
> -	if (!ofw_bus_is_compatible(dev, "altr,fpga-mgr"))
> +	if (!ofw_bus_is_compatible(dev, "altr,socfpga-fpga-mgr"))
>  		return (ENXIO);
>  
>  	device_set_desc(dev, "FPGA Manager");
> 
> Modified: head/sys/arm/altera/socfpga/socfpga_mp.c
> ==============================================================================
> --- head/sys/arm/altera/socfpga/socfpga_mp.c	Tue Feb 28
> 12:05:58 2017	(r314388) +++
> head/sys/arm/altera/socfpga/socfpga_mp.c	Tue Feb 28 14:02:16
> 2017	(r314389) @@ -1,5 +1,5 @@ /*-
> - * Copyright (c) 2014 Ruslan Bukin <br@bsdpad.com>
> + * Copyright (c) 2014-2017 Ruslan Bukin <br@bsdpad.com>
>   * All rights reserved.
>   *
>   * This software was developed by SRI International and the
> University of @@ -50,8 +50,10 @@ __FBSDID("$FreeBSD$");
>  #include <machine/platformvar.h>
>  
>  #include <arm/altera/socfpga/socfpga_mp.h>
> +#include <arm/altera/socfpga/socfpga_rstmgr.h>
>  
>  #define	SCU_PHYSBASE			0xFFFEC000
> +#define	SCU_PHYSBASE_A10		0xFFFFC000
>  #define	SCU_SIZE			0x100
>  
>  #define	SCU_CONTROL_REG			0x00
> @@ -69,11 +71,12 @@ __FBSDID("$FreeBSD$");
>  
>  #define	RSTMGR_PHYSBASE			0xFFD05000
>  #define	RSTMGR_SIZE			0x100
> -#define	MPUMODRST			0x10
> -#define	 MPUMODRST_CPU1			(1 << 1)
>  
>  #define	RAM_PHYSBASE			0x0
> -#define	 RAM_SIZE			0x1000
> +#define	RAM_SIZE			0x1000
> +
> +#define	SOCFPGA_SOCKIT			1
> +#define	SOCFPGA_SOCDK			2
>  
>  extern char	*mpentry_addr;
>  static void	socfpga_trampoline(void);
> @@ -109,15 +112,22 @@ socfpga_mp_setmaxid(platform_t plat)
>  	mp_maxid = ncpu - 1;
>  }
>  
> -void
> -socfpga_mp_start_ap(platform_t plat)
> +
> +static void
> +_socfpga_mp_start_ap(platform_t plat, uint32_t platid)
>  {
>  	bus_space_handle_t scu, rst, ram;
>  	int reg;
>  
> -	if (bus_space_map(fdtbus_bs_tag, SCU_PHYSBASE,
> -					SCU_SIZE, 0, &scu) != 0)
> +	if (platid == SOCFPGA_SOCDK) {
This should become a switch, with options protected by the SOC_
options, and a panic in the default case.

> +		if (bus_space_map(fdtbus_bs_tag, SCU_PHYSBASE_A10,
> +		    SCU_SIZE, 0, &scu) != 0)
>  		panic("Couldn't map the SCU\n");

The indentation here is odd.

> +	} else {
> +		if (bus_space_map(fdtbus_bs_tag, SCU_PHYSBASE,
> +		    SCU_SIZE, 0, &scu) != 0)
> +		panic("Couldn't map the SCU\n");
> +	}
>  	if (bus_space_map(fdtbus_bs_tag, RSTMGR_PHYSBASE,
>  					RSTMGR_SIZE, 0, &rst) != 0)
>  		panic("Couldn't map the reset manager (RSTMGR)\n");
> @@ -139,7 +149,13 @@ socfpga_mp_start_ap(platform_t plat)
>  	bus_space_write_4(fdtbus_bs_tag, scu, SCU_DIAG_CONTROL, reg);
>  
>  	/* Put CPU1 to reset state */
> -	bus_space_write_4(fdtbus_bs_tag, rst, MPUMODRST,
> MPUMODRST_CPU1);
> +	if (platid == SOCFPGA_SOCDK) {
> +		bus_space_write_4(fdtbus_bs_tag, rst,
> +		    RSTMGR_A10_MPUMODRST, MPUMODRST_CPU1);
> +	} else {
> +		bus_space_write_4(fdtbus_bs_tag, rst,
> +		    RSTMGR_MPUMODRST, MPUMODRST_CPU1);
> +	}
>  
>  	/* Enable the SCU, then clean the cache on this core */
>  	reg = bus_space_read_4(fdtbus_bs_tag, scu, SCU_CONTROL_REG);
> @@ -154,7 +170,13 @@ socfpga_mp_start_ap(platform_t plat)
>  	dcache_wbinv_poc_all();
>  
>  	/* Put CPU1 out from reset */
> -	bus_space_write_4(fdtbus_bs_tag, rst, MPUMODRST, 0);
> +	if (platid == SOCFPGA_SOCDK) {
> +		bus_space_write_4(fdtbus_bs_tag, rst,
> +		    RSTMGR_A10_MPUMODRST, 0);
> +	} else {
> +		bus_space_write_4(fdtbus_bs_tag, rst,
> +		    RSTMGR_MPUMODRST, 0);
> +	}
>  
>  	dsb();
>  	sev();
> @@ -163,3 +185,18 @@ socfpga_mp_start_ap(platform_t plat)
>  	bus_space_unmap(fdtbus_bs_tag, rst, RSTMGR_SIZE);
>  	bus_space_unmap(fdtbus_bs_tag, ram, RAM_SIZE);
>  }
> +
> +void
> +socfpga_a10_mp_start_ap(platform_t plat)
> +{
> +
> +	_socfpga_mp_start_ap(plat, SOCFPGA_SOCDK);
> +}
> +
> +void
> +socfpga_mp_start_ap(platform_t plat)
> +{
> +
> +	_socfpga_mp_start_ap(plat, SOCFPGA_SOCKIT);
> +}
> +
> 
> Modified: head/sys/arm/altera/socfpga/socfpga_mp.h
> ==============================================================================
> --- head/sys/arm/altera/socfpga/socfpga_mp.h	Tue Feb 28
> 12:05:58 2017	(r314388) +++
> head/sys/arm/altera/socfpga/socfpga_mp.h	Tue Feb 28 14:02:16
> 2017	(r314389) @@ -30,5 +30,6 @@ 
>  void socfpga_mp_setmaxid(platform_t);
>  void socfpga_mp_start_ap(platform_t);
> +void socfpga_a10_mp_start_ap(platform_t);
>  
>  #endif /* _SOCFPGA_MP_H_ */
> 
> Modified: head/sys/arm/altera/socfpga/socfpga_rstmgr.c
> ==============================================================================
> --- head/sys/arm/altera/socfpga/socfpga_rstmgr.c	Tue Feb 28
> 12:05:58 2017	(r314388) +++
> head/sys/arm/altera/socfpga/socfpga_rstmgr.c	Tue Feb 28
> 14:02:16 2017	(r314389) @@ -1,5 +1,5 @@ /*-
> - * Copyright (c) 2014 Ruslan Bukin <br@bsdpad.com>
> + * Copyright (c) 2014-2017 Ruslan Bukin <br@bsdpad.com>
>   * All rights reserved.
>   *
>   * This software was developed by SRI International and the
> University of @@ -166,7 +166,7 @@ rstmgr_sysctl(SYSCTL_HANDLER_ARGS)
>  }
>  
>  int
> -rstmgr_warmreset(void)
> +rstmgr_warmreset(uint32_t reg)
>  {
>  	struct rstmgr_softc *sc;
>  
> @@ -175,8 +175,7 @@ rstmgr_warmreset(void)
>  		return (1);
>  
>  	/* Request warm reset */
> -	WRITE4(sc, RSTMGR_CTRL,
> -	    CTRL_SWWARMRSTREQ);
> +	WRITE4(sc, reg, CTRL_SWWARMRSTREQ);
>  
>  	return (0);
>  }
> @@ -214,6 +213,7 @@ rstmgr_probe(device_t dev)
>  		return (ENXIO);
>  
>  	device_set_desc(dev, "Reset Manager");
> +
>  	return (BUS_PROBE_DEFAULT);
>  }
>  
> 
> Modified: head/sys/arm/altera/socfpga/socfpga_rstmgr.h
> ==============================================================================
> --- head/sys/arm/altera/socfpga/socfpga_rstmgr.h	Tue Feb 28
> 12:05:58 2017	(r314388) +++
> head/sys/arm/altera/socfpga/socfpga_rstmgr.h	Tue Feb 28
> 14:02:16 2017	(r314389) @@ -35,6 +35,7 @@ #define
> CTRL_SWWARMRSTREQ	(1 << 1) /* Trigger warm reset */
> #define	RSTMGR_COUNTS		0x8	/* Reset
> Cycles Count */ #define	RSTMGR_MPUMODRST	0x10	/*
> MPU Module Reset */ +#define
> MPUMODRST_CPU1			(1 << 1) #define
> RSTMGR_PERMODRST	0x14	/* Peripheral Module Reset */
> #define	RSTMGR_PER2MODRST	0x18	/* Peripheral 2
> Module Reset */ #define	RSTMGR_BRGMODRST	0x1C	/*
> Bridge Module Reset */ @@ -43,4 +44,7 @@ #define
> BRGMODRST_HPS2FPGA	(1 << 0) #define
> RSTMGR_MISCMODRST	0x20	/* Miscellaneous Module Reset */
> -int rstmgr_warmreset(void); +#define
> RSTMGR_A10_CTRL		0xC	/* Control */
> +#define	RSTMGR_A10_MPUMODRST	0x20	/* MPU Module
> Reset */ + +int rstmgr_warmreset(uint32_t reg);
> 
> Added: head/sys/arm/conf/SOCDK
> ==============================================================================
> --- /dev/null	00:00:00 1970	(empty, because file is
> newly added) +++ head/sys/arm/conf/SOCDK	Tue Feb 28 14:02:16
> 2017	(r314389) @@ -0,0 +1,30 @@
> +#
> +# Kernel configuration for Altera Arria10 SOC Development Kit.
> +#
> +# For more information on this file, please read the config(5)
> manual page, +# and/or the handbook section on Kernel Configuration
> Files: +#
> +#
> http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html
> +# +# The handbook is also available locally
> in /usr/share/doc/handbook +# if you've installed the doc
> distribution, otherwise always see the +# FreeBSD World Wide Web
> server (http://www.FreeBSD.org/) for the +# latest information.
> +#
> +# An exhaustive list of options and more detailed explanations of the
> +# device lines is also present in the ../../conf/NOTES and NOTES
> files. +# If you are in doubt as to the purpose or necessity of a
> line, check first +# in NOTES.
> +#
> +# $FreeBSD$
> +
> +#NO_UNIVERSE
> +
> +include 	"SOCFPGA"
> +ident		SOCDK
> +
> +options		ROOTDEVNAME=\"ufs:/dev/mmcsd0s4\"
> +
> +# Flattened Device Tree
> +options		FDT_DTB_STATIC
> +makeoptions	FDT_DTS_FILE=socfpga_arria10_socdk_sdmmc.dts

Can we move away from ROOTDEVNAME and FDT_DTB_STATIC? It stops this from
being used in a GENERIC kernel.

Andrew



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20170228141954.25098ee4>