162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#ifndef __MB862XX_H__ 362306a36Sopenharmony_ci#define __MB862XX_H__ 462306a36Sopenharmony_ci 562306a36Sopenharmony_cistruct mb862xx_l1_cfg { 662306a36Sopenharmony_ci unsigned short sx; 762306a36Sopenharmony_ci unsigned short sy; 862306a36Sopenharmony_ci unsigned short sw; 962306a36Sopenharmony_ci unsigned short sh; 1062306a36Sopenharmony_ci unsigned short dx; 1162306a36Sopenharmony_ci unsigned short dy; 1262306a36Sopenharmony_ci unsigned short dw; 1362306a36Sopenharmony_ci unsigned short dh; 1462306a36Sopenharmony_ci int mirror; 1562306a36Sopenharmony_ci}; 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_ci#define MB862XX_BASE 'M' 1862306a36Sopenharmony_ci#define MB862XX_L1_GET_CFG _IOR(MB862XX_BASE, 0, struct mb862xx_l1_cfg*) 1962306a36Sopenharmony_ci#define MB862XX_L1_SET_CFG _IOW(MB862XX_BASE, 1, struct mb862xx_l1_cfg*) 2062306a36Sopenharmony_ci#define MB862XX_L1_ENABLE _IOW(MB862XX_BASE, 2, int) 2162306a36Sopenharmony_ci#define MB862XX_L1_CAP_CTL _IOW(MB862XX_BASE, 3, int) 2262306a36Sopenharmony_ci 2362306a36Sopenharmony_ci#ifdef __KERNEL__ 2462306a36Sopenharmony_ci 2562306a36Sopenharmony_ci#define PCI_VENDOR_ID_FUJITSU_LIMITED 0x10cf 2662306a36Sopenharmony_ci#define PCI_DEVICE_ID_FUJITSU_CORALP 0x2019 2762306a36Sopenharmony_ci#define PCI_DEVICE_ID_FUJITSU_CORALPA 0x201e 2862306a36Sopenharmony_ci#define PCI_DEVICE_ID_FUJITSU_CARMINE 0x202b 2962306a36Sopenharmony_ci 3062306a36Sopenharmony_ci#define GC_MMR_CORALP_EVB_VAL 0x11d7fa13 3162306a36Sopenharmony_ci 3262306a36Sopenharmony_cienum gdctype { 3362306a36Sopenharmony_ci BT_NONE, 3462306a36Sopenharmony_ci BT_LIME, 3562306a36Sopenharmony_ci BT_MINT, 3662306a36Sopenharmony_ci BT_CORAL, 3762306a36Sopenharmony_ci BT_CORALP, 3862306a36Sopenharmony_ci BT_CARMINE, 3962306a36Sopenharmony_ci}; 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_cistruct mb862xx_gc_mode { 4262306a36Sopenharmony_ci struct fb_videomode def_mode; /* mode of connected display */ 4362306a36Sopenharmony_ci unsigned int def_bpp; /* default depth */ 4462306a36Sopenharmony_ci unsigned long max_vram; /* connected SDRAM size */ 4562306a36Sopenharmony_ci unsigned long ccf; /* gdc clk */ 4662306a36Sopenharmony_ci unsigned long mmr; /* memory mode for SDRAM */ 4762306a36Sopenharmony_ci}; 4862306a36Sopenharmony_ci 4962306a36Sopenharmony_ci/* private data */ 5062306a36Sopenharmony_cistruct mb862xxfb_par { 5162306a36Sopenharmony_ci struct fb_info *info; /* fb info head */ 5262306a36Sopenharmony_ci struct device *dev; 5362306a36Sopenharmony_ci struct pci_dev *pdev; 5462306a36Sopenharmony_ci struct resource *res; /* framebuffer/mmio resource */ 5562306a36Sopenharmony_ci 5662306a36Sopenharmony_ci resource_size_t fb_base_phys; /* fb base, 36-bit PPC440EPx */ 5762306a36Sopenharmony_ci resource_size_t mmio_base_phys; /* io base addr */ 5862306a36Sopenharmony_ci void __iomem *fb_base; /* remapped framebuffer */ 5962306a36Sopenharmony_ci void __iomem *mmio_base; /* remapped registers */ 6062306a36Sopenharmony_ci size_t mapped_vram; /* length of remapped vram */ 6162306a36Sopenharmony_ci size_t mmio_len; /* length of register region */ 6262306a36Sopenharmony_ci unsigned long cap_buf; /* capture buffers offset */ 6362306a36Sopenharmony_ci size_t cap_len; /* length of capture buffers */ 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ci void __iomem *host; /* relocatable reg. bases */ 6662306a36Sopenharmony_ci void __iomem *i2c; 6762306a36Sopenharmony_ci void __iomem *disp; 6862306a36Sopenharmony_ci void __iomem *disp1; 6962306a36Sopenharmony_ci void __iomem *cap; 7062306a36Sopenharmony_ci void __iomem *cap1; 7162306a36Sopenharmony_ci void __iomem *draw; 7262306a36Sopenharmony_ci void __iomem *geo; 7362306a36Sopenharmony_ci void __iomem *pio; 7462306a36Sopenharmony_ci void __iomem *ctrl; 7562306a36Sopenharmony_ci void __iomem *dram_ctrl; 7662306a36Sopenharmony_ci void __iomem *wrback; 7762306a36Sopenharmony_ci 7862306a36Sopenharmony_ci unsigned int irq; 7962306a36Sopenharmony_ci unsigned int type; /* GDC type */ 8062306a36Sopenharmony_ci unsigned int refclk; /* disp. reference clock */ 8162306a36Sopenharmony_ci struct mb862xx_gc_mode *gc_mode; /* GDC mode init data */ 8262306a36Sopenharmony_ci int pre_init; /* don't init display if 1 */ 8362306a36Sopenharmony_ci struct i2c_adapter *adap; /* GDC I2C bus adapter */ 8462306a36Sopenharmony_ci int i2c_rs; 8562306a36Sopenharmony_ci 8662306a36Sopenharmony_ci struct mb862xx_l1_cfg l1_cfg; 8762306a36Sopenharmony_ci int l1_stride; 8862306a36Sopenharmony_ci 8962306a36Sopenharmony_ci u32 pseudo_palette[16]; 9062306a36Sopenharmony_ci}; 9162306a36Sopenharmony_ci 9262306a36Sopenharmony_ciextern void mb862xxfb_init_accel(struct fb_info *info, struct fb_ops *fbops, int xres); 9362306a36Sopenharmony_ci#ifdef CONFIG_FB_MB862XX_I2C 9462306a36Sopenharmony_ciextern int mb862xx_i2c_init(struct mb862xxfb_par *par); 9562306a36Sopenharmony_ciextern void mb862xx_i2c_exit(struct mb862xxfb_par *par); 9662306a36Sopenharmony_ci#else 9762306a36Sopenharmony_cistatic inline int mb862xx_i2c_init(struct mb862xxfb_par *par) { return 0; } 9862306a36Sopenharmony_cistatic inline void mb862xx_i2c_exit(struct mb862xxfb_par *par) { } 9962306a36Sopenharmony_ci#endif 10062306a36Sopenharmony_ci 10162306a36Sopenharmony_ci#if defined(CONFIG_FB_MB862XX_LIME) && defined(CONFIG_FB_MB862XX_PCI_GDC) 10262306a36Sopenharmony_ci#error "Select Lime GDC or CoralP/Carmine support, but not both together" 10362306a36Sopenharmony_ci#endif 10462306a36Sopenharmony_ci#if defined(CONFIG_FB_MB862XX_LIME) 10562306a36Sopenharmony_ci#define gdc_read __raw_readl 10662306a36Sopenharmony_ci#define gdc_write __raw_writel 10762306a36Sopenharmony_ci#else 10862306a36Sopenharmony_ci#define gdc_read readl 10962306a36Sopenharmony_ci#define gdc_write writel 11062306a36Sopenharmony_ci#endif 11162306a36Sopenharmony_ci 11262306a36Sopenharmony_ci#define inreg(type, off) \ 11362306a36Sopenharmony_ci gdc_read((par->type + (off))) 11462306a36Sopenharmony_ci 11562306a36Sopenharmony_ci#define outreg(type, off, val) \ 11662306a36Sopenharmony_ci gdc_write((val), (par->type + (off))) 11762306a36Sopenharmony_ci 11862306a36Sopenharmony_ci#define pack(a, b) (((a) << 16) | (b)) 11962306a36Sopenharmony_ci 12062306a36Sopenharmony_ci#endif /* __KERNEL__ */ 12162306a36Sopenharmony_ci 12262306a36Sopenharmony_ci#endif 123