Our existing Cyrix cache-disable code was short-cutting the steps for
setting the control register. Make the read and write operations two completely separate steps. While we're at it, pull in the whole set of Cyrix cache control options from NetBSD-current, since a few motherboards do the right thing with the Cyrix chip. There is no option to disable the internal cache completely (yet). Reviewed by: pst Obtained from: NetBSD
This commit is contained in:
parent
87c66f4cc7
commit
0b4a1769be
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=10826
@ -34,7 +34,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* from: @(#)locore.s 7.3 (Berkeley) 5/13/91
|
||||
* $Id: locore.s,v 1.54 1995/08/29 23:45:20 bde Exp $
|
||||
* $Id: locore.s,v 1.55 1995/09/15 02:13:18 davidg Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -372,14 +372,62 @@ got_common_bi_size:
|
||||
movl $0x69727943,_cpu_vendor-KERNBASE # store vendor string
|
||||
movw $0x0078,_cpu_vendor-KERNBASE+4
|
||||
|
||||
invd # Start with guaranteed clean cache
|
||||
#ifndef CYRIX_CACHE_WORKS
|
||||
/* Disable caching of the ISA hole only. */
|
||||
invd
|
||||
movb $CCR0,%al # Configuration Register index (CCR0)
|
||||
outb %al,$0x22
|
||||
inb $0x23,%al
|
||||
inb $0x23,%al
|
||||
orb $(CCR0_NC1|CCR0_BARB),%al
|
||||
movb %al,%ah
|
||||
movb $CCR0,%al
|
||||
outb %al,$0x22
|
||||
movb %ah,%al
|
||||
outb %al,$0x23
|
||||
invd
|
||||
#else /* CYRIX_CACHE_WORKS */
|
||||
/* Set cache parameters */
|
||||
invd # Start with guaranteed clean cache
|
||||
movb $CCR0,%al # Configuration Register index (CCR0)
|
||||
outb %al,$0x22
|
||||
inb $0x23,%al
|
||||
andb $~CCR0_NC0,%al
|
||||
#ifndef CYRIX_CACHE_REALLY_WORKS
|
||||
orb $(CCR0_NC1|CCR0_BARB),%al
|
||||
#else
|
||||
orb $CCR0_NC1,%al
|
||||
#endif
|
||||
movb %al,%ah
|
||||
movb $CCR0,%al
|
||||
outb %al,$0x22
|
||||
movb %ah,%al
|
||||
outb %al,$0x23
|
||||
/* clear non-cacheable region 1 */
|
||||
movb $(NCR1+2),%al
|
||||
outb %al,$0x22
|
||||
movb $NCR_SIZE_0K,%al
|
||||
outb %al,$0x23
|
||||
/* clear non-cacheable region 2 */
|
||||
movb $(NCR2+2),%al
|
||||
outb %al,$0x22
|
||||
movb $NCR_SIZE_0K,%al
|
||||
outb %al,$0x23
|
||||
/* clear non-cacheable region 3 */
|
||||
movb $(NCR3+2),%al
|
||||
outb %al,$0x22
|
||||
movb $NCR_SIZE_0K,%al
|
||||
outb %al,$0x23
|
||||
/* clear non-cacheable region 4 */
|
||||
movb $(NCR4+2),%al
|
||||
outb %al,$0x22
|
||||
movb $NCR_SIZE_0K,%al
|
||||
outb %al,$0x23
|
||||
/* enable caching in CR0 */
|
||||
movl %cr0,%eax
|
||||
andl $~(CR0_CD|CR0_NW),%eax
|
||||
movl %eax,%cr0
|
||||
invd
|
||||
#endif /* CYRIX_CACHE_WORKS */
|
||||
jmp 2f
|
||||
|
||||
1: /* Use the `cpuid' instruction. */
|
||||
|
@ -34,7 +34,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* from: @(#)locore.s 7.3 (Berkeley) 5/13/91
|
||||
* $Id: locore.s,v 1.54 1995/08/29 23:45:20 bde Exp $
|
||||
* $Id: locore.s,v 1.55 1995/09/15 02:13:18 davidg Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -372,14 +372,62 @@ got_common_bi_size:
|
||||
movl $0x69727943,_cpu_vendor-KERNBASE # store vendor string
|
||||
movw $0x0078,_cpu_vendor-KERNBASE+4
|
||||
|
||||
invd # Start with guaranteed clean cache
|
||||
#ifndef CYRIX_CACHE_WORKS
|
||||
/* Disable caching of the ISA hole only. */
|
||||
invd
|
||||
movb $CCR0,%al # Configuration Register index (CCR0)
|
||||
outb %al,$0x22
|
||||
inb $0x23,%al
|
||||
inb $0x23,%al
|
||||
orb $(CCR0_NC1|CCR0_BARB),%al
|
||||
movb %al,%ah
|
||||
movb $CCR0,%al
|
||||
outb %al,$0x22
|
||||
movb %ah,%al
|
||||
outb %al,$0x23
|
||||
invd
|
||||
#else /* CYRIX_CACHE_WORKS */
|
||||
/* Set cache parameters */
|
||||
invd # Start with guaranteed clean cache
|
||||
movb $CCR0,%al # Configuration Register index (CCR0)
|
||||
outb %al,$0x22
|
||||
inb $0x23,%al
|
||||
andb $~CCR0_NC0,%al
|
||||
#ifndef CYRIX_CACHE_REALLY_WORKS
|
||||
orb $(CCR0_NC1|CCR0_BARB),%al
|
||||
#else
|
||||
orb $CCR0_NC1,%al
|
||||
#endif
|
||||
movb %al,%ah
|
||||
movb $CCR0,%al
|
||||
outb %al,$0x22
|
||||
movb %ah,%al
|
||||
outb %al,$0x23
|
||||
/* clear non-cacheable region 1 */
|
||||
movb $(NCR1+2),%al
|
||||
outb %al,$0x22
|
||||
movb $NCR_SIZE_0K,%al
|
||||
outb %al,$0x23
|
||||
/* clear non-cacheable region 2 */
|
||||
movb $(NCR2+2),%al
|
||||
outb %al,$0x22
|
||||
movb $NCR_SIZE_0K,%al
|
||||
outb %al,$0x23
|
||||
/* clear non-cacheable region 3 */
|
||||
movb $(NCR3+2),%al
|
||||
outb %al,$0x22
|
||||
movb $NCR_SIZE_0K,%al
|
||||
outb %al,$0x23
|
||||
/* clear non-cacheable region 4 */
|
||||
movb $(NCR4+2),%al
|
||||
outb %al,$0x22
|
||||
movb $NCR_SIZE_0K,%al
|
||||
outb %al,$0x23
|
||||
/* enable caching in CR0 */
|
||||
movl %cr0,%eax
|
||||
andl $~(CR0_CD|CR0_NW),%eax
|
||||
movl %eax,%cr0
|
||||
invd
|
||||
#endif /* CYRIX_CACHE_WORKS */
|
||||
jmp 2f
|
||||
|
||||
1: /* Use the `cpuid' instruction. */
|
||||
|
@ -34,7 +34,7 @@
|
||||
* SUCH DAMAGE.
|
||||
*
|
||||
* from: @(#)locore.s 7.3 (Berkeley) 5/13/91
|
||||
* $Id: locore.s,v 1.54 1995/08/29 23:45:20 bde Exp $
|
||||
* $Id: locore.s,v 1.55 1995/09/15 02:13:18 davidg Exp $
|
||||
*/
|
||||
|
||||
/*
|
||||
@ -372,14 +372,62 @@ got_common_bi_size:
|
||||
movl $0x69727943,_cpu_vendor-KERNBASE # store vendor string
|
||||
movw $0x0078,_cpu_vendor-KERNBASE+4
|
||||
|
||||
invd # Start with guaranteed clean cache
|
||||
#ifndef CYRIX_CACHE_WORKS
|
||||
/* Disable caching of the ISA hole only. */
|
||||
invd
|
||||
movb $CCR0,%al # Configuration Register index (CCR0)
|
||||
outb %al,$0x22
|
||||
inb $0x23,%al
|
||||
inb $0x23,%al
|
||||
orb $(CCR0_NC1|CCR0_BARB),%al
|
||||
movb %al,%ah
|
||||
movb $CCR0,%al
|
||||
outb %al,$0x22
|
||||
movb %ah,%al
|
||||
outb %al,$0x23
|
||||
invd
|
||||
#else /* CYRIX_CACHE_WORKS */
|
||||
/* Set cache parameters */
|
||||
invd # Start with guaranteed clean cache
|
||||
movb $CCR0,%al # Configuration Register index (CCR0)
|
||||
outb %al,$0x22
|
||||
inb $0x23,%al
|
||||
andb $~CCR0_NC0,%al
|
||||
#ifndef CYRIX_CACHE_REALLY_WORKS
|
||||
orb $(CCR0_NC1|CCR0_BARB),%al
|
||||
#else
|
||||
orb $CCR0_NC1,%al
|
||||
#endif
|
||||
movb %al,%ah
|
||||
movb $CCR0,%al
|
||||
outb %al,$0x22
|
||||
movb %ah,%al
|
||||
outb %al,$0x23
|
||||
/* clear non-cacheable region 1 */
|
||||
movb $(NCR1+2),%al
|
||||
outb %al,$0x22
|
||||
movb $NCR_SIZE_0K,%al
|
||||
outb %al,$0x23
|
||||
/* clear non-cacheable region 2 */
|
||||
movb $(NCR2+2),%al
|
||||
outb %al,$0x22
|
||||
movb $NCR_SIZE_0K,%al
|
||||
outb %al,$0x23
|
||||
/* clear non-cacheable region 3 */
|
||||
movb $(NCR3+2),%al
|
||||
outb %al,$0x22
|
||||
movb $NCR_SIZE_0K,%al
|
||||
outb %al,$0x23
|
||||
/* clear non-cacheable region 4 */
|
||||
movb $(NCR4+2),%al
|
||||
outb %al,$0x22
|
||||
movb $NCR_SIZE_0K,%al
|
||||
outb %al,$0x23
|
||||
/* enable caching in CR0 */
|
||||
movl %cr0,%eax
|
||||
andl $~(CR0_CD|CR0_NW),%eax
|
||||
movl %eax,%cr0
|
||||
invd
|
||||
#endif /* CYRIX_CACHE_WORKS */
|
||||
jmp 2f
|
||||
|
||||
1: /* Use the `cpuid' instruction. */
|
||||
|
Loading…
Reference in New Issue
Block a user