public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] [PATCH v2 1/3] dm: spi: Add support for all targets which requires MANUAL_RELOC
@ 2015-10-30 14:56 Michal Simek
  2015-10-30 14:56 ` [U-Boot] [PATCH v2 2/3] dm: core: Add missing entries for manual relocation Michal Simek
  2015-10-30 14:56 ` [U-Boot] [PATCH v2 3/3] dm: sf: Add support for all targets which requires MANUAL_RELOC Michal Simek
  0 siblings, 2 replies; 5+ messages in thread
From: Michal Simek @ 2015-10-30 14:56 UTC (permalink / raw)
  To: u-boot

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.

Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Acked-by: Simon Glass <sjg@chromium.org>
---

Changes in v2: None

 drivers/spi/spi-uclass.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/drivers/spi/spi-uclass.c b/drivers/spi/spi-uclass.c
index d666272e39ce..27409fb088ea 100644
--- a/drivers/spi/spi-uclass.c
+++ b/drivers/spi/spi-uclass.c
@@ -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;
 }
 
-- 
2.5.0

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [U-Boot] [PATCH v2 2/3] dm: core: Add missing entries for manual relocation
  2015-10-30 14:56 [U-Boot] [PATCH v2 1/3] dm: spi: Add support for all targets which requires MANUAL_RELOC Michal Simek
@ 2015-10-30 14:56 ` Michal Simek
  2015-10-30 14:56 ` [U-Boot] [PATCH v2 3/3] dm: sf: Add support for all targets which requires MANUAL_RELOC Michal Simek
  1 sibling, 0 replies; 5+ messages in thread
From: Michal Simek @ 2015-10-30 14:56 UTC (permalink / raw)
  To: u-boot

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.

Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Acked-by: Simon Glass <sjg@chromium.org>
---

Changes in v2: None

 drivers/core/root.c | 8 ++++++++
 1 file changed, 8 insertions(+)

diff --git a/drivers/core/root.c b/drivers/core/root.c
index bdb394a9ae21..e7b1f249682e 100644
--- a/drivers/core/root.c
+++ b/drivers/core/root.c
@@ -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)
-- 
2.5.0

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [U-Boot] [PATCH v2 3/3] dm: sf: Add support for all targets which requires MANUAL_RELOC
  2015-10-30 14:56 [U-Boot] [PATCH v2 1/3] dm: spi: Add support for all targets which requires MANUAL_RELOC Michal Simek
  2015-10-30 14:56 ` [U-Boot] [PATCH v2 2/3] dm: core: Add missing entries for manual relocation Michal Simek
@ 2015-10-30 14:56 ` Michal Simek
  2015-11-06  3:15   ` Simon Glass
  1 sibling, 1 reply; 5+ messages in thread
From: Michal Simek @ 2015-10-30 14:56 UTC (permalink / raw)
  To: u-boot

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.

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>
---

Changes in v2:
- Add checking for MANUAL_RELOC code only

 drivers/mtd/spi/sf-uclass.c | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/drivers/mtd/spi/sf-uclass.c b/drivers/mtd/spi/sf-uclass.c
index 350e21aa7d65..72e0f6b3fb1e 100644
--- a/drivers/mtd/spi/sf-uclass.c
+++ b/drivers/mtd/spi/sf-uclass.c
@@ -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),
 };
-- 
2.5.0

^ permalink raw reply related	[flat|nested] 5+ messages in thread

* [U-Boot] [PATCH v2 3/3] dm: sf: Add support for all targets which requires MANUAL_RELOC
  2015-10-30 14:56 ` [U-Boot] [PATCH v2 3/3] dm: sf: Add support for all targets which requires MANUAL_RELOC Michal Simek
@ 2015-11-06  3:15   ` Simon Glass
  2015-11-06  9:01     ` Michal Simek
  0 siblings, 1 reply; 5+ messages in thread
From: Simon Glass @ 2015-11-06  3:15 UTC (permalink / raw)
  To: u-boot

On 30 October 2015 at 08:56, Michal Simek <michal.simek@xilinx.com> wrote:
> 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.
>
> 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>
> ---
>
> Changes in v2:
> - Add checking for MANUAL_RELOC code only
>
>  drivers/mtd/spi/sf-uclass.c | 23 +++++++++++++++++++++++
>  1 file changed, 23 insertions(+)

The ugly continues...

Reviewed-by: Simon Glass <sjg@chromium.org>

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [U-Boot] [PATCH v2 3/3] dm: sf: Add support for all targets which requires MANUAL_RELOC
  2015-11-06  3:15   ` Simon Glass
@ 2015-11-06  9:01     ` Michal Simek
  0 siblings, 0 replies; 5+ messages in thread
From: Michal Simek @ 2015-11-06  9:01 UTC (permalink / raw)
  To: u-boot

On 11/06/2015 04:15 AM, Simon Glass wrote:
> On 30 October 2015 at 08:56, Michal Simek <michal.simek@xilinx.com> wrote:
>> 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.
>>
>> 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>
>> ---
>>
>> Changes in v2:
>> - Add checking for MANUAL_RELOC code only
>>
>>  drivers/mtd/spi/sf-uclass.c | 23 +++++++++++++++++++++++
>>  1 file changed, 23 insertions(+)
> 
> The ugly continues...
> 
> Reviewed-by: Simon Glass <sjg@chromium.org>

:-) When I have time I will look at changing microblaze not to use it.
But on the other hand Microblaze is not only one arch which uses this.
But probably only one arch which is using DM.

Thanks,
Michal

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2015-11-06  9:01 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-10-30 14:56 [U-Boot] [PATCH v2 1/3] dm: spi: Add support for all targets which requires MANUAL_RELOC Michal Simek
2015-10-30 14:56 ` [U-Boot] [PATCH v2 2/3] dm: core: Add missing entries for manual relocation Michal Simek
2015-10-30 14:56 ` [U-Boot] [PATCH v2 3/3] dm: sf: Add support for all targets which requires MANUAL_RELOC Michal Simek
2015-11-06  3:15   ` Simon Glass
2015-11-06  9:01     ` Michal Simek

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox