clkc.c (3c3d7cb1db4af176dab843f22ea092a4ef1eb989) | clkc.c (b0504e39c27b00101c9c1fa2c58fd896ae0f64f5) |
---|---|
1/* 2 * Zynq clock controller 3 * 4 * Copyright (C) 2012 - 2013 Xilinx 5 * 6 * Sören Brinkmann <soren.brinkmann@xilinx.com> 7 * 8 * This program is free software: you can redistribute it and/or modify --- 7 unchanged lines hidden (view full) --- 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program. If not, see <http://www.gnu.org/licenses/>. 19 */ 20 21#include <linux/clk/zynq.h> 22#include <linux/clk-provider.h> 23#include <linux/of.h> | 1/* 2 * Zynq clock controller 3 * 4 * Copyright (C) 2012 - 2013 Xilinx 5 * 6 * Sören Brinkmann <soren.brinkmann@xilinx.com> 7 * 8 * This program is free software: you can redistribute it and/or modify --- 7 unchanged lines hidden (view full) --- 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program. If not, see <http://www.gnu.org/licenses/>. 19 */ 20 21#include <linux/clk/zynq.h> 22#include <linux/clk-provider.h> 23#include <linux/of.h> |
24#include <linux/of_address.h> |
|
24#include <linux/slab.h> 25#include <linux/string.h> 26#include <linux/io.h> 27 | 25#include <linux/slab.h> 26#include <linux/string.h> 27#include <linux/io.h> 28 |
28static void __iomem *zynq_slcr_base_priv; | 29static void __iomem *zynq_clkc_base; |
29 | 30 |
30#define SLCR_ARMPLL_CTRL (zynq_slcr_base_priv + 0x100) 31#define SLCR_DDRPLL_CTRL (zynq_slcr_base_priv + 0x104) 32#define SLCR_IOPLL_CTRL (zynq_slcr_base_priv + 0x108) 33#define SLCR_PLL_STATUS (zynq_slcr_base_priv + 0x10c) 34#define SLCR_ARM_CLK_CTRL (zynq_slcr_base_priv + 0x120) 35#define SLCR_DDR_CLK_CTRL (zynq_slcr_base_priv + 0x124) 36#define SLCR_DCI_CLK_CTRL (zynq_slcr_base_priv + 0x128) 37#define SLCR_APER_CLK_CTRL (zynq_slcr_base_priv + 0x12c) 38#define SLCR_GEM0_CLK_CTRL (zynq_slcr_base_priv + 0x140) 39#define SLCR_GEM1_CLK_CTRL (zynq_slcr_base_priv + 0x144) 40#define SLCR_SMC_CLK_CTRL (zynq_slcr_base_priv + 0x148) 41#define SLCR_LQSPI_CLK_CTRL (zynq_slcr_base_priv + 0x14c) 42#define SLCR_SDIO_CLK_CTRL (zynq_slcr_base_priv + 0x150) 43#define SLCR_UART_CLK_CTRL (zynq_slcr_base_priv + 0x154) 44#define SLCR_SPI_CLK_CTRL (zynq_slcr_base_priv + 0x158) 45#define SLCR_CAN_CLK_CTRL (zynq_slcr_base_priv + 0x15c) 46#define SLCR_CAN_MIOCLK_CTRL (zynq_slcr_base_priv + 0x160) 47#define SLCR_DBG_CLK_CTRL (zynq_slcr_base_priv + 0x164) 48#define SLCR_PCAP_CLK_CTRL (zynq_slcr_base_priv + 0x168) 49#define SLCR_FPGA0_CLK_CTRL (zynq_slcr_base_priv + 0x170) 50#define SLCR_621_TRUE (zynq_slcr_base_priv + 0x1c4) 51#define SLCR_SWDT_CLK_SEL (zynq_slcr_base_priv + 0x304) | 31#define SLCR_ARMPLL_CTRL (zynq_clkc_base + 0x00) 32#define SLCR_DDRPLL_CTRL (zynq_clkc_base + 0x04) 33#define SLCR_IOPLL_CTRL (zynq_clkc_base + 0x08) 34#define SLCR_PLL_STATUS (zynq_clkc_base + 0x0c) 35#define SLCR_ARM_CLK_CTRL (zynq_clkc_base + 0x20) 36#define SLCR_DDR_CLK_CTRL (zynq_clkc_base + 0x24) 37#define SLCR_DCI_CLK_CTRL (zynq_clkc_base + 0x28) 38#define SLCR_APER_CLK_CTRL (zynq_clkc_base + 0x2c) 39#define SLCR_GEM0_CLK_CTRL (zynq_clkc_base + 0x40) 40#define SLCR_GEM1_CLK_CTRL (zynq_clkc_base + 0x44) 41#define SLCR_SMC_CLK_CTRL (zynq_clkc_base + 0x48) 42#define SLCR_LQSPI_CLK_CTRL (zynq_clkc_base + 0x4c) 43#define SLCR_SDIO_CLK_CTRL (zynq_clkc_base + 0x50) 44#define SLCR_UART_CLK_CTRL (zynq_clkc_base + 0x54) 45#define SLCR_SPI_CLK_CTRL (zynq_clkc_base + 0x58) 46#define SLCR_CAN_CLK_CTRL (zynq_clkc_base + 0x5c) 47#define SLCR_CAN_MIOCLK_CTRL (zynq_clkc_base + 0x60) 48#define SLCR_DBG_CLK_CTRL (zynq_clkc_base + 0x64) 49#define SLCR_PCAP_CLK_CTRL (zynq_clkc_base + 0x68) 50#define SLCR_FPGA0_CLK_CTRL (zynq_clkc_base + 0x70) 51#define SLCR_621_TRUE (zynq_clkc_base + 0xc4) 52#define SLCR_SWDT_CLK_SEL (zynq_clkc_base + 0x204) |
52 53#define NUM_MIO_PINS 54 54 55enum zynq_clk { 56 armpll, ddrpll, iopll, 57 cpu_6or4x, cpu_3or2x, cpu_2x, cpu_1x, 58 ddr2x, ddr3x, dci, 59 lqspi, smc, pcap, gem0, gem1, fclk0, fclk1, fclk2, fclk3, can0, can1, --- 504 unchanged lines hidden (view full) --- 564 565 clk_data.clks = clks; 566 clk_data.clk_num = ARRAY_SIZE(clks); 567 of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data); 568} 569 570CLK_OF_DECLARE(zynq_clkc, "xlnx,ps7-clkc", zynq_clk_setup); 571 | 53 54#define NUM_MIO_PINS 54 55 56enum zynq_clk { 57 armpll, ddrpll, iopll, 58 cpu_6or4x, cpu_3or2x, cpu_2x, cpu_1x, 59 ddr2x, ddr3x, dci, 60 lqspi, smc, pcap, gem0, gem1, fclk0, fclk1, fclk2, fclk3, can0, can1, --- 504 unchanged lines hidden (view full) --- 565 566 clk_data.clks = clks; 567 clk_data.clk_num = ARRAY_SIZE(clks); 568 of_clk_add_provider(np, of_clk_src_onecell_get, &clk_data); 569} 570 571CLK_OF_DECLARE(zynq_clkc, "xlnx,ps7-clkc", zynq_clk_setup); 572 |
572void __init zynq_clock_init(void __iomem *slcr_base) | 573void __init zynq_clock_init(void) |
573{ | 574{ |
574 zynq_slcr_base_priv = slcr_base; | 575 struct device_node *np; 576 struct device_node *slcr; 577 struct resource res; 578 579 np = of_find_compatible_node(NULL, NULL, "xlnx,ps7-clkc"); 580 if (!np) { 581 pr_err("%s: clkc node not found\n", __func__); 582 goto np_err; 583 } 584 585 if (of_address_to_resource(np, 0, &res)) { 586 pr_err("%s: failed to get resource\n", np->name); 587 goto np_err; 588 } 589 590 slcr = of_get_parent(np); 591 592 if (slcr->data) { 593 zynq_clkc_base = (__force void __iomem *)slcr->data + res.start; 594 } else { 595 pr_err("%s: Unable to get I/O memory\n", np->name); 596 of_node_put(slcr); 597 goto np_err; 598 } 599 600 pr_info("%s: clkc starts at %p\n", __func__, zynq_clkc_base); 601 602 of_node_put(slcr); 603 of_node_put(np); 604 |
575 of_clk_init(NULL); | 605 of_clk_init(NULL); |
606 607 return; 608 609np_err: 610 of_node_put(np); 611 BUG(); 612 return; |
|
576} | 613} |