summaryrefslogtreecommitdiff
path: root/platforms/chibios
diff options
context:
space:
mode:
Diffstat (limited to 'platforms/chibios')
-rw-r--r--platforms/chibios/boards/GENERIC_WB32_F3G71XX/configs/chconf.h26
-rw-r--r--platforms/chibios/boards/GENERIC_WB32_F3G71XX/configs/config.h2
-rw-r--r--platforms/chibios/bootloader.c2
-rw-r--r--platforms/chibios/eeprom_teensy.c213
4 files changed, 42 insertions, 201 deletions
diff --git a/platforms/chibios/boards/GENERIC_WB32_F3G71XX/configs/chconf.h b/platforms/chibios/boards/GENERIC_WB32_F3G71XX/configs/chconf.h
new file mode 100644
index 0000000000..e4afddb6a5
--- /dev/null
+++ b/platforms/chibios/boards/GENERIC_WB32_F3G71XX/configs/chconf.h
@@ -0,0 +1,26 @@
+/* Copyright 2020 QMK
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+/*
+ * This file was auto-generated by:
+ * `qmk chibios-confmigrate -i platforms/chibios/boards/GENERIC_WB32_F3G71XX/configs/chconf.h -r platforms/chibios/boards/common/configs/chconf.h`
+ */
+
+#pragma once
+
+#define CH_CFG_ST_TIMEDELTA 0
+
+#include_next <chconf.h> \ No newline at end of file
diff --git a/platforms/chibios/boards/GENERIC_WB32_F3G71XX/configs/config.h b/platforms/chibios/boards/GENERIC_WB32_F3G71XX/configs/config.h
index 3d3e1165e4..9fdc825669 100644
--- a/platforms/chibios/boards/GENERIC_WB32_F3G71XX/configs/config.h
+++ b/platforms/chibios/boards/GENERIC_WB32_F3G71XX/configs/config.h
@@ -16,5 +16,5 @@
#pragma once
#ifndef EARLY_INIT_PERFORM_BOOTLOADER_JUMP
-# define EARLY_INIT_PERFORM_BOOTLOADER_JUMP FALSE
+# define EARLY_INIT_PERFORM_BOOTLOADER_JUMP TRUE
#endif
diff --git a/platforms/chibios/bootloader.c b/platforms/chibios/bootloader.c
index 5cadadeeeb..58212948b0 100644
--- a/platforms/chibios/bootloader.c
+++ b/platforms/chibios/bootloader.c
@@ -123,7 +123,7 @@ void enter_bootloader_mode_if_requested(void) { /* Jumping to bootloader is not
# if defined(BOOTLOADER_KIIBOHD)
/* Kiibohd Bootloader (MCHCK and Infinity KB) */
# define SCB_AIRCR_VECTKEY_WRITEMAGIC 0x05FA0000
-const uint8_t sys_reset_to_loader_magic[] = "\xff\x00\x7fRESET TO LOADER\x7f\x00\xff";
+const uint8_t sys_reset_to_loader_magic[] = "\xff\x00\x7fRESET TO LOADER\x7f\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00";
__attribute__((weak)) void bootloader_jump(void) {
void *volatile vbat = (void *)VBAT;
__builtin_memcpy(vbat, (const void *)sys_reset_to_loader_magic, sizeof(sys_reset_to_loader_magic));
diff --git a/platforms/chibios/eeprom_teensy.c b/platforms/chibios/eeprom_teensy.c
index 97da6f9e14..4aaf665269 100644
--- a/platforms/chibios/eeprom_teensy.c
+++ b/platforms/chibios/eeprom_teensy.c
@@ -39,126 +39,7 @@
* SOFTWARE.
*/
-#define SMC_PMSTAT_RUN ((uint8_t)0x01)
-#define SMC_PMSTAT_HSRUN ((uint8_t)0x80)
-
-#define F_CPU KINETIS_SYSCLK_FREQUENCY
-
-static inline int kinetis_hsrun_disable(void) {
-#if defined(MK66F18)
- if (SMC->PMSTAT == SMC_PMSTAT_HSRUN) {
-// First, reduce the CPU clock speed, but do not change
-// the peripheral speed (F_BUS). Serial1 & Serial2 baud
-// rates will be impacted, but most other peripherals
-// will continue functioning at the same speed.
-# if F_CPU == 256000000 && F_BUS == 64000000
- SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(1, 3, 1, 7); // TODO: TEST
-# elif F_CPU == 256000000 && F_BUS == 128000000
- SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(1, 1, 1, 7); // TODO: TEST
-# elif F_CPU == 240000000 && F_BUS == 60000000
- SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(1, 3, 1, 7); // ok
-# elif F_CPU == 240000000 && F_BUS == 80000000
- SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(2, 2, 2, 8); // ok
-# elif F_CPU == 240000000 && F_BUS == 120000000
- SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(1, 1, 1, 7); // ok
-# elif F_CPU == 216000000 && F_BUS == 54000000
- SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(1, 3, 1, 7); // ok
-# elif F_CPU == 216000000 && F_BUS == 72000000
- SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(2, 2, 2, 8); // ok
-# elif F_CPU == 216000000 && F_BUS == 108000000
- SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(1, 1, 1, 7); // ok
-# elif F_CPU == 192000000 && F_BUS == 48000000
- SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(1, 3, 1, 7); // ok
-# elif F_CPU == 192000000 && F_BUS == 64000000
- SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(2, 2, 2, 8); // ok
-# elif F_CPU == 192000000 && F_BUS == 96000000
- SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(1, 1, 1, 7); // ok
-# elif F_CPU == 180000000 && F_BUS == 60000000
- SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(2, 2, 2, 8); // ok
-# elif F_CPU == 180000000 && F_BUS == 90000000
- SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(1, 1, 1, 7); // ok
-# elif F_CPU == 168000000 && F_BUS == 56000000
- SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(2, 2, 2, 5); // ok
-# elif F_CPU == 144000000 && F_BUS == 48000000
- SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(2, 2, 2, 5); // ok
-# elif F_CPU == 144000000 && F_BUS == 72000000
- SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(1, 1, 1, 5); // ok
-# elif F_CPU == 120000000 && F_BUS == 60000000
- SIM->CLKDIV1 = SIM_CLKDIV1_OUTDIV1(KINETIS_CLKDIV1_OUTDIV1 - 1) | SIM_CLKDIV1_OUTDIV2(KINETIS_CLKDIV1_OUTDIV2 - 1) |
-# if defined(MK66F18)
- SIM_CLKDIV1_OUTDIV3(KINETIS_CLKDIV1_OUTDIV3 - 1) |
-# endif
- SIM_CLKDIV1_OUTDIV4(KINETIS_CLKDIV1_OUTDIV4 - 1);
-# else
- return 0;
-# endif
- // Then turn off HSRUN mode
- SMC->PMCTRL = SMC_PMCTRL_RUNM_SET(0);
- while (SMC->PMSTAT == SMC_PMSTAT_HSRUN)
- ; // wait
- return 1;
- }
-#endif
- return 0;
-}
-
-static inline int kinetis_hsrun_enable(void) {
-#if defined(MK66F18)
- if (SMC->PMSTAT == SMC_PMSTAT_RUN) {
- // Turn HSRUN mode on
- SMC->PMCTRL = SMC_PMCTRL_RUNM_SET(3);
- while (SMC->PMSTAT != SMC_PMSTAT_HSRUN) {
- ;
- } // wait
-// Then configure clock for full speed
-# if F_CPU == 256000000 && F_BUS == 64000000
- SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(0, 3, 0, 7);
-# elif F_CPU == 256000000 && F_BUS == 128000000
- SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(0, 1, 0, 7);
-# elif F_CPU == 240000000 && F_BUS == 60000000
- SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(0, 3, 0, 7);
-# elif F_CPU == 240000000 && F_BUS == 80000000
- SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(0, 2, 0, 7);
-# elif F_CPU == 240000000 && F_BUS == 120000000
- SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(0, 1, 0, 7);
-# elif F_CPU == 216000000 && F_BUS == 54000000
- SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(0, 3, 0, 7);
-# elif F_CPU == 216000000 && F_BUS == 72000000
- SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(0, 2, 0, 7);
-# elif F_CPU == 216000000 && F_BUS == 108000000
- SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(0, 1, 0, 7);
-# elif F_CPU == 192000000 && F_BUS == 48000000
- SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(0, 3, 0, 6);
-# elif F_CPU == 192000000 && F_BUS == 64000000
- SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(0, 2, 0, 6);
-# elif F_CPU == 192000000 && F_BUS == 96000000
- SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(0, 1, 0, 6);
-# elif F_CPU == 180000000 && F_BUS == 60000000
- SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(0, 2, 0, 6);
-# elif F_CPU == 180000000 && F_BUS == 90000000
- SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(0, 1, 0, 6);
-# elif F_CPU == 168000000 && F_BUS == 56000000
- SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(0, 2, 0, 5);
-# elif F_CPU == 144000000 && F_BUS == 48000000
- SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(0, 2, 0, 4);
-# elif F_CPU == 144000000 && F_BUS == 72000000
- SIM_CLKDIV1 = SIM_CLKDIV1_OUTDIVS(0, 1, 0, 4);
-# elif F_CPU == 120000000 && F_BUS == 60000000
- SIM->CLKDIV1 = SIM_CLKDIV1_OUTDIV1(KINETIS_CLKDIV1_OUTDIV1 - 1) | SIM_CLKDIV1_OUTDIV2(KINETIS_CLKDIV1_OUTDIV2 - 1) |
-# if defined(MK66F18)
- SIM_CLKDIV1_OUTDIV3(KINETIS_CLKDIV1_OUTDIV3 - 1) |
-# endif
- SIM_CLKDIV1_OUTDIV4(KINETIS_CLKDIV1_OUTDIV4 - 1);
-# else
- return 0;
-# endif
- return 1;
- }
-#endif
- return 0;
-}
-
-#if defined(K20x) || defined(MK66F18) /* chip selection */
+#if defined(K20x) /* chip selection */
/* Teensy 3.0, 3.1, 3.2; mchck; infinity keyboard */
// The EEPROM is really RAM with a hardware-based backup system to
@@ -188,34 +69,22 @@ static inline int kinetis_hsrun_enable(void) {
//
# define HANDLE_UNALIGNED_WRITES
-# if defined(K20x)
-# define EEPROM_MAX 2048
-# define EEPARTITION 0x03 // all 32K dataflash for EEPROM, none for Data
-# define EEESPLIT 0x30 // must be 0x30 on these chips
-# elif defined(MK66F18)
-# define EEPROM_MAX 4096
-# define EEPARTITION 0x05 // 128K dataflash for EEPROM, 128K for Data
-# define EEESPLIT 0x10 // best endurance: 0x00 = first 12%, 0x10 = first 25%, 0x30 = all equal
-# endif
-
// Minimum EEPROM Endurance
// ------------------------
-# if (EEPROM_SIZE == 4096)
-# define EEESIZE 0x02
-# elif (EEPROM_SIZE == 2048) // 35000 writes/byte or 70000 writes/word
-# define EEESIZE 0x03
+# if (EEPROM_SIZE == 2048) // 35000 writes/byte or 70000 writes/word
+# define EEESIZE 0x33
# elif (EEPROM_SIZE == 1024) // 75000 writes/byte or 150000 writes/word
-# define EEESIZE 0x04
+# define EEESIZE 0x34
# elif (EEPROM_SIZE == 512) // 155000 writes/byte or 310000 writes/word
-# define EEESIZE 0x05
+# define EEESIZE 0x35
# elif (EEPROM_SIZE == 256) // 315000 writes/byte or 630000 writes/word
-# define EEESIZE 0x06
+# define EEESIZE 0x36
# elif (EEPROM_SIZE == 128) // 635000 writes/byte or 1270000 writes/word
-# define EEESIZE 0x07
+# define EEESIZE 0x37
# elif (EEPROM_SIZE == 64) // 1275000 writes/byte or 2550000 writes/word
-# define EEESIZE 0x08
+# define EEESIZE 0x38
# elif (EEPROM_SIZE == 32) // 2555000 writes/byte or 5110000 writes/word
-# define EEESIZE 0x09
+# define EEESIZE 0x39
# endif
/** \brief eeprom initialization
@@ -228,21 +97,15 @@ void eeprom_initialize(void) {
uint8_t status;
if (FTFL->FCNFG & FTFL_FCNFG_RAMRDY) {
- uint8_t stat = FTFL->FSTAT & 0x70;
- if (stat) FTFL->FSTAT = stat;
-
// FlexRAM is configured as traditional RAM
// We need to reconfigure for EEPROM usage
- kinetis_hsrun_disable();
- FTFL->FCCOB0 = 0x80; // PGMPART = Program Partition Command
- FTFL->FCCOB3 = 0;
- FTFL->FCCOB4 = EEESPLIT | EEESIZE;
- FTFL->FCCOB5 = EEPARTITION;
+ FTFL->FCCOB0 = 0x80; // PGMPART = Program Partition Command
+ FTFL->FCCOB4 = EEESIZE; // EEPROM Size
+ FTFL->FCCOB5 = 0x03; // 0K for Dataflash, 32K for EEPROM backup
__disable_irq();
// do_flash_cmd() must execute from RAM. Luckily the C syntax is simple...
(*((void (*)(volatile uint8_t *))((uint32_t)do_flash_cmd | 1)))(&(FTFL->FSTAT));
__enable_irq();
- kinetis_hsrun_enable();
status = FTFL->FSTAT;
if (status & (FTFL_FSTAT_RDCOLERR | FTFL_FSTAT_ACCERR | FTFL_FSTAT_FPVIOL)) {
FTFL->FSTAT = (status & (FTFL_FSTAT_RDCOLERR | FTFL_FSTAT_ACCERR | FTFL_FSTAT_FPVIOL));
@@ -251,11 +114,11 @@ void eeprom_initialize(void) {
}
// wait for eeprom to become ready (is this really necessary?)
while (!(FTFL->FCNFG & FTFL_FCNFG_EEERDY)) {
- if (++count > 200000) break;
+ if (++count > 20000) break;
}
}
-# define FlexRAM ((volatile uint8_t *)0x14000000)
+# define FlexRAM ((uint8_t *)0x14000000)
/** \brief eeprom read byte
*
@@ -332,12 +195,8 @@ void eeprom_write_byte(uint8_t *addr, uint8_t value) {
if (offset >= EEPROM_SIZE) return;
if (!(FTFL->FCNFG & FTFL_FCNFG_EEERDY)) eeprom_initialize();
if (FlexRAM[offset] != value) {
- kinetis_hsrun_disable();
- uint8_t stat = FTFL->FSTAT & 0x70;
- if (stat) FTFL->FSTAT = stat;
FlexRAM[offset] = value;
flexram_wait();
- kinetis_hsrun_enable();
}
}
@@ -354,30 +213,18 @@ void eeprom_write_word(uint16_t *addr, uint16_t value) {
if ((offset & 1) == 0) {
# endif
if (*(uint16_t *)(&FlexRAM[offset]) != value) {
- kinetis_hsrun_disable();
- uint8_t stat = FTFL->FSTAT & 0x70;
- if (stat) FTFL->FSTAT = stat;
*(uint16_t *)(&FlexRAM[offset]) = value;
flexram_wait();
- kinetis_hsrun_enable();
}
# ifdef HANDLE_UNALIGNED_WRITES
} else {
if (FlexRAM[offset] != value) {
- kinetis_hsrun_disable();
- uint8_t stat = FTFL->FSTAT & 0x70;
- if (stat) FTFL->FSTAT = stat;
FlexRAM[offset] = value;
flexram_wait();
- kinetis_hsrun_enable();
}
if (FlexRAM[offset + 1] != (value >> 8)) {
- kinetis_hsrun_disable();
- uint8_t stat = FTFL->FSTAT & 0x70;
- if (stat) FTFL->FSTAT = stat;
FlexRAM[offset + 1] = value >> 8;
flexram_wait();
- kinetis_hsrun_enable();
}
}
# endif
@@ -397,57 +244,33 @@ void eeprom_write_dword(uint32_t *addr, uint32_t value) {
case 0:
# endif
if (*(uint32_t *)(&FlexRAM[offset]) != value) {
- kinetis_hsrun_disable();
- uint8_t stat = FTFL->FSTAT & 0x70;
- if (stat) FTFL->FSTAT = stat;
*(uint32_t *)(&FlexRAM[offset]) = value;
flexram_wait();
- kinetis_hsrun_enable();
}
return;
# ifdef HANDLE_UNALIGNED_WRITES
case 2:
if (*(uint16_t *)(&FlexRAM[offset]) != value) {
- kinetis_hsrun_disable();
- uint8_t stat = FTFL->FSTAT & 0x70;
- if (stat) FTFL->FSTAT = stat;
*(uint16_t *)(&FlexRAM[offset]) = value;
flexram_wait();
- kinetis_hsrun_enable();
}
if (*(uint16_t *)(&FlexRAM[offset + 2]) != (value >> 16)) {
- kinetis_hsrun_disable();
- uint8_t stat = FTFL->FSTAT & 0x70;
- if (stat) FTFL->FSTAT = stat;
*(uint16_t *)(&FlexRAM[offset + 2]) = value >> 16;
flexram_wait();
- kinetis_hsrun_enable();
}
return;
default:
if (FlexRAM[offset] != value) {
- kinetis_hsrun_disable();
- uint8_t stat = FTFL->FSTAT & 0x70;
- if (stat) FTFL->FSTAT = stat;
FlexRAM[offset] = value;
flexram_wait();
- kinetis_hsrun_enable();
}
if (*(uint16_t *)(&FlexRAM[offset + 1]) != (value >> 8)) {
- kinetis_hsrun_disable();
- uint8_t stat = FTFL->FSTAT & 0x70;
- if (stat) FTFL->FSTAT = stat;
*(uint16_t *)(&FlexRAM[offset + 1]) = value >> 8;
flexram_wait();
- kinetis_hsrun_enable();
}
if (FlexRAM[offset + 3] != (value >> 24)) {
- kinetis_hsrun_disable();
- uint8_t stat = FTFL->FSTAT & 0x70;
- if (stat) FTFL->FSTAT = stat;
FlexRAM[offset + 3] = value >> 24;
flexram_wait();
- kinetis_hsrun_enable();
}
}
# endif
@@ -465,7 +288,6 @@ void eeprom_write_block(const void *buf, void *addr, uint32_t len) {
if (!(FTFL->FCNFG & FTFL_FCNFG_EEERDY)) eeprom_initialize();
if (len >= EEPROM_SIZE) len = EEPROM_SIZE;
if (offset + len >= EEPROM_SIZE) len = EEPROM_SIZE - offset;
- kinetis_hsrun_disable();
while (len > 0) {
uint32_t lsb = offset & 3;
if (lsb == 0 && len >= 4) {
@@ -476,8 +298,6 @@ void eeprom_write_block(const void *buf, void *addr, uint32_t len) {
val32 |= (*src++ << 16);
val32 |= (*src++ << 24);
if (*(uint32_t *)(&FlexRAM[offset]) != val32) {
- uint8_t stat = FTFL->FSTAT & 0x70;
- if (stat) FTFL->FSTAT = stat;
*(uint32_t *)(&FlexRAM[offset]) = val32;
flexram_wait();
}
@@ -489,8 +309,6 @@ void eeprom_write_block(const void *buf, void *addr, uint32_t len) {
val16 = *src++;
val16 |= (*src++ << 8);
if (*(uint16_t *)(&FlexRAM[offset]) != val16) {
- uint8_t stat = FTFL->FSTAT & 0x70;
- if (stat) FTFL->FSTAT = stat;
*(uint16_t *)(&FlexRAM[offset]) = val16;
flexram_wait();
}
@@ -500,8 +318,6 @@ void eeprom_write_block(const void *buf, void *addr, uint32_t len) {
// write 8 bits
uint8_t val8 = *src++;
if (FlexRAM[offset] != val8) {
- uint8_t stat = FTFL->FSTAT & 0x70;
- if (stat) FTFL->FSTAT = stat;
FlexRAM[offset] = val8;
flexram_wait();
}
@@ -509,7 +325,6 @@ void eeprom_write_block(const void *buf, void *addr, uint32_t len) {
len--;
}
}
- kinetis_hsrun_enable();
}
/*