
* Update to QEMU v9.0.0 --------- Signed-off-by: Peter Maydell <peter.maydell@linaro.org> Signed-off-by: Fabiano Rosas <farosas@suse.de> Signed-off-by: Peter Xu <peterx@redhat.com> Signed-off-by: Thomas Huth <thuth@redhat.com> Signed-off-by: Cédric Le Goater <clg@redhat.com> Signed-off-by: Zheyu Ma <zheyuma97@gmail.com> Signed-off-by: Ido Plat <ido.plat@ibm.com> Signed-off-by: Ilya Leoshkevich <iii@linux.ibm.com> Signed-off-by: Markus Armbruster <armbru@redhat.com> Signed-off-by: Marc-André Lureau <marcandre.lureau@redhat.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> Signed-off-by: David Hildenbrand <david@redhat.com> Signed-off-by: Kevin Wolf <kwolf@redhat.com> Signed-off-by: Thomas Lamprecht <t.lamprecht@proxmox.com> Signed-off-by: Fiona Ebner <f.ebner@proxmox.com> Signed-off-by: Gregory Price <gregory.price@memverge.com> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org> Signed-off-by: Lorenz Brun <lorenz@brun.one> Signed-off-by: Yao Xingtao <yaoxt.fnst@fujitsu.com> Signed-off-by: Arnaud Minier <arnaud.minier@telecom-paris.fr> Signed-off-by: Inès Varhol <ines.varhol@telecom-paris.fr> Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu> Signed-off-by: Igor Mammedov <imammedo@redhat.com> Signed-off-by: Akihiko Odaki <akihiko.odaki@daynix.com> Signed-off-by: Richard Henderson <richard.henderson@linaro.org> Signed-off-by: Sven Schnelle <svens@stackframe.org> Signed-off-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> Signed-off-by: Christian Schoenebeck <qemu_oss@crudebyte.com> Signed-off-by: Jason Wang <jasowang@redhat.com> Signed-off-by: Helge Deller <deller@gmx.de> Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Benjamin Gray <bgray@linux.ibm.com> Signed-off-by: Avihai Horon <avihaih@nvidia.com> Signed-off-by: Michael Tokarev <mjt@tls.msk.ru> Signed-off-by: Joonas Kankaala <joonas.a.kankaala@gmail.com> Signed-off-by: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org> Signed-off-by: Stefan Weil <sw@weilnetz.de> Signed-off-by: Zhao Liu <zhao1.liu@intel.com> Signed-off-by: Glenn Miles <milesg@linux.ibm.com> Signed-off-by: Oleg Sviridov <oleg.sviridov@red-soft.ru> Signed-off-by: Artem Chernyshev <artem.chernyshev@red-soft.ru> Signed-off-by: Yajun Wu <yajunw@nvidia.com> Signed-off-by: Stefan Hajnoczi <stefanha@redhat.com> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Signed-off-by: Pierre-Clément Tosi <ptosi@google.com> Signed-off-by: Lei Wang <lei4.wang@intel.com> Signed-off-by: Wei Wang <wei.w.wang@intel.com> Signed-off-by: Martin Hundebøll <martin@geanix.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org> Signed-off-by: Wafer <wafer@jaguarmicro.com> Signed-off-by: Yuxue Liu <yuxue.liu@jaguarmicro.com> Signed-off-by: Gerd Hoffmann <kraxel@redhat.com> Signed-off-by: Nguyen Dinh Phi <phind.uet@gmail.com> Signed-off-by: Zack Buhman <zack@buhman.org> Signed-off-by: Keith Packard <keithp@keithp.com> Signed-off-by: Yuquan Wang wangyuquan1236@phytium.com.cn Signed-off-by: Matheus Tavares Bernardino <quic_mathbern@quicinc.com> Signed-off-by: Cindy Lu <lulu@redhat.com> Co-authored-by: Peter Maydell <peter.maydell@linaro.org> Co-authored-by: Fabiano Rosas <farosas@suse.de> Co-authored-by: Peter Xu <peterx@redhat.com> Co-authored-by: Thomas Huth <thuth@redhat.com> Co-authored-by: Cédric Le Goater <clg@redhat.com> Co-authored-by: Zheyu Ma <zheyuma97@gmail.com> Co-authored-by: Ido Plat <ido.plat@ibm.com> Co-authored-by: Ilya Leoshkevich <iii@linux.ibm.com> Co-authored-by: Markus Armbruster <armbru@redhat.com> Co-authored-by: Marc-André Lureau <marcandre.lureau@redhat.com> Co-authored-by: Paolo Bonzini <pbonzini@redhat.com> Co-authored-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru> Co-authored-by: David Hildenbrand <david@redhat.com> Co-authored-by: Kevin Wolf <kwolf@redhat.com> Co-authored-by: Stefan Reiter <s.reiter@proxmox.com> Co-authored-by: Fiona Ebner <f.ebner@proxmox.com> Co-authored-by: Gregory Price <gregory.price@memverge.com> Co-authored-by: Lorenz Brun <lorenz@brun.one> Co-authored-by: Yao Xingtao <yaoxt.fnst@fujitsu.com> Co-authored-by: Philippe Mathieu-Daudé <philmd@linaro.org> Co-authored-by: Arnaud Minier <arnaud.minier@telecom-paris.fr> Co-authored-by: BALATON Zoltan <balaton@eik.bme.hu> Co-authored-by: Igor Mammedov <imammedo@redhat.com> Co-authored-by: Akihiko Odaki <akihiko.odaki@daynix.com> Co-authored-by: Richard Henderson <richard.henderson@linaro.org> Co-authored-by: Sven Schnelle <svens@stackframe.org> Co-authored-by: Daniel Henrique Barboza <dbarboza@ventanamicro.com> Co-authored-by: Helge Deller <deller@kernel.org> Co-authored-by: Harsh Prateek Bora <harshpb@linux.ibm.com> Co-authored-by: Benjamin Gray <bgray@linux.ibm.com> Co-authored-by: Nicholas Piggin <npiggin@gmail.com> Co-authored-by: Avihai Horon <avihaih@nvidia.com> Co-authored-by: Michael Tokarev <mjt@tls.msk.ru> Co-authored-by: Joonas Kankaala <joonas.a.kankaala@gmail.com> Co-authored-by: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org> Co-authored-by: Stefan Weil <sw@weilnetz.de> Co-authored-by: Dayu Liu <liu.dayu@zte.com.cn> Co-authored-by: Zhao Liu <zhao1.liu@intel.com> Co-authored-by: Glenn Miles <milesg@linux.vnet.ibm.com> Co-authored-by: Artem Chernyshev <artem.chernyshev@red-soft.ru> Co-authored-by: Yajun Wu <yajunw@nvidia.com> Co-authored-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Co-authored-by: Pierre-Clément Tosi <ptosi@google.com> Co-authored-by: Wei Wang <wei.w.wang@intel.com> Co-authored-by: Martin Hundebøll <martin@geanix.com> Co-authored-by: Michael S. Tsirkin <mst@redhat.com> Co-authored-by: Manos Pitsidianakis <manos.pitsidianakis@linaro.org> Co-authored-by: Wafer <wafer@jaguarmicro.com> Co-authored-by: lyx634449800 <yuxue.liu@jaguarmicro.com> Co-authored-by: Gerd Hoffmann <kraxel@redhat.com> Co-authored-by: Nguyen Dinh Phi <phind.uet@gmail.com> Co-authored-by: Zack Buhman <zack@buhman.org> Co-authored-by: Keith Packard <keithp@keithp.com> Co-authored-by: Yuquan Wang <wangyuquan1236@phytium.com.cn> Co-authored-by: Matheus Tavares Bernardino <quic_mathbern@quicinc.com> Co-authored-by: Cindy Lu <lulu@redhat.com>
240 lines
5.6 KiB
C
240 lines
5.6 KiB
C
/*
|
|
* STM32L4X5 RCC (Reset and clock control)
|
|
*
|
|
* Copyright (c) 2023 Arnaud Minier <arnaud.minier@telecom-paris.fr>
|
|
* Copyright (c) 2023 Inès Varhol <ines.varhol@telecom-paris.fr>
|
|
*
|
|
* SPDX-License-Identifier: GPL-2.0-or-later
|
|
*
|
|
* This work is licensed under the terms of the GNU GPL, version 2 or later.
|
|
* See the COPYING file in the top-level directory.
|
|
*
|
|
* The reference used is the STMicroElectronics RM0351 Reference manual
|
|
* for STM32L4x5 and STM32L4x6 advanced Arm ® -based 32-bit MCUs.
|
|
*
|
|
* Inspired by the BCM2835 CPRMAN clock manager by Luc Michel.
|
|
*/
|
|
|
|
#ifndef HW_STM32L4X5_RCC_H
|
|
#define HW_STM32L4X5_RCC_H
|
|
|
|
#include "hw/sysbus.h"
|
|
#include "qom/object.h"
|
|
|
|
#define TYPE_STM32L4X5_RCC "stm32l4x5-rcc"
|
|
OBJECT_DECLARE_SIMPLE_TYPE(Stm32l4x5RccState, STM32L4X5_RCC)
|
|
|
|
/* In the Stm32l4x5 clock tree, mux have at most 7 sources */
|
|
#define RCC_NUM_CLOCK_MUX_SRC 7
|
|
|
|
typedef enum PllCommonChannels {
|
|
RCC_PLL_COMMON_CHANNEL_P = 0,
|
|
RCC_PLL_COMMON_CHANNEL_Q = 1,
|
|
RCC_PLL_COMMON_CHANNEL_R = 2,
|
|
|
|
RCC_NUM_CHANNEL_PLL_OUT = 3
|
|
} PllCommonChannels;
|
|
|
|
/* NB: Prescaler are assimilated to mux with one source and one output */
|
|
typedef enum RccClockMux {
|
|
/* Internal muxes that arent't exposed publicly to other peripherals */
|
|
RCC_CLOCK_MUX_SYSCLK,
|
|
RCC_CLOCK_MUX_PLL_INPUT,
|
|
RCC_CLOCK_MUX_HCLK,
|
|
RCC_CLOCK_MUX_PCLK1,
|
|
RCC_CLOCK_MUX_PCLK2,
|
|
RCC_CLOCK_MUX_HSE_OVER_32,
|
|
RCC_CLOCK_MUX_LCD_AND_RTC_COMMON,
|
|
|
|
/* Muxes with a publicly available output */
|
|
RCC_CLOCK_MUX_CORTEX_REFCLK,
|
|
RCC_CLOCK_MUX_USART1,
|
|
RCC_CLOCK_MUX_USART2,
|
|
RCC_CLOCK_MUX_USART3,
|
|
RCC_CLOCK_MUX_UART4,
|
|
RCC_CLOCK_MUX_UART5,
|
|
RCC_CLOCK_MUX_LPUART1,
|
|
RCC_CLOCK_MUX_I2C1,
|
|
RCC_CLOCK_MUX_I2C2,
|
|
RCC_CLOCK_MUX_I2C3,
|
|
RCC_CLOCK_MUX_LPTIM1,
|
|
RCC_CLOCK_MUX_LPTIM2,
|
|
RCC_CLOCK_MUX_SWPMI1,
|
|
RCC_CLOCK_MUX_MCO,
|
|
RCC_CLOCK_MUX_LSCO,
|
|
RCC_CLOCK_MUX_DFSDM1,
|
|
RCC_CLOCK_MUX_ADC,
|
|
RCC_CLOCK_MUX_CLK48,
|
|
RCC_CLOCK_MUX_SAI1,
|
|
RCC_CLOCK_MUX_SAI2,
|
|
|
|
/*
|
|
* Mux that have only one input and one output assigned to as peripheral.
|
|
* They could be direct lines but it is simpler
|
|
* to use the same logic for all outputs.
|
|
*/
|
|
/* - AHB1 */
|
|
RCC_CLOCK_MUX_TSC,
|
|
RCC_CLOCK_MUX_CRC,
|
|
RCC_CLOCK_MUX_FLASH,
|
|
RCC_CLOCK_MUX_DMA2,
|
|
RCC_CLOCK_MUX_DMA1,
|
|
|
|
/* - AHB2 */
|
|
RCC_CLOCK_MUX_RNG,
|
|
RCC_CLOCK_MUX_AES,
|
|
RCC_CLOCK_MUX_OTGFS,
|
|
RCC_CLOCK_MUX_GPIOA,
|
|
RCC_CLOCK_MUX_GPIOB,
|
|
RCC_CLOCK_MUX_GPIOC,
|
|
RCC_CLOCK_MUX_GPIOD,
|
|
RCC_CLOCK_MUX_GPIOE,
|
|
RCC_CLOCK_MUX_GPIOF,
|
|
RCC_CLOCK_MUX_GPIOG,
|
|
RCC_CLOCK_MUX_GPIOH,
|
|
|
|
/* - AHB3 */
|
|
RCC_CLOCK_MUX_QSPI,
|
|
RCC_CLOCK_MUX_FMC,
|
|
|
|
/* - APB1 */
|
|
RCC_CLOCK_MUX_OPAMP,
|
|
RCC_CLOCK_MUX_DAC1,
|
|
RCC_CLOCK_MUX_PWR,
|
|
RCC_CLOCK_MUX_CAN1,
|
|
RCC_CLOCK_MUX_SPI3,
|
|
RCC_CLOCK_MUX_SPI2,
|
|
RCC_CLOCK_MUX_WWDG,
|
|
RCC_CLOCK_MUX_LCD,
|
|
RCC_CLOCK_MUX_TIM7,
|
|
RCC_CLOCK_MUX_TIM6,
|
|
RCC_CLOCK_MUX_TIM5,
|
|
RCC_CLOCK_MUX_TIM4,
|
|
RCC_CLOCK_MUX_TIM3,
|
|
RCC_CLOCK_MUX_TIM2,
|
|
|
|
/* - APB2 */
|
|
RCC_CLOCK_MUX_TIM17,
|
|
RCC_CLOCK_MUX_TIM16,
|
|
RCC_CLOCK_MUX_TIM15,
|
|
RCC_CLOCK_MUX_TIM8,
|
|
RCC_CLOCK_MUX_SPI1,
|
|
RCC_CLOCK_MUX_TIM1,
|
|
RCC_CLOCK_MUX_SDMMC1,
|
|
RCC_CLOCK_MUX_FW,
|
|
RCC_CLOCK_MUX_SYSCFG,
|
|
|
|
/* - BDCR */
|
|
RCC_CLOCK_MUX_RTC,
|
|
|
|
/* - OTHER */
|
|
RCC_CLOCK_MUX_CORTEX_FCLK,
|
|
|
|
RCC_NUM_CLOCK_MUX
|
|
} RccClockMux;
|
|
|
|
typedef enum RccPll {
|
|
RCC_PLL_PLL,
|
|
RCC_PLL_PLLSAI1,
|
|
RCC_PLL_PLLSAI2,
|
|
|
|
RCC_NUM_PLL
|
|
} RccPll;
|
|
|
|
typedef struct RccClockMuxState {
|
|
DeviceState parent_obj;
|
|
|
|
RccClockMux id;
|
|
Clock *srcs[RCC_NUM_CLOCK_MUX_SRC];
|
|
Clock *out;
|
|
bool enabled;
|
|
uint32_t src;
|
|
uint32_t multiplier;
|
|
uint32_t divider;
|
|
|
|
/*
|
|
* Used by clock srcs update callback to retrieve both the clock and the
|
|
* source number.
|
|
*/
|
|
struct RccClockMuxState *backref[RCC_NUM_CLOCK_MUX_SRC];
|
|
} RccClockMuxState;
|
|
|
|
typedef struct RccPllState {
|
|
DeviceState parent_obj;
|
|
|
|
RccPll id;
|
|
Clock *in;
|
|
uint32_t vco_multiplier;
|
|
Clock *channels[RCC_NUM_CHANNEL_PLL_OUT];
|
|
/* Global pll enabled flag */
|
|
bool enabled;
|
|
/* 'enabled' refers to the runtime configuration */
|
|
bool channel_enabled[RCC_NUM_CHANNEL_PLL_OUT];
|
|
/*
|
|
* 'exists' refers to the physical configuration
|
|
* It should only be set at pll initialization.
|
|
* e.g. pllsai2 doesn't have a Q output.
|
|
*/
|
|
bool channel_exists[RCC_NUM_CHANNEL_PLL_OUT];
|
|
uint32_t channel_divider[RCC_NUM_CHANNEL_PLL_OUT];
|
|
} RccPllState;
|
|
|
|
struct Stm32l4x5RccState {
|
|
SysBusDevice parent_obj;
|
|
|
|
MemoryRegion mmio;
|
|
|
|
uint32_t cr;
|
|
uint32_t icscr;
|
|
uint32_t cfgr;
|
|
uint32_t pllcfgr;
|
|
uint32_t pllsai1cfgr;
|
|
uint32_t pllsai2cfgr;
|
|
uint32_t cier;
|
|
uint32_t cifr;
|
|
uint32_t ahb1rstr;
|
|
uint32_t ahb2rstr;
|
|
uint32_t ahb3rstr;
|
|
uint32_t apb1rstr1;
|
|
uint32_t apb1rstr2;
|
|
uint32_t apb2rstr;
|
|
uint32_t ahb1enr;
|
|
uint32_t ahb2enr;
|
|
uint32_t ahb3enr;
|
|
uint32_t apb1enr1;
|
|
uint32_t apb1enr2;
|
|
uint32_t apb2enr;
|
|
uint32_t ahb1smenr;
|
|
uint32_t ahb2smenr;
|
|
uint32_t ahb3smenr;
|
|
uint32_t apb1smenr1;
|
|
uint32_t apb1smenr2;
|
|
uint32_t apb2smenr;
|
|
uint32_t ccipr;
|
|
uint32_t bdcr;
|
|
uint32_t csr;
|
|
|
|
/* Clock sources */
|
|
Clock *gnd;
|
|
Clock *hsi16_rc;
|
|
Clock *msi_rc;
|
|
Clock *hse;
|
|
Clock *lsi_rc;
|
|
Clock *lse_crystal;
|
|
Clock *sai1_extclk;
|
|
Clock *sai2_extclk;
|
|
|
|
/* PLLs */
|
|
RccPllState plls[RCC_NUM_PLL];
|
|
|
|
/* Muxes ~= outputs */
|
|
RccClockMuxState clock_muxes[RCC_NUM_CLOCK_MUX];
|
|
|
|
qemu_irq irq;
|
|
uint64_t hse_frequency;
|
|
uint64_t sai1_extclk_frequency;
|
|
uint64_t sai2_extclk_frequency;
|
|
};
|
|
|
|
#endif /* HW_STM32L4X5_RCC_H */
|