
2-79
2
PRELIMINARY
System Management Mode
System Management Mode
2-79
While operating in this mode, SMIACT# output
is not used to indicate that the CPU is operating
in SMM mode. This is left to the SMM driver.
In Cyrix enhanced SMM, SMIACT# is asserted
for every SMM memory bus cycle and is de-as-
serted for every non-SMM bus cycle. In this
mode the SMIACT# pin meets the timing of
D/C# and W/R#.
During RESET, the USE_SMI bit in CCR1 is
cleared. While USE_SMI is zero, SMIACT# is
always negated. SMIACT# does float during bus
hold states.
Cacheability of SMM Space
In SL-compatible SMM mode, caching is not
available, but in Cyrix SMM mode, both code
and data caching is supported. In order to cache
SMM data and avoid coherency issues the
processor assumes no overlap of main memory
with SMM memory. This implies that a section
of main memory must be dedicated for SMM.
The on-chip cache sets a special ID bit in the
cache tag block for each line that contains SMM
code data. This ID bit is then used by the bus
controller to regulate assertion of the SMIACT#
pin for write-back of any SMM data.
Nested SMI
Only in the Cyrix Enhanced SMM mode is
nesting of SMI interrupts supported. This is
important to allow high priority events such as
audio emulation to interrupt lower priority SMI
code. In the case of nesting, it is up to the SMM
driver to determine which SMM event is being
serviced, which to prioritize, and perform all
SMM interrupt control functions.
Software enables and disables SMI interrupts
while in SMM mode by setting and clearing the
nest-enable bit (N bit, bit 6 of CCR6). By default
the CPU automatically disables SMI interrupts
(clears the N bit) on entry to SMM mode, and
re-enables them (sets the N bit) when exiting
SMM mode (i.e., RSM). The SMI handler can
optionally enable nesting to allow higher
priority SMI interrupts to occur while handling
the current SMI event.
The SMI handler is responsible for managing
the SMHR pointer register when processing
nested SMI interrupts. Before nested SMI’s can
be serviced the current SMM handler must save
the contents of the SMHR pointer register and
then load a new value into the SMHR register for
use by a subsequent nested SMI event.
Prior to execution of a RSM instruction the
contents of the old SMHR pointer register must
be restored for proper operation to continue.
Prior to restoring the contents of old SMHR
pointer register one should disable additional
SMI’s. This should be done so that the CPU will
not inadvertently receive and service an SMI
event after the old SMHR contents have been
restored but before the RSM instruction is
executed.
2.15.6 Maintaining the FPU
and MMX States
If power will be removed from the CPU or if the
SMM routine will execute MMX or FPU instruc-
tions, then the MMX or FPU state should be
maintained for the application running before
SMM was entered. If the MMX or FPU state is to
be saved and restored from within SMM, there
are certain guidelines that must be followed to
make SMM completely transparent to the appli-
cation program.