58 lines
		
	
	
	
		
			1.1 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			58 lines
		
	
	
	
		
			1.1 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/*
							 | 
						||
| 
								 | 
							
								 * Freescale SOC support functions
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Author: Scott Wood <scottwood@freescale.com>
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * Copyright (c) 2007 Freescale Semiconductor, Inc.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 * This program is free software; you can redistribute it and/or modify it
							 | 
						||
| 
								 | 
							
								 * under the terms of the GNU General Public License version 2 as published
							 | 
						||
| 
								 | 
							
								 * by the Free Software Foundation.
							 | 
						||
| 
								 | 
							
								 */
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#include "ops.h"
							 | 
						||
| 
								 | 
							
								#include "types.h"
							 | 
						||
| 
								 | 
							
								#include "fsl-soc.h"
							 | 
						||
| 
								 | 
							
								#include "stdio.h"
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								static u32 prop_buf[MAX_PROP_LEN / 4];
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								u32 *fsl_get_immr(void)
							 | 
						||
| 
								 | 
							
								{
							 | 
						||
| 
								 | 
							
									void *soc;
							 | 
						||
| 
								 | 
							
									unsigned long ret = 0;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									soc = find_node_by_devtype(NULL, "soc");
							 | 
						||
| 
								 | 
							
									if (soc) {
							 | 
						||
| 
								 | 
							
										int size;
							 | 
						||
| 
								 | 
							
										u32 naddr;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										size = getprop(soc, "#address-cells", prop_buf, MAX_PROP_LEN);
							 | 
						||
| 
								 | 
							
										if (size == 4)
							 | 
						||
| 
								 | 
							
											naddr = prop_buf[0];
							 | 
						||
| 
								 | 
							
										else
							 | 
						||
| 
								 | 
							
											naddr = 2;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										if (naddr != 1 && naddr != 2)
							 | 
						||
| 
								 | 
							
											goto err;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										size = getprop(soc, "ranges", prop_buf, MAX_PROP_LEN);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										if (size < 12)
							 | 
						||
| 
								 | 
							
											goto err;
							 | 
						||
| 
								 | 
							
										if (prop_buf[0] != 0)
							 | 
						||
| 
								 | 
							
											goto err;
							 | 
						||
| 
								 | 
							
										if (naddr == 2 && prop_buf[1] != 0)
							 | 
						||
| 
								 | 
							
											goto err;
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
										if (!dt_xlate_addr(soc, prop_buf + naddr, 8, &ret))
							 | 
						||
| 
								 | 
							
											ret = 0;
							 | 
						||
| 
								 | 
							
									}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								err:
							 | 
						||
| 
								 | 
							
									if (!ret)
							 | 
						||
| 
								 | 
							
										printf("fsl_get_immr: Failed to find immr base\r\n");
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
									return (u32 *)ret;
							 | 
						||
| 
								 | 
							
								}
							 |