ARM: OMAP: omap_device: Expose omap_device_{alloc, delete, register}
Subsystems (2)
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
@@ -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
@@ -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
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.
Signed-off-by Ohad Ben-Cohen <[email protected]>---
?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@@ -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@@ -96,14 +96,7 @@?#define
USE_WAKEUP_LAT? ? ? ? ? ? ? ? 0
?#defineIGNORE_WAKEUP_LAT? ? ? ? ? ? ?1-static int
omap_device_register(struct platform_device *pdev); ?static intomap_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_latencyomap_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 structomap_devicepointer orERR_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, intoh_cnt, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?structomap_device_pm_latency*pm_lats, ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?intpm_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 underlyingplatform_device. ?* Returns the return value ofplatform_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
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
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!