2007-09-04 10:57:57

by Andreas Herrmann

[permalink] [raw]
Subject: [PATCH 2/4] radeonfb: add new module parameter to force PLL calculation

On my Acer Aspire 5100 (with 0x5975) I need to force PLL caclulation.
Most probably the BIOS dividers are incorrect/insufficient. Without pll
calculation console goes blank.

Signed-off-by: Andreas Herrmann <[email protected]>
---
drivers/video/aty/radeon_base.c | 7 ++++++-
1 files changed, 6 insertions(+), 1 deletions(-)

diff --git a/drivers/video/aty/radeon_base.c b/drivers/video/aty/radeon_base.c
index 90a3957..f672c0c 100644
--- a/drivers/video/aty/radeon_base.c
+++ b/drivers/video/aty/radeon_base.c
@@ -268,6 +268,7 @@ static int mirror = 0;
static int panel_yres = 0;
static int force_dfp = 0;
static int force_measure_pll = 0;
+static int force_pll_calc = 0;
#ifdef CONFIG_MTRR
static int nomtrr = 0;
#endif
@@ -1590,7 +1591,7 @@ static int radeonfb_set_par(struct fb_info *info)

pixClock = 100000000 / rinfo->panel_info.clock;

- if (rinfo->panel_info.use_bios_dividers) {
+ if (rinfo->panel_info.use_bios_dividers && !force_pll_calc) {
nopllcalc = 1;
newmode->ppll_div_3 = rinfo->panel_info.fbk_divider |
(rinfo->panel_info.post_divider << 16);
@@ -2495,6 +2496,8 @@ static int __init radeonfb_setup (char *options)
nomodeset = 1;
} else if (!strncmp(this_opt, "force_measure_pll", 17)) {
force_measure_pll = 1;
+ } else if (!strncmp(this_opt, "force_pll_calc", 17)) {
+ force_pll_calc = 1;
} else if (!strncmp(this_opt, "ignore_edid", 11)) {
ignore_edid = 1;
#if defined(CONFIG_PM) && defined(CONFIG_X86)
@@ -2550,6 +2553,8 @@ module_param(monitor_layout, charp, 0);
MODULE_PARM_DESC(monitor_layout, "Specify monitor mapping (like XFree86)");
module_param(force_measure_pll, bool, 0);
MODULE_PARM_DESC(force_measure_pll, "Force measurement of PLL (debug)");
+module_param(force_pll_calc, bool, 0400);
+MODULE_PARM_DESC(force_pll_calc, "Force calculation of PLL");
#ifdef CONFIG_MTRR
module_param(nomtrr, bool, 0);
MODULE_PARM_DESC(nomtrr, "bool: disable use of MTRR registers");
--
1.5.3



2007-09-06 12:06:26

by Benjamin Herrenschmidt

[permalink] [raw]
Subject: Re: [PATCH 2/4] radeonfb: add new module parameter to force PLL calculation

On Tue, 2007-09-04 at 12:59 +0200, [email protected] wrote:
> On my Acer Aspire 5100 (with 0x5975) I need to force PLL caclulation.
> Most probably the BIOS dividers are incorrect/insufficient. Without pll
> calculation console goes blank.
>
> Signed-off-by: Andreas Herrmann <[email protected]>

I don't like those tunables. First we should get a look at what values
we obtain from the BIOS. Could be something with the parsing of ATOM
BIOS. In any case, we might be able to detect we got wrong values or use
subsystem vendor/device ID to blacklist.

Ben.

> ---
> drivers/video/aty/radeon_base.c | 7 ++++++-
> 1 files changed, 6 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/video/aty/radeon_base.c b/drivers/video/aty/radeon_base.c
> index 90a3957..f672c0c 100644
> --- a/drivers/video/aty/radeon_base.c
> +++ b/drivers/video/aty/radeon_base.c
> @@ -268,6 +268,7 @@ static int mirror = 0;
> static int panel_yres = 0;
> static int force_dfp = 0;
> static int force_measure_pll = 0;
> +static int force_pll_calc = 0;
> #ifdef CONFIG_MTRR
> static int nomtrr = 0;
> #endif
> @@ -1590,7 +1591,7 @@ static int radeonfb_set_par(struct fb_info *info)
>
> pixClock = 100000000 / rinfo->panel_info.clock;
>
> - if (rinfo->panel_info.use_bios_dividers) {
> + if (rinfo->panel_info.use_bios_dividers && !force_pll_calc) {
> nopllcalc = 1;
> newmode->ppll_div_3 = rinfo->panel_info.fbk_divider |
> (rinfo->panel_info.post_divider << 16);
> @@ -2495,6 +2496,8 @@ static int __init radeonfb_setup (char *options)
> nomodeset = 1;
> } else if (!strncmp(this_opt, "force_measure_pll", 17)) {
> force_measure_pll = 1;
> + } else if (!strncmp(this_opt, "force_pll_calc", 17)) {
> + force_pll_calc = 1;
> } else if (!strncmp(this_opt, "ignore_edid", 11)) {
> ignore_edid = 1;
> #if defined(CONFIG_PM) && defined(CONFIG_X86)
> @@ -2550,6 +2553,8 @@ module_param(monitor_layout, charp, 0);
> MODULE_PARM_DESC(monitor_layout, "Specify monitor mapping (like XFree86)");
> module_param(force_measure_pll, bool, 0);
> MODULE_PARM_DESC(force_measure_pll, "Force measurement of PLL (debug)");
> +module_param(force_pll_calc, bool, 0400);
> +MODULE_PARM_DESC(force_pll_calc, "Force calculation of PLL");
> #ifdef CONFIG_MTRR
> module_param(nomtrr, bool, 0);
> MODULE_PARM_DESC(nomtrr, "bool: disable use of MTRR registers");

2007-09-10 22:19:11

by Andreas Herrmann

[permalink] [raw]
Subject: Re: [PATCH 2/4] radeonfb: add new module parameter to force PLL calculation

On Tue, Sep 04, 2007 at 03:46:29PM +0200, Benjamin Herrenschmidt wrote:
> I don't like those tunables. First we should get a look at what values
> we obtain from the BIOS. Could be something with the parsing of ATOM
> BIOS. In any case, we might be able to detect we got wrong values or use
> subsystem vendor/device ID to blacklist.

So what should I looking for?
Here is the diff of the radeonfb kernel messages between
(-)nopllcalc and (+)forcing pll calculation with my patch:

vSync_width: 4
clock: 7350
Setting up default mode based on panel info
-hStart = 672, hEnd = 712, hTotal = 824
-vStart = 404, vEnd = 408, vTotal = 437
-h_total_disp = 0x4f0066 hsync_strt_wid = 0x5029a
-v_total_disp = 0x18f01b4 vsync_strt_wid = 0x40193
+hStart = 1312, hEnd = 1352, hTotal = 1464
+vStart = 804, vEnd = 808, vTotal = 837
+h_total_disp = 0x9f00b6 hsync_strt_wid = 0x5051a
+v_total_disp = 0x31f0344 vsync_strt_wid = 0x40323
pixclock = 13605
freq = 7350
-Console: switching to colour frame buffer device 80x25
+freq = 7350, PLL min = 20000, PLL max = 40000
+ref_div = 6, ref_clk = 1432, output_freq = 29400
+ref_div = 6, ref_clk = 1432, output_freq = 29400
+post div = 0x2
+fb_div = 0x7b
+ppll_div_3 = 0x2007b
+Console: switching to colour frame buffer device 160x50
radeonfb (0000:01:05.0): ATI Radeon 5975 "Yu"
radeonfb_pci_register END

"nopllcalc" results in a console 80x25 but forcing pll calculation gives
the expected result.

BTW, I am a little surprised that the display doesn't blank without
my patch as it used to in the past ...

Oops, PCI ID 0x5975 was already added with commit
b5f2f4d1a6d7efde39cfb5e1d034981c69f2214c

I guess I have to repeat some testing with both the older commit and my patch(es)
to sort out what is really needed to support my RS482/0x5975.


Regards,

Andreas