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 11 struct loongson_gfxpll; 12 13 struct 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 22 struct 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 35 struct 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 49 int loongson_gfxpll_create(struct drm_device *ddev, 50 struct loongson_gfxpll **ppout); 51 52 #endif 53