diff options
Diffstat (limited to 'sys/arm/broadcom/bcm2835')
47 files changed, 211 insertions, 595 deletions
diff --git a/sys/arm/broadcom/bcm2835/bcm2835_audio.c b/sys/arm/broadcom/bcm2835/bcm2835_audio.c index 36b1dc86535b..13f309dd3f11 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_audio.c +++ b/sys/arm/broadcom/bcm2835/bcm2835_audio.c @@ -28,7 +28,6 @@ #endif #include <dev/sound/pcm/sound.h> -#include <dev/sound/chip.h> #include "mixer_if.h" @@ -38,8 +37,6 @@ #include "vc_vchi_audioserv_defs.h" -SND_DECLARE_FILE("$FreeBSD$"); - /* Audio destination */ #define DEST_AUTO 0 #define DEST_HEADPHONES 1 @@ -870,14 +867,14 @@ bcm2835_audio_delayed_init(void *xsc) goto no; } - if (pcm_register(sc->dev, sc, 1, 0)) { - device_printf(sc->dev, "pcm_register failed\n"); - goto no; - } + pcm_init(sc->dev, sc); pcm_addchan(sc->dev, PCMDIR_PLAY, &bcmchan_class, sc); snprintf(status, SND_STATUSLEN, "at VCHIQ"); - pcm_setstatus(sc->dev, status); + if (pcm_register(sc->dev, status)) { + device_printf(sc->dev, "pcm_register failed\n"); + goto no; + } bcm2835_audio_reset_channel(&sc->pch); bcm2835_audio_create_worker(sc); diff --git a/sys/arm/broadcom/bcm2835/bcm2835_bsc.c b/sys/arm/broadcom/bcm2835/bcm2835_bsc.c index da5f54a9eea0..a4cbef7d528f 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_bsc.c +++ b/sys/arm/broadcom/bcm2835/bcm2835_bsc.c @@ -1,5 +1,5 @@ /*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2001 Tsubai Masanari. * Copyright (c) 2012 Oleksandr Tymoshenko <gonzo@freebsd.org> @@ -30,8 +30,6 @@ * */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - /* * Driver for bcm2835 i2c-compatible two-wire bus, named 'BSC' on this SoC. * @@ -344,14 +342,15 @@ bcm_bsc_attach(device_t dev) bcm_bsc_reset(sc); BCM_BSC_UNLOCK(sc); - sc->sc_iicbus = device_add_child(dev, "iicbus", -1); + sc->sc_iicbus = device_add_child(dev, "iicbus", DEVICE_UNIT_ANY); if (sc->sc_iicbus == NULL) { bcm_bsc_detach(dev); return (ENXIO); } /* Probe and attach the iicbus when interrupts are available. */ - return (bus_delayed_attach_children(dev)); + bus_delayed_attach_children(dev); + return (0); } static int @@ -362,8 +361,6 @@ bcm_bsc_detach(device_t dev) bus_generic_detach(dev); sc = device_get_softc(dev); - if (sc->sc_iicbus != NULL) - device_delete_child(dev, sc->sc_iicbus); mtx_destroy(&sc->sc_mtx); if (sc->sc_intrhand) bus_teardown_intr(dev, sc->sc_irq_res, sc->sc_intrhand); diff --git a/sys/arm/broadcom/bcm2835/bcm2835_bscreg.h b/sys/arm/broadcom/bcm2835/bcm2835_bscreg.h index 4b9532053807..e993bec9e394 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_bscreg.h +++ b/sys/arm/broadcom/bcm2835/bcm2835_bscreg.h @@ -1,5 +1,5 @@ /*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2012 Oleksandr Tymoshenko <gonzo@freebsd.org> * Copyright (c) 2013 Luiz Otavio O Souza <loos@freebsd.org> @@ -25,8 +25,6 @@ * 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 _BCM2835_BSCREG_H_ diff --git a/sys/arm/broadcom/bcm2835/bcm2835_bscvar.h b/sys/arm/broadcom/bcm2835/bcm2835_bscvar.h index b57607ea597e..d859594eec33 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_bscvar.h +++ b/sys/arm/broadcom/bcm2835/bcm2835_bscvar.h @@ -1,5 +1,5 @@ /*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2012 Oleksandr Tymoshenko <gonzo@freebsd.org> * Copyright (c) 2013 Luiz Otavio O Souza <loos@freebsd.org> @@ -25,8 +25,6 @@ * 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 _BCM2835_BSCVAR_H diff --git a/sys/arm/broadcom/bcm2835/bcm2835_clkman.c b/sys/arm/broadcom/bcm2835/bcm2835_clkman.c index 40fb75a3b050..7061acbba820 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_clkman.c +++ b/sys/arm/broadcom/bcm2835/bcm2835_clkman.c @@ -1,5 +1,5 @@ /*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2017 Poul-Henning Kamp <phk@FreeBSD.org> * @@ -26,9 +26,6 @@ * */ -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - #include <sys/param.h> #include <sys/systm.h> #include <sys/bus.h> @@ -51,6 +48,7 @@ __FBSDID("$FreeBSD$"); #include <arm/broadcom/bcm2835/bcm2835_clkman.h> static struct ofw_compat_data compat_data[] = { + {"brcm,bcm2711-cprman", 1}, {"brcm,bcm2835-cprman", 1}, {"broadcom,bcm2835-cprman", 1}, {NULL, 0} @@ -114,7 +112,8 @@ bcm2835_clkman_attach(device_t dev) sc->sc_m_bst = rman_get_bustag(sc->sc_m_res); sc->sc_m_bsh = rman_get_bushandle(sc->sc_m_res); - return (bus_generic_attach(dev)); + bus_attach_children(dev); + return (0); } uint32_t diff --git a/sys/arm/broadcom/bcm2835/bcm2835_clkman.h b/sys/arm/broadcom/bcm2835/bcm2835_clkman.h index 488bb1d65504..89281ee5d76a 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_clkman.h +++ b/sys/arm/broadcom/bcm2835/bcm2835_clkman.h @@ -1,5 +1,5 @@ /*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2017 Poul-Henning Kamp <phk@FreeBSD.org> * @@ -23,8 +23,6 @@ * 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 _BCM2835_CLKMAN_H_ diff --git a/sys/arm/broadcom/bcm2835/bcm2835_cpufreq.c b/sys/arm/broadcom/bcm2835/bcm2835_cpufreq.c index 49a7dcff9b59..2bcf6ba8da1e 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_cpufreq.c +++ b/sys/arm/broadcom/bcm2835/bcm2835_cpufreq.c @@ -25,9 +25,6 @@ * */ -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - #include <sys/param.h> #include <sys/systm.h> #include <sys/bus.h> @@ -64,17 +61,10 @@ __FBSDID("$FreeBSD$"); #define HZ2MHZ(freq) ((freq) / (1000 * 1000)) #define MHZ2HZ(freq) ((freq) * (1000 * 1000)) -#ifdef SOC_BCM2835 -#define OFFSET2MVOLT(val) (1200 + ((val) * 25)) -#define MVOLT2OFFSET(val) (((val) - 1200) / 25) -#define DEFAULT_ARM_FREQUENCY 700 -#define DEFAULT_LOWEST_FREQ 300 -#else #define OFFSET2MVOLT(val) (((val) / 1000)) #define MVOLT2OFFSET(val) (((val) * 1000)) #define DEFAULT_ARM_FREQUENCY 600 #define DEFAULT_LOWEST_FREQ 600 -#endif #define DEFAULT_CORE_FREQUENCY 250 #define DEFAULT_SDRAM_FREQUENCY 400 #define TRANSITION_LATENCY 1000 @@ -1214,9 +1204,9 @@ bcm2835_cpufreq_identify(driver_t *driver, device_t parent) return; DPRINTF("driver=%p, parent=%p\n", driver, parent); - if (device_find_child(parent, "bcm2835_cpufreq", -1) != NULL) + if (device_find_child(parent, "bcm2835_cpufreq", DEVICE_UNIT_ANY) != NULL) return; - if (BUS_ADD_CHILD(parent, 0, "bcm2835_cpufreq", -1) == NULL) + if (BUS_ADD_CHILD(parent, 0, "bcm2835_cpufreq", DEVICE_UNIT_ANY) == NULL) device_printf(parent, "add child failed\n"); } @@ -1510,20 +1500,6 @@ bcm2835_cpufreq_make_freq_list(device_t dev, struct cf_setting *sets, if (min_freq > cpufreq_lowest_freq) min_freq = cpufreq_lowest_freq; -#ifdef SOC_BCM2835 - /* from freq to min_freq */ - for (idx = 0; idx < *count && freq >= min_freq; idx++) { - if (freq > sc->arm_min_freq) - volts = sc->max_voltage_core; - else - volts = sc->min_voltage_core; - sets[idx].freq = freq; - sets[idx].volts = volts; - sets[idx].lat = TRANSITION_LATENCY; - sets[idx].dev = dev; - freq -= MHZSTEP; - } -#else /* XXX RPi2 have only 900/600MHz */ idx = 0; volts = sc->min_voltage_core; @@ -1539,7 +1515,6 @@ bcm2835_cpufreq_make_freq_list(device_t dev, struct cf_setting *sets, sets[idx].dev = dev; idx++; } -#endif *count = idx; return (0); diff --git a/sys/arm/broadcom/bcm2835/bcm2835_dma.c b/sys/arm/broadcom/bcm2835/bcm2835_dma.c index 5f9ecb0b7981..3515b0315e56 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_dma.c +++ b/sys/arm/broadcom/bcm2835/bcm2835_dma.c @@ -1,5 +1,5 @@ /*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2013 Daisuke Aoyama <aoyama@peach.ne.jp> * Copyright (c) 2013 Oleksandr Tymoshenko <gonzo@bluezbox.com> @@ -27,9 +27,6 @@ * */ -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - #include <sys/param.h> #include <sys/systm.h> #include <sys/bus.h> @@ -328,6 +325,9 @@ bcm_dma_allocate(int req_ch) int ch = BCM_DMA_CH_INVALID; int i; + if (sc == NULL) + return (BCM_DMA_CH_INVALID); + if (req_ch >= BCM_DMA_CH_MAX) return (BCM_DMA_CH_INVALID); @@ -343,13 +343,10 @@ bcm_dma_allocate(int req_ch) break; } } - } - else { - if (sc->sc_dma_ch[req_ch].flags & BCM_DMA_CH_FREE) { - ch = req_ch; - sc->sc_dma_ch[ch].flags &= ~BCM_DMA_CH_FREE; - sc->sc_dma_ch[ch].flags |= BCM_DMA_CH_USED; - } + } else if (sc->sc_dma_ch[req_ch].flags & BCM_DMA_CH_FREE) { + ch = req_ch; + sc->sc_dma_ch[ch].flags &= ~BCM_DMA_CH_FREE; + sc->sc_dma_ch[ch].flags |= BCM_DMA_CH_USED; } mtx_unlock(&sc->sc_mtx); @@ -364,6 +361,9 @@ bcm_dma_free(int ch) { struct bcm_dma_softc *sc = bcm_dma_sc; + if (sc == NULL) + return (-1); + if (ch < 0 || ch >= BCM_DMA_CH_MAX) return (-1); @@ -392,6 +392,9 @@ bcm_dma_setup_intr(int ch, void (*func)(int, void *), void *arg) struct bcm_dma_softc *sc = bcm_dma_sc; struct bcm_dma_cb *cb; + if (sc == NULL) + return (-1); + if (ch < 0 || ch >= BCM_DMA_CH_MAX) return (-1); @@ -531,6 +534,9 @@ bcm_dma_reg_dump(int ch) int i; uint32_t reg; + if (sc == NULL) + return; + if (ch < 0 || ch >= BCM_DMA_CH_MAX) return; @@ -558,6 +564,9 @@ bcm_dma_start(int ch, vm_paddr_t src, vm_paddr_t dst, int len) struct bcm_dma_softc *sc = bcm_dma_sc; struct bcm_dma_cb *cb; + if (sc == NULL) + return (-1); + if (ch < 0 || ch >= BCM_DMA_CH_MAX) return (-1); @@ -597,6 +606,9 @@ bcm_dma_length(int ch) struct bcm_dma_softc *sc = bcm_dma_sc; struct bcm_dma_cb *cb; + if (sc == NULL) + return (0); + if (ch < 0 || ch >= BCM_DMA_CH_MAX) return (0); @@ -764,5 +776,6 @@ static driver_t bcm_dma_driver = { sizeof(struct bcm_dma_softc), }; -DRIVER_MODULE(bcm_dma, simplebus, bcm_dma_driver, 0, 0); +EARLY_DRIVER_MODULE(bcm_dma, simplebus, bcm_dma_driver, 0, 0, + BUS_PASS_SUPPORTDEV + BUS_PASS_ORDER_MIDDLE); MODULE_VERSION(bcm_dma, 1); diff --git a/sys/arm/broadcom/bcm2835/bcm2835_dma.h b/sys/arm/broadcom/bcm2835/bcm2835_dma.h index 44c2cd34e804..78a1d0e7625b 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_dma.h +++ b/sys/arm/broadcom/bcm2835/bcm2835_dma.h @@ -1,5 +1,5 @@ /*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2013 Daisuke Aoyama <aoyama@peach.ne.jp> * Copyright (c) 2013 Oleksandr Tymoshenko <gonzo@bluezbox.com> @@ -24,8 +24,6 @@ * 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 _BCM2835_DMA_H_ diff --git a/sys/arm/broadcom/bcm2835/bcm2835_fb.c b/sys/arm/broadcom/bcm2835/bcm2835_fb.c index 7f70cd280efa..fd198afa18b4 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_fb.c +++ b/sys/arm/broadcom/bcm2835/bcm2835_fb.c @@ -1,5 +1,5 @@ /*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2012 Oleksandr Tymoshenko <gonzo@freebsd.org> * All rights reserved. @@ -26,8 +26,6 @@ * SUCH DAMAGE. * */ -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); #include <sys/param.h> #include <sys/systm.h> diff --git a/sys/arm/broadcom/bcm2835/bcm2835_fbd.c b/sys/arm/broadcom/bcm2835/bcm2835_fbd.c index 2b0b89d36342..50e8689e9d83 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_fbd.c +++ b/sys/arm/broadcom/bcm2835/bcm2835_fbd.c @@ -1,5 +1,5 @@ /*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2012 Oleksandr Tymoshenko <gonzo@freebsd.org> * Copyright (c) 2012, 2013 The FreeBSD Foundation @@ -30,8 +30,6 @@ * SUCH DAMAGE. * */ -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); #include <sys/param.h> #include <sys/systm.h> @@ -152,12 +150,12 @@ bcm_fb_setup_fbd(struct bcmsc_softc *sc) fbd = device_add_child(sc->dev, "fbd", device_get_unit(sc->dev)); if (fbd == NULL) { device_printf(sc->dev, "Failed to add fbd child\n"); - pmap_unmapdev(sc->info.fb_vbase, sc->info.fb_size); + pmap_unmapdev((void *)sc->info.fb_vbase, sc->info.fb_size); return (ENXIO); } else if (device_probe_and_attach(fbd) != 0) { device_printf(sc->dev, "Failed to attach fbd device\n"); device_delete_child(sc->dev, fbd); - pmap_unmapdev(sc->info.fb_vbase, sc->info.fb_size); + pmap_unmapdev((void *)sc->info.fb_vbase, sc->info.fb_size); return (ENXIO); } diff --git a/sys/arm/broadcom/bcm2835/bcm2835_firmware.c b/sys/arm/broadcom/bcm2835/bcm2835_firmware.c index 5137511619fc..c1d23c0222cd 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_firmware.c +++ b/sys/arm/broadcom/bcm2835/bcm2835_firmware.c @@ -28,9 +28,6 @@ * SUCH DAMAGE. */ -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - #include <sys/param.h> #include <sys/systm.h> #include <sys/bus.h> diff --git a/sys/arm/broadcom/bcm2835/bcm2835_firmware.h b/sys/arm/broadcom/bcm2835/bcm2835_firmware.h index 666e450914f8..8c77dac7d710 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_firmware.h +++ b/sys/arm/broadcom/bcm2835/bcm2835_firmware.h @@ -26,8 +26,6 @@ * 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 _BCM2835_FIRMWARE_H_ diff --git a/sys/arm/broadcom/bcm2835/bcm2835_ft5406.c b/sys/arm/broadcom/bcm2835/bcm2835_ft5406.c index d3a75b765561..bb8833574471 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_ft5406.c +++ b/sys/arm/broadcom/bcm2835/bcm2835_ft5406.c @@ -25,9 +25,6 @@ * */ -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - #include <sys/param.h> #include <sys/systm.h> #include <sys/bus.h> diff --git a/sys/arm/broadcom/bcm2835/bcm2835_gpio.c b/sys/arm/broadcom/bcm2835/bcm2835_gpio.c index 56605ca08c62..93ee5d7c8bd3 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_gpio.c +++ b/sys/arm/broadcom/bcm2835/bcm2835_gpio.c @@ -1,5 +1,5 @@ /*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2012 Oleksandr Tymoshenko <gonzo@FreeBSD.org> * Copyright (c) 2012-2015 Luiz Otavio O Souza <loos@FreeBSD.org> @@ -28,8 +28,6 @@ * */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - #include "opt_platform.h" #include <sys/param.h> @@ -64,8 +62,10 @@ __FBSDID("$FreeBSD$"); #endif #define BCM_GPIO_IRQS 4 -#define BCM_GPIO_PINS 54 #define BCM_GPIO_PINS_PER_BANK 32 +#define BCM2835_GPIO_PINS 54 +#define BCM2711_GPIO_PINS 58 +#define BCM_GPIO_PINS BCM2711_GPIO_PINS #define BCM_GPIO_DEFAULT_CAPS (GPIO_PIN_INPUT | GPIO_PIN_OUTPUT | \ GPIO_PIN_PULLUP | GPIO_PIN_PULLDOWN | GPIO_INTR_LEVEL_LOW | \ @@ -85,6 +85,10 @@ __FBSDID("$FreeBSD$"); #define BCM2835_PUD_DOWN 1 #define BCM2835_PUD_UP 2 +#define BCM2711_PUD_OFF 0 +#define BCM2711_PUD_DOWN 2 +#define BCM2711_PUD_UP 1 + static struct resource_spec bcm_gpio_res_spec[] = { { SYS_RES_MEMORY, 0, RF_ACTIVE }, { SYS_RES_IRQ, 0, RF_ACTIVE }, /* bank 0 interrupt */ @@ -112,6 +116,8 @@ struct bcm_gpio_softc { bus_space_tag_t sc_bst; bus_space_handle_t sc_bsh; void * sc_intrhand[BCM_GPIO_IRQS]; + bool sc_is2711; + u_int sc_maxpins; int sc_gpio_npins; int sc_ro_npins; int sc_ro_pins[BCM_GPIO_PINS]; @@ -151,8 +157,13 @@ enum bcm_gpio_pud { #define BCM_GPIO_GPLEN(_bank) (0x70 + _bank * 4) /* Low Level irq */ #define BCM_GPIO_GPAREN(_bank) (0x7c + _bank * 4) /* Async Rising Edge */ #define BCM_GPIO_GPAFEN(_bank) (0x88 + _bank * 4) /* Async Falling Egde */ -#define BCM_GPIO_GPPUD(_bank) (0x94) /* Pin Pull up/down */ -#define BCM_GPIO_GPPUDCLK(_bank) (0x98 + _bank * 4) /* Pin Pull up clock */ +#define BCM2835_GPIO_GPPUD(_bank) (0x94) /* Pin Pull up/down */ +#define BCM2835_GPIO_GPPUDCLK(_bank) (0x98 + _bank * 4) /* Pin Pull up clock */ + +#define BCM2711_GPIO_GPPUD(x) (0x0e4 + (x) * sizeof(uint32_t)) /* Pin Pull up/down */ +#define BCM2711_GPIO_MASK (0x3) +#define BCM2711_GPIO_SHIFT(n) (((n) % 16) * 2) +#define BCM2711_GPIO_REGID(n) ((n) / 16) static struct ofw_compat_data compat_data[] = { {"broadcom,bcm2835-gpio", 1}, @@ -289,16 +300,39 @@ bcm_gpio_set_function(struct bcm_gpio_softc *sc, uint32_t pin, uint32_t f) static void bcm_gpio_set_pud(struct bcm_gpio_softc *sc, uint32_t pin, uint32_t state) { - uint32_t bank; - /* Must be called with lock held. */ BCM_GPIO_LOCK_ASSERT(sc); - bank = BCM_GPIO_BANK(pin); - BCM_GPIO_WRITE(sc, BCM_GPIO_GPPUD(0), state); - BCM_GPIO_WRITE(sc, BCM_GPIO_GPPUDCLK(bank), BCM_GPIO_MASK(pin)); - BCM_GPIO_WRITE(sc, BCM_GPIO_GPPUD(0), 0); - BCM_GPIO_WRITE(sc, BCM_GPIO_GPPUDCLK(bank), 0); + if (sc->sc_is2711) { /* BCM2711 */ + u_int regid = BCM2711_GPIO_REGID(pin); + u_int shift = BCM2711_GPIO_SHIFT(pin); + uint32_t reg; + + switch (state) { + case BCM2835_PUD_OFF: + state = BCM2711_PUD_OFF; + break; + case BCM2835_PUD_DOWN: + state = BCM2711_PUD_DOWN; + break; + case BCM2835_PUD_UP: + state = BCM2711_PUD_UP; + break; + } + + reg = BCM_GPIO_READ(sc, BCM2711_GPIO_GPPUD(regid)); + reg &= ~(BCM2711_GPIO_MASK << shift); + reg |= (state << shift); + BCM_GPIO_WRITE(sc, BCM2711_GPIO_GPPUD(regid), reg); + } else { /* BCM2835 */ + uint32_t bank; + + bank = BCM_GPIO_BANK(pin); + BCM_GPIO_WRITE(sc, BCM2835_GPIO_GPPUD(0), state); + BCM_GPIO_WRITE(sc, BCM2835_GPIO_GPPUDCLK(bank), BCM_GPIO_MASK(pin)); + BCM_GPIO_WRITE(sc, BCM2835_GPIO_GPPUD(0), 0); + BCM_GPIO_WRITE(sc, BCM2835_GPIO_GPPUDCLK(bank), 0); + } } static void @@ -376,8 +410,10 @@ bcm_gpio_get_bus(device_t dev) static int bcm_gpio_pin_max(device_t dev, int *maxpin) { + struct bcm_gpio_softc *sc; - *maxpin = BCM_GPIO_PINS - 1; + sc = device_get_softc(dev); + *maxpin = sc->sc_maxpins - 1; return (0); } @@ -770,16 +806,19 @@ bcm_gpio_attach(device_t dev) } sc->sc_bst = rman_get_bustag(sc->sc_res[0]); sc->sc_bsh = rman_get_bushandle(sc->sc_res[0]); - /* Setup the GPIO interrupt handler. */ - if (bcm_gpio_intr_attach(dev)) { - device_printf(dev, "unable to setup the gpio irq handler\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; + /* Guess I'm BCM2711 or not. */ + sc->sc_is2711 = ofw_bus_node_is_compatible(gpio, "brcm,bcm2711-gpio"); + sc->sc_maxpins = sc->sc_is2711 ? BCM2711_GPIO_PINS : BCM2835_GPIO_PINS; + /* Setup the GPIO interrupt handler. */ + if (bcm_gpio_intr_attach(dev)) { + device_printf(dev, "unable to setup the gpio irq handler\n"); + goto fail; + } /* * Find the read-only pins. These are pins we never touch or bad * things could happen. @@ -787,7 +826,7 @@ bcm_gpio_attach(device_t dev) if (bcm_gpio_get_reserved_pins(sc) == -1) goto fail; /* Initialize the software controlled pins. */ - for (i = 0, j = 0; j < BCM_GPIO_PINS; j++) { + for (i = 0, j = 0; j < sc->sc_maxpins; j++) { snprintf(sc->sc_gpio_pins[i].gp_name, GPIOMAXNAME, "pin %d", j); func = bcm_gpio_get_function(sc, j); @@ -798,13 +837,14 @@ bcm_gpio_attach(device_t dev) } sc->sc_gpio_npins = i; bcm_gpio_sysctl_init(sc); - sc->sc_busdev = gpiobus_attach_bus(dev); - if (sc->sc_busdev == NULL) - goto fail; fdt_pinctrl_register(dev, "brcm,pins"); fdt_pinctrl_configure_tree(dev); + sc->sc_busdev = gpiobus_add_bus(dev); + if (sc->sc_busdev == NULL) + goto fail; + bus_attach_children(dev); return (0); fail: @@ -956,7 +996,7 @@ bcm_gpio_pic_attach(struct bcm_gpio_softc *sc) const char *name; name = device_get_nameunit(sc->sc_dev); - for (irq = 0; irq < BCM_GPIO_PINS; irq++) { + for (irq = 0; irq < sc->sc_maxpins; irq++) { sc->sc_isrcs[irq].bgi_irq = irq; sc->sc_isrcs[irq].bgi_mask = BCM_GPIO_MASK(irq); sc->sc_isrcs[irq].bgi_mode = GPIO_INTR_CONFORM; @@ -1044,7 +1084,7 @@ bcm_gpio_pic_map_fdt(struct bcm_gpio_softc *sc, struct intr_map_data_fdt *daf, return (EINVAL); irq = daf->cells[0]; - if (irq >= BCM_GPIO_PINS || bcm_gpio_pin_is_ro(sc, irq)) + if (irq >= sc->sc_maxpins || bcm_gpio_pin_is_ro(sc, irq)) return (EINVAL); /* Only reasonable modes are supported. */ @@ -1075,7 +1115,7 @@ bcm_gpio_pic_map_gpio(struct bcm_gpio_softc *sc, struct intr_map_data_gpio *dag, uint32_t mode; irq = dag->gpio_pin_num; - if (irq >= BCM_GPIO_PINS || bcm_gpio_pin_is_ro(sc, irq)) + if (irq >= sc->sc_maxpins || bcm_gpio_pin_is_ro(sc, irq)) return (EINVAL); mode = dag->gpio_intr_mode; diff --git a/sys/arm/broadcom/bcm2835/bcm2835_intr.c b/sys/arm/broadcom/bcm2835/bcm2835_intr.c index af662ae3ba51..65ada57c0b60 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_intr.c +++ b/sys/arm/broadcom/bcm2835/bcm2835_intr.c @@ -1,5 +1,5 @@ /*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2012 Damjan Marion <dmarion@Freebsd.org> * All rights reserved. @@ -29,8 +29,6 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - #include "opt_platform.h" #include <sys/param.h> @@ -407,7 +405,8 @@ bcm_intc_attach(device_t dev) sc->intc_irq_res = bus_alloc_resource_any(dev, SYS_RES_IRQ, &rid, RF_ACTIVE); if (sc->intc_irq_res == NULL) { - if (intr_pic_claim_root(dev, xref, bcm2835_intc_intr, sc, 0) != 0) { + if (intr_pic_claim_root(dev, xref, bcm2835_intc_intr, sc, INTR_ROOT_IRQ) + != 0) { /* XXX clean up */ device_printf(dev, "could not set PIC as a root\n"); return (ENXIO); diff --git a/sys/arm/broadcom/bcm2835/bcm2835_machdep.c b/sys/arm/broadcom/bcm2835/bcm2835_machdep.c index 683fb4986a41..be6b8971437d 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_machdep.c +++ b/sys/arm/broadcom/bcm2835/bcm2835_machdep.c @@ -41,9 +41,6 @@ #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> @@ -64,9 +61,6 @@ __FBSDID("$FreeBSD$"); #include "platform_if.h" -#ifdef SOC_BCM2835 -static platform_devmap_init_t bcm2835_devmap_init; -#endif #ifdef SOC_BCM2836 static platform_devmap_init_t bcm2836_devmap_init; #endif @@ -94,20 +88,6 @@ bcm2835_late_init(platform_t plat) } } -#ifdef SOC_BCM2835 -/* - * Set up static device mappings. - * All on-chip peripherals exist in a 16MB range starting at 0x20000000. - * Map the entire range using 1MB section mappings. - */ -static int -bcm2835_devmap_init(platform_t plat) -{ - - devmap_add_entry(0x20000000, 0x01000000); - return (0); -} -#endif #ifdef SOC_BCM2836 static int @@ -125,17 +105,6 @@ bcm2835_cpu_reset(platform_t plat) bcmwd_watchdog_reset(); } -#ifdef SOC_BCM2835 -static platform_method_t bcm2835_methods[] = { - PLATFORMMETHOD(platform_devmap_init, bcm2835_devmap_init), - PLATFORMMETHOD(platform_late_init, bcm2835_late_init), - PLATFORMMETHOD(platform_cpu_reset, bcm2835_cpu_reset), - - PLATFORMMETHOD_END, -}; -FDT_PLATFORM_DEF2(bcm2835, bcm2835_legacy, "bcm2835 (legacy)", 0, "raspberrypi,model-b", 100); -FDT_PLATFORM_DEF2(bcm2835, bcm2835, "bcm2835", 0, "brcm,bcm2835", 100); -#endif #if defined(SOC_BCM2836) || defined(SOC_BRCM_BCM2837) static platform_method_t bcm2836_methods[] = { diff --git a/sys/arm/broadcom/bcm2835/bcm2835_mbox.c b/sys/arm/broadcom/bcm2835/bcm2835_mbox.c index cd1420e8d344..a3a3744ce43c 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_mbox.c +++ b/sys/arm/broadcom/bcm2835/bcm2835_mbox.c @@ -1,5 +1,5 @@ /*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2012 Oleksandr Tymoshenko <gonzo@freebsd.org> * All rights reserved. @@ -26,9 +26,6 @@ * SUCH DAMAGE. */ -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - #include <sys/param.h> #include <sys/systm.h> #include <sys/bus.h> diff --git a/sys/arm/broadcom/bcm2835/bcm2835_mbox.h b/sys/arm/broadcom/bcm2835/bcm2835_mbox.h index 3cd8699a704b..a907ff48b0a7 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_mbox.h +++ b/sys/arm/broadcom/bcm2835/bcm2835_mbox.h @@ -1,5 +1,5 @@ /*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2012 Oleksandr Tymoshenko <gonzo@freebsd.org> * All rights reserved. @@ -24,8 +24,6 @@ * 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 _BCM2835_MBOX_H_ diff --git a/sys/arm/broadcom/bcm2835/bcm2835_mbox_prop.h b/sys/arm/broadcom/bcm2835/bcm2835_mbox_prop.h index df8c96d68f25..57130258a044 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_mbox_prop.h +++ b/sys/arm/broadcom/bcm2835/bcm2835_mbox_prop.h @@ -22,14 +22,11 @@ * 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 _BCM2835_MBOX_PROP_H_ #define _BCM2835_MBOX_PROP_H_ -#include <sys/cdefs.h> #include <sys/types.h> /* diff --git a/sys/arm/broadcom/bcm2835/bcm2835_pwm.c b/sys/arm/broadcom/bcm2835/bcm2835_pwm.c index ca472d1e3f3a..ad794a6d20ed 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_pwm.c +++ b/sys/arm/broadcom/bcm2835/bcm2835_pwm.c @@ -1,5 +1,5 @@ /*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2017 Poul-Henning Kamp <phk@FreeBSD.org> * All rights reserved. @@ -27,9 +27,6 @@ * */ -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - #include <sys/param.h> #include <sys/systm.h> #include <sys/bus.h> @@ -463,7 +460,8 @@ bcm_pwm_attach(device_t dev) sc->period2 = 10000; /* 12.5 khz */ sc->ratio2 = 2500; /* 25% */ - return (bus_generic_attach(dev)); + bus_attach_children(dev); + return (0); } static int diff --git a/sys/arm/broadcom/bcm2835/bcm2835_rng.c b/sys/arm/broadcom/bcm2835/bcm2835_rng.c index 5067120c80fa..bc13bdba2238 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_rng.c +++ b/sys/arm/broadcom/bcm2835/bcm2835_rng.c @@ -24,9 +24,6 @@ * SUCH DAMAGE. */ -#include <sys/cdefs.h> - -__FBSDID("$FreeBSD$"); #include <sys/param.h> #include <sys/kernel.h> diff --git a/sys/arm/broadcom/bcm2835/bcm2835_sdhci.c b/sys/arm/broadcom/bcm2835/bcm2835_sdhci.c index 0e9be2205000..e0c4327d8e05 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_sdhci.c +++ b/sys/arm/broadcom/bcm2835/bcm2835_sdhci.c @@ -1,5 +1,5 @@ /*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2012 Oleksandr Tymoshenko <gonzo@freebsd.org> * All rights reserved. @@ -26,8 +26,6 @@ * SUCH DAMAGE. * */ -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); #include <sys/param.h> #include <sys/systm.h> @@ -355,8 +353,8 @@ bcm_sdhci_attach(device_t dev) sc->sc_sdhci_buffer_phys = rman_get_start(sc->sc_mem_res) + SDHCI_BUFFER; - bus_generic_probe(dev); - bus_generic_attach(dev); + bus_identify_children(dev); + bus_attach_children(dev); sdhci_start_slot(&sc->sc_slot); diff --git a/sys/arm/broadcom/bcm2835/bcm2835_sdhost.c b/sys/arm/broadcom/bcm2835/bcm2835_sdhost.c index a3bfc206c0d2..2fe641ebe390 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_sdhost.c +++ b/sys/arm/broadcom/bcm2835/bcm2835_sdhost.c @@ -1,5 +1,5 @@ /*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2018 Klaus P. Ohrhallinger <k@7he.at> * All rights reserved. @@ -31,8 +31,6 @@ * */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - /* * pin 48-53 - card slot * pin 34-39 - radio module @@ -474,8 +472,8 @@ bcm_sdhost_attach(device_t dev) sdhci_init_slot(dev, &sc->sc_slot, 0); - bus_generic_probe(dev); - bus_generic_attach(dev); + bus_identify_children(dev); + bus_attach_children(dev); sdhci_start_slot(&sc->sc_slot); diff --git a/sys/arm/broadcom/bcm2835/bcm2835_spi.c b/sys/arm/broadcom/bcm2835/bcm2835_spi.c index b9d25d6c1b48..a1a77d9fabb0 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_spi.c +++ b/sys/arm/broadcom/bcm2835/bcm2835_spi.c @@ -1,5 +1,5 @@ /*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2012 Oleksandr Tymoshenko <gonzo@freebsd.org> * Copyright (c) 2013 Luiz Otavio O Souza <loos@freebsd.org> @@ -27,8 +27,6 @@ * SUCH DAMAGE. * */ -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); #include <sys/param.h> #include <sys/systm.h> @@ -300,9 +298,10 @@ bcm_spi_attach(device_t dev) bcm_spi_printr(dev); #endif - device_add_child(dev, "spibus", -1); + device_add_child(dev, "spibus", DEVICE_UNIT_ANY); + bus_attach_children(dev); - return (bus_generic_attach(dev)); + return (0); } static int @@ -390,8 +389,10 @@ bcm_spi_intr(void *arg) /* Check for end of transfer. */ if (sc->sc_written == sc->sc_len && sc->sc_read == sc->sc_len) { /* Disable interrupts and the SPI engine. */ - bcm_spi_modifyreg(sc, SPI_CS, - SPI_CS_TA | SPI_CS_INTR | SPI_CS_INTD, 0); + if ((sc->sc_flags & BCM_SPI_KEEP_CS) == 0) { + bcm_spi_modifyreg(sc, SPI_CS, + SPI_CS_TA | SPI_CS_INTR | SPI_CS_INTD, 0); + } wakeup(sc->sc_dev); } @@ -440,16 +441,23 @@ bcm_spi_transfer(device_t dev, device_t child, struct spi_command *cmd) /* If the controller is in use wait until it is available. */ BCM_SPI_LOCK(sc); - while (sc->sc_flags & BCM_SPI_BUSY) - mtx_sleep(dev, &sc->sc_mtx, 0, "bcm_spi", 0); + if (sc->sc_thread != curthread) + while (sc->sc_flags & BCM_SPI_BUSY) + mtx_sleep(dev, &sc->sc_mtx, 0, "bcm_spi", 0); /* Now we have control over SPI controller. */ sc->sc_flags = BCM_SPI_BUSY; + if ((cmd->flags & SPI_FLAG_KEEP_CS) != 0) + sc->sc_flags |= BCM_SPI_KEEP_CS; + /* Clear the FIFO. */ - bcm_spi_modifyreg(sc, SPI_CS, - SPI_CS_CLEAR_RXFIFO | SPI_CS_CLEAR_TXFIFO, - SPI_CS_CLEAR_RXFIFO | SPI_CS_CLEAR_TXFIFO); + if (sc->sc_thread != curthread) + bcm_spi_modifyreg(sc, SPI_CS, + SPI_CS_CLEAR_RXFIFO | SPI_CS_CLEAR_TXFIFO, + SPI_CS_CLEAR_RXFIFO | SPI_CS_CLEAR_TXFIFO); + + sc->sc_thread = curthread; /* Save a pointer to the SPI command. */ sc->sc_cmd = cmd; @@ -519,11 +527,15 @@ bcm_spi_transfer(device_t dev, device_t child, struct spi_command *cmd) err = mtx_sleep(dev, &sc->sc_mtx, 0, "bcm_spi", hz * 2); /* Make sure the SPI engine and interrupts are disabled. */ - bcm_spi_modifyreg(sc, SPI_CS, SPI_CS_TA | SPI_CS_INTR | SPI_CS_INTD, 0); + if (!(cmd->flags & SPI_FLAG_KEEP_CS)) { + bcm_spi_modifyreg(sc, + SPI_CS, SPI_CS_TA | SPI_CS_INTR | SPI_CS_INTD, 0); + sc->sc_thread = 0; + } - /* Release the controller and wakeup the next thread waiting for it. */ - sc->sc_flags = 0; wakeup_one(dev); + sc->sc_flags &= ~BCM_SPI_BUSY; + /* Release the controller and wakeup the next thread waiting for it. */ BCM_SPI_UNLOCK(sc); /* diff --git a/sys/arm/broadcom/bcm2835/bcm2835_spireg.h b/sys/arm/broadcom/bcm2835/bcm2835_spireg.h index a658f16c92b9..5806fee84020 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_spireg.h +++ b/sys/arm/broadcom/bcm2835/bcm2835_spireg.h @@ -1,5 +1,5 @@ /*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2012 Oleksandr Tymoshenko <gonzo@freebsd.org> * Copyright (c) 2013 Luiz Otavio O Souza <loos@freebsd.org> @@ -25,8 +25,6 @@ * 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 _BCM2835_SPIREG_H_ diff --git a/sys/arm/broadcom/bcm2835/bcm2835_spivar.h b/sys/arm/broadcom/bcm2835/bcm2835_spivar.h index 75a17a449cb5..85b13626a026 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_spivar.h +++ b/sys/arm/broadcom/bcm2835/bcm2835_spivar.h @@ -1,5 +1,5 @@ /*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2012 Oleksandr Tymoshenko <gonzo@freebsd.org> * Copyright (c) 2013 Luiz Otavio O Souza <loos@freebsd.org> @@ -25,8 +25,6 @@ * 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 _BCM2835_SPIVAR_H_ @@ -38,6 +36,7 @@ struct bcm_spi_softc { struct resource * sc_mem_res; struct resource * sc_irq_res; struct spi_command *sc_cmd; + struct thread *sc_thread; bus_space_tag_t sc_bst; bus_space_handle_t sc_bsh; uint32_t sc_len; @@ -48,6 +47,7 @@ struct bcm_spi_softc { }; #define BCM_SPI_BUSY 0x1 +#define BCM_SPI_KEEP_CS 0x2 #define BCM_SPI_WRITE(_sc, _off, _val) \ bus_space_write_4(_sc->sc_bst, _sc->sc_bsh, _off, _val) diff --git a/sys/arm/broadcom/bcm2835/bcm2835_systimer.c b/sys/arm/broadcom/bcm2835/bcm2835_systimer.c deleted file mode 100644 index 64b450eda221..000000000000 --- a/sys/arm/broadcom/bcm2835/bcm2835_systimer.c +++ /dev/null @@ -1,312 +0,0 @@ -/* - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD - * - * Copyright (c) 2012 Oleksandr Tymoshenko <gonzo@freebsd.org> - * Copyright (c) 2012 Damjan Marion <dmarion@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/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 <machine/machdep.h> - -#include <dev/ofw/openfirm.h> -#include <dev/ofw/ofw_bus.h> -#include <dev/ofw/ofw_bus_subr.h> - -#include <machine/bus.h> - -#define BCM2835_NUM_TIMERS 4 - -#define DEFAULT_TIMER 3 -#define DEFAULT_TIMER_NAME "BCM2835-3" -#define DEFAULT_FREQUENCY 1000000 -#define MIN_PERIOD 5LLU - -#define SYSTIMER_CS 0x00 -#define SYSTIMER_CLO 0x04 -#define SYSTIMER_CHI 0x08 -#define SYSTIMER_C0 0x0C -#define SYSTIMER_C1 0x10 -#define SYSTIMER_C2 0x14 -#define SYSTIMER_C3 0x18 - -struct systimer { - int index; - bool enabled; - struct eventtimer et; -}; - -struct bcm_systimer_softc { - struct resource* mem_res; - struct resource* irq_res[BCM2835_NUM_TIMERS]; - void* intr_hl[BCM2835_NUM_TIMERS]; - uint32_t sysclk_freq; - bus_space_tag_t bst; - bus_space_handle_t bsh; - struct systimer st[BCM2835_NUM_TIMERS]; -}; - -static struct resource_spec bcm_systimer_irq_spec[] = { - { SYS_RES_IRQ, 0, RF_ACTIVE }, - { SYS_RES_IRQ, 1, RF_ACTIVE }, - { SYS_RES_IRQ, 2, RF_ACTIVE }, - { SYS_RES_IRQ, 3, RF_ACTIVE }, - { -1, 0, 0 } -}; - -static struct ofw_compat_data compat_data[] = { - {"broadcom,bcm2835-system-timer", 1}, - {"brcm,bcm2835-system-timer", 1}, - {NULL, 0} -}; - -static struct bcm_systimer_softc *bcm_systimer_sc = NULL; - -/* Read/Write macros for Timer used as timecounter */ -#define bcm_systimer_tc_read_4(reg) \ - bus_space_read_4(bcm_systimer_sc->bst, \ - bcm_systimer_sc->bsh, reg) - -#define bcm_systimer_tc_write_4(reg, val) \ - bus_space_write_4(bcm_systimer_sc->bst, \ - bcm_systimer_sc->bsh, reg, val) - -static unsigned bcm_systimer_tc_get_timecount(struct timecounter *); - -static delay_func bcm_systimer_delay; - -static struct timecounter bcm_systimer_tc = { - .tc_name = DEFAULT_TIMER_NAME, - .tc_get_timecount = bcm_systimer_tc_get_timecount, - .tc_poll_pps = NULL, - .tc_counter_mask = ~0u, - .tc_frequency = 0, - .tc_quality = 1000, -}; - -static unsigned -bcm_systimer_tc_get_timecount(struct timecounter *tc) -{ - if (bcm_systimer_sc == NULL) - return (0); - - return bcm_systimer_tc_read_4(SYSTIMER_CLO); -} - -static int -bcm_systimer_start(struct eventtimer *et, sbintime_t first, sbintime_t period) -{ - struct systimer *st = et->et_priv; - uint32_t clo, clo1; - uint32_t count; - register_t s; - - if (first != 0) { - count = ((uint32_t)et->et_frequency * first) >> 32; - - s = intr_disable(); - clo = bcm_systimer_tc_read_4(SYSTIMER_CLO); -restart: - clo += count; - /* - * Clear pending interrupts - */ - bcm_systimer_tc_write_4(SYSTIMER_CS, (1 << st->index)); - bcm_systimer_tc_write_4(SYSTIMER_C0 + st->index*4, clo); - clo1 = bcm_systimer_tc_read_4(SYSTIMER_CLO); - if ((int32_t)(clo1 - clo) >= 0) { - count *= 2; - clo = clo1; - goto restart; - } - st->enabled = 1; - intr_restore(s); - - return (0); - } - - return (EINVAL); -} - -static int -bcm_systimer_stop(struct eventtimer *et) -{ - struct systimer *st = et->et_priv; - st->enabled = 0; - - return (0); -} - -static int -bcm_systimer_intr(void *arg) -{ - struct systimer *st = (struct systimer *)arg; - uint32_t cs; - - cs = bcm_systimer_tc_read_4(SYSTIMER_CS); - if ((cs & (1 << st->index)) == 0) - return (FILTER_STRAY); - - /* ACK interrupt */ - bcm_systimer_tc_write_4(SYSTIMER_CS, (1 << st->index)); - if (st->enabled) { - if (st->et.et_active) { - st->et.et_event_cb(&st->et, st->et.et_arg); - } - } - - return (FILTER_HANDLED); -} - -static int -bcm_systimer_probe(device_t dev) -{ - - if (!ofw_bus_status_okay(dev)) - return (ENXIO); - - if (ofw_bus_search_compatible(dev, compat_data)->ocd_data == 0) - return (ENXIO); - - return (BUS_PROBE_DEFAULT); -} - -static int -bcm_systimer_attach(device_t dev) -{ - struct bcm_systimer_softc *sc = device_get_softc(dev); - int err; - int rid = 0; - - if (bcm_systimer_sc != NULL) - return (EINVAL); - - sc->mem_res = bus_alloc_resource_any(dev, SYS_RES_MEMORY, &rid, RF_ACTIVE); - if (sc->mem_res == NULL) { - device_printf(dev, "could not allocate memory resource\n"); - return (ENXIO); - } - - sc->bst = rman_get_bustag(sc->mem_res); - sc->bsh = rman_get_bushandle(sc->mem_res); - - /* Request the IRQ resources */ - err = bus_alloc_resources(dev, bcm_systimer_irq_spec, - sc->irq_res); - if (err) { - device_printf(dev, "Error: could not allocate irq resources\n"); - return (ENXIO); - } - - /* TODO: get frequency from FDT */ - sc->sysclk_freq = DEFAULT_FREQUENCY; - - /* Setup and enable the timer */ - if (bus_setup_intr(dev, sc->irq_res[DEFAULT_TIMER], INTR_TYPE_CLK, - bcm_systimer_intr, NULL, &sc->st[DEFAULT_TIMER], - &sc->intr_hl[DEFAULT_TIMER]) != 0) { - bus_release_resources(dev, bcm_systimer_irq_spec, - sc->irq_res); - device_printf(dev, "Unable to setup the clock irq handler.\n"); - return (ENXIO); - } - - sc->st[DEFAULT_TIMER].index = DEFAULT_TIMER; - sc->st[DEFAULT_TIMER].enabled = 0; - sc->st[DEFAULT_TIMER].et.et_name = DEFAULT_TIMER_NAME; - sc->st[DEFAULT_TIMER].et.et_flags = ET_FLAGS_ONESHOT; - sc->st[DEFAULT_TIMER].et.et_quality = 1000; - sc->st[DEFAULT_TIMER].et.et_frequency = sc->sysclk_freq; - sc->st[DEFAULT_TIMER].et.et_min_period = - (MIN_PERIOD << 32) / sc->st[DEFAULT_TIMER].et.et_frequency + 1; - sc->st[DEFAULT_TIMER].et.et_max_period = - (0x7ffffffeLLU << 32) / sc->st[DEFAULT_TIMER].et.et_frequency; - sc->st[DEFAULT_TIMER].et.et_start = bcm_systimer_start; - sc->st[DEFAULT_TIMER].et.et_stop = bcm_systimer_stop; - sc->st[DEFAULT_TIMER].et.et_priv = &sc->st[DEFAULT_TIMER]; - et_register(&sc->st[DEFAULT_TIMER].et); - - bcm_systimer_sc = sc; - - if (device_get_unit(dev) == 0) - arm_set_delay(bcm_systimer_delay, sc); - - bcm_systimer_tc.tc_frequency = DEFAULT_FREQUENCY; - tc_init(&bcm_systimer_tc); - - return (0); -} - -static device_method_t bcm_systimer_methods[] = { - DEVMETHOD(device_probe, bcm_systimer_probe), - DEVMETHOD(device_attach, bcm_systimer_attach), - { 0, 0 } -}; - -static driver_t bcm_systimer_driver = { - "systimer", - bcm_systimer_methods, - sizeof(struct bcm_systimer_softc), -}; - -DRIVER_MODULE(bcm_systimer, simplebus, bcm_systimer_driver, 0, 0); - -static void -bcm_systimer_delay(int usec, void *arg) -{ - int32_t counts; - uint32_t first, last; - - /* Get the number of times to count */ - counts = usec * (bcm_systimer_tc.tc_frequency / 1000000) + 1; - - first = bcm_systimer_tc_read_4(SYSTIMER_CLO); - - while (counts > 0) { - last = bcm_systimer_tc_read_4(SYSTIMER_CLO); - if (last == first) - continue; - if (last>first) { - counts -= (int32_t)(last - first); - } else { - counts -= (int32_t)((0xFFFFFFFF - first) + last); - } - first = last; - } -} diff --git a/sys/arm/broadcom/bcm2835/bcm2835_vcbus.c b/sys/arm/broadcom/bcm2835/bcm2835_vcbus.c index 7e5033f032c4..88b54467e0c8 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_vcbus.c +++ b/sys/arm/broadcom/bcm2835/bcm2835_vcbus.c @@ -1,5 +1,5 @@ /*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2019 Kyle Evans <kevans@FreeBSD.org> * @@ -23,13 +23,9 @@ * 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$ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - /* * This file contains facilities for runtime determination of address space * mappings for use in DMA/mailbox interactions. This is only used for the diff --git a/sys/arm/broadcom/bcm2835/bcm2835_vcbus.h b/sys/arm/broadcom/bcm2835/bcm2835_vcbus.h index 77b408311e61..54180d644725 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_vcbus.h +++ b/sys/arm/broadcom/bcm2835/bcm2835_vcbus.h @@ -1,5 +1,5 @@ /*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2012 Oleksandr Tymoshenko <gonzo@freebsd.org> * All rights reserved. @@ -24,8 +24,6 @@ * 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$ */ /* diff --git a/sys/arm/broadcom/bcm2835/bcm2835_vcio.c b/sys/arm/broadcom/bcm2835/bcm2835_vcio.c index 40fb4e0ad8ee..d581c541ff73 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_vcio.c +++ b/sys/arm/broadcom/bcm2835/bcm2835_vcio.c @@ -22,8 +22,6 @@ * 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> diff --git a/sys/arm/broadcom/bcm2835/bcm2835_wdog.c b/sys/arm/broadcom/bcm2835/bcm2835_wdog.c index bfc934ccd5ec..80cf22548791 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_wdog.c +++ b/sys/arm/broadcom/bcm2835/bcm2835_wdog.c @@ -1,5 +1,5 @@ /*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2012 Alexander Rybalko <ray@freebsd.org> * All rights reserved. @@ -25,8 +25,6 @@ * 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/bus.h> diff --git a/sys/arm/broadcom/bcm2835/bcm2835_wdog.h b/sys/arm/broadcom/bcm2835/bcm2835_wdog.h index 214991820fdc..5dba6c0e6e4e 100644 --- a/sys/arm/broadcom/bcm2835/bcm2835_wdog.h +++ b/sys/arm/broadcom/bcm2835/bcm2835_wdog.h @@ -1,5 +1,5 @@ /*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2012 Alexander Rybalko <ray@freebsd.org> * All rights reserved. @@ -25,7 +25,6 @@ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * - * $FreeBSD$ */ #ifndef _BCM2835_WDOG_H_ #define _BCM2835_WDOG_H_ diff --git a/sys/arm/broadcom/bcm2835/bcm2836.c b/sys/arm/broadcom/bcm2835/bcm2836.c index 50759cd45b6f..7ed9dedaa77e 100644 --- a/sys/arm/broadcom/bcm2835/bcm2836.c +++ b/sys/arm/broadcom/bcm2835/bcm2836.c @@ -27,8 +27,6 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - #include "opt_platform.h" #include <sys/param.h> @@ -369,7 +367,7 @@ bcm_lintc_ipi_dispatch(struct bcm_lintc_softc *sc, u_int cpu, #else dsb(); #endif - intr_ipi_dispatch(ipi, tf); + intr_ipi_dispatch(ipi); } } #endif @@ -540,7 +538,7 @@ bcm_lintc_init_pmu_on_ap(struct bcm_lintc_softc *sc, u_int cpu) } static void -bcm_lintc_init_secondary(device_t dev) +bcm_lintc_init_secondary(device_t dev, uint32_t rootnum) { u_int cpu; struct bcm_lintc_softc *sc; @@ -648,7 +646,18 @@ bcm_lintc_pic_attach(struct bcm_lintc_softc *sc) if (pic == NULL) return (ENXIO); - return (intr_pic_claim_root(sc->bls_dev, xref, bcm_lintc_intr, sc, 0)); + error = intr_pic_claim_root(sc->bls_dev, xref, bcm_lintc_intr, sc, + INTR_ROOT_IRQ); + if (error != 0) + return (error); + +#ifdef SMP + error = intr_ipi_pic_register(sc->bls_dev, 0); + if (error != 0) + return (error); +#endif + + return (0); } static int diff --git a/sys/arm/broadcom/bcm2835/bcm2836_mp.c b/sys/arm/broadcom/bcm2835/bcm2836_mp.c index 0f2565a2e8ae..c9b5599a4162 100644 --- a/sys/arm/broadcom/bcm2835/bcm2836_mp.c +++ b/sys/arm/broadcom/bcm2835/bcm2836_mp.c @@ -28,9 +28,6 @@ * */ -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - #include <sys/param.h> #include <sys/systm.h> #include <sys/kernel.h> diff --git a/sys/arm/broadcom/bcm2835/bcm2836_mp.h b/sys/arm/broadcom/bcm2835/bcm2836_mp.h index 5f9ac8179f24..a175806d20b9 100644 --- a/sys/arm/broadcom/bcm2835/bcm2836_mp.h +++ b/sys/arm/broadcom/bcm2835/bcm2836_mp.h @@ -24,8 +24,6 @@ * 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 _BCM2836_MP_H_ diff --git a/sys/arm/broadcom/bcm2835/bcm2838_pci.c b/sys/arm/broadcom/bcm2835/bcm2838_pci.c index c30eb73fc1b0..2b2ad1e3bdf8 100644 --- a/sys/arm/broadcom/bcm2835/bcm2838_pci.c +++ b/sys/arm/broadcom/bcm2835/bcm2838_pci.c @@ -16,8 +16,6 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * - * $FreeBSD$ - * */ /* @@ -27,9 +25,6 @@ * this driver is taken from the Raspberry Pi 4 Broadcom 2838 chip. */ -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - #include <sys/param.h> #include <sys/systm.h> #include <sys/endian.h> @@ -65,7 +60,7 @@ __FBSDID("$FreeBSD$"); #define REG_BRIDGE_CTRL 0x9210 #define BRIDGE_DISABLE_FLAG 0x1 #define BRIDGE_RESET_FLAG 0x2 -#define REG_BRIDGE_SERDES_MODE 0x4204 +#define REG_PCIE_HARD_DEBUG 0x4204 #define REG_DMA_CONFIG 0x4008 #define REG_DMA_WINDOW_LOW 0x4034 #define REG_DMA_WINDOW_HIGH 0x4038 @@ -91,6 +86,9 @@ __FBSDID("$FreeBSD$"); #define REG_EP_CONFIG_CHOICE 0x9000 #define REG_EP_CONFIG_DATA 0x8000 +#define L1SS_ENABLE 0x00200000 +#define CLKREQ_ENABLE 0x2 + /* * The system memory controller can address up to 16 GiB of physical memory * (although at time of writing the largest memory size available for purchase @@ -168,16 +166,14 @@ static void bcm_pcib_set_reg(struct bcm_pcib_softc *sc, uint32_t reg, uint32_t val) { - bus_space_write_4(sc->base.base.bst, sc->base.base.bsh, reg, - htole32(val)); + bus_write_4(sc->base.base.res, reg, htole32(val)); } static uint32_t bcm_pcib_read_reg(struct bcm_pcib_softc *sc, uint32_t reg) { - return (le32toh(bus_space_read_4(sc->base.base.bst, sc->base.base.bsh, - reg))); + return (le32toh(bus_read_4(sc->base.base.res, reg))); } static void @@ -197,7 +193,7 @@ bcm_pcib_reset_controller(struct bcm_pcib_softc *sc) DELAY(100); - bcm_pcib_set_reg(sc, REG_BRIDGE_SERDES_MODE, 0); + bcm_pcib_set_reg(sc, REG_PCIE_HARD_DEBUG, 0); DELAY(100); } @@ -318,8 +314,6 @@ bcm_pcib_read_config(device_t dev, u_int bus, u_int slot, u_int func, u_int reg, int bytes) { struct bcm_pcib_softc *sc; - bus_space_handle_t h; - bus_space_tag_t t; bus_addr_t offset; uint32_t data; @@ -330,18 +324,15 @@ bcm_pcib_read_config(device_t dev, u_int bus, u_int slot, u_int func, u_int reg, mtx_lock(&sc->config_mtx); offset = bcm_get_offset_and_prepare_config(sc, bus, slot, func, reg); - t = sc->base.base.bst; - h = sc->base.base.bsh; - switch (bytes) { case 1: - data = bus_space_read_1(t, h, offset); + data = bus_read_1(sc->base.base.res, offset); break; case 2: - data = le16toh(bus_space_read_2(t, h, offset)); + data = le16toh(bus_read_2(sc->base.base.res, offset)); break; case 4: - data = le32toh(bus_space_read_4(t, h, offset)); + data = le32toh(bus_read_4(sc->base.base.res, offset)); break; default: data = ~0U; @@ -357,8 +348,6 @@ bcm_pcib_write_config(device_t dev, u_int bus, u_int slot, u_int func, u_int reg, uint32_t val, int bytes) { struct bcm_pcib_softc *sc; - bus_space_handle_t h; - bus_space_tag_t t; uint32_t offset; sc = device_get_softc(dev); @@ -368,18 +357,15 @@ bcm_pcib_write_config(device_t dev, u_int bus, u_int slot, mtx_lock(&sc->config_mtx); offset = bcm_get_offset_and_prepare_config(sc, bus, slot, func, reg); - t = sc->base.base.bst; - h = sc->base.base.bsh; - switch (bytes) { case 1: - bus_space_write_1(t, h, offset, val); + bus_write_1(sc->base.base.res, offset, val); break; case 2: - bus_space_write_2(t, h, offset, htole16(val)); + bus_write_2(sc->base.base.res, offset, htole16(val)); break; case 4: - bus_space_write_4(t, h, offset, htole32(val)); + bus_write_4(sc->base.base.res, offset, htole32(val)); break; default: break; @@ -630,7 +616,7 @@ bcm_pcib_attach(device_t dev) struct bcm_pcib_softc *sc; pci_addr_t phys_base, pci_base; bus_size_t size; - uint32_t hardware_rev, bridge_state, link_state; + uint32_t hardware_rev, bridge_state, link_state, tmp; int error, tries; sc = device_get_softc(dev); @@ -736,7 +722,18 @@ bcm_pcib_attach(device_t dev) bcm_pcib_set_reg(sc, PCI_ID_VAL3, PCIC_BRIDGE << CLASS_SHIFT | PCIS_BRIDGE_PCI << SUBCLASS_SHIFT); - bcm_pcib_set_reg(sc, REG_BRIDGE_SERDES_MODE, 0x2); + tmp = bcm_pcib_read_reg(sc, REG_PCIE_HARD_DEBUG); + tmp |= CLKREQ_ENABLE; + + if (ofw_bus_has_prop(dev, "brcm,enable-l1ss")) { + if (bootverbose) + device_printf(dev, "note: enabling L1SS due to OF " + "property brcm,enable-l1ss\n"); + + tmp |= L1SS_ENABLE; + } + + bcm_pcib_set_reg(sc, REG_PCIE_HARD_DEBUG, tmp); DELAY(100); bcm_pcib_relocate_bridge_window(dev); @@ -747,8 +744,9 @@ bcm_pcib_attach(device_t dev) return (error); /* Done. */ - device_add_child(dev, "pci", -1); - return (bus_generic_attach(dev)); + device_add_child(dev, "pci", DEVICE_UNIT_ANY); + bus_attach_children(dev); + return (0); } /* diff --git a/sys/arm/broadcom/bcm2835/bcm2838_xhci.c b/sys/arm/broadcom/bcm2835/bcm2838_xhci.c index 7c389771853d..25579d7227a5 100644 --- a/sys/arm/broadcom/bcm2835/bcm2838_xhci.c +++ b/sys/arm/broadcom/bcm2835/bcm2838_xhci.c @@ -16,8 +16,6 @@ * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. * * - * $FreeBSD$ - * */ /* @@ -30,8 +28,6 @@ */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - #include <sys/stdint.h> #include <sys/stddef.h> #include <sys/param.h> @@ -216,3 +212,5 @@ DEFINE_CLASS_1(bcm_xhci, bcm_xhci_driver, bcm_xhci_methods, DRIVER_MODULE(bcm_xhci, pci, bcm_xhci_driver, 0, 0); MODULE_DEPEND(bcm_xhci, usb, 1, 1, 1); +MODULE_DEPEND(bcm_xhci, pci, 1, 1, 1); +MODULE_DEPEND(bcm_xhci, xhci, 1, 1, 1); diff --git a/sys/arm/broadcom/bcm2835/bcm283x_dwc_fdt.c b/sys/arm/broadcom/bcm2835/bcm283x_dwc_fdt.c index 1d995c38730c..056a388d1d77 100644 --- a/sys/arm/broadcom/bcm2835/bcm283x_dwc_fdt.c +++ b/sys/arm/broadcom/bcm2835/bcm283x_dwc_fdt.c @@ -25,9 +25,6 @@ * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ -#include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - #include <sys/param.h> #include <sys/kernel.h> #include <sys/bus.h> diff --git a/sys/arm/broadcom/bcm2835/files.bcm2835 b/sys/arm/broadcom/bcm2835/files.bcm2835 deleted file mode 100644 index 729379066d4c..000000000000 --- a/sys/arm/broadcom/bcm2835/files.bcm2835 +++ /dev/null @@ -1,3 +0,0 @@ -# $FreeBSD$ - -arm/broadcom/bcm2835/bcm2835_systimer.c standard diff --git a/sys/arm/broadcom/bcm2835/files.bcm2836 b/sys/arm/broadcom/bcm2835/files.bcm2836 index 43b6b6c25c2d..5d222d530a79 100644 --- a/sys/arm/broadcom/bcm2835/files.bcm2836 +++ b/sys/arm/broadcom/bcm2835/files.bcm2836 @@ -1,4 +1,3 @@ -# $FreeBSD$ arm/broadcom/bcm2835/bcm2836.c standard arm/broadcom/bcm2835/bcm2836_mp.c optional smp diff --git a/sys/arm/broadcom/bcm2835/files.bcm283x b/sys/arm/broadcom/bcm2835/files.bcm283x index 0af397566c17..44976f34d35a 100644 --- a/sys/arm/broadcom/bcm2835/files.bcm283x +++ b/sys/arm/broadcom/bcm2835/files.bcm283x @@ -1,4 +1,3 @@ -# $FreeBSD$ arm/broadcom/bcm2835/bcm2835_bsc.c optional bcm2835_bsc arm/broadcom/bcm2835/bcm2835_cpufreq.c standard diff --git a/sys/arm/broadcom/bcm2835/raspberrypi_gpio.c b/sys/arm/broadcom/bcm2835/raspberrypi_gpio.c index d2d1fec770c3..b286654c6f18 100644 --- a/sys/arm/broadcom/bcm2835/raspberrypi_gpio.c +++ b/sys/arm/broadcom/bcm2835/raspberrypi_gpio.c @@ -1,5 +1,5 @@ /*- - * SPDX-License-Identifier: BSD-2-Clause-FreeBSD + * SPDX-License-Identifier: BSD-2-Clause * * Copyright (c) 2012 Oleksandr Tymoshenko <gonzo@FreeBSD.org> * Copyright (c) 2012-2015 Luiz Otavio O Souza <loos@FreeBSD.org> @@ -28,8 +28,6 @@ * */ #include <sys/cdefs.h> -__FBSDID("$FreeBSD$"); - #include "opt_platform.h" #include <sys/param.h> @@ -406,10 +404,11 @@ rpi_fw_gpio_attach(device_t dev) } } free(names, M_OFWPROP); - sc->sc_busdev = gpiobus_attach_bus(dev); + sc->sc_busdev = gpiobus_add_bus(dev); if (sc->sc_busdev == NULL) goto fail; + bus_attach_children(dev); return (0); fail: diff --git a/sys/arm/broadcom/bcm2835/std.bcm2835 b/sys/arm/broadcom/bcm2835/std.bcm2835 deleted file mode 100644 index 08e9d763bc8f..000000000000 --- a/sys/arm/broadcom/bcm2835/std.bcm2835 +++ /dev/null @@ -1,10 +0,0 @@ -# $FreeBSD$ - -machine arm armv6 -cpu CPU_ARM1176 -makeoptions CONF_CFLAGS="-mcpu=arm1176jzf-s" -options SOC_BCM2835 - -files "../broadcom/bcm2835/files.bcm2835" -files "../broadcom/bcm2835/files.bcm283x" - diff --git a/sys/arm/broadcom/bcm2835/std.bcm2836 b/sys/arm/broadcom/bcm2835/std.bcm2836 index ffcc562f8436..a66e46131d41 100644 --- a/sys/arm/broadcom/bcm2835/std.bcm2836 +++ b/sys/arm/broadcom/bcm2835/std.bcm2836 @@ -1,4 +1,3 @@ -# $FreeBSD$ machine arm armv7 cpu CPU_CORTEXA diff --git a/sys/arm/broadcom/bcm2835/std.rpi b/sys/arm/broadcom/bcm2835/std.rpi index 48593c117c59..54d5ffb8618b 100644 --- a/sys/arm/broadcom/bcm2835/std.rpi +++ b/sys/arm/broadcom/bcm2835/std.rpi @@ -1,3 +1,2 @@ -# $FreeBSD$ options LINUX_BOOT_ABI diff --git a/sys/arm/broadcom/bcm2835/vc_vchi_audioserv_defs.h b/sys/arm/broadcom/bcm2835/vc_vchi_audioserv_defs.h index 143c54385916..896e706ff492 100644 --- a/sys/arm/broadcom/bcm2835/vc_vchi_audioserv_defs.h +++ b/sys/arm/broadcom/bcm2835/vc_vchi_audioserv_defs.h @@ -23,8 +23,6 @@ * 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 _VC_AUDIO_DEFS_H_ |