diff options
| author | hathach <[email protected]> | 2021-10-26 23:43:35 +0700 |
|---|---|---|
| committer | hathach <[email protected]> | 2021-10-26 23:43:35 +0700 |
| commit | 07829510e7fe14efca735401d3cd2cfdd4f30066 (patch) | |
| tree | da30a6e18c48c30e23958e65361cc11e74abf9cd /hw | |
| parent | 9f1cd1a753400327072973cbf2437f6c51bd5509 (diff) | |
| parent | 2ef200003d06f8e3f19e713cfbc38f474491d4d8 (diff) | |
Merge branch 'tannewt-rpi' into generalize-synopsys-dwc2
Diffstat (limited to 'hw')
| -rw-r--r-- | hw/bsp/raspberrypi4/boards/raspberrypi_cm4/board.h | 38 | ||||
| -rw-r--r-- | hw/bsp/raspberrypi4/boards/raspberrypi_cm4/board.mk | 0 | ||||
| -rw-r--r-- | hw/bsp/raspberrypi4/family.c | 180 | ||||
| -rw-r--r-- | hw/bsp/raspberrypi4/family.mk | 41 | ||||
| m--------- | hw/mcu/broadcom | 0 |
5 files changed, 259 insertions, 0 deletions
diff --git a/hw/bsp/raspberrypi4/boards/raspberrypi_cm4/board.h b/hw/bsp/raspberrypi4/boards/raspberrypi_cm4/board.h new file mode 100644 index 000000000..1d3565d5c --- /dev/null +++ b/hw/bsp/raspberrypi4/boards/raspberrypi_cm4/board.h @@ -0,0 +1,38 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2020, Ha Thach (tinyusb.org) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * This file is part of the TinyUSB stack. + */ + +#ifndef BOARD_H_ +#define BOARD_H_ + +#ifdef __cplusplus + extern "C" { +#endif + +#ifdef __cplusplus + } +#endif + +#endif /* BOARD_H_ */ diff --git a/hw/bsp/raspberrypi4/boards/raspberrypi_cm4/board.mk b/hw/bsp/raspberrypi4/boards/raspberrypi_cm4/board.mk new file mode 100644 index 000000000..e69de29bb --- /dev/null +++ b/hw/bsp/raspberrypi4/boards/raspberrypi_cm4/board.mk diff --git a/hw/bsp/raspberrypi4/family.c b/hw/bsp/raspberrypi4/family.c new file mode 100644 index 000000000..ffeb05f9f --- /dev/null +++ b/hw/bsp/raspberrypi4/family.c @@ -0,0 +1,180 @@ +/* + * The MIT License (MIT) + * + * Copyright (c) 2019 Ha Thach (tinyusb.org) + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in + * all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN + * THE SOFTWARE. + * + * This file is part of the TinyUSB stack. + */ + +#include "bsp/board.h" +#include "board.h" + +#include "broadcom/interrupts.h" +#include "broadcom/io.h" +#include "broadcom/mmu.h" +#include "broadcom/vcmailbox.h" + +uint32_t SystemCoreClock = 700 * 1000 * 1000; + +//--------------------------------------------------------------------+ +// Forward USB interrupt events to TinyUSB IRQ Handler +//--------------------------------------------------------------------+ +void USB_IRQHandler(void) +{ + tud_int_handler(0); +} + +//--------------------------------------------------------------------+ +// MACRO TYPEDEF CONSTANT ENUM +//--------------------------------------------------------------------+ + +//--------------------------------------------------------------------+ +// Board porting API +//--------------------------------------------------------------------+ + +void print(const char* str) { + board_uart_write(str, strlen(str)); +} + +void board_init(void) +{ + gpio_initOutputPinWithPullNone(18); + gpio_initOutputPinWithPullNone(19); + gpio_initOutputPinWithPullNone(20); + gpio_initOutputPinWithPullNone(21); + gpio_setPinOutputBool(18, true); + gpio_initOutputPinWithPullNone(42); + setup_mmu_flat_map(); + // gpio_initOutputPinWithPullNone(23); + // gpio_initOutputPinWithPullNone(24); + // gpio_initOutputPinWithPullNone(25); + gpio_setPinOutputBool(18, false); + uart_init(); + gpio_setPinOutputBool(18, true); + const char* greeting = "hello to gdb2\r\n"; + gpio_setPinOutputBool(18, false); + for (size_t i = 0; i < 5; i++) { + // while (true) { + for (size_t j = 0; j < 1000000; j++) { + __asm__("nop"); + } + gpio_setPinOutputBool(42, true); + gpio_setPinOutputBool(18, true); + gpio_setPinOutputBool(19, true); + gpio_setPinOutputBool(20, true); + gpio_setPinOutputBool(21, true); + for (size_t j = 0; j < 1000000; j++) { + __asm__("nop"); + } + gpio_setPinOutputBool(42, false); + gpio_setPinOutputBool(18, false); + gpio_setPinOutputBool(19, false); + gpio_setPinOutputBool(20, false); + gpio_setPinOutputBool(21, false); + } + // uart_writeText("hello from io\n"); + // gpio_setPinOutputBool(24, true); + board_uart_write(greeting, strlen(greeting)); + // gpio_setPinOutputBool(24, false); + // gpio_setPinOutputBool(25, true); + // print(); + // gpio_setPinOutputBool(25, false); + // while (true) { + // // for (size_t i = 0; i < 5; i++) { + // for (size_t j = 0; j < 10000000000; j++) { + // __asm__("nop"); + // } + // gpio_setPinOutputBool(42, true); + // for (size_t j = 0; j < 10000000000; j++) { + // __asm__("nop"); + // } + // gpio_setPinOutputBool(42, false); + // } + // while (1) uart_update(); + + printf("hello %d\r\n", 21); + + // Turn on USB peripheral. + print("Turning on USB power\r\n"); + + vcmailbox_set_power_state(VCMAILBOX_DEVICE_USB_HCD, true); + print("USB power on\r\n"); + + BP_SetPriority(USB_IRQn, 0x00); + BP_ClearPendingIRQ(USB_IRQn); + BP_EnableIRQ(USB_IRQn); + BP_EnableIRQs(); +} + +void board_led_write(bool state) +{ + gpio_setPinOutputBool(42, state); +} + +uint32_t board_button_read(void) +{ + return 0; +} + +int board_uart_read(uint8_t* buf, int len) +{ + (void) buf; (void) len; + return 0; +} + +int board_uart_write(void const * buf, int len) +{ + for (int i = 0; i < len; i++) { + const char* cbuf = buf; + while (!UART1->STAT_b.TX_READY) {} + if (cbuf[i] == '\n') { + UART1->IO = '\r'; + while (!UART1->STAT_b.TX_READY) {} + } + UART1->IO = cbuf[i]; + } + return len; +} + +#if CFG_TUSB_OS == OPT_OS_NONE +volatile uint32_t system_ticks = 0; +void SysTick_Handler (void) +{ + system_ticks++; +} + +uint32_t board_millis(void) +{ + return system_ticks; +} +#endif + +void HardFault_Handler (void) +{ + // asm("bkpt"); +} + +// Required by __libc_init_array in startup code if we are compiling using +// -nostdlib/-nostartfiles. +void _init(void) +{ + +} diff --git a/hw/bsp/raspberrypi4/family.mk b/hw/bsp/raspberrypi4/family.mk new file mode 100644 index 000000000..0424b2154 --- /dev/null +++ b/hw/bsp/raspberrypi4/family.mk @@ -0,0 +1,41 @@ +UF2_FAMILY_ID = 0x57755a57 + +include $(TOP)/$(BOARD_PATH)/board.mk + +MCU_DIR = hw/mcu/broadcom + +CC = clang + +CFLAGS += \ + -Wall \ + -O0 \ + -ffreestanding \ + -nostdlib \ + -nostartfiles \ + -std=c17 \ + -mgeneral-regs-only \ + -DCFG_TUSB_MCU=OPT_MCU_BCM2711 + +SRC_C += \ + src/portable/broadcom/synopsys/dcd_synopsys.c \ + $(MCU_DIR)/broadcom/gen/interrupt_handlers.c \ + $(MCU_DIR)/broadcom/interrupts.c \ + $(MCU_DIR)/broadcom/io.c \ + $(MCU_DIR)/broadcom/mmu.c \ + $(MCU_DIR)/broadcom/vcmailbox.c + +CROSS_COMPILE = aarch64-none-elf- + +SKIP_NANOLIB = 1 + +LD_FILE = $(MCU_DIR)/broadcom/link.ld + +INC += \ + $(TOP)/$(BOARD_PATH) \ + $(TOP)/$(MCU_DIR) \ + $(TOP)/lib/CMSIS_5/CMSIS/Core_A/Include + +SRC_S += $(MCU_DIR)/broadcom/boot.S + +$(BUILD)/kernel8.img: $(BUILD)/$(PROJECT).elf + $(OBJCOPY) -O binary $^ $@ diff --git a/hw/mcu/broadcom b/hw/mcu/broadcom new file mode 160000 +Subproject 55cd6f798a45cac905d7bf81baa2bcbf7de7c42 |
