unsigned long get_ipb_clock(void) { unsigned long val; val = *(vu_long *)MPC5XXX_CDM_CFG; if (val & (1 << 8)) return get_bus_clock() / 2; else return get_bus_clock(); }
int prt_mpc5xxx_clks (void) { printf(" Bus %ld MHz, IPB %ld MHz, PCI %ld MHz\n", get_bus_clock() / 1000000, get_ipb_clock() / 1000000, get_pci_clock() / 1000000); return 0; }
static int stm32_clock_control_get_subsys_rate(struct device *clock, clock_control_subsys_t sub_system, u32_t *rate) { struct stm32_pclken *pclken = (struct stm32_pclken *)(sub_system); /* * Get AHB Clock (= SystemCoreClock = SYSCLK/prescaler) * SystemCoreClock is preferred to CONFIG_SYS_CLOCK_HW_CYCLES_PER_SEC * since it will be updated after clock configuration and hence * more likely to contain actual clock speed */ u32_t ahb_clock = SystemCoreClock; u32_t apb1_clock = get_bus_clock(ahb_clock, CONFIG_CLOCK_STM32_APB1_PRESCALER); #ifndef CONFIG_SOC_SERIES_STM32F0X u32_t apb2_clock = get_bus_clock(ahb_clock, CONFIG_CLOCK_STM32_APB2_PRESCALER); #endif /* CONFIG_SOC_SERIES_STM32F0X */ ARG_UNUSED(clock); switch (pclken->bus) { case STM32_CLOCK_BUS_AHB1: case STM32_CLOCK_BUS_AHB2: *rate = ahb_clock; break; case STM32_CLOCK_BUS_APB1: #if defined(CONFIG_SOC_SERIES_STM32L4X) || defined(CONFIG_SOC_SERIES_STM32F0X) case STM32_CLOCK_BUS_APB1_2: #endif /* CONFIG_SOC_SERIES_STM32L4X || CONFIG_SOC_SERIES_STM32F0X */ *rate = apb1_clock; break; #ifndef CONFIG_SOC_SERIES_STM32F0X case STM32_CLOCK_BUS_APB2: *rate = apb2_clock; break; #endif /* CONFIG_SOC_SERIES_STM32F0X */ } return 0; }
unsigned long get_pci_clock(void) { unsigned long val; val = *(vu_long *)MPC5XXX_CDM_CFG; switch (val & 3) { case 0: return get_ipb_clock(); case 1: return get_ipb_clock() / 2; default: return get_bus_clock() / 4; } }
uint32_t get_uart_clock( unsigned int instance ) { switch(instance) { case 0: case 1: // UART0 and UART1 always use the system clock return SystemCoreClock; case 2: case 3: case 4: case 5: // UART2, UART3, UART4, and UART5 always use the bus clock return get_bus_clock(); default: return 0; } }
unsigned long get_timebase_clock(void) { return (get_bus_clock() + 3L) / 4L; }
unsigned long get_cpu_clock(void) { unsigned long val; val = *(vu_long *)MPC5XXX_CDM_PORCFG; return get_bus_clock() * bus2core[val & 0x1f] / 2; }