Fix:
spi.c: In function 'spi_init_r':
spi.c:279:22: warning: variable 'cp' set but not used
[-Wunused-but-set-variable]
spi.c: In function 'spi_xfer':
spi.c:361:22: warning: variable 'cp' set but not used
[-Wunused-but-set-variable]
Wolfgang Denk [Sat, 5 Nov 2011 05:13:04 +0000 (05:13 +0000)]
common/cmd_flash.c: Fix GCC 4.6 build warnings
Fix:
cmd_flash.c:355:32: warning: 'info' may be used uninitialized in this
function [-Wuninitialized]
cmd_flash.c:354:10: warning: 'sect_first' may be used uninitialized in
this function [-Wuninitialized]
cmd_flash.c:354:10: warning: 'sect_last' may be used uninitialized in
this function [-Wuninitialized]
cmd_flash.c: In function 'do_protect':
cmd_flash.c:540:9: warning: 'info' may be used uninitialized in this
function [-Wuninitialized]
cmd_flash.c:538:9: warning: 'sect_first' may be used uninitialized in
this function [-Wuninitialized]
cmd_flash.c:538:9: warning: 'sect_last' may be used uninitialized in
this function [-Wuninitialized]
Wolfgang Denk [Sat, 5 Nov 2011 05:13:03 +0000 (05:13 +0000)]
drivers/net/rtl8139.c: Fix GCC 4.6 build warnings
Fix:
rtl8139.c: In function 'rtl8139_probe':
rtl8139.c:256:15: warning: variable 'fullduplex' set but not used
[-Wunused-but-set-variable]
rtl8139.c:256:6: warning: variable 'speed10' set but not used
[-Wunused-but-set-variable]
rtl8139.c: In function 'rtl_transmit':
rtl8139.c:419:16: warning: variable 'txstatus' set but not used
[-Wunused-but-set-variable]
Change code to use new debug macros; also fix the new errors and
warnigns popping up now, like "error: 'to' undeclared" and some
"warning: format '%X' expects argument of type 'unsigned int', but
argument X has type 'long unsigned int'"
Wolfgang Denk [Sat, 5 Nov 2011 05:13:00 +0000 (05:13 +0000)]
board/mousse/flash.c: Fix GCC 4.6 buil warnings
Fix:
flash.c: In function 'flash_erase':
flash.c:780:18: warning: variable 'l_sect' set but not used
[-Wunused-but-set-variable]
flash.c:779:11: warning: variable 'addr' set but not used
[-Wunused-but-set-variable]
Wolfgang Denk [Fri, 4 Nov 2011 15:56:00 +0000 (15:56 +0000)]
board/alaska/flash.c: Fix GCC 4.6 build warnings
Fix:
flash.c: In function 'flash_erase':
flash.c:409:21: warning: variable 'last' set but not used
[-Wunused-but-set-variable]
flash.c:408:6: warning: variable 'flag' set but not used
[-Wunused-but-set-variable]
flash.c: In function 'write_data':
flash.c:669:6: warning: variable 'flag' set but not used
[-Wunused-but-set-variable]
flash.c: In function 'write_data_block':
flash.c:709:6: warning: variable 'flag' set but not used
[-Wunused-but-set-variable]
Wolfgang Denk [Fri, 4 Nov 2011 15:55:57 +0000 (15:55 +0000)]
mpc8260/i2c.c: replace PRINTD() by debug()
This also fixes some GCC 4.6 build warnings like:
i2c.c: In function 'i2c_init':
i2c.c:221:26: warning: variable 'txbd' set but not used
[-Wunused-but-set-variable]
i2c.c:221:19: warning: variable 'rxbd' set but not used
[-Wunused-but-set-variable]
Signed-off-by: Wolfgang Denk <wd@denx.de> Cc: Heiko Schocher <hs@denx.de>
Wolfgang Denk [Fri, 4 Nov 2011 15:55:56 +0000 (15:55 +0000)]
mpc8260/i2c.c: CodingStyle cleanup
Make (mostly) checkpatch clean (don't convert to use I/O accessors
yet, so there will be "Use of volatile is usually wrong" warnings
left. Also accept some other harmless checkpatch warnings.
Signed-off-by: Wolfgang Denk <wd@denx.de> Cc: Heiko Schocher <hs@denx.de>
Wolfgang Denk [Fri, 4 Nov 2011 15:55:52 +0000 (15:55 +0000)]
mpc8260/speed.c: Fix GCC 4.6 build warnings
Fix:
speed.c: In function 'get_clocks':
speed.c:113:30: warning: variable 'cpmdf' set but not used
[-Wunused-but-set-variable]
speed.c:113:23: warning: variable 'busdf' set but not used
[-Wunused-but-set-variable]
Wolfgang Denk [Fri, 4 Nov 2011 15:55:51 +0000 (15:55 +0000)]
TQM850M: Add missing CONFIG_BOOTDELAY
This also fixes a build warning:
main.c: In function 'main_loop':
main.c:311:16: warning: variable 'bootlimit' set but not used
[-Wunused-but-set-variable]
Wolfgang Denk [Fri, 4 Nov 2011 15:55:47 +0000 (15:55 +0000)]
board/rbc823/flash.c: Fix flash initalization
The RBC823 has only one NOR flash bank. Remove all code trying to
deal with a second bank. This also fixes a number of GCC 4.6 build
warnings:
flash.c: In function 'flash_init':
flash.c:62:12: warning: array subscript is above array bounds
[-Warray-bounds]
flash.c:63:12: warning: array subscript is above array bounds
[-Warray-bounds]
flash.c:66:12: warning: array subscript is above array bounds
[-Warray-bounds]
Wolfgang Denk [Fri, 4 Nov 2011 15:55:44 +0000 (15:55 +0000)]
board/mbx8xx/mbx8xx.c: Fix GCC 4.6 build warnings
Fix:
mbx8xx.c: In function 'mbx_init':
mbx8xx.c:127:15: warning: variable 'refclock' set but not used
[-Wunused-but-set-variable]
mbx8xx.c: In function 'board_get_cpufreq':
mbx8xx.c:231:2: warning: dereferencing type-punned pointer will break
strict-aliasing rules [-Wstrict-aliasing]
mbx8xx.c: In function 'get_reffreq':
mbx8xx.c:242:2: warning: dereferencing type-punned pointer will break
strict-aliasing rules [-Wstrict-aliasing]
Wolfgang Denk [Fri, 4 Nov 2011 15:55:43 +0000 (15:55 +0000)]
mpc8xx/spi.c: Fix GCC 4.6 build warnings
Fix:
spi.c: In function 'spi_init_f':
spi.c:144:21: warning: variable 'iop' set but not used
[-Wunused-but-set-variable]
spi.c:142:22: warning: variable 'cpi' set but not used
[-Wunused-but-set-variable]
Wolfgang Denk [Fri, 4 Nov 2011 15:55:41 +0000 (15:55 +0000)]
board/genietv/flash.c: Fix flash initialization
The GENIETV has only one NOR flash bank. Remove all code trying to
deal with a second bank. This also fixes a number of GCC 4.6 build
warnings:
flash.c:65:12: warning: array subscript is above array bounds
[-Warray-bounds]
flash.c:66:12: warning: array subscript is above array bounds
[-Warray-bounds]
flash.c:69:12: warning: array subscript is above array bounds
[-Warray-bounds]
flash.c:183:2: warning: format '%x' expects argument of type 'unsigned
int', but argument 2 has type '
Wolfgang Denk [Fri, 4 Nov 2011 15:55:39 +0000 (15:55 +0000)]
board/etx094/flash.c: Fix flash initialization
The ETX094 has only one NOR flash bank. Remove all code trying to
deal with a second bank. This also fixes a number of GCC 4.6 build
warnings:
flash.c: In function 'flash_init':
flash.c:68:13: warning: array subscript is above array bounds
[-Warray-bounds]
flash.c:70:13: warning: array subscript is above array bounds
[-Warray-bounds]
flash.c:72:13: warning: array subscript is above array bounds
[-Warray-bounds]
flash.c:128:13: warning: array subscript is above array bounds
[-Warray-bounds]
flash.c:129:13: warning: array subscript is above array bounds
[-Warray-bounds]
flash.c:133:12: warning: array subscript is above array bounds
[-Warray-bounds]
Wolfgang Denk [Fri, 4 Nov 2011 15:55:37 +0000 (15:55 +0000)]
mpc8xx/i2c.c: replace PRINTD() by debug()
This also fixes some GCC 4.6 build warnings like:
warning: variable 'txbd' set but not used [-Wunused-but-set-variable]
warning: variable 'rxbd' set but not used [-Wunused-but-set-variable]
Signed-off-by: WOlfgang Denk <wd@denx.de> Cc: Heiko Schocher <hs@denx.de>
Fix:
pcmcia.c: In function 'pcmcia_hardware_enable':
pcmcia.c:22:21: warning: variable 'cp' set but not used
[-Wunused-but-set-variable]
pcmcia.c: In function 'pcmcia_hardware_disable':
pcmcia.c:130:25: warning: variable 'pcmp' set but not used
[-Wunused-but-set-variable]
Wolfgang Denk [Fri, 4 Nov 2011 15:55:30 +0000 (15:55 +0000)]
board/netta/pcmcia.c: Fix GCC 4.6 build warnings
Fix:
pcmcia.c: In function 'cfg_ports':
pcmcia.c:151:21: warning: variable 'cp' set but not used
[-Wunused-but-set-variable]
pcmcia.c:150:20: warning: variable 'immap' set but not used
[-Wunused-but-set-variable]
pcmcia.c: In function 'pcmcia_hardware_enable':
pcmcia.c:179:25: warning: variable 'sysp' set but not used
[-Wunused-but-set-variable]
pcmcia.c:177:21: warning: variable 'cp' set but not used
[-Wunused-but-set-variable]
pcmcia.c:176:20: warning: variable 'immap' set but not used
[-Wunused-but-set-variable]
pcmcia.c: In function 'pcmcia_hardware_disable':
pcmcia.c:271:25: warning: variable 'pcmp' set but not used
[-Wunused-but-set-variable]
pcmcia.c:270:20: warning: variable 'immap' set but not used
[-Wunused-but-set-variable]
pcmcia.c: In function 'pcmcia_voltage_set':
pcmcia.c:303:9: warning: variable 'sreg' set but not used
[-Wunused-but-set-variable]
pcmcia.c:300:21: warning: variable 'cp' set but not used
[-Wunused-but-set-variable]
Wolfgang Denk [Fri, 4 Nov 2011 15:55:29 +0000 (15:55 +0000)]
board/netta/codec.c: Fix GCC 4.6 build warnings
Fix:
codec.c: In function 's_write_BR':
codec.c:1389:15: warning: variable 'v' set but not used
[-Wunused-but-set-variable]
codec.c: In function 's_write_OR':
codec.c:1400:15: warning: variable 'v' set but not used
[-Wunused-but-set-variable]
codec.c: In function 's_write_NR':
codec.c:1411:15: warning: variable 'v' set but not used
[-Wunused-but-set-variable]
Wolfgang Denk [Fri, 4 Nov 2011 15:55:28 +0000 (15:55 +0000)]
board/mbx8xx/pcmcia.c: Fix GCC 4.6 build warnings
Fix:
pcmcia.c: In function 'pcmcia_hardware_enable':
pcmcia.c:83:25: warning: variable 'sysp' set but not used
[-Wunused-but-set-variable]
pcmcia.c:81:21: warning: variable 'cp' set but not used
[-Wunused-but-set-variable]
pcmcia.c:80:20: warning: variable 'immap' set but not used
[-Wunused-but-set-variable]
Fix:
pcmcia.c: In function 'pcmcia_voltage_set':
pcmcia.c:158:25: warning: variable 'pcmp' set but not used
[-Wunused-but-set-variable]
pcmcia.c:157:20: warning: variable 'immap' set but not used
[-Wunused-but-set-variable]
Wolfgang Denk [Fri, 4 Nov 2011 15:55:26 +0000 (15:55 +0000)]
board/lwmon/pcmcia.c: Fix GCC 4.6 build warnings
Fix:
pcmcia.c: In function 'pcmcia_hardware_enable':
pcmcia.c:33:21: warning: variable 'cp' set but not used
[-Wunused-but-set-variable]
pcmcia.c:32:20: warning: variable 'immap' set but not used
[-Wunused-but-set-variable]
pcmcia.c: In function 'pcmcia_voltage_set':
pcmcia.c:174:20: warning: variable 'immap' set but not used
[-Wunused-but-set-variable]
Fix:
../common/pcmcia.c: In function 'pcmcia_hardware_enable':
../common/pcmcia.c:23:20: warning: variable 'immap' set but not used
[-Wunused-but-set-variable]
../common/pcmcia.c: In function 'pcmcia_voltage_set':
../common/pcmcia.c:152:20: warning: variable 'immap' set but not used
[-Wunused-but-set-variable]
Signed-off-by: Wolfgang Denk <wd@denx.de> Cc: Klaus Heydeck <heydeck@kieback-peter.de>
Wolfgang Denk [Fri, 4 Nov 2011 15:55:24 +0000 (15:55 +0000)]
board/icu862/pcmcia.c: Fix GCC 4.6 build warning
Fix:
pcmcia.c: In function 'cfg_port_B':
pcmcia.c:21:20: warning: variable 'immap' set but not used
[-Wunused-but-set-variable]
pcmcia.c: In function 'pcmcia_hardware_enable':
pcmcia.c:50:20: warning: variable 'immap' set but not used
[-Wunused-but-set-variable]
pcmcia.c: In function 'pcmcia_voltage_set':
pcmcia.c:191:20: warning: variable 'immap' set but not used
[-Wunused-but-set-variable]
Wolfgang Denk [Fri, 4 Nov 2011 15:55:21 +0000 (15:55 +0000)]
mpc8xx/fec.c: Fix GCC 4.6 build warnings
Fix:
fec.c: In function 'fec_pin_init':
fec.c:381:18: warning: variable 'fecp' set but not used
[-Wunused-but-set-variable]
fec.c: In function 'fec8xx_miiphy_write':
fec.c:1013:8: warning: variable 'rdreg' set but not used
[-Wunused-but-set-variable]
Note: The code was slightly rearranged, but no functional changes
attempted, i. e. no conversion to use I/O accessors.
Silence this warning:
cfb_console.c: In function 'video_logo':
cfb_console.c:1563:18: warning: variable 'y_off' set but not used
[-Wunused-but-set-variable]
Signed-off-by: Wolfgang Denk <wd@denx.de> Cc: Anatolij Gustschin <agust@denx.de> Acked-by: Anatolij Gustschin <agust@denx.de>
Fix:
cam5200_flash.c: In function 'flash_erase_32':
cam5200_flash.c:282:24: warning: variable 'l_sect' set but not used
[-Wunused-but-set-variable]
cam5200_flash.c: In function 'flash_erase_16':
cam5200_flash.c:612:24: warning: variable 'l_sect' set but not used
[-Wunused-but-set-variable]
Wolfgang Denk [Fri, 4 Nov 2011 15:55:16 +0000 (15:55 +0000)]
PM520: add missing enable_interrupts()
The code disabled interrupts in several locations, without re-enabling
them again. Fix this.
While we are at it, also fix a GCC 4.6 build warning:
flash.c: In function 'flash_erase':
flash.c:373:21: warning: variable 'last' set but not used
[-Wunused-but-set-variable]
Signed-off-by: Wolfgang Denk <wd@denx.de> Cc: Josef Wagner <Wagner@Microsys.de>
Wolfgang Denk [Fri, 4 Nov 2011 15:55:13 +0000 (15:55 +0000)]
drivers/rtc/rv3029.c: fix GCC 4.6 build warnings
Fix:
rv3029.c: In function 'rtc_set':
rv3029.c:98:6: warning: variable 'ret' set but not used
[-Wunused-but-set-variable]
rv3029.c: In function 'set_eere_bit':
rv3029.c:131:6: warning: variable 'ret' set but not used
[-Wunused-but-set-variable]
rv3029.c: In function 'wait_eebusy':
rv3029.c:149:9: warning: variable 'ret' set but not used
[-Wunused-but-set-variable]
rv3029.c: In function 'rtc_reset':
rv3029.c:165:6: warning: variable 'ret' set but not used
[-Wunused-but-set-variable]
Fix:
auto_update.c: In function 'do_auto_update':
auto_update.c:344:48: warning: variable 'got_ctrlc' set but not used
[-Wunused-but-set-variable]
auto_update.c:344:18: warning: variable 'bitmap_first' set but not
used [-Wunused-but-set-variable]
Fix:
cmd_stk52xx.c: In function 'spi_transmit':
cmd_stk52xx.c:85:6: warning: variable 'dummy' set but not used
[-Wunused-but-set-variable]
cmd_stk52xx.c: In function 'i2s_play_wave':
cmd_stk52xx.c:199:3: warning: dereferencing type-punned pointer will
break strict-aliasing rules [-Wstrict-aliasing]
Wolfgang Denk [Fri, 4 Nov 2011 15:55:07 +0000 (15:55 +0000)]
arch/powerpc/lib/board.c: make (mostly) checkpatch-clean
CodingStyle cleanup.
Accepted (in this cleanup) checkpatch messages:
- externs should be avoided
(to be cleaned up later)
- no spaces at the start of a line
(accepted in multi-line #if's)
- Macros with complex values
(false reports)
- do not use assignment in if condition
(accepted in one place, where avoiding it would have required an
additional level of nesting, resulting in less readable code)
config.mk: use memoization in cc-option macro to speed up compilation
Apply memoization to cc-option macro by caching the results of the
gcc calls. This macro is called very often so using cached results
leads to faster compilation times.
The old behaviour can be restored by defining the config option
CONFIG_CC_OPT_CACHE_DISABLE=y.
Signed-off-by: Daniel Schwierzeck <daniel.schwierzeck@googlemail.com>
Simon Glass [Tue, 25 Oct 2011 11:29:28 +0000 (11:29 +0000)]
sandbox: Adjust Makefile so that standalone/api are not built
The check for sandbox architecture is too early in the Makefile, so
standalone and api are built regardless. This moves the check until
after autoconf.mk has been read.
Anton staaf [Tue, 25 Oct 2011 10:48:03 +0000 (10:48 +0000)]
sandbox: Add asm/cache.h for sandbox
This file is required by the new DMA buffer alignment macro.
Signed-off-by: Anton Staaf <robotboy@chromium.org> Cc: Simon Glass <sjg@chromium.org> Tested-by: Simon Glass <sjg@chromium.org> Acked-by: Mike Frysinger <vapier@gentoo.org>
Wolfgang Denk [Tue, 1 Nov 2011 20:54:02 +0000 (20:54 +0000)]
Reduce build times
U-Boot Makefiles contain a number of tests for compiler features etc.
which so far are executed again and again. On some architectures
(especially ARM) this results in a large number of calls to gcc.
This patch makes sure to run such tests only once, thus largely
reducing the number of "execve" system calls.
Example: number of "execve" system calls for building the "P2020DS"
(Power Architecture) and "qong" (ARM) boards, measured as:
-> strace -f -e trace=execve -o /tmp/foo ./MAKEALL <board>
-> grep execve /tmp/foo | wc -l
Wolfgang Denk [Sat, 29 Oct 2011 09:41:40 +0000 (09:41 +0000)]
common/cmd_ide.c: CodingStyle cleanup
Make file acceptable to checkpatch.
This is only a basic clean up to the extend possible without any real
changes to the source code. Warnings due to line over 80 characters
were accepted because these affect only printf()s with user visible
strings. No attempts were made to fix warnings about volatile and
externs - these need a more thorough cleanup.
Fix:
mv_eth.c: In function 'mv64460_eth_real_open':
mv_eth.c:471:6: warning: variable 'port_status' set but not used [-Wunused-but-set-variable]
mv_eth.c: In function 'mv64460_eth_stop':
mv_eth.c:722:15: warning: variable 'port_num' set but not used [-Wunused-but-set-variable]
mv_eth.c: In function 'mv64460_eth_xmit':
mv_eth.c:796:15: warning: variable 'port_num' set but not used [-Wunused-but-set-variable]
mv_eth.c: In function 'mv64460_eth_receive':
mv_eth.c:877:15: warning: variable 'port_num' set but not used [-Wunused-but-set-variable]
mv_eth.c: In function 'mv64460_eth_get_stats':
mv_eth.c:979:15: warning: variable 'port_num' set but not used [-Wunused-but-set-variable]
mv_eth.c: In function 'mv64460_eth_update_stat':
mv_eth.c:1006:24: warning: variable 'dummy' set but not used [-Wunused-but-set-variable]
mv_eth.c:1005:15: warning: variable 'port_num' set but not used [-Wunused-but-set-variable]
mv_eth.c: In function 'mv64460_eth_print_stat':
mv_eth.c:1087:15: warning: variable 'port_num' set but not used [-Wunused-but-set-variable]
mv_eth.c: In function 'eth_clear_mib_counters':
mv_eth.c:2141:15: warning: variable 'dummy' set but not used [-Wunused-but-set-variable]
Wolfgang Denk [Sat, 29 Oct 2011 09:37:34 +0000 (09:37 +0000)]
drivers/net/ns8382x.c: fix GCC 4.6 build warnings
Fix:
ns8382x.c: In function 'ns8382x_check_duplex':
ns8382x.c:704:6: warning: variable 'hun' set but not used
[-Wunused-but-set-variable]
To fix this, we get rid of the NS8382X_DEBUG code and use standard
debug() instead.
This will now trigger a so far undetected warning:
ns8382x.c:780:2: warning: format '%X' expects argument of type
'unsigned int', but argument 2 has type 'long unsigned int' [-Wformat]
Wolfgang Denk [Thu, 3 Nov 2011 19:36:16 +0000 (20:36 +0100)]
Merge branch 'master' of git://git.denx.de/u-boot-mmc
* 'master' of git://git.denx.de/u-boot-mmc:
tegra2: Move MMC clock initialization into MMC driver
mmc: sdhci: fix sdma bug for large file transfer
mmc: sdhci: add timeout for data transfer
mmc: sdhci: add mmc structure for host
mmc: sdhci: fix build warning
mmc: sdhci: fix cache flush
mmc: CMD7:MMC_CMD_SELECT_CARD response fix
mmc: test mmc bus width on startup
mmc: change magic number to macro define
mmc: mv_sdhci: fix 8bus width access for 88SV331xV5
mmc: retry the cmd8 to meet 74 clocks requirement in the spec
PXA: Add MMC driver using the generic MMC framework
Wolfgang Denk [Thu, 3 Nov 2011 19:36:04 +0000 (20:36 +0100)]
Merge branch 'master' of git://git.denx.de/u-boot-x86
* 'master' of git://git.denx.de/u-boot-x86:
x86: Fix a compiler warning in arch/x86/lib/realmode.c
x86: Remove the prototype for the unused function board_init
x86: Rename include/asm/ic to include/asm/arch-sc520
x86: turn off cache: set control register properly
Wolfgang Denk [Thu, 3 Nov 2011 19:35:45 +0000 (20:35 +0100)]
Merge branch 'master' of git://git.denx.de/u-boot-nds32
* 'master' of git://git.denx.de/u-boot-nds32:
nds32: asm/io.h: add __iormb __iowmb and inline io support
nds32: cache: define ARCH_DMA_MINALIGN for DMA buffer alignment
nds32: Use getenv_ulong() in place of getenv(), strtoul
Wolfgang Denk [Fri, 28 Oct 2011 05:37:04 +0000 (07:37 +0200)]
e1000: fix bugs from recent commits
Commit 114d7fc0 "e1000: Rewrite EEPROM checksum error to give more
information" failed to initialize the checksum variable which should
result in random results. Fix that.
Commit 2326a94d caused a ton of "unused variable 'x'" warnings.
Fix these. While we are at it, remove some bogus parens.
Signed-off-by: Wolfgang Denk <wd@denx.de> Cc: Kyle Moffett <Kyle.D.Moffett@boeing.com> Acked-by: Mike Frysinger <vapier@gentoo.org> Tested-by: Kyle Moffett <Kyle.D.Moffett@boeing.com>
Stephen Warren [Mon, 31 Oct 2011 06:51:34 +0000 (06:51 +0000)]
tegra2: Move MMC clock initialization into MMC driver
This centralizes knowledge of MMC clocking into the MMC driver. This also
removes clock setup from the board files, which will simplify later changes
that modify the Harmony board to support the correct set of MMC controllers.
Signed-off-by: Stephen Warren <swarren@nvidia.com> Cc: Andy Fleming <afleming@gmail.com> Acked-by: Simon Glass <sjg@chromium.org> Tested-by: Simon Glass <sjg@chromium.org>
Lei Wen [Sat, 8 Oct 2011 04:14:58 +0000 (04:14 +0000)]
mmc: sdhci: fix sdma bug for large file transfer
SDHCI spec need to reset the sdma base address while the software
try to accorss the 512k bytes address boundary. When meet such
accross behavior, sdhci controller would generate a interrupt
automatically, and software need handle this.