1/* SPDX-License-Identifier: GPL-2.0+ */ 2/* 3 * Copyright (C) 2023 Loongson Technology Corporation Limited 4 */ 5 6#ifndef __LSDC_GFXPLL_H__ 7#define __LSDC_GFXPLL_H__ 8 9#include <drm/drm_device.h> 10 11struct loongson_gfxpll; 12 13struct loongson_gfxpll_parms { 14 unsigned int ref_clock; 15 unsigned int div_ref; 16 unsigned int loopc; 17 unsigned int div_out_dc; 18 unsigned int div_out_gmc; 19 unsigned int div_out_gpu; 20}; 21 22struct loongson_gfxpll_funcs { 23 int (*init)(struct loongson_gfxpll * const this); 24 25 int (*update)(struct loongson_gfxpll * const this, 26 struct loongson_gfxpll_parms const *pin); 27 28 void (*get_rates)(struct loongson_gfxpll * const this, 29 unsigned int *dc, unsigned int *gmc, unsigned int *gpu); 30 31 void (*print)(struct loongson_gfxpll * const this, 32 struct drm_printer *printer, bool verbose); 33}; 34 35struct loongson_gfxpll { 36 struct drm_device *ddev; 37 void __iomem *mmio; 38 39 /* PLL register offset */ 40 u32 reg_base; 41 /* PLL register size in bytes */ 42 u32 reg_size; 43 44 const struct loongson_gfxpll_funcs *funcs; 45 46 struct loongson_gfxpll_parms parms; 47}; 48 49int loongson_gfxpll_create(struct drm_device *ddev, 50 struct loongson_gfxpll **ppout); 51 52#endif 53