1 // SPDX-License-Identifier: GPL-2.0+ 2 /* 3 * Copyright (C) 2023 Loongson Technology Corporation Limited 4 */ 5 6 #include <linux/pci.h> 7 8 #include "lsdc_drv.h" 9 10 static const struct lsdc_kms_funcs ls7a1000_kms_funcs = { 11 .create_i2c = lsdc_create_i2c_chan, 12 .irq_handler = ls7a1000_dc_irq_handler, 13 .output_init = ls7a1000_output_init, 14 .cursor_plane_init = ls7a1000_cursor_plane_init, 15 .primary_plane_init = lsdc_primary_plane_init, 16 .crtc_init = ls7a1000_crtc_init, 17 }; 18 19 static const struct lsdc_kms_funcs ls7a2000_kms_funcs = { 20 .create_i2c = lsdc_create_i2c_chan, 21 .irq_handler = ls7a2000_dc_irq_handler, 22 .output_init = ls7a2000_output_init, 23 .cursor_plane_init = ls7a2000_cursor_plane_init, 24 .primary_plane_init = lsdc_primary_plane_init, 25 .crtc_init = ls7a2000_crtc_init, 26 }; 27 28 static const struct loongson_gfx_desc ls7a1000_gfx = { 29 .dc = { 30 .num_of_crtc = 2, 31 .max_pixel_clk = 200000, 32 .max_width = 2048, 33 .max_height = 2048, 34 .num_of_hw_cursor = 1, 35 .hw_cursor_w = 32, 36 .hw_cursor_h = 32, 37 .pitch_align = 256, 38 .has_vblank_counter = false, 39 .funcs = &ls7a1000_kms_funcs, 40 }, 41 .conf_reg_base = LS7A1000_CONF_REG_BASE, 42 .gfxpll = { 43 .reg_offset = LS7A1000_PLL_GFX_REG, 44 .reg_size = 8, 45 }, 46 .pixpll = { 47 [0] = { 48 .reg_offset = LS7A1000_PIXPLL0_REG, 49 .reg_size = 8, 50 }, 51 [1] = { 52 .reg_offset = LS7A1000_PIXPLL1_REG, 53 .reg_size = 8, 54 }, 55 }, 56 .chip_id = CHIP_LS7A1000, 57 .model = "LS7A1000 bridge chipset", 58 }; 59 60 static const struct loongson_gfx_desc ls7a2000_gfx = { 61 .dc = { 62 .num_of_crtc = 2, 63 .max_pixel_clk = 350000, 64 .max_width = 4096, 65 .max_height = 4096, 66 .num_of_hw_cursor = 2, 67 .hw_cursor_w = 64, 68 .hw_cursor_h = 64, 69 .pitch_align = 64, 70 .has_vblank_counter = true, 71 .funcs = &ls7a2000_kms_funcs, 72 }, 73 .conf_reg_base = LS7A2000_CONF_REG_BASE, 74 .gfxpll = { 75 .reg_offset = LS7A2000_PLL_GFX_REG, 76 .reg_size = 8, 77 }, 78 .pixpll = { 79 [0] = { 80 .reg_offset = LS7A2000_PIXPLL0_REG, 81 .reg_size = 8, 82 }, 83 [1] = { 84 .reg_offset = LS7A2000_PIXPLL1_REG, 85 .reg_size = 8, 86 }, 87 }, 88 .chip_id = CHIP_LS7A2000, 89 .model = "LS7A2000 bridge chipset", 90 }; 91 92 static const struct lsdc_desc *__chip_id_desc_table[] = { 93 [CHIP_LS7A1000] = &ls7a1000_gfx.dc, 94 [CHIP_LS7A2000] = &ls7a2000_gfx.dc, 95 [CHIP_LS_LAST] = NULL, 96 }; 97 98 const struct lsdc_desc * 99 lsdc_device_probe(struct pci_dev *pdev, enum loongson_chip_id chip_id) 100 { 101 return __chip_id_desc_table[chip_id]; 102 } 103