2004-06-26 21:59:59

by Martin MOKREJŠ

[permalink] [raw]
Subject: radeonfb: cannot map FB

Hi,
could someone help with radeonfb not detected under 2.4.27-rc2?
I filed this bug under the 2.6 bugzilla ... :(
http://bugzilla.kernel.org/show_bug.cgi?id=2917
Thanks
Please Cc: me in replies.
--
Martin Mokrejs


2004-06-26 22:49:55

by Luca

[permalink] [raw]
Subject: Re: radeonfb: cannot map FB

Martin MOKREJ? <[email protected]> ha scritto:
> Hi,
> could someone help with radeonfb not detected under 2.4.27-rc2?
> I filed this bug under the 2.6 bugzilla ... :(
> http://bugzilla.kernel.org/show_bug.cgi?id=2917
> Thanks
> Please Cc: me in replies.

ioremap is failing. You likely have 1GB (or more) of RAM and kernel is
unable to find some space in lowmem to map the video RAM (128MB).

In 2.6 this is fixed by mapping only a small amount of video RAM (at
most 16MB).

Backport should be easy, I'll cook a patch ASAP.

Luca
--
Home: http://kronoz.cjb.net
Let me make your mind, leave yourself behind
Be not afraid

2004-06-27 19:17:13

by Martin MOKREJŠ

[permalink] [raw]
Subject: Re: radeonfb: cannot map FB

Hi,
yes, I have one GB and SMP kernel. It's interresting that I don't
remember this bug with kernels around 2.4.23 or .24 - just a guess. If
someone would be interrwested, and can check when did it appear for the
first time. Otherwise, will be happy to get your patch. I think the
printk() lines could print out more debug info. For example the contents of
some variables which were passed to preceeding functions ... ;)
Martin

On Sun, 27 Jun 2004, Kronos wrote:

> Martin MOKREJ? <[email protected]> ha scritto:
> > Hi,
> > could someone help with radeonfb not detected under 2.4.27-rc2?
> > I filed this bug under the 2.6 bugzilla ... :(
> > http://bugzilla.kernel.org/show_bug.cgi?id=2917
> > Thanks
> > Please Cc: me in replies.
>
> ioremap is failing. You likely have 1GB (or more) of RAM and kernel is
> unable to find some space in lowmem to map the video RAM (128MB).
>
> In 2.6 this is fixed by mapping only a small amount of video RAM (at
> most 16MB).
>
> Backport should be easy, I'll cook a patch ASAP.
>
> Luca
>

--
Martin Mokrejs
GPG key is at http://www.natur.cuni.cz/~mmokrejs

2004-06-27 20:34:09

by Luca

[permalink] [raw]
Subject: Re: radeonfb: cannot map FB

Il Sun, Jun 27, 2004 at 09:16:34PM +0200, Martin MOKREJ? ha scritto:
> Hi,
> yes, I have one GB and SMP kernel. It's interresting that I don't
> remember this bug with kernels around 2.4.23 or .24 - just a guess.

Hum, I see a big DRM merge in .23 but it's unrelated to the fb driver.
Nothing else. Maybe you added another PCI card that used part of the
available address space?

> If someone would be interrwested, and can check when did it appear for
> the first time. Otherwise, will be happy to get your patch.

Patch follows. Compile with DEBUG 1 if something goes wrong.

> I think the printk() lines could print out more debug info. For
> example the contents of some variables which were passed to preceeding
> functions ... ;)

The old driver (ie. the one in 2.4 and the "old" one in 2.6) is not
developed anymore. The new reference point is the driver by BenH in 2.6.


--- linux-2.4/drivers/video/radeonfb.c.orig 2004-06-27 22:26:56.000000000 +0200
+++ linux-2.4/drivers/video/radeonfb.c 2004-06-27 22:29:49.000000000 +0200
@@ -176,7 +176,8 @@
#define RTRACE if(0) printk
#endif

-
+#define MAX_MAPPED_VRAM (2048*2048*4)
+#define MIN_MAPPED_VRAM (1024*768*1)

enum radeon_chips {
RADEON_QD,
@@ -499,7 +500,8 @@

short chipset;
unsigned char arch;
- int video_ram;
+ unsigned int video_ram;
+ unsigned int mapped_vram;
u8 rev;
int pitch, bpp, depth;
int xres, yres, pixclock;
@@ -1823,8 +1825,20 @@
}
}

- rinfo->fb_base = (unsigned long) ioremap (rinfo->fb_base_phys,
- rinfo->video_ram);
+ if (rinfo->video_ram < rinfo->mapped_vram)
+ rinfo->mapped_vram = rinfo->video_ram;
+ else
+ rinfo->mapped_vram = MAX_MAPPED_VRAM;
+ do {
+ rinfo->fb_base = (unsigned long) ioremap (rinfo->fb_base_phys,
+ rinfo->mapped_vram);
+ if (rinfo->fb_base)
+ break;
+
+ RTRACE(KERN_INFO "radeonfb: cannot ioremap %dk of videoram\n", rinfo->mapped_vram);
+ rinfo->mapped_vram /= 2;
+ } while(rinfo->mapped_vram > MIN_MAPPED_VRAM);
+
if (!rinfo->fb_base) {
printk ("radeonfb: cannot map FB\n");
iounmap ((void*)rinfo->mmio_base);
@@ -1835,6 +1849,7 @@
kfree (rinfo);
return -ENODEV;
}
+ RTRACE(KERN_INFO "radeonfb: mapped %dk videoram\n", rinfo->mapped_vram/1024);

/* currcon not yet configured, will be set by first switch */
rinfo->currcon = -1;
@@ -2261,7 +2276,7 @@
sprintf (fix->id, "ATI Radeon %s", rinfo->name);

fix->smem_start = rinfo->fb_base_phys;
- fix->smem_len = rinfo->video_ram;
+ fix->smem_len = rinfo->mapped_vram;

fix->type = disp->type;
fix->type_aux = disp->type_aux;
@@ -2429,6 +2444,9 @@
return -EINVAL;
}

+ if (((v.xres_virtual * v.yres_virtual * nom) / den) > rinfo->mapped_vram)
+ return -EINVAL;
+
if (radeonfb_do_maximize(rinfo, var, &v, nom, den) < 0)
return -EINVAL;



Luca
--
Home: http://kronoz.cjb.net
Carpe diem, quam minimum credula postero. (Q. Horatius Flaccus)

2004-06-27 21:52:24

by Martin MOKREJŠ

[permalink] [raw]
Subject: Re: radeonfb: cannot map FB

On Sun, 27 Jun 2004, Kronos wrote:

Hi,
thanks a lot, this has fixed my bug! Below is what I got with DEBUG=1:

radeonfb_pci_register BEGIN
radeonfb: ref_clk=2700, ref_div=12, xclk=20000 from BIOS
radeonfb: probed DDR SGRAM 131072k videoram
BIOS 4 scratch = 8000008
FP_GEN_CNTL: b430085, FP2_GEN_CNTL: 8
TMDS_TRANSMITTER_CNTL: 10000041, TMDS_CNTL: 1000000, LVDS_GEN_CNTL: 8000008
DAC_CNTL: ff606002, DAC_CNTL2: 0, CRTC_GEN_CNTL: 2000200
radeonfb: detected DFP panel size from BIOS: 1280x1024
radeonfb: mapped 16384k videoram
hStart = 1328, hEnd = 1440, hTotal = 1688
vStart = 1025, vEnd = 1028, vTotal = 1066
h_total_disp = 0x9f00d2 hsync_strt_wid = 0xe052a
v_total_disp = 0x3ff0429 vsync_strt_wid = 0x30400
pixclock = 9259
freq = 10800
post div = 0x2
fb_div = 0x60
ppll_div_3 = 0x10060
Console: switching to colour frame buffer device 160x64
radeonfb: ATI Radeon 9200 Ya DDR SGRAM 128 MB
radeonfb: DVI port DFP monitor connected
radeonfb: CRT port no monitor connected
radeonfb_pci_register END

Tha card has 128MB RAM, so the driver detects size properly.
Please include this fix in new RC.
Martin

> Il Sun, Jun 27, 2004 at 09:16:34PM +0200, Martin MOKREJ? ha scritto:
> > Hi,
> > yes, I have one GB and SMP kernel. It's interresting that I don't
> > remember this bug with kernels around 2.4.23 or .24 - just a guess.
>
> Hum, I see a big DRM merge in .23 but it's unrelated to the fb driver.
> Nothing else. Maybe you added another PCI card that used part of the
> available address space?

Definitely not. Maybe changed setting in BIOS, otherwise physically same
box. But as I said, those kernel versions were just a guess. If you want,
I'll try several old kernels ...

> > If someone would be interrwested, and can check when did it appear for
> > the first time. Otherwise, will be happy to get your patch.
>
> Patch follows. Compile with DEBUG 1 if something goes wrong.
>
> > I think the printk() lines could print out more debug info. For
> > example the contents of some variables which were passed to preceeding
> > functions ... ;)
>
> The old driver (ie. the one in 2.4 and the "old" one in 2.6) is not
> developed anymore. The new reference point is the driver by BenH in 2.6.
>
>
> --- linux-2.4/drivers/video/radeonfb.c.orig 2004-06-27 22:26:56.000000000 +0200
> +++ linux-2.4/drivers/video/radeonfb.c 2004-06-27 22:29:49.000000000 +0200
> @@ -176,7 +176,8 @@
> #define RTRACE if(0) printk
> #endif
>
> -
> +#define MAX_MAPPED_VRAM (2048*2048*4)
> +#define MIN_MAPPED_VRAM (1024*768*1)
>
> enum radeon_chips {
> RADEON_QD,
> @@ -499,7 +500,8 @@
>
> short chipset;
> unsigned char arch;
> - int video_ram;
> + unsigned int video_ram;
> + unsigned int mapped_vram;
> u8 rev;
> int pitch, bpp, depth;
> int xres, yres, pixclock;
> @@ -1823,8 +1825,20 @@
> }
> }
>
> - rinfo->fb_base = (unsigned long) ioremap (rinfo->fb_base_phys,
> - rinfo->video_ram);
> + if (rinfo->video_ram < rinfo->mapped_vram)
> + rinfo->mapped_vram = rinfo->video_ram;
> + else
> + rinfo->mapped_vram = MAX_MAPPED_VRAM;
> + do {
> + rinfo->fb_base = (unsigned long) ioremap (rinfo->fb_base_phys,
> + rinfo->mapped_vram);
> + if (rinfo->fb_base)
> + break;
> +
> + RTRACE(KERN_INFO "radeonfb: cannot ioremap %dk of videoram\n", rinfo->mapped_vram);
> + rinfo->mapped_vram /= 2;
> + } while(rinfo->mapped_vram > MIN_MAPPED_VRAM);
> +
> if (!rinfo->fb_base) {
> printk ("radeonfb: cannot map FB\n");
> iounmap ((void*)rinfo->mmio_base);
> @@ -1835,6 +1849,7 @@
> kfree (rinfo);
> return -ENODEV;
> }
> + RTRACE(KERN_INFO "radeonfb: mapped %dk videoram\n", rinfo->mapped_vram/1024);
>
> /* currcon not yet configured, will be set by first switch */
> rinfo->currcon = -1;
> @@ -2261,7 +2276,7 @@
> sprintf (fix->id, "ATI Radeon %s", rinfo->name);
>
> fix->smem_start = rinfo->fb_base_phys;
> - fix->smem_len = rinfo->video_ram;
> + fix->smem_len = rinfo->mapped_vram;
>
> fix->type = disp->type;
> fix->type_aux = disp->type_aux;
> @@ -2429,6 +2444,9 @@
> return -EINVAL;
> }
>
> + if (((v.xres_virtual * v.yres_virtual * nom) / den) > rinfo->mapped_vram)
> + return -EINVAL;
> +
> if (radeonfb_do_maximize(rinfo, var, &v, nom, den) < 0)
> return -EINVAL;
>
>
>
> Luca
>

--
Martin Mokrejs
GPG key is at http://www.natur.cuni.cz/~mmokrejs