Skip to contentSkip to conversation

ARM: OMAP: omap_device: Expose omap_device_{alloc, delete, register}

PATCH New Ohad Ben-Cohen 2 participants 4 messages Oct 17, 2011 – Nov 10, 2011

Subsystems (2)
lore
Share & tools
lore
#0 lore raw

PATCH 1/1 ARM: OMAP: omap_device: Expose omap_device_{alloc, delete, register}

Expose omap_device_{alloc, delete, register} so we can use them outside of omap_device.c.

This approach allows users, which need to manipulate an archdata member of a device before it is registered, to do so. This is also useful for users who have their devices created very early so they can be used at ->reserve() time to reserve CMA memory.

The immediate use case for this is to set the private iommu archdata member, which binds a device to its associated iommu controller. This way, generic code will be able to attach omap devices to their iommus, without calling any omap-specific API.

With this in hand, we can further clean the existing mainline OMAP iommu driver and its mainline users, and focus on generic IOMMU approaches for future users (rpmsg/remoteproc and the upcoming generic DMA API).

This patch is still considered an interim solution until DT fully materializes for omap; at that point, this functionality will be removed as DT will take care of creating the devices and configuring them correctly.

Tested on OMAP4 with a generic rpmsg/remoteproc that doesn't use any omap-specific IOMMU API anymore.

---
 arch/arm/plat-omap/include/plat/omap_device.h |    7 +++++++
 arch/arm/plat-omap/omap_device.c              |   13 +++----------
 2 files changed, 10 insertions(+), 10 deletions(-)
arch/arm/plat-omap/include/plat/omap_device.h +7 -0
index 12c5b0c..28d7a38 100644
@@ -100,6 +100,13 @@ struct platform_device *omap_device_build_ss(const char *pdev_name, int pdev_id,
 					 struct omap_device_pm_latency *pm_lats,
 					 int pm_lats_cnt, int is_early_device);
 
+struct omap_device *omap_device_alloc(struct platform_device *pdev,
+				      struct omap_hwmod **ohs, int oh_cnt,
+				      struct omap_device_pm_latency *pm_lats,
+				      int pm_lats_cnt);
+void omap_device_delete(struct omap_device *od);
+int omap_device_register(struct platform_device *pdev);
+
 void __iomem *omap_device_get_rt_va(struct omap_device *od);
 struct device *omap_device_get_by_hwmod_name(const char *oh_name);
 
arch/arm/plat-omap/omap_device.c +3 -10
index cd90bed..913179c 100644
@@ -96,14 +96,7 @@
 #define USE_WAKEUP_LAT			0
 #define IGNORE_WAKEUP_LAT		1
 
-static int omap_device_register(struct platform_device *pdev);
 static int omap_early_device_register(struct platform_device *pdev);
-static struct omap_device *omap_device_alloc(struct platform_device *pdev,
-				      struct omap_hwmod **ohs, int oh_cnt,
-				      struct omap_device_pm_latency *pm_lats,
-				      int pm_lats_cnt);
-static void omap_device_delete(struct omap_device *od);
-
 
 static struct omap_device_pm_latency omap_default_latency[] = {
 	{
@@ -508,7 +501,7 @@ static int omap_device_fill_resources(struct omap_device *od,
  *
  * Returns an struct omap_device pointer or ERR_PTR() on error;
  */
-static struct omap_device *omap_device_alloc(struct platform_device *pdev,
+struct omap_device *omap_device_alloc(struct platform_device *pdev,
 					struct omap_hwmod **ohs, int oh_cnt,
 					struct omap_device_pm_latency *pm_lats,
 					int pm_lats_cnt)
@@ -590,7 +583,7 @@ oda_exit1:
 	return ERR_PTR(ret);
 }
 
-static void omap_device_delete(struct omap_device *od)
+void omap_device_delete(struct omap_device *od)
 {
 	if (!od)
 		return;
@@ -816,7 +809,7 @@ static struct dev_pm_domain omap_device_pm_domain = {
  * platform_device_register() on the underlying platform_device.
  * Returns the return value of platform_device_register().
  */
-static int omap_device_register(struct platform_device *pdev)
+int omap_device_register(struct platform_device *pdev)
 {
 	pr_debug("omap_device: %s: registering\n", pdev->name);
 
Signature · 1 line
1.7.4.1
#1 lore raw

PATCH 1/1 ARM: OMAP: omap_device: Expose omap_device_{alloc, delete, register}

Hi Kevin,

Quoted 2 lines · Ohad Ben-Cohen

Expose omap_device_{alloc, delete, register} so we can use them outside of omap_device.c.

Can you please take this one ?

Please tell me if you want a refreshed version against 3.2-rc1.

Thanks!
Ohad.

Quoted 96 lines

This approach allows users, which need to manipulate an archdata member of a device before it is registered, to do so. This is also useful for users who have their devices created very early so they can be used at ->reserve() time to reserve CMA memory.

The immediate use case for this is to set the private iommu archdata member, which binds a device to its associated iommu controller. This way, generic code will be able to attach omap devices to their iommus, without calling any omap-specific API.

With this in hand, we can further clean the existing mainline OMAP iommu driver and its mainline users, and focus on generic IOMMU approaches for future users (rpmsg/remoteproc and the upcoming generic DMA API).

This patch is still considered an interim solution until DT fully materializes for omap; at that point, this functionality will be removed as DT will take care of creating the devices and configuring them correctly.

Tested on OMAP4 with a generic rpmsg/remoteproc that doesn't use any omap-specific IOMMU API anymore.

---
?arch/arm/plat-omap/include/plat/omap_device.h | ? ?7 +++++++ ?arch/arm/plat-omap/omap_device.c ? ? ? ? ? ? ?| ? 13 +++---------- ?2 files changed, 10 insertions(+), 10 deletions(-)

arch/arm/plat-omap/include/plat/omap_device.h +7 -0
index 12c5b0c..28d7a38 100644
@@ -100,6 +100,13 @@ struct platform_device *omap_device_build_ss(const char *pdev_name, int pdev_id,
 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? struct omap_device_pm_latency *pm_lats,
 ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? int pm_lats_cnt, int is_early_device);
 
+struct omap_device *omap_device_alloc(struct platform_device *pdev,
+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? struct omap_hwmod **ohs, int oh_cnt,
+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? struct omap_device_pm_latency *pm_lats,
+ ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? int pm_lats_cnt);
+void omap_device_delete(struct omap_device *od);
+int omap_device_register(struct platform_device *pdev);
+
 ?void __iomem *omap_device_get_rt_va(struct omap_device *od);
 ?struct device *omap_device_get_by_hwmod_name(const char *oh_name);
 
arch/arm/plat-omap/omap_device.c +0 -0
index cd90bed..913179c 100644
@@ -96,14 +96,7 @@

?#define USE_WAKEUP_LAT ? ? ? ? ? ? ? ? 0
?#define IGNORE_WAKEUP_LAT ? ? ? ? ? ? ?1

-static int omap_device_register(struct platform_device *pdev); ?static int omap_early_device_register(struct platform_device *pdev);

arch/arm/plat-omap/omap_device.c +0 -6
-static struct omap_device *omap_device_alloc(struct platform_device *pdev,
- ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? struct omap_hwmod **ohs, int oh_cnt,
- ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? struct omap_device_pm_latency *pm_lats,
- ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? int pm_lats_cnt);
-static void omap_device_delete(struct omap_device *od);
-

?static struct omap_device_pm_latency omap_default_latency[] = { ? ? ? ?{

arch/arm/plat-omap/omap_device.c +0 -0
@@ -508,7 +501,7 @@ static int omap_device_fill_resources(struct omap_device *od,

?*
?* Returns an struct omap_device pointer or ERR_PTR() on error; ?*/

arch/arm/plat-omap/omap_device.c +1 -1
-static struct omap_device *omap_device_alloc(struct platform_device *pdev,
+struct omap_device *omap_device_alloc(struct platform_device *pdev,

? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?struct omap_hwmod **ohs, int oh_cnt, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?struct omap_device_pm_latency *pm_lats, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?int pm_lats_cnt)

arch/arm/plat-omap/omap_device.c +1 -1
@@ -590,7 +583,7 @@ oda_exit1:
 ? ? ? ?return ERR_PTR(ret);
 ?}
 
-static void omap_device_delete(struct omap_device *od)
+void omap_device_delete(struct omap_device *od)
 ?{
 ? ? ? ?if (!od)
 ? ? ? ? ? ? ? ?return;
@@ -816,7 +809,7 @@ static struct dev_pm_domain omap_device_pm_domain = {

?* platform_device_register() on the underlying platform_device. ?* Returns the return value of platform_device_register(). ?*/

arch/arm/plat-omap/omap_device.c +1 -1
-static int omap_device_register(struct platform_device *pdev)
+int omap_device_register(struct platform_device *pdev)

?{
? ? ? ?pr_debug("omap_device: %s: registering\n", pdev->name);

--
1.7.4.1

#2 lore raw

PATCH 1/1 ARM: OMAP: omap_device: Expose omap_device_{alloc, delete, register}

Quoted 7 lines · Ohad Ben-Cohen

Hi Kevin,

Quoted 2 lines · Ohad Ben-Cohen

Expose omap_device_{alloc, delete, register} so we can use them outside of omap_device.c.

Can you please take this one ?

Yes, will queue for v3.3.

Quoted 1 line

Please tell me if you want a refreshed version against 3.2-rc1.

Current version is fine.

Kevin

#3 lore raw

PATCH 1/1 ARM: OMAP: omap_device: Expose omap_device_{alloc, delete, register}

Quoted 1 line · Kevin Hilman

Yes, will queue for v3.3.

Thanks!