From owner-svn-src-all@FreeBSD.ORG Sat Oct 26 23:13:21 2013 Return-Path: Delivered-To: svn-src-all@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) (using TLSv1 with cipher ADH-AES256-SHA (256/256 bits)) (No client certificate requested) by hub.freebsd.org (Postfix) with ESMTP id D4C0FA46; Sat, 26 Oct 2013 23:13:21 +0000 (UTC) (envelope-from ian@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:1900:2254:2068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mx1.freebsd.org (Postfix) with ESMTPS id C121F2905; Sat, 26 Oct 2013 23:13:21 +0000 (UTC) Received: from svn.freebsd.org ([127.0.1.70]) by svn.freebsd.org (8.14.7/8.14.7) with ESMTP id r9QNDL87089943; Sat, 26 Oct 2013 23:13:21 GMT (envelope-from ian@svn.freebsd.org) Received: (from ian@localhost) by svn.freebsd.org (8.14.7/8.14.5/Submit) id r9QNDKm6089937; Sat, 26 Oct 2013 23:13:20 GMT (envelope-from ian@svn.freebsd.org) Message-Id: <201310262313.r9QNDKm6089937@svn.freebsd.org> From: Ian Lepore Date: Sat, 26 Oct 2013 23:13:20 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r257197 - head/sys/arm/freescale/imx X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-all@freebsd.org X-Mailman-Version: 2.1.14 Precedence: list List-Id: "SVN commit messages for the entire src tree \(except for " user" and " projects" \)" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 26 Oct 2013 23:13:21 -0000 Author: ian Date: Sat Oct 26 23:13:20 2013 New Revision: 257197 URL: http://svnweb.freebsd.org/changeset/base/257197 Log: Maximize available kva space by doing static device mapping from the top of the address space downwards, and then returning the lowest mapped device address from initarm_lastaddr(). This adds over 500MB of kva space compared to the old way of hardcoding the end address as 0xE0000000. Also, pre-map most of the SoC's common memory-mapped devices using 1MB section mappings so that all device access uses just a few TLB entries. Graphics devices aren't mapped this way yet, but probably should be. To provide this new functionality without pasting identical code into multiple imxNN_machdep.c files, rework the imx machdep code so that things common to the whole family of SoCs are in a new imx_machdep.c file. The rewritten imxNN_machdep.c files contain just things specific to an individual SoC. Added: head/sys/arm/freescale/imx/imx_machdep.c (contents, props changed) head/sys/arm/freescale/imx/imx_machdep.h (contents, props changed) Modified: head/sys/arm/freescale/imx/files.imx51 head/sys/arm/freescale/imx/files.imx53 head/sys/arm/freescale/imx/imx51_machdep.c head/sys/arm/freescale/imx/imx53_machdep.c Modified: head/sys/arm/freescale/imx/files.imx51 ============================================================================== --- head/sys/arm/freescale/imx/files.imx51 Sat Oct 26 20:57:26 2013 (r257196) +++ head/sys/arm/freescale/imx/files.imx51 Sat Oct 26 23:13:20 2013 (r257197) @@ -8,6 +8,7 @@ arm/arm/irq_dispatch.S standard kern/kern_clocksource.c standard # Init +arm/freescale/imx/imx_machdep.c standard arm/freescale/imx/imx51_machdep.c standard arm/freescale/imx/common.c standard arm/freescale/imx/bus_space.c standard Modified: head/sys/arm/freescale/imx/files.imx53 ============================================================================== --- head/sys/arm/freescale/imx/files.imx53 Sat Oct 26 20:57:26 2013 (r257196) +++ head/sys/arm/freescale/imx/files.imx53 Sat Oct 26 23:13:20 2013 (r257197) @@ -8,6 +8,7 @@ arm/arm/irq_dispatch.S standard kern/kern_clocksource.c standard # Init +arm/freescale/imx/imx_machdep.c standard arm/freescale/imx/imx53_machdep.c standard arm/freescale/imx/common.c standard arm/freescale/imx/bus_space.c standard Modified: head/sys/arm/freescale/imx/imx51_machdep.c ============================================================================== --- head/sys/arm/freescale/imx/imx51_machdep.c Sat Oct 26 20:57:26 2013 (r257196) +++ head/sys/arm/freescale/imx/imx51_machdep.c Sat Oct 26 23:13:20 2013 (r257197) @@ -1,14 +1,7 @@ /*- - * Copyright (c) 1994-1998 Mark Brinicombe. - * Copyright (c) 1994 Brini. - * Copyright (c) 2012, 2013 The FreeBSD Foundation + * Copyright (c) 2013 Ian Lepore * All rights reserved. * - * - * This code is derived from software written for Brini by Mark Brinicombe - * Portions of this software were developed by Oleksandr Rybalko - * under sponsorship from the FreeBSD Foundation. - * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -17,26 +10,18 @@ * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Brini. - * 4. The name of the company nor the name of the author may be used to - * endorse or promote products derived from this software without specific - * prior written permission. * - * THIS SOFTWARE IS PROVIDED BY BRINI ``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 BRINI OR CONTRIBUTORS 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) + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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. - * - * from: FreeBSD: //depot/projects/arm/src/sys/arm/at91/kb920x_machdep.c, rev 45 */ #include "opt_platform.h" @@ -44,99 +29,42 @@ #include __FBSDID("$FreeBSD$"); -#define _ARM32_BUS_DMA_PRIVATE #include #include #include #include -#include -#include - -#include -#include /* For trapframe_t, used in */ #include -#include - -#include - -#define IMX51_DEV_VIRT_BASE 0xe0000000 -vm_offset_t -initarm_lastaddr(void) -{ - - boothowto |= RB_VERBOSE|RB_MULTIPLE; - bootverbose = 1; - - if (fdt_immr_addr(IMX51_DEV_VIRT_BASE) != 0) - while (1); - - /* Platform-specific initialisation */ - return (fdt_immr_va - ARM_NOCACHE_KVA_SIZE); -} +#include /* - * Set initial values of GPIO output ports + * Set up static device mappings. This is hand-optimized platform-specific + * config data which covers most of the common on-chip devices with a few 1MB + * section mappings. + * + * Notably missing are entries for GPU, IPU, in general anything video related. + * + * Note that for imx this is called from initarm_lastaddr() so that the lowest + * kva address used for static device mapping can be known at that point. */ void -initarm_gpio_init(void) +imx_devmap_init(void) { + imx_devmap_addentry(0x70000000, 0x00100000); + imx_devmap_addentry(0x73f00000, 0x00100000); + imx_devmap_addentry(0x83f00000, 0x00100000); } void -initarm_late_init(void) -{ - -} - -#define FDT_DEVMAP_MAX 2 -static struct pmap_devmap fdt_devmap[FDT_DEVMAP_MAX] = { - { 0, 0, 0, 0, 0, }, - { 0, 0, 0, 0, 0, } -}; - -/* - * Construct pmap_devmap[] with DT-derived config data. - */ -int -platform_devmap_init(void) -{ - - /* - * Map segment where UART1 and UART2 located. - */ - fdt_devmap[0].pd_va = IMX51_DEV_VIRT_BASE + 0x03f00000; - fdt_devmap[0].pd_pa = 0x73f00000; - fdt_devmap[0].pd_size = 0x00100000; - fdt_devmap[0].pd_prot = VM_PROT_READ | VM_PROT_WRITE; - fdt_devmap[0].pd_cache = PTE_NOCACHE; - - pmap_devmap_bootstrap_table = &fdt_devmap[0]; - return (0); -} - -struct arm32_dma_range * -bus_dma_get_range(void) +cpu_reset(void) { - return (NULL); + imx_wdog_cpu_reset(0x73F98000); } -int -bus_dma_get_range_nb(void) +u_int imx_soc_type() { - - return (0); + return (IMXSOC_51); } -void -cpu_reset(void) -{ - - printf("Reset ...\n"); - /* Clear n_reset flag */ - *((volatile u_int16_t *)(IMX51_DEV_VIRT_BASE + 0x03f98000)) = - (u_int16_t)0; - while (1); -} Modified: head/sys/arm/freescale/imx/imx53_machdep.c ============================================================================== --- head/sys/arm/freescale/imx/imx53_machdep.c Sat Oct 26 20:57:26 2013 (r257196) +++ head/sys/arm/freescale/imx/imx53_machdep.c Sat Oct 26 23:13:20 2013 (r257197) @@ -1,13 +1,7 @@ /*- - * Copyright (c) 1994-1998 Mark Brinicombe. - * Copyright (c) 1994 Brini. - * Copyright (c) 2012, 2013 The FreeBSD Foundation + * Copyright (c) 2013 Ian Lepore * All rights reserved. * - * This code is derived from software written for Brini by Mark Brinicombe - * Portions of this software were developed by Oleksandr Rybalko - * under sponsorship from the FreeBSD Foundation. - * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: @@ -16,20 +10,14 @@ * 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. - * 3. All advertising materials mentioning features or use of this software - * must display the following acknowledgement: - * This product includes software developed by Brini. - * 4. The name of the company nor the name of the author may be used to - * endorse or promote products derived from this software without specific - * prior written permission. * - * THIS SOFTWARE IS PROVIDED BY BRINI ``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 BRINI OR CONTRIBUTORS 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) + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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 @@ -41,101 +29,43 @@ #include __FBSDID("$FreeBSD$"); -#define _ARM32_BUS_DMA_PRIVATE #include #include #include #include -#include -#include - -#include -#include /* For trapframe_t, used in */ #include -#include - -#include - -#define IMX53_DEV_VIRT_BASE 0xe0000000 - -vm_offset_t -initarm_lastaddr(void) -{ - - boothowto |= RB_VERBOSE|RB_MULTIPLE; - bootverbose = 1; - - if (fdt_immr_addr(IMX53_DEV_VIRT_BASE) != 0) - while (1); - - /* Platform-specific initialisation */ - return (fdt_immr_va - ARM_NOCACHE_KVA_SIZE); -} +#include /* - * Set initial values of GPIO output ports + * Set up static device mappings. This is hand-optimized platform-specific + * config data which covers most of the common on-chip devices with a few 1MB + * section mappings. + * + * Notably missing are entries for GPU, IPU, in general anything video related. + * + * Note that for imx this is called from initarm_lastaddr() so that the lowest + * kva address used for static device mapping can be known at that point. */ void -initarm_gpio_init(void) +imx_devmap_init(void) { + imx_devmap_addentry(0x50000000, 0x00100000); + imx_devmap_addentry(0x53f00000, 0x00100000); + imx_devmap_addentry(0x63f00000, 0x00100000); } void -initarm_late_init(void) -{ - -} - -#define FDT_DEVMAP_MAX 2 -static struct pmap_devmap fdt_devmap[FDT_DEVMAP_MAX] = { - { 0, 0, 0, 0, 0, }, - { 0, 0, 0, 0, 0, } -}; - -/* - * Construct pmap_devmap[] with DT-derived config data. - */ -int -platform_devmap_init(void) -{ - - /* - * Map segment where UART1 and UART2 located. - */ - fdt_devmap[0].pd_va = IMX53_DEV_VIRT_BASE + 0x03f00000; - fdt_devmap[0].pd_pa = 0x53f00000; - fdt_devmap[0].pd_size = 0x00100000; - fdt_devmap[0].pd_prot = VM_PROT_READ | VM_PROT_WRITE; - fdt_devmap[0].pd_cache = PTE_NOCACHE; - - pmap_devmap_bootstrap_table = &fdt_devmap[0]; - - return (0); -} - -struct arm32_dma_range * -bus_dma_get_range(void) +cpu_reset(void) { - return (NULL); + imx_wdog_cpu_reset(0x53F98000); } -int -bus_dma_get_range_nb(void) +u_int imx_soc_type() { - - return (0); + return (IMXSOC_53); } -void -cpu_reset(void) -{ - printf("Reset ...\n"); - /* Clear n_reset flag */ - *((volatile u_int16_t *)(IMX53_DEV_VIRT_BASE + 0x03f98000)) = - (u_int16_t)0; - while (1); -} Added: head/sys/arm/freescale/imx/imx_machdep.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/freescale/imx/imx_machdep.c Sat Oct 26 23:13:20 2013 (r257197) @@ -0,0 +1,200 @@ +/*- + * Copyright (c) 2013 Ian Lepore + * 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 AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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 "opt_platform.h" + +#include +__FBSDID("$FreeBSD$"); + +#define _ARM32_BUS_DMA_PRIVATE +#include +#include +#include + +#include +#include + +#include +#include +#include /* For trapframe_t, used in */ +#include +#include + +#include +#include + +#define IMX_MAX_DEVMAP_ENTRIES 8 + +static struct pmap_devmap devmap_entries[IMX_MAX_DEVMAP_ENTRIES]; +static u_int devmap_idx; +static vm_offset_t devmap_vaddr = ARM_VECTORS_HIGH; + +void +imx_devmap_addentry(vm_paddr_t pa, vm_size_t sz) +{ + struct pmap_devmap *m; + + /* + * The last table entry is the all-zeroes end-of-table marker. If we're + * about to overwrite it the world is coming to an end. This code runs + * too early for the panic to be printed unless a special early-debug + * console is in use, but there's nothing else we can do. + */ + if (devmap_idx == (IMX_MAX_DEVMAP_ENTRIES - 1)) + panic("IMX_MAX_DEVMAP_ENTRIES is too small!\n"); + + /* + * Allocate virtual address space from the top of kva downwards. If the + * range being mapped is aligned and sized to 1MB boundaries then also + * align the virtual address to the next-lower 1MB boundary so that we + * end up with a section mapping. + */ + if ((pa & 0x000fffff) == 0 && (sz & 0x000fffff) == 0) { + devmap_vaddr = (devmap_vaddr - sz) & ~0x000fffff; + } else { + devmap_vaddr = (devmap_vaddr - sz) & ~0x00000fff; + } + m = &devmap_entries[devmap_idx++]; + m->pd_va = devmap_vaddr; + m->pd_pa = pa; + m->pd_size = sz; + m->pd_prot = VM_PROT_READ | VM_PROT_WRITE; + m->pd_cache = PTE_DEVICE; +} + +vm_offset_t +initarm_lastaddr(void) +{ + + /* XXX - Get rid of this stuff soon. */ + boothowto |= RB_VERBOSE|RB_MULTIPLE; + bootverbose = 1; + + /* + * Normally initarm() calls platform_devmap_init() much later in the + * init process to set up static device mappings. To calculate the + * highest available kva address we have to do that setup first. It + * maps downwards from ARM_VECTORS_HIGH and the last usable kva address + * is the point right before the virtual address of the first static + * mapping. So go set up the static mapping table now, then we can + * return the lowest static devmap vaddr as the end of usable kva. + */ + imx_devmap_init(); + + pmap_devmap_bootstrap_table = devmap_entries; + + return (devmap_vaddr); +} + +int +platform_devmap_init(void) +{ + + /* On imx this work is done during initarm_lastaddr(). */ + return (0); +} + +/* + * Set initial values of GPIO output ports + */ +void +initarm_gpio_init(void) +{ + +} + +void +initarm_late_init(void) +{ + struct pmap_devmap *m; + + /* + * We did the static devmap setup earlier, during initarm_lastaddr(), + * but now the console should be working and we can be verbose about + * what we did. + */ + if (bootverbose) { + for (m = devmap_entries; m->pd_va != 0; ++m) { + printf("Devmap: phys 0x%08x virt 0x%08x size %uK\n", + m->pd_pa, m->pd_va, m->pd_size / 1024); + } + } + + +} + +struct arm32_dma_range * +bus_dma_get_range(void) +{ + + return (NULL); +} + +int +bus_dma_get_range_nb(void) +{ + + return (0); +} + +void +imx_wdog_cpu_reset(vm_offset_t wdcr_physaddr) +{ + + /* + * This code which manipulates the watchdog hardware is here to + * implement cpu_reset() because the watchdog is the only way for + * software to reset the chip. Why here and not in imx_wdog.c? Because + * there's no requirement that the watchdog driver be compiled in, but + * it's nice to be able to reboot even if it's not. + */ + volatile uint16_t * pcr; + const struct pmap_devmap *pd; + + if ((pd = pmap_devmap_find_pa(wdcr_physaddr, 2)) == NULL) { + printf("cpu_reset() can't find its control register... locking up now."); + } else { + pcr = (uint16_t *)(pd->pd_va + (wdcr_physaddr - pd->pd_pa)); + /* + * This deceptively simple write enables the watchdog, sets the timeout + * to its minimum value (half a second), and also clears the SRS bit + * which results in the SFTW (software-requested reset) bit being set in + * the watchdog status register after the reset. This is how software + * can distinguish a requested reset from a wdog timeout. + */ + *pcr = WDOG_CR_WDE; + } + while (1) + continue; +} + +u_int +imx_soc_family(void) +{ + return (imx_soc_type() >> IMXSOC_FAMSHIFT); +} + + Added: head/sys/arm/freescale/imx/imx_machdep.h ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ head/sys/arm/freescale/imx/imx_machdep.h Sat Oct 26 23:13:20 2013 (r257197) @@ -0,0 +1,60 @@ +/*- + * Copyright (c) 2013 Ian Lepore + * 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 AND CONTRIBUTORS ``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 OR CONTRIBUTORS 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 IMX_MACHDEP_H +#define IMX_MACHDEP_H + +#include + +/* Common functions, implemented in imx_machdep.c. */ + +void imx_devmap_addentry(vm_paddr_t _pa, vm_size_t _sz); +void imx_wdog_cpu_reset(vm_offset_t _wdcr_phys) __attribute__((__noreturn__)); + +/* + * SoC identity. + */ +#define IMXSOC_51 0x05000100 +#define IMXSOC_53 0x05000300 +#define IMXSOC_6S 0x06000010 +#define IMXSOC_6SL 0x06000011 +#define IMXSOC_6D 0x06000020 +#define IMXSOC_6DL 0x06000021 +#define IMXSOC_6Q 0x06000040 +#define IMXSOC_6QL 0x06000041 +#define IMXSOC_FAMSHIFT 24 + +u_int imx_soc_type(void); +u_int imx_soc_family(void); + +/* From here down, routines are implemented in imxNN_machdep.c. */ + +void imx_devmap_init(void); + +#endif +