Path: blob/master/arch/mips/pic32/pic32mzda/early_clk.c
26583 views
// SPDX-License-Identifier: GPL-2.0-only1/*2* Joshua Henderson <[email protected]>3* Copyright (C) 2015 Microchip Technology Inc. All rights reserved.4*/5#include <asm/mach-pic32/pic32.h>67#include "pic32mzda.h"89/* Oscillators, PLL & clocks */10#define ICLK_MASK 0x0000008011#define PLLDIV_MASK 0x0000000712#define CUROSC_MASK 0x0000000713#define PLLMUL_MASK 0x0000007F14#define PB_MASK 0x0000000715#define FRC1 016#define FRC2 717#define SPLL 118#define POSC 219#define FRC_CLK 80000002021#define PIC32_POSC_FREQ 240000002223#define OSCCON 0x000024#define SPLLCON 0x002025#define PB1DIV 0x01402627u32 pic32_get_sysclk(void)28{29u32 osc_freq = 0;30u32 pllclk;31u32 frcdivn;32u32 osccon;33u32 spllcon;34int curr_osc;3536u32 plliclk;37u32 pllidiv;38u32 pllodiv;39u32 pllmult;40u32 frcdiv;4142void __iomem *osc_base = ioremap(PIC32_BASE_OSC, 0x200);4344osccon = __raw_readl(osc_base + OSCCON);45spllcon = __raw_readl(osc_base + SPLLCON);4647plliclk = (spllcon & ICLK_MASK);48pllidiv = ((spllcon >> 8) & PLLDIV_MASK) + 1;49pllodiv = ((spllcon >> 24) & PLLDIV_MASK);50pllmult = ((spllcon >> 16) & PLLMUL_MASK) + 1;51frcdiv = ((osccon >> 24) & PLLDIV_MASK);5253pllclk = plliclk ? FRC_CLK : PIC32_POSC_FREQ;54frcdivn = ((1 << frcdiv) + 1) + (128 * (frcdiv == 7));5556if (pllodiv < 2)57pllodiv = 2;58else if (pllodiv < 5)59pllodiv = (1 << pllodiv);60else61pllodiv = 32;6263curr_osc = (int)((osccon >> 12) & CUROSC_MASK);6465switch (curr_osc) {66case FRC1:67case FRC2:68osc_freq = FRC_CLK / frcdivn;69break;70case SPLL:71osc_freq = ((pllclk / pllidiv) * pllmult) / pllodiv;72break;73case POSC:74osc_freq = PIC32_POSC_FREQ;75break;76default:77break;78}7980iounmap(osc_base);8182return osc_freq;83}8485u32 pic32_get_pbclk(int bus)86{87u32 clk_freq;88void __iomem *osc_base = ioremap(PIC32_BASE_OSC, 0x200);89u32 pbxdiv = PB1DIV + ((bus - 1) * 0x10);90u32 pbdiv = (__raw_readl(osc_base + pbxdiv) & PB_MASK) + 1;9192iounmap(osc_base);9394clk_freq = pic32_get_sysclk();9596return clk_freq / pbdiv;97}9899100