Author: andrew
Date: Tue Feb  7 12:04:04 2017
New Revision: 313385
URL: https://svnweb.freebsd.org/changeset/base/313385

Log:
  Add support for PLATFORM and PLATFORM_SMP to the Altera SOCFPGA SoC. This
  will help with moving it to GENERIC.
  
  Reviewed by:  br
  Sponsored by: ABT Systems Ltd
  Differential Revision:        https://reviews.freebsd.org/D9461

Added:
  head/sys/arm/altera/socfpga/socfpga_mp.h   (contents, props changed)
Modified:
  head/sys/arm/altera/socfpga/socfpga_common.c
  head/sys/arm/altera/socfpga/socfpga_machdep.c
  head/sys/arm/altera/socfpga/socfpga_mp.c
  head/sys/arm/conf/SOCKIT.common

Modified: head/sys/arm/altera/socfpga/socfpga_common.c
==============================================================================
--- head/sys/arm/altera/socfpga/socfpga_common.c        Tue Feb  7 08:33:46 
2017        (r313384)
+++ head/sys/arm/altera/socfpga/socfpga_common.c        Tue Feb  7 12:04:04 
2017        (r313385)
@@ -43,27 +43,3 @@ __FBSDID("$FreeBSD$");
 
 #include <arm/altera/socfpga/socfpga_rstmgr.h>
 
-void
-cpu_reset(void)
-{
-       uint32_t paddr;
-       bus_addr_t vaddr;
-       phandle_t node;
-
-       if (rstmgr_warmreset() == 0)
-               goto end;
-
-       node = OF_finddevice("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);
-               }
-       }
-
-end:
-       while (1);
-}

Modified: head/sys/arm/altera/socfpga/socfpga_machdep.c
==============================================================================
--- head/sys/arm/altera/socfpga/socfpga_machdep.c       Tue Feb  7 08:33:46 
2017        (r313384)
+++ head/sys/arm/altera/socfpga/socfpga_machdep.c       Tue Feb  7 12:04:04 
2017        (r313385)
@@ -28,7 +28,6 @@
  * SUCH DAMAGE.
  */
 
-#include "opt_ddb.h"
 #include "opt_platform.h"
 
 #include <sys/cdefs.h>
@@ -41,38 +40,22 @@ __FBSDID("$FreeBSD$");
 
 #include <vm/vm.h>
 
+#include <dev/ofw/openfirm.h>
+
 #include <machine/armreg.h>
 #include <machine/bus.h>
+#include <machine/fdt.h>
 #include <machine/machdep.h>
 #include <machine/platform.h>
+#include <machine/platformvar.h>
 
-vm_offset_t
-platform_lastaddr(void)
-{
-
-       return (devmap_lastaddr());
-}
-
-void
-platform_probe_and_attach(void)
-{
-
-}
-
-void
-platform_gpio_init(void)
-{
-
-}
-
-void
-platform_late_init(void)
-{
+#include <arm/altera/socfpga/socfpga_mp.h>
+#include <arm/altera/socfpga/socfpga_rstmgr.h>
 
-}
+#include "platform_if.h"
 
-int
-platform_devmap_init(void)
+static int
+socfpga_devmap_init(platform_t plat)
 {
 
        /* UART */
@@ -99,3 +82,42 @@ platform_devmap_init(void)
 
        return (0);
 }
+
+static void
+socfpga_cpu_reset(platform_t plat)
+{
+       uint32_t paddr;
+       bus_addr_t vaddr;
+       phandle_t node;
+
+       if (rstmgr_warmreset() == 0)
+               goto end;
+
+       node = OF_finddevice("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);
+               }
+       }
+
+end:
+       while (1);
+}
+
+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", 0);

Modified: head/sys/arm/altera/socfpga/socfpga_mp.c
==============================================================================
--- head/sys/arm/altera/socfpga/socfpga_mp.c    Tue Feb  7 08:33:46 2017        
(r313384)
+++ head/sys/arm/altera/socfpga/socfpga_mp.c    Tue Feb  7 12:04:04 2017        
(r313385)
@@ -28,6 +28,8 @@
  * SUCH DAMAGE.
  */
 
+#include "opt_platform.h"
+
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 #include <sys/param.h>
@@ -45,6 +47,9 @@ __FBSDID("$FreeBSD$");
 #include <machine/smp.h>
 #include <machine/fdt.h>
 #include <machine/intr.h>
+#include <machine/platformvar.h>
+
+#include <arm/altera/socfpga/socfpga_mp.h>
 
 #define        SCU_PHYSBASE                    0xFFFEC000
 #define        SCU_SIZE                        0x100
@@ -85,7 +90,7 @@ socfpga_trampoline(void)
 }
 
 void
-platform_mp_setmaxid(void)
+socfpga_mp_setmaxid(platform_t plat)
 {
        int hwcpu, ncpu;
 
@@ -105,7 +110,7 @@ platform_mp_setmaxid(void)
 }
 
 void
-platform_mp_start_ap(void)
+socfpga_mp_start_ap(platform_t plat)
 {
        bus_space_handle_t scu, rst, ram;
        int reg;

Added: head/sys/arm/altera/socfpga/socfpga_mp.h
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/sys/arm/altera/socfpga/socfpga_mp.h    Tue Feb  7 12:04:04 2017        
(r313385)
@@ -0,0 +1,34 @@
+/*-
+ * Copyright (c) 2017 Andrew Turner <and...@freebsd.org>
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ *    notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ *    notice, this list of conditions and the following disclaimer in the
+ *    documentation and/or other materials provided with the distribution.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
+ * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
+ * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
+ * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
+ * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+ * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+ * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
+ * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ *
+ * $FreeBSD$
+ */
+
+#ifndef _SOCFPGA_MP_H_
+#define        _SOCFPGA_MP_H_
+
+void socfpga_mp_setmaxid(platform_t);
+void socfpga_mp_start_ap(platform_t);
+
+#endif /* _SOCFPGA_MP_H_ */

Modified: head/sys/arm/conf/SOCKIT.common
==============================================================================
--- head/sys/arm/conf/SOCKIT.common     Tue Feb  7 08:33:46 2017        
(r313384)
+++ head/sys/arm/conf/SOCKIT.common     Tue Feb  7 12:04:04 2017        
(r313385)
@@ -26,6 +26,8 @@ makeoptions   MODULES_OVERRIDE=""
 makeoptions    WERROR="-Werror"
 
 options        SCHED_ULE               # ULE scheduler
+options        PLATFORM                # Platform based SoC
+options        PLATFORM_SMP
 options        SMP                     # Enable multiple cores
 
 # NFS root from boopt/dhcp
_______________________________________________
svn-src-all@freebsd.org mailing list
https://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to