aboutsummaryrefslogtreecommitdiff
AgeCommit message (Collapse)AuthorFilesLines
2023-04-27sandbox64: add a test case for UCLASS_NVMXIPWIP/2023-04-27-introduce-nvm-xip-block-storage-emulationAbdellatif El Khlifi3-0/+151
provide a test for NVM XIP devices The test case allows to make sure of the following: - The NVM XIP QSPI devices are probed - The DT entries are read correctly - the data read from the flash by the NVMXIP block driver is correct Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
2023-04-27corstone1000: enable NVM XIP QSPI flashAbdellatif El Khlifi1-0/+1
add the QSPI flash device with block storage capability Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
2023-04-27corstone1000: add NVM XIP QSPI device tree nodeAbdellatif El Khlifi1-1/+8
add QSPI flash device node for block storage access Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
2023-04-27sandbox64: add support for NVMXIP QSPIAbdellatif El Khlifi6-4/+39
enable NVMXIP QSPI for sandbox 64-bit Adding two NVM XIP QSPI storage devices. Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com> Reviewed-by: Simon Glass <sjg@chromium.org>
2023-04-27sandbox64: fix: return unsigned long in readq()Abdellatif El Khlifi2-2/+2
make readq return unsigned long readq should return 64-bit data Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com> Reviewed-by: Simon Glass <sjg@chromium.org>
2023-04-27drivers/mtd/nvmxip: introduce QSPI XIP driverAbdellatif El Khlifi6-1/+178
add nvmxip_qspi driver under UCLASS_NVMXIP The device associated with this driver is the parent of the blk#<id> device nvmxip_qspi can be reused by other platforms. If the platform has custom settings to apply before using the flash, then the platform can provide its own parent driver belonging to UCLASS_NVMXIP and reuse nvmxip-blk driver. The custom driver can be implemented like nvmxip_qspi in addition to the platform custom settings. Platforms can use multiple NVM XIP devices at the same time by defining a DT node for each one of them. For more details please refer to doc/develop/driver-model/nvmxip_qspi.rst Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
2023-04-27drivers/mtd/nvmxip: introduce NVM XIP block storage emulationAbdellatif El Khlifi12-0/+298
add block storage emulation for NVM XIP flash devices Some paltforms such as Corstone-1000 need to see NVM XIP raw flash as a block storage device with read only capability. Here NVM flash devices are devices with addressable memory (e.g: QSPI NOR flash). The implementation is generic and can be used by different platforms. Two drivers are provided as follows. nvmxip-blk : a generic block driver allowing to read from the XIP flash nvmxip Uclass driver : When a device is described in the DT and associated with UCLASS_NVMXIP, the Uclass creates a block device and binds it with the nvmxip-blk. Platforms can use multiple NVM XIP devices at the same time by defining a DT node for each one of them. Signed-off-by: Abdellatif El Khlifi <abdellatif.elkhlifi@arm.com>
2023-04-27Merge branch '2023-04-27-IDE-code-cleanups'Tom Rini6-520/+415
To quote the author: This code was converted to driver model a long time again but it was a pretty rough conversion. It introduced a few minor bugs, e.g. the device capacity is incorrect and some flags are lost (such as lba48). This series tidies up the code and fixes these bugs. This involves quite a bit of refactoring, so it is done one patch at a time for easier review.
2023-04-27ide: Make use of U-Boot typesWIP/2023-04-27-IDE-code-cleanupsSimon Glass1-42/+37
Use standard U-Boot types in the file to make the code less verbose. Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-27ide: Simplify expressions and hex valuesSimon Glass1-59/+56
The code has quite a few unnecessary brackets and comparisons to zero, etc. Fix these up as well as some upper-case hex values and use of 0x in printf() strings. Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-27ide: Convert to use log_debug()Simon Glass1-40/+40
Avoid the use of the function name in a few of the debug() calls, since this causes a checkpatch warning. Convert all other calls too. Use lower-case hex consistently. Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-27ide: Tidy up ide_reset()Simon Glass1-11/+10
Avoid using #ifdef and use a single function declaration, so it is easier to read. Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-27ide: Correct LBA settingSimon Glass1-7/+2
Fix a longstanding bug where the LBA is calculated as the size of the media instead of the number of blocks. This was perhaps not noticed earlier since it prints the correct value first, before setting the wrong value. Drop the unnecessary blksz variable while we are here. Signed-off-by: Simon Glass <sjg@chromium.org> Fixes: 68e6f221ed0 ("block: ide: Fix block read/write with driver model")
2023-04-27ide: Use a single local blk_desc for ide_ident()Simon Glass1-12/+12
We only use one member of the ide_dev_desc[] array at a time and it does not stick around outside ide_probe(). Use a single element instead. Copy over the missing members of blk_desc at the same, since this was missing from the previous code. Signed-off-by: Simon Glass <sjg@chromium.org> Fixes: 68e6f221ed0 ("block: ide: Fix block read/write with driver model")
2023-04-27ide: Move all blk_desc init into ide_ident()Simon Glass1-8/+4
Rather than having the caller fill some of this in, do it all in the ide_ident() function, since it knows all the values. Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-27ide: Make ide_ident() return an error codeSimon Glass1-48/+53
Update ide_ident() to indicate whether it finds a device or not. Use that to decide whether to create a block device for it, rather than looking DEV_TYPE_UNKNOWN. Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-27ide: Use desc consistently for struct blk_descSimon Glass1-54/+47
Most of the code uses 'desc' as the variable name for a blk descriptor. Change ide to do the same. Tidy up some extra brackets and types while we are here. Leave the code in ide_probe() alone since it is about to be refactored. Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-27ide: Combine the two loops in ide_probe()Simon Glass1-6/+6
The two loops in this function operate on the same ide_dev_desc[] array. Combine them to reduce duplication. Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-27ide: Move ide_init() entirely within ide_probe()Simon Glass1-46/+38
Now that ide_probe() is the only caller of ide_init(), move all the code into the probe function, so it is easier to refactor it. Move ide_dev_desc[] into ide_probe() to, since it is the only user. Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-27ide: Move setting of vendor strings into ide_probe()Simon Glass1-24/+18
The current implementation adds this information in the block device's probe() function, which is called in the blk_probe_or_unbind() in ide_probe(). It is simpler to do this in ide_probe() itself, since the effect is the same. This helps to consolidate use of ide_dev_desc[] which we would like to remove. Use strlcpy() to keep checkpatch happy. Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-27ide: Make ide_bus_ok a local variableSimon Glass1-9/+3
This is only used in one place now, so make it a local variable. Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-27ide: Move bus init into a functionSimon Glass1-39/+48
Move this code into a separate function which returns whether the bus was found, or not. Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-27ide: Avoid preprocessor for CONFIG_LBA48Simon Glass2-40/+21
Use IS_ENABLED() instead for all conditions. Add the 'lba48' flag into struct blk_desc always, since it uses very little space. Use a bool so the meaning is clearer. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Mattijs Korpershoek <mkorpershoek@baylibre.com>
2023-04-27ide: Avoid preprocessor for CONFIG_ATAPISimon Glass1-10/+3
Use IS_ENABLED() instead for all conditions. Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-27ide: Simplify success conditionSimon Glass1-19/+17
Change the if() to remove extra brackets and check for the positive case first, i.e. when a device is found. Exit the loop in that case, with the retry logic in the 'else' part. Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-27ide: Refactor confusing loop codeSimon Glass1-28/+15
This code is hard to follow as it uses #ifdef in a strange way. Adjust it to avoid the preprocessor. Drop the special return for the non-ATAPI case since we can rely on tries becoming 0 and exiting the loop. Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-27ide: Change the retries variableSimon Glass1-5/+5
Use a 'tries' variable which starts at the number of tries we want to do, rather than a 'retries' one that stops at either 1 or 2. This will make it easier to refactor the code to avoid the horrible #ifdefs Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-27ide: Make function staticSimon Glass2-23/+11
Only one function is called from outside this file. Make all the others static. Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-27ide: Correct use of ATAPISimon Glass2-3/+18
The use of atapi_read() was incorrect dropped. Fix this so that it will be used when needed. Use a udevice for the first argument of atapi_read() so it is consistent with ide_read(). This requires much of the ATAPI code to be brought out from behind the existing #ifdef. It will still be removed by the compiler if it is not needed. Add an atapi flag to struct blk_desc so the information can be retained. Fixes: 145df842b44 ("dm: ide: Add support for driver-model block devices") Fixes: d0075059e4d ("ide: Drop non-DM code for BLK") Reviewed-by: Mattijs Korpershoek <mkorpershoek@baylibre.com> Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-27ide: Create a prototype for ide_set_reset()Simon Glass2-2/+10
This is used by a board so should be in the header file. Add it. Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-27ide: Drop weak functionsSimon Glass2-20/+7
These are not used from outside this file anymore. Make them static and remove them from the header file. Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-27ide: Move a few functions further up the fileSimon Glass1-34/+34
Move these functions so they appear before they are used. Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-27ide: Drop ide_device_present()Simon Glass2-13/+0
This function is not used anymore. Drop it. Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-27ide: Move ide_init() into probingSimon Glass4-11/+27
At present the code does ide_init() as a separate operation, then calls device_probe() to copy over the information. We can call ide_init() from probe just as easily. The only difference is that using 'ide init' twice will do nothing. However it already fails to copy over the new data in that case, so the effect is the same. For now, unbind the block devices and remove the IDE device, which causes the bus to be probed again. Later patches will fix this up fully, so that all blk_desc data is copied across. Since ide_reset() is only called from ide_init(), there is no need to init the ide_dev_desc[] array. This is already done at the end of ide_init() so drop this code. The call to uclass_first_device() is now within the probe() function of the same device, so does nothing. Drop it. Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-27ide: Drop init for not using BLKSimon Glass2-19/+0
ALl boards use CONFIG_BLK now so this code is not used. Drop it and the header-file #ifdef Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-27ide: Drop CONFIG_START_IDESimon Glass2-12/+0
This is not used by any board. Drop it. Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-27ide: Use mdelay() for long delaysSimon Glass1-14/+11
Rather than using very large numbers with udelay(), use mdelay(), which is easier to follow. Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-27ide: Move ATA_CURR_BASE to C fileSimon Glass2-3/+3
This is not used outside one C file. Move it out of the header to reduce its visbility. Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-26Merge branch '2023-04-26-enable-bootstd-for-all-rockchip'Tom Rini21-133/+91
- Merge Simon's series that enables bootstd and the distro bootmeth there for all of Rockchip.
2023-04-26rockchip: Use the same boot_targets for all boardsWIP/2023-04-26-enable-bootstd-for-all-rockchipSimon Glass1-4/+0
It doesn't really matter if we mention things which are not present. For example, if 'nvme' is included but the board does not support it, it just continues with the next item in the list. It is simpler to use the same target list for all boards, so drop the different one for rk3399. Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-26rockchip: Move to standard bootSimon Glass15-94/+17
Drop the distro-boot scripts and use standard boot instead. Signed-off-by: Simon Glass <sjg@chromium.org> Tested-by: Jonas Karlman <jonas@kwiboo.se>
2023-04-26bootstd: Use blk uclass device numbers to set efi bootdevMathew McBride1-1/+2
When loading a file from a block device, efiload_read_file was using the seq_num of the device (e.g "35" of virtio_blk#35) instead of the block device id (e.g what you get from running the corresponding device scan command, like "virtio 0") This cause EFI booting from these devices to fail as an invalid device number is passed to blk_get_device_part_str: Scanning bootdev 'virtio-blk#35.bootdev': distro_efi_read_bootflow_file start (efi,fname=<NULL>) distro_efi_read_bootflow_file start (efi,fname=<NULL>) setting bootdev virtio, 35, efi/boot/bootaa64.efi, 00000000beef9a40, 170800 efi_dp_from_name calling blk_get_device_part_str dev=virtio devnr=35 path=efi/boot/bootaa64.efi blk_get_device_part_str (virtio,35) blk_get_device_by_str (virtio, 35) ** Bad device specification virtio 35 ** Using default device tree: dtb/qemu-arm.dtb No device tree available 0 efi ready virtio 1 virtio-blk#35.bootdev.par efi/boot/bootaa64.efi ** Booting bootflow 'virtio-blk#35.bootdev.part_1' with efi blk_get_device_part_str (virtio,0:1) blk_get_device_by_str (virtio, 0) No UEFI binary known at beef9a40 (image buf=00000000beef9a40,addr=0000000000000000) Boot failed (err=-22) Signed-off-by: Mathew McBride <matt@traverse.com.au> Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-26bootstd: Adjust code ordering to work around compiler quirkSimon Glass1-2/+3
At present when debugging is off, bootdev_find_in_blk() sometimes fails to find a valid bootflow, e.g. with virtio. Accessing the 'blk' variable later in the function seems to correct it. Move the 'ret' check before the debug statement and set the block device again aftewards, to work around this. Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-26bootstd: Show a message sometimes if no bootflows are foundSimon Glass1-0/+3
Enable some messages that might provide hints, but only for CMD_BOOTFLOW_FULL since otherwise the -l flag is not available. Signed-off-by: Simon Glass <sjg@chromium.org> Suggested-by: Tom Rini <trini@konsulko.com>
2023-04-26bootstd: Report missing labels only when askedSimon Glass3-15/+31
Use the -l flag to indicate whether to report missing uclasses. Also try to be more helpful when no devices are found. For example, when we see something 'scsi0' requested and nothing was found, this indicates that there are no SCSI devices, so show a suitable message. Move messages out of the low-level functions so that silent operation is possible. This means they are never reported unless BOOTSTD_FULL is enabled, since the -l flag cannot otherwise be set. Suggested-by: Tom Rini <trini@konsulko.com> Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-26bootstd: Support booting EFI where multiple options existSimon Glass1-7/+19
The current EFI implementation has a strange quirk where it watches loaded files and uses the last-loaded file to determine the device that is being booted from. This is confusing with bootstd, where multiple options may exist. Even loading a device tree will cause it to go wrong. There is no API for passing this information, since the only entry into booting an EFI image is the 'bootefi' command. To work around this, call efi_set_bootdev() for EFI images, if possible, just before booting. Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-26virtio: Ensure PCI is set up firstSimon Glass1-0/+6
Sometimes virtio may rely on PCI, or at least that is what the distro_bootcmd script suggests. Add this in. Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-26bootstd: Tweak bootflow logic for device treeSimon Glass1-11/+11
We should only store the FDT filename if we were able to determine one. Adjust the logic for this. This corrects the case where no FDT is needed to boot, such as with EFI using ACPI. Signed-off-by: Simon Glass <sjg@chromium.org>
2023-04-26Merge branch '2023-04-25-assorted-updates-and-fixes'Tom Rini35-131/+314
- A few TI, mpc8379erdb and vexpress64 updates, some arm64 core updates, test cleanups, Xen cleanups, assorted code and Kconfig cleanups (many in preparation for using clang on ARM), psci pre-reloc fixes, enable PCI bus mastering for ATA devices, and a gpio-uclass bugfix
2023-04-25gpio-uclass: fix off-by-one in gpio_request_list_by_name_nodev()Rasmus Villemoes1-1/+1
By the time we jump to the err label, count represents the number of gpios we've successfully requested. So by subtracting one, we fail to free the most recently requested. Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk> Reviewed-by: Simon Glass <sjg@chromium.org>