imx6_pl310.c revision 259355
1169689Skan/*- 2169689Skan * Copyright (c) 2012 Olivier Houchard. 3169689Skan * All rights reserved. 4169689Skan * 5169689Skan * Redistribution and use in source and binary forms, with or without 6169689Skan * modification, are permitted provided that the following conditions 7169689Skan * are met: 8169689Skan * 1. Redistributions of source code must retain the above copyright 9169689Skan * notice, this list of conditions and the following disclaimer. 10169689Skan * 2. Redistributions in binary form must reproduce the above copyright 11169689Skan * notice, this list of conditions and the following disclaimer in the 12169689Skan * documentation and/or other materials provided with the distribution. 13169689Skan * 14169689Skan * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR 15169689Skan * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES 16169689Skan * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 17169689Skan * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, 18169689Skan * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 19169689Skan * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, 20169689Skan * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY 21169689Skan * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 22169689Skan * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 23169689Skan * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 24169689Skan */ 25169689Skan 26169689Skan#include <sys/cdefs.h> 27169689Skan__FBSDID("$FreeBSD: stable/10/sys/arm/freescale/imx/imx6_pl310.c 259355 2013-12-13 22:41:57Z ian $"); 28169689Skan 29169689Skan/* 30169689Skan * The machine-dependent part of the arm/pl310 driver for imx6 SoCs. 31169689Skan */ 32169689Skan 33169689Skan#include <sys/types.h> 34169689Skan#include <sys/param.h> 35169689Skan#include <sys/systm.h> 36169689Skan#include <sys/bus.h> 37169689Skan#include <sys/rman.h> 38169689Skan#include <sys/lock.h> 39169689Skan#include <sys/mutex.h> 40169689Skan 41169689Skan#include <machine/bus.h> 42169689Skan#include <machine/pl310.h> 43169689Skan 44169689Skanvoid 45169689Skanplatform_pl310_init(struct pl310_softc *sc) 46169689Skan{ 47169689Skan uint32_t aux, prefetch; 48169689Skan 49169689Skan aux = pl310_read4(sc, PL310_AUX_CTRL); 50169689Skan prefetch = pl310_read4(sc, PL310_PREFETCH_CTRL); 51169689Skan 52169689Skan if (bootverbose) { 53169689Skan device_printf(sc->sc_dev, "Early BRESP response: %s\n", 54169689Skan (aux & AUX_CTRL_EARLY_BRESP) ? "enabled" : "disabled"); 55169689Skan device_printf(sc->sc_dev, "Instruction prefetch: %s\n", 56169689Skan (aux & AUX_CTRL_INSTR_PREFETCH) ? "enabled" : "disabled"); 57169689Skan device_printf(sc->sc_dev, "Data prefetch: %s\n", 58169689Skan (aux & AUX_CTRL_DATA_PREFETCH) ? "enabled" : "disabled"); 59169689Skan device_printf(sc->sc_dev, "Non-secure interrupt control: %s\n", 60169689Skan (aux & AUX_CTRL_NS_INT_CTRL) ? "enabled" : "disabled"); 61169689Skan device_printf(sc->sc_dev, "Non-secure lockdown: %s\n", 62169689Skan (aux & AUX_CTRL_NS_LOCKDOWN) ? "enabled" : "disabled"); 63169689Skan device_printf(sc->sc_dev, "Share override: %s\n", 64169689Skan (aux & AUX_CTRL_SHARE_OVERRIDE) ? "enabled" : "disabled"); 65169689Skan 66169689Skan device_printf(sc->sc_dev, "Double linefil: %s\n", 67169689Skan (prefetch & PREFETCH_CTRL_DL) ? "enabled" : "disabled"); 68169689Skan device_printf(sc->sc_dev, "Instruction prefetch: %s\n", 69169689Skan (prefetch & PREFETCH_CTRL_INSTR_PREFETCH) ? "enabled" : "disabled"); 70169689Skan device_printf(sc->sc_dev, "Data prefetch: %s\n", 71169689Skan (prefetch & PREFETCH_CTRL_DATA_PREFETCH) ? "enabled" : "disabled"); 72169689Skan device_printf(sc->sc_dev, "Double linefill on WRAP request: %s\n", 73169689Skan (prefetch & PREFETCH_CTRL_DL_ON_WRAP) ? "enabled" : "disabled"); 74169689Skan device_printf(sc->sc_dev, "Prefetch drop: %s\n", 75169689Skan (prefetch & PREFETCH_CTRL_PREFETCH_DROP) ? "enabled" : "disabled"); 76169689Skan device_printf(sc->sc_dev, "Incr double Linefill: %s\n", 77169689Skan (prefetch & PREFETCH_CTRL_INCR_DL) ? "enabled" : "disabled"); 78169689Skan device_printf(sc->sc_dev, "Not same ID on exclusive sequence: %s\n", 79169689Skan (prefetch & PREFETCH_CTRL_NOTSAMEID) ? "enabled" : "disabled"); 80169689Skan device_printf(sc->sc_dev, "Prefetch offset: %d\n", 81169689Skan (prefetch & PREFETCH_CTRL_OFFSET_MASK)); 82169689Skan } 83169689Skan} 84169689Skan 85169689Skanvoid 86169689Skanplatform_pl310_write_ctrl(struct pl310_softc *sc, uint32_t val) 87169689Skan{ 88169689Skan 89169689Skan pl310_write4(sc, PL310_CTRL, val); 90169689Skan} 91169689Skan 92169689Skanvoid 93169689Skanplatform_pl310_write_debug(struct pl310_softc *sc, uint32_t val) 94169689Skan{ 95169689Skan 96169689Skan pl310_write4(sc, PL310_DEBUG_CTRL, val); 97169689Skan} 98169689Skan 99169689Skan