Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
freebsd
GitHub Repository: freebsd/freebsd-src
Path: blob/main/sys/arm/freescale/vybrid/vf_mscm.c
39536 views
1
/*-
2
* SPDX-License-Identifier: BSD-2-Clause
3
*
4
* Copyright (c) 2013 Ruslan Bukin <[email protected]>
5
* All rights reserved.
6
*
7
* Redistribution and use in source and binary forms, with or without
8
* modification, are permitted provided that the following conditions
9
* are met:
10
* 1. Redistributions of source code must retain the above copyright
11
* notice, this list of conditions and the following disclaimer.
12
* 2. Redistributions in binary form must reproduce the above copyright
13
* notice, this list of conditions and the following disclaimer in the
14
* documentation and/or other materials provided with the distribution.
15
*
16
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
17
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
18
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
19
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
20
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
26
* SUCH DAMAGE.
27
*/
28
29
/*
30
* Vybrid Family Miscellaneous System Control Module (MSCM)
31
* Chapter 66, Vybrid Reference Manual, Rev. 5, 07/2013
32
*/
33
34
#include <sys/param.h>
35
#include <sys/systm.h>
36
#include <sys/bus.h>
37
#include <sys/kernel.h>
38
#include <sys/module.h>
39
#include <sys/malloc.h>
40
#include <sys/rman.h>
41
#include <sys/timeet.h>
42
#include <sys/timetc.h>
43
#include <sys/watchdog.h>
44
45
#include <dev/ofw/openfirm.h>
46
#include <dev/ofw/ofw_bus.h>
47
#include <dev/ofw/ofw_bus_subr.h>
48
49
#include <machine/bus.h>
50
#include <machine/cpu.h>
51
#include <machine/intr.h>
52
53
#include <arm/freescale/vybrid/vf_common.h>
54
55
#define VF_NINT 112 /* Total number of interrupts */
56
57
/* Int Router Shared Peripheral Routing Control */
58
#define MSCM_IRSPRC(n) (0x880 + 2 * n)
59
60
struct mscm_softc {
61
struct resource *res[1];
62
bus_space_tag_t bst;
63
bus_space_handle_t bsh;
64
};
65
66
static struct resource_spec mscm_spec[] = {
67
{ SYS_RES_MEMORY, 0, RF_ACTIVE },
68
{ -1, 0 }
69
};
70
71
static int
72
mscm_probe(device_t dev)
73
{
74
75
if (!ofw_bus_status_okay(dev))
76
return (ENXIO);
77
78
if (!ofw_bus_is_compatible(dev, "fsl,mvf600-mscm"))
79
return (ENXIO);
80
81
device_set_desc(dev, "Vybrid Family Miscellaneous System Control Module");
82
return (BUS_PROBE_DEFAULT);
83
}
84
85
static int
86
mscm_attach(device_t dev)
87
{
88
struct mscm_softc *sc;
89
int i;
90
91
sc = device_get_softc(dev);
92
93
if (bus_alloc_resources(dev, mscm_spec, sc->res)) {
94
device_printf(dev, "could not allocate resources\n");
95
return (ENXIO);
96
}
97
98
/* Memory interface */
99
sc->bst = rman_get_bustag(sc->res[0]);
100
sc->bsh = rman_get_bushandle(sc->res[0]);
101
102
/* Route all the interrupts to CP0 */
103
for (i = 0; i < VF_NINT; i++)
104
WRITE2(sc, MSCM_IRSPRC(i), 1);
105
106
return (0);
107
}
108
109
static device_method_t mscm_methods[] = {
110
DEVMETHOD(device_probe, mscm_probe),
111
DEVMETHOD(device_attach, mscm_attach),
112
{ 0, 0 }
113
};
114
115
static driver_t mscm_driver = {
116
"mscm",
117
mscm_methods,
118
sizeof(struct mscm_softc),
119
};
120
121
DRIVER_MODULE(mscm, simplebus, mscm_driver, 0, 0);
122
123