ti_machdep.c revision 266301
1168404Spjd/*-
2168404Spjd * Copyright (c) 1994-1998 Mark Brinicombe.
3168404Spjd * Copyright (c) 1994 Brini.
4168404Spjd * All rights reserved.
5168404Spjd *
6168404Spjd * This code is derived from software written for Brini by Mark Brinicombe
7168404Spjd *
8168404Spjd * Redistribution and use in source and binary forms, with or without
9168404Spjd * modification, are permitted provided that the following conditions
10168404Spjd * are met:
11168404Spjd * 1. Redistributions of source code must retain the above copyright
12168404Spjd *    notice, this list of conditions and the following disclaimer.
13168404Spjd * 2. Redistributions in binary form must reproduce the above copyright
14168404Spjd *    notice, this list of conditions and the following disclaimer in the
15168404Spjd *    documentation and/or other materials provided with the distribution.
16168404Spjd * 3. All advertising materials mentioning features or use of this software
17168404Spjd *    must display the following acknowledgement:
18168404Spjd *      This product includes software developed by Brini.
19168404Spjd * 4. The name of the company nor the name of the author may be used to
20168404Spjd *    endorse or promote products derived from this software without specific
21168404Spjd *    prior written permission.
22168404Spjd *
23168404Spjd * THIS SOFTWARE IS PROVIDED BY BRINI ``AS IS'' AND ANY EXPRESS OR IMPLIED
24168404Spjd * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
25168404Spjd * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
26168404Spjd * IN NO EVENT SHALL BRINI OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT,
27168404Spjd * INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
28168404Spjd * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
29168404Spjd * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
30168404Spjd * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
31168404Spjd * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
32168404Spjd * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
33168404Spjd * SUCH DAMAGE.
34168404Spjd *
35168404Spjd * from: FreeBSD: //depot/projects/arm/src/sys/arm/at91/kb920x_machdep.c, rev 45
36168404Spjd */
37168404Spjd
38168404Spjd#include "opt_platform.h"
39168404Spjd
40185029Spjd#include <sys/cdefs.h>
41168404Spjd__FBSDID("$FreeBSD: head/sys/arm/ti/ti_machdep.c 266301 2014-05-17 11:27:36Z andrew $");
42168404Spjd
43168404Spjd#define _ARM32_BUS_DMA_PRIVATE
44168404Spjd#include <sys/param.h>
45168404Spjd#include <sys/systm.h>
46168404Spjd#include <sys/bus.h>
47168404Spjd
48168404Spjd#include <vm/vm.h>
49168404Spjd#include <vm/pmap.h>
50168404Spjd
51168404Spjd#include <machine/bus.h>
52168404Spjd#include <machine/devmap.h>
53168404Spjd#include <machine/machdep.h>
54168404Spjd#include <machine/platform.h>
55168404Spjd
56185029Spjd#include <arm/ti/omap4/omap4_reg.h>
57168404Spjd
58168404Spjdvoid (*ti_cpu_reset)(void) = NULL;
59168404Spjd
60168404Spjdvm_offset_t
61168404Spjdplatform_lastaddr(void)
62168404Spjd{
63168404Spjd
64185029Spjd	return (arm_devmap_lastaddr());
65168404Spjd}
66168404Spjd
67168404Spjdvoid
68168404Spjdplatform_probe_and_attach(void)
69168404Spjd{
70168404Spjd}
71168404Spjd
72168404Spjdvoid
73168404Spjdplatform_gpio_init(void)
74168404Spjd{
75168404Spjd}
76168404Spjd
77168404Spjdvoid
78168404Spjdplatform_late_init(void)
79168404Spjd{
80185029Spjd}
81185029Spjd
82185029Spjd/*
83185029Spjd * Construct static devmap entries to map out the most frequently used
84185029Spjd * peripherals using 1mb section mappings.
85185029Spjd */
86185029Spjdint
87185029Spjdplatform_devmap_init(void)
88185029Spjd{
89168404Spjd#if defined(SOC_OMAP4)
90185029Spjd	arm_devmap_add_entry(0x48000000, 0x01000000); /*16mb L4_PER devices */
91185029Spjd	arm_devmap_add_entry(0x4A000000, 0x01000000); /*16mb L4_CFG devices */
92185029Spjd#elif defined(SOC_TI_AM335X)
93185029Spjd	arm_devmap_add_entry(0x44C00000, 0x00400000); /* 4mb L4_WKUP devices*/
94185029Spjd	arm_devmap_add_entry(0x47400000, 0x00100000); /* 1mb USB            */
95185029Spjd	arm_devmap_add_entry(0x47800000, 0x00100000); /* 1mb mmchs2         */
96185029Spjd	arm_devmap_add_entry(0x48000000, 0x01000000); /*16mb L4_PER devices */
97185029Spjd	arm_devmap_add_entry(0x49000000, 0x00100000); /* 1mb edma3          */
98185029Spjd	arm_devmap_add_entry(0x49800000, 0x00300000); /* 3mb edma3          */
99168404Spjd	arm_devmap_add_entry(0x4A000000, 0x01000000); /*16mb L4_FAST devices*/
100168404Spjd#else
101168404Spjd#error "Unknown SoC"
102185029Spjd#endif
103185029Spjd	return (0);
104185029Spjd}
105185029Spjd
106185029Spjdstruct arm32_dma_range *
107168404Spjdbus_dma_get_range(void)
108168404Spjd{
109168404Spjd
110168404Spjd	return (NULL);
111168404Spjd}
112168404Spjd
113168404Spjdint
114168404Spjdbus_dma_get_range_nb(void)
115168404Spjd{
116168404Spjd
117168404Spjd	return (0);
118168404Spjd}
119168404Spjd
120168404Spjdvoid
121168404Spjdcpu_reset()
122168404Spjd{
123168404Spjd	if (ti_cpu_reset)
124168404Spjd		(*ti_cpu_reset)();
125168404Spjd	else
126185029Spjd		printf("no cpu_reset implementation\n");
127185029Spjd	printf("Reset failed!\n");
128185029Spjd	while (1);
129185029Spjd}
130185029Spjd