summaryrefslogtreecommitdiff
path: root/src/drivers/ati
diff options
context:
space:
mode:
authorYinghai Lu <yinghailu@gmail.com>2004-04-28 05:37:36 +0000
committerYinghai Lu <yinghailu@gmail.com>2004-04-28 05:37:36 +0000
commit97c4947ec9af1664e81ee797834a32d3ca2f74fe (patch)
tree33f41aaaf4c61c0b41ae4751081d2c369ee371b0 /src/drivers/ati
parent48d11d557f725ecf89678a1b9df440417b8da225 (diff)
downloadcoreboot-97c4947ec9af1664e81ee797834a32d3ca2f74fe.tar.xz
Changes for btext and etherboot and filo merge support
git-svn-id: svn://svn.coreboot.org/coreboot/trunk@1540 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
Diffstat (limited to 'src/drivers/ati')
-rw-r--r--src/drivers/ati/ragexl/atyfb.h11
-rw-r--r--src/drivers/ati/ragexl/fb.h5
-rw-r--r--src/drivers/ati/ragexl/mach64_ct.c13
-rw-r--r--src/drivers/ati/ragexl/xlinit.c170
4 files changed, 118 insertions, 81 deletions
diff --git a/src/drivers/ati/ragexl/atyfb.h b/src/drivers/ati/ragexl/atyfb.h
index 31092e2e16..16eb15295d 100644
--- a/src/drivers/ati/ragexl/atyfb.h
+++ b/src/drivers/ati/ragexl/atyfb.h
@@ -20,6 +20,8 @@
#define max(x,y) (x>=y)?x:y
+
+#if CONFIG_CONSOLE_BTEXT==1
/*
* Elements of the hardware specific atyfb_par structure
*/
@@ -38,6 +40,7 @@ struct crtc {
u32 dp_pix_width; /* acceleration */
u32 dp_chain_mask; /* acceleration */
};
+#endif /* CONFIG_CONSOLE_BTEXT */
#if 0
struct pll_514 {
u8 m;
@@ -83,7 +86,9 @@ union aty_pll {
* The hardware parameters for each card
*/
struct atyfb_par {
+#if CONFIG_CONSOLE_BTEXT==1
struct crtc crtc;
+#endif
union aty_pll pll;
u32 accel_flags;
};
@@ -105,7 +110,11 @@ struct aty_cursor {
};
#endif
struct fb_info_aty {
+#if CONFIG_CONSOLE_BTEXT==1
+#if PLL_CRTC_DECODE==1
struct fb_info fb_info;
+#endif
+#endif
#if 0
struct fb_info_aty *next;
unsigned long ati_regbase_phys;
@@ -125,7 +134,7 @@ struct fb_info_aty {
struct { u8 red, green, blue, pad; } palette[256];
#endif
struct atyfb_par default_par;
-#if 0
+#if PLL_CRTC_DECODE==1
struct atyfb_par current_par;
#endif
diff --git a/src/drivers/ati/ragexl/fb.h b/src/drivers/ati/ragexl/fb.h
index cdcbc2596c..01f2887707 100644
--- a/src/drivers/ati/ragexl/fb.h
+++ b/src/drivers/ati/ragexl/fb.h
@@ -110,6 +110,7 @@
#define FB_ACCEL_NEOMAGIC_NM2360 97 /* NeoMagic NM2360 */
#define FB_ACCEL_NEOMAGIC_NM2380 98 /* NeoMagic NM2380 */
+#if 0
struct fb_fix_screeninfo {
char id[16]; /* identification string eg "TT Builtin" */
@@ -130,6 +131,8 @@ struct fb_fix_screeninfo {
u16 reserved[3]; /* Reserved for future compatibility */
};
+#endif
+
/* Interpretation of offset for color fields: All offsets are from the right,
* inside a "pixel" value, which is exactly 'bits_per_pixel' wide (means: you
* can use the offset as right argument to <<). A pixel afterwards is a bit
@@ -309,7 +312,9 @@ struct fb_info {
int flags;
int open; /* Has this been open already ? */
struct fb_var_screeninfo var; /* Current var */
+#if 0
struct fb_fix_screeninfo fix; /* Current fix */
+#endif
struct fb_monspecs monspecs; /* Current Monitor specs */
struct fb_cmap cmap; /* Current cmap */
// struct fb_ops *fbops;
diff --git a/src/drivers/ati/ragexl/mach64_ct.c b/src/drivers/ati/ragexl/mach64_ct.c
index bc1af5ff3a..74ef0cc5e2 100644
--- a/src/drivers/ati/ragexl/mach64_ct.c
+++ b/src/drivers/ati/ragexl/mach64_ct.c
@@ -1,7 +1,11 @@
#define DEBUG_PLL 0
/* FIXME: remove the FAIL definition */
-#define FAIL(x) do { printk_spew(x); return -EINVAL; } while (0)
+#if 0
+#define FAIL(x) do { printk_debug(x); return -EINVAL; } while (0)
+#else
+#define FAIL(x)
+#endif
static int aty_valid_pll_ct(const struct fb_info_aty *info, u32 vclk_per,
struct pll_ct *pll);
@@ -9,7 +13,7 @@ static int aty_dsp_gt(const struct fb_info_aty *info, u32 bpp,
struct pll_ct *pll);
static int aty_var_to_pll_ct(const struct fb_info_aty *info, u32 vclk_per,
u8 bpp, union aty_pll *pll);
-#if 0
+#if PLL_CRTC_DECODE==1
static u32 aty_pll_ct_to_var(const struct fb_info_aty *info,
const union aty_pll *pll);
#endif
@@ -281,7 +285,8 @@ int aty_var_to_pll_ct(const struct fb_info_aty *info, u32 vclk_per,
aty_calc_pll_ct(info, &pll->ct);
return 0;
}
-#if 0
+#if CONFIG_CONSOLE_BTEXT==1
+#if PLL_CRTC_DECODE==1
u32 aty_pll_ct_to_var(const struct fb_info_aty *info,
const union aty_pll *pll)
{
@@ -362,3 +367,5 @@ static struct aty_pll_ops aty_pll_ct = {
#endif
};
#endif
+
+#endif /* CONFIG_CONSOLE_BTEXT */
diff --git a/src/drivers/ati/ragexl/xlinit.c b/src/drivers/ati/ragexl/xlinit.c
index 4ec637a6aa..38e1aa4198 100644
--- a/src/drivers/ati/ragexl/xlinit.c
+++ b/src/drivers/ati/ragexl/xlinit.c
@@ -21,9 +21,13 @@
#include <device/pci_ids.h>
#include <device/pci_ops.h>
+#if CONFIG_CONSOLE_BTEXT==1
+
+#define PLL_CRTC_DECODE 0
+#define SUPPORT_8_BPP_ABOVE 0
+
#include "fb.h"
#include "fbcon.h"
-#include "mach64.h"
struct aty_cmap_regs {
u8 windex;
@@ -33,18 +37,28 @@ struct aty_cmap_regs {
u8 cntl;
};
-#include "atyfb.h"
-
#include <console/btext.h>
+#endif /*CONFIG_CONSOLE_BTEXT*/
+
+#include "mach64.h"
+
+#include "atyfb.h"
+
#include "mach64_ct.c"
#define MPLL_GAIN 0xad
#define VPLL_GAIN 0xd5
+#define HAS_VICTORIA 0
+
enum {
+#if HAS_VICTORIA==1
VICTORIA = 0,
XPERT98,
+#else
+ XPERT98=0,
+#endif
NUM_XL_CARDS
};
@@ -67,12 +81,14 @@ static const struct xl_card_cfg_t {
u8 dll2_cntl;
u8 pll_yclk_cntl;
} card_cfg[NUM_XL_CARDS] = {
+#if HAS_VICTORIA==1
// VICTORIA
{ 2700, SDRAM, 0x800000,
0x10757A3B, 0x64000C81, 0x00110202, 0x7b33A040,
0x82010102, 0x48803800, 0x005E0179,
0x50, 0x25
},
+#endif
// XPERT98
{ 1432, WRAM, 0x800000,
0x00165A2B, 0xE0000CF1, 0x00200213, 0x7333A001,
@@ -198,12 +214,14 @@ static int atyfb_xl_init(struct fb_info_aty *info)
info->ref_clk_per = 100000000UL/card->ref_crystal;
info->ram_type = card->mem_type;
info->total_vram = card->mem_size;
+#if HAS_VICTORIA == 1
if (xl_card == VICTORIA) {
// the MCLK, XCLK are 120MHz on victoria card
info->mclk_per = 1000000/120;
info->xclk_per = 1000000/120;
info->features &= ~M64F_MFB_TIMES_4;
}
+#endif
/*
* Calculate mclk and xclk dividers, etc. The passed
@@ -367,12 +385,14 @@ static int atyfb_xl_init(struct fb_info_aty *info)
static char m64n_xl_33[] = "3D RAGE (XL PCI-33MHz)";
static char m64n_xl_66[] = "3D RAGE (XL PCI-66MHz)";
+
+#if CONFIG_CONSOLE_BTEXT==1
static void aty_set_crtc(const struct fb_info_aty *info,
const struct crtc *crtc);
static int aty_var_to_crtc(const struct fb_info_aty *info,
const struct fb_var_screeninfo *var,
struct crtc *crtc);
-#if 0
+#if PLL_CRTC_DECODE==1
static int aty_crtc_to_var(const struct crtc *crtc,
struct fb_var_screeninfo *var);
#endif
@@ -382,13 +402,13 @@ static void atyfb_set_par(const struct atyfb_par *par,
static int atyfb_decode_var(const struct fb_var_screeninfo *var,
struct atyfb_par *par,
const struct fb_info_aty *info);
-#if 0
+#if PLL_CRTC_DECODE==1
static int atyfb_encode_var(struct fb_var_screeninfo *var,
const struct atyfb_par *par,
const struct fb_info_aty *info);
#endif
-static void do_install_cmap(int con, struct fb_info *fb);
+static void do_install_cmap(int con, struct fb_info_aty *info);
#if 0
static u32 default_vram = 0;
@@ -414,6 +434,8 @@ struct fb_var_screeninfo default_var = {
0, FB_VMODE_NONINTERLACED
};
+#endif /*CONFIG_CONSOLE_BTEXT*/
+
static struct {
u16 pci_id, chip_type;
u8 rev_mask, rev_val;
@@ -426,7 +448,7 @@ static struct {
/* 3D RAGE XL PCI-33/BGA */
{ 0x4752, 0x4752, 0x00, 0x00, m64n_xl_33, 230, 83, 63, M64F_GT | M64F_INTEGRATED | M64F_RESET_3D | M64F_GTB_DSP | M64F_SDRAM_MAGIC_PLL | M64F_EXTRA_BRIGHT | M64F_XL_DLL | M64F_MFB_TIMES_4 },
};
-#if 1
+#if CONFIG_CONSOLE_BTEXT==1
static void aty_calc_mem_refresh(struct fb_info_aty *info,
u16 id,
int xclk)
@@ -461,7 +483,7 @@ static void aty_calc_mem_refresh(struct fb_info_aty *info,
info->mem_refresh_rate = i;
}
-#endif
+#endif /*CONFIG_CONSOLE_BTEXT */
static void ati_ragexl_init(device_t dev) {
u32 chip_id;
u32 i;
@@ -470,15 +492,13 @@ static void ati_ragexl_init(device_t dev) {
u8 rev;
const char *chipname = NULL, *xtal;
int pll, mclk, xclk;
+
+#if CONFIG_CONSOLE_BTEXT==1
+
#if 0
int gtb_memsize, k;
#endif
- struct fb_info_aty *info;
- struct fb_info_aty info_t;
- struct resource *res;
- info = &info_t;
-
struct fb_var_screeninfo var;
#if 0
struct display *disp;
@@ -488,13 +508,25 @@ static void ati_ragexl_init(device_t dev) {
u8 pll_ref_div;
#endif
+#endif /*CONFIG_CONSOLE_BTEXT==1 */
+
+ struct fb_info_aty *info;
+ struct fb_info_aty info_t;
+ struct resource *res;
+ info = &info_t;
+
#define USE_AUX_REG 1
+
res = &dev->resource[0];
if(res->flags & IORESOURCE_IO) {
res = &dev->resource[1];
}
+
+#if CONFIG_CONSOLE_BTEXT==1
info->frame_buffer = res->base;
+#endif /* CONFIG_CONSOLE_BTEXT */
+
#if USE_AUX_REG==0
info->ati_regbase = res->base+0x7ff000+0xc00;
#else
@@ -504,9 +536,14 @@ static void ati_ragexl_init(device_t dev) {
}
#endif
- printk_info("ati_regbase = 0x%08x, frame_buffer = 0x%08x\r\n", info->ati_regbase, info->frame_buffer);
- info->aty_cmap_regs = (struct aty_cmap_regs *)(info->ati_regbase+0xc0);
+#if CONFIG_CONSOLE_BTEXT==1
+ info->aty_cmap_regs = (struct aty_cmap_regs *)(info->ati_regbase+0xc0);
+#endif
+
+#if 0
+ printk_debug("ati_regbase = 0x%08x, frame_buffer = 0x%08x\r\n", info->ati_regbase, info->frame_buffer);
+#endif
chip_id = aty_ld_le32(CONFIG_CHIP_ID, info);
type = chip_id & CFG_CHIP_TYPE;
@@ -521,7 +558,7 @@ static void ati_ragexl_init(device_t dev) {
info->features = aty_chips[j].features;
goto found;
}
- printk_debug("ati_ragexl_init: Unknown mach64 0x%04x rev 0x%04x\n", type, rev);
+ printk_spew("ati_ragexl_init: Unknown mach64 0x%04x rev 0x%04x\n", type, rev);
return ;
found:
@@ -533,7 +570,10 @@ found:
mclk = 63;
}
#endif
+#if CONFIG_CONSOLE_BTEXT==1
aty_calc_mem_refresh(info, type, xclk);
+#endif /* CONFIG_CONSOLE_BTEXT */
+
info->pll_per = 1000000/pll;
info->mclk_per = 1000000/mclk;
info->xclk_per = 1000000/xclk;
@@ -545,6 +585,8 @@ found:
atyfb_xl_init(info);
+#if CONFIG_CONSOLE_BTEXT==1
+
info->ram_type = (aty_ld_le32(CONFIG_STAT0, info) & 0x07);
info->ref_clk_per = 1000000000000ULL/14318180;
@@ -675,7 +717,9 @@ found:
}
if (atyfb_decode_var(&var, &info->default_par, info)) {
+#if 0
printk_debug("atyfb: can't set default video mode\n");
+#endif
return ;
}
#if 0
@@ -697,16 +741,17 @@ found:
}
#endif
-#if 0
+#if PLL_CRTC_DECODE==1
atyfb_set_var(&var, -1, &info->fb_info);
#else
atyfb_set_par(&info->default_par, info);
- do_install_cmap(-1, &info->fb_info);
+// do_install_cmap(-1, &info->fb_info);
+ do_install_cmap(-1, info);
#endif
-#if 0
+#if PLL_CRTC_DECODE==1
- printk_info("framebuffer=0x%08x, width=%d, height=%d, bpp=%d, pitch=%d\n",info->frame_buffer,
+ printk_spew("framebuffer=0x%08x, width=%d, height=%d, bpp=%d, pitch=%d\n",info->frame_buffer,
(((info->current_par.crtc.h_tot_disp>>16) & 0xff)+1)*8,
((info->current_par.crtc.v_tot_disp>>16) & 0x7ff)+1,
info->current_par.crtc.bpp,
@@ -718,7 +763,7 @@ found:
info->current_par.crtc.bpp,
info->current_par.crtc.vxres*info->current_par.crtc.bpp/8,info->frame_buffer);
#else
- printk_debug("framebuffer=0x%08x, width=%d, height=%d, bpp=%d, pitch=%d\n",info->frame_buffer,
+ printk_spew("framebuffer=0x%08x, width=%d, height=%d, bpp=%d, pitch=%d\n",info->frame_buffer,
(((info->default_par.crtc.h_tot_disp>>16) & 0xff)+1)*8,
((info->default_par.crtc.v_tot_disp>>16) & 0x7ff)+1,
info->default_par.crtc.bpp,
@@ -736,37 +781,19 @@ found:
map_boot_text();
#if 0
- btext_drawstring("1\n");
- btext_drawstring("2\n");
- btext_drawstring("3\n");
- btext_drawstring("4\n");
- btext_drawstring("test framebuffer 5\n");
- btext_drawstring("test framebuffer 6\n");
- btext_drawstring("test framebuffer 7\n");
- btext_drawstring("test framebuffer 8\n");
- btext_drawstring("test framebuffer 9\n");
- btext_drawstring("test framebuffer 10\n");
- btext_drawstring("test framebuffer 11\n");
- btext_drawstring("test framebuffer 12\n");
- btext_drawstring("test framebuffer 13\n");
- btext_drawstring("test framebuffer 14\n");
- btext_drawstring("test framebuffer 15\n");
- btext_drawstring("test framebuffer 16\n");
- btext_drawstring("test framebuffer 17\n");
- btext_drawstring("test framebuffer 18\n");
- btext_drawstring("test framebuffer 19\n");
- btext_drawstring("test framebuffer 20\n");
- btext_drawstring("test framebuffer 21\n");
- btext_drawstring("test framebuffer 22\n");
- btext_drawstring("test framebuffer 23\n");
- btext_drawstring("test framebuffer 24\n");
+
+ btext_drawstring("test framebuffer\n");
mdelay(10000);
// test end
#endif
+
+#endif /* CONFIG_CONSOLE_BTEXT */
}
+#if CONFIG_CONSOLE_BTEXT==1
+
static int atyfb_decode_var(const struct fb_var_screeninfo *var,
struct atyfb_par *par,
const struct fb_info_aty *info)
@@ -792,7 +819,7 @@ static int atyfb_decode_var(const struct fb_var_screeninfo *var,
return 0;
}
-#if 0
+#if PLL_CRTC_DECODE==1
static int atyfb_encode_var(struct fb_var_screeninfo *var,
const struct atyfb_par *par,
const struct fb_info_aty *info)
@@ -896,7 +923,7 @@ static int aty_var_to_crtc(const struct fb_info_aty *info,
dp_pix_width = HOST_8BPP | SRC_8BPP | DST_8BPP | BYTE_ORDER_LSB_TO_MSB;
dp_chain_mask = 0x8080;
}
-#if 0
+#if SUPPORT_8_BPP_ABOVE==1
else if (bpp <= 16) {
bpp = 16;
pix_width = CRTC_PIX_WIDTH_15BPP;
@@ -948,7 +975,7 @@ else
return 0;
}
-#if 0
+#if PLL_CRTC_DECODE==1
static int aty_crtc_to_var(const struct crtc *crtc,
struct fb_var_screeninfo *var)
{
@@ -1011,7 +1038,7 @@ static int aty_crtc_to_var(const struct crtc *crtc,
var->transp.offset = 0;
var->transp.length = 0;
break;
-#if 0
+#if SUPPORT_8_BPP_ABOVE==1
case CRTC_PIX_WIDTH_15BPP: /* RGB 555 */
bpp = 16;
var->red.offset = 10;
@@ -1023,8 +1050,6 @@ static int aty_crtc_to_var(const struct crtc *crtc,
var->transp.offset = 0;
var->transp.length = 0;
break;
-#endif
-#if 0
case CRTC_PIX_WIDTH_16BPP: /* RGB 565 */
bpp = 16;
var->red.offset = 11;
@@ -1036,8 +1061,6 @@ static int aty_crtc_to_var(const struct crtc *crtc,
var->transp.offset = 0;
var->transp.length = 0;
break;
-#endif
-#if 0
case CRTC_PIX_WIDTH_24BPP: /* RGB 888 */
bpp = 24;
var->red.offset = 16;
@@ -1134,7 +1157,7 @@ static int encode_fix(struct fb_fix_screeninfo *fix,
/*
* Set the User Defined Part of the Display
*/
-#if 0
+#if PLL_CRTC_DECODE==1
static int atyfb_set_var(struct fb_var_screeninfo *var, int con,
struct fb_info *fb)
{
@@ -1214,7 +1237,7 @@ static int atyfb_set_var(struct fb_var_screeninfo *var, int con,
if ((err = fb_alloc_cmap(&display->cmap, 0, 0)))
return err;
#endif
- do_install_cmap(con, &info->fb_info);
+ do_install_cmap(con, info);
#if 0
}
#endif
@@ -1235,8 +1258,7 @@ static void atyfb_set_par(const struct atyfb_par *par,
accelmode = par->accel_flags; /* hack */
-#if 0
-// We only use default_par
+#if PLL_CRTC_DECODE==1
info->current_par = *par;
#endif
@@ -1260,7 +1282,7 @@ static void atyfb_set_par(const struct atyfb_par *par,
case 8:
i |= 0x02000000;
break;
-#if 0
+#if SUPPORT_8_BPP_ABOVE==1
case 16:
i |= 0x03000000;
break;
@@ -1276,10 +1298,12 @@ static void atyfb_set_par(const struct atyfb_par *par,
i |= info->mem_refresh_rate << 20;
switch (par->crtc.bpp) {
case 8:
-// case 24:
+#if SUPPORT_8_BPP_ABOVE==1
+ case 24:
+#endif
i |= 0x00000000;
break;
-#if 0
+#if SUPPORT_8_BPP_ABOVE==1
case 16:
i |= 0x04000000;
break;
@@ -1316,13 +1340,6 @@ static void atyfb_set_par(const struct atyfb_par *par,
#endif
-#if 0
- btext_update_display(info->frame_buffer_phys,
- (((par->crtc.h_tot_disp>>16) & 0xff)+1)*8,
- ((par->crtc.v_tot_disp>>16) & 0x7ff)+1,
- par->crtc.bpp,
- par->crtc.vxres*par->crtc.bpp/8);
-#endif
}
#if 0
static u16 red2[] = {
@@ -1385,9 +1402,8 @@ static struct fb_cmap default_16_colors = {
static int atyfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
- u_int transp, struct fb_info *fb)
+ u_int transp, struct fb_info_aty *info)
{
- struct fb_info_aty *info = (struct fb_info_aty *)fb;
int i, scale;
if (regno > 255)
@@ -1406,7 +1422,7 @@ static int atyfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
i |= 0x2; /*DAC_CNTL|0x2 turns off the extra brightness for gt*/
aty_st_8(DAC_CNTL, i, info);
aty_st_8(DAC_MASK, 0xff, info);
-#if 0
+#if PLL_CRTC_DECODE==1
scale = (M64_HAS(INTEGRATED) && info->current_par.crtc.bpp == 16) ? 3 : 0;
#else
scale = (M64_HAS(INTEGRATED) && info->default_par.crtc.bpp == 16) ? 3 : 0;
@@ -1420,8 +1436,8 @@ static int atyfb_setcolreg(u_int regno, u_int red, u_int green, u_int blue,
int fb_set_cmap(struct fb_cmap *cmap, int kspc,
int (*setcolreg)(u_int, u_int, u_int, u_int, u_int,
- struct fb_info *),
- struct fb_info *fb)
+ struct fb_info_aty *),
+ struct fb_info_aty *info)
{
int i, start;
u16 *red, *green, *blue, *transp;
@@ -1445,7 +1461,7 @@ int fb_set_cmap(struct fb_cmap *cmap, int kspc,
blue++;
if (transp)
transp++;
- if (setcolreg(start++, hred, hgreen, hblue, htransp, fb))
+ if (setcolreg(start++, hred, hgreen, hblue, htransp, info))
return 0;
}
return 0;
@@ -1464,17 +1480,17 @@ struct fb_cmap *fb_default_cmap(int len)
return &default_16_colors;
}
-static void do_install_cmap(int con, struct fb_info *fb)
+static void do_install_cmap(int con, struct fb_info_aty *info)
{
-#if 0
- struct fb_info_aty *info = (struct fb_info_aty *)fb;
+#if PLL_CRTC_DECODE==1
int size = info->current_par.crtc.bpp == 16 ? 32 : 256;
#else
int size = 256;
#endif
- fb_set_cmap(fb_default_cmap(size), 1, atyfb_setcolreg, fb);
+ fb_set_cmap(fb_default_cmap(size), 1, atyfb_setcolreg, info);
}
+#endif /*CONFIG_CONSOLE_BTEXT */
static struct device_operations ati_ragexl_graph_ops = {
.read_resources = pci_dev_read_resources,