summaryrefslogtreecommitdiff
Commit message (Collapse)AuthorAgeLines
* dm: Improve errors and warnings in lists_bind_fdt()Simon Glass2014-07-23-3/+13
| | | | | | | Add a debug message for when a device tree node has no driver. Also reword the warning when a device fails to bind, which was misleading. Signed-off-by: Simon Glass <sjg@chromium.org>
* dm: Add child_pre_probe() and child_post_remove() methodsSimon Glass2014-07-23-2/+160
| | | | | | | | | | | Some devices (particularly bus devices) must track their children, knowing when a new child is added so that it can be set up for communication on the bus. Add a child_pre_probe() method to provide this feature, and a corresponding child_post_remove() method. Signed-off-by: Simon Glass <sjg@chromium.org>
* dm: Introduce per-child data for devicesSimon Glass2014-07-23-8/+137
| | | | | | | | | | | | | Some device types can have child devices and want to store information about them. For example a USB flash stick attached to a USB host controller would likely use this space. The controller can hold information about the USB state of each of its children. The data is stored attached to the child device in the 'parent_priv' member. It can be auto-allocated by dm when the child is probed. To do this, add a per_child_auto_alloc_size value to the parent driver. Signed-off-by: Simon Glass <sjg@chromium.org>
* dm: Add functions to access a device's childrenSimon Glass2014-07-23-1/+199
| | | | | | | | | | | | | | | | | Devices can have childen that can be addressed by a simple index, the sequence number or a device tree offset. Add functions to access a child in each of these ways. The index is typically used as a fallback when the sequence number is not available. For example we may use a serial UART with sequence number 0 as the console, but if no UART has sequence number 0, then we can fall back to just using the first UART (index 0). The device tree offset function is useful for buses, where they want to locate one of their children. The device tree can be scanned to find the offset of each child, and that offset can then find the device. Signed-off-by: Simon Glass <sjg@chromium.org>
* dm: Provide a function to scan child FDT nodesSimon Glass2014-07-23-42/+166
| | | | | | | | | | | | | | At present only root nodes in the device tree are scanned for devices. But some devices can have children. For example a SPI bus may have several children for each of its chip selects. Add a function which scans subnodes and binds devices for each one. This can be used for the root node scan also, so change it. A device can call this function in its bind() or probe() methods to bind its children. Signed-off-by: Simon Glass <sjg@chromium.org>
* dm: Tidy up some header file commentsSimon Glass2014-07-23-6/+13
| | | | | | Fix up the style of a few comments and add/clarify a few others. Signed-off-by: Simon Glass <sjg@chromium.org>
* fdt: Add a function to get the node offset of an aliasSimon Glass2014-07-23-0/+26
| | | | | | This simple function returns the node offset of a named alias. Signed-off-by: Simon Glass <sjg@chromium.org>
* dm: Avoid accessing uclasses before they are readySimon Glass2014-07-23-1/+18
| | | | | | Don't allow access to uclasses before they have been initialised. Signed-off-by: Simon Glass <sjg@chromium.org>
* dm: Allow a device to be found by its FDT offsetSimon Glass2014-07-23-1/+83
| | | | | | | | Each device that was bound from a device tree has an node that caused it to be bound. Add functions that find and return a device based on a device tree offset. Signed-off-by: Simon Glass <sjg@chromium.org>
* dm: Display the sequence number for each deviceSimon Glass2014-07-23-0/+2
| | | | | | Add this information to 'dm tree' and 'dm uclass' commands. Signed-off-by: Simon Glass <sjg@chromium.org>
* dm: Introduce device sequence numberingSimon Glass2014-07-23-8/+347
| | | | | | | | | | | | | | | | | | | | | | | | | In U-Boot it is pretty common to number devices from 0 and access them on the command line using this numbering. While it may come to pass that we will move away from this numbering, the possibility seems remote at present. Given that devices within a uclass will have an implied numbering, it makes sense to build this into driver model as a core feature. The cost is fairly small in terms of code and data space. With each uclass having numbered devices we can ask for SPI port 0 or serial port 1 and receive a single device. Devices typically request a sequence number using aliases in the device tree. These are resolved when the device is probed, to deal with conflicts. Sequence numbers need not be sequential and holes are permitted. At present there is no support for sequence numbers using static platform data. It could easily be added to 'struct driver_info' if needed, but it seems better to add features as we find a use for them, and the use of -1 to mean 'no sequence' makes the default value somewhat painful. Signed-off-by: Simon Glass <sjg@chromium.org>
* dm: Avoid activating devices in 'dm uclass' commandSimon Glass2014-07-23-3/+3
| | | | | | | | This command currently activates devices as it lists them. This is not desirable since it changes the system state. Fix it and avoid printing a newline if there are no devices in a uclass. Signed-off-by: Simon Glass <sjg@chromium.org>
* dm: Move device display into its own functionSimon Glass2014-07-23-8/+19
| | | | | | | The device display for 'dm tree' and 'dm uclass' is mostly the same, so move it into a common function. Signed-off-by: Simon Glass <sjg@chromium.org>
* fdt: Add a function to get the alias sequence of a nodeSimon Glass2014-07-23-0/+64
| | | | | | | | | | | | | | | | | | | | Aliases are used to provide U-Boot's numbering of devices, such as: aliases { spi0 = "/spi@12330000"; } spi@12330000 { ... } This tells us that the SPI controller at 12330000 is considered to be the first SPI controller (SPI 0). So we have a numbering for the SPI node. Add a function that returns the numbering for a node assume that it exists in the list of aliases. Signed-off-by: Simon Glass <sjg@chromium.org>
* dm: Move uclass error checking/probing into a functionSimon Glass2014-07-23-6/+22
| | | | | | Several functions will use this same pattern, so bring it into a function. Signed-off-by: Simon Glass <sjg@chromium.org>
* Add a flag indicating when the serial console is readySimon Glass2014-07-23-2/+4
| | | | | | | | | | For sandbox we have a fallback console which is used very early in U-Boot, before serial drivers are available. Rather than try to guess when to switch to the real console, add a flag so we can be sure. This makes sure that sandbox can always output a panic() message, for example, and avoids silent failure (which is very annoying in sandbox). Signed-off-by: Simon Glass <sjg@chromium.org>
* console: Remove vprintf() optimisation for sandboxSimon Glass2014-07-23-1/+1
| | | | | | | | | | | | If the console is not present, we try to reduce overhead by stopping any output in vprintf(), before it gets to putc(). This is of dubious merit in general, but in the case of sandbox it is incorrect since we have a fallback console which reports errors very early in U-Boot. If this is defeated U-Boot can hang or exit with no indication of what is wrong. Remove the optimisation for sandbox. Signed-off-by: Simon Glass <sjg@chromium.org>
* stdio: Provide functions to add/remove devices using stdio_devSimon Glass2014-07-23-8/+26
| | | | | | | | | The current functions for adding and removing devices require a device name. This is not convenient for driver model, which wants to store a pointer to the relevant device. Add new functions which provide this feature and adjust the old ones to call these. Signed-off-by: Simon Glass <sjg@chromium.org>
* dm: Support driver model prior to relocationSimon Glass2014-07-23-22/+60
| | | | | | | Initialise devices marked 'pre-reloc' and make them available prior to relocation. Note that this requires pre-reloc malloc() to be available. Signed-off-by: Simon Glass <sjg@chromium.org>
* dm: Allow drivers to be marked 'before relocation'Simon Glass2014-07-23-41/+131
| | | | | | | | | | | | | | | | | | | | | | | | | | Driver model currently only operates after relocation is complete. In this state U-Boot typically has a small amount of memory available. In adding support for driver model prior to relocation we must try to use as little memory as possible. In addition, on some machines the memory has not be inited and/or the CPU is not running at full speed or the data cache is off. These can reduce execution performance, so the less initialisation that is done before relocation the better. An immediately-obvious improvement is to only initialise drivers which are actually going to be used before relocation. On many boards the only such driver is a serial UART, so this provides a very large potential benefit. Allow drivers to mark themselves as 'pre-reloc' which means that they will be initialised prior to relocation. This can be done either with a driver flag or with a 'dm,pre-reloc' device tree property. To support this, the various dm scanning function now take a 'pre_reloc_only' parameter which indicates that only drivers marked pre-reloc should be bound. Signed-off-by: Simon Glass <sjg@chromium.org>
* sandbox: Remove all drivers before exitSimon Glass2014-07-23-0/+4
| | | | | | | | | | | Drivers are supposed to be able to close down cleanly. To set a good example, make sandbox shut down its driver model drivers and remove them before exit. It may be desirable to do the same more generally once driver model is more widely-used. This could be done during bootm, before U-Boot jumps to the OS. It seems far too early to make this change. Signed-off-by: Simon Glass <sjg@chromium.org>
* dm: Provide a way to shut down driver modelSimon Glass2014-07-23-0/+16
| | | | | | | Add a new method which removes and unbinds all drivers. Signed-off-by: Simon Glass <sjg@chromium.org> Acked-by: Marek Vasut <marex@denx.de>
* dm: Make sure that the root device is probedSimon Glass2014-07-23-1/+4
| | | | | | | | | The root device should be probed just like any other device. The effect of this is to mark the device as activated, so that it can be removed (along with its children) if required. Signed-off-by: Simon Glass <sjg@chromium.org> Acked-by: Marek Vasut <marex@denx.de>
* stdio: Pass device pointer to stdio methodsSimon Glass2014-07-23-101/+189
| | | | | | | | | | | | | | | | | | | | | | | | | | At present stdio device functions do not get any clue as to which stdio device is being acted on. Some implementations go to great lengths to work around this, such as defining a whole separate set of functions for each possible device. For driver model we need to associate a stdio_dev with a device. It doesn't seem possible to continue with this work-around approach. Instead, add a stdio_dev pointer to each of the stdio member functions. Note: The serial drivers have the same problem, but it is not strictly necessary to fix that to get driver model running. Also, if we convert serial over to driver model the problem will go away. Code size increases by 244 bytes for Thumb2 and 428 for PowerPC. 22: stdio: Pass device pointer to stdio methods arm: (for 2/2 boards) all +244.0 bss -4.0 text +248.0 powerpc: (for 1/1 boards) all +428.0 text +428.0 Signed-off-by: Simon Glass <sjg@chromium.org> Acked-by: Marek Vasut <marex@denx.de> Reviewed-by: Marek Vasut <marex@denx.de>
* stdio: Remove redundant code around stdio_register() callsSimon Glass2014-07-23-42/+0
| | | | | | | | | | | | | There is no point in setting a structure's memory to NULL when it has already been zeroed with memset(). Also, there is no need to create a stub function for stdio to call - if the function is NULL it will not be called. This is a clean-up, with no change in functionality. Signed-off-by: Simon Glass <sjg@chromium.org> Acked-by: Marek Vasut <marex@denx.de>
* dm: Use an explicit expect value in core testsSimon Glass2014-07-23-6/+12
| | | | | | | Rather than reusing the 'reg' property, use an explicit property for the expected ping value used in testing. Signed-off-by: Simon Glass <sjg@chromium.org>
* dm: gpio: Don't use the driver model uclass for SPLSimon Glass2014-07-23-0/+2
| | | | | | | Driver model does not support SPL yet, so we should not use the GPIO uclass for SPL. Signed-off-by: Simon Glass <sjg@chromium.org>
* sandbox: Always enable malloc debugSimon Glass2014-07-23-0/+4
| | | | | | | | Tun on DEBUG in malloc(). This adds code space and slows things down but for sandbox this is acceptable. We gain the ability to check for memory leaks in tests. Signed-off-by: Simon Glass <sjg@chromium.org>
* sandbox: config: Enable pre-relocation malloc()Simon Glass2014-07-23-1/+3
| | | | | | | Enable this for sandbox so that we will be able to use driver model before relocation. Signed-off-by: Simon Glass <sjg@chromium.org>
* sandbox: Support pre-relocation malloc()Simon Glass2014-07-23-0/+6
| | | | | | | Set up and zero global data before board_init_f() is called so that we can remove the need for CONFIG_SYS_GENERIC_GLOBAL_DATA. Signed-off-by: Simon Glass <sjg@chromium.org>
* Add a simple malloc() implementation for pre-relocationSimon Glass2014-07-23-0/+72
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | If we are to have driver model before relocation we need to support some way of calling memory allocation routines. The standard malloc() is pretty complicated: 1. It uses some BSS memory for its state, and BSS is not available before relocation 2. It supports algorithms for reducing memory fragmentation and improving performace of free(). Before relocation we could happily just not support free(). 3. It includes about 4KB of code (Thumb 2) and 1KB of data. However since this has been loaded anyway this is not really a problem. The simplest way to support pre-relocation malloc() is to reserve an area of memory and allocate it in increasing blocks as needed. This implementation does this. To enable it, you need to define the size of the malloc() pool as described in the README. It will be located above the pre-relocation stack on supported architectures. Note that this implementation is only useful on machines which have some memory available before dram_init() is called - this includes those that do no DRAM init (like tegra) and those that do it in SPL (quite a few boards). Enabling driver model preior to relocation for the rest of the boards is left for a later exercise. Signed-off-by: Simon Glass <sjg@chromium.org>
* sandbox: Set up global data before board_init_f()Simon Glass2014-07-23-1/+5
| | | | | | | | | | | | At present sandbox defines CONFIG_SYS_GENERIC_GLOBAL_DATA, meaning that the global_data pointer is set up in board_init_f(). If we set up and zero the global data before calling board_init_f() then we don't need to define CONFIG_SYS_GENERIC_GLOBAL_DATA. Make this change to simplify the init process. Signed-off-by: Simon Glass <sjg@chromium.org>
* Remove form-feeds from dlmalloc.cSimon Glass2014-07-23-23/+23
| | | | | | | | | | These don't really serve any purpose in the modern age. On the other hand they show up as annoying control characters in my editor, which then happily removes them. I believe we can drop these characters from the file. Signed-off-by: Simon Glass <sjg@chromium.org>
* m68k: define __kernel_size_t as unsinged int againMasahiro Yamada2014-07-22-1/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Commit ddc94378d changed the definition of __kernel_size_t from unsigned int to unsigned long. It is true that it fixed warnings on some crosstools but it increased warnings on the others. The problem is that we cannot see consistency in terms of the typedef of __kernel_size_t on M68K architecture. However, I'd like to suggest to have __kernel_size_t to be unsigned int again. Rationale: [1] Linux Kernel defines __kernel_size_t on M68K as unsigned int. Let's stick to the Linux's way. [2] We want to build boards with popular pre-built toolchains, not the one locally-built by indivisuals. I think m68-linux-gcc which can be downloaded from www.kernel.org is the candidate for our _recommended_ toolchains. With this patch, all the m68k boards can be built without any warnings. Give it a try with the following crosstools: https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.6.3/ x86_64-gcc-4.6.3-nolibc_m68k-linux.tar.xz or https://www.kernel.org/pub/tools/crosstool/files/bin/x86_64/4.9.0/ x86_64-gcc-4.9.0-nolibc_m68k-linux.tar.xz (The latter is newer.) Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com> Cc: Simon Glass <sjg@chromium.org> Cc: Jason Jin <Jason.jin@freescale.com>
* m68k: fix an undefined behavior warning of M5253DEMO boardMasahiro Yamada2014-07-22-4/+6
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The latest GCC is so clever that it reports more warnings than old ones did: ------------------------------>8------------------------------ board/freescale/m5253demo/flash.c: In function 'flash_get_offsets': board/freescale/m5253demo/flash.c:65:23: warning: iteration 2047u invokes undefined behavior [-Waggressive-loop-optimizations] info->start[k + 1] = info->start[k] + CONFIG_SYS_SST_SECTSZ; ^ board/freescale/m5253demo/flash.c:64:3: note: containing loop for (k = 0, j = 0; j < CONFIG_SYS_SST_SECT; j++, k++) { ^ ------------------------------8<------------------------------ The cause of the warning is like this: The for statement iterates 2048 times in flash_get_offsets() func. (Notice CONFIG_SYS_SST_SECT is defined as 2048) The last iteration does info->start[2048] = info->start[2047] + CONFIG_SYS_SST_SECTSZ; causing an undefined behavior. (Please note the array size of info->start is 2048. CONFIG_SYS_MAX_FLASH_SECT is defined as 2048 for this board.) This commit fixes that so as not to overrun the info->start array. Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com> Cc: Jason Jin <Jason.jin@freescale.com>
* boards.cfg: re-claim ownership for TQM8xx boardsWolfgang Denk2014-07-22-9/+9
| | | | Signed-off-by: Wolfgang Denk <wd@denx.de>
* Ethernet: let user know if there is no valid ethernet addressPavel Machek2014-07-22-8/+21
| | | | | | Improve error messages in case of invalid/unset ethernet addresses. Signed-off-by: Pavel Machek <pavel@denx.de>
* board_r: run scsi init() on ARM tooIan Campbell2014-07-22-4/+1
| | | | | | | | | | | | | | | | | This has been disabled for ARM in initr_scsi since that function was introduced. However it works fine for me on Cubieboard and Cubietruck (with the upcoming AHCI glue patch). I also tested on two random ARM platforms which seem to define CONFIG_CMD_SCSI: - highbank worked fine (on midway hardware) - omap5_uevm built OK and I confirmed using objdump that things were as expected (i.e. the default weak scsi_init nop was used). While there remove the mismatched comment from the #endif (omitting the comment seems to be the prevailing style in this file). Signed-off-by: Ian Campbell <ijc@hellion.org.uk> Acked-by: Simon Glass <sjg@chromium.org>
* AHCI: Increase link timeout to 200msIan Campbell2014-07-22-1/+1
| | | | | | | | | | | | | In 73545f75b66d "ahci: wait longer for link" I increased the timeout to 40ms based on the observed behaviour of a WD disk on a Cubietruck. Since then Karsten Merker and myself have both observed timeouts with HGST disks (Karsten on Cubietruck, me on Cubieboard2). Increasing the timeout to ~175ms fixes this, so go to 200ms for a bit of headroom. Signed-off-by: Ian Campbell <ijc@hellion.org.uk> Cc: Karsten Merker <merker@debian.org> Acked-by: Hans de Goede <hdegoede@redhat.com>
* .gitignore: clean-up unnecessary entriesMasahiro Yamada2014-07-22-4/+0
| | | | | | | | | There have been /errlog and /reloc_off in the top level .gitignore since commit 1b4aaffe added it about 7 years ago. But they are no longer generated. Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
* Update .mailmap using scripts/mailmapperMasahiro Yamada2014-07-22-0/+15
| | | | | | | | | | | Add more entries to .mailmap for the canonical names with 50 commits or more. This commit was generated by the following command: scripts/mailmapper > tmp; mv tmp .mailmap Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
* scripts: add mailmapper, a tool to create/update mailmap fileMasahiro Yamada2014-07-22-0/+160
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This tool helps to create/update the mailmap file. It runs 'git shortlog' internally and searches differently spelled author names which share the same email address. The author name with the most commits is asuumed to be a canonical real name. If the number of commits from the cananonical name is equal to or greater than 'MIN_COMMITS' (=50), the entry for the cananical name will be output. ('MIN_COMMITS' is used here because we do not want to create a fat mailmap by adding every author with only a few commits.) If there exists a mailmap file specified by the mailmap.file configuration options or '.mailmap' at the toplevel of the repository, it is used as a base file. The base file and the newly added entries are merged together and sorted alphabetically (but the comment block is kept untouched), and then printed to standard output. Usage ----- scripts/mailmapper prints the mailmapping to standard output. scripts/mailmapper > tmp; mv tmp .mailmap will be useful for updating '.mailmap' file. Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
* add .mailmap for proper git-shortlog outputMasahiro Yamada2014-07-22-0/+12
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This is the first version of .mailmap created by hand. Please see "man git-shortlog" for what this commit is trying to do. Without this file, for example, "git shortlog -n -s" shows as follows: 2693 Wolfgang Denk <------ 1002 Stefan Roese <------ 811 wdenk <------ 808 Mike Frysinger 806 Simon Glass [snip] 177 Matthias Fuchs 154 stroese <------ 153 Timur Tabi And then, with this file, it shows as follows: 3504 Wolfgang Denk <------ 1156 Stefan Roese <------ 808 Mike Frysinger 806 Simon Glass Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com> Cc: Stefan Roese <sr@denx.de> Cc: Wolfgang Denk <wd@denx.de>
* whitespace cleanupsPavel Machek2014-07-22-5/+5
| | | | | | Whitespace cleanups. Signed-off-by: Pavel Machek <pavel@denx.de>
* Makefile: fix tags target documentationIgor Grinberg2014-07-22-1/+2
| | | | | | | | Replace the TAGS target name by the actual ctags target name. Also, add etags target documentation. Cc: Masahiro Yamada <yamada.m@jp.panasonic.com> Signed-off-by: Igor Grinberg <grinberg@compulab.co.il>
* Makefile: fix ctags/etags clean targetsIgor Grinberg2014-07-22-1/+1
| | | | | | | | | | | | | | Commit efcf861 (kbuild: use scripts/Makefile.clean) refactored the cleaning targets and accidentially replaced the actually generated "ctags" and "etags" files in the file list by "tags" and "TAGS". "tags" and "TAGS" are not part of the Makefile build targets and therefore should not be a part of the list for clean targets. Substitute the actually generated files instead, to fix the clean targets behavior. Cc: Masahiro Yamada <yamada.m@jp.panasonic.com> Signed-off-by: Igor Grinberg <grinberg@compulab.co.il>
* Makefile: fix the {c, e}tags/cscope build targetsIgor Grinberg2014-07-22-2/+2
| | | | | | | | | | | | | | | | Commit 9e41403 (kbuild: change out-of-tree build) changed the U-Boot build working directory to the output tree for the out-of-tree builds. This broke the {c,e}tags/cscope build targets as TAG_SUBDIRS variable collected directories based on assumption that the build working directory is the U-Boot source tree directory. Fix the {c,e}tags/cscope build targets by adding the $(srctree) prefix. Also, remove the $(obj) prefix from the etags build target to finish the $(obj) prefix removal started by the same commit. Cc: Masahiro Yamada <yamada.m@jp.panasonic.com> Signed-off-by: Igor Grinberg <grinberg@compulab.co.il>
* rpi_b: handle import of environments in files with CRLF as line endingsAlexander Holler2014-07-22-1/+1
| | | | | | Use the new option -r for env import. Signed-off-by: Alexander Holler <holler@ahsoftware.de>
* am335x_evm: handle import of environments in files with CRLF as line endingsAlexander Holler2014-07-22-1/+1
| | | | | | Use the new option -r for env import. Signed-off-by: Alexander Holler <holler@ahsoftware.de>
* omap3_beagle: handle import of environments in files with CRLF as line endingsAlexander Holler2014-07-22-1/+1
| | | | | | Use the new option -r for env import. Signed-off-by: Alexander Holler <holler@ahsoftware.de>