radeon_mode.h 29.8 KB
Newer Older
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32
/*
 * Copyright 2000 ATI Technologies Inc., Markham, Ontario, and
 *                VA Linux Systems Inc., Fremont, California.
 * Copyright 2008 Red Hat Inc.
 *
 * Permission is hereby granted, free of charge, to any person obtaining a
 * copy of this software and associated documentation files (the "Software"),
 * to deal in the Software without restriction, including without limitation
 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
 * and/or sell copies of the Software, and to permit persons to whom the
 * Software is furnished to do so, subject to the following conditions:
 *
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 *
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 * OTHER DEALINGS IN THE SOFTWARE.
 *
 * Original Authors:
 *   Kevin E. Martin, Rickard E. Faith, Alan Hourihane
 *
 * Kernel port Author: Dave Airlie
 */

#ifndef RADEON_MODE_H
#define RADEON_MODE_H

33 34 35
#include <drm/drm_crtc.h>
#include <drm/drm_edid.h>
#include <drm/drm_dp_helper.h>
36
#include <drm/drm_dp_mst_helper.h>
37 38
#include <drm/drm_fixed.h>
#include <drm/drm_crtc_helper.h>
39 40
#include <linux/i2c.h>
#include <linux/i2c-algo-bit.h>
41

42
struct radeon_bo;
43
struct radeon_device;
44 45 46 47 48 49

#define to_radeon_crtc(x) container_of(x, struct radeon_crtc, base)
#define to_radeon_connector(x) container_of(x, struct radeon_connector, base)
#define to_radeon_encoder(x) container_of(x, struct radeon_encoder, base)
#define to_radeon_framebuffer(x) container_of(x, struct radeon_framebuffer, base)

50 51 52 53
#define RADEON_MAX_HPD_PINS 7
#define RADEON_MAX_CRTCS 6
#define RADEON_MAX_AFMT_BLOCKS 7

54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
enum radeon_rmx_type {
	RMX_OFF,
	RMX_FULL,
	RMX_CENTER,
	RMX_ASPECT
};

enum radeon_tv_std {
	TV_STD_NTSC,
	TV_STD_PAL,
	TV_STD_PAL_M,
	TV_STD_PAL_60,
	TV_STD_NTSC_J,
	TV_STD_SCART_PAL,
	TV_STD_SECAM,
	TV_STD_PAL_CN,
70
	TV_STD_PAL_N,
71 72
};

73 74 75 76 77 78
enum radeon_underscan_type {
	UNDERSCAN_OFF,
	UNDERSCAN_ON,
	UNDERSCAN_AUTO,
};

A
Alex Deucher 已提交
79 80 81 82 83 84 85 86 87 88
enum radeon_hpd_id {
	RADEON_HPD_1 = 0,
	RADEON_HPD_2,
	RADEON_HPD_3,
	RADEON_HPD_4,
	RADEON_HPD_5,
	RADEON_HPD_6,
	RADEON_HPD_NONE = 0xff,
};

89 90 91 92 93 94 95
enum radeon_output_csc {
	RADEON_OUTPUT_CSC_BYPASS = 0,
	RADEON_OUTPUT_CSC_TVRGB = 1,
	RADEON_OUTPUT_CSC_YCBCR601 = 2,
	RADEON_OUTPUT_CSC_YCBCR709 = 3,
};

96 97
#define RADEON_MAX_I2C_BUS 16

A
Alex Deucher 已提交
98 99 100 101 102 103 104 105 106 107 108 109 110 111
/* radeon gpio-based i2c
 * 1. "mask" reg and bits
 *    grabs the gpio pins for software use
 *    0=not held  1=held
 * 2. "a" reg and bits
 *    output pin value
 *    0=low 1=high
 * 3. "en" reg and bits
 *    sets the pin direction
 *    0=input 1=output
 * 4. "y" reg and bits
 *    input pin value
 *    0=low 1=high
 */
112 113
struct radeon_i2c_bus_rec {
	bool valid;
A
Alex Deucher 已提交
114 115
	/* id used by atom */
	uint8_t i2c_id;
116
	/* id used by atom */
A
Alex Deucher 已提交
117
	enum radeon_hpd_id hpd;
A
Alex Deucher 已提交
118 119 120 121 122
	/* can be used with hw i2c engine */
	bool hw_capable;
	/* uses multi-media i2c engine */
	bool mm_i2c;
	/* regs and bits */
123 124 125 126
	uint32_t mask_clk_reg;
	uint32_t mask_data_reg;
	uint32_t a_clk_reg;
	uint32_t a_data_reg;
A
Alex Deucher 已提交
127 128 129 130
	uint32_t en_clk_reg;
	uint32_t en_data_reg;
	uint32_t y_clk_reg;
	uint32_t y_data_reg;
131 132 133 134
	uint32_t mask_clk_mask;
	uint32_t mask_data_mask;
	uint32_t a_clk_mask;
	uint32_t a_data_mask;
A
Alex Deucher 已提交
135 136 137 138
	uint32_t en_clk_mask;
	uint32_t en_data_mask;
	uint32_t y_clk_mask;
	uint32_t y_data_mask;
139 140 141 142 143 144 145 146 147
};

struct radeon_tmds_pll {
    uint32_t freq;
    uint32_t value;
};

#define RADEON_MAX_BIOS_CONNECTOR 16

148
/* pll flags */
149 150 151 152 153 154 155 156 157 158 159
#define RADEON_PLL_USE_BIOS_DIVS        (1 << 0)
#define RADEON_PLL_NO_ODD_POST_DIV      (1 << 1)
#define RADEON_PLL_USE_REF_DIV          (1 << 2)
#define RADEON_PLL_LEGACY               (1 << 3)
#define RADEON_PLL_PREFER_LOW_REF_DIV   (1 << 4)
#define RADEON_PLL_PREFER_HIGH_REF_DIV  (1 << 5)
#define RADEON_PLL_PREFER_LOW_FB_DIV    (1 << 6)
#define RADEON_PLL_PREFER_HIGH_FB_DIV   (1 << 7)
#define RADEON_PLL_PREFER_LOW_POST_DIV  (1 << 8)
#define RADEON_PLL_PREFER_HIGH_POST_DIV (1 << 9)
#define RADEON_PLL_USE_FRAC_FB_DIV      (1 << 10)
160
#define RADEON_PLL_PREFER_CLOSEST_LOWER (1 << 11)
161
#define RADEON_PLL_USE_POST_DIV         (1 << 12)
162
#define RADEON_PLL_IS_LCD               (1 << 13)
163
#define RADEON_PLL_PREFER_MINM_OVER_MAXP (1 << 14)
164 165

struct radeon_pll {
166 167 168 169 170 171 172 173
	/* reference frequency */
	uint32_t reference_freq;

	/* fixed dividers */
	uint32_t reference_div;
	uint32_t post_div;

	/* pll in/out limits */
174 175 176 177
	uint32_t pll_in_min;
	uint32_t pll_in_max;
	uint32_t pll_out_min;
	uint32_t pll_out_max;
178 179
	uint32_t lcd_pll_out_min;
	uint32_t lcd_pll_out_max;
180
	uint32_t best_vco;
181

182
	/* divider limits */
183 184 185 186 187 188 189 190
	uint32_t min_ref_div;
	uint32_t max_ref_div;
	uint32_t min_post_div;
	uint32_t max_post_div;
	uint32_t min_feedback_div;
	uint32_t max_feedback_div;
	uint32_t min_frac_feedback_div;
	uint32_t max_frac_feedback_div;
191 192 193 194 195 196

	/* flags for the current clock */
	uint32_t flags;

	/* pll id */
	uint32_t id;
197 198 199 200
};

struct radeon_i2c_chan {
	struct i2c_adapter adapter;
201
	struct drm_device *dev;
202
	struct i2c_algo_bit_data bit;
203
	struct radeon_i2c_bus_rec rec;
204
	struct drm_dp_aux aux;
205
	bool has_aux;
A
Alex Deucher 已提交
206
	struct mutex mutex;
207 208 209 210
};

/* mostly for macs, but really any system without connector tables */
enum radeon_connector_table {
211
	CT_NONE = 0,
212 213 214 215 216 217 218 219 220
	CT_GENERIC,
	CT_IBOOK,
	CT_POWERBOOK_EXTERNAL,
	CT_POWERBOOK_INTERNAL,
	CT_POWERBOOK_VGA,
	CT_MINI_EXTERNAL,
	CT_MINI_INTERNAL,
	CT_IMAC_G5_ISIGHT,
	CT_EMAC,
221
	CT_RN50_POWER,
222
	CT_MAC_X800,
223
	CT_MAC_G5_9600,
224 225
	CT_SAM440EP,
	CT_MAC_G4_SILVER
226 227
};

228 229 230 231 232
enum radeon_dvo_chip {
	DVO_SIL164,
	DVO_SIL1178,
};

233
struct radeon_fbdev;
234

235 236 237 238 239
struct radeon_afmt {
	bool enabled;
	int offset;
	bool last_buffer_filled_status;
	int id;
240
	struct r600_audio_pin *pin;
241 242
};

243 244
struct radeon_mode_info {
	struct atom_context *atom_context;
245
	struct card_info *atom_card_info;
246 247
	enum radeon_connector_table connector_table;
	bool mode_config_initialized;
248 249
	struct radeon_crtc *crtcs[RADEON_MAX_CRTCS];
	struct radeon_afmt *afmt[RADEON_MAX_AFMT_BLOCKS];
250 251 252 253
	/* DVI-I properties */
	struct drm_property *coherent_mode_property;
	/* DAC enable load detect */
	struct drm_property *load_detect_property;
254
	/* TV standard */
255 256 257
	struct drm_property *tv_std_property;
	/* legacy TMDS PLL detect */
	struct drm_property *tmds_pll_property;
258 259
	/* underscan */
	struct drm_property *underscan_property;
260 261
	struct drm_property *underscan_hborder_property;
	struct drm_property *underscan_vborder_property;
262 263
	/* audio */
	struct drm_property *audio_property;
264 265
	/* FMT dithering */
	struct drm_property *dither_property;
266 267
	/* Output CSC */
	struct drm_property *output_csc_property;
268 269
	/* hardcoded DFP edid from BIOS */
	struct edid *bios_hardcoded_edid;
270
	int bios_hardcoded_edid_size;
271 272

	/* pointer to fbdev info structure */
273
	struct radeon_fbdev *rfbdev;
274 275
	/* firmware flags */
	u16 firmware_flags;
276 277
	/* pointer to backlight encoder */
	struct radeon_encoder *bl_encoder;
278 279 280

	/* bitmask for active encoder frontends */
	uint32_t active_encoders;
281 282
};

283 284
#define RADEON_MAX_BL_LEVEL 0xFF

285 286
#if defined(CONFIG_BACKLIGHT_CLASS_DEVICE) || defined(CONFIG_BACKLIGHT_CLASS_DEVICE_MODULE)

287 288 289 290 291 292 293
struct radeon_backlight_privdata {
	struct radeon_encoder *encoder;
	uint8_t negative;
};

#endif

294 295 296 297 298 299 300 301 302 303 304 305 306 307 308
#define MAX_H_CODE_TIMING_LEN 32
#define MAX_V_CODE_TIMING_LEN 32

/* need to store these as reading
   back code tables is excessive */
struct radeon_tv_regs {
	uint32_t tv_uv_adr;
	uint32_t timing_cntl;
	uint32_t hrestart;
	uint32_t vrestart;
	uint32_t frestart;
	uint16_t h_code_timing[MAX_H_CODE_TIMING_LEN];
	uint16_t v_code_timing[MAX_V_CODE_TIMING_LEN];
};

309 310
struct radeon_atom_ss {
	uint16_t percentage;
311
	uint16_t percentage_divider;
312 313 314 315 316 317 318 319 320 321
	uint8_t type;
	uint16_t step;
	uint8_t delay;
	uint8_t range;
	uint8_t refdiv;
	/* asic_ss */
	uint16_t rate;
	uint16_t amount;
};

322 323 324 325 326 327
enum radeon_flip_status {
	RADEON_FLIP_NONE,
	RADEON_FLIP_PENDING,
	RADEON_FLIP_SUBMITTED
};

328 329 330 331 332 333 334 335 336
struct radeon_crtc {
	struct drm_crtc base;
	int crtc_id;
	u16 lut_r[256], lut_g[256], lut_b[256];
	bool enabled;
	bool can_tile;
	uint32_t crtc_offset;
	struct drm_gem_object *cursor_bo;
	uint64_t cursor_addr;
337 338 339 340
	int cursor_x;
	int cursor_y;
	int cursor_hot_x;
	int cursor_hot_y;
341 342
	int cursor_width;
	int cursor_height;
343 344
	int max_cursor_width;
	int max_cursor_height;
345
	uint32_t legacy_display_base_addr;
346
	enum radeon_rmx_type rmx_type;
347 348
	u8 h_border;
	u8 v_border;
349 350
	fixed20_12 vsc;
	fixed20_12 hsc;
351
	struct drm_display_mode native_mode;
352
	int pll_id;
353
	/* page flipping */
354 355
	struct workqueue_struct *flip_queue;
	struct radeon_flip_work *flip_work;
356
	enum radeon_flip_status flip_status;
357 358 359 360 361 362 363 364
	/* pll sharing */
	struct radeon_atom_ss ss;
	bool ss_enabled;
	u32 adjusted_clock;
	int bpc;
	u32 pll_reference_div;
	u32 pll_post_div;
	u32 pll_flags;
365
	struct drm_encoder *encoder;
366
	struct drm_connector *connector;
367 368 369 370
	/* for dpm */
	u32 line_time;
	u32 wm_low;
	u32 wm_high;
371
	struct drm_display_mode hw_mode;
372
	enum radeon_output_csc output_csc;
373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391
};

struct radeon_encoder_primary_dac {
	/* legacy primary dac */
	uint32_t ps2_pdac_adj;
};

struct radeon_encoder_lvds {
	/* legacy lvds */
	uint16_t panel_vcc_delay;
	uint8_t  panel_pwr_delay;
	uint8_t  panel_digon_delay;
	uint8_t  panel_blon_delay;
	uint16_t panel_ref_divider;
	uint8_t  panel_post_divider;
	uint16_t panel_fb_divider;
	bool     use_bios_dividers;
	uint32_t lvds_gen_cntl;
	/* panel mode */
392
	struct drm_display_mode native_mode;
393 394 395
	struct backlight_device *bl_dev;
	int      dpms_mode;
	uint8_t  backlight_level;
396 397 398 399 400 401 402 403
};

struct radeon_encoder_tv_dac {
	/* legacy tv dac */
	uint32_t ps2_tvdac_adj;
	uint32_t ntsc_tvdac_adj;
	uint32_t pal_tvdac_adj;

404 405 406 407 408
	int               h_pos;
	int               v_pos;
	int               h_size;
	int               supported_tv_stds;
	bool              tv_on;
409
	enum radeon_tv_std tv_std;
410
	struct radeon_tv_regs tv;
411 412 413 414 415 416 417
};

struct radeon_encoder_int_tmds {
	/* legacy int tmds */
	struct radeon_tmds_pll tmds_pll[4];
};

418 419 420 421 422 423 424
struct radeon_encoder_ext_tmds {
	/* tmds over dvo */
	struct radeon_i2c_chan *i2c_bus;
	uint8_t slave_addr;
	enum radeon_dvo_chip dvo_chip;
};

425
/* spread spectrum */
426
struct radeon_encoder_atom_dig {
427
	bool linkb;
428 429
	/* atom dig */
	bool coherent_mode;
430 431 432
	int dig_encoder; /* -1 disabled, 0 DIGA, 1 DIGB, etc. */
	/* atom lvds/edp */
	uint32_t lcd_misc;
433
	uint16_t panel_pwr_delay;
434
	uint32_t lcd_ss_id;
435
	/* panel mode */
436
	struct drm_display_mode native_mode;
437 438 439
	struct backlight_device *bl_dev;
	int dpms_mode;
	uint8_t backlight_level;
440
	int panel_mode;
441
	struct radeon_afmt *afmt;
442
	int active_mst_links;
443 444
};

445 446 447 448
struct radeon_encoder_atom_dac {
	enum radeon_tv_std tv_std;
};

449 450 451 452 453 454 455 456 457 458 459
struct radeon_encoder_mst {
	int crtc;
	struct radeon_encoder *primary;
	struct radeon_connector *connector;
	struct drm_dp_mst_port *port;
	int pbn;
	int fe;
	bool fe_from_be;
	bool enc_active;
};

460 461
struct radeon_encoder {
	struct drm_encoder base;
462
	uint32_t encoder_enum;
463 464
	uint32_t encoder_id;
	uint32_t devices;
465
	uint32_t active_device;
466 467 468
	uint32_t flags;
	uint32_t pixel_clock;
	enum radeon_rmx_type rmx_type;
469
	enum radeon_underscan_type underscan_type;
470 471
	uint32_t underscan_hborder;
	uint32_t underscan_vborder;
472
	struct drm_display_mode native_mode;
473
	void *enc_priv;
474
	int audio_polling_active;
475
	bool is_ext_encoder;
476
	u16 caps;
477
	struct radeon_audio_funcs *audio;
478
	enum radeon_output_csc output_csc;
479 480 481 482
	bool can_mst;
	uint32_t offset;
	bool is_mst_encoder;
	/* front end for this mst encoder */
483 484 485 486
};

struct radeon_connector_atom_dig {
	uint32_t igp_lane_info;
487
	/* displayport */
488
	u8 dpcd[DP_RECEIVER_CAP_SIZE];
489
	u8 dp_sink_type;
490 491
	int dp_clock;
	int dp_lane_count;
492
	bool edp_on;
493
	bool is_mst;
494 495
};

496 497 498 499 500
struct radeon_gpio_rec {
	bool valid;
	u8 id;
	u32 reg;
	u32 mask;
501
	u32 shift;
502 503 504 505 506 507 508 509
};

struct radeon_hpd {
	enum radeon_hpd_id hpd;
	u8 plugged_state;
	struct radeon_gpio_rec gpio;
};

510 511 512 513
struct radeon_router {
	u32 router_id;
	struct radeon_i2c_bus_rec i2c_info;
	u8 i2c_addr;
514 515 516 517 518 519 520 521 522 523
	/* i2c mux */
	bool ddc_valid;
	u8 ddc_mux_type;
	u8 ddc_mux_control_pin;
	u8 ddc_mux_state;
	/* clock/data mux */
	bool cd_valid;
	u8 cd_mux_type;
	u8 cd_mux_control_pin;
	u8 cd_mux_state;
524 525
};

526 527 528 529 530 531
enum radeon_connector_audio {
	RADEON_AUDIO_DISABLE = 0,
	RADEON_AUDIO_ENABLE = 1,
	RADEON_AUDIO_AUTO = 2
};

532 533 534 535 536
enum radeon_connector_dither {
	RADEON_FMT_DITHER_DISABLE = 0,
	RADEON_FMT_DITHER_ENABLE = 1,
};

537 538 539 540 541
struct stream_attribs {
	uint16_t fe;
	uint16_t slots;
};

542 543 544 545 546
struct radeon_connector {
	struct drm_connector base;
	uint32_t connector_id;
	uint32_t devices;
	struct radeon_i2c_chan *ddc_bus;
547
	/* some systems have an hdmi and vga port with a shared ddc line */
548
	bool shared_ddc;
549 550 551 552
	bool use_digital;
	/* we need to mind the EDID between detect
	   and get modes due to analog/digital/tvencoder */
	struct edid *edid;
553
	void *con_priv;
554
	bool dac_load_detect;
555
	bool detected_by_load; /* if the connection status was determined by load */
556
	uint16_t connector_object_id;
557
	struct radeon_hpd hpd;
558 559
	struct radeon_router router;
	struct radeon_i2c_chan *router_bus;
560
	enum radeon_connector_audio audio;
561
	enum radeon_connector_dither dither;
562
	int pixelclock_for_modeset;
563 564 565 566 567 568 569 570
	bool is_mst_connector;
	struct radeon_connector *mst_port;
	struct drm_dp_mst_port *port;
	struct drm_dp_mst_topology_mgr mst_mgr;

	struct radeon_encoder *mst_encoder;
	struct stream_attribs cur_stream_attribs[6];
	int enabled_attribs;
571 572 573 574 575 576 577
};

struct radeon_framebuffer {
	struct drm_framebuffer base;
	struct drm_gem_object *obj;
};

578 579
#define ENCODER_MODE_IS_DP(em) (((em) == ATOM_ENCODER_MODE_DP) || \
				((em) == ATOM_ENCODER_MODE_DP_MST))
580

581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601
struct atom_clock_dividers {
	u32 post_div;
	union {
		struct {
#ifdef __BIG_ENDIAN
			u32 reserved : 6;
			u32 whole_fb_div : 12;
			u32 frac_fb_div : 14;
#else
			u32 frac_fb_div : 14;
			u32 whole_fb_div : 12;
			u32 reserved : 6;
#endif
		};
		u32 fb_div;
	};
	u32 ref_div;
	bool enable_post_div;
	bool enable_dithen;
	u32 vco_mode;
	u32 real_clock;
602 603 604
	/* added for CI */
	u32 post_divider;
	u32 flags;
605 606
};

607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630
struct atom_mpll_param {
	union {
		struct {
#ifdef __BIG_ENDIAN
			u32 reserved : 8;
			u32 clkfrac : 12;
			u32 clkf : 12;
#else
			u32 clkf : 12;
			u32 clkfrac : 12;
			u32 reserved : 8;
#endif
		};
		u32 fb_div;
	};
	u32 post_div;
	u32 bwcntl;
	u32 dll_speed;
	u32 vco_mode;
	u32 yclk_sel;
	u32 qdr;
	u32 half_rate;
};

631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684
#define MEM_TYPE_GDDR5  0x50
#define MEM_TYPE_GDDR4  0x40
#define MEM_TYPE_GDDR3  0x30
#define MEM_TYPE_DDR2   0x20
#define MEM_TYPE_GDDR1  0x10
#define MEM_TYPE_DDR3   0xb0
#define MEM_TYPE_MASK   0xf0

struct atom_memory_info {
	u8 mem_vendor;
	u8 mem_type;
};

#define MAX_AC_TIMING_ENTRIES 16

struct atom_memory_clock_range_table
{
	u8 num_entries;
	u8 rsv[3];
	u32 mclk[MAX_AC_TIMING_ENTRIES];
};

#define VBIOS_MC_REGISTER_ARRAY_SIZE 32
#define VBIOS_MAX_AC_TIMING_ENTRIES 20

struct atom_mc_reg_entry {
	u32 mclk_max;
	u32 mc_data[VBIOS_MC_REGISTER_ARRAY_SIZE];
};

struct atom_mc_register_address {
	u16 s1;
	u8 pre_reg_data;
};

struct atom_mc_reg_table {
	u8 last;
	u8 num_entries;
	struct atom_mc_reg_entry mc_reg_table_entry[VBIOS_MAX_AC_TIMING_ENTRIES];
	struct atom_mc_register_address mc_reg_address[VBIOS_MC_REGISTER_ARRAY_SIZE];
};

#define MAX_VOLTAGE_ENTRIES 32

struct atom_voltage_table_entry
{
	u16 value;
	u32 smio_low;
};

struct atom_voltage_table
{
	u32 count;
	u32 mask_low;
685
	u32 phase_delay;
686 687 688
	struct atom_voltage_table_entry entries[MAX_VOLTAGE_ENTRIES];
};

689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707

extern void
radeon_add_atom_connector(struct drm_device *dev,
			  uint32_t connector_id,
			  uint32_t supported_device,
			  int connector_type,
			  struct radeon_i2c_bus_rec *i2c_bus,
			  uint32_t igp_lane_info,
			  uint16_t connector_object_id,
			  struct radeon_hpd *hpd,
			  struct radeon_router *router);
extern void
radeon_add_legacy_connector(struct drm_device *dev,
			    uint32_t connector_id,
			    uint32_t supported_device,
			    int connector_type,
			    struct radeon_i2c_bus_rec *i2c_bus,
			    uint16_t connector_object_id,
			    struct radeon_hpd *hpd);
708 709 710 711
extern uint32_t
radeon_get_encoder_enum(struct drm_device *dev, uint32_t supported_device,
			uint8_t dac);
extern void radeon_link_encoder_connector(struct drm_device *dev);
712

713 714 715 716
extern enum radeon_tv_std
radeon_combios_get_tv_info(struct radeon_device *rdev);
extern enum radeon_tv_std
radeon_atombios_get_tv_info(struct radeon_device *rdev);
717
extern void radeon_atombios_get_default_voltages(struct radeon_device *rdev,
718
						 u16 *vddc, u16 *vddci, u16 *mvdd);
719

720 721 722 723 724 725 726 727 728
extern void
radeon_combios_connected_scratch_regs(struct drm_connector *connector,
				      struct drm_encoder *encoder,
				      bool connected);
extern void
radeon_atombios_connected_scratch_regs(struct drm_connector *connector,
				       struct drm_encoder *encoder,
				       bool connected);

729 730
extern struct drm_connector *
radeon_get_connector_for_encoder(struct drm_encoder *encoder);
731 732 733 734
extern struct drm_connector *
radeon_get_connector_for_encoder_init(struct drm_encoder *encoder);
extern bool radeon_dig_monitor_is_duallink(struct drm_encoder *encoder,
				    u32 pixel_clock);
735

736 737
extern u16 radeon_encoder_get_dp_bridge_encoder_id(struct drm_encoder *encoder);
extern u16 radeon_connector_encoder_get_dp_bridge_encoder_id(struct drm_connector *connector);
738
extern bool radeon_connector_is_dp12_capable(struct drm_connector *connector);
739
extern int radeon_get_monitor_bpc(struct drm_connector *connector);
740

741 742
extern struct edid *radeon_connector_edid(struct drm_connector *connector);

A
Alex Deucher 已提交
743
extern void radeon_connector_hotplug(struct drm_connector *connector);
744
extern int radeon_dp_mode_valid_helper(struct drm_connector *connector,
745 746
				       struct drm_display_mode *mode);
extern void radeon_dp_set_link_config(struct drm_connector *connector,
747
				      const struct drm_display_mode *mode);
748 749
extern void radeon_dp_link_train(struct drm_encoder *encoder,
				 struct drm_connector *connector);
750
extern bool radeon_dp_needs_link_train(struct radeon_connector *radeon_connector);
751
extern u8 radeon_dp_getsinktype(struct radeon_connector *radeon_connector);
A
Alex Deucher 已提交
752
extern bool radeon_dp_getdpcd(struct radeon_connector *radeon_connector);
753 754
extern int radeon_dp_get_panel_mode(struct drm_encoder *encoder,
				    struct drm_connector *connector);
755
int radeon_dp_get_max_link_rate(struct drm_connector *connector,
756
				const u8 *dpcd);
757 758
extern void radeon_dp_set_rx_power_state(struct drm_connector *connector,
					 u8 power_state);
759
extern void radeon_dp_aux_init(struct radeon_connector *radeon_connector);
760 761 762
extern ssize_t
radeon_dp_aux_transfer_native(struct drm_dp_aux *aux, struct drm_dp_aux_msg *msg);

763
extern void atombios_dig_encoder_setup(struct drm_encoder *encoder, int action, int panel_mode);
764
extern void atombios_dig_encoder_setup2(struct drm_encoder *encoder, int action, int panel_mode, int enc_override);
765
extern void radeon_atom_encoder_init(struct radeon_device *rdev);
766
extern void radeon_atom_disp_eng_pll_init(struct radeon_device *rdev);
767 768 769
extern void atombios_dig_transmitter_setup(struct drm_encoder *encoder,
					   int action, uint8_t lane_num,
					   uint8_t lane_set);
770 771 772
extern void atombios_dig_transmitter_setup2(struct drm_encoder *encoder,
					    int action, uint8_t lane_num,
					    uint8_t lane_set, int fe);
773 774
extern void atombios_set_mst_encoder_crtc_source(struct drm_encoder *encoder,
						 int fe);
775
extern void radeon_atom_ext_encoder_setup_ddc(struct drm_encoder *encoder);
776
extern struct drm_encoder *radeon_get_external_encoder(struct drm_encoder *encoder);
777
void radeon_atom_copy_swap(u8 *dst, u8 *src, u8 num_bytes, bool to_le);
778

779 780 781 782 783 784 785 786 787
extern void radeon_i2c_init(struct radeon_device *rdev);
extern void radeon_i2c_fini(struct radeon_device *rdev);
extern void radeon_combios_i2c_init(struct radeon_device *rdev);
extern void radeon_atombios_i2c_init(struct radeon_device *rdev);
extern void radeon_i2c_add(struct radeon_device *rdev,
			   struct radeon_i2c_bus_rec *rec,
			   const char *name);
extern struct radeon_i2c_chan *radeon_i2c_lookup(struct radeon_device *rdev,
						 struct radeon_i2c_bus_rec *i2c_bus);
788 789 790 791
extern struct radeon_i2c_chan *radeon_i2c_create(struct drm_device *dev,
						 struct radeon_i2c_bus_rec *rec,
						 const char *name);
extern void radeon_i2c_destroy(struct radeon_i2c_chan *i2c);
792 793 794 795 796 797 798 799
extern void radeon_i2c_get_byte(struct radeon_i2c_chan *i2c_bus,
				u8 slave_addr,
				u8 addr,
				u8 *val);
extern void radeon_i2c_put_byte(struct radeon_i2c_chan *i2c,
				u8 slave_addr,
				u8 addr,
				u8 val);
800 801
extern void radeon_router_select_ddc_port(struct radeon_connector *radeon_connector);
extern void radeon_router_select_cd_port(struct radeon_connector *radeon_connector);
802
extern bool radeon_ddc_probe(struct radeon_connector *radeon_connector, bool use_aux);
803

804 805 806 807 808 809
extern bool radeon_atombios_get_ppll_ss_info(struct radeon_device *rdev,
					     struct radeon_atom_ss *ss,
					     int id);
extern bool radeon_atombios_get_asic_ss_info(struct radeon_device *rdev,
					     struct radeon_atom_ss *ss,
					     int id, u32 clock);
810 811
extern struct radeon_gpio_rec radeon_atombios_lookup_gpio(struct radeon_device *rdev,
							  u8 id);
812

813 814 815 816 817 818 819 820 821 822 823 824 825 826 827
extern void radeon_compute_pll_legacy(struct radeon_pll *pll,
				      uint64_t freq,
				      uint32_t *dot_clock_p,
				      uint32_t *fb_div_p,
				      uint32_t *frac_fb_div_p,
				      uint32_t *ref_div_p,
				      uint32_t *post_div_p);

extern void radeon_compute_pll_avivo(struct radeon_pll *pll,
				     u32 freq,
				     u32 *dot_clock_p,
				     u32 *fb_div_p,
				     u32 *frac_fb_div_p,
				     u32 *ref_div_p,
				     u32 *post_div_p);
828

829 830
extern void radeon_setup_encoder_clones(struct drm_device *dev);

831 832 833 834 835
struct drm_encoder *radeon_encoder_legacy_lvds_add(struct drm_device *dev, int bios_index);
struct drm_encoder *radeon_encoder_legacy_primary_dac_add(struct drm_device *dev, int bios_index, int with_tv);
struct drm_encoder *radeon_encoder_legacy_tv_dac_add(struct drm_device *dev, int bios_index, int with_tv);
struct drm_encoder *radeon_encoder_legacy_tmds_int_add(struct drm_device *dev, int bios_index);
struct drm_encoder *radeon_encoder_legacy_tmds_ext_add(struct drm_device *dev, int bios_index);
836
extern void atombios_dvo_setup(struct drm_encoder *encoder, int action);
837
extern void atombios_digital_setup(struct drm_encoder *encoder, int action);
838
extern int atombios_get_encoder_mode(struct drm_encoder *encoder);
839
extern bool atombios_set_edp_panel_power(struct drm_connector *connector, int action);
840
extern void radeon_encoder_set_active_device(struct drm_encoder *encoder);
841
extern bool radeon_encoder_is_digital(struct drm_encoder *encoder);
842 843 844 845

extern void radeon_crtc_load_lut(struct drm_crtc *crtc);
extern int atombios_crtc_set_base(struct drm_crtc *crtc, int x, int y,
				   struct drm_framebuffer *old_fb);
846 847
extern int atombios_crtc_set_base_atomic(struct drm_crtc *crtc,
					 struct drm_framebuffer *fb,
848 849
					 int x, int y,
					 enum mode_set_atomic state);
850 851 852 853 854 855 856 857 858
extern int atombios_crtc_mode_set(struct drm_crtc *crtc,
				   struct drm_display_mode *mode,
				   struct drm_display_mode *adjusted_mode,
				   int x, int y,
				   struct drm_framebuffer *old_fb);
extern void atombios_crtc_dpms(struct drm_crtc *crtc, int mode);

extern int radeon_crtc_set_base(struct drm_crtc *crtc, int x, int y,
				 struct drm_framebuffer *old_fb);
859 860
extern int radeon_crtc_set_base_atomic(struct drm_crtc *crtc,
				       struct drm_framebuffer *fb,
861 862
				       int x, int y,
				       enum mode_set_atomic state);
863 864 865
extern int radeon_crtc_do_set_base(struct drm_crtc *crtc,
				   struct drm_framebuffer *fb,
				   int x, int y, int atomic);
866 867 868 869 870 871 872
extern int radeon_crtc_cursor_set2(struct drm_crtc *crtc,
				   struct drm_file *file_priv,
				   uint32_t handle,
				   uint32_t width,
				   uint32_t height,
				   int32_t hot_x,
				   int32_t hot_y);
873 874
extern int radeon_crtc_cursor_move(struct drm_crtc *crtc,
				   int x, int y);
875
extern void radeon_cursor_reset(struct drm_crtc *crtc);
876

877
extern int radeon_get_crtc_scanoutpos(struct drm_device *dev, int crtc,
878
				      unsigned int flags,
879 880
				      int *vpos, int *hpos, ktime_t *stime,
				      ktime_t *etime);
881

882 883
extern bool radeon_combios_check_hardcoded_edid(struct radeon_device *rdev);
extern struct edid *
884
radeon_bios_get_hardcoded_edid(struct radeon_device *rdev);
885 886 887 888
extern bool radeon_atom_get_clock_info(struct drm_device *dev);
extern bool radeon_combios_get_clock_info(struct drm_device *dev);
extern struct radeon_encoder_atom_dig *
radeon_atombios_get_lvds_info(struct radeon_encoder *encoder);
889 890 891 892 893 894 895 896 897 898
extern bool radeon_atombios_get_tmds_info(struct radeon_encoder *encoder,
					  struct radeon_encoder_int_tmds *tmds);
extern bool radeon_legacy_get_tmds_info_from_combios(struct radeon_encoder *encoder,
						     struct radeon_encoder_int_tmds *tmds);
extern bool radeon_legacy_get_tmds_info_from_table(struct radeon_encoder *encoder,
						   struct radeon_encoder_int_tmds *tmds);
extern bool radeon_legacy_get_ext_tmds_info_from_combios(struct radeon_encoder *encoder,
							 struct radeon_encoder_ext_tmds *tmds);
extern bool radeon_legacy_get_ext_tmds_info_from_table(struct radeon_encoder *encoder,
						       struct radeon_encoder_ext_tmds *tmds);
899 900 901 902
extern struct radeon_encoder_primary_dac *
radeon_atombios_get_primary_dac_info(struct radeon_encoder *encoder);
extern struct radeon_encoder_tv_dac *
radeon_atombios_get_tv_dac_info(struct radeon_encoder *encoder);
903 904 905 906 907 908 909
extern struct radeon_encoder_lvds *
radeon_combios_get_lvds_info(struct radeon_encoder *encoder);
extern void radeon_combios_get_ext_tmds_info(struct radeon_encoder *encoder);
extern struct radeon_encoder_tv_dac *
radeon_combios_get_tv_dac_info(struct radeon_encoder *encoder);
extern struct radeon_encoder_primary_dac *
radeon_combios_get_primary_dac_info(struct radeon_encoder *encoder);
910 911
extern bool radeon_combios_external_tmds_setup(struct drm_encoder *encoder);
extern void radeon_external_tmds_setup(struct drm_encoder *encoder);
912 913 914 915
extern void radeon_combios_output_lock(struct drm_encoder *encoder, bool lock);
extern void radeon_combios_initialize_bios_scratch_regs(struct drm_device *dev);
extern void radeon_atom_output_lock(struct drm_encoder *encoder, bool lock);
extern void radeon_atom_initialize_bios_scratch_regs(struct drm_device *dev);
916 917
extern void radeon_save_bios_scratch_regs(struct radeon_device *rdev);
extern void radeon_restore_bios_scratch_regs(struct radeon_device *rdev);
918 919 920 921 922 923 924 925 926 927
extern void
radeon_atombios_encoder_crtc_scratch_regs(struct drm_encoder *encoder, int crtc);
extern void
radeon_atombios_encoder_dpms_scratch_regs(struct drm_encoder *encoder, bool on);
extern void
radeon_combios_encoder_crtc_scratch_regs(struct drm_encoder *encoder, int crtc);
extern void
radeon_combios_encoder_dpms_scratch_regs(struct drm_encoder *encoder, bool on);
extern void radeon_crtc_fb_gamma_set(struct drm_crtc *crtc, u16 red, u16 green,
				     u16 blue, int regno);
928 929
extern void radeon_crtc_fb_gamma_get(struct drm_crtc *crtc, u16 *red, u16 *green,
				     u16 *blue, int regno);
930
int radeon_framebuffer_init(struct drm_device *dev,
931
			     struct radeon_framebuffer *rfb,
932
			     struct drm_mode_fb_cmd2 *mode_cmd,
933
			     struct drm_gem_object *obj);
934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950

int radeonfb_remove(struct drm_device *dev, struct drm_framebuffer *fb);
bool radeon_get_legacy_connector_info_from_bios(struct drm_device *dev);
bool radeon_get_legacy_connector_info_from_table(struct drm_device *dev);
void radeon_atombios_init_crtc(struct drm_device *dev,
			       struct radeon_crtc *radeon_crtc);
void radeon_legacy_init_crtc(struct drm_device *dev,
			     struct radeon_crtc *radeon_crtc);

void radeon_get_clock_info(struct drm_device *dev);

extern bool radeon_get_atom_connector_info_from_object_table(struct drm_device *dev);
extern bool radeon_get_atom_connector_info_from_supported_devices_table(struct drm_device *dev);

void radeon_enc_destroy(struct drm_encoder *encoder);
void radeon_copy_fb(struct drm_device *dev, struct drm_gem_object *dst_obj);
void radeon_combios_asic_init(struct drm_device *dev);
951
bool radeon_crtc_scaling_mode_fixup(struct drm_crtc *crtc,
952
					const struct drm_display_mode *mode,
953
					struct drm_display_mode *adjusted_mode);
954 955
void radeon_panel_mode_fixup(struct drm_encoder *encoder,
			     struct drm_display_mode *adjusted_mode);
956 957 958 959 960 961 962 963 964 965 966 967 968 969 970
void atom_rv515_force_tv_scaler(struct radeon_device *rdev, struct radeon_crtc *radeon_crtc);

/* legacy tv */
void radeon_legacy_tv_adjust_crtc_reg(struct drm_encoder *encoder,
				      uint32_t *h_total_disp, uint32_t *h_sync_strt_wid,
				      uint32_t *v_total_disp, uint32_t *v_sync_strt_wid);
void radeon_legacy_tv_adjust_pll1(struct drm_encoder *encoder,
				  uint32_t *htotal_cntl, uint32_t *ppll_ref_div,
				  uint32_t *ppll_div_3, uint32_t *pixclks_cntl);
void radeon_legacy_tv_adjust_pll2(struct drm_encoder *encoder,
				  uint32_t *htotal2_cntl, uint32_t *p2pll_ref_div,
				  uint32_t *p2pll_div_0, uint32_t *pixclks_cntl);
void radeon_legacy_tv_mode_set(struct drm_encoder *encoder,
			       struct drm_display_mode *mode,
			       struct drm_display_mode *adjusted_mode);
971

972 973 974 975 976 977
/* fmt blocks */
void avivo_program_fmt(struct drm_encoder *encoder);
void dce3_program_fmt(struct drm_encoder *encoder);
void dce4_program_fmt(struct drm_encoder *encoder);
void dce8_program_fmt(struct drm_encoder *encoder);

978 979 980 981 982
/* fbdev layer */
int radeon_fbdev_init(struct radeon_device *rdev);
void radeon_fbdev_fini(struct radeon_device *rdev);
void radeon_fbdev_set_suspend(struct radeon_device *rdev, int state);
bool radeon_fbdev_robj_is_fb(struct radeon_device *rdev, struct radeon_bo *robj);
983 984

void radeon_fb_output_poll_changed(struct radeon_device *rdev);
985

986
void radeon_crtc_handle_vblank(struct radeon_device *rdev, int crtc_id);
987 988 989 990

void radeon_fb_add_connector(struct radeon_device *rdev, struct drm_connector *connector);
void radeon_fb_remove_connector(struct radeon_device *rdev, struct drm_connector *connector);

991 992
void radeon_crtc_handle_flip(struct radeon_device *rdev, int crtc_id);

993
int radeon_align_pitch(struct radeon_device *rdev, int width, int bpp, bool tiled);
994

995 996 997 998 999 1000 1001 1002 1003
/* mst */
int radeon_dp_mst_init(struct radeon_connector *radeon_connector);
int radeon_dp_mst_probe(struct radeon_connector *radeon_connector);
int radeon_dp_mst_check_status(struct radeon_connector *radeon_connector);
int radeon_mst_debugfs_init(struct radeon_device *rdev);
void radeon_dp_mst_prepare_pll(struct drm_crtc *crtc, struct drm_display_mode *mode);

void radeon_setup_mst_connector(struct drm_device *dev);

1004 1005
int radeon_atom_pick_dig_encoder(struct drm_encoder *encoder, int fe_idx);
void radeon_atom_release_dig_encoder(struct radeon_device *rdev, int enc_idx);
1006
#endif