2 * Copyright (c) 2014 Google, Inc
4 * SPDX-License-Identifier: GPL-2.0+
10 #include <spi_flash.h>
11 #include <dm/device-internal.h>
12 #include "sf_internal.h"
14 DECLARE_GLOBAL_DATA_PTR
;
16 int spi_flash_read_dm(struct udevice
*dev
, u32 offset
, size_t len
, void *buf
)
18 return sf_get_ops(dev
)->read(dev
, offset
, len
, buf
);
21 int spi_flash_write_dm(struct udevice
*dev
, u32 offset
, size_t len
,
24 return sf_get_ops(dev
)->write(dev
, offset
, len
, buf
);
27 int spi_flash_erase_dm(struct udevice
*dev
, u32 offset
, size_t len
)
29 return sf_get_ops(dev
)->erase(dev
, offset
, len
);
33 * TODO(sjg@chromium.org): This is an old-style function. We should remove
34 * it when all SPI flash drivers use dm
36 struct spi_flash
*spi_flash_probe(unsigned int bus
, unsigned int cs
,
37 unsigned int max_hz
, unsigned int spi_mode
)
41 if (spi_flash_probe_bus_cs(bus
, cs
, max_hz
, spi_mode
, &dev
))
44 return dev_get_uclass_priv(dev
);
47 void spi_flash_free(struct spi_flash
*flash
)
49 spi_flash_remove(flash
->spi
->dev
);
52 int spi_flash_probe_bus_cs(unsigned int busnum
, unsigned int cs
,
53 unsigned int max_hz
, unsigned int spi_mode
,
54 struct udevice
**devp
)
56 struct spi_slave
*slave
;
61 snprintf(name
, sizeof(name
), "spi_flash@%d:%d", busnum
, cs
);
63 ret
= spi_get_bus_and_cs(busnum
, cs
, max_hz
, spi_mode
,
64 "spi_flash_std", str
, &bus
, &slave
);
72 int spi_flash_remove(struct udevice
*dev
)
74 return device_remove(dev
);
77 static int spi_flash_post_bind(struct udevice
*dev
)
79 #if defined(CONFIG_NEEDS_MANUAL_RELOC)
80 struct dm_spi_flash_ops
*ops
= sf_get_ops(dev
);
81 static int reloc_done
;
85 ops
->read
+= gd
->reloc_off
;
87 ops
->write
+= gd
->reloc_off
;
89 ops
->erase
+= gd
->reloc_off
;
97 UCLASS_DRIVER(spi_flash
) = {
98 .id
= UCLASS_SPI_FLASH
,
100 .post_bind
= spi_flash_post_bind
,
101 .per_device_auto_alloc_size
= sizeof(struct spi_flash
),