9front - general discussion about 9front
 help / color / mirror / Atom feed
From: cinap_lenrek@felloff.net
To: 9front@9front.org
Subject: Re: [9front] core-i5(TypeSNB) and vesa mode
Date: Thu, 28 Jul 2016 15:26:04 +0200	[thread overview]
Message-ID: <1bced7a80533005e6578581609f5c404@felloff.net> (raw)
In-Reply-To: <d66af0386c1a6119333291dd253f81e2@titan.jitaku.localdomain>

> I had intended to follow those lines, because I had no other guides for this.
> Maybe I made something wrong?

i dont know that. all i see is your changes without
explaination and the intel documentation. if theres
a difference between these, i have to ask why they
differ. sometimes, documentation can be wrong. but
you only know that if you *tried* it the documented
way first... which i dont know if you did that or not.

now something we can test:

this is what i got for the fdi link training code for
SNB now which is based on the documentation, but cannot
test it.

i'm not sure rximr unmasking is actually needed, but
linux driver does it. (tho they handle interrupts
and we dont).

			/* unmask bit lock and symbol lock bits */
			csr(igfx, p->fdi->rximr.a, 3<<8, 0);

			p->fdi->rxctl.v &= ~(3<<8);	/* link train pattern1 */
			p->fdi->rxctl.v |= 1<<31;	/* enable */
			loadreg(igfx, p->fdi->rxctl);

			p->fdi->txctl.v &= ~(3<<8);	/* link train pattern1 */
			p->fdi->txctl.v |= 1<<31;	/* enable */
			loadreg(igfx, p->fdi->txctl);

			/* wait for bit lock */
			for(i=0; i<10; i++){
				sleep(1);
				if(rr(igfx, p->fdi->rxiir.a) & (1<<8))
					break;
			}
			csr(igfx, p->fdi->rxiir.a, 0, 1<<8);
	
			/* switch to link train pattern2 */
			csr(igfx, p->fdi->rxctl.a, 3<<8, 1<<8);
			csr(igfx, p->fdi->txctl.a, 3<<8, 1<<8);

			/* wait for symbol lock */
			for(i=0; i<10; i++){
				sleep(1);
				if(rr(igfx, p->fdi->rxiir.a) & (1<<9))
					break;
			}
			csr(igfx, p->fdi->rxiir.a, 0, 1<<9);

			/* switch to link train normal */
			csr(igfx, p->fdi->rxctl.a, 0, 3<<8);
			csr(igfx, p->fdi->txctl.a, 0, 3<<8);

			/* wait idle pattern time */
			sleep(5);

full diff follows... note that i added rxiir and rximr softregs
to the Fdi structure. this is because there can be multiple fdi
links.

diff -r 7ecc3cd531be sys/src/cmd/aux/vga/igfx.c
--- a/sys/src/cmd/aux/vga/igfx.c	Sun Jul 24 15:13:14 2016 +0200
+++ b/sys/src/cmd/aux/vga/igfx.c	Thu Jul 28 14:57:05 2016 +0200
@@ -89,6 +89,8 @@
 
 	Reg	rxctl;		/* FDI_RX_CTL */
 	Reg	rxmisc;		/* FDI_RX_MISC */
+	Reg	rxiir;		/* FDI_RX_IIR */
+	Reg	rximr;		/* FDI_RX_IMR */
 	Reg	rxtu[2];	/* FDI_RX_TUSIZE */
 };
 
@@ -276,6 +278,10 @@
 
 		p->fdi->rxctl = snarfreg(igfx, o + 0x1000c);
 		p->fdi->rxmisc = snarfreg(igfx, o + 0x10010);
+
+		p->fdi->rxiir = snarfreg(igfx, o + 0x10014);
+		p->fdi->rximr = snarfreg(igfx, o + 0x10018);
+
 		p->fdi->rxtu[0] = snarfreg(igfx, o + 0x10030);
 		p->fdi->rxtu[1] = snarfreg(igfx, o + 0x10038);
 
@@ -297,7 +303,6 @@
 	/* cursor plane */
 	switch(igfx->type){
 	case TypeIVB:
-	case TypeSNB:
 		p->cur->cntr	= snarfreg(igfx, 0x70080 + x*0x1000);
 		p->cur->base	= snarfreg(igfx, 0x70084 + x*0x1000);
 		p->cur->pos	= snarfreg(igfx, 0x70088 + x*0x1000);
@@ -305,7 +310,8 @@
 	case TypeG45:
 		p->dsp->pos	= snarfreg(igfx, 0x7018C + x*0x1000);
 		p->dsp->size	= snarfreg(igfx, 0x70190 + x*0x1000);
-
+		/* wet floor */
+	case TypeSNB:
 		p->cur->cntr	= snarfreg(igfx, 0x70080 + x*0x40);
 		p->cur->base	= snarfreg(igfx, 0x70084 + x*0x40);
 		p->cur->pos	= snarfreg(igfx, 0x70088 + x*0x40);
@@ -320,10 +326,13 @@
 		return -1;
 	switch(igfx->pci->did){
 	case 0x0166:	/* 3rd Gen Core - ThinkPad X230 */
+	case 0x0152:	/* 2nd/3rd Gen Core - Core-i3 */
 		return TypeIVB;
+	case 0x0102:	/* Dell Optiplex 790 */
 	case 0x0126:	/* Thinkpad X220 */
 		return TypeSNB;
 	case 0x27a2:	/* GM945/82940GML - ThinkPad X60 Tablet */
+	case 0x29a2:	/* 82P965/G965 HECI desktop */
 	case 0x2a02:	/* GM965/GL960/X3100 - ThinkPad X61 Tablet */
 	case 0x2a42:	/* 4 Series Mobile - ThinkPad X200 */
 		return TypeG45;
@@ -858,10 +867,10 @@
 		break;
 
 	case PortVGA:
-		if(igfx->npipe > 2)
+		if(igfx->type == TypeG45)
+			x = (igfx->adpa.v >> 30) & 1;
+		else
 			x = (igfx->adpa.v >> 29) & 3;
-		else
-			x = (igfx->adpa.v >> 30) & 1;
 		igfx->adpa.v |= (1<<31);
 		if(igfx->type == TypeG45){
 			igfx->adpa.v &= ~(3<<10);	/* Monitor DPMS: on */
@@ -876,10 +885,10 @@
 		break;
 
 	case PortLCD:
-		if(igfx->npipe > 2)
+		if(igfx->type == TypeG45)
+			x = (igfx->lvds.v >> 30) & 1;
+		else
 			x = (igfx->lvds.v >> 29) & 3;
-		else
-			x = (igfx->lvds.v >> 30) & 1;
 		igfx->lvds.v |= (1<<31);
 		igfx->ppcontrol.v |= 5;
 
@@ -1053,8 +1062,8 @@
 		loadreg(igfx, p->fdi->rxctl);
 		sleep(5);
 		p->fdi->txctl.v &= ~(7<<8 | 1);	/* clear auto training bits */
-		p->fdi->txctl.v &= ~(1<<31);
-		p->fdi->rxctl.v |= (1<<14);	/* enable pll */
+		p->fdi->txctl.v &= ~(1<<31);	/* disable */
+		p->fdi->txctl.v |= (1<<14);	/* enable pll */
 		loadreg(igfx, p->fdi->txctl);
 		sleep(5);
 	}
@@ -1102,21 +1111,61 @@
 		loadreg(igfx, p->fdi->rxtu[0]);
 		loadreg(igfx, p->fdi->rxmisc);
 
-		p->fdi->rxctl.v &= ~(3<<8);	/* link train pattern 00 */
-		p->fdi->rxctl.v |= 1<<10;	/* auto train enable */
-		p->fdi->rxctl.v |= 1<<31;	/* enable */
-		loadreg(igfx, p->fdi->rxctl);
+		if(igfx->type == TypeSNB){
+			/* unmask bit lock and symbol lock bits */
+			csr(igfx, p->fdi->rximr.a, 3<<8, 0);
 
-		p->fdi->txctl.v &= ~(3<<8);	/* link train pattern 00 */
-		p->fdi->txctl.v |= 1<<10;	/* auto train enable */
-		p->fdi->txctl.v |= 1<<31;	/* enable */
-		loadreg(igfx, p->fdi->txctl);
+			p->fdi->rxctl.v &= ~(3<<8);	/* link train pattern1 */
+			p->fdi->rxctl.v |= 1<<31;	/* enable */
+			loadreg(igfx, p->fdi->rxctl);
 
-		/* wait for link training done */
-		for(i=0; i<200; i++){
+			p->fdi->txctl.v &= ~(3<<8);	/* link train pattern1 */
+			p->fdi->txctl.v |= 1<<31;	/* enable */
+			loadreg(igfx, p->fdi->txctl);
+
+			/* wait for bit lock */
+			for(i=0; i<10; i++){
+				sleep(1);
+				if(rr(igfx, p->fdi->rxiir.a) & (1<<8))
+					break;
+			}
+			csr(igfx, p->fdi->rxiir.a, 0, 1<<8);
+	
+			/* switch to link train pattern2 */
+			csr(igfx, p->fdi->rxctl.a, 3<<8, 1<<8);
+			csr(igfx, p->fdi->txctl.a, 3<<8, 1<<8);
+
+			/* wait for symbol lock */
+			for(i=0; i<10; i++){
+				sleep(1);
+				if(rr(igfx, p->fdi->rxiir.a) & (1<<9))
+					break;
+			}
+			csr(igfx, p->fdi->rxiir.a, 0, 1<<9);
+
+			/* switch to link train normal */
+			csr(igfx, p->fdi->rxctl.a, 0, 3<<8);
+			csr(igfx, p->fdi->txctl.a, 0, 3<<8);
+
+			/* wait idle pattern time */
 			sleep(5);
-			if(rr(igfx, p->fdi->txctl.a) & 2)
-				break;
+		} else {
+			p->fdi->rxctl.v &= ~(3<<8);	/* link train pattern 00 */
+			p->fdi->rxctl.v |= 1<<10;	/* auto train enable */
+			p->fdi->rxctl.v |= 1<<31;	/* enable */
+			loadreg(igfx, p->fdi->rxctl);
+
+			p->fdi->txctl.v &= ~(3<<8);	/* link train pattern 00 */
+			p->fdi->txctl.v |= 1<<10;	/* auto train enable */
+			p->fdi->txctl.v |= 1<<31;	/* enable */
+			loadreg(igfx, p->fdi->txctl);
+
+			/* wait for link training done */
+			for(i=0; i<200; i++){
+				sleep(5);
+				if(rr(igfx, p->fdi->txctl.a) & 2)
+					break;
+			}
 		}
 	}
 


--
cinap


  reply	other threads:[~2016-07-28 13:26 UTC|newest]

Thread overview: 77+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-07-02  1:13 core-i3 " kokamoto
2016-07-02  4:56 ` [9front] " kokamoto
2016-07-03  0:17   ` kokamoto
2016-07-05 12:26     ` cinap_lenrek
2016-07-06  0:18       ` kokamoto
2016-07-06  9:49         ` cinap_lenrek
2016-07-06 23:26           ` kokamoto
2016-07-07  3:05             ` kokamoto
2016-07-08  0:00               ` kokamoto
2016-07-08  6:21               ` kokamoto
2016-07-08  6:39                 ` kokamoto
2016-07-08  9:26                   ` cinap_lenrek
2016-07-09  1:49                     ` kokamoto
2016-07-09  2:16                       ` cinap_lenrek
2016-07-09  2:38                         ` kokamoto
2016-07-09  6:27                           ` kokamoto
2016-07-09 12:48                           ` cinap_lenrek
2016-07-12  6:32                             ` kokamoto
2016-07-12 12:15                               ` kokamoto
2016-07-21  1:36                                 ` kokamoto
2016-07-23  6:19                                   ` kokamoto
2016-07-23  9:50                                     ` kokamoto
2016-07-23 12:27                                     ` cinap_lenrek
2016-07-23 23:50                                       ` kokamoto
2016-07-24  0:16                                         ` kokamoto
2016-07-25  4:15                                         ` [9front] core-i5 " kokamoto
2016-07-25  4:19                                         ` [9front] core-i5(TypeSNB) " kokamoto
2016-07-27  0:12                                           ` kokamoto
2016-07-27  9:57                                             ` cinap_lenrek
2016-07-27 13:24                                               ` kokamoto
2016-07-27 13:42                                                 ` kokamoto
2016-07-27 19:30                                                 ` cinap_lenrek
2016-07-28  0:37                                                   ` kokamoto
2016-07-28  2:19                                                   ` kokamoto
2016-07-28  9:28                                                     ` cinap_lenrek
2016-07-27 20:01                                                 ` cinap_lenrek
2016-07-27 22:37                                                   ` cinap_lenrek
2016-07-28  0:39                                                   ` kokamoto
2016-07-28 10:03                                                     ` cinap_lenrek
2016-07-28 11:31                                                       ` kokamoto
2016-07-28 13:26                                                         ` cinap_lenrek [this message]
2016-08-01  6:51                                                           ` kokamoto
2016-07-28 10:20                                                     ` cinap_lenrek
2016-07-28 11:34                                                       ` kokamoto
2016-07-28 13:31                                                         ` cinap_lenrek
2016-07-28 23:48                                                           ` kokamoto
2016-07-29  0:58                                                             ` kokamoto
2016-07-29  9:00                                                               ` cinap_lenrek
2016-07-29 11:42                                                                 ` kokamoto
2016-07-29  8:15                                                             ` cinap_lenrek
2016-07-29 11:49                                                               ` kokamoto
2016-07-29 13:01                                                                 ` cinap_lenrek
2016-07-29 23:41                                                                   ` kokamoto
2016-07-29 23:43                                                                     ` cinap_lenrek
2016-08-05 23:58                                                                   ` kokamoto
2016-08-06  5:51                                                                     ` kokamoto
2016-08-06 12:55                                                                       ` kokamoto
2016-08-06 13:05                                                                         ` cinap_lenrek
2016-08-06 13:58                                                                         ` cinap_lenrek
2016-08-07  0:08                                                                         ` kokamoto
2016-08-07  0:38                                                                           ` cinap_lenrek
2016-08-09  1:29                                                                             ` kokamoto
2016-08-09  8:47                                                                               ` cinap_lenrek
2016-08-13  4:21                                                                                 ` kokamoto
2016-08-09  9:40                                                                               ` cinap_lenrek
2016-08-12 23:27                                                                                 ` kokamoto
2016-08-13  1:32                                                                                   ` cinap_lenrek
2016-08-13  4:14                                                                                     ` kokamoto
2016-08-13  5:57                                                                                       ` kokamoto
2016-08-13 23:02                                                                                         ` kokamoto
2016-08-19 23:01                                                                                           ` kokamoto
2016-08-20 17:11                                                                                             ` cinap_lenrek
2016-07-27 21:18                                                 ` cinap_lenrek
2016-07-27 21:41                                                 ` cinap_lenrek
2016-07-27 21:52                                                   ` cinap_lenrek
2016-07-28  0:44                                                   ` kokamoto
2016-08-06 15:08 kokamoto

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=1bced7a80533005e6578581609f5c404@felloff.net \
    --to=cinap_lenrek@felloff.net \
    --cc=9front@9front.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).