[PATCH 0/6] sisfb: XGI Z9 POST

February 13th, 2011 - 05:20 pm ET by Aaro Koskinen | Report spam
Here's some patches to get POST working with XGI Z9. I have tested them
with the following card:

http://www.roboard.com/Files/RB-100..._v1r1A.pdf

I'm using the card on an ARM board where the bootloader knows nothing
about VGA or VGA BIOS, so having POST support in the kernel driver
is mandatory. With these patches the memory size is correct detected,
R/W test passes and it's possible to use e.g. framebuffer console.

Aaro Koskinen (6):
sisfb: POST should fail if R/W test fails
sisfb: move XGI POST RAM type detection into a subroutine
sisfb: add subroutine for detecting XGI Z9
sisfb: add RAM type detection for XGI Z9
sisfb: move XGI POST DDR2 bootup code into subroutines
sisfb: add support for XGI Z9 DDR2 POST

drivers/video/sis/sis.h | 1 +
drivers/video/sis/sis_main.c | 315 ++++++++++++++++++++++++++++++
drivers/video/sis/vgatypes.h | 1 +
3 files changed, 228 insertions(+), 89 deletions(-)

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
email Follow the discussionReplies 5 repliesReplies Make a reply

Replies

#1 Aaro Koskinen
February 13th, 2011 - 05:20 pm ET | Report spam
Currently there is no indication if R/W test fails during POST. This can
happen e.g. when user plugs in a card with unsupported type of memory.
Since the driver will be unusable, it's better to fail the whole POST
if the memory cannot be configured properly.

Signed-off-by: Aaro Koskinen
Cc: Thomas Winischhofer

drivers/video/sis/sis_main.c | 22 +++++++++++++++++--
1 files changed, 17 insertions(+), 5 deletions(-)

diff --git a/drivers/video/sis/sis_main.c b/drivers/video/sis/sis_main.c
index 2fb8c5a..2c5de66 100644
a/drivers/video/sis/sis_main.c
+++ b/drivers/video/sis/sis_main.c
@@ -4627,11 +4627,11 @@ sisfb_post_xgi_rwtest(struct sis_video_info *ivideo, int starta,
return 1;
}

-static void __devinit
+static int __devinit
sisfb_post_xgi_ramsize(struct sis_video_info *ivideo)
{
unsigned int buswidth, ranksize, channelab, mapsize;
- int i, j, k, l;
+ int i, j, k, l, status;
u8 reg, sr14;
static const u8 dramsr13[12 * 5] = {
0x02, 0x0e, 0x0b, 0x80, 0x5d,
@@ -4673,7 +4673,7 @@ sisfb_post_xgi_ramsize(struct sis_video_info *ivideo)
SiS_SetReg(SISSR, 0x13, 0x35);
SiS_SetReg(SISSR, 0x14, 0x41);
/* TODO */
- return;
+ return -ENOMEM;
}

/* Non-interleaving */
@@ -4835,6 +4835,7 @@ bail_out:

j = (ivideo->chip == XGI_20) ? 5 : 9;
k = (ivideo->chip == XGI_20) ? 12 : 4;
+ status = -EIO;

for(i = 0; i < k; i++) {

@@ -4868,11 +4869,15 @@ bail_out:
SiS_SetRegANDOR(SISSR, 0x14, 0x0f, (reg & 0xf0));
sisfb_post_xgi_delay(ivideo, 1);

- if(sisfb_post_xgi_rwtest(ivideo, j, ((reg >> 4) + channelab - 2 + 20), mapsize))
+ if (sisfb_post_xgi_rwtest(ivideo, j, ((reg >> 4) + channelab - 2 + 20), mapsize)) {
+ status = 0;
break;
+ }
}

iounmap(ivideo->video_vbase);
+
+ return status;
}

static void __devinit
@@ -5648,6 +5653,7 @@ sisfb_post_xgi(struct pci_dev *pdev)
SiS_SetReg(SISSR, 0x14, bios[regb + 0xe0 + 8]);

} else {
+ int err;

/* Set default mode, don't clear screen */
ivideo->SiS_Pr.SiS_UseOEM = false;
@@ -5661,10 +5667,16 @@ sisfb_post_xgi(struct pci_dev *pdev)

/* Disable read-cache */
SiS_SetRegAND(SISSR, 0x21, 0xdf);
- sisfb_post_xgi_ramsize(ivideo);
+ err = sisfb_post_xgi_ramsize(ivideo);
/* Enable read-cache */
SiS_SetRegOR(SISSR, 0x21, 0x20);

+ if (err) {
+ dev_err(&pdev->dev,
+ "%s: RAM size detection failed: %d",
+ __func__, err);
+ return 0;
+ }
}

#if 0
1.5.6.5

To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/

Similar topics