/////////////////////////////////////////////////////////////////////// // boot.h // // Written: Jaocb Pease jacob.pease@okstate.edu 7/22/2024 // // Purpose: Header for boot.c, main bootloader entry point // // // // A component of the Wally configurable RISC-V project. // // Copyright (C) 2021-23 Harvey Mudd College & Oklahoma State University // // SPDX-License-Identifier: Apache-2.0 WITH SHL-2.1 // // Licensed under the Solderpad Hardware License v 2.1 (the // “License”); you may not use this file except in compliance with the // License, or, at your option, the Apache License version 2.0. You // may obtain a copy of the License at // // https://solderpad.org/licenses/SHL-2.1/ // // Unless required by applicable law or agreed to in writing, any work // distributed under the License is distributed on an “AS IS” BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or // implied. See the License for the specific language governing // permissions and limitations under the License. /////////////////////////////////////////////////////////////////////// #ifndef WALLYBOOT #define WALLYBOOT 10000 #include typedef unsigned int UINT; /* int must be 16-bit or 32-bit */ typedef unsigned char BYTE; /* char must be 8-bit */ typedef uint16_t WORD; /* 16-bit unsigned integer */ typedef uint32_t DWORD; /* 32-bit unsigned integer */ typedef uint64_t QWORD; /* 64-bit unsigned integer */ typedef WORD WCHAR; typedef QWORD LBA_t; // Define memory locations of boot images ===================== // These locations are copied from the generic configuration // of OpenSBI. These addresses can be found in: // buildroot/output/build/opensbi-0.9/platform/generic/config.mk #define FDT_ADDRESS 0x87000000 // FW_JUMP_FDT_ADDR #define OPENSBI_ADDRESS 0x80000000 // FW_TEXT_START #define KERNEL_ADDRESS 0x80200000 // FW_JUMP_ADDR #define BANNER " █▀█ █▀█ █▀█ █▀▀ █ █\r\n" \ " █ █ █ █▄▀ █▄▄ ▄▄▄ █ █\r\n" \ " █▄█ █▄█ █ █ █▄▄ ▀▄▀\r\n" \ " ____ ____ ____ ___ ___ ____ ___\r\n" \ " \\ \\ / / / \\ | | | | \\ \\ / /\r\n" \ " \\ \\ __ / / / \\ | | | | \\ \\/ /\r\n" \ " \\ \\/ \\/ / / /\\ \\ | | | | \\ /\r\n" \ " \\ / / ____ \\ | |___ | |___ | |\r\n" \ " \\___/\\___/ /___/ \\___\\|_______||_______| |___|\r\n\r\n" // Export disk_read int disk_read(BYTE * buf, LBA_t sector, UINT count); #define SYSTEMCLOCK 20000000 // TODO: This line needs to change back to 20MHz when we fix the // timing problems. #define MAXSDCCLOCK 5000000 // Maximum SDC speed is either the system clock divided by 2 (because // of the SPI peripheral clock division) or the maximum speed an SD // card can be pushed to. #define SDCCLOCK (SYSTEMCLOCK/2 > MAXSDCCLOCK ? MAXSDCCLOCK : SYSTEMCLOCK/2) #endif // WALLYBOOT