Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/arch/evbarm/conf FDT-ize i.MX7. I don't have a board so ...



details:   https://anonhg.NetBSD.org/src/rev/015c053dbc24
branches:  trunk
changeset: 934377:015c053dbc24
user:      jmcneill <jmcneill%NetBSD.org@localhost>
date:      Wed Jun 10 17:57:50 2020 +0000

description:
FDT-ize i.MX7. I don't have a board so this has only been tested on QEMU.

diffstat:

 sys/arch/arm/imx/fdt/files.imx6          |   24 +-
 sys/arch/arm/imx/fdt/imx6_clk.c          |    6 +-
 sys/arch/arm/imx/fdt/imx7_platform.c     |  195 ++++++++++++
 sys/arch/arm/imx/fdt/imx7_platform.h     |   35 ++
 sys/arch/arm/imx/fdt/imx7d_ccm.c         |  325 ++++++++++++++++++++
 sys/arch/arm/imx/fdt/imx7d_ccm.h         |  482 +++++++++++++++++++++++++++++++
 sys/arch/arm/imx/fdt/imx_ccm.c           |   11 +-
 sys/arch/arm/imx/fdt/imx_ccm.h           |  133 ++++++++-
 sys/arch/arm/imx/fdt/imx_ccm_composite.c |   22 +-
 sys/arch/arm/imx/fdt/imx_ccm_div.c       |  124 +++++++
 sys/arch/arm/imx/fdt/imx_ccm_gate.c      |    8 +-
 sys/arch/arm/imx/fdt/imx_ccm_mux.c       |   78 +++++
 sys/arch/arm/imx/fdt/imx_ccm_pll.c       |  114 +++++++
 sys/arch/evbarm/conf/GENERIC             |    7 +-
 14 files changed, 1525 insertions(+), 39 deletions(-)

diffs (truncated from 1878 to 300 lines):

diff -r 28e214878793 -r 015c053dbc24 sys/arch/arm/imx/fdt/files.imx6
--- a/sys/arch/arm/imx/fdt/files.imx6   Wed Jun 10 16:56:22 2020 +0000
+++ b/sys/arch/arm/imx/fdt/files.imx6   Wed Jun 10 17:57:50 2020 +0000
@@ -1,30 +1,40 @@
-#      $NetBSD: files.imx6,v 1.12 2020/06/03 13:14:01 jmcneill Exp $
+#      $NetBSD: files.imx6,v 1.13 2020/06/10 17:57:50 jmcneill Exp $
 #
 # Configuration info for the Freescale i.MX6
 #
 
 file   arch/arm/imx/fdt/imx6_platform.c        soc_imx
+file   arch/arm/imx/fdt/imx7_platform.c        soc_imx
 
 # SOC parameters
 defflag        opt_soc.h                       SOC_IMX
 defflag        opt_soc.h                       SOC_IMX6DL: SOC_IMX
 defflag        opt_soc.h                       SOC_IMX6Q: SOC_IMX
 defflag        opt_soc.h                       SOC_IMX6QDL: SOC_IMX
+defflag        opt_soc.h                       SOC_IMX7D: SOC_IMX
 
 # Clock
-device imxccm: clk
-attach imxccm at fdt
-file   arch/arm/imx/imx6_ccm.c         imxccm
-file   arch/arm/imx/fdt/imx6_clk.c     imxccm
+device imx6ccm: clk
+attach imx6ccm at fdt
+file   arch/arm/imx/imx6_ccm.c         imx6ccm
+file   arch/arm/imx/fdt/imx6_clk.c     imx6ccm
 
 # Common FDT clock framework
 define imx_ccm: clk
 file   arch/arm/imx/fdt/imx_ccm.c              imx_ccm
+file   arch/arm/imx/fdt/imx_ccm_composite.c    imx_ccm
+file   arch/arm/imx/fdt/imx_ccm_div.c          imx_ccm
 file   arch/arm/imx/fdt/imx_ccm_extclk.c       imx_ccm
-file   arch/arm/imx/fdt/imx_ccm_gate.c         imx_ccm
-file   arch/arm/imx/fdt/imx_ccm_composite.c    imx_ccm
 file   arch/arm/imx/fdt/imx_ccm_fixed.c        imx_ccm
 file   arch/arm/imx/fdt/imx_ccm_fixed_factor.c imx_ccm
+file   arch/arm/imx/fdt/imx_ccm_gate.c         imx_ccm
+file   arch/arm/imx/fdt/imx_ccm_mux.c          imx_ccm
+file   arch/arm/imx/fdt/imx_ccm_pll.c          imx_ccm
+
+# CCM (iMX7D)
+device imx7dccm: imx_ccm
+attach imx7dccm at fdt with imx7d_ccm
+file   arch/arm/imx/fdt/imx7d_ccm.c    imx7d_ccm
 
 # CCM (iMX8MQ)
 device imx8mqccm: imx_ccm
diff -r 28e214878793 -r 015c053dbc24 sys/arch/arm/imx/fdt/imx6_clk.c
--- a/sys/arch/arm/imx/fdt/imx6_clk.c   Wed Jun 10 16:56:22 2020 +0000
+++ b/sys/arch/arm/imx/fdt/imx6_clk.c   Wed Jun 10 17:57:50 2020 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: imx6_clk.c,v 1.1 2019/07/24 13:12:33 hkenken Exp $     */
+/*     $NetBSD: imx6_clk.c,v 1.2 2020/06/10 17:57:50 jmcneill Exp $    */
 /*-
  * Copyright (c) 2019 Genetec Corporation.  All rights reserved.
  * Written by Hashimoto Kenichi for Genetec Corporation.
@@ -25,7 +25,7 @@
  * SUCH DAMAGE.
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: imx6_clk.c,v 1.1 2019/07/24 13:12:33 hkenken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: imx6_clk.c,v 1.2 2020/06/10 17:57:50 jmcneill Exp $");
 
 #include "opt_fdt.h"
 
@@ -86,7 +86,7 @@
 static int imxccm_match(device_t, cfdata_t, void *);
 static void imxccm_attach(device_t, device_t, void *);
 
-CFATTACH_DECL_NEW(imxccm, sizeof(struct imxccm_softc),
+CFATTACH_DECL_NEW(imx6ccm, sizeof(struct imxccm_softc),
     imxccm_match, imxccm_attach, NULL, NULL);
 
 static int
diff -r 28e214878793 -r 015c053dbc24 sys/arch/arm/imx/fdt/imx7_platform.c
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/arch/arm/imx/fdt/imx7_platform.c      Wed Jun 10 17:57:50 2020 +0000
@@ -0,0 +1,195 @@
+/*     $NetBSD: imx7_platform.c,v 1.1 2020/06/10 17:57:50 jmcneill Exp $       */
+/*-
+ * Copyright (c) 2019 Genetec Corporation.  All rights reserved.
+ * Written by Hashimoto Kenichi for Genetec Corporation.
+ *
+ * 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.
+ */
+#include <sys/cdefs.h>
+__KERNEL_RCSID(0, "$NetBSD: imx7_platform.c,v 1.1 2020/06/10 17:57:50 jmcneill Exp $");
+
+#include "opt_console.h"
+#include "opt_fdt.h"
+#include "opt_multiprocessor.h"
+#include "opt_soc.h"
+
+#include <sys/param.h>
+#include <sys/bus.h>
+#include <sys/cpu.h>
+#include <sys/device.h>
+#include <sys/termios.h>
+
+#include <dev/fdt/fdtvar.h>
+#include <arm/fdt/arm_fdtvar.h>
+
+#include <uvm/uvm_extern.h>
+
+#include <arm/arm32/machdep.h>
+
+#include <machine/bootconfig.h>
+#include <arm/cpufunc.h>
+
+#include <arm/cortex/gtmr_var.h>
+#include <arm/cortex/gic_reg.h>
+
+#include <arm/imx/imx7reg.h>
+#include <arm/imx/imx7_srcreg.h>
+#include <arm/imx/imx7_ccmreg.h>
+#include <arm/imx/imxuartreg.h>
+#include <arm/imx/imxwdogreg.h>
+
+#include <arm/imx/fdt/imx7_platform.h>
+
+#include <libfdt.h>
+
+extern struct bus_space armv7_generic_bs_tag;
+extern struct bus_space armv7_generic_a4x_bs_tag;
+extern struct arm32_bus_dma_tag arm_generic_dma_tag;
+
+static const struct pmap_devmap *
+imx7_platform_devmap(void)
+{
+       static const struct pmap_devmap devmap[] = {
+               DEVMAP_ENTRY(KERNEL_IO_IOREG_VBASE, IMX7_IOREG_PBASE, IMX7_IOREG_SIZE),
+               DEVMAP_ENTRY(KERNEL_IO_ARMCORE_VBASE, IMX7_ARMCORE_PBASE, IMX7_ARMCORE_SIZE),
+               DEVMAP_ENTRY_END
+       };
+
+       return devmap;
+}
+
+static void
+imx7_platform_init_attach_args(struct fdt_attach_args *faa)
+{
+       faa->faa_bst = &armv7_generic_bs_tag;
+       faa->faa_a4x_bst = &armv7_generic_a4x_bs_tag;
+       faa->faa_dmat = &arm_generic_dma_tag;
+}
+
+void imx7_platform_early_putchar(char);
+
+void
+imx7_platform_early_putchar(char c)
+{
+#ifdef CONSADDR
+#define CONSADDR_VA    ((CONSADDR - IMX7_IOREG_PBASE) + KERNEL_IO_IOREG_VBASE)
+
+       volatile uint32_t *uartaddr = cpu_earlydevice_va_p() ?
+           (volatile uint32_t *)CONSADDR_VA :
+           (volatile uint32_t *)CONSADDR;
+
+       while ((le32toh(uartaddr[(IMX_USR2/4)]) & IMX_USR2_TXDC) == 0)
+               ;
+
+       uartaddr[(IMX_UTXD/4)] = htole32(c);
+#endif
+}
+
+static void
+imx7_platform_device_register(device_t self, void *aux)
+{
+       prop_dictionary_t prop = device_properties(self);
+
+       if (device_is_a(self, "atphy")) {
+               const char * compat[] = {
+                       "fsl,imx7dl-sabresd",
+                       "fsl,imx7q-sabresd",
+                       "fsl,imx7qp-sabresd",
+                       NULL
+               };
+               if (of_match_compatible(OF_finddevice("/"), compat))
+                       prop_dictionary_set_uint32(prop, "clk_25m", 125000000);
+       }
+}
+
+static u_int
+imx7_platform_uart_freq(void)
+{
+       return IMX7_OSC_FREQ;
+}
+
+static int
+imx7_platform_mpstart(void)
+{
+#if defined(MULTIPROCESSOR)
+       bus_space_tag_t bst = &armv7_generic_bs_tag;
+       bus_space_handle_t bsh;
+
+       if (bus_space_map(bst, IMX7_IOREG_PBASE + AIPS1_SRC_BASE, AIPS1_SRC_SIZE, 0, &bsh) != 0)
+               panic("couldn't map aips1 src registers");
+       const paddr_t mpstart = KERN_VTOPHYS((vaddr_t)cpu_mpstart);
+
+       bus_space_write_4(bst, bsh, SRC_GPR3, mpstart);
+
+       uint32_t rcr1 = bus_space_read_4(bst, bsh, SRC_A7RCR1);
+       rcr1 |= SRC_A7RCR1_A7_CORE1_ENABLE;
+       bus_space_write_4(bst, bsh, SRC_A7RCR1, rcr1);
+
+       arm_dsb();
+       __asm __volatile("sev" ::: "memory");
+
+       /* Wait for AP to start */
+       for (u_int i = 0x1000000; i > 0; i--) {
+               if (cpu_hatched_p(1))
+                       break;
+       }
+       if (!cpu_hatched_p(1))
+               printf("cpu1: WARNING: failed to start\n");
+
+       bus_space_unmap(bst, bsh, AIPS1_SRC_SIZE);
+#endif
+
+       return 0;
+}
+
+static void
+imx7_platform_reset(void)
+{
+       bus_space_tag_t bst = &armv7_generic_bs_tag;
+       bus_space_handle_t bsh;
+
+       if (bus_space_map(bst, IMX7_IOREG_PBASE + AIPS1_WDOG1_BASE, AIPS1_WDOG_SIZE, 0, &bsh))
+               panic("couldn't map wdog1 registers");
+
+       delay(1000);    /* wait for flushing FIFO of serial console */
+
+       cpsid(I32_bit|F32_bit);
+
+       /* software reset signal on wdog */
+       bus_space_write_2(bst, bsh, IMX_WDOG_WCR, WCR_WDE);
+
+       for (;;)
+               __asm("wfi");
+}
+
+const struct arm_platform imx7_platform = {
+       .ap_devmap = imx7_platform_devmap,
+       .ap_bootstrap = arm_fdt_cpu_bootstrap,
+       .ap_init_attach_args = imx7_platform_init_attach_args,
+       .ap_device_register = imx7_platform_device_register,
+       .ap_reset = imx7_platform_reset,
+       .ap_delay = gtmr_delay,
+       .ap_uart_freq = imx7_platform_uart_freq,
+       .ap_mpstart = imx7_platform_mpstart,
+};
+
+ARM_PLATFORM(imx7d, "fsl,imx7d", &imx7_platform);
diff -r 28e214878793 -r 015c053dbc24 sys/arch/arm/imx/fdt/imx7_platform.h
--- /dev/null   Thu Jan 01 00:00:00 1970 +0000
+++ b/sys/arch/arm/imx/fdt/imx7_platform.h      Wed Jun 10 17:57:50 2020 +0000
@@ -0,0 +1,35 @@
+/*     $NetBSD: imx7_platform.h,v 1.1 2020/06/10 17:57:50 jmcneill Exp $       */
+/*-
+ * Copyright (c) 2019 Genetec Corporation.  All rights reserved.
+ * Written by Hashimoto Kenichi for Genetec Corporation.
+ *
+ * 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,



Home | Main Index | Thread Index | Old Index