at91_sdramc.c revision 262598
1181624Skmacy/*- 2181624Skmacy * Copyright (c) 2014 Warner Losh. All rights reserved. 3181624Skmacy * 4181624Skmacy * Redistribution and use in source and binary forms, with or without 5181624Skmacy * modification, are permitted provided that the following conditions 6181624Skmacy * are met: 7181624Skmacy * 1. Redistributions of source code must retain the above copyright 8181624Skmacy * notice, this list of conditions and the following disclaimer. 9181624Skmacy * 2. Redistributions in binary form must reproduce the above copyright 10181624Skmacy * notice, this list of conditions and the following disclaimer in the 11181624Skmacy * documentation and/or other materials provided with the distribution. 12181624Skmacy * 13181624Skmacy * THIS SOFTWARE IS PROVIDED BY AUTHOR AND CONTRIBUTORS ``AS IS'' AND 14181624Skmacy * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 15181624Skmacy * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 16181624Skmacy * ARE DISCLAIMED. IN NO EVENT SHALL AUTHOR OR CONTRIBUTORS BE LIABLE 17181624Skmacy * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 18181624Skmacy * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 19181624Skmacy * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 20181624Skmacy * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 21181624Skmacy * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 22181624Skmacy * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 23181624Skmacy * SUCH DAMAGE. 24181624Skmacy */ 25181624Skmacy 26181624Skmacy#include "opt_platform.h" 27181624Skmacy 28181624Skmacy#include <sys/cdefs.h> 29186557Skmacy__FBSDID("$FreeBSD: head/sys/arm/at91/at91_sdramc.c 262598 2014-02-28 02:59:51Z imp $"); 30181624Skmacy 31181624Skmacy#include <sys/param.h> 32181624Skmacy#include <sys/bus.h> 33181624Skmacy#include <sys/kernel.h> 34186557Skmacy#include <sys/module.h> 35186557Skmacy#include <sys/resource.h> 36181624Skmacy#include <sys/systm.h> 37181624Skmacy#include <sys/rman.h> 38181624Skmacy 39181624Skmacy#include <machine/bus.h> 40181624Skmacy 41181624Skmacy#include <arm/at91/at91var.h> 42181624Skmacy#include <arm/at91/at91_aicreg.h> 43181624Skmacy 44181624Skmacy#ifdef FDT 45181624Skmacy#include <dev/fdt/fdt_common.h> 46181624Skmacy#include <dev/ofw/ofw_bus.h> 47181624Skmacy#include <dev/ofw/ofw_bus_subr.h> 48181624Skmacy#endif 49181624Skmacy 50181624Skmacystruct sdramc_softc { 51181624Skmacy struct resource *mem_res; /* Memory resource */ 52181624Skmacy device_t sc_dev; 53181624Skmacy}; 54181624Skmacy 55181624Skmacystatic int 56181624Skmacyat91_sdramc_probe(device_t dev) 57181624Skmacy{ 58181624Skmacy#ifdef FDT 59181624Skmacy if (!ofw_bus_is_compatible(dev, "atmel,at91sam9260-sdramc")) 60181624Skmacy return (ENXIO); 61181624Skmacy#endif 62181624Skmacy device_set_desc(dev, "SDRAMC"); 63181624Skmacy return (0); 64181624Skmacy} 65181624Skmacy 66181624Skmacystatic int 67181624Skmacyat91_sdramc_attach(device_t dev) 68181624Skmacy{ 69181624Skmacy int rid, err = 0; 70181624Skmacy struct sdramc_softc *sc; 71181624Skmacy 72181624Skmacy sc = device_get_softc(dev); 73181624Skmacy sc->sc_dev = dev; 74181624Skmacy 75181624Skmacy rid = 0; 76181624Skmacy sc->mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, 77181624Skmacy RF_ACTIVE); 78181624Skmacy 79181624Skmacy if (sc->mem_res == NULL) 80181624Skmacy panic("couldn't allocate register resources"); 81181624Skmacy 82181624Skmacy return (err); 83181624Skmacy} 84181624Skmacy 85181624Skmacystatic device_method_t at91_sdramc_methods[] = { 86181624Skmacy DEVMETHOD(device_probe, at91_sdramc_probe), 87181624Skmacy DEVMETHOD(device_attach, at91_sdramc_attach), 88181624Skmacy DEVMETHOD_END 89181624Skmacy}; 90181624Skmacy 91181624Skmacystatic driver_t at91_sdramc_driver = { 92181624Skmacy "at91_sdramc", 93181624Skmacy at91_sdramc_methods, 94181624Skmacy sizeof(struct sdramc_softc), 95181624Skmacy}; 96181624Skmacy 97181624Skmacystatic devclass_t at91_sdramc_devclass; 98181624Skmacy 99181624Skmacy#ifdef FDT 100181624SkmacyDRIVER_MODULE(at91_sdramc, simplebus, at91_sdramc_driver, at91_sdramc_devclass, NULL, 101181624Skmacy NULL); 102181624Skmacy#else 103181624SkmacyDRIVER_MODULE(at91_sdramc, atmelarm, at91_sdramc_driver, at91_sdramc_devclass, NULL, 104181624Skmacy NULL); 105181624Skmacy#endif 106181624Skmacy