cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

psb_intel_drv.h (8364B)


      1/* SPDX-License-Identifier: GPL-2.0-only */
      2/*
      3 * Copyright (c) 2009-2011, Intel Corporation.
      4 */
      5
      6#ifndef __INTEL_DRV_H__
      7#define __INTEL_DRV_H__
      8
      9#include <linux/i2c.h>
     10#include <linux/i2c-algo-bit.h>
     11#include <drm/drm_crtc.h>
     12#include <drm/drm_crtc_helper.h>
     13#include <drm/drm_encoder.h>
     14#include <drm/drm_probe_helper.h>
     15#include <drm/drm_vblank.h>
     16#include "gma_display.h"
     17
     18/*
     19 * Display related stuff
     20 */
     21
     22/* maximum connectors per crtcs in the mode set */
     23#define INTELFB_CONN_LIMIT 4
     24
     25/* Intel Pipe Clone Bit */
     26#define INTEL_HDMIB_CLONE_BIT 1
     27#define INTEL_HDMIC_CLONE_BIT 2
     28#define INTEL_HDMID_CLONE_BIT 3
     29#define INTEL_HDMIE_CLONE_BIT 4
     30#define INTEL_HDMIF_CLONE_BIT 5
     31#define INTEL_SDVO_NON_TV_CLONE_BIT 6
     32#define INTEL_SDVO_TV_CLONE_BIT 7
     33#define INTEL_SDVO_LVDS_CLONE_BIT 8
     34#define INTEL_ANALOG_CLONE_BIT 9
     35#define INTEL_TV_CLONE_BIT 10
     36#define INTEL_DP_B_CLONE_BIT 11
     37#define INTEL_DP_C_CLONE_BIT 12
     38#define INTEL_DP_D_CLONE_BIT 13
     39#define INTEL_LVDS_CLONE_BIT 14
     40#define INTEL_DVO_TMDS_CLONE_BIT 15
     41#define INTEL_DVO_LVDS_CLONE_BIT 16
     42#define INTEL_EDP_CLONE_BIT 17
     43
     44/* these are outputs from the chip - integrated only
     45 * external chips are via DVO or SDVO output */
     46#define INTEL_OUTPUT_UNUSED 0
     47#define INTEL_OUTPUT_ANALOG 1
     48#define INTEL_OUTPUT_DVO 2
     49#define INTEL_OUTPUT_SDVO 3
     50#define INTEL_OUTPUT_LVDS 4
     51#define INTEL_OUTPUT_TVOUT 5
     52#define INTEL_OUTPUT_HDMI 6
     53#define INTEL_OUTPUT_MIPI 7
     54#define INTEL_OUTPUT_MIPI2 8
     55#define INTEL_OUTPUT_DISPLAYPORT 9
     56#define INTEL_OUTPUT_EDP 10
     57
     58/*
     59 * Hold information useally put on the device driver privates here,
     60 * since it needs to be shared across multiple of devices drivers privates.
     61 */
     62struct psb_intel_mode_device {
     63
     64	/*
     65	 * Abstracted memory manager operations
     66	 */
     67	 size_t(*bo_offset) (struct drm_device *dev, void *bo);
     68
     69	/*
     70	 * LVDS info
     71	 */
     72	int backlight_duty_cycle;	/* restore backlight to this value */
     73	bool panel_wants_dither;
     74	struct drm_display_mode *panel_fixed_mode;
     75	struct drm_display_mode *panel_fixed_mode2;
     76	struct drm_display_mode *vbt_mode;	/* if any */
     77
     78	uint32_t saveBLC_PWM_CTL;
     79};
     80
     81struct psb_intel_i2c_chan {
     82	/* for getting at dev. private (mmio etc.) */
     83	struct drm_device *drm_dev;
     84	u32 reg;		/* GPIO reg */
     85	struct i2c_adapter adapter;
     86	struct i2c_algo_bit_data algo;
     87	u8 slave_addr;
     88};
     89
     90struct gma_encoder {
     91	struct drm_encoder base;
     92	int type;
     93	bool needs_tv_clock;
     94	void (*hot_plug)(struct gma_encoder *);
     95	int crtc_mask;
     96	int clone_mask;
     97	u32 ddi_select;	/* Channel info */
     98#define DDI0_SELECT	0x01
     99#define DDI1_SELECT	0x02
    100#define DP_MASK		0x8000
    101#define DDI_MASK	0x03
    102	void *dev_priv; /* For sdvo_priv, lvds_priv, etc... */
    103
    104	/* FIXME: Either make SDVO and LVDS store it's i2c here or give CDV it's
    105	   own set of output privates */
    106	struct psb_intel_i2c_chan *i2c_bus;
    107	struct psb_intel_i2c_chan *ddc_bus;
    108};
    109
    110struct gma_connector {
    111	struct drm_connector base;
    112	struct gma_encoder *encoder;
    113
    114	void (*save)(struct drm_connector *connector);
    115	void (*restore)(struct drm_connector *connector);
    116};
    117
    118struct psb_intel_crtc_state {
    119	uint32_t saveDSPCNTR;
    120	uint32_t savePIPECONF;
    121	uint32_t savePIPESRC;
    122	uint32_t saveDPLL;
    123	uint32_t saveFP0;
    124	uint32_t saveFP1;
    125	uint32_t saveHTOTAL;
    126	uint32_t saveHBLANK;
    127	uint32_t saveHSYNC;
    128	uint32_t saveVTOTAL;
    129	uint32_t saveVBLANK;
    130	uint32_t saveVSYNC;
    131	uint32_t saveDSPSTRIDE;
    132	uint32_t saveDSPSIZE;
    133	uint32_t saveDSPPOS;
    134	uint32_t saveDSPBASE;
    135	uint32_t savePalette[256];
    136};
    137
    138struct gma_crtc {
    139	struct drm_crtc base;
    140	int pipe;
    141	int plane;
    142	uint32_t cursor_addr;
    143	struct psb_gem_object *cursor_pobj;
    144	u8 lut_adj[256];
    145	struct psb_intel_framebuffer *fbdev_fb;
    146	/* a mode_set for fbdev users on this crtc */
    147	struct drm_mode_set mode_set;
    148
    149	/* GEM object that holds our cursor */
    150	struct drm_gem_object *cursor_obj;
    151
    152	struct drm_display_mode saved_mode;
    153	struct drm_display_mode saved_adjusted_mode;
    154
    155	struct psb_intel_mode_device *mode_dev;
    156
    157	/*crtc mode setting flags*/
    158	u32 mode_flags;
    159
    160	bool active;
    161
    162	/* Saved Crtc HW states */
    163	struct psb_intel_crtc_state *crtc_state;
    164
    165	const struct gma_clock_funcs *clock_funcs;
    166
    167	struct drm_pending_vblank_event *page_flip_event;
    168};
    169
    170#define to_gma_crtc(x)	\
    171		container_of(x, struct gma_crtc, base)
    172#define to_gma_connector(x) \
    173		container_of(x, struct gma_connector, base)
    174#define to_gma_encoder(x)	\
    175		container_of(x, struct gma_encoder, base)
    176#define to_psb_intel_framebuffer(x)	\
    177		container_of(x, struct psb_intel_framebuffer, base)
    178
    179struct psb_intel_i2c_chan *psb_intel_i2c_create(struct drm_device *dev,
    180					const u32 reg, const char *name);
    181void psb_intel_i2c_destroy(struct psb_intel_i2c_chan *chan);
    182int psb_intel_ddc_get_modes(struct drm_connector *connector,
    183			    struct i2c_adapter *adapter);
    184extern bool psb_intel_ddc_probe(struct i2c_adapter *adapter);
    185
    186extern void psb_intel_crtc_init(struct drm_device *dev, int pipe,
    187			    struct psb_intel_mode_device *mode_dev);
    188extern void psb_intel_crt_init(struct drm_device *dev);
    189extern bool psb_intel_sdvo_init(struct drm_device *dev, int output_device);
    190extern void psb_intel_dvo_init(struct drm_device *dev);
    191extern void psb_intel_tv_init(struct drm_device *dev);
    192extern void psb_intel_lvds_init(struct drm_device *dev,
    193			    struct psb_intel_mode_device *mode_dev);
    194extern void psb_intel_lvds_set_brightness(struct drm_device *dev, int level);
    195extern void oaktrail_lvds_init(struct drm_device *dev,
    196			   struct psb_intel_mode_device *mode_dev);
    197extern void oaktrail_wait_for_INTR_PKT_SENT(struct drm_device *dev);
    198extern void oaktrail_dsi_init(struct drm_device *dev,
    199			   struct psb_intel_mode_device *mode_dev);
    200extern void oaktrail_lvds_i2c_init(struct drm_encoder *encoder);
    201extern void mid_dsi_init(struct drm_device *dev,
    202		    struct psb_intel_mode_device *mode_dev, int dsi_num);
    203
    204extern struct drm_encoder *gma_best_encoder(struct drm_connector *connector);
    205extern void gma_connector_attach_encoder(struct gma_connector *connector,
    206					 struct gma_encoder *encoder);
    207
    208static inline struct gma_encoder *gma_attached_encoder(
    209						struct drm_connector *connector)
    210{
    211	return to_gma_connector(connector)->encoder;
    212}
    213
    214extern struct drm_display_mode *psb_intel_crtc_mode_get(struct drm_device *dev,
    215						    struct drm_crtc *crtc);
    216extern struct drm_crtc *psb_intel_get_crtc_from_pipe(struct drm_device *dev,
    217						 int pipe);
    218extern struct drm_connector *psb_intel_sdvo_find(struct drm_device *dev,
    219					     int sdvoB);
    220extern int psb_intel_sdvo_supports_hotplug(struct drm_connector *connector);
    221extern void psb_intel_sdvo_set_hotplug(struct drm_connector *connector,
    222				   int enable);
    223extern int intelfb_probe(struct drm_device *dev);
    224extern int intelfb_remove(struct drm_device *dev,
    225			  struct drm_framebuffer *fb);
    226extern bool psb_intel_lvds_mode_fixup(struct drm_encoder *encoder,
    227				      const struct drm_display_mode *mode,
    228				      struct drm_display_mode *adjusted_mode);
    229extern enum drm_mode_status psb_intel_lvds_mode_valid(struct drm_connector *connector,
    230				     struct drm_display_mode *mode);
    231extern int psb_intel_lvds_set_property(struct drm_connector *connector,
    232					struct drm_property *property,
    233					uint64_t value);
    234extern void psb_intel_lvds_destroy(struct drm_connector *connector);
    235
    236/* intel_gmbus.c */
    237extern void gma_intel_i2c_reset(struct drm_device *dev);
    238extern int gma_intel_setup_gmbus(struct drm_device *dev);
    239extern void gma_intel_gmbus_set_speed(struct i2c_adapter *adapter, int speed);
    240extern void gma_intel_gmbus_force_bit(struct i2c_adapter *adapter, bool force_bit);
    241extern void gma_intel_teardown_gmbus(struct drm_device *dev);
    242
    243/* DP support */
    244extern void cdv_intel_dp_init(struct drm_device *dev, struct psb_intel_mode_device *mode_dev, int output_reg);
    245extern void cdv_intel_dp_set_m_n(struct drm_crtc *crtc,
    246					struct drm_display_mode *mode,
    247					struct drm_display_mode *adjusted_mode);
    248
    249extern void psb_intel_attach_force_audio_property(struct drm_connector *connector);
    250extern void psb_intel_attach_broadcast_rgb_property(struct drm_connector *connector);
    251
    252extern int cdv_sb_read(struct drm_device *dev, u32 reg, u32 *val);
    253extern int cdv_sb_write(struct drm_device *dev, u32 reg, u32 val);
    254extern void cdv_sb_reset(struct drm_device *dev);
    255
    256extern void cdv_intel_attach_force_audio_property(struct drm_connector *connector);
    257extern void cdv_intel_attach_broadcast_rgb_property(struct drm_connector *connector);
    258
    259#endif				/* __INTEL_DRV_H__ */