162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0+ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright (C) 2023 Loongson Technology Corporation Limited 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#include <linux/pci.h> 762306a36Sopenharmony_ci 862306a36Sopenharmony_ci#include "lsdc_drv.h" 962306a36Sopenharmony_ci 1062306a36Sopenharmony_cistatic const struct lsdc_kms_funcs ls7a1000_kms_funcs = { 1162306a36Sopenharmony_ci .create_i2c = lsdc_create_i2c_chan, 1262306a36Sopenharmony_ci .irq_handler = ls7a1000_dc_irq_handler, 1362306a36Sopenharmony_ci .output_init = ls7a1000_output_init, 1462306a36Sopenharmony_ci .cursor_plane_init = ls7a1000_cursor_plane_init, 1562306a36Sopenharmony_ci .primary_plane_init = lsdc_primary_plane_init, 1662306a36Sopenharmony_ci .crtc_init = ls7a1000_crtc_init, 1762306a36Sopenharmony_ci}; 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_cistatic const struct lsdc_kms_funcs ls7a2000_kms_funcs = { 2062306a36Sopenharmony_ci .create_i2c = lsdc_create_i2c_chan, 2162306a36Sopenharmony_ci .irq_handler = ls7a2000_dc_irq_handler, 2262306a36Sopenharmony_ci .output_init = ls7a2000_output_init, 2362306a36Sopenharmony_ci .cursor_plane_init = ls7a2000_cursor_plane_init, 2462306a36Sopenharmony_ci .primary_plane_init = lsdc_primary_plane_init, 2562306a36Sopenharmony_ci .crtc_init = ls7a2000_crtc_init, 2662306a36Sopenharmony_ci}; 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_cistatic const struct loongson_gfx_desc ls7a1000_gfx = { 2962306a36Sopenharmony_ci .dc = { 3062306a36Sopenharmony_ci .num_of_crtc = 2, 3162306a36Sopenharmony_ci .max_pixel_clk = 200000, 3262306a36Sopenharmony_ci .max_width = 2048, 3362306a36Sopenharmony_ci .max_height = 2048, 3462306a36Sopenharmony_ci .num_of_hw_cursor = 1, 3562306a36Sopenharmony_ci .hw_cursor_w = 32, 3662306a36Sopenharmony_ci .hw_cursor_h = 32, 3762306a36Sopenharmony_ci .pitch_align = 256, 3862306a36Sopenharmony_ci .has_vblank_counter = false, 3962306a36Sopenharmony_ci .funcs = &ls7a1000_kms_funcs, 4062306a36Sopenharmony_ci }, 4162306a36Sopenharmony_ci .conf_reg_base = LS7A1000_CONF_REG_BASE, 4262306a36Sopenharmony_ci .gfxpll = { 4362306a36Sopenharmony_ci .reg_offset = LS7A1000_PLL_GFX_REG, 4462306a36Sopenharmony_ci .reg_size = 8, 4562306a36Sopenharmony_ci }, 4662306a36Sopenharmony_ci .pixpll = { 4762306a36Sopenharmony_ci [0] = { 4862306a36Sopenharmony_ci .reg_offset = LS7A1000_PIXPLL0_REG, 4962306a36Sopenharmony_ci .reg_size = 8, 5062306a36Sopenharmony_ci }, 5162306a36Sopenharmony_ci [1] = { 5262306a36Sopenharmony_ci .reg_offset = LS7A1000_PIXPLL1_REG, 5362306a36Sopenharmony_ci .reg_size = 8, 5462306a36Sopenharmony_ci }, 5562306a36Sopenharmony_ci }, 5662306a36Sopenharmony_ci .chip_id = CHIP_LS7A1000, 5762306a36Sopenharmony_ci .model = "LS7A1000 bridge chipset", 5862306a36Sopenharmony_ci}; 5962306a36Sopenharmony_ci 6062306a36Sopenharmony_cistatic const struct loongson_gfx_desc ls7a2000_gfx = { 6162306a36Sopenharmony_ci .dc = { 6262306a36Sopenharmony_ci .num_of_crtc = 2, 6362306a36Sopenharmony_ci .max_pixel_clk = 350000, 6462306a36Sopenharmony_ci .max_width = 4096, 6562306a36Sopenharmony_ci .max_height = 4096, 6662306a36Sopenharmony_ci .num_of_hw_cursor = 2, 6762306a36Sopenharmony_ci .hw_cursor_w = 64, 6862306a36Sopenharmony_ci .hw_cursor_h = 64, 6962306a36Sopenharmony_ci .pitch_align = 64, 7062306a36Sopenharmony_ci .has_vblank_counter = true, 7162306a36Sopenharmony_ci .funcs = &ls7a2000_kms_funcs, 7262306a36Sopenharmony_ci }, 7362306a36Sopenharmony_ci .conf_reg_base = LS7A2000_CONF_REG_BASE, 7462306a36Sopenharmony_ci .gfxpll = { 7562306a36Sopenharmony_ci .reg_offset = LS7A2000_PLL_GFX_REG, 7662306a36Sopenharmony_ci .reg_size = 8, 7762306a36Sopenharmony_ci }, 7862306a36Sopenharmony_ci .pixpll = { 7962306a36Sopenharmony_ci [0] = { 8062306a36Sopenharmony_ci .reg_offset = LS7A2000_PIXPLL0_REG, 8162306a36Sopenharmony_ci .reg_size = 8, 8262306a36Sopenharmony_ci }, 8362306a36Sopenharmony_ci [1] = { 8462306a36Sopenharmony_ci .reg_offset = LS7A2000_PIXPLL1_REG, 8562306a36Sopenharmony_ci .reg_size = 8, 8662306a36Sopenharmony_ci }, 8762306a36Sopenharmony_ci }, 8862306a36Sopenharmony_ci .chip_id = CHIP_LS7A2000, 8962306a36Sopenharmony_ci .model = "LS7A2000 bridge chipset", 9062306a36Sopenharmony_ci}; 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_cistatic const struct lsdc_desc *__chip_id_desc_table[] = { 9362306a36Sopenharmony_ci [CHIP_LS7A1000] = &ls7a1000_gfx.dc, 9462306a36Sopenharmony_ci [CHIP_LS7A2000] = &ls7a2000_gfx.dc, 9562306a36Sopenharmony_ci [CHIP_LS_LAST] = NULL, 9662306a36Sopenharmony_ci}; 9762306a36Sopenharmony_ci 9862306a36Sopenharmony_ciconst struct lsdc_desc * 9962306a36Sopenharmony_cilsdc_device_probe(struct pci_dev *pdev, enum loongson_chip_id chip_id) 10062306a36Sopenharmony_ci{ 10162306a36Sopenharmony_ci return __chip_id_desc_table[chip_id]; 10262306a36Sopenharmony_ci} 103