stm32: Use new CONFIG_USB to determine if USB needs to be configured

Introduce a CONFIG_USB build symbol that is set whenever
CONFIG_USBSERIAL or CONFIG_USBCANBUS is set.  Use that symbol during
setup so that the USB controller is properly initialized for both usb
serial and usb canbus bridge configurations.

This fixes the clock configuration for usb canbus bridge mode on
stm32f446.

Signed-off-by: Kevin O'Connor <kevin@koconnor.net>
This commit is contained in:
Kevin O'Connor 2022-08-16 21:12:42 -04:00
parent a709ba43af
commit 6aec6efcc9
5 changed files with 14 additions and 12 deletions

View File

@ -57,18 +57,21 @@ config USBSERIAL
bool bool
config USBCANBUS config USBCANBUS
bool bool
config USB
bool
default y if USBSERIAL || USBCANBUS
config USB_VENDOR_ID config USB_VENDOR_ID
default 0x1d50 default 0x1d50
config USB_DEVICE_ID config USB_DEVICE_ID
default 0x614e default 0x614e
config USB_SERIAL_NUMBER_CHIPID config USB_SERIAL_NUMBER_CHIPID
depends on HAVE_CHIPID && (USBSERIAL || USBCANBUS) depends on USB && HAVE_CHIPID
default y default y
config USB_SERIAL_NUMBER config USB_SERIAL_NUMBER
default "12345" default "12345"
menu "USB ids" menu "USB ids"
depends on (USBSERIAL || USBCANBUS) && LOW_LEVEL_OPTIONS depends on USB && LOW_LEVEL_OPTIONS
config USB_VENDOR_ID config USB_VENDOR_ID
hex "USB vendor ID" if USBSERIAL hex "USB vendor ID" if USBSERIAL
config USB_DEVICE_ID config USB_DEVICE_ID

View File

@ -86,7 +86,7 @@ pll_setup(void)
// Setup CFGR3 register // Setup CFGR3 register
uint32_t cfgr3 = RCC_CFGR3_I2C1SW; uint32_t cfgr3 = RCC_CFGR3_I2C1SW;
#if CONFIG_USBSERIAL #if CONFIG_USB
// Select PLL as source for USB clock // Select PLL as source for USB clock
cfgr3 |= RCC_CFGR3_USBSW; cfgr3 |= RCC_CFGR3_USBSW;
#endif #endif
@ -109,7 +109,7 @@ hsi48_setup(void)
; ;
// Enable USB clock recovery // Enable USB clock recovery
if (CONFIG_USBSERIAL) { if (CONFIG_USB) {
enable_pclock(CRS_BASE); enable_pclock(CRS_BASE);
CRS->CR |= CRS_CR_AUTOTRIMEN | CRS_CR_CEN; CRS->CR |= CRS_CR_AUTOTRIMEN | CRS_CR_CEN;
} }
@ -150,7 +150,7 @@ usb_reboot_for_dfu_bootloader(void)
static void static void
check_usb_dfu_bootloader(void) check_usb_dfu_bootloader(void)
{ {
if (!CONFIG_USBSERIAL || !CONFIG_MACH_STM32F0x2 if (!CONFIG_USB || !CONFIG_MACH_STM32F0x2
|| *(uint64_t*)USB_BOOT_FLAG_ADDR != USB_BOOT_FLAG) || *(uint64_t*)USB_BOOT_FLAG_ADDR != USB_BOOT_FLAG)
return; return;
*(uint64_t*)USB_BOOT_FLAG_ADDR = 0; *(uint64_t*)USB_BOOT_FLAG_ADDR = 0;
@ -204,8 +204,7 @@ armcm_main(void)
FLASH->ACR = (1 << FLASH_ACR_LATENCY_Pos) | FLASH_ACR_PRFTBE; FLASH->ACR = (1 << FLASH_ACR_LATENCY_Pos) | FLASH_ACR_PRFTBE;
// Configure main clock // Configure main clock
if (CONFIG_MACH_STM32F0x2 && CONFIG_STM32_CLOCK_REF_INTERNAL if (CONFIG_MACH_STM32F0x2 && CONFIG_STM32_CLOCK_REF_INTERNAL && CONFIG_USB)
&& CONFIG_USBSERIAL)
hsi48_setup(); hsi48_setup();
else else
pll_setup(); pll_setup();

View File

@ -139,7 +139,7 @@ enable_clock_stm32f446(void)
; ;
// Enable 48Mhz USB clock // Enable 48Mhz USB clock
if (CONFIG_USBSERIAL) { if (CONFIG_USB) {
uint32_t ref = (CONFIG_STM32_CLOCK_REF_INTERNAL uint32_t ref = (CONFIG_STM32_CLOCK_REF_INTERNAL
? 16000000 : CONFIG_CLOCK_REF_FREQ); ? 16000000 : CONFIG_CLOCK_REF_FREQ);
uint32_t plls_base = 2000000, plls_freq = FREQ_USB * 4; uint32_t plls_base = 2000000, plls_freq = FREQ_USB * 4;
@ -220,7 +220,7 @@ usb_reboot_for_dfu_bootloader(void)
static void static void
check_usb_dfu_bootloader(void) check_usb_dfu_bootloader(void)
{ {
if (!CONFIG_USBSERIAL || *(uint64_t*)USB_BOOT_FLAG_ADDR != USB_BOOT_FLAG) if (!CONFIG_USB || *(uint64_t*)USB_BOOT_FLAG_ADDR != USB_BOOT_FLAG)
return; return;
*(uint64_t*)USB_BOOT_FLAG_ADDR = 0; *(uint64_t*)USB_BOOT_FLAG_ADDR = 0;
uint32_t *sysbase = (uint32_t*)0x1fff0000; uint32_t *sysbase = (uint32_t*)0x1fff0000;

View File

@ -123,7 +123,7 @@ usb_reboot_for_dfu_bootloader(void)
static void static void
check_usb_dfu_bootloader(void) check_usb_dfu_bootloader(void)
{ {
if (!CONFIG_USBSERIAL || *(uint64_t*)USB_BOOT_FLAG_ADDR != USB_BOOT_FLAG) if (!CONFIG_USB || *(uint64_t*)USB_BOOT_FLAG_ADDR != USB_BOOT_FLAG)
return; return;
*(uint64_t*)USB_BOOT_FLAG_ADDR = 0; *(uint64_t*)USB_BOOT_FLAG_ADDR = 0;
uint32_t *sysbase = (uint32_t*)0x1fff0000; uint32_t *sysbase = (uint32_t*)0x1fff0000;

View File

@ -171,7 +171,7 @@ clock_setup(void)
; ;
// Configure HSI48 clock for USB // Configure HSI48 clock for USB
if (CONFIG_USBSERIAL) { if (CONFIG_USB) {
SET_BIT(RCC->CR, RCC_CR_HSI48ON); SET_BIT(RCC->CR, RCC_CR_HSI48ON);
while((RCC->CR & RCC_CR_HSI48RDY) == 0); while((RCC->CR & RCC_CR_HSI48RDY) == 0);
SET_BIT(RCC->APB1HENR, RCC_APB1HENR_CRSEN); SET_BIT(RCC->APB1HENR, RCC_APB1HENR_CRSEN);
@ -205,7 +205,7 @@ usb_reboot_for_dfu_bootloader(void)
static void static void
check_usb_dfu_bootloader(void) check_usb_dfu_bootloader(void)
{ {
if (!CONFIG_USBSERIAL || *(uint64_t*)USB_BOOT_FLAG_ADDR != USB_BOOT_FLAG) if (!CONFIG_USB || *(uint64_t*)USB_BOOT_FLAG_ADDR != USB_BOOT_FLAG)
return; return;
*(uint64_t*)USB_BOOT_FLAG_ADDR = 0; *(uint64_t*)USB_BOOT_FLAG_ADDR = 0;
uint32_t *sysbase = (uint32_t*)0x1FF09800; uint32_t *sysbase = (uint32_t*)0x1FF09800;