On Fri, Aug 19, 2022 at 10:31:30PM -0400, Daniel Dickman wrote: > The below diff removes detection code for the Cyrix 486DLC and Cyrix 6x86 > CPUs from OpenBSD/i386. > > The Cyrix 486DLC is a 486-class CPU which we no longer support. > > The 6x86, also known as the M1, does not support CPUID by default. But it > can be made to support this instruction if bit 7 in CCR4 is enabled. We > don't do this in the tree today. > > The reason to remove support for the 6x86 is because it doesn't support > the RDTSC instruction which we we use unconditionally. Therefore I don't > believe Cyrix CPUs older than the 6x86MX (aka the M2) can run > OpenBSD/i386. > > We keep the "cyrix6x86_cpu_setup" function in machdep because those quirks > would still be needed on the M2. > > After this diff, the CPU detection code on i386 would assume that if the > ID bit is missing from EFLAGS, we're running on an intel 486, while if we > have the ID bit then we use the CPUID instruction for the detection logic. > > We also make the same change to amd64/include/specialreg.h to remove the > defines for the Cyrix 486DLC. No Cyrix CPU supports amd64, so these > defines have never made sense there. >
ok mlarkin > > Index: i386/i386/locore0.S > =================================================================== > RCS file: /cvs/src/sys/arch/i386/i386/locore0.S,v > retrieving revision 1.7 > diff -u -p -u -r1.7 locore0.S > --- i386/i386/locore0.S 15 Aug 2022 04:17:50 -0000 1.7 > +++ i386/i386/locore0.S 20 Aug 2022 02:07:30 -0000 > @@ -133,56 +133,6 @@ start: movw $0x1234,0x472 # warm > boot > jnz .Ltry586 > .Lis486: movl $CPU_486,RELOC(_C_LABEL(cpu)) > > - /* > - * Check Cyrix CPU > - * Cyrix CPUs do not change the undefined flags following > - * execution of the divide instruction which divides 5 by 2. > - * > - * Note: CPUID is enabled on M2, so it passes another way. > - */ > - pushfl > - movl $0x5555, %eax > - xorl %edx, %edx > - movl $2, %ecx > - clc > - divl %ecx > - jnc .Ltrycyrix486 > - popfl > - jmp 2f > -.Ltrycyrix486: > - movl $CPU_6x86,RELOC(_C_LABEL(cpu)) # set CPU type > - /* > - * Check for Cyrix 486 CPU by seeing if the flags change during a > - * divide. This is documented in the Cx486SLC/e SMM Programmer's > - * Guide. > - */ > - xorl %edx,%edx > - cmpl %edx,%edx # set flags to known state > - pushfl > - popl %ecx # store flags in ecx > - movl $-1,%eax > - movl $4,%ebx > - divl %ebx # do a long division > - pushfl > - popl %eax > - xorl %ecx,%eax # are the flags different? > - testl $0x8d5,%eax # only check C|PF|AF|Z|N|V > - jne 2f # yes; must not be Cyrix CPU > - movl $CPU_486DLC,RELOC(_C_LABEL(cpu)) # set CPU type > - > - /* Disable caching of the ISA hole only. */ > - invd > - movb $CCR0,%al # Configuration Register index (CCR0) > - outb %al,$0x22 > - 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 > - > jmp 2f > > .Ltry586: /* Use the `cpuid' instruction. */ > Index: i386/i386/machdep.c > =================================================================== > RCS file: /cvs/src/sys/arch/i386/i386/machdep.c,v > retrieving revision 1.653 > diff -u -p -u -r1.653 machdep.c > --- i386/i386/machdep.c 18 Aug 2022 13:05:43 -0000 1.653 > +++ i386/i386/machdep.c 20 Aug 2022 02:07:30 -0000 > @@ -498,14 +498,8 @@ char cpu_model[120]; > * We deal with the rest in a different way. > */ > const struct cpu_nocpuid_nameclass i386_nocpuid_cpus[] = { > - { CPUVENDOR_INTEL, "Intel", "486SX", CPUCLASS_486, > - NULL}, /* CPU_486SX */ > { CPUVENDOR_INTEL, "Intel", "486DX", CPUCLASS_486, > NULL}, /* CPU_486 */ > - { CPUVENDOR_CYRIX, "Cyrix", "486DLC", CPUCLASS_486, > - NULL}, /* CPU_486DLC */ > - { CPUVENDOR_CYRIX, "Cyrix", "6x86", CPUCLASS_486, > - cyrix6x86_cpu_setup}, /* CPU_6x86 */ > }; > > const char *classnames[] = { > @@ -2075,9 +2069,6 @@ identifycpu(struct cpu_info *ci) > cpu_class = class; > > ci->cpu_class = class; > - > - if (cpu == CPU_486DLC) > - printf("WARNING: CYRIX 486DLC CACHE UNCHANGED.\n"); > > /* > * Enable ring 0 write protection. > Index: i386/include/cputypes.h > =================================================================== > RCS file: /cvs/src/sys/arch/i386/include/cputypes.h,v > retrieving revision 1.13 > diff -u -p -u -r1.13 cputypes.h > --- i386/include/cputypes.h 15 Aug 2022 04:17:51 -0000 1.13 > +++ i386/include/cputypes.h 20 Aug 2022 02:07:30 -0000 > @@ -37,19 +37,10 @@ > #define CPUCLASS_686 3 > > /* > - * Kinds of Processor. Only the first 7 are used, as they are processors > - * that might not have a cpuid instruction. > + * Kind of Processor. > */ > > -#define CPU_486SX 2 /* Intel 80486SX */ > -#define CPU_486 3 /* Intel 80486DX */ > -#define CPU_486DLC 4 /* Cyrix 486DLC */ > -#define CPU_6x86 5 /* Cyrix/IBM 6x86 */ > -#define CPU_586 7 /* Intel P.....m (I hate lawyers; it's > TM) */ > -#define CPU_AM586 8 /* AMD Am486 and Am5x86 */ > -#define CPU_K5 9 /* AMD K5 */ > -#define CPU_K6 10 /* AMD K6 */ > -#define CPU_686 11 /* Intel P.....m Pro */ > +#define CPU_486 0 /* Intel 80486DX */ > > /* > * CPU vendors > Index: i386/include/specialreg.h > =================================================================== > RCS file: /cvs/src/sys/arch/i386/include/specialreg.h,v > retrieving revision 1.79 > diff -u -p -u -r1.79 specialreg.h > --- i386/include/specialreg.h 21 Feb 2022 10:06:35 -0000 1.79 > +++ i386/include/specialreg.h 20 Aug 2022 02:07:30 -0000 > @@ -52,23 +52,6 @@ > #define CR0_CD 0x40000000 /* Cache Disable */ > > /* > - * Cyrix 486 DLC special registers, accessible as IO ports. > - */ > -#define CCR0 0xc0 /* configuration control register 0 */ > -#define CCR0_NC0 0x01 /* first 64K of each 1M memory region is > non-cacheable */ > -#define CCR0_NC1 0x02 /* 640K-1M region is non-cacheable */ > -#define CCR0_A20M 0x04 /* enables A20M# input pin */ > -#define CCR0_KEN 0x08 /* enables KEN# input pin */ > -#define CCR0_FLUSH 0x10 /* enables FLUSH# input pin */ > -#define CCR0_BARB 0x20 /* flushes internal cache when entering hold > state */ > -#define CCR0_CO 0x40 /* cache org: 1=direct mapped, 0=2x set > assoc */ > -#define CCR0_SUSPEND 0x80 /* enables SUSP# and SUSPA# pins */ > - > -#define CCR1 0xc1 /* configuration control register 1 */ > -#define CCR1_RPL 0x01 /* enables RPLSET and RPLVAL# pins */ > -/* the remaining 7 bits of this register are reserved */ > - > -/* > * bits in CR3 > */ > #define CR3_PWT (1ULL << 3) > Index: amd64/include/specialreg.h > =================================================================== > RCS file: /cvs/src/sys/arch/amd64/include/specialreg.h,v > retrieving revision 1.92 > diff -u -p -u -r1.92 specialreg.h > --- amd64/include/specialreg.h 26 Apr 2022 08:35:30 -0000 1.92 > +++ amd64/include/specialreg.h 20 Aug 2022 02:07:30 -0000 > @@ -53,23 +53,6 @@ > #define CR0_CD 0x40000000 /* Cache Disable */ > > /* > - * Cyrix 486 DLC special registers, accessible as IO ports. > - */ > -#define CCR0 0xc0 /* configuration control register 0 */ > -#define CCR0_NC0 0x01 /* first 64K of each 1M memory region is > non-cacheable */ > -#define CCR0_NC1 0x02 /* 640K-1M region is non-cacheable */ > -#define CCR0_A20M 0x04 /* enables A20M# input pin */ > -#define CCR0_KEN 0x08 /* enables KEN# input pin */ > -#define CCR0_FLUSH 0x10 /* enables FLUSH# input pin */ > -#define CCR0_BARB 0x20 /* flushes internal cache when entering hold > state */ > -#define CCR0_CO 0x40 /* cache org: 1=direct mapped, 0=2x set > assoc */ > -#define CCR0_SUSPEND 0x80 /* enables SUSP# and SUSPA# pins */ > - > -#define CCR1 0xc1 /* configuration control register 1 */ > -#define CCR1_RPL 0x01 /* enables RPLSET and RPLVAL# pins */ > -/* the remaining 7 bits of this register are reserved */ > - > -/* > * bits in CR3 > */ > #define CR3_PCID 0xfffULL >