ARM: OMAP2+: hwmod: Add possibility to count hwmod resources based on type
Add flags parameter for omap_hwmod_count_resources() so users can tell which type of resources they are interested when counting them in hwmod database. Signed-off-by: Peter Ujfalusi <peter.ujfalusi@ti.com> Acked-by: Benoît Cousson <b-cousson@ti.com> [paul@pwsan.com: updated to apply] Signed-off-by: Paul Walmsley <paul@pwsan.com>
This commit is contained in:
		
							parent
							
								
									e6d3a8b0bd
								
							
						
					
					
						commit
						dad4191d79
					
				| @ -441,19 +441,21 @@ int omap_device_get_context_loss_count(struct platform_device *pdev) | ||||
| /**
 | ||||
|  * omap_device_count_resources - count number of struct resource entries needed | ||||
|  * @od: struct omap_device * | ||||
|  * @flags: Type of resources to include when counting (IRQ/DMA/MEM) | ||||
|  * | ||||
|  * Count the number of struct resource entries needed for this | ||||
|  * omap_device @od.  Used by omap_device_build_ss() to determine how | ||||
|  * much memory to allocate before calling | ||||
|  * omap_device_fill_resources().  Returns the count. | ||||
|  */ | ||||
| static int omap_device_count_resources(struct omap_device *od) | ||||
| static int omap_device_count_resources(struct omap_device *od, | ||||
| 				       unsigned long flags) | ||||
| { | ||||
| 	int c = 0; | ||||
| 	int i; | ||||
| 
 | ||||
| 	for (i = 0; i < od->hwmods_cnt; i++) | ||||
| 		c += omap_hwmod_count_resources(od->hwmods[i]); | ||||
| 		c += omap_hwmod_count_resources(od->hwmods[i], flags); | ||||
| 
 | ||||
| 	pr_debug("omap_device: %s: counted %d total resources across %d hwmods\n", | ||||
| 		 od->pdev->name, c, od->hwmods_cnt); | ||||
| @ -557,7 +559,10 @@ struct omap_device *omap_device_alloc(struct platform_device *pdev, | ||||
| 	od->hwmods = hwmods; | ||||
| 	od->pdev = pdev; | ||||
| 
 | ||||
| 	res_count = omap_device_count_resources(od); | ||||
| 	/* Count all resources for the device */ | ||||
| 	res_count = omap_device_count_resources(od, IORESOURCE_IRQ | | ||||
| 						    IORESOURCE_DMA | | ||||
| 						    IORESOURCE_MEM); | ||||
| 	/*
 | ||||
| 	 * DT Boot: | ||||
| 	 *   OF framework will construct the resource structure (currently | ||||
|  | ||||
| @ -3427,7 +3427,7 @@ int omap_hwmod_reset(struct omap_hwmod *oh) | ||||
| /**
 | ||||
|  * omap_hwmod_count_resources - count number of struct resources needed by hwmod | ||||
|  * @oh: struct omap_hwmod * | ||||
|  * @res: pointer to the first element of an array of struct resource to fill | ||||
|  * @flags: Type of resources to include when counting (IRQ/DMA/MEM) | ||||
|  * | ||||
|  * Count the number of struct resource array elements necessary to | ||||
|  * contain omap_hwmod @oh resources.  Intended to be called by code | ||||
| @ -3440,20 +3440,25 @@ int omap_hwmod_reset(struct omap_hwmod *oh) | ||||
|  * resource IDs. | ||||
|  * | ||||
|  */ | ||||
| int omap_hwmod_count_resources(struct omap_hwmod *oh) | ||||
| int omap_hwmod_count_resources(struct omap_hwmod *oh, unsigned long flags) | ||||
| { | ||||
| 	struct omap_hwmod_ocp_if *os; | ||||
| 	struct list_head *p; | ||||
| 	int ret; | ||||
| 	int i = 0; | ||||
| 	int ret = 0; | ||||
| 
 | ||||
| 	ret = _count_mpu_irqs(oh) + _count_sdma_reqs(oh); | ||||
| 	if (flags & IORESOURCE_IRQ) | ||||
| 		ret += _count_mpu_irqs(oh); | ||||
| 
 | ||||
| 	p = oh->slave_ports.next; | ||||
| 	if (flags & IORESOURCE_DMA) | ||||
| 		ret += _count_sdma_reqs(oh); | ||||
| 
 | ||||
| 	while (i < oh->slaves_cnt) { | ||||
| 		os = _fetch_next_ocp_if(&p, &i); | ||||
| 		ret += _count_ocp_if_addr_spaces(os); | ||||
| 	if (flags & IORESOURCE_MEM) { | ||||
| 		int i = 0; | ||||
| 		struct omap_hwmod_ocp_if *os; | ||||
| 		struct list_head *p = oh->slave_ports.next; | ||||
| 
 | ||||
| 		while (i < oh->slaves_cnt) { | ||||
| 			os = _fetch_next_ocp_if(&p, &i); | ||||
| 			ret += _count_ocp_if_addr_spaces(os); | ||||
| 		} | ||||
| 	} | ||||
| 
 | ||||
| 	return ret; | ||||
|  | ||||
| @ -631,7 +631,7 @@ void omap_hwmod_write(u32 v, struct omap_hwmod *oh, u16 reg_offs); | ||||
| u32 omap_hwmod_read(struct omap_hwmod *oh, u16 reg_offs); | ||||
| int omap_hwmod_softreset(struct omap_hwmod *oh); | ||||
| 
 | ||||
| int omap_hwmod_count_resources(struct omap_hwmod *oh); | ||||
| int omap_hwmod_count_resources(struct omap_hwmod *oh, unsigned long flags); | ||||
| int omap_hwmod_fill_resources(struct omap_hwmod *oh, struct resource *res); | ||||
| int omap_hwmod_fill_dma_resources(struct omap_hwmod *oh, struct resource *res); | ||||
| int omap_hwmod_get_resource_byname(struct omap_hwmod *oh, unsigned int type, | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user