From 97c4947ec9af1664e81ee797834a32d3ca2f74fe Mon Sep 17 00:00:00 2001 From: Yinghai Lu Date: Wed, 28 Apr 2004 05:37:36 +0000 Subject: Changes for btext and etherboot and filo merge support git-svn-id: svn://svn.coreboot.org/coreboot/trunk@1540 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1 --- src/drivers/ati/ragexl/atyfb.h | 11 ++- src/drivers/ati/ragexl/fb.h | 5 ++ src/drivers/ati/ragexl/mach64_ct.c | 13 ++- src/drivers/ati/ragexl/xlinit.c | 170 ++++++++++++++++++++----------------- 4 files changed, 118 insertions(+), 81 deletions(-) (limited to 'src/drivers') 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 #include +#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 +#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, -- cgit v1.2.3