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/11.0/sys/arm/xilinx/zy7_machdep.c 298627 2016-04-26 11:53:37Z br $ 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 <sys/cdefs.h> 37249997Swkoszek__FBSDID("$FreeBSD: releng/11.0/sys/arm/xilinx/zy7_machdep.c 298627 2016-04-26 11:53:37Z br $"); 38249997Swkoszek 39249997Swkoszek#define _ARM32_BUS_DMA_PRIVATE 40249997Swkoszek#include <sys/param.h> 41249997Swkoszek#include <sys/systm.h> 42249997Swkoszek#include <sys/bus.h> 43298627Sbr#include <sys/devmap.h> 44249997Swkoszek 45249997Swkoszek#include <vm/vm.h> 46249997Swkoszek#include <vm/pmap.h> 47249997Swkoszek 48249997Swkoszek#include <dev/fdt/fdt_common.h> 49249997Swkoszek 50249997Swkoszek#include <machine/bus.h> 51249997Swkoszek#include <machine/machdep.h> 52266301Sandrew#include <machine/platform.h> 53249997Swkoszek 54249997Swkoszek#include <arm/xilinx/zy7_reg.h> 55249997Swkoszek 56249997Swkoszekvoid (*zynq7_cpu_reset)(void); 57249997Swkoszek 58249997Swkoszekvm_offset_t 59266301Sandrewplatform_lastaddr(void) 60249997Swkoszek{ 61249997Swkoszek 62298627Sbr return (devmap_lastaddr()); 63249997Swkoszek} 64249997Swkoszek 65249997Swkoszekvoid 66266301Sandrewplatform_probe_and_attach(void) 67257669Sian{ 68257669Sian 69257669Sian} 70257669Sian 71257669Sianvoid 72266301Sandrewplatform_gpio_init(void) 73249997Swkoszek{ 74249997Swkoszek} 75249997Swkoszek 76249997Swkoszekvoid 77266301Sandrewplatform_late_init(void) 78249997Swkoszek{ 79249997Swkoszek} 80249997Swkoszek 81249997Swkoszek/* 82265148Sian * Set up static device mappings. Not strictly necessary -- simplebus will 83265148Sian * dynamically establish mappings as needed -- but doing it this way gets us 84265148Sian * nice efficient 1MB section mappings. 85249997Swkoszek */ 86249997Swkoszekint 87266301Sandrewplatform_devmap_init(void) 88249997Swkoszek{ 89249997Swkoszek 90298627Sbr devmap_add_entry(ZYNQ7_PSIO_HWBASE, ZYNQ7_PSIO_SIZE); 91298627Sbr devmap_add_entry(ZYNQ7_PSCTL_HWBASE, ZYNQ7_PSCTL_SIZE); 92249997Swkoszek 93249997Swkoszek return (0); 94249997Swkoszek} 95249997Swkoszek 96249997Swkoszek 97249997Swkoszekstruct fdt_fixup_entry fdt_fixup_table[] = { 98249997Swkoszek { NULL, NULL } 99249997Swkoszek}; 100249997Swkoszek 101298068Sandrew#ifndef INTRNG 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}; 121295509Sandrew#endif 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