1249997Swkoszek/*- 2250015Swkoszek * Copyright (c) 2013 Thomas Skibo 3249997Swkoszek * All rights reserved. 4250015Swkoszek * 5249997Swkoszek * Redistribution and use in source and binary forms, with or without 6250015Swkoszek * modification, are permitted provided that the following conditions 7250015Swkoszek * are met: 8250015Swkoszek * 1. Redistributions of source code must retain the above copyright 9250015Swkoszek * notice, this list of conditions and the following disclaimer. 10250015Swkoszek * 2. Redistributions in binary form must reproduce the above copyright 11250015Swkoszek * notice, this list of conditions and the following disclaimer in the 12250015Swkoszek * documentation and/or other materials provided with the distribution. 13250015Swkoszek * 14250015Swkoszek * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 15250015Swkoszek * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 16249997Swkoszek * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 17250015Swkoszek * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 18250015Swkoszek * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19250015Swkoszek * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 20250015Swkoszek * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 21250015Swkoszek * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 22249997Swkoszek * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 23250015Swkoszek * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 24250015Swkoszek * SUCH DAMAGE. 25249997Swkoszek * 26250015Swkoszek * $FreeBSD: releng/10.3/sys/arm/xilinx/zy7_machdep.c 266379 2014-05-17 23:25:20Z ian $ 27249997Swkoszek */ 28249997Swkoszek 29250015Swkoszek/* 30250015Swkoszek * Machine dependent code for Xilinx Zynq-7000 Soc. 31249997Swkoszek * 32249997Swkoszek * Reference: Zynq-7000 All Programmable SoC Technical Reference Manual. 33249997Swkoszek * (v1.4) November 16, 2012. Xilinx doc UG585. 34249997Swkoszek */ 35249997Swkoszek 36249997Swkoszek#include "opt_global.h" 37249997Swkoszek 38249997Swkoszek#include <sys/cdefs.h> 39249997Swkoszek__FBSDID("$FreeBSD: releng/10.3/sys/arm/xilinx/zy7_machdep.c 266379 2014-05-17 23:25:20Z ian $"); 40249997Swkoszek 41249997Swkoszek#define _ARM32_BUS_DMA_PRIVATE 42249997Swkoszek#include <sys/param.h> 43249997Swkoszek#include <sys/systm.h> 44249997Swkoszek#include <sys/bus.h> 45249997Swkoszek 46249997Swkoszek#include <vm/vm.h> 47249997Swkoszek#include <vm/pmap.h> 48249997Swkoszek 49249997Swkoszek#include <dev/fdt/fdt_common.h> 50249997Swkoszek 51249997Swkoszek#include <machine/bus.h> 52259364Sian#include <machine/devmap.h> 53249997Swkoszek#include <machine/machdep.h> 54249997Swkoszek 55249997Swkoszek#include <arm/xilinx/zy7_reg.h> 56249997Swkoszek 57249997Swkoszekvoid (*zynq7_cpu_reset)(void); 58249997Swkoszek 59249997Swkoszekvm_offset_t 60249997Swkoszekinitarm_lastaddr(void) 61249997Swkoszek{ 62249997Swkoszek 63266379Sian return (arm_devmap_lastaddr()); 64249997Swkoszek} 65249997Swkoszek 66249997Swkoszekvoid 67259365Sianinitarm_early_init(void) 68259365Sian{ 69259365Sian 70259365Sian} 71259365Sian 72259365Sianvoid 73249997Swkoszekinitarm_gpio_init(void) 74249997Swkoszek{ 75249997Swkoszek} 76249997Swkoszek 77249997Swkoszekvoid 78249997Swkoszekinitarm_late_init(void) 79249997Swkoszek{ 80249997Swkoszek} 81249997Swkoszek 82249997Swkoszek/* 83266379Sian * Set up static device mappings. Not strictly necessary -- simplebus will 84266379Sian * dynamically establish mappings as needed -- but doing it this way gets us 85266379Sian * nice efficient 1MB section mappings. 86249997Swkoszek */ 87249997Swkoszekint 88259365Sianinitarm_devmap_init(void) 89249997Swkoszek{ 90249997Swkoszek 91266379Sian arm_devmap_add_entry(ZYNQ7_PSIO_HWBASE, ZYNQ7_PSIO_SIZE); 92266379Sian arm_devmap_add_entry(ZYNQ7_PSCTL_HWBASE, ZYNQ7_PSCTL_SIZE); 93249997Swkoszek 94249997Swkoszek return (0); 95249997Swkoszek} 96249997Swkoszek 97249997Swkoszek 98249997Swkoszekstruct fdt_fixup_entry fdt_fixup_table[] = { 99249997Swkoszek { NULL, NULL } 100249997Swkoszek}; 101249997Swkoszek 102249997Swkoszekstatic int 103249997Swkoszekfdt_gic_decode_ic(phandle_t node, pcell_t *intr, int *interrupt, int *trig, 104249997Swkoszek int *pol) 105249997Swkoszek{ 106249997Swkoszek 107249997Swkoszek if (!fdt_is_compatible(node, "arm,gic")) 108249997Swkoszek return (ENXIO); 109249997Swkoszek 110249997Swkoszek *interrupt = fdt32_to_cpu(intr[0]); 111249997Swkoszek *trig = INTR_TRIGGER_CONFORM; 112249997Swkoszek *pol = INTR_POLARITY_CONFORM; 113249997Swkoszek 114249997Swkoszek return (0); 115249997Swkoszek} 116249997Swkoszek 117249997Swkoszekfdt_pic_decode_t fdt_pic_table[] = { 118249997Swkoszek &fdt_gic_decode_ic, 119249997Swkoszek NULL 120249997Swkoszek}; 121249997Swkoszek 122249997Swkoszek 123249997Swkoszekstruct arm32_dma_range * 124249997Swkoszekbus_dma_get_range(void) 125249997Swkoszek{ 126249997Swkoszek 127249997Swkoszek return (NULL); 128249997Swkoszek} 129249997Swkoszek 130249997Swkoszekint 131249997Swkoszekbus_dma_get_range_nb(void) 132249997Swkoszek{ 133249997Swkoszek 134249997Swkoszek return (0); 135249997Swkoszek} 136249997Swkoszek 137249997Swkoszekvoid 138249997Swkoszekcpu_reset() 139249997Swkoszek{ 140249997Swkoszek if (zynq7_cpu_reset != NULL) 141249997Swkoszek (*zynq7_cpu_reset)(); 142249997Swkoszek 143249997Swkoszek printf("cpu_reset: no platform cpu_reset. hanging.\n"); 144249997Swkoszek for (;;) 145249997Swkoszek ; 146249997Swkoszek} 147