Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F109694901
D27280.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
49 KB
Referenced Files
None
Subscribers
None
D27280.diff
View Options
Index: head/sys/arm/rockchip/files.rk30xx
===================================================================
--- head/sys/arm/rockchip/files.rk30xx
+++ head/sys/arm/rockchip/files.rk30xx
@@ -1,11 +0,0 @@
-# $FreeBSD$
-
-arm/rockchip/rk30xx_machdep.c standard
-arm/rockchip/rk30xx_pmu.c standard
-arm/rockchip/rk30xx_grf.c standard
-arm/rockchip/rk30xx_wdog.c standard
-arm/rockchip/rk30xx_gpio.c optional gpio
-arm/rockchip/rk30xx_mp.c optional smp
-
-dev/mmc/host/dwmmc.c optional dwmmc
-dev/mmc/host/dwmmc_rockchip.c optional dwmmc
Index: head/sys/arm/rockchip/rk30xx_gpio.c
===================================================================
--- head/sys/arm/rockchip/rk30xx_gpio.c
+++ head/sys/arm/rockchip/rk30xx_gpio.c
@@ -1,630 +0,0 @@
-/*-
- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
- *
- * Copyright (c) 2013 Ganbold Tsagaankhuu <ganbold@freebsd.org>
- * Copyright (c) 2012 Oleksandr Tymoshenko <gonzo@freebsd.org>
- * Copyright (c) 2012 Luiz Otavio O Souza.
- * 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 <sys/systm.h>
-#include <sys/bus.h>
-
-#include <sys/kernel.h>
-#include <sys/module.h>
-#include <sys/rman.h>
-#include <sys/lock.h>
-#include <sys/mutex.h>
-#include <sys/gpio.h>
-
-#include <machine/bus.h>
-#include <machine/resource.h>
-#include <machine/intr.h>
-
-#include <dev/fdt/fdt_common.h>
-#include <dev/gpio/gpiobusvar.h>
-#include <dev/ofw/ofw_bus.h>
-#include <dev/ofw/ofw_bus_subr.h>
-
-#include "gpio_if.h"
-
-#include "rk30xx_grf.h"
-#include "rk30xx_pmu.h"
-
-/*
- * RK3188 has 4 banks of gpio.
- * 32 pins per bank
- * PA0 - PA7 | PB0 - PB7
- * PC0 - PC7 | PD0 - PD7
- */
-
-#define RK30_GPIO_PINS 32
-#define RK30_GPIO_DEFAULT_CAPS (GPIO_PIN_INPUT | GPIO_PIN_OUTPUT | \
- GPIO_PIN_PULLUP | GPIO_PIN_PULLDOWN)
-
-#define RK30_GPIO_NONE 0
-#define RK30_GPIO_PULLUP 1
-#define RK30_GPIO_PULLDOWN 2
-
-struct rk30_gpio_softc {
- device_t sc_dev;
- device_t sc_busdev;
- struct mtx sc_mtx;
- struct resource * sc_mem_res;
- struct resource * sc_irq_res;
- bus_space_tag_t sc_bst;
- bus_space_handle_t sc_bsh;
- void * sc_intrhand;
- int sc_bank;
- int sc_gpio_npins;
- struct gpio_pin sc_gpio_pins[RK30_GPIO_PINS];
-};
-
-/* We use our base address to find out our bank number. */
-static unsigned long rk30_gpio_base_addr[4] =
- { 0x2000a000, 0x2003c000, 0x2003e000, 0x20080000 };
-static struct rk30_gpio_softc *rk30_gpio_sc = NULL;
-
-typedef int (*gpios_phandler_t)(phandle_t, pcell_t *, int);
-
-struct gpio_ctrl_entry {
- const char *compat;
- gpios_phandler_t handler;
-};
-
-int rk30_gpios_prop_handle(phandle_t ctrl, pcell_t *gpios, int len);
-static int rk30_gpio_init(void);
-
-struct gpio_ctrl_entry gpio_controllers[] = {
- { "rockchip,rk30xx-gpio", &rk30_gpios_prop_handle },
- { "rockchip,rk30xx-gpio", &rk30_gpios_prop_handle },
- { "rockchip,rk30xx-gpio", &rk30_gpios_prop_handle },
- { "rockchip,rk30xx-gpio", &rk30_gpios_prop_handle },
- { NULL, NULL }
-};
-
-#define RK30_GPIO_LOCK(_sc) mtx_lock(&_sc->sc_mtx)
-#define RK30_GPIO_UNLOCK(_sc) mtx_unlock(&_sc->sc_mtx)
-#define RK30_GPIO_LOCK_ASSERT(_sc) mtx_assert(&_sc->sc_mtx, MA_OWNED)
-
-#define RK30_GPIO_SWPORT_DR 0x00
-#define RK30_GPIO_SWPORT_DDR 0x04
-#define RK30_GPIO_INTEN 0x30
-#define RK30_GPIO_INTMASK 0x34
-#define RK30_GPIO_INTTYPE_LEVEL 0x38
-#define RK30_GPIO_INT_POLARITY 0x3c
-#define RK30_GPIO_INT_STATUS 0x40
-#define RK30_GPIO_INT_RAWSTATUS 0x44
-#define RK30_GPIO_DEBOUNCE 0x48
-#define RK30_GPIO_PORT_EOI 0x4c
-#define RK30_GPIO_EXT_PORT 0x50
-#define RK30_GPIO_LS_SYNC 0x60
-
-#define RK30_GPIO_WRITE(_sc, _off, _val) \
- bus_space_write_4(_sc->sc_bst, _sc->sc_bsh, _off, _val)
-#define RK30_GPIO_READ(_sc, _off) \
- bus_space_read_4(_sc->sc_bst, _sc->sc_bsh, _off)
-
-static uint32_t
-rk30_gpio_get_function(struct rk30_gpio_softc *sc, uint32_t pin)
-{
-
- if (RK30_GPIO_READ(sc, RK30_GPIO_SWPORT_DDR) & (1U << pin))
- return (GPIO_PIN_OUTPUT);
- else
- return (GPIO_PIN_INPUT);
-}
-
-static void
-rk30_gpio_set_function(struct rk30_gpio_softc *sc, uint32_t pin, uint32_t func)
-{
- uint32_t data;
-
- /* Must be called with lock held. */
- RK30_GPIO_LOCK_ASSERT(sc);
- data = RK30_GPIO_READ(sc, RK30_GPIO_SWPORT_DDR);
- if (func == GPIO_PIN_OUTPUT)
- data |= (1U << pin);
- else
- data &= ~(1U << pin);
- RK30_GPIO_WRITE(sc, RK30_GPIO_SWPORT_DDR, data);
-}
-
-static void
-rk30_gpio_set_pud(struct rk30_gpio_softc *sc, uint32_t pin, uint32_t state)
-{
- uint32_t pud;
-
- /* Must be called with lock held. */
- RK30_GPIO_LOCK_ASSERT(sc);
- switch (state) {
- case GPIO_PIN_PULLUP:
- pud = RK30_GPIO_PULLUP;
- break;
- case GPIO_PIN_PULLDOWN:
- pud = RK30_GPIO_PULLDOWN;
- break;
- default:
- pud = RK30_GPIO_NONE;
- }
- /*
- * The pull up/down registers for GPIO0A and half of GPIO0B
- * (the first 12 pins on bank 0) are at a different location.
- */
- if (sc->sc_bank == 0 && pin < 12)
- rk30_pmu_gpio_pud(pin, pud);
- else
- rk30_grf_gpio_pud(sc->sc_bank, pin, pud);
-}
-
-static void
-rk30_gpio_pin_configure(struct rk30_gpio_softc *sc, struct gpio_pin *pin,
- unsigned int flags)
-{
-
- RK30_GPIO_LOCK(sc);
- /*
- * Manage input/output.
- */
- if (flags & (GPIO_PIN_INPUT | GPIO_PIN_OUTPUT)) {
- pin->gp_flags &= ~(GPIO_PIN_INPUT | GPIO_PIN_OUTPUT);
- if (flags & GPIO_PIN_OUTPUT)
- pin->gp_flags |= GPIO_PIN_OUTPUT;
- else
- pin->gp_flags |= GPIO_PIN_INPUT;
- rk30_gpio_set_function(sc, pin->gp_pin, pin->gp_flags);
- }
- /* Manage Pull-up/pull-down. */
- pin->gp_flags &= ~(GPIO_PIN_PULLUP | GPIO_PIN_PULLDOWN);
- if (flags & (GPIO_PIN_PULLUP | GPIO_PIN_PULLDOWN)) {
- if (flags & GPIO_PIN_PULLUP)
- pin->gp_flags |= GPIO_PIN_PULLUP;
- else
- pin->gp_flags |= GPIO_PIN_PULLDOWN;
- }
- rk30_gpio_set_pud(sc, pin->gp_pin, pin->gp_flags);
- RK30_GPIO_UNLOCK(sc);
-}
-
-static device_t
-rk30_gpio_get_bus(device_t dev)
-{
- struct rk30_gpio_softc *sc;
-
- sc = device_get_softc(dev);
-
- return (sc->sc_busdev);
-}
-
-static int
-rk30_gpio_pin_max(device_t dev, int *maxpin)
-{
-
- *maxpin = RK30_GPIO_PINS - 1;
- return (0);
-}
-
-static int
-rk30_gpio_pin_getcaps(device_t dev, uint32_t pin, uint32_t *caps)
-{
- struct rk30_gpio_softc *sc = device_get_softc(dev);
- int i;
-
- for (i = 0; i < sc->sc_gpio_npins; i++) {
- if (sc->sc_gpio_pins[i].gp_pin == pin)
- break;
- }
-
- if (i >= sc->sc_gpio_npins)
- return (EINVAL);
-
- RK30_GPIO_LOCK(sc);
- *caps = sc->sc_gpio_pins[i].gp_caps;
- RK30_GPIO_UNLOCK(sc);
-
- return (0);
-}
-
-static int
-rk30_gpio_pin_getflags(device_t dev, uint32_t pin, uint32_t *flags)
-{
- struct rk30_gpio_softc *sc = device_get_softc(dev);
- int i;
-
- for (i = 0; i < sc->sc_gpio_npins; i++) {
- if (sc->sc_gpio_pins[i].gp_pin == pin)
- break;
- }
-
- if (i >= sc->sc_gpio_npins)
- return (EINVAL);
-
- RK30_GPIO_LOCK(sc);
- *flags = sc->sc_gpio_pins[i].gp_flags;
- RK30_GPIO_UNLOCK(sc);
-
- return (0);
-}
-
-static int
-rk30_gpio_pin_getname(device_t dev, uint32_t pin, char *name)
-{
- struct rk30_gpio_softc *sc = device_get_softc(dev);
- int i;
-
- for (i = 0; i < sc->sc_gpio_npins; i++) {
- if (sc->sc_gpio_pins[i].gp_pin == pin)
- break;
- }
-
- if (i >= sc->sc_gpio_npins)
- return (EINVAL);
-
- RK30_GPIO_LOCK(sc);
- memcpy(name, sc->sc_gpio_pins[i].gp_name, GPIOMAXNAME);
- RK30_GPIO_UNLOCK(sc);
-
- return (0);
-}
-
-static int
-rk30_gpio_pin_setflags(device_t dev, uint32_t pin, uint32_t flags)
-{
- struct rk30_gpio_softc *sc = device_get_softc(dev);
- int i;
-
- for (i = 0; i < sc->sc_gpio_npins; i++) {
- if (sc->sc_gpio_pins[i].gp_pin == pin)
- break;
- }
-
- if (i >= sc->sc_gpio_npins)
- return (EINVAL);
-
- rk30_gpio_pin_configure(sc, &sc->sc_gpio_pins[i], flags);
-
- return (0);
-}
-
-static int
-rk30_gpio_pin_set(device_t dev, uint32_t pin, unsigned int value)
-{
- int i;
- struct rk30_gpio_softc *sc;
- uint32_t data;
-
- sc = device_get_softc(dev);
- for (i = 0; i < sc->sc_gpio_npins; i++) {
- if (sc->sc_gpio_pins[i].gp_pin == pin)
- break;
- }
- if (i >= sc->sc_gpio_npins)
- return (EINVAL);
- RK30_GPIO_LOCK(sc);
- data = RK30_GPIO_READ(sc, RK30_GPIO_SWPORT_DR);
- if (value)
- data |= (1U << pin);
- else
- data &= ~(1U << pin);
- RK30_GPIO_WRITE(sc, RK30_GPIO_SWPORT_DR, data);
- RK30_GPIO_UNLOCK(sc);
-
- return (0);
-}
-
-static int
-rk30_gpio_pin_get(device_t dev, uint32_t pin, unsigned int *val)
-{
- int i;
- struct rk30_gpio_softc *sc;
- uint32_t data;
-
- sc = device_get_softc(dev);
- for (i = 0; i < sc->sc_gpio_npins; i++) {
- if (sc->sc_gpio_pins[i].gp_pin == pin)
- break;
- }
- if (i >= sc->sc_gpio_npins)
- return (EINVAL);
- RK30_GPIO_LOCK(sc);
- data = RK30_GPIO_READ(sc, RK30_GPIO_EXT_PORT);
- RK30_GPIO_UNLOCK(sc);
- *val = (data & (1U << pin)) ? 1 : 0;
-
- return (0);
-}
-
-static int
-rk30_gpio_pin_toggle(device_t dev, uint32_t pin)
-{
- int i;
- struct rk30_gpio_softc *sc;
- uint32_t data;
-
- sc = device_get_softc(dev);
- for (i = 0; i < sc->sc_gpio_npins; i++) {
- if (sc->sc_gpio_pins[i].gp_pin == pin)
- break;
- }
- if (i >= sc->sc_gpio_npins)
- return (EINVAL);
- RK30_GPIO_LOCK(sc);
- data = RK30_GPIO_READ(sc, RK30_GPIO_SWPORT_DR);
- if (data & (1U << pin))
- data &= ~(1U << pin);
- else
- data |= (1U << pin);
- RK30_GPIO_WRITE(sc, RK30_GPIO_SWPORT_DR, data);
- RK30_GPIO_UNLOCK(sc);
-
- return (0);
-}
-
-static int
-rk30_gpio_probe(device_t dev)
-{
-
- if (!ofw_bus_status_okay(dev))
- return (ENXIO);
-
- if (!ofw_bus_is_compatible(dev, "rockchip,rk30xx-gpio"))
- return (ENXIO);
-
- device_set_desc(dev, "Rockchip RK30XX GPIO controller");
- return (BUS_PROBE_DEFAULT);
-}
-
-static int
-rk30_gpio_attach(device_t dev)
-{
- struct rk30_gpio_softc *sc = device_get_softc(dev);
- int i, rid;
- phandle_t gpio;
- unsigned long start;
-
- if (rk30_gpio_sc)
- return (ENXIO);
- sc->sc_dev = dev;
- mtx_init(&sc->sc_mtx, "rk30 gpio", "gpio", MTX_DEF);
-
- rid = 0;
- sc->sc_mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid,
- RF_ACTIVE);
- if (!sc->sc_mem_res) {
- device_printf(dev, "cannot allocate memory window\n");
- goto fail;
- }
- sc->sc_bst = rman_get_bustag(sc->sc_mem_res);
- sc->sc_bsh = rman_get_bushandle(sc->sc_mem_res);
- /* Check the unit we are attaching by our base address. */
- sc->sc_bank = -1;
- start = rman_get_start(sc->sc_mem_res);
- for (i = 0; i < nitems(rk30_gpio_base_addr); i++) {
- if (rk30_gpio_base_addr[i] == start) {
- sc->sc_bank = i;
- break;
- }
- }
- if (sc->sc_bank == -1) {
- device_printf(dev,
- "unsupported device unit (only GPIO0..3 are supported)\n");
- goto fail;
- }
-
- rid = 0;
- sc->sc_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid,
- RF_ACTIVE);
- if (!sc->sc_irq_res) {
- device_printf(dev, "cannot allocate interrupt\n");
- goto fail;
- }
-
- /* Find our node. */
- gpio = ofw_bus_get_node(sc->sc_dev);
-
- if (!OF_hasprop(gpio, "gpio-controller"))
- /* Node is not a GPIO controller. */
- goto fail;
-
- /* Initialize the software controlled pins. */
- for (i = 0; i < RK30_GPIO_PINS; i++) {
- snprintf(sc->sc_gpio_pins[i].gp_name, GPIOMAXNAME,
- "pin %d", i);
- sc->sc_gpio_pins[i].gp_pin = i;
- sc->sc_gpio_pins[i].gp_caps = RK30_GPIO_DEFAULT_CAPS;
- sc->sc_gpio_pins[i].gp_flags = rk30_gpio_get_function(sc, i);
- }
- sc->sc_gpio_npins = i;
- rk30_gpio_sc = sc;
- rk30_gpio_init();
- sc->sc_busdev = gpiobus_attach_bus(dev);
- if (sc->sc_busdev == NULL)
- goto fail;
-
- return (0);
-
-fail:
- if (sc->sc_irq_res)
- bus_release_resource(dev, SYS_RES_IRQ, 0, sc->sc_irq_res);
- if (sc->sc_mem_res)
- bus_release_resource(dev, SYS_RES_MEMORY, 0, sc->sc_mem_res);
- mtx_destroy(&sc->sc_mtx);
-
- return (ENXIO);
-}
-
-static int
-rk30_gpio_detach(device_t dev)
-{
-
- return (EBUSY);
-}
-
-static device_method_t rk30_gpio_methods[] = {
- /* Device interface */
- DEVMETHOD(device_probe, rk30_gpio_probe),
- DEVMETHOD(device_attach, rk30_gpio_attach),
- DEVMETHOD(device_detach, rk30_gpio_detach),
-
- /* GPIO protocol */
- DEVMETHOD(gpio_get_bus, rk30_gpio_get_bus),
- DEVMETHOD(gpio_pin_max, rk30_gpio_pin_max),
- DEVMETHOD(gpio_pin_getname, rk30_gpio_pin_getname),
- DEVMETHOD(gpio_pin_getflags, rk30_gpio_pin_getflags),
- DEVMETHOD(gpio_pin_getcaps, rk30_gpio_pin_getcaps),
- DEVMETHOD(gpio_pin_setflags, rk30_gpio_pin_setflags),
- DEVMETHOD(gpio_pin_get, rk30_gpio_pin_get),
- DEVMETHOD(gpio_pin_set, rk30_gpio_pin_set),
- DEVMETHOD(gpio_pin_toggle, rk30_gpio_pin_toggle),
-
- DEVMETHOD_END
-};
-
-static devclass_t rk30_gpio_devclass;
-
-static driver_t rk30_gpio_driver = {
- "gpio",
- rk30_gpio_methods,
- sizeof(struct rk30_gpio_softc),
-};
-
-DRIVER_MODULE(rk30_gpio, simplebus, rk30_gpio_driver, rk30_gpio_devclass, 0, 0);
-
-int
-rk30_gpios_prop_handle(phandle_t ctrl, pcell_t *gpios, int len)
-{
- struct rk30_gpio_softc *sc;
- pcell_t gpio_cells;
- int inc, t, tuples, tuple_size;
- int dir, flags, pin, i;
- u_long gpio_ctrl, size;
-
- sc = rk30_gpio_sc;
- if (sc == NULL)
- return ENXIO;
-
- if (OF_getencprop(ctrl, "#gpio-cells", &gpio_cells, sizeof(pcell_t)) < 0)
- return (ENXIO);
- if (gpio_cells != 2)
- return (ENXIO);
-
- tuple_size = gpio_cells * sizeof(pcell_t) + sizeof(phandle_t);
- tuples = len / tuple_size;
-
- if (fdt_regsize(ctrl, &gpio_ctrl, &size))
- return (ENXIO);
-
- /*
- * Skip controller reference, since controller's phandle is given
- * explicitly (in a function argument).
- */
- inc = sizeof(ihandle_t) / sizeof(pcell_t);
- gpios += inc;
- for (t = 0; t < tuples; t++) {
- pin = gpios[0];
- dir = gpios[1];
- flags = gpios[2];
-
- for (i = 0; i < sc->sc_gpio_npins; i++) {
- if (sc->sc_gpio_pins[i].gp_pin == pin)
- break;
- }
- if (i >= sc->sc_gpio_npins)
- return (EINVAL);
-
- rk30_gpio_pin_configure(sc, &sc->sc_gpio_pins[i], flags);
-
- if (dir == 1) {
- /* Input. */
- rk30_gpio_pin_set(sc->sc_dev, pin, GPIO_PIN_INPUT);
- } else {
- /* Output. */
- rk30_gpio_pin_set(sc->sc_dev, pin, GPIO_PIN_OUTPUT);
- }
- gpios += gpio_cells + inc;
- }
-
- return (0);
-}
-
-#define MAX_PINS_PER_NODE 5
-#define GPIOS_PROP_CELLS 4
-
-static int
-rk30_gpio_init(void)
-{
- phandle_t child, parent, root, ctrl;
- pcell_t gpios[MAX_PINS_PER_NODE * GPIOS_PROP_CELLS];
- struct gpio_ctrl_entry *e;
- int len, rv;
-
- root = OF_finddevice("/");
- len = 0;
- parent = root;
-
- /* Traverse through entire tree to find nodes with 'gpios' prop */
- for (child = OF_child(parent); child != 0; child = OF_peer(child)) {
- /* Find a 'leaf'. Start the search from this node. */
- while (OF_child(child)) {
- parent = child;
- child = OF_child(child);
- }
- if ((len = OF_getproplen(child, "gpios")) > 0) {
- if (len > sizeof(gpios))
- return (ENXIO);
-
- /* Get 'gpios' property. */
- OF_getencprop(child, "gpios", gpios, len);
-
- e = (struct gpio_ctrl_entry *)&gpio_controllers;
-
- /* Find and call a handler. */
- for (; e->compat; e++) {
- /*
- * First cell of 'gpios' property should
- * contain a ref. to a node defining GPIO
- * controller.
- */
- ctrl = OF_node_from_xref(gpios[0]);
-
- if (ofw_bus_node_is_compatible(ctrl, e->compat))
- /* Call a handler. */
- if ((rv = e->handler(ctrl,
- (pcell_t *)&gpios, len)))
- return (rv);
- }
- }
-
- if (OF_peer(child) == 0) {
- /* No more siblings. */
- child = parent;
- parent = OF_parent(child);
- }
- }
- return (0);
-}
Index: head/sys/arm/rockchip/rk30xx_grf.h
===================================================================
--- head/sys/arm/rockchip/rk30xx_grf.h
+++ head/sys/arm/rockchip/rk30xx_grf.h
@@ -1,143 +0,0 @@
-/*-
- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
- *
- * Copyright (c) 2013 Ganbold Tsagaankhuu <ganbold@freebsd.org>
- * 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 _RK30_GRF_H_
-#define _RK30_GRF_H_
-
-#define RK30_GRF_BASE 0xF0008000
-
-#define GRF_GPIO0L_DIR 0x0000
-#define GRF_GPIO0H_DIR 0x0004
-#define GRF_GPIO1L_DIR 0x0008
-#define GRF_GPIO1H_DIR 0x000c
-#define GRF_GPIO2L_DIR 0x0010
-#define GRF_GPIO2H_DIR 0x0014
-#define GRF_GPIO3L_DIR 0x0018
-#define GRF_GPIO3H_DIR 0x001c
-#define GRF_GPIO0L_DO 0x0020
-#define GRF_GPIO0H_DO 0x0024
-#define GRF_GPIO1L_DO 0x0028
-#define GRF_GPIO1H_DO 0x002c
-#define GRF_GPIO2L_DO 0x0030
-#define GRF_GPIO2H_DO 0x0034
-#define GRF_GPIO3L_DO 0x0038
-#define GRF_GPIO3H_DO 0x003c
-#define GRF_GPIO0L_EN 0x0040
-#define GRF_GPIO0H_EN 0x0044
-#define GRF_GPIO1L_EN 0x0048
-#define GRF_GPIO1H_EN 0x004c
-#define GRF_GPIO2L_EN 0x0050
-#define GRF_GPIO2H_EN 0x0054
-#define GRF_GPIO3L_EN 0x0058
-#define GRF_GPIO3H_EN 0x005c
-
-#define GRF_GPIO0C_IOMUX 0x0068
-#define GRF_GPIO0D_IOMUX 0x006c
-#define GRF_GPIO1A_IOMUX 0x0070
-#define GRF_GPIO1B_IOMUX 0x0074
-#define GRF_GPIO1C_IOMUX 0x0078
-#define GRF_GPIO1D_IOMUX 0x007c
-#define GRF_GPIO2A_IOMUX 0x0080
-#define GRF_GPIO2B_IOMUX 0x0084
-#define GRF_GPIO2C_IOMUX 0x0088
-#define GRF_GPIO2D_IOMUX 0x008c
-#define GRF_GPIO3A_IOMUX 0x0090
-#define GRF_GPIO3B_IOMUX 0x0094
-#define GRF_GPIO3C_IOMUX 0x0098
-#define GRF_GPIO3D_IOMUX 0x009c
-#define GRF_SOC_CON0 0x00a0
-#define GRF_SOC_CON1 0x00a4
-#define GRF_SOC_CON2 0x00a8
-#define GRF_SOC_STATUS0 0x00ac
-#define GRF_DMAC1_CON0 0x00b0
-#define GRF_DMAC1_CON1 0x00b4
-#define GRF_DMAC1_CON2 0x00b8
-#define GRF_DMAC2_CON0 0x00bc
-#define GRF_DMAC2_CON1 0x00c0
-#define GRF_DMAC2_CON2 0x00c4
-#define GRF_DMAC2_CON3 0x00c8
-#define GRF_CPU_CON0 0x00cc
-#define GRF_CPU_CON1 0x00d0
-#define GRF_CPU_CON2 0x00d4
-#define GRF_CPU_CON3 0x00d8
-#define GRF_CPU_CON4 0x00dc
-#define GRF_CPU_CON5 0x00e0
-
-#define GRF_DDRC_CON0 0x00ec
-#define GRF_DDRC_STAT 0x00f0
-#define GRF_IO_CON0 0x00f4
-#define GRF_IO_CON1 0x00f8
-#define GRF_IO_CON2 0x00fc
-#define GRF_IO_CON3 0x0100
-#define GRF_IO_CON4 0x0104
-#define GRF_SOC_STATUS1 0x0108
-#define GRF_UOC0_CON0 0x010c
-#define GRF_UOC0_CON1 0x0110
-#define GRF_UOC0_CON2 0x0114
-#define GRF_UOC0_CON3 0x0118
-#define GRF_UOC1_CON0 0x011c
-#define GRF_UOC1_CON1 0x0120
-#define GRF_UOC1_CON2 0x0124
-#define GRF_UOC1_CON3 0x0128
-#define GRF_UOC2_CON0 0x012c
-#define GRF_UOC2_CON1 0x0130
-
-#define GRF_UOC3_CON0 0x0138
-#define GRF_UOC3_CON1 0x013c
-#define GRF_HSIC_STAT 0x0140
-#define GRF_OS_REG0 0x0144
-#define GRF_OS_REG1 0x0148
-#define GRF_OS_REG2 0x014c
-#define GRF_OS_REG3 0x0150
-#define GRF_OS_REG4 0x0154
-#define GRF_OS_REG5 0x0158
-#define GRF_OS_REG6 0x015c
-#define GRF_OS_REG7 0x0160
-#define GRF_GPIO0B_PULL 0x0164
-#define GRF_GPIO0C_PULL 0x0168
-#define GRF_GPIO0D_PULL 0x016c
-#define GRF_GPIO1A_PULL 0x0170
-#define GRF_GPIO1B_PULL 0x0174
-#define GRF_GPIO1C_PULL 0x0178
-#define GRF_GPIO1D_PULL 0x017c
-#define GRF_GPIO2A_PULL 0x0180
-#define GRF_GPIO2B_PULL 0x0184
-#define GRF_GPIO2C_PULL 0x0188
-#define GRF_GPIO2D_PULL 0x018c
-#define GRF_GPIO3A_PULL 0x0190
-#define GRF_GPIO3B_PULL 0x0194
-#define GRF_GPIO3C_PULL 0x0198
-#define GRF_GPIO3D_PULL 0x019c
-#define GRF_FLASH_DATA_PULL 0x01a0
-#define GRF_FLASH_CMD_PULL 0x01a4
-
-void rk30_grf_gpio_pud(uint32_t bank, uint32_t pin, uint32_t state);
-
-#endif /* _RK30_GRF_H_ */
Index: head/sys/arm/rockchip/rk30xx_grf.c
===================================================================
--- head/sys/arm/rockchip/rk30xx_grf.c
+++ head/sys/arm/rockchip/rk30xx_grf.c
@@ -1,131 +0,0 @@
-/*-
- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
- *
- * Copyright (c) 2013 Ganbold Tsagaankhuu <ganbold@freebsd.org>
- * 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.
- */
-
-/* General Register File for Rockchip RK30xx */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/bus.h>
-#include <sys/kernel.h>
-#include <sys/module.h>
-#include <sys/malloc.h>
-#include <sys/rman.h>
-#include <sys/timeet.h>
-#include <sys/timetc.h>
-#include <sys/watchdog.h>
-#include <machine/bus.h>
-#include <machine/cpu.h>
-#include <machine/intr.h>
-
-#include <dev/ofw/openfirm.h>
-#include <dev/ofw/ofw_bus.h>
-#include <dev/ofw/ofw_bus_subr.h>
-
-#include <machine/bus.h>
-
-#include "rk30xx_grf.h"
-
-struct rk30_grf_softc {
- struct resource *res;
- bus_space_tag_t bst;
- bus_space_handle_t bsh;
-};
-
-static struct rk30_grf_softc *rk30_grf_sc = NULL;
-
-#define grf_read_4(sc, reg) \
- bus_space_read_4((sc)->bst, (sc)->bsh, (reg))
-#define grf_write_4(sc, reg, val) \
- bus_space_write_4((sc)->bst, (sc)->bsh, (reg), (val))
-
-static int
-rk30_grf_probe(device_t dev)
-{
-
- if (!ofw_bus_status_okay(dev))
- return (ENXIO);
-
- if (ofw_bus_is_compatible(dev, "rockchip,rk30xx-grf")) {
- device_set_desc(dev, "RK30XX General Register File");
- return(BUS_PROBE_DEFAULT);
- }
-
- return (ENXIO);
-}
-
-static int
-rk30_grf_attach(device_t dev)
-{
- struct rk30_grf_softc *sc = device_get_softc(dev);
- int rid = 0;
-
- if (rk30_grf_sc)
- return (ENXIO);
-
- sc->res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE);
- if (!sc->res) {
- device_printf(dev, "could not allocate resource\n");
- return (ENXIO);
- }
-
- sc->bst = rman_get_bustag(sc->res);
- sc->bsh = rman_get_bushandle(sc->res);
-
- rk30_grf_sc = sc;
-
- return (0);
-}
-
-static device_method_t rk30_grf_methods[] = {
- DEVMETHOD(device_probe, rk30_grf_probe),
- DEVMETHOD(device_attach, rk30_grf_attach),
- { 0, 0 }
-};
-
-static driver_t rk30_grf_driver = {
- "rk30_grf",
- rk30_grf_methods,
- sizeof(struct rk30_grf_softc),
-};
-
-static devclass_t rk30_grf_devclass;
-
-DRIVER_MODULE(rk30_grf, simplebus, rk30_grf_driver, rk30_grf_devclass, 0, 0);
-
-void
-rk30_grf_gpio_pud(uint32_t bank, uint32_t pin, uint32_t state)
-{
- uint32_t offset;
-
- offset = GRF_GPIO0B_PULL - 4 + (bank * 16) + ((pin / 8) * 4);
- pin = (7 - (pin % 8)) * 2;
- grf_write_4(rk30_grf_sc, offset, (0x3 << (16 + pin)) | (state << pin));
-}
Index: head/sys/arm/rockchip/rk30xx_machdep.c
===================================================================
--- head/sys/arm/rockchip/rk30xx_machdep.c
+++ head/sys/arm/rockchip/rk30xx_machdep.c
@@ -1,105 +0,0 @@
-/*-
- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
- *
- * Copyright (c) 2013 Ganbold Tsagaankhuu <ganbold@freebsd.org>
- * All rights reserved.
- *
- * This code is derived from software written for Brini by Mark Brinicombe
- *
- * 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.
- *
- * from: FreeBSD: //depot/projects/arm/src/sys/arm/ti/ti_machdep.c
- */
-
-#include "opt_ddb.h"
-#include "opt_platform.h"
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/bus.h>
-#include <sys/devmap.h>
-
-#include <vm/vm.h>
-#include <vm/pmap.h>
-
-#include <machine/bus.h>
-#include <machine/machdep.h>
-#include <machine/platform.h>
-#include <machine/platformvar.h>
-
-#include <arm/rockchip/rk30xx_wdog.h>
-#include <arm/rockchip/rk30xx_mp.h>
-
-#include "platform_if.h"
-
-static platform_devmap_init_t rk30xx_devmap_init;
-static platform_late_init_t rk30xx_late_init;
-static platform_cpu_reset_t rk30xx_cpu_reset;
-
-static void
-rk30xx_late_init(platform_t plat)
-{
-
- /* Enable cache */
- cpufunc_control(CPU_CONTROL_DC_ENABLE|CPU_CONTROL_IC_ENABLE,
- CPU_CONTROL_DC_ENABLE|CPU_CONTROL_IC_ENABLE);
-}
-
-/*
- * Set up static device mappings.
- */
-static int
-rk30xx_devmap_init(platform_t plat)
-{
-
- devmap_add_entry(0x10000000, 0x00200000);
- devmap_add_entry(0x20000000, 0x00100000);
-
- return (0);
-}
-
-static void
-rk30xx_cpu_reset(platform_t plat)
-{
-
- rk30_wd_watchdog_reset();
- printf("Reset failed!\n");
- while (1);
-}
-
-#if defined(SOC_ROCKCHIP_RK3188)
-static platform_method_t rk30xx_methods[] = {
- PLATFORMMETHOD(platform_devmap_init, rk30xx_devmap_init),
- PLATFORMMETHOD(platform_late_init, rk30xx_late_init),
- PLATFORMMETHOD(platform_cpu_reset, rk30xx_cpu_reset),
-
-#ifdef SMP
- PLATFORMMETHOD(platform_mp_start_ap, rk30xx_mp_start_ap),
- PLATFORMMETHOD(platform_mp_setmaxid, rk30xx_mp_setmaxid),
-#endif
- PLATFORMMETHOD_END,
-};
-FDT_PLATFORM_DEF(rk30xx, "RK3188", 0, "rockchip,rk3188", 200);
-#endif
Index: head/sys/arm/rockchip/rk30xx_mp.h
===================================================================
--- head/sys/arm/rockchip/rk30xx_mp.h
+++ head/sys/arm/rockchip/rk30xx_mp.h
@@ -1,38 +0,0 @@
-/*-
- * Copyright (C) 2016 Ganbold Tsagaankhuu <ganbold@freebsd.org>
- * 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
- *
- * 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 _RK30XX_MP_H_
-#define _RK30XX_MP_H_
-
-void rk30xx_mp_setmaxid(platform_t plat);
-void rk30xx_mp_start_ap(platform_t plat);
-
-#endif /* _RK30XX_MP_H_ */
Index: head/sys/arm/rockchip/rk30xx_mp.c
===================================================================
--- head/sys/arm/rockchip/rk30xx_mp.c
+++ head/sys/arm/rockchip/rk30xx_mp.c
@@ -1,176 +0,0 @@
-/*-
- * Copyright (c) 2014 Ganbold Tsagaankhuu <ganbold@freebsd.org>
- * 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 ``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 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 <sys/systm.h>
-#include <sys/bus.h>
-#include <sys/kernel.h>
-#include <sys/lock.h>
-#include <sys/mutex.h>
-#include <sys/smp.h>
-
-#include <vm/vm.h>
-#include <vm/pmap.h>
-
-#include <machine/cpu.h>
-#include <machine/cpu-v6.h>
-#include <machine/smp.h>
-#include <machine/fdt.h>
-#include <machine/intr.h>
-#include <machine/platformvar.h>
-
-#include <arm/rockchip/rk30xx_mp.h>
-
-#define SCU_PHYSBASE 0x1013c000
-#define SCU_SIZE 0x100
-
-#define SCU_CONTROL_REG 0x00
-#define SCU_CONTROL_ENABLE (1 << 0)
-#define SCU_STANDBY_EN (1 << 5)
-#define SCU_CONFIG_REG 0x04
-#define SCU_CONFIG_REG_NCPU_MASK 0x03
-#define SCU_CPUPOWER_REG 0x08
-#define SCU_INV_TAGS_REG 0x0c
-
-#define SCU_FILTER_START_REG 0x10
-#define SCU_FILTER_END_REG 0x14
-#define SCU_SECURE_ACCESS_REG 0x18
-#define SCU_NONSECURE_ACCESS_REG 0x1c
-
-#define IMEM_PHYSBASE 0x10080000
-#define IMEM_SIZE 0x20
-
-#define PMU_PHYSBASE 0x20004000
-#define PMU_SIZE 0x100
-#define PMU_PWRDN_CON 0x08
-#define PMU_PWRDN_SCU (1 << 4)
-
-extern char *mpentry_addr;
-static void rk30xx_boot2(void);
-
-static void
-rk30xx_boot2(void)
-{
-
- __asm __volatile(
- "ldr pc, 1f\n"
- ".globl mpentry_addr\n"
- "mpentry_addr:\n"
- "1: .space 4\n");
-}
-
-void
-rk30xx_mp_setmaxid(platform_t plat)
-{
- bus_space_handle_t scu;
- int ncpu;
- uint32_t val;
-
- if (mp_ncpus != 0)
- return;
-
- if (bus_space_map(fdtbus_bs_tag, SCU_PHYSBASE, SCU_SIZE, 0, &scu) != 0)
- panic("Could not map the SCU");
-
- val = bus_space_read_4(fdtbus_bs_tag, scu, SCU_CONFIG_REG);
- ncpu = (val & SCU_CONFIG_REG_NCPU_MASK) + 1;
- bus_space_unmap(fdtbus_bs_tag, scu, SCU_SIZE);
-
- mp_ncpus = ncpu;
- mp_maxid = ncpu - 1;
-}
-
-void
-rk30xx_mp_start_ap(platform_t plat)
-{
- bus_space_handle_t scu;
- bus_space_handle_t imem;
- bus_space_handle_t pmu;
- uint32_t val;
- int i;
-
- if (bus_space_map(fdtbus_bs_tag, SCU_PHYSBASE, SCU_SIZE, 0, &scu) != 0)
- panic("Could not map the SCU");
- if (bus_space_map(fdtbus_bs_tag, IMEM_PHYSBASE,
- IMEM_SIZE, 0, &imem) != 0)
- panic("Could not map the IMEM");
- if (bus_space_map(fdtbus_bs_tag, PMU_PHYSBASE, PMU_SIZE, 0, &pmu) != 0)
- panic("Could not map the PMU");
-
- /*
- * Invalidate SCU cache tags. The 0x0000ffff constant invalidates all
- * ways on all cores 0-3. Per the ARM docs, it's harmless to write to
- * the bits for cores that are not present.
- */
- bus_space_write_4(fdtbus_bs_tag, scu, SCU_INV_TAGS_REG, 0x0000ffff);
-
- /* Make sure all cores except the first are off */
- val = bus_space_read_4(fdtbus_bs_tag, pmu, PMU_PWRDN_CON);
- for (i = 1; i < mp_ncpus; i++)
- val |= 1 << i;
- bus_space_write_4(fdtbus_bs_tag, pmu, PMU_PWRDN_CON, val);
-
- /* Enable SCU power domain */
- val = bus_space_read_4(fdtbus_bs_tag, pmu, PMU_PWRDN_CON);
- val &= ~PMU_PWRDN_SCU;
- bus_space_write_4(fdtbus_bs_tag, pmu, PMU_PWRDN_CON, val);
-
- /* Enable SCU */
- val = bus_space_read_4(fdtbus_bs_tag, scu, SCU_CONTROL_REG);
- bus_space_write_4(fdtbus_bs_tag, scu, SCU_CONTROL_REG,
- val | SCU_CONTROL_ENABLE);
-
- /*
- * Cores will execute the code which resides at the start of
- * the on-chip bootram/sram after power-on. This sram region
- * should be reserved and the trampoline code that directs
- * the core to the real startup code in ram should be copied
- * into this sram region.
- *
- * First set boot function for the sram code.
- */
- mpentry_addr = (char *)pmap_kextract((vm_offset_t)mpentry);
-
- /* Copy trampoline to sram, that runs during startup of the core */
- bus_space_write_region_4(fdtbus_bs_tag, imem, 0,
- (uint32_t *)&rk30xx_boot2, 8);
-
- dcache_wbinv_poc_all();
-
- /* Start all cores */
- val = bus_space_read_4(fdtbus_bs_tag, pmu, PMU_PWRDN_CON);
- for (i = 1; i < mp_ncpus; i++)
- val &= ~(1 << i);
- bus_space_write_4(fdtbus_bs_tag, pmu, PMU_PWRDN_CON, val);
-
- dsb();
- sev();
-
- bus_space_unmap(fdtbus_bs_tag, scu, SCU_SIZE);
- bus_space_unmap(fdtbus_bs_tag, imem, IMEM_SIZE);
- bus_space_unmap(fdtbus_bs_tag, pmu, PMU_SIZE);
-}
Index: head/sys/arm/rockchip/rk30xx_pmu.h
===================================================================
--- head/sys/arm/rockchip/rk30xx_pmu.h
+++ head/sys/arm/rockchip/rk30xx_pmu.h
@@ -1,62 +0,0 @@
-/*-
- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
- *
- * Copyright (c) 2013 Ganbold Tsagaankhuu <ganbold@freebsd.org>
- * 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 _RK30_PMU_H_
-#define _RK30_PMU_H_
-
-#define RK30_PMU_BASE 0xF0004000
-
-#define PMU_WAKEUP_CFG0 0x00
-#define PMU_WAKEUP_CFG1 0x04
-#define PMU_PWRDN_CON 0x08
-#define PMU_PWRDN_ST 0x0c
-#define PMU_INT_CON 0x10
-#define PMU_INT_ST 0x14
-#define PMU_MISC_CON 0x18
-#define PMU_OSC_CNT 0x1c
-#define PMU_PLL_CNT 0x20
-#define PMU_PMU_CNT 0x24
-#define PMU_DDRIO_PWRON_CNT 0x28
-#define PMU_WAKEUP_RST_CLR_CNT 0x2c
-#define PMU_SCU_PWRDWN_CNT 0x30
-#define PMU_SCU_PWRUP_CNT 0x34
-#define PMU_MISC_CON1 0x38
-#define PMU_GPIO0_CON 0x3c
-#define PMU_SYS_REG0 0x40
-#define PMU_SYS_REG1 0x44
-#define PMU_SYS_REG2 0x48
-#define PMU_SYS_REG3 0x4c
-#define PMU_STOP_INT_DLY 0x60
-#define PMU_GPIO0A_PULL 0x64
-#define PMU_GPIO0B_PULL 0x68
-
-void rk30_pmu_gpio_pud(uint32_t pin, uint32_t state);
-
-#endif /* _RK30_PMU_H_ */
Index: head/sys/arm/rockchip/rk30xx_pmu.c
===================================================================
--- head/sys/arm/rockchip/rk30xx_pmu.c
+++ head/sys/arm/rockchip/rk30xx_pmu.c
@@ -1,131 +0,0 @@
-/*-
- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
- *
- * Copyright (c) 2013 Ganbold Tsagaankhuu <ganbold@freebsd.org>
- * 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.
- */
-
-/* PMU for Rockchip RK30xx */
-
-#include <sys/cdefs.h>
-__FBSDID("$FreeBSD$");
-
-#include <sys/param.h>
-#include <sys/systm.h>
-#include <sys/bus.h>
-#include <sys/kernel.h>
-#include <sys/module.h>
-#include <sys/malloc.h>
-#include <sys/rman.h>
-#include <sys/timeet.h>
-#include <sys/timetc.h>
-#include <sys/watchdog.h>
-#include <machine/bus.h>
-#include <machine/cpu.h>
-#include <machine/intr.h>
-
-#include <dev/ofw/openfirm.h>
-#include <dev/ofw/ofw_bus.h>
-#include <dev/ofw/ofw_bus_subr.h>
-
-#include <machine/bus.h>
-
-#include "rk30xx_pmu.h"
-
-struct rk30_pmu_softc {
- struct resource *res;
- bus_space_tag_t bst;
- bus_space_handle_t bsh;
-};
-
-static struct rk30_pmu_softc *rk30_pmu_sc = NULL;
-
-#define pmu_read_4(sc, reg) \
- bus_space_read_4((sc)->bst, (sc)->bsh, (reg))
-#define pmu_write_4(sc, reg, val) \
- bus_space_write_4((sc)->bst, (sc)->bsh, (reg), (val))
-
-static int
-rk30_pmu_probe(device_t dev)
-{
-
- if (!ofw_bus_status_okay(dev))
- return (ENXIO);
-
- if (ofw_bus_is_compatible(dev, "rockchip,rk30xx-pmu")) {
- device_set_desc(dev, "RK30XX PMU");
- return(BUS_PROBE_DEFAULT);
- }
-
- return (ENXIO);
-}
-
-static int
-rk30_pmu_attach(device_t dev)
-{
- struct rk30_pmu_softc *sc = device_get_softc(dev);
- int rid = 0;
-
- if (rk30_pmu_sc)
- return (ENXIO);
-
- sc->res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE);
- if (!sc->res) {
- device_printf(dev, "could not allocate resource\n");
- return (ENXIO);
- }
-
- sc->bst = rman_get_bustag(sc->res);
- sc->bsh = rman_get_bushandle(sc->res);
-
- rk30_pmu_sc = sc;
-
- return (0);
-}
-
-static device_method_t rk30_pmu_methods[] = {
- DEVMETHOD(device_probe, rk30_pmu_probe),
- DEVMETHOD(device_attach, rk30_pmu_attach),
- { 0, 0 }
-};
-
-static driver_t rk30_pmu_driver = {
- "rk30_pmu",
- rk30_pmu_methods,
- sizeof(struct rk30_pmu_softc),
-};
-
-static devclass_t rk30_pmu_devclass;
-
-DRIVER_MODULE(rk30_pmu, simplebus, rk30_pmu_driver, rk30_pmu_devclass, 0, 0);
-
-void
-rk30_pmu_gpio_pud(uint32_t pin, uint32_t state)
-{
- uint32_t offset;
-
- offset = PMU_GPIO0A_PULL + ((pin / 8) * 4);
- pin = (pin % 8) * 2;
- pmu_write_4(rk30_pmu_sc, offset, (0x3 << (16 + pin)) | (state << pin));
-}
Index: head/sys/arm/rockchip/rk30xx_wdog.h
===================================================================
--- head/sys/arm/rockchip/rk30xx_wdog.h
+++ head/sys/arm/rockchip/rk30xx_wdog.h
@@ -1,36 +0,0 @@
-/*-
- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
- *
- * Copyright (c) 2013 Ganbold Tsagaankhuu <ganbold@freebsd.org>
- * 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 __RK30XX_WDOG_H__
-#define __RK30XX_WDOG_H__
-
-void rk30_wd_watchdog_reset(void);
-
-#endif /*__RK30XX_WDOG_H__*/
Index: head/sys/arm/rockchip/rk30xx_wdog.c
===================================================================
--- head/sys/arm/rockchip/rk30xx_wdog.c
+++ head/sys/arm/rockchip/rk30xx_wdog.c
@@ -1,202 +0,0 @@
-/*-
- * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
- *
- * Copyright (c) 2013 Ganbold Tsagaankhuu <ganbold@freebsd.org>
- * 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 <sys/systm.h>
-#include <sys/watchdog.h>
-#include <sys/bus.h>
-#include <sys/eventhandler.h>
-#include <sys/kernel.h>
-#include <sys/lock.h>
-#include <sys/module.h>
-#include <sys/mutex.h>
-#include <sys/rman.h>
-
-#include <dev/ofw/openfirm.h>
-#include <dev/ofw/ofw_bus.h>
-#include <dev/ofw/ofw_bus_subr.h>
-
-#include <machine/bus.h>
-#include <machine/machdep.h>
-#include <machine/fdt.h>
-
-#include <arm/rockchip/rk30xx_wdog.h>
-
-#ifndef RK30_WDT_BASE
-#define RK30_WDT_BASE 0x2004c000
-#define RK30_WDT_PSIZE 0x100
-#endif
-
-#define RK30_WDT_READ(_sc, _r) bus_read_4((_sc)->res, (_r))
-#define RK30_WDT_WRITE(_sc, _r, _v) bus_write_4((_sc)->res, (_r), (_v))
-
-#define WDOG_CTRL 0x00
-#define WDOG_CTRL_EN (1 << 0)
-#define WDOG_CTRL_RSP_MODE (1 << 1)
-#define WDOG_CTRL_RST_PULSE (4 << 2)
-#define WDOG_CTRL_RST 0xa
-#define WDOG_TORR 0x04
-#define WDOG_TORR_INTVL_SHIFT 0
-#define WDOG_CCVR 0x08
-#define WDOG_CRR 0x0c
-#define WDOG_CRR_PWD 0x76
-#define WDOG_STAT 0x10
-#define WDOG_EOI 0x14
-
-static struct rk30_wd_softc *rk30_wd_sc = NULL;
-
-struct rk30_wd_softc {
- device_t dev;
- struct resource *res;
- struct mtx mtx;
- int freq;
-};
-
-static void rk30_wd_watchdog_fn(void *private, u_int cmd, int *error);
-
-static int
-rk30_wd_probe(device_t dev)
-{
-
- if (!ofw_bus_status_okay(dev))
- return (ENXIO);
-
- if (ofw_bus_is_compatible(dev, "rockchip,rk30xx-wdt")) {
- device_set_desc(dev, "Rockchip RK30XX Watchdog");
- return (BUS_PROBE_DEFAULT);
- }
-
- return (ENXIO);
-}
-
-static int
-rk30_wd_attach(device_t dev)
-{
- struct rk30_wd_softc *sc;
- int rid;
- phandle_t node;
- pcell_t cell;
-
- if (rk30_wd_sc != NULL)
- return (ENXIO);
-
- sc = device_get_softc(dev);
- sc->dev = dev;
-
- node = ofw_bus_get_node(sc->dev);
- if (OF_getencprop(node, "clock-frequency", &cell, sizeof(cell)) > 0)
- sc->freq = cell / 1000000;
- else
- return (ENXIO);
-
- rid = 0;
- sc->res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE);
- if (sc->res == NULL) {
- device_printf(dev, "could not allocate memory resource\n");
- return (ENXIO);
- }
-
- rk30_wd_sc = sc;
- mtx_init(&sc->mtx, "RK30XX Watchdog", "rk30_wd", MTX_DEF);
- EVENTHANDLER_REGISTER(watchdog_list, rk30_wd_watchdog_fn, sc, 0);
-
- return (0);
-}
-
-static void
-rk30_wd_watchdog_fn(void *private, u_int cmd, int *error)
-{
- struct rk30_wd_softc *sc;
- uint64_t ms, m, max;
- int i;
-
- sc = private;
- mtx_lock(&sc->mtx);
-
- cmd &= WD_INTERVAL;
-
- if (cmd > 0) {
- ms = ((uint64_t)1 << (cmd & WD_INTERVAL)) / 1000000;
- m = 0xffff / sc->freq;
- max = 0x7fffffff / sc->freq + 1;
- i = 0;
- while (m < max && m < ms) {
- m <<= 1;
- i++;
- }
- if (m < max) {
- RK30_WDT_WRITE(sc, WDOG_TORR,
- i << WDOG_TORR_INTVL_SHIFT);
- RK30_WDT_WRITE(sc, WDOG_CTRL,
- WDOG_CTRL_EN | WDOG_CTRL_RSP_MODE |
- WDOG_CTRL_RST_PULSE);
- RK30_WDT_WRITE(sc, WDOG_CRR, WDOG_CRR_PWD);
- *error = 0;
- } else {
- device_printf(sc->dev, "Can not be disabled\n");
- mtx_unlock(&sc->mtx);
- RK30_WDT_WRITE(sc, WDOG_CTRL, WDOG_CTRL_RST);
- return;
- }
- }
- else
- RK30_WDT_WRITE(sc, WDOG_CTRL, WDOG_CTRL_RST);
-
- mtx_unlock(&sc->mtx);
-}
-
-void
-rk30_wd_watchdog_reset(void)
-{
- bus_space_handle_t bsh;
-
- bus_space_map(fdtbus_bs_tag, RK30_WDT_BASE, RK30_WDT_PSIZE, 0, &bsh);
- bus_space_write_4(fdtbus_bs_tag, bsh, WDOG_TORR, 0);
- bus_space_write_4(fdtbus_bs_tag, bsh, WDOG_CTRL,
- WDOG_CTRL_EN | WDOG_CTRL_RSP_MODE | WDOG_CTRL_RST_PULSE);
-
- while (1);
-}
-
-static device_method_t rk30_wd_methods[] = {
- DEVMETHOD(device_probe, rk30_wd_probe),
- DEVMETHOD(device_attach, rk30_wd_attach),
-
- DEVMETHOD_END
-};
-
-static driver_t rk30_wd_driver = {
- "rk30_wd",
- rk30_wd_methods,
- sizeof(struct rk30_wd_softc),
-};
-static devclass_t rk30_wd_devclass;
-
-DRIVER_MODULE(rk30_wd, simplebus, rk30_wd_driver, rk30_wd_devclass, 0, 0);
Index: head/sys/arm/rockchip/std.rk30xx
===================================================================
--- head/sys/arm/rockchip/std.rk30xx
+++ head/sys/arm/rockchip/std.rk30xx
@@ -1,8 +0,0 @@
-# Rockchip rk30xx common options
-#$FreeBSD$
-
-cpu CPU_CORTEXA
-machine arm armv7
-makeoptions CONF_CFLAGS="-march=armv7a"
-
-files "../rockchip/files.rk30xx"
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Sun, Feb 9, 11:06 AM (21 h, 24 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
16551906
Default Alt Text
D27280.diff (49 KB)
Attached To
Mode
D27280: arm: Remove old rockchip support
Attached
Detach File
Event Timeline
Log In to Comment