diff options
author | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-07-18 15:13:02 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-07-18 15:13:02 -0400 |
commit | 97405fe26b2a4df7090884b086ee8224ace2a6d1 (patch) | |
tree | 528f9f1f3f8cf0ce933a366f137faaf55ab89079 | |
parent | a10d9a71bafd3a283da240d2868e71346d2aef6f (diff) | |
parent | 3fbc54165d7217abf62b871c0dd074e76ce0eb31 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/hpa/linux-2.6-x86setup
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/hpa/linux-2.6-x86setup:
[PATCH] x86: do not recompile boot for each build
[x86 setup] Save/restore DS around invocations of INT 10h
[x86 setup] VGA: Clear the Protect bit before setting the vertical height
[x86 setup] Fix assembly constraints
[x86 setup] build/tools.c: fix comment
[x86 setup] MAINTAINERS: document x86 setup code git tree
-rw-r--r-- | MAINTAINERS | 1 | ||||
-rw-r--r-- | arch/i386/boot/Makefile | 2 | ||||
-rw-r--r-- | arch/i386/boot/boot.h | 2 | ||||
-rw-r--r-- | arch/i386/boot/cpucheck.c | 4 | ||||
-rw-r--r-- | arch/i386/boot/mca.c | 2 | ||||
-rw-r--r-- | arch/i386/boot/pm.c | 2 | ||||
-rw-r--r-- | arch/i386/boot/tools/build.c | 2 | ||||
-rw-r--r-- | arch/i386/boot/tty.c | 2 | ||||
-rw-r--r-- | arch/i386/boot/video.c | 9 | ||||
-rw-r--r-- | arch/i386/boot/video.h | 9 | ||||
-rw-r--r-- | arch/i386/boot/voyager.c | 2 |
11 files changed, 25 insertions, 12 deletions
diff --git a/MAINTAINERS b/MAINTAINERS index 1698dbbc7375..e78f62f13bac 100644 --- a/MAINTAINERS +++ b/MAINTAINERS | |||
@@ -1740,6 +1740,7 @@ S: Maintained | |||
1740 | i386 SETUP CODE / CPU ERRATA WORKAROUNDS | 1740 | i386 SETUP CODE / CPU ERRATA WORKAROUNDS |
1741 | P: H. Peter Anvin | 1741 | P: H. Peter Anvin |
1742 | M: hpa@zytor.com | 1742 | M: hpa@zytor.com |
1743 | T: git.kernel.org:/pub/scm/linux/kernel/git/hpa/linux-2.6-x86setup.git | ||
1743 | S: Maintained | 1744 | S: Maintained |
1744 | 1745 | ||
1745 | IA64 (Itanium) PLATFORM | 1746 | IA64 (Itanium) PLATFORM |
diff --git a/arch/i386/boot/Makefile b/arch/i386/boot/Makefile index 08678a0a3d19..93386a4e40b4 100644 --- a/arch/i386/boot/Makefile +++ b/arch/i386/boot/Makefile | |||
@@ -39,7 +39,7 @@ setup-y += printf.o string.o tty.o video.o version.o voyager.o | |||
39 | setup-y += video-vga.o | 39 | setup-y += video-vga.o |
40 | setup-y += video-vesa.o | 40 | setup-y += video-vesa.o |
41 | setup-y += video-bios.o | 41 | setup-y += video-bios.o |
42 | 42 | targets += $(setup-y) | |
43 | hostprogs-y := tools/build | 43 | hostprogs-y := tools/build |
44 | 44 | ||
45 | HOSTCFLAGS_build.o := $(LINUXINCLUDE) | 45 | HOSTCFLAGS_build.o := $(LINUXINCLUDE) |
diff --git a/arch/i386/boot/boot.h b/arch/i386/boot/boot.h index 0329c4fe4f88..dec70c9b6050 100644 --- a/arch/i386/boot/boot.h +++ b/arch/i386/boot/boot.h | |||
@@ -56,7 +56,7 @@ static inline u16 inw(u16 port) | |||
56 | 56 | ||
57 | static inline void outl(u32 v, u16 port) | 57 | static inline void outl(u32 v, u16 port) |
58 | { | 58 | { |
59 | asm volatile("outl %0,%1" : : "a" (v), "dn" (port)); | 59 | asm volatile("outl %0,%1" : : "a" (v), "dN" (port)); |
60 | } | 60 | } |
61 | static inline u32 inl(u32 port) | 61 | static inline u32 inl(u32 port) |
62 | { | 62 | { |
diff --git a/arch/i386/boot/cpucheck.c b/arch/i386/boot/cpucheck.c index 8b0f4473b083..991e8ceae1de 100644 --- a/arch/i386/boot/cpucheck.c +++ b/arch/i386/boot/cpucheck.c | |||
@@ -115,8 +115,8 @@ static int has_eflag(u32 mask) | |||
115 | "pushfl ; " | 115 | "pushfl ; " |
116 | "popl %1 ; " | 116 | "popl %1 ; " |
117 | "popfl" | 117 | "popfl" |
118 | : "=r" (f0), "=r" (f1) | 118 | : "=&r" (f0), "=&r" (f1) |
119 | : "g" (mask)); | 119 | : "ri" (mask)); |
120 | 120 | ||
121 | return !!((f0^f1) & mask); | 121 | return !!((f0^f1) & mask); |
122 | } | 122 | } |
diff --git a/arch/i386/boot/mca.c b/arch/i386/boot/mca.c index 9b68bd1aef19..68222f2d4b67 100644 --- a/arch/i386/boot/mca.c +++ b/arch/i386/boot/mca.c | |||
@@ -26,7 +26,7 @@ int query_mca(void) | |||
26 | "setc %0 ; " | 26 | "setc %0 ; " |
27 | "movw %%es, %1 ; " | 27 | "movw %%es, %1 ; " |
28 | "popw %%es" | 28 | "popw %%es" |
29 | : "=acdSDm" (err), "=acdSDm" (es), "=b" (bx) | 29 | : "=acd" (err), "=acdSD" (es), "=b" (bx) |
30 | : "a" (0xc000)); | 30 | : "a" (0xc000)); |
31 | 31 | ||
32 | if (err) | 32 | if (err) |
diff --git a/arch/i386/boot/pm.c b/arch/i386/boot/pm.c index 3fa53e15ed77..1df025c73261 100644 --- a/arch/i386/boot/pm.c +++ b/arch/i386/boot/pm.c | |||
@@ -65,7 +65,7 @@ static void move_kernel_around(void) | |||
65 | "popw %%ds ; " | 65 | "popw %%ds ; " |
66 | "popw %%es" | 66 | "popw %%es" |
67 | : "+c" (dwords) | 67 | : "+c" (dwords) |
68 | : "rm" (dst_seg), "rm" (src_seg) | 68 | : "r" (dst_seg), "r" (src_seg) |
69 | : "esi", "edi"); | 69 | : "esi", "edi"); |
70 | 70 | ||
71 | syssize -= paras; | 71 | syssize -= paras; |
diff --git a/arch/i386/boot/tools/build.c b/arch/i386/boot/tools/build.c index 886f47d8a488..b4248740ff0d 100644 --- a/arch/i386/boot/tools/build.c +++ b/arch/i386/boot/tools/build.c | |||
@@ -5,7 +5,7 @@ | |||
5 | */ | 5 | */ |
6 | 6 | ||
7 | /* | 7 | /* |
8 | * This file builds a disk-image from three different files: | 8 | * This file builds a disk-image from two different files: |
9 | * | 9 | * |
10 | * - setup: 8086 machine code, sets up system parm | 10 | * - setup: 8086 machine code, sets up system parm |
11 | * - system: 80386 code for actual system | 11 | * - system: 80386 code for actual system |
diff --git a/arch/i386/boot/tty.c b/arch/i386/boot/tty.c index a8db78736b02..9c668aad3515 100644 --- a/arch/i386/boot/tty.c +++ b/arch/i386/boot/tty.c | |||
@@ -31,7 +31,7 @@ void __attribute__((section(".inittext"))) putchar(int ch) | |||
31 | 31 | ||
32 | /* int $0x10 is known to have bugs involving touching registers | 32 | /* int $0x10 is known to have bugs involving touching registers |
33 | it shouldn't. Be extra conservative... */ | 33 | it shouldn't. Be extra conservative... */ |
34 | asm volatile("pushal; int $0x10; popal" | 34 | asm volatile("pushal; pushw %%ds; int $0x10; popw %%ds; popal" |
35 | : : "b" (0x0007), "c" (0x0001), "a" (0x0e00|ch)); | 35 | : : "b" (0x0007), "c" (0x0001), "a" (0x0e00|ch)); |
36 | } | 36 | } |
37 | 37 | ||
diff --git a/arch/i386/boot/video.c b/arch/i386/boot/video.c index 3bb3573cd6a1..958130ef0042 100644 --- a/arch/i386/boot/video.c +++ b/arch/i386/boot/video.c | |||
@@ -195,7 +195,7 @@ static void vga_recalc_vertical(void) | |||
195 | { | 195 | { |
196 | unsigned int font_size, rows; | 196 | unsigned int font_size, rows; |
197 | u16 crtc; | 197 | u16 crtc; |
198 | u8 ov; | 198 | u8 pt, ov; |
199 | 199 | ||
200 | set_fs(0); | 200 | set_fs(0); |
201 | font_size = rdfs8(0x485); /* BIOS: font size (pixels) */ | 201 | font_size = rdfs8(0x485); /* BIOS: font size (pixels) */ |
@@ -206,7 +206,12 @@ static void vga_recalc_vertical(void) | |||
206 | 206 | ||
207 | crtc = vga_crtc(); | 207 | crtc = vga_crtc(); |
208 | 208 | ||
209 | pt = in_idx(crtc, 0x11); | ||
210 | pt &= ~0x80; /* Unlock CR0-7 */ | ||
211 | out_idx(pt, crtc, 0x11); | ||
212 | |||
209 | out_idx((u8)rows, crtc, 0x12); /* Lower height register */ | 213 | out_idx((u8)rows, crtc, 0x12); /* Lower height register */ |
214 | |||
210 | ov = in_idx(crtc, 0x07); /* Overflow register */ | 215 | ov = in_idx(crtc, 0x07); /* Overflow register */ |
211 | ov &= 0xbd; | 216 | ov &= 0xbd; |
212 | ov |= (rows >> (8-1)) & 0x02; | 217 | ov |= (rows >> (8-1)) & 0x02; |
@@ -411,7 +416,7 @@ static void restore_screen(void) | |||
411 | "1: rep;stosl ; " | 416 | "1: rep;stosl ; " |
412 | "popw %%es" | 417 | "popw %%es" |
413 | : "+D" (dst), "+c" (npad) | 418 | : "+D" (dst), "+c" (npad) |
414 | : "bdSm" (video_segment), | 419 | : "bdS" (video_segment), |
415 | "a" (0x07200720)); | 420 | "a" (0x07200720)); |
416 | } | 421 | } |
417 | 422 | ||
diff --git a/arch/i386/boot/video.h b/arch/i386/boot/video.h index 29eca1710b2c..b92447d51213 100644 --- a/arch/i386/boot/video.h +++ b/arch/i386/boot/video.h | |||
@@ -117,8 +117,15 @@ extern int graphic_mode; /* Graphics mode with linear frame buffer */ | |||
117 | * int $0x10 is notorious for touching registers it shouldn't. | 117 | * int $0x10 is notorious for touching registers it shouldn't. |
118 | * gcc doesn't like %ebp being clobbered, so define it as a push/pop | 118 | * gcc doesn't like %ebp being clobbered, so define it as a push/pop |
119 | * sequence here. | 119 | * sequence here. |
120 | * | ||
121 | * A number of systems, including the original PC can clobber %bp in | ||
122 | * certain circumstances, like when scrolling. There exists at least | ||
123 | * one Trident video card which could clobber DS under a set of | ||
124 | * circumstances that we are unlikely to encounter (scrolling when | ||
125 | * using an extended graphics mode of more than 800x600 pixels), but | ||
126 | * it's cheap insurance to deal with that here. | ||
120 | */ | 127 | */ |
121 | #define INT10 "pushl %%ebp; int $0x10; popl %%ebp" | 128 | #define INT10 "pushl %%ebp; pushw %%ds; int $0x10; popw %%ds; popl %%ebp" |
122 | 129 | ||
123 | /* Accessing VGA indexed registers */ | 130 | /* Accessing VGA indexed registers */ |
124 | static inline u8 in_idx(u16 port, u8 index) | 131 | static inline u8 in_idx(u16 port, u8 index) |
diff --git a/arch/i386/boot/voyager.c b/arch/i386/boot/voyager.c index 9221614d0db8..61c8fe0453be 100644 --- a/arch/i386/boot/voyager.c +++ b/arch/i386/boot/voyager.c | |||
@@ -32,7 +32,7 @@ int query_voyager(void) | |||
32 | "setc %0 ; " | 32 | "setc %0 ; " |
33 | "movw %%es, %1 ; " | 33 | "movw %%es, %1 ; " |
34 | "popw %%es" | 34 | "popw %%es" |
35 | : "=qm" (err), "=rm" (es), "=D" (di) | 35 | : "=q" (err), "=r" (es), "=D" (di) |
36 | : "a" (0xffc0)); | 36 | : "a" (0xffc0)); |
37 | 37 | ||
38 | if (err) | 38 | if (err) |