162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/************************************************************************ 362306a36Sopenharmony_ciFile : Clock H/w specific Information 462306a36Sopenharmony_ci 562306a36Sopenharmony_ciAuthor: Pankaj Dev <pankaj.dev@st.com> 662306a36Sopenharmony_ci 762306a36Sopenharmony_ciCopyright (C) 2014 STMicroelectronics 862306a36Sopenharmony_ci************************************************************************/ 962306a36Sopenharmony_ci 1062306a36Sopenharmony_ci#ifndef __CLKGEN_INFO_H 1162306a36Sopenharmony_ci#define __CLKGEN_INFO_H 1262306a36Sopenharmony_ci 1362306a36Sopenharmony_ciextern spinlock_t clkgen_a9_lock; 1462306a36Sopenharmony_ci 1562306a36Sopenharmony_cistruct clkgen_field { 1662306a36Sopenharmony_ci unsigned int offset; 1762306a36Sopenharmony_ci unsigned int mask; 1862306a36Sopenharmony_ci unsigned int shift; 1962306a36Sopenharmony_ci}; 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_cistatic inline unsigned long clkgen_read(void __iomem *base, 2262306a36Sopenharmony_ci struct clkgen_field *field) 2362306a36Sopenharmony_ci{ 2462306a36Sopenharmony_ci return (readl(base + field->offset) >> field->shift) & field->mask; 2562306a36Sopenharmony_ci} 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_cistatic inline void clkgen_write(void __iomem *base, struct clkgen_field *field, 2962306a36Sopenharmony_ci unsigned long val) 3062306a36Sopenharmony_ci{ 3162306a36Sopenharmony_ci writel((readl(base + field->offset) & 3262306a36Sopenharmony_ci ~(field->mask << field->shift)) | (val << field->shift), 3362306a36Sopenharmony_ci base + field->offset); 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci return; 3662306a36Sopenharmony_ci} 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_ci#define CLKGEN_FIELD(_offset, _mask, _shift) { \ 3962306a36Sopenharmony_ci .offset = _offset, \ 4062306a36Sopenharmony_ci .mask = _mask, \ 4162306a36Sopenharmony_ci .shift = _shift, \ 4262306a36Sopenharmony_ci } 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci#define CLKGEN_READ(pll, field) clkgen_read(pll->regs_base, \ 4562306a36Sopenharmony_ci &pll->data->field) 4662306a36Sopenharmony_ci 4762306a36Sopenharmony_ci#define CLKGEN_WRITE(pll, field, val) clkgen_write(pll->regs_base, \ 4862306a36Sopenharmony_ci &pll->data->field, val) 4962306a36Sopenharmony_ci 5062306a36Sopenharmony_ci#endif /*__CLKGEN_INFO_H*/ 5162306a36Sopenharmony_ci 52