move some initialization steps earlier (#2480)

* early hw init

* s

* Revert "s"

This reverts commit 10d3039168613cfb2b0cf1c960d2f18894745ce3.

* bor

* I can't type

Co-authored-by: Matthew Kennedy <makenne@microsoft.com>
This commit is contained in:
Matthew Kennedy 2021-03-25 13:22:03 -07:00 committed by GitHub
parent 1c473934b9
commit 6f05bbc332
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 40 additions and 33 deletions

View File

@ -32,7 +32,7 @@
#include "serial_hw.h" #include "serial_hw.h"
#include "mpu_util.h" #include "mpu_util.h"
//#include "usb_msd.h" #include "mmc_card.h"
#include "AdcConfiguration.h" #include "AdcConfiguration.h"
#include "idle_hardware.h" #include "idle_hardware.h"
@ -463,16 +463,16 @@ void showBor(void) {
scheduleMsg(sharedLogger, "BOR=%d", (int)BOR_Get()); scheduleMsg(sharedLogger, "BOR=%d", (int)BOR_Get());
} }
void initHardware(Logging *l) { // This function initializes hardware that can do so before configuration is loaded
void initHardwareNoConfig(Logging *l) {
efiAssertVoid(CUSTOM_IH_STACK, getCurrentRemainingStack() > EXPECTED_REMAINING_STACK, "init h"); efiAssertVoid(CUSTOM_IH_STACK, getCurrentRemainingStack() > EXPECTED_REMAINING_STACK, "init h");
sharedLogger = l; sharedLogger = l;
efiAssertVoid(CUSTOM_EC_NULL, engineConfiguration!=NULL, "engineConfiguration"); efiAssertVoid(CUSTOM_EC_NULL, engineConfiguration!=NULL, "engineConfiguration");
printMsg(sharedLogger, "initHardware()"); printMsg(sharedLogger, "initHardware()");
// todo: enable protection. it's disabled because it takes
// 10 extra seconds to re-flash the chip initPinRepository();
//flashProtect();
#if EFI_HISTOGRAMS #if EFI_HISTOGRAMS
/** /**
@ -486,12 +486,27 @@ void initHardware(Logging *l) {
*/ */
initPrimaryPins(sharedLogger); initPrimaryPins(sharedLogger);
if (hasFirmwareError()) { // it's important to initialize this pretty early in the game before any scheduling usages
return; initSingleTimerExecutorHardware();
}
initRtc();
#if EFI_INTERNAL_FLASH #if EFI_INTERNAL_FLASH
initFlash(sharedLogger);
#endif
#if EFI_SHAFT_POSITION_INPUT
// todo: figure out better startup logic
initTriggerCentral(sharedLogger);
#endif /* EFI_SHAFT_POSITION_INPUT */
#if EFI_FILE_LOGGING
initEarlyMmcCard();
#endif // EFI_FILE_LOGGING
}
void initHardware() {
#if EFI_INTERNAL_FLASH
#ifdef CONFIG_RESET_SWITCH_PORT #ifdef CONFIG_RESET_SWITCH_PORT
// this pin is not configurable at runtime so that we have a reliable way to reset configuration // this pin is not configurable at runtime so that we have a reliable way to reset configuration
#define SHOULD_IGNORE_FLASH() (palReadPad(CONFIG_RESET_SWITCH_PORT, CONFIG_RESET_SWITCH_PIN) == 0) #define SHOULD_IGNORE_FLASH() (palReadPad(CONFIG_RESET_SWITCH_PORT, CONFIG_RESET_SWITCH_PIN) == 0)
@ -503,7 +518,6 @@ void initHardware(Logging *l) {
palSetPadMode(CONFIG_RESET_SWITCH_PORT, CONFIG_RESET_SWITCH_PIN, PAL_MODE_INPUT_PULLUP); palSetPadMode(CONFIG_RESET_SWITCH_PORT, CONFIG_RESET_SWITCH_PIN, PAL_MODE_INPUT_PULLUP);
#endif /* CONFIG_RESET_SWITCH_PORT */ #endif /* CONFIG_RESET_SWITCH_PORT */
initFlash(sharedLogger);
/** /**
* this call reads configuration from flash memory or sets default configuration * this call reads configuration from flash memory or sets default configuration
* if flash state does not look right. * if flash state does not look right.
@ -522,9 +536,6 @@ void initHardware(Logging *l) {
resetConfigurationExt(sharedLogger, engineConfiguration->engineType PASS_ENGINE_PARAMETER_SUFFIX); resetConfigurationExt(sharedLogger, engineConfiguration->engineType PASS_ENGINE_PARAMETER_SUFFIX);
#endif /* EFI_INTERNAL_FLASH */ #endif /* EFI_INTERNAL_FLASH */
// it's important to initialize this pretty early in the game before any scheduling usages
initSingleTimerExecutorHardware();
#if EFI_HD44780_LCD #if EFI_HD44780_LCD
lcd_HD44780_init(sharedLogger); lcd_HD44780_init(sharedLogger);
if (hasFirmwareError()) if (hasFirmwareError())
@ -549,8 +560,6 @@ void initHardware(Logging *l) {
initSoftwareKnock(); initSoftwareKnock();
#endif /* EFI_SOFTWARE_KNOCK */ #endif /* EFI_SOFTWARE_KNOCK */
initRtc();
#if HAL_USE_SPI #if HAL_USE_SPI
initSpiModules(engineConfiguration); initSpiModules(engineConfiguration);
#endif /* HAL_USE_SPI */ #endif /* HAL_USE_SPI */
@ -582,11 +591,6 @@ void initHardware(Logging *l) {
// init_adc_mcp3208(&adcState, &SPID2); // init_adc_mcp3208(&adcState, &SPID2);
// requestAdcValue(&adcState, 0); // requestAdcValue(&adcState, 0);
#if EFI_SHAFT_POSITION_INPUT
// todo: figure out better startup logic
initTriggerCentral(sharedLogger);
#endif /* EFI_SHAFT_POSITION_INPUT */
turnOnHardware(sharedLogger); turnOnHardware(sharedLogger);
#if EFI_HIP_9011 #if EFI_HIP_9011
@ -596,15 +600,11 @@ void initHardware(Logging *l) {
#if EFI_MEMS #if EFI_MEMS
initAccelerometer(PASS_ENGINE_PARAMETER_SIGNATURE); initAccelerometer(PASS_ENGINE_PARAMETER_SIGNATURE);
#endif #endif
// initFixedLeds();
#if EFI_BOSCH_YAW #if EFI_BOSCH_YAW
initBoschYawRateSensor(); initBoschYawRateSensor();
#endif /* EFI_BOSCH_YAW */ #endif /* EFI_BOSCH_YAW */
// initBooleanInputs();
#if EFI_UART_GPS #if EFI_UART_GPS
initGps(); initGps();
#endif #endif

View File

@ -49,7 +49,13 @@ brain_pin_e getSckPin(spi_device_e device);
#include "debounce.h" #include "debounce.h"
void applyNewHardwareSettings(void); void applyNewHardwareSettings(void);
void initHardware(Logging *logging);
// Initialize hardware that doesn't require configuration to be loaded
void initHardwareNoConfig(Logging *l);
// Initialize hardware with configuration loaded
void initHardware();
#endif /* EFI_PROD_CODE */ #endif /* EFI_PROD_CODE */
void showBor(void); void showBor(void);

View File

@ -534,19 +534,22 @@ bool isSdCardAlive(void) {
return fs_ready; return fs_ready;
} }
void initMmcCard(void) { // Pre-config load init
void initEarlyMmcCard() {
logName[0] = 0; logName[0] = 0;
#if HAL_USE_USB_MSD #if HAL_USE_USB_MSD
chBSemObjectInit(&usbConnectedSemaphore, true); chBSemObjectInit(&usbConnectedSemaphore, true);
#endif #endif
chThdCreateStatic(mmcThreadStack, sizeof(mmcThreadStack), PRIO_MMC, (tfunc_t)(void*) MMCmonThread, NULL);
addConsoleAction("sdinfo", sdStatistics); addConsoleAction("sdinfo", sdStatistics);
addConsoleActionS("ls", listDirectory); addConsoleActionS("ls", listDirectory);
addConsoleActionS("del", removeFile); addConsoleActionS("del", removeFile);
addConsoleAction("incfilename", incLogFileName); addConsoleAction("incfilename", incLogFileName);
} }
void initMmcCard() {
chThdCreateStatic(mmcThreadStack, sizeof(mmcThreadStack), PRIO_MMC, (tfunc_t)(void*) MMCmonThread, NULL);
}
#endif /* EFI_FILE_LOGGING */ #endif /* EFI_FILE_LOGGING */

View File

@ -15,7 +15,8 @@
#define DOT_MLG ".mlg" #define DOT_MLG ".mlg"
bool isLogFile(const char *fileName); bool isLogFile(const char *fileName);
void initMmcCard(void); void initEarlyMmcCard();
void initMmcCard();
bool isSdCardAlive(void); bool isSdCardAlive(void);
void readLogFileContent(char *buffer, short fileId, short offset, short length); void readLogFileContent(char *buffer, short fileId, short offset, short length);

View File

@ -192,10 +192,7 @@ void runRusEfi(void) {
*/ */
initDataStructures(PASS_ENGINE_PARAMETER_SIGNATURE); initDataStructures(PASS_ENGINE_PARAMETER_SIGNATURE);
/** initHardwareNoConfig(&sharedLogger);
* First data structure keeps track of which hardware I/O pins are used by whom
*/
initPinRepository();
#if EFI_INTERNAL_FLASH #if EFI_INTERNAL_FLASH
#if IGNORE_FLASH_CONFIGURATION #if IGNORE_FLASH_CONFIGURATION
@ -234,7 +231,7 @@ void runRusEfi(void) {
/** /**
* Initialize hardware drivers * Initialize hardware drivers
*/ */
initHardware(&sharedLogger); initHardware();
#if HW_CHECK_ALWAYS_STIMULATE #if HW_CHECK_ALWAYS_STIMULATE
// we need a special binary for final assembly check. We cannot afford to require too much software or too many steps // we need a special binary for final assembly check. We cannot afford to require too much software or too many steps