User Manual
BCM1250/BCM1125/BCM1125H
10/21/02
B r o a d c o m C o r p o r a t i o n
Document
1250_1125-UM100CB-R
Section 14: Serial Configuration Interface Page
413
EEPROMS > 16k bit (boot type = 2’b11)
If the boot_type is configured as 2’b11 the part will boot from a large EEPROM (bigger than 2K
bytes) accessed using the EEPROM Read protocol.
The upper 4 bits of the SMBus device address are set to 4’b1010.
The low three bits of the SMBus device address are set to bits [18:16] of the address being
accessed.
The Command byte is set to bits [15:8] of the address being accessed.
The Data byte is set to bits [7:0] of the address being accessed.
The data that returns from the SMBus interface is aligned and assembled to satisfy the request by the generic
bus logic as if it had been returned by a 32 bit wide ROM attached to the generic bus. Note that if the SMBus
transaction fails (for example the interface loses arbitration 15 times) then there is no way to recover and the
boot process will hang (in this situation the CPU graduation timer will eventually trigger a Machine Check
exception, but since the exception vector is also directed to the boot rom it will also be unable to make
progress).
S
WITCHING
FROM
SMB
US
M
ODE
Care must be taken when switching out of the SMBbus boot mode. There must be no accesses in progress to
the chip select 0 region when the switch is made or the system will behave in UNDEFINED ways (for example
a response could be lost). Instruction fetches are a particular concern and careful location of instructions is
required to avoid them causing a problem. Two cases will be described as examples, in both cases the system
is initially running from SMBus boot space in the generic chip select 0 region. (These examples are selected
to provide simple illustration of the problem and are not representative of real systems.)
The first case is when the SMBus boot bit is cleared and the system continues running from a device in the
chip select 0 generic bus region. This could be done when the SMBus code is used to configure the region with
a different timing from the default.
// Fetching from cs0 region from SMBus
// t1 points to generic CS0 config registers
// t3 points to SCD registers
addr:
// this is on a cache block boundary
sh t5, io_ext_time_cfg0(t1)//set timing registers
sh t6, io_ext_time_cfg1(t1)
sync
sync
addr+16:
sh t4, io_ext_cfg(t1)//set config
sd t7, system_cfg(t3)//remove SMBus boot
sync
sync
addr+32:
// Fetched from cs0 on the generic bus