sifive-prci.c (b7f8f259896f669f131713b0c74ba4d008daa71d) | sifive-prci.c (c61287bf17836b67e0b649343778bb4a659bd70d) |
---|---|
1// SPDX-License-Identifier: GPL-2.0 2/* 3 * Copyright (C) 2020 SiFive, Inc. 4 * Copyright (C) 2020 Zong Li 5 */ 6 7#include <linux/clkdev.h> 8#include <linux/delay.h> --- 439 unchanged lines hidden (view full) --- 448 449 r = __prci_readl(pd, PRCI_HFPCLKPLLSEL_OFFSET); 450 r &= ~PRCI_HFPCLKPLLSEL_HFPCLKPLLSEL_MASK; 451 __prci_writel(r, PRCI_HFPCLKPLLSEL_OFFSET, pd); 452 453 r = __prci_readl(pd, PRCI_HFPCLKPLLSEL_OFFSET); /* barrier */ 454} 455 | 1// SPDX-License-Identifier: GPL-2.0 2/* 3 * Copyright (C) 2020 SiFive, Inc. 4 * Copyright (C) 2020 Zong Li 5 */ 6 7#include <linux/clkdev.h> 8#include <linux/delay.h> --- 439 unchanged lines hidden (view full) --- 448 449 r = __prci_readl(pd, PRCI_HFPCLKPLLSEL_OFFSET); 450 r &= ~PRCI_HFPCLKPLLSEL_HFPCLKPLLSEL_MASK; 451 __prci_writel(r, PRCI_HFPCLKPLLSEL_OFFSET, pd); 452 453 r = __prci_readl(pd, PRCI_HFPCLKPLLSEL_OFFSET); /* barrier */ 454} 455 |
456/* PCIE AUX clock APIs for enable, disable. */ 457int sifive_prci_pcie_aux_clock_is_enabled(struct clk_hw *hw) 458{ 459 struct __prci_clock *pc = clk_hw_to_prci_clock(hw); 460 struct __prci_data *pd = pc->pd; 461 u32 r; 462 463 r = __prci_readl(pd, PRCI_PCIE_AUX_OFFSET); 464 465 if (r & PRCI_PCIE_AUX_EN_MASK) 466 return 1; 467 else 468 return 0; 469} 470 471int sifive_prci_pcie_aux_clock_enable(struct clk_hw *hw) 472{ 473 struct __prci_clock *pc = clk_hw_to_prci_clock(hw); 474 struct __prci_data *pd = pc->pd; 475 u32 r __maybe_unused; 476 477 if (sifive_prci_pcie_aux_clock_is_enabled(hw)) 478 return 0; 479 480 __prci_writel(1, PRCI_PCIE_AUX_OFFSET, pd); 481 r = __prci_readl(pd, PRCI_PCIE_AUX_OFFSET); /* barrier */ 482 483 return 0; 484} 485 486void sifive_prci_pcie_aux_clock_disable(struct clk_hw *hw) 487{ 488 struct __prci_clock *pc = clk_hw_to_prci_clock(hw); 489 struct __prci_data *pd = pc->pd; 490 u32 r __maybe_unused; 491 492 __prci_writel(0, PRCI_PCIE_AUX_OFFSET, pd); 493 r = __prci_readl(pd, PRCI_PCIE_AUX_OFFSET); /* barrier */ 494 495} 496 |
|
456/** 457 * __prci_register_clocks() - register clock controls in the PRCI 458 * @dev: Linux struct device 459 * @pd: The pointer for PRCI per-device instance data 460 * @desc: The pointer for the information of clocks of each SoCs 461 * 462 * Register the list of clock controls described in __prci_init_clocks[] with 463 * the Linux clock framework. --- 116 unchanged lines hidden --- | 497/** 498 * __prci_register_clocks() - register clock controls in the PRCI 499 * @dev: Linux struct device 500 * @pd: The pointer for PRCI per-device instance data 501 * @desc: The pointer for the information of clocks of each SoCs 502 * 503 * Register the list of clock controls described in __prci_init_clocks[] with 504 * the Linux clock framework. --- 116 unchanged lines hidden --- |