From: Andi Kleen Here's the matching patch from the SuSE 2.4 tree which also compiles with soft-float. No i haven't even checked if it applies to 2.6. But maybe it will help somebody fix the 2.6 driver. --- 25-akpm/drivers/video/sis/init.c | 15 ++++++++------- 1 files changed, 8 insertions(+), 7 deletions(-) diff -puN drivers/video/sis/init.c~sis-DRM-floating-point-removal drivers/video/sis/init.c --- 25/drivers/video/sis/init.c~sis-DRM-floating-point-removal Fri Jan 9 13:22:47 2004 +++ 25-akpm/drivers/video/sis/init.c Fri Jan 9 13:22:47 2004 @@ -5165,7 +5165,8 @@ SiSBuildBuiltInModeList(ScrnInfoPtr pScr unsigned short HRE, HBE, HRS, HBS, HDE, HT; unsigned char sr_data, cr_data, cr_data2, cr_data3; unsigned char sr2b, sr2c; - float num, denum, postscalar, divider; + //float num, denum, postscalar, divider; + unsigned int num, denum, postscalar, divider; int A, B, C, D, E, F, temp, i, j, index, vclkindex; DisplayModePtr new = NULL, current = NULL, first = NULL, backup = NULL; @@ -5230,19 +5231,19 @@ SiSBuildBuiltInModeList(ScrnInfoPtr pScr sr2b = pSiS->SiS_Pr->SiS_VCLKData[vclkindex].SR2B; sr2c = pSiS->SiS_Pr->SiS_VCLKData[vclkindex].SR2C; - divider = (sr2b & 0x80) ? 2.0 : 1.0; + divider = (sr2b & 0x80) ? 2 : 1; postscalar = (sr2c & 0x80) ? - ( (((sr2c >> 5) & 0x03) == 0x02) ? 6.0 : 8.0) : (((sr2c >> 5) & 0x03) + 1.0); - num = (sr2b & 0x7f) + 1.0; - denum = (sr2c & 0x1f) + 1.0; + ( (((sr2c >> 5) & 0x03) == 0x02) ? 6 : 8) : (((sr2c >> 5) & 0x03) + 1); + num = (sr2b & 0x7f) + 1; + denum = (sr2c & 0x1f) + 1; #ifdef TWDEBUG xf86DrvMsg(0, X_INFO, "------------\n"); - xf86DrvMsg(0, X_INFO, "sr2b: %x sr2c %x div %f ps %f num %f denum %f\n", + xf86DrvMsg(0, X_INFO, "sr2b: %x sr2c %x div %i ps %i num %i denum %i\n", sr2b, sr2c, divider, postscalar, num, denum); #endif - current->Clock = (int)(14318 * (divider / postscalar) * (num / denum)); + current->Clock = (int)(14318 * divider / postscalar * num / denum); sr_data = pSiS->SiS_Pr->SiS_CRT1Table[index].CR[14]; /* inSISIDXREG(SISSR, 0x0b, sr_data); */ _