52 lines · c
1/* SPDX-License-Identifier: GPL-2.0 */2/************************************************************************3File : Clock H/w specific Information4 5Author: Pankaj Dev <pankaj.dev@st.com>6 7Copyright (C) 2014 STMicroelectronics8************************************************************************/9 10#ifndef __CLKGEN_INFO_H11#define __CLKGEN_INFO_H12 13extern spinlock_t clkgen_a9_lock;14 15struct clkgen_field {16 unsigned int offset;17 unsigned int mask;18 unsigned int shift;19};20 21static inline unsigned long clkgen_read(void __iomem *base,22 struct clkgen_field *field)23{24 return (readl(base + field->offset) >> field->shift) & field->mask;25}26 27 28static inline void clkgen_write(void __iomem *base, struct clkgen_field *field,29 unsigned long val)30{31 writel((readl(base + field->offset) &32 ~(field->mask << field->shift)) | (val << field->shift),33 base + field->offset);34 35 return;36}37 38#define CLKGEN_FIELD(_offset, _mask, _shift) { \39 .offset = _offset, \40 .mask = _mask, \41 .shift = _shift, \42 }43 44#define CLKGEN_READ(pll, field) clkgen_read(pll->regs_base, \45 &pll->data->field)46 47#define CLKGEN_WRITE(pll, field, val) clkgen_write(pll->regs_base, \48 &pll->data->field, val)49 50#endif /*__CLKGEN_INFO_H*/51 52