Radeon xpress 200m and radeonfb kinda work
Hi!
I have gotten the radeon xpress 200m (the version without dedicated vmem) to work with radeonfb.
The attached patch (against linux-2.6.20.1) works for me.
Since I don't have any docs for the card I am unsure if the patch is 100% correct. Can someone else with a 200m try it out?
(I have tested it by enabling fbcon and radeonfb in the kernel and added "video=radeonfb" to lilo. This gave me a nice 1280x800 console :) )
/Johan Henriksson
Please CC, I'm not on the list.
drivers/video/aty/ati_ids.h +1 -1
@@ -209,4 +209,4 @@#define PCI_CHIP_R423_5D57 0x5D57#define PCI_CHIP_RS350_7834 0x7834#define PCI_CHIP_RS350_7835 0x7835 - +#define PCI_CHIP_RS480_5955 0x5955
drivers/video/aty/radeon_base.c +5 -2
@@ -100,6 +100,8 @@ { PCI_VENDOR_ID_ATI, id, PCI_ANY_ID, PCI_ANY_ID, 0, 0, (flags) | (CHIP_FAMILY_##family) }static struct pci_device_id radeonfb_pci_table[] = { +/* Radeon Xpress 200m */ +CHIP_DEF (PCI_CHIP_RS480_5955 ,RS480 ,CHIP_HAS_CRTC2 |CHIP_IS_IGP |CHIP_IS_MOBILITY ),/* Mobility M6 */ CHIP_DEF (PCI_CHIP_RADEON_LY ,RV100 ,CHIP_HAS_CRTC2 |CHIP_IS_MOBILITY ),CHIP_DEF (PCI_CHIP_RADEON_LZ ,RV100 ,CHIP_HAS_CRTC2 |CHIP_IS_MOBILITY ),
@@ -1990,7 +1992,8 @@ static void radeon_identify_vram(struct/* framebuffer size */ if ((rinfo->family ==CHIP_FAMILY_RS100 ) || (rinfo->family ==CHIP_FAMILY_RS200 ) || - (rinfo->family ==CHIP_FAMILY_RS300 )) { + (rinfo->family ==CHIP_FAMILY_RS300 ) || + (rinfo->family ==CHIP_FAMILY_RS480 ) ) {u32 tom =INREG (NB_TOM ); tmp = ((((tom >>16 ) - (tom &0xffff ) +1 ) <<6 ) *1024 );
@@ -2329,7 +2332,7 @@ static int __devinit radeonfb_pci_regist/* -2 is special: means ON on mobility chips and do not * change on others */ -radeonfb_pm_init (rinfo, rinfo->is_mobility ?1 :-1 , ignore_devlist, force_sleep); +radeonfb_pm_init (rinfo,-1 ,ignore_devlist, force_sleep);//rinfo->is_mobility ? 1 : -1); }else radeonfb_pm_init (rinfo, default_dynclk, ignore_devlist, force_sleep);
drivers/video/aty/radeonfb.h +3 -1
@@ -48,6 +48,7 @@ enum radeon_family {CHIP_FAMILY_RV350 ,CHIP_FAMILY_RV380 ,/* RV370/RV380/M22/M24 */ CHIP_FAMILY_R420 ,/* R420/R423/M18 */ +CHIP_FAMILY_RS480 , CHIP_FAMILY_LAST, };
@@ -64,7 +65,8 @@ enum radeon_family { ((rinfo)->family ==CHIP_FAMILY_RV350 ) || \ ((rinfo)->family ==CHIP_FAMILY_R350 ) || \ ((rinfo)->family ==CHIP_FAMILY_RV380 ) || \ - ((rinfo)->family == CHIP_FAMILY_R420)) + ((rinfo)->family ==CHIP_FAMILY_R420 ) || \ + ((rinfo)->family == CHIP_FAMILY_RS480) )/* * Chip flags
Quoted 11 lines · Johan Henriksson
Hi!
I have gotten the radeon xpress 200m (the version without dedicated vmem) to work with radeonfb.
The attached patch (against linux-2.6.20.1) works for me. Since I don't have any docs for the card I am unsure if the patch is 100% correct.
Can someone else with a 200m try it out?
(I have tested it by enabling fbcon and radeonfb in the kernel and added "video=radeonfb" to lilo. This gave me a nice 1280x800 console :) )
Works for me as a module on Compaq V2000 notebook. 160x48 is a bit small, but looks very clear and crisp.
Is there anything else needed to get this merged?
Quoted 13 lines · Chuck Ebbert
Quoted 10 lines · Johan Henriksson
Hi!
I have gotten the radeon xpress 200m (the version without dedicated vmem) to work with radeonfb. The attached patch (against linux-2.6.20.1) works for me. Since I don't have any docs for the card I am unsure if the patch is 100% correct. Can someone else with a 200m try it out? (I have tested it by enabling fbcon and radeonfb in the kernel and added "video=radeonfb" to lilo. This gave me a nice 1280x800 console :) )
Quoted 5 lines
Works for me as a module on Compaq V2000 notebook. 160x48 is a bit small, but looks very clear and crisp.
Is there anything else needed to get this merged?
As you can see in the patch I have disabled "Dynamic Clock PM" since it makes my card freak out (Don't know why :( ).
Is there a reason why the "default_dynclk" parameter only is available when radeonfb is built as a module or should it be added to radeonfb_setup?
/Johan Henriksson
Chuck Ebbert
Tested-byQuoted 4 lines · johan henriksson
As you can see in the patch I have disabled "Dynamic Clock PM" since it makes my card freak out (Don't know why :( ).
Is there a reason why the "default_dynclk" parameter only is available when radeonfb is built as a module or should it be added toradeonfb_setup?
I don't have a clue how that works; I just merged your patch into a Fedora test kernel and it worked. (And it looks a lot nicer than vesafb.)
Our X driver guru says the patch is OK and Xpress 200M is the same as normal Radeon for 2D so framebuffer should be OK.
So we can add this to the patch:
Please repost it as a reply-to-all and add a decent description and a signed-off-by per this document:
http://www.zip.com.au/~akpm/linux/patches/stuff/tpp.txt
Hi!
I have gotten the radeon xpress 200m (the version without dedicated vmem) to work with radeonfb.
The attached patch (against linux-2.6.20.1) works for me.
Since I don't have any docs for the card I am unsure if the patch is 100% correct. Can someone else with a 200m try it out?
(I have tested it by enabling fbcon and radeonfb in the kernel and added "video=radeonfb" to lilo. This gave me a nice 1280x800 console :) )
/Johan Henriksson
Please CC, I'm not on the list.
drivers/video/aty/ati_ids.h +1 -1
@@ -209,4 +209,4 @@#define PCI_CHIP_R423_5D57 0x5D57#define PCI_CHIP_RS350_7834 0x7834#define PCI_CHIP_RS350_7835 0x7835 - +#define PCI_CHIP_RS480_5955 0x5955
drivers/video/aty/radeon_base.c +5 -2
@@ -100,6 +100,8 @@ { PCI_VENDOR_ID_ATI, id, PCI_ANY_ID, PCI_ANY_ID, 0, 0, (flags) | (CHIP_FAMILY_##family) }static struct pci_device_id radeonfb_pci_table[] = { +/* Radeon Xpress 200m */ +CHIP_DEF (PCI_CHIP_RS480_5955 ,RS480 ,CHIP_HAS_CRTC2 |CHIP_IS_IGP |CHIP_IS_MOBILITY ),/* Mobility M6 */ CHIP_DEF (PCI_CHIP_RADEON_LY ,RV100 ,CHIP_HAS_CRTC2 |CHIP_IS_MOBILITY ),CHIP_DEF (PCI_CHIP_RADEON_LZ ,RV100 ,CHIP_HAS_CRTC2 |CHIP_IS_MOBILITY ),
@@ -1990,7 +1992,8 @@ static void radeon_identify_vram(struct/* framebuffer size */ if ((rinfo->family ==CHIP_FAMILY_RS100 ) || (rinfo->family ==CHIP_FAMILY_RS200 ) || - (rinfo->family ==CHIP_FAMILY_RS300 )) { + (rinfo->family ==CHIP_FAMILY_RS300 ) || + (rinfo->family ==CHIP_FAMILY_RS480 ) ) {u32 tom =INREG (NB_TOM ); tmp = ((((tom >>16 ) - (tom &0xffff ) +1 ) <<6 ) *1024 );
@@ -2329,7 +2332,7 @@ static int __devinit radeonfb_pci_regist/* -2 is special: means ON on mobility chips and do not * change on others */ -radeonfb_pm_init (rinfo, rinfo->is_mobility ?1 :-1 , ignore_devlist, force_sleep); +radeonfb_pm_init (rinfo,-1 ,ignore_devlist, force_sleep);//rinfo->is_mobility ? 1 : -1); }else radeonfb_pm_init (rinfo, default_dynclk, ignore_devlist, force_sleep);
drivers/video/aty/radeonfb.h +3 -1
@@ -48,6 +48,7 @@ enum radeon_family {CHIP_FAMILY_RV350 ,CHIP_FAMILY_RV380 ,/* RV370/RV380/M22/M24 */ CHIP_FAMILY_R420 ,/* R420/R423/M18 */ +CHIP_FAMILY_RS480 , CHIP_FAMILY_LAST, };
@@ -64,7 +65,8 @@ enum radeon_family { ((rinfo)->family ==CHIP_FAMILY_RV350 ) || \ ((rinfo)->family ==CHIP_FAMILY_R350 ) || \ ((rinfo)->family ==CHIP_FAMILY_RV380 ) || \ - ((rinfo)->family == CHIP_FAMILY_R420)) + ((rinfo)->family ==CHIP_FAMILY_R420 ) || \ + ((rinfo)->family == CHIP_FAMILY_RS480) )/* * Chip flags
PATCH 1/1 radeonfb: Add support for Radeon xpress 200m
Added support for radeon xpress 200m(rs480).
Note that the card doesn't like dynclk turned on.
Please CC replies to [email protected]
---
drivers/video/aty/ati_ids.h +0 -0
@@ -209,4 +209,4 @@
#define PCI_CHIP_R423_5D57 0x5D57 #define PCI_CHIP_RS350_7834 0x7834 #define PCI_CHIP_RS350_7835 0x7835
-
+#define PCI_CHIP_RS480_5955 0x5955
drivers/video/aty/radeon_base.c +0 -0
@@ -100,6 +100,8 @@
{ PCI_VENDOR_ID_ATI, id, PCI_ANY_ID, PCI_ANY_ID, 0, 0, (flags) | (CHIP_FAMILY_##family) }static struct pci_device_id radeonfb_pci_table[] = {
+ /* Radeon Xpress 200m */
+ CHIP_DEF(PCI_CHIP_RS480_5955, RS480, CHIP_HAS_CRTC2 | CHIP_IS_IGP | CHIP_IS_MOBILITY),
/* Mobility M6 */
CHIP_DEF(PCI_CHIP_RADEON_LY, RV100, CHIP_HAS_CRTC2 | CHIP_IS_MOBILITY),
CHIP_DEF(PCI_CHIP_RADEON_LZ, RV100, CHIP_HAS_CRTC2 | CHIP_IS_MOBILITY),
@@ -1990,7 +1992,8 @@ static void radeon_identify_vram(struct
/* framebuffer size */
if ((rinfo->family == CHIP_FAMILY_RS100) ||
(rinfo->family == CHIP_FAMILY_RS200) ||
- (rinfo->family == CHIP_FAMILY_RS300)) {
+ (rinfo->family == CHIP_FAMILY_RS300) ||
+ (rinfo->family == CHIP_FAMILY_RS480) ) {
u32 tom = INREG(NB_TOM);
tmp = ((((tom >> 16) - (tom & 0xffff) + 1) << 6) * 1024);@@ -2329,7 +2332,7 @@ static int __devinit radeonfb_pci_regist
/* -2 is special: means ON on mobility chips and do not * change on others */ - radeonfb_pm_init(rinfo, rinfo->is_mobility ? 1 : -1, ignore_devlist, force_sleep); + radeonfb_pm_init(rinfo, rinfo->is_mobility && rinfo->family != CHIP_FAMILY_RS480 ? 1 : -1, ignore_devlist, force_sleep); } else radeonfb_pm_init(rinfo, default_dynclk, ignore_devlist, force_sleep);
drivers/video/aty/radeonfb.h +0 -0
@@ -48,6 +48,7 @@ enum radeon_family {
CHIP_FAMILY_RV350, CHIP_FAMILY_RV380, /* RV370/RV380/M22/M24 */ CHIP_FAMILY_R420, /* R420/R423/M18 */
+ CHIP_FAMILY_RS480,
CHIP_FAMILY_LAST,
};
@@ -64,7 +65,8 @@ enum radeon_family {
((rinfo)->family == CHIP_FAMILY_RV350) || \
((rinfo)->family == CHIP_FAMILY_R350) || \
((rinfo)->family == CHIP_FAMILY_RV380) || \- ((rinfo)->family == CHIP_FAMILY_R420))
+ ((rinfo)->family == CHIP_FAMILY_R420) || \
+ ((rinfo)->family == CHIP_FAMILY_RS480) )
/*
* Chip flags
Re: [patch 2.6.20-1] radeonfb: Add support for Radeon xpress 200m
Review
Quoted 3 lines
(quoted diff) +1
-1- radeonfb_pm_init(rinfo, rinfo->is_mobility ? 1 : -1, ignore_devlist, force_sleep); + radeonfb_pm_init(rinfo, rinfo->is_mobility && rinfo->family != CHIP_FAMILY_RS480 ? 1 : -1, ignore_devlist, force_sleep);
I'd rather you add a check for RS480 inside radeonfb_pm_*
Ben.
Re: [patch 2.6.20-1] radeonfb: Add support for Radeon xpress 200m
Quoted 8 lines · Benjamin Herrenschmidt
Review
Quoted 2 lines
(quoted diff) +1
-1- radeonfb_pm_init(rinfo, rinfo->is_mobility ? 1 : -1, ignore_devlist, force_sleep); + radeonfb_pm_init(rinfo, rinfo->is_mobility && rinfo->family != CHIP_FAMILY_RS480 ? 1 : -1, ignore_devlist, force_sleep);I'd rather you add a check for RS480 inside radeonfb_pm_*
Ben.
Something like this?
---
drivers/video/aty/ati_ids.h +0 -0
@@ -209,4 +209,4 @@
#define PCI_CHIP_R423_5D57 0x5D57 #define PCI_CHIP_RS350_7834 0x7834 #define PCI_CHIP_RS350_7835 0x7835
-
+#define PCI_CHIP_RS480_5955 0x5955
drivers/video/aty/radeon_base.c +0 -0
@@ -100,6 +100,8 @@
{ PCI_VENDOR_ID_ATI, id, PCI_ANY_ID, PCI_ANY_ID, 0, 0, (flags) | (CHIP_FAMILY_##family) }static struct pci_device_id radeonfb_pci_table[] = {
+ /* Radeon Xpress 200m */
+ CHIP_DEF(PCI_CHIP_RS480_5955, RS480, CHIP_HAS_CRTC2 | CHIP_IS_IGP | CHIP_IS_MOBILITY),
/* Mobility M6 */
CHIP_DEF(PCI_CHIP_RADEON_LY, RV100, CHIP_HAS_CRTC2 | CHIP_IS_MOBILITY),
CHIP_DEF(PCI_CHIP_RADEON_LZ, RV100, CHIP_HAS_CRTC2 | CHIP_IS_MOBILITY),
@@ -1990,7 +1992,8 @@ static void radeon_identify_vram(struct
/* framebuffer size */
if ((rinfo->family == CHIP_FAMILY_RS100) ||
(rinfo->family == CHIP_FAMILY_RS200) ||
- (rinfo->family == CHIP_FAMILY_RS300)) {
+ (rinfo->family == CHIP_FAMILY_RS300) ||
+ (rinfo->family == CHIP_FAMILY_RS480) ) {
u32 tom = INREG(NB_TOM);
tmp = ((((tom >> 16) - (tom & 0xffff) + 1) << 6) * 1024);drivers/video/aty/radeon_pm.c +0 -0
@@ -2826,11 +2826,15 @@ void radeonfb_pm_init(struct radeonfb_in
rinfo->pm_reg = pci_find_capability(rinfo->pdev, PCI_CAP_ID_PM); /* Enable/Disable dynamic clocks: TODO add sysfs access */
- rinfo->dynclk = dynclk;
- if (dynclk == 1) {
+ if (rinfo->family == CHIP_FAMILY_RS480)
+ rinfo->dynclk = -1;
+ else
+ rinfo->dynclk = dynclk; +
+ if (rinfo->dynclk == 1) {
radeon_pm_enable_dynamic_mode(rinfo);
printk("radeonfb: Dynamic Clock Power Management enabled\n");
- } else if (dynclk == 0) {
+ } else if (rinfo->dynclk == 0) {
radeon_pm_disable_dynamic_mode(rinfo);
printk("radeonfb: Dynamic Clock Power Management disabled\n");
}drivers/video/aty/radeonfb.h +0 -0
@@ -48,6 +48,7 @@ enum radeon_family {
CHIP_FAMILY_RV350, CHIP_FAMILY_RV380, /* RV370/RV380/M22/M24 */ CHIP_FAMILY_R420, /* R420/R423/M18 */
+ CHIP_FAMILY_RS480,
CHIP_FAMILY_LAST,
};
@@ -64,7 +65,8 @@ enum radeon_family {
((rinfo)->family == CHIP_FAMILY_RV350) || \
((rinfo)->family == CHIP_FAMILY_R350) || \
((rinfo)->family == CHIP_FAMILY_RV380) || \- ((rinfo)->family == CHIP_FAMILY_R420))
+ ((rinfo)->family == CHIP_FAMILY_R420) || \
+ ((rinfo)->family == CHIP_FAMILY_RS480) )
/*
* Chip flags
Hi.
Quoted 18 lines · Johan Henriksson
Hi!
I have gotten the radeon xpress 200m (the version without dedicated vmem)
to work with radeonfb.
The attached patch (against linux-2.6.20.1) works for me. Since I don't have any docs for the card I am unsure if the patch is 100% correct.
Can someone else with a 200m try it out?
(I have tested it by enabling fbcon and radeonfb in the kernel and
added "video=radeonfb" to lilo. This gave me a nice 1280x800
console :) )/Johan Henriksson
Please CC, I'm not on the list.
drivers/video/aty/radeon_base.c static int __devinit radeonfb_pci_regist · line 2335
Quoted 5 lines
drivers/video/aty/radeon_base.c +1
-1@@ -2329,7 +2332,7 @@ static int __devinit radeonfb_pci_regist/* -2 is special: means ON on mobility chips and do not * change on others */ -radeonfb_pm_init (rinfo, rinfo->is_mobility ?1 :-1 , ignore_devlist, force_sleep); +radeonfb_pm_init (rinfo,-1 ,ignore_devlist, force_sleep);//rinfo->is_mobility ? 1 : -1);
That looks like it might break !200M. Maybe something line rinfo->is_mobility && !rinfo->rs480 (with additional modifications to define an rs480, of course) - or a more generic name indicating why the rs480 is different?
Regards,
Nigel
Quoted 28 lines · Nigel Cunningham
Hi.
Quoted 15 lines · Johan Henriksson
Hi!
I have gotten the radeon xpress 200m (the version without dedicated
vmem) to work with radeonfb. The attached patch (against
linux-2.6.20.1) works for me. Since I don't have any docs for the card I am unsure if the patch is 100% correct. Can someone else with a 200m try it out? (I have tested it by enabling fbcon and radeonfb in the kernel and added "video=radeonfb" to lilo. This gave me a nice 1280x800 console :) )/Johan Henriksson
Please CC, I'm not on the list.
Review static int __devinit radeonfb_pci_regist /* · line 2332
Quoted 4 lines
(quoted diff) +0
-2@@ -2329,7 +2332,7 @@ static int __devinit radeonfb_pci_regist /* -2 is special: means ON on mobility chips and do not * change on others */ - radeonfb_pm_init(rinfo, rinfo->is_mobility ? 1 : -1, ignore_devlist, force_sleep); + radeonfb_pm_init(rinfo, -1,ignore_devlist, force_sleep);//rinfo->is_mobility ? 1 : -1);That looks like it might break !200M. Maybe something line
rinfo->is_mobility&& !rinfo->rs480 (with additional modifications to define an rs480, of course) - or a more generic name indicating why the rs480 is different?
Quoted 4 lines
Regards,
Nigel
I know, I am sorry. We could use family as in:
rinfo->is_mobility && rinfo->family != CHIP_FAMILY_RS480
Another solution is to add "default_dynclk" to radeonfb_setup so that everybody with a rs480 can disable it.
I don't have the register specification for the 200m (RS480) so I don't know why enabling "dynamic clock pm" doesn't work.
/Johan Henriksson