forked from Mirrors/opensbi
		
	lib: utils/reset: separate driver init func
Move driver init code to separate function, so it can be reused elsewhere. Tested-by: Heinrich Schuchardt <heinrich.schuchardt@canonical.com> Reviewed-by: Alexandre Ghiti <alexandre.ghiti@canonical.com> Tested-by: Alexandre Ghiti <alexandre.ghiti@canonical.com> Signed-off-by: Nikita Shubin <n.shubin@yadro.com>
This commit is contained in:
		
				
					committed by
					
						
						Anup Patel
					
				
			
			
				
	
			
			
			
						parent
						
							94eba23376
						
					
				
				
					commit
					1d462e0397
				
			@@ -17,6 +17,11 @@ struct fdt_reset {
 | 
			
		||||
	int (*init)(void *fdt, int nodeoff, const struct fdt_match *match);
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * fdt_reset_driver_init() - initialize reset driver based on the device-tree
 | 
			
		||||
 */
 | 
			
		||||
int fdt_reset_driver_init(void *fdt, struct fdt_reset *drv);
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * fdt_reset_init() - initialize reset drivers based on the device-tree
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -29,26 +29,31 @@ static struct fdt_reset *reset_drivers[] = {
 | 
			
		||||
	&fdt_reset_thead,
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
void fdt_reset_init(void)
 | 
			
		||||
int fdt_reset_driver_init(void *fdt, struct fdt_reset *drv)
 | 
			
		||||
{
 | 
			
		||||
	int pos, noff, rc;
 | 
			
		||||
	struct fdt_reset *drv;
 | 
			
		||||
	int noff, rc = SBI_ENODEV;
 | 
			
		||||
	const struct fdt_match *match;
 | 
			
		||||
	void *fdt = fdt_get_address();
 | 
			
		||||
 | 
			
		||||
	for (pos = 0; pos < array_size(reset_drivers); pos++) {
 | 
			
		||||
		drv = reset_drivers[pos];
 | 
			
		||||
	noff = fdt_find_match(fdt, -1, drv->match_table, &match);
 | 
			
		||||
	if (noff < 0)
 | 
			
		||||
		return SBI_ENODEV;
 | 
			
		||||
 | 
			
		||||
		noff = fdt_find_match(fdt, -1, drv->match_table, &match);
 | 
			
		||||
		if (noff < 0)
 | 
			
		||||
			continue;
 | 
			
		||||
 | 
			
		||||
		if (drv->init) {
 | 
			
		||||
			rc = drv->init(fdt, noff, match);
 | 
			
		||||
			if (rc && rc != SBI_ENODEV) {
 | 
			
		||||
				sbi_printf("%s: %s init failed, %d\n",
 | 
			
		||||
					   __func__, match->compatible, rc);
 | 
			
		||||
			}
 | 
			
		||||
	if (drv->init) {
 | 
			
		||||
		rc = drv->init(fdt, noff, match);
 | 
			
		||||
		if (rc && rc != SBI_ENODEV) {
 | 
			
		||||
			sbi_printf("%s: %s init failed, %d\n",
 | 
			
		||||
				   __func__, match->compatible, rc);
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return rc;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void fdt_reset_init(void)
 | 
			
		||||
{
 | 
			
		||||
	int pos;
 | 
			
		||||
	void *fdt = fdt_get_address();
 | 
			
		||||
 | 
			
		||||
	for (pos = 0; pos < array_size(reset_drivers); pos++)
 | 
			
		||||
		fdt_reset_driver_init(fdt, reset_drivers[pos]);
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user