mirror of
https://github.com/AsahiLinux/u-boot
synced 2025-03-13 21:36:57 +00:00
dm: sf: Add support for all targets which requires MANUAL_RELOC
It is follow up patch based on
"dm: Add support for all targets which requires MANUAL_RELOC"
(sha1: 484fdf5ba0
)
to update function pointers for DM.
Using post_bind is not ideal but it is one on current option what can be
used. Variable reloc_done has to be used do not call relocation after
every bind. Maybe new core functions should be introduced for this case.
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
parent
31e1029a8e
commit
2588f2ddfd
1 changed files with 23 additions and 0 deletions
|
@ -11,6 +11,8 @@
|
|||
#include <dm/device-internal.h>
|
||||
#include "sf_internal.h"
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
int spi_flash_read_dm(struct udevice *dev, u32 offset, size_t len, void *buf)
|
||||
{
|
||||
return sf_get_ops(dev)->read(dev, offset, len, buf);
|
||||
|
@ -72,8 +74,29 @@ int spi_flash_remove(struct udevice *dev)
|
|||
return device_remove(dev);
|
||||
}
|
||||
|
||||
static int spi_flash_post_bind(struct udevice *dev)
|
||||
{
|
||||
#if defined(CONFIG_NEEDS_MANUAL_RELOC)
|
||||
struct dm_spi_flash_ops *ops = sf_get_ops(dev);
|
||||
static int reloc_done;
|
||||
|
||||
if (!reloc_done) {
|
||||
if (ops->read)
|
||||
ops->read += gd->reloc_off;
|
||||
if (ops->write)
|
||||
ops->write += gd->reloc_off;
|
||||
if (ops->erase)
|
||||
ops->erase += gd->reloc_off;
|
||||
|
||||
reloc_done++;
|
||||
}
|
||||
#endif
|
||||
return 0;
|
||||
}
|
||||
|
||||
UCLASS_DRIVER(spi_flash) = {
|
||||
.id = UCLASS_SPI_FLASH,
|
||||
.name = "spi_flash",
|
||||
.post_bind = spi_flash_post_bind,
|
||||
.per_device_auto_alloc_size = sizeof(struct spi_flash),
|
||||
};
|
||||
|
|
Loading…
Add table
Reference in a new issue