/* $NetBSD: machdep.c,v 1.68 2021/08/03 09:25:44 rin Exp $ */ /* * Copyright 2001, 2002 Wasabi Systems, Inc. * All rights reserved. * * Written by Eduardo Horvath and Simon Burge for Wasabi Systems, Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed for the NetBSD Project by * Wasabi Systems, Inc. * 4. The name of Wasabi Systems, Inc. may not be used to endorse * or promote products derived from this software without specific prior * written permission. * * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL WASABI SYSTEMS, INC * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. */ /* * Copyright (C) 1995, 1996 Wolfgang Solfrank. * Copyright (C) 1995, 1996 TooLs GmbH. * All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * This product includes software developed by TooLs GmbH. * 4. The name of TooLs GmbH may not be used to endorse or promote products * derived from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY TOOLS GMBH ``AS IS'' AND ANY EXPRESS OR * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. * IN NO EVENT SHALL TOOLS GMBH BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ #include __KERNEL_RCSID(0, "$NetBSD: machdep.c,v 1.68 2021/08/03 09:25:44 rin Exp $"); #include "opt_ddb.h" #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #define TLB_PG_SIZE (16*1024*1024) void initppc(vaddr_t, vaddr_t, char *, void *); void initppc(vaddr_t startkernel, vaddr_t endkernel, char *args, void *info_block) { u_int memsize; /* Disable all external interrupts */ mtdcr(DCR_UIC0_BASE + DCR_UIC_ER, 0); /* Setup board from OpenBIOS */ openbios_board_init(info_block); memsize = openbios_board_memsize_get(); /* Linear map kernel memory */ for (vaddr_t va = 0; va < endkernel; va += TLB_PG_SIZE) { ppc4xx_tlb_reserve(va, va, TLB_PG_SIZE, TLB_EX); } /* Map console after physmem (see pmap_tlbmiss()) */ ppc4xx_tlb_reserve(IBM405GP_UART0_BASE, roundup(memsize, TLB_PG_SIZE), TLB_PG_SIZE, TLB_I | TLB_G); mtspr(SPR_TCR, 0); /* disable all timers */ ibm40x_memsize_init(memsize, startkernel); ibm4xx_init(startkernel, endkernel, pic_ext_intr); #ifdef DEBUG openbios_board_print(); #endif #ifdef DDB if (boothowto & RB_KDB) Debugger(); #endif } /* * Machine dependent startup code. */ void cpu_startup(void) { ibm4xx_cpu_startup("Walnut PowerPC 405GP Evaluation Board"); openbios_board_info_set(); /* * Now that we have VM, malloc()s are OK in bus_space. */ bus_space_mallocok(); fake_mapiodev = 0; } int ibm4xx_pci_bus_maxdevs(void *v, int busno) { /* * Bus number is irrelevant. Configuration Mechanism 1 is in * use, can have devices 0-32 (i.e. the `normal' range). */ return 5; } int ibm4xx_pci_intr_map(const struct pci_attach_args *pa, pci_intr_handle_t *ihp) { int pin = pa->pa_intrpin; int dev = pa->pa_device; if (pin == 0) /* No IRQ used. */ goto bad; if (pin > 4) { printf("%s: bad interrupt pin %d\n", __func__, pin); goto bad; } /* * We need to map the interrupt pin to the interrupt bit in the UIC * associated with it. This is highly machine-dependent. */ switch(dev) { case 1: case 2: case 3: case 4: *ihp = 27 + dev; break; default: printf("Hmm.. PCI device %d should not exist on this board\n", dev); goto bad; } return 0; bad: *ihp = -1; return 1; } void ibm4xx_pci_conf_interrupt(void *v, int bus, int dev, int pin, int swiz, int *iline) { if (bus == 0) { switch(dev) { case 1: case 2: case 3: case 4: *iline = 31 - dev; } } else *iline = 20 + ((swiz + dev + 1) & 3); }