17#define require(x, label) if (!(x)) { printf("%s:%d [%s]\n", __FILE__, __LINE__, #x); goto label; }
19#define FB_BASE 0x1e000000
23static struct edid * xenos_edid =
NULL;
28 write32n(0xec800000 + reg,
val);
34 return read32n(0xec800000 + reg);
37static void xenos_ana_write(
int addr,
uint32_t reg)
44 if (!(cycle % 250)) printf(
".");
48 printf(
"\nxenos_ana_write - addr: 0x%X reg: 0x%X - FAILED!\n");
51static int isCoronaOrWinchester()
59static struct mode_s * xenos_current_mode =
NULL;
89 r11 = mode_ana[0xD2]& 0x0000FFFF;
107 r30 = rd | 0x40000000;
113 if(mode_ana[0xD0]&0x04000000)
138 int addr_0[] = {0xD5, 0xD0, 0xD1, 0xD6, 0xD8, 0xD, 0xC};
140 for (i = 1; i < 7; ++i)
143 if (addr_0[i] == 0xd6){
163 int fixed_addr[] = {2, 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x6d, 0x6e, 0x6f, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76};
164 int fixed_val[] = {0, 0x2540F38, 0xE600002, 0x2540409,2, 0x2540000, 0x3310002,0,0,0,0,0,0,0,0,0,0};
166 for (i = 0; i < 0x11; ++i)
167 xenos_ana_write(fixed_addr[i], fixed_val[i]);
171 for (i = 0x26; i <= 0x34; ++i)
172 xenos_ana_write(i, mode_ana[i]);
174 for (i = 0x35; i <= 0x43; ++i)
175 xenos_ana_write(i, mode_ana[i]);
177 for (i = 0x44; i <= 0x52; ++i)
178 xenos_ana_write(i, mode_ana[i]);
180 for (i = 0x53; i <= 0x54; ++i)
181 xenos_ana_write(i, mode_ana[i]);
183 for (i = 0x55; i <= 0x57; ++i)
184 xenos_ana_write(i, mode_ana[i]);
188 int addr_1[] = {3, 6, 7, 8, 0xc, 0xd, 0xe, 0xf, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17};
190 for (i = 0; i <
sizeof(addr_1)/
sizeof(
int); ++i)
191 xenos_ana_write(addr_1[i], mode_ana[addr_1[i]]);
200 printf(
"error reading/writing ana\n");
212 for (i = 0; i < 8; ++i)
214 int addr[] = {0x8000, 0x8c60, 0x8008, 0x8004, 0x800c, 0x8010, 0x8014, 0x880c, 0x8800, 0x8434, 0x8820, 0x8804, 0x8824, 0x8828, 0x882c, 0x8420, 0x841c, 0x841c, 0x8418, 0x8414, 0x8c78, 0x8c7c, 0x8c80};
216 for (
j = 0;
j < 23; ++
j)
276 assert(gpu_clock == 9);
277 printf(
"GPU Clock at %d MHz\n", 50 * ((gpu_clock & 0xfff)+1) / (((gpu_clock >> 12) & 0x3f)+1));
278 printf(
"MEM Clock at %d MHz\n", 50 * ((mem_clock & 0xfff)+1) / (((mem_clock >> 12) & 0x3f)+1));
279 printf(
"EDRAM Clock at %d MHz\n", 100 * ((edram_clock & 0xfff)+1) / (((edram_clock >> 12) & 0x3f)+1));
280 printf(
"FSB Clock at %d MHz\n", 100 * ((fsb_clock & 0xfff)+1) / (((fsb_clock >> 12) & 0x3f)+1));
312static void xenos_ana_stop_display(
void)
322 xenos_ana_stop_display();
432 printf(
" . ana disable\n");
435 printf(
" . ana enable\n");
507 xenos_current_mode = mode;
548 printf(
"AVPACK detected: %02x\n", avpack);
602 printf(
"Xenos GPU ID=%04x\n", (
unsigned int)
xenos_id);
606 printf(
"Detected Corona motherboard!\n");
626 if (xenos_current_mode->
hdmi){
632 printf(
"Video Mode: %s\n", xenos_current_mode->
name);
637 if(xenos_current_mode)
638 return xenos_current_mode->
overscan;
640 printf(
"Xenos not initialized\n");
647 return xenos_current_mode !=
NULL;
unsigned int xenon_get_XenosID()
int xenon_get_console_type()
void xenon_config_init(void)
int xenon_config_get_avregion(void)
void xenon_gpio_set_oe(uint32_t clear, uint32_t set)
void xenon_gpio_set(uint32_t clear, uint32_t set)
int xenon_smc_read_avpack(void)
int xenon_smc_i2c_write(uint16_t addr, uint8_t val)
int xenon_smc_ana_write(uint8_t addr, uint32_t val)
int xenon_smc_ana_read(uint8_t addr, uint32_t *val)
void xenos_set_mode_f2(struct mode_s *mode)
#define require(x, label)
uint32_t xenos_read32(int reg)
int xenos_is_initialized()
void xenos_autoset_mode(void)
void xenos_init_ana_new(uint32_t *mode_ana, int hdmi)
int xenos_hdmi_vga_mode_fix(int mode)
void xenos_set_mode_f1(struct mode_s *mode)
void xenos_init(int videoMode)
void xenos_init_phase1(void)
void xenos_set_mode(struct mode_s *mode)
void xenos_write32(int reg, uint32_t val)
void xenos_ana_preinit(void)
void xenos_init_phase0(void)
#define D1COLOR_MATRIX_COEF_3_2
#define D1COLOR_MATRIX_COEF_2_2
#define D1GRPH_SURFACE_OFFSET_X
#define D1GRPH_COLOR_MATRIX_TRANSFORMATION_CNTL
#define D1COLOR_MATRIX_COEF_2_4
#define D1GRPH_PRIMARY_SURFACE_ADDRESS
#define AVIVO_D1CRTC_V_BLANK_START_END
#define D1COLOR_MATRIX_COEF_1_3
#define AVIVO_D1MODE_DESKTOP_HEIGHT
#define DC_LUT_WRITE_EN_MASK
#define D1GRPH_SURFACE_OFFSET_Y
#define AVIVO_D1MODE_VIEWPORT_START
#define D1COLOR_MATRIX_COEF_1_1
#define D1CRTC_DOUBLE_BUFFER_CONTROL
#define AVIVO_D1MODE_DATA_FORMAT
#define D1CRTC_MVP_BLACK_KEYER
#define AVIVO_D1SCL_UPDATE
#define D1COLOR_MATRIX_COEF_3_3
#define D1COLOR_MATRIX_COEF_3_4
#define AVIVO_D1MODE_VIEWPORT_SIZE
#define D1CRTC_MVP_SLAVE_STATUS
#define D1CRTC_MVP_INBAND_CNTL_INSERT
#define D1CRTC_MVP_INBAND_CNTL_CAP
#define D1CRTC_MVP_INBAND_CNTL_INSERT_TIMER
#define D1COLOR_MATRIX_COEF_1_4
#define D1CRTC_TRIGB_CNTL
#define D1CRTC_H_BLANK_START_END
#define AVIVO_D1SCL_SCALER_TAP_CONTROL
#define D1CRTC_H_SYNC_B_CNTL
#define D1CRTC_MVP_CONTROL2
#define AVIVO_D1SCL_SCALER_ENABLE
#define D1COLOR_MATRIX_COEF_2_1
#define D1COLOR_MATRIX_COEF_1_2
#define D1CRTC_TRIGA_MANUAL_TRIG
#define D1COLOR_MATRIX_COEF_2_3
#define D1CRTC_TRIGA_CNTL
#define D1COLOR_MATRIX_COEF_3_1
#define D1CRTC_MVP_FIFO_CONTROL
#define D1CRTC_MVP_CONTROL1
#define D1GRPH_FLIP_CONTROL
#define D1CRTC_H_SYNC_A_CNTL
#define D1CRTC_UPDATE_LOCK
#define D1CRTC_MVP_FIFO_STATUS
#define DCP_LB_DATA_GAP_BETWEEN_CHUNK
BOOL xenos_detect_hdmi_monitor(struct edid *edid)
struct edid * xenos_get_edid()
#define DRM_EDID_INPUT_DIGITAL
#define VIDEO_MODE_VGA_1024x768
#define VIDEO_MODE_HDMI_720P
#define VIDEO_MODE_YUV_720P
struct mode_s xenos_modes_corona[]
struct mode_s xenos_modes[]
uint32_t u32
32bit unsigned integer