diff options
-rw-r--r-- | sys/mips/broadcom/bcm_machdep.c | 221 | ||||
-rw-r--r-- | sys/mips/broadcom/bcm_socinfo.c | 90 | ||||
-rw-r--r-- | sys/mips/broadcom/bcm_socinfo.h | 59 | ||||
-rw-r--r-- | sys/mips/broadcom/files.broadcom | 47 | ||||
-rw-r--r-- | sys/mips/broadcom/std.broadcom | 7 | ||||
-rw-r--r-- | sys/mips/broadcom/uart_bus_chipc.c | 121 | ||||
-rw-r--r-- | sys/mips/broadcom/uart_cpu_chipc.c | 78 | ||||
-rw-r--r-- | sys/mips/conf/BCM | 95 | ||||
-rw-r--r-- | sys/mips/conf/BCM.hints | 6 |
9 files changed, 724 insertions, 0 deletions
diff --git a/sys/mips/broadcom/bcm_machdep.c b/sys/mips/broadcom/bcm_machdep.c new file mode 100644 index 0000000..d535db3 --- /dev/null +++ b/sys/mips/broadcom/bcm_machdep.c @@ -0,0 +1,221 @@ +/*- + * Copyright (c) 2007 Bruce M. Simpson. + * Copyright (c) 2016 Michael Zhilin <mizhka@gmail.com> + * + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 THE AUTHOR OR CONTRIBUTORS 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 <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include "opt_ddb.h" + +#include <sys/param.h> +#include <sys/conf.h> +#include <sys/kernel.h> +#include <sys/systm.h> +#include <sys/imgact.h> +#include <sys/bio.h> +#include <sys/buf.h> +#include <sys/bus.h> +#include <sys/cpu.h> +#include <sys/cons.h> +#include <sys/exec.h> +#include <sys/ucontext.h> +#include <sys/proc.h> +#include <sys/kdb.h> +#include <sys/ptrace.h> +#include <sys/reboot.h> +#include <sys/signalvar.h> +#include <sys/sysent.h> +#include <sys/sysproto.h> +#include <sys/user.h> + +#include <vm/vm.h> +#include <vm/vm_object.h> +#include <vm/vm_page.h> + +#include <machine/cache.h> +#include <machine/clock.h> +#include <machine/cpu.h> +#include <machine/cpuinfo.h> +#include <machine/cpufunc.h> +#include <machine/cpuregs.h> +#include <machine/hwfunc.h> +#include <machine/intr_machdep.h> +#include <machine/locore.h> +#include <machine/md_var.h> +#include <machine/pte.h> +#include <machine/sigframe.h> +#include <machine/trap.h> +#include <machine/vmparam.h> + +#include <mips/sentry5/s5reg.h> +#include "bcm_socinfo.h" + +#ifdef CFE +#include <dev/cfe/cfe_api.h> +#endif + +#if 0 +#define BROADCOM_TRACE 0 +#endif + +extern int *edata; +extern int *end; + +void +platform_cpu_init() +{ + /* Nothing special */ +} + +static void +mips_init(void) +{ + int i, j; + + printf("entry: mips_init()\n"); + +#ifdef CFE + /* + * Query DRAM memory map from CFE. + */ + physmem = 0; + for (i = 0; i < 10; i += 2) { + int result; + uint64_t addr, len, type; + + result = cfe_enummem(i / 2, 0, &addr, &len, &type); + if (result < 0) { +#ifdef BROADCOM_TRACE + printf("There is no phys memory for: %d\n", i); +#endif + phys_avail[i] = phys_avail[i + 1] = 0; + break; + } + if (type != CFE_MI_AVAILABLE){ +#ifdef BROADCOM_TRACE + printf("phys memory is not available: %d\n", i); +#endif + continue; + } + + phys_avail[i] = addr; + if (i == 0 && addr == 0) { + /* + * If this is the first physical memory segment probed + * from CFE, omit the region at the start of physical + * memory where the kernel has been loaded. + */ + phys_avail[i] += MIPS_KSEG0_TO_PHYS(kernel_kseg0_end); + } +#ifdef BROADCOM_TRACE + printf("phys memory is available for: %d\n", i); + printf(" => addr = %jx\n", addr); + printf(" => len = %jd\n", len); +#endif + phys_avail[i + 1] = addr + len; + physmem += len; + } + +#ifdef BROADCOM_TRACE + printf("Total phys memory is : %ld\n", physmem); +#endif + + realmem = btoc(physmem); +#endif + + for (j = 0; j < i; j++) + dump_avail[j] = phys_avail[j]; + + physmem = realmem; + + init_param1(); + init_param2(physmem); + mips_cpu_init(); + pmap_bootstrap(); + mips_proc0_init(); + mutex_init(); + kdb_init(); +#ifdef KDB + if (boothowto & RB_KDB) + kdb_enter(KDB_WHY_BOOTFLAGS, "Boot flags requested debugger"); +#endif +} + +#define BCM_REG_CHIPC 0x18000000 + + +void +platform_reset(void) +{ + printf("bcm::platform_reset()\n"); + intr_disable(); + BCM_WRITE_REG32(BCM_REG_CHIPC_PMUWD_OFFS, 2); /* PMU watchdog */ + for (;;); +} + +void +platform_start(__register_t a0, __register_t a1, __register_t a2, + __register_t a3) +{ + vm_offset_t kernend; + uint64_t platform_counter_freq; + struct bcm_socinfo *socinfo; + + /* clear the BSS and SBSS segments */ + kernend = (vm_offset_t)&end; + memset(&edata, 0, kernend - (vm_offset_t)(&edata)); + + mips_postboot_fixup(); + + /* Initialize pcpu stuff */ + mips_pcpu0_init(); + + socinfo = bcm_get_socinfo(); + platform_counter_freq = socinfo->cpurate * 1000 * 1000; /* BCM4718 is 480MHz */ + + mips_timer_early_init(platform_counter_freq); + +#ifdef CFE + /* + * Initialize CFE firmware trampolines before + * we initialize the low-level console. + * + * CFE passes the following values in registers: + * a0: firmware handle + * a2: firmware entry point + * a3: entry point seal + */ + if (a3 == CFE_EPTSEAL) + cfe_init(a0, a2); +#endif + cninit(); + + mips_init(); + + /* BCM471x timer is 1/2 of Clk */ + mips_timer_init_params(platform_counter_freq, 1); +} diff --git a/sys/mips/broadcom/bcm_socinfo.c b/sys/mips/broadcom/bcm_socinfo.c new file mode 100644 index 0000000..7e5fa04 --- /dev/null +++ b/sys/mips/broadcom/bcm_socinfo.c @@ -0,0 +1,90 @@ +/*- + * Copyright (c) 2016 Michael Zhilin <mizhka@gmail.com> + * + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 THE AUTHOR OR CONTRIBUTORS 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 <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include <sys/param.h> +#include "bcm_socinfo.h" + +/* found on https://wireless.wiki.kernel.org/en/users/drivers/b43/soc */ +struct bcm_socinfo bcm_socinfos[] = { + {0x00005300, 600, 25000000}, /* BCM4706 to check */ + {0x0022B83A, 300, 20000000}, /* BCM4716B0 ASUS RT-N12 */ + {0x00914716, 354, 20000000}, /* BCM4717A1 to check */ + {0x00A14716, 480, 20000000}, /* BCM4718A1 ASUS RT-N16 */ + {0x00435356, 300, 25000000}, /* BCM5356A1 (RT-N10, WNR1000v3) */ + {0x00825357, 500, 20000000}, /* BCM5358UB0 ASUS RT-N53A1 */ + {0x00845357, 300, 20000000}, /* BCM5357B0 to check */ + {0x00945357, 500, 20000000}, /* BCM5358 */ + {0x00A45357, 500, 20000000}, /* BCM47186B0 Tenda N60 */ + {0x0085D144, 300, 20000000}, /* BCM5356C0 */ + {0x00B5D144, 300, 20000000}, /* BCM5357C0 */ + {0,0,0} +}; + +/* Most popular BCM SoC info */ +struct bcm_socinfo BCM_DEFAULT_SOCINFO = {0x0, 300, 20000000}; + +struct bcm_socinfo* +bcm_get_socinfo_by_socid(uint32_t key) +{ + struct bcm_socinfo* start; + + if(!key) + return (NULL); + + for(start = bcm_socinfos; start->id > 0; start++) + if(start->id == key) + return (start); + + return (NULL); +} + +struct bcm_socinfo* +bcm_get_socinfo(void) +{ + uint32_t socid; + struct bcm_socinfo *socinfo; + + /* + * We need Chip ID + Revision + Package + * -------------------------------------------------------------- + * | Mask | Usage | + * -------------------------------------------------------------- + * | 0x0000FFFF | Chip ID | + * | 0x000F0000 | Chip Revision | + * | 0x00F00000 | Package Options | + * | 0x0F000000 | Number of Cores (ChipCommon Rev. >= 4)| + * | 0xF0000000 | Chip Type | + * -------------------------------------------------------------- + */ + + socid = BCM_READ_REG32(BCM_REG_CHIPC_ID) & 0x00FFFFFF; + socinfo = bcm_get_socinfo_by_socid(socid); + return (socinfo != NULL) ? socinfo : &BCM_DEFAULT_SOCINFO; +} diff --git a/sys/mips/broadcom/bcm_socinfo.h b/sys/mips/broadcom/bcm_socinfo.h new file mode 100644 index 0000000..adf4124 --- /dev/null +++ b/sys/mips/broadcom/bcm_socinfo.h @@ -0,0 +1,59 @@ +/*- + * Copyright (c) 2016 Michael Zhilin <mizhka@gmail.com> + * + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 THE AUTHOR OR CONTRIBUTORS 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. + */ + +/* + * $FreeBSD$ + */ + +#ifndef _MIPS_BROADCOM_BCM_SOCINFO_H_ +#define _MIPS_BROADCOM_BCM_SOCINFO_H_ + +#include <machine/cpuregs.h> + +struct bcm_socinfo { + uint32_t id; + uint32_t cpurate; /* in MHz */ + uint32_t uartrate; /* in Hz */ +}; + +struct bcm_socinfo* bcm_get_socinfo_by_socid(uint32_t key); +struct bcm_socinfo* bcm_get_socinfo(void); + +#define BCM_SOCADDR 0x18000000 +#define BCM_REG_CHIPC_ID 0x0 +#define BCM_REG_CHIPC_UART 0x300 +#define BCM_REG_CHIPC_PMUWD_OFFS 0x634 +#define BCM_SOCREG(reg) \ + MIPS_PHYS_TO_KSEG1((BCM_SOCADDR + (reg))) +#define BCM_READ_REG32(reg) \ + *((volatile uint32_t *)BCM_SOCREG(reg)) +#define BCM_WRITE_REG32(reg, value) \ + do { \ + writel((void*)BCM_SOCREG((reg)),value); \ + } while (0); + +#endif /* _MIPS_BROADCOM_BCM_SOCINFO_H_ */ diff --git a/sys/mips/broadcom/files.broadcom b/sys/mips/broadcom/files.broadcom new file mode 100644 index 0000000..ac5c645 --- /dev/null +++ b/sys/mips/broadcom/files.broadcom @@ -0,0 +1,47 @@ +# $FreeBSD$ + +# TODO: Add attachment elsewhere in the tree +# for USB 1.1 OHCI, Ethernet and IPSEC cores +# which are believed to be devices we have drivers for +# which just need to be tweaked for attachment to an BHND system bus. +mips/broadcom/bcm_machdep.c standard +mips/mips/tick.c standard +mips/mips/mips_pic.c standard +kern/subr_intr.c standard +kern/pic_if.m standard + +kern/msi_if.m optional intrng + +mips/broadcom/uart_cpu_chipc.c optional uart +mips/broadcom/uart_bus_chipc.c optional uart +mips/broadcom/bcm_socinfo.c standard +mips/broadcom/bcm_mipscore.c standard + +# +geom/geom_flashmap.c standard +# +dev/bhnd/bhnd.c standard +dev/bhnd/bhnd_subr.c standard +dev/bhnd/bhnd_bus_if.m standard +dev/bhnd/bhndb/bhndb_if.m standard +dev/bhnd/bhndb/bhndb_bus_if.m standard +dev/bhnd/bcma/bcma.c standard +dev/bhnd/bcma/bcma_nexus.c standard +#dev/bhnd/bcma/bcma_bhndb.c standard +dev/bhnd/bcma/bcma_erom.c standard +dev/bhnd/bcma/bcma_subr.c standard +dev/bhnd/cores/chipc/chipc_subr.c standard +dev/bhnd/cores/chipc/chipc_cfi.c optional cfi +dev/bhnd/cores/chipc/chipc_spi.c optional spibus +dev/bhnd/cores/chipc/chipc_slicer.c optional cfi | spibus +dev/bhnd/cores/chipc/chipc.c standard +#to remove +#dev/bhnd/cores/chipc/chipcbus.c standard +dev/bhnd/cores/chipc/bhnd_chipc_if.m standard +dev/bhnd/nvram/bhnd_nvram_if.m standard +#dev/bhnd/siba/siba.c standard +#dev/bhnd/siba/siba_bhndb.c standard +#dev/bhnd/siba/siba_nexus.c standard +#dev/bhnd/siba/siba_subr.c standard +dev/bhnd/soc/bhnd_soc.c standard +#
\ No newline at end of file diff --git a/sys/mips/broadcom/std.broadcom b/sys/mips/broadcom/std.broadcom new file mode 100644 index 0000000..448a094 --- /dev/null +++ b/sys/mips/broadcom/std.broadcom @@ -0,0 +1,7 @@ +# $FreeBSD$ +# + +machine mips mipsel + +cpu CPU_MIPS74K +files "../broadcom/files.broadcom" diff --git a/sys/mips/broadcom/uart_bus_chipc.c b/sys/mips/broadcom/uart_bus_chipc.c new file mode 100644 index 0000000..fa2fa2d --- /dev/null +++ b/sys/mips/broadcom/uart_bus_chipc.c @@ -0,0 +1,121 @@ +/*- + * Copyright (c) 2016 Michael Zhilin <mizhka@gmail.com> + * + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 THE AUTHOR OR CONTRIBUTORS 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 <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include "opt_uart.h" + +#include <sys/param.h> +#include <sys/systm.h> +#include <sys/bus.h> +#include <sys/conf.h> +#include <sys/kernel.h> +#include <sys/module.h> +#include <sys/rman.h> + +#include <machine/bus.h> +#include <machine/resource.h> + +#include <dev/uart/uart.h> +#include <dev/uart/uart_bus.h> +#include <dev/uart/uart_cpu.h> + +#include "uart_if.h" +#include "bhnd_chipc_if.h" + +static int uart_chipc_probe(device_t dev); + +extern SLIST_HEAD(uart_devinfo_list, uart_devinfo) uart_sysdevs; + +static void +uart_chipc_identify(driver_t *driver, device_t parent) +{ + struct chipc_capabilities *caps; + + caps = BHND_CHIPC_GET_CAPABILITIES(parent); + + if (caps->num_uarts == 0) + return; + + /* + * TODO: add more than one UART + */ + BUS_ADD_CHILD(parent, 0, "uart", -1); +} + +static int +uart_chipc_probe(device_t dev) +{ + struct uart_softc *sc; + struct resource *res; + int rid; + + rid = 0; + res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE); + if (res == NULL) { + device_printf(dev, "can't allocate main resource\n"); + return (ENXIO); + } + + sc = device_get_softc(dev); + sc->sc_class = &uart_ns8250_class; + sc->sc_sysdev = SLIST_FIRST(&uart_sysdevs); + if (sc->sc_sysdev == NULL) { + device_printf(dev, "missing sysdev\n"); + return (EINVAL); + } + + bcopy(&sc->sc_sysdev->bas, &sc->sc_bas, sizeof(sc->sc_bas)); + + sc->sc_sysdev->bas.bst = rman_get_bustag(res); + sc->sc_sysdev->bas.bsh = rman_get_bushandle(res); + sc->sc_bas.bst = sc->sc_sysdev->bas.bst; + sc->sc_bas.bsh = sc->sc_sysdev->bas.bsh; + + bus_release_resource(dev, SYS_RES_MEMORY, rid, res); + + /* We use internal SoC clock generator with non-standart freq MHz */ + return (uart_bus_probe(dev, 0, sc->sc_sysdev->bas.rclk, 0, 0)); +} + +static device_method_t uart_chipc_methods[] = { + /* Device interface */ + DEVMETHOD(device_identify, uart_chipc_identify), + DEVMETHOD(device_probe, uart_chipc_probe), + DEVMETHOD(device_attach, uart_bus_attach), + DEVMETHOD(device_detach, uart_bus_detach), + { 0, 0 } +}; + +static driver_t uart_chipc_driver = { + uart_driver_name, + uart_chipc_methods, + sizeof(struct uart_softc), +}; + +DRIVER_MODULE(uart, bhnd_chipc, uart_chipc_driver, uart_devclass, 0, 0); diff --git a/sys/mips/broadcom/uart_cpu_chipc.c b/sys/mips/broadcom/uart_cpu_chipc.c new file mode 100644 index 0000000..14cc9f3 --- /dev/null +++ b/sys/mips/broadcom/uart_cpu_chipc.c @@ -0,0 +1,78 @@ +/*- + * Copyright (c) 2016 Michael Zhilin <mizhka@gmail.com> + * + * 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. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``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 THE AUTHOR OR CONTRIBUTORS 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 <sys/cdefs.h> +__FBSDID("$FreeBSD$"); + +#include "opt_uart.h" + +#include <sys/param.h> +#include <sys/systm.h> +#include <sys/bus.h> +#include <sys/cons.h> +#include <sys/lock.h> +#include <sys/mutex.h> + +#include <machine/bus.h> + +#include <dev/uart/uart.h> +#include <dev/uart/uart_bus.h> +#include <dev/uart/uart_cpu.h> + +#include "bcm_socinfo.h" + +bus_space_tag_t uart_bus_space_io; +bus_space_tag_t uart_bus_space_mem; + +int +uart_cpu_eqres(struct uart_bas *b1, struct uart_bas *b2) +{ + return ((b1->bsh == b2->bsh && b1->bst == b2->bst) ? 1 : 0); +} + +int +uart_cpu_getdev(int devtype, struct uart_devinfo *di) +{ + struct uart_class *class; + struct bcm_socinfo *socinfo; + + socinfo = bcm_get_socinfo(); + class = &uart_ns8250_class; + di->ops = uart_getops(class); + di->bas.chan = 0; + di->bas.bst = mips_bus_space_generic; + di->bas.bsh = (bus_space_handle_t)BCM_SOCREG(BCM_REG_CHIPC_UART); + di->bas.regshft = 0; + di->bas.rclk = socinfo->uartrate; /* in Hz */ + di->baudrate = 115200; + di->databits = 8; + di->stopbits = 1; + di->parity = UART_PARITY_NONE; + uart_bus_space_io = NULL; + uart_bus_space_mem = mips_bus_space_generic; + return (0); +} diff --git a/sys/mips/conf/BCM b/sys/mips/conf/BCM new file mode 100644 index 0000000..788bbd8 --- /dev/null +++ b/sys/mips/conf/BCM @@ -0,0 +1,95 @@ +# +# $FreeBSD$ +# +# The Broadcom 470x/471x/535x series of processors and boards is very commonly +# used in COTS hardware including the ASUS RT-N12, RT-N16, RT-N53. +# + +ident BCM + +hints "BCM.hints" +include "../broadcom/std.broadcom" + +# ships with cfe firmware +options CFE +options ALT_BREAK_TO_DEBUGGER +options BREAK_TO_DEBUGGER +options BOOTVERBOSE=0 + +makeoptions INTRNG +options INTRNG + +makeoptions TRAMPLOADADDR=0x80800000 +makeoptions DEBUG="-g3" #Build kernel with gdb(1) debug symbols +makeoptions MODULES_OVERRIDE="" + +options DDB +options KDB + +options SCHED_4BSD #4BSD scheduler +options INET #InterNETworking +options NFSCL #Network Filesystem Client +#options NFS_ROOT #NFS usable as /, requires NFSCL +options PSEUDOFS #Pseudo-filesystem framework +options _KPOSIX_PRIORITY_SCHEDULING #Posix P1003_1B real-time extensions + +options FFS #Berkeley Fast Filesystem +options SOFTUPDATES #Enable FFS soft updates support +options UFS_ACL #Support for access control lists +options UFS_DIRHASH #Improve performance on big directories + +device geom_uzip +options GEOM_UZIP +options GEOM_LABEL # Providers labelization. +options ROOTDEVNAME=\"ufs:ufs/FBSD\" # assumes FW built by + # freebsd-build-wifi + +# Debugging for use in -current +#options DEADLKRES +options INVARIANTS +options INVARIANT_SUPPORT + +#options BHND_LOGLEVEL=BHND_DEBUG_LEVEL +#options BUS_DEBUG +#makeoptions BUS_DEBUG +#options VERBOSE_SYSINIT +#makeoptions VERBOSE_SYSINIT + +device pci + +#device bgmac # Broadcom GMAC - not yet +device bhnd + +device mdio + +#Flash +device spibus +device mx25l # Serial Flash +device cfi # Parallel Flash +device cfid + +#UART +device uart + +#Base +device loop +device ether +device random +device md + +#Performance +#options HWPMC_HOOKS +#device hwpmc +#device hwpmc_mips74k + +#Ethernet +# device bfe # XXX will build both pci and siba +device miibus # attachments + +# pci devices + +# USB is not yet ready +#options USB_DEBUG # enable debug msgs +#device usb # USB Bus (required) +#device uhci # UHCI PCI->USB interface +#device ehci # EHCI PCI->USB interface (USB 2.0) diff --git a/sys/mips/conf/BCM.hints b/sys/mips/conf/BCM.hints new file mode 100644 index 0000000..5fdd240 --- /dev/null +++ b/sys/mips/conf/BCM.hints @@ -0,0 +1,6 @@ +# $FreeBSD$ +hint.bhnd_soc.0.at="nexus0" +# XXX ? +hint.bhnd_soc.0.maddr="0x00000000" +hint.bhnd_soc.0.msize="0x20000000" + |