1262598Simp/*-
2262598Simp * Copyright (c) 2014 Warner Losh.  All rights reserved.
3262598Simp *
4262598Simp * Redistribution and use in source and binary forms, with or without
5262598Simp * modification, are permitted provided that the following conditions
6262598Simp * are met:
7262598Simp * 1. Redistributions of source code must retain the above copyright
8262598Simp *    notice, this list of conditions and the following disclaimer.
9262598Simp * 2. Redistributions in binary form must reproduce the above copyright
10262598Simp *    notice, this list of conditions and the following disclaimer in the
11262598Simp *    documentation and/or other materials provided with the distribution.
12262598Simp *
13262598Simp * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND
14262598Simp * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
15262598Simp * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
16262598Simp * ARE DISCLAIMED.  IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE
17262598Simp * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
18262598Simp * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
19262598Simp * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
20262598Simp * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
21262598Simp * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
22262598Simp * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
23262598Simp * SUCH DAMAGE.
24262598Simp */
25262598Simp
26262598Simp#include "opt_platform.h"
27262598Simp
28262598Simp#include <sys/cdefs.h>
29262598Simp__FBSDID("$FreeBSD$");
30262598Simp
31262598Simp#include <sys/param.h>
32262598Simp#include <sys/bus.h>
33262598Simp#include <sys/kernel.h>
34262598Simp#include <sys/module.h>
35262598Simp#include <sys/resource.h>
36262598Simp#include <sys/systm.h>
37262598Simp#include <sys/rman.h>
38262598Simp
39262598Simp#include <machine/bus.h>
40262598Simp
41262598Simp#include <arm/at91/at91var.h>
42262598Simp#include <arm/at91/at91_aicreg.h>
43262598Simp
44262598Simp#ifdef FDT
45262598Simp#include <dev/fdt/fdt_common.h>
46262598Simp#include <dev/ofw/ofw_bus.h>
47262598Simp#include <dev/ofw/ofw_bus_subr.h>
48262598Simp#endif
49262598Simp
50262598Simpstruct sdramc_softc {
51262598Simp	struct resource	*mem_res;	/* Memory resource */
52262598Simp	device_t	sc_dev;
53262598Simp};
54262598Simp
55262598Simpstatic int
56262598Simpat91_sdramc_probe(device_t dev)
57262598Simp{
58262598Simp#ifdef FDT
59262598Simp	if (!ofw_bus_is_compatible(dev, "atmel,at91sam9260-sdramc"))
60262598Simp		return (ENXIO);
61262598Simp#endif
62262598Simp	device_set_desc(dev, "SDRAMC");
63262598Simp        return (0);
64262598Simp}
65262598Simp
66262598Simpstatic int
67262598Simpat91_sdramc_attach(device_t dev)
68262598Simp{
69262598Simp	int rid, err = 0;
70262598Simp	struct sdramc_softc *sc;
71262598Simp
72262598Simp	sc = device_get_softc(dev);
73262598Simp	sc->sc_dev = dev;
74262598Simp
75262598Simp	rid = 0;
76262598Simp	sc->mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid,
77262598Simp	    RF_ACTIVE);
78262598Simp
79262598Simp	if (sc->mem_res == NULL)
80262598Simp		panic("couldn't allocate register resources");
81262598Simp
82262598Simp	return (err);
83262598Simp}
84262598Simp
85262598Simpstatic device_method_t at91_sdramc_methods[] = {
86262598Simp	DEVMETHOD(device_probe, at91_sdramc_probe),
87262598Simp	DEVMETHOD(device_attach, at91_sdramc_attach),
88262598Simp	DEVMETHOD_END
89262598Simp};
90262598Simp
91262598Simpstatic driver_t at91_sdramc_driver = {
92262598Simp	"at91_sdramc",
93262598Simp	at91_sdramc_methods,
94262598Simp	sizeof(struct sdramc_softc),
95262598Simp};
96262598Simp
97262598Simpstatic devclass_t at91_sdramc_devclass;
98262598Simp
99262598Simp#ifdef FDT
100262598SimpDRIVER_MODULE(at91_sdramc, simplebus, at91_sdramc_driver, at91_sdramc_devclass, NULL,
101262598Simp    NULL);
102262598Simp#else
103262598SimpDRIVER_MODULE(at91_sdramc, atmelarm, at91_sdramc_driver, at91_sdramc_devclass, NULL,
104262598Simp    NULL);
105262598Simp#endif
106