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 ---