dm: spi: Add support for all targets which requires MANUAL_RELOC
Subsystems (2)
PATCH 1/3 dm: spi: 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: 484fdf5ba058b07be5ca82763aa2b72063540ef3)
to update function pointers for DM.
---
drivers/spi/spi-uclass.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+)
drivers/spi/spi-uclass.c +20 -0
@@ -118,6 +118,26 @@ static int spi_post_probe(struct udevice *bus) spi->max_hz =fdtdec_get_int (gd->fdt_blob, bus->of_offset,"spi-max-frequency" ,0 ); +#if defined(CONFIG_NEEDS_MANUAL_RELOC ) +struct dm_spi_ops *ops =spi_get_ops (bus); + + +if (ops->claim_bus) + ops->claim_bus += gd->reloc_off; +if (ops->release_bus) + ops->release_bus += gd->reloc_off; +if (ops->set_wordlen) + ops->set_wordlen += gd->reloc_off; +if (ops->xfer) + ops->xfer += gd->reloc_off; +if (ops->set_speed) + ops->set_speed += gd->reloc_off; +if (ops->set_mode) + ops->set_mode += gd->reloc_off; +if (ops->cs_info) + ops->cs_info += gd->reloc_off; +#endif +return 0 ; }
Signature · 1 line
2.5.0
PATCH 2/3 dm: core: Add missing entries for manual relocation
Patches:
"dm: core: Add a post_bind method for parents"
(sha1: 0118ce79577f9b0881f99a6e4f8a79cd5014cb87)
"dm: core: Add a uclass pre_probe() method for devices" (sha1: 02c07b3741f1b825934b1a6eb8f23530532dc426)
"dm: core: Allow the uclass to set up a device's child after binding" (sha1: 081f2fcbd9a95ba10677065359791f8fea3f8c58)
"dm: core: Allow uclass to set up a device's child before it is probed" (sha1: 83c7e434c9dd3ca81f8b763e23c1881b973bcf2f)
Adds new entries to struct driver and struct uclass_driver without extending code for manual relocation. This patch fixes it for all architectures which requires MANUAL_RELOC.
---
drivers/core/root.c | 8 ++++++++ 1 file changed, 8 insertions(+)
drivers/core/root.c +8 -0
@@ -59,6 +59,8 @@ void fix_drivers(void) entry->unbind += gd->reloc_off;if (entry->ofdata_to_platdata) entry->ofdata_to_platdata += gd->reloc_off; +if (entry->child_post_bind) + entry->child_post_bind += gd->reloc_off;if (entry->child_pre_probe) entry->child_pre_probe += gd->reloc_off;if (entry->child_post_remove)
@@ -81,10 +83,16 @@ void fix_uclass(void) entry->post_bind += gd->reloc_off;if (entry->pre_unbind) entry->pre_unbind += gd->reloc_off; +if (entry->pre_probe) + entry->pre_probe += gd->reloc_off;if (entry->post_probe) entry->post_probe += gd->reloc_off;if (entry->pre_remove) entry->pre_remove += gd->reloc_off; +if (entry->child_post_bind) + entry->child_post_bind += gd->reloc_off; +if (entry->child_pre_probe) + entry->child_pre_probe += gd->reloc_off;if (entry->init) entry->init += gd->reloc_off;if (entry->destroy)
Signature · 1 line
2.5.0
PATCH 2/3 dm: core: Add missing entries for manual relocation
Quoted 14 lines · Michal Simek
Patches:
"dm: core: Add apost_bindmethod for parents"
(sha1:0118ce79577f9b0881f99a6e4f8a79cd5014cb87)
"dm: core: Add a uclasspre_probe()method for devices" (sha1:02c07b3741f1b825934b1a6eb8f23530532dc426)
"dm: core: Allow the uclass to set up a device's child after binding" (sha1:081f2fcbd9a95ba10677065359791f8fea3f8c58)
"dm: core: Allow uclass to set up a device's child before it is probed" (sha1:83c7e434c9dd3ca81f8b763e23c1881b973bcf2f)Adds new entries to struct driver and struct
uclass_driverwithout extending code for manual relocation. This patch fixes it for all architectures which requiresMANUAL_RELOC.
Quoted 5 lines
Signed-off-by Michal Simek <[email protected]>---
drivers/core/root.c | 8 ++++++++ 1 file changed, 8 insertions(+)
Looking forward to getting rid of the manual relocation!
PATCH 2/3 dm: core: Add missing entries for manual relocation
Quoted 15 lines · Simon Glass
Quoted 14 lines · Michal Simek
Patches:
"dm: core: Add apost_bindmethod for parents"
(sha1:0118ce79577f9b0881f99a6e4f8a79cd5014cb87)
"dm: core: Add a uclasspre_probe()method for devices" (sha1:02c07b3741f1b825934b1a6eb8f23530532dc426)
"dm: core: Allow the uclass to set up a device's child after binding" (sha1:081f2fcbd9a95ba10677065359791f8fea3f8c58)
"dm: core: Allow uclass to set up a device's child before it is probed" (sha1:83c7e434c9dd3ca81f8b763e23c1881b973bcf2f)Adds new entries to struct driver and struct
uclass_driverwithout extending code for manual relocation. This patch fixes it for all architectures which requiresMANUAL_RELOC.
Quoted 7 lines
Quoted 5 lines
Signed-off-by Michal Simek <[email protected]>---
drivers/core/root.c | 8 ++++++++ 1 file changed, 8 insertions(+)Looking forward to getting rid of the manual relocation!
:-)
What about that third one?
Is any change in API needed or that style is fine?
Thanks,
Michal
PATCH 3/3 dm: sf: Add support for all targets which requires MANUAL_RELOC
In reply to Michal SimekIt is follow up patch based on
"dm: Add support for all targets which requires MANUAL_RELOC" (sha1: 484fdf5ba058b07be5ca82763aa2b72063540ef3)
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.
---
drivers/mtd/spi/sf-uclass.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+)
drivers/mtd/spi/sf-uclass.c +22 -0
@@ -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,28 @@ int spi_flash_remove(struct udevice *dev)return device_remove (dev); } +static int reloc_done; + +static int spi_flash_post_bind (struct udevice *dev) +{ +struct dm_spi_flash_ops *ops =sf_get_ops (dev); + +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++; + } +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 ), };
Signature · 1 line
2.5.0
PATCH 3/3 dm: sf: Add support for all targets which requires MANUAL_RELOC
Quoted 41 lines · Michal Simek
It is follow up patch based on
"dm: Add support for all targets which requiresMANUAL_RELOC" (sha1:484fdf5ba058b07be5ca82763aa2b72063540ef3)
to update function pointers for DM.Using
post_bindis not ideal but it is one on current option what can be used. Variablereloc_donehas 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 <[email protected]>---
drivers/mtd/spi/sf-uclass.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+)drivers/mtd/spi/sf-uclass.c +11
-0@@ -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,28 @@ int spi_flash_remove(struct udevice *dev)return device_remove (dev); } +static int reloc_done; + +static int spi_flash_post_bind (struct udevice *dev) +{ +struct dm_spi_flash_ops *ops =sf_get_ops (dev); + +if (!reloc_done) { +if (ops->read) + ops->read += gd->reloc_off;
drivers/mtd/spi/sf-uclass.c int spi_flash_remove(struct udevice *dev) · line 95
Quoted 10 lines
drivers/mtd/spi/sf-uclass.c +10
-0+if (ops->write) + ops->write += gd->reloc_off; +if (ops->erase) + ops->erase += gd->reloc_off; + + reloc_done++; + } +return 0 ; +} +
This is missing some #if defined(CONFIG_NEEDS_MANUAL_RELOC) around. Will fix it in v2 but would like to know if this is the best way how to call this because I am not convinced about it.
That solution with static variable is not the best one.
Thanks,
Michal
Signature · 14 lines
Michal Simek, Ing. (M.Eng), OpenPGP -> KeyID: FE3D1F91 w: www.monstr.eu p: +42-0-721842854 Maintainer of Linux kernel - Microblaze cpu - http://www.monstr.eu/fdt/ Maintainer of Linux kernel - Xilinx Zynq ARM architecture Microblaze U-BOOT custodian and responsible for u-boot arm zynq platform -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 198 bytes Desc: OpenPGP digital signature URL: <http://lists.denx.de/pipermail/u-boot/attachments/20151028/45006417/attachment.sig>
PATCH 1/3 dm: spi: Add support for all targets which requires MANUAL_RELOC
In reply to Michal SimekQuoted 10 lines · Michal Simek
It is follow up patch based on
"dm: Add support for all targets which requiresMANUAL_RELOC" (sha1:484fdf5ba058b07be5ca82763aa2b72063540ef3)
to update function pointers for DM.Signed-off-by Michal Simek <[email protected]>---
drivers/spi/spi-uclass.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+)