18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Freescale SOC support functions 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Author: Scott Wood <scottwood@freescale.com> 68c2ecf20Sopenharmony_ci * 78c2ecf20Sopenharmony_ci * Copyright (c) 2007 Freescale Semiconductor, Inc. 88c2ecf20Sopenharmony_ci */ 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci#include "ops.h" 118c2ecf20Sopenharmony_ci#include "types.h" 128c2ecf20Sopenharmony_ci#include "fsl-soc.h" 138c2ecf20Sopenharmony_ci#include "stdio.h" 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_cistatic u32 prop_buf[MAX_PROP_LEN / 4]; 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_ciu32 *fsl_get_immr(void) 188c2ecf20Sopenharmony_ci{ 198c2ecf20Sopenharmony_ci void *soc; 208c2ecf20Sopenharmony_ci unsigned long ret = 0; 218c2ecf20Sopenharmony_ci 228c2ecf20Sopenharmony_ci soc = find_node_by_devtype(NULL, "soc"); 238c2ecf20Sopenharmony_ci if (soc) { 248c2ecf20Sopenharmony_ci int size; 258c2ecf20Sopenharmony_ci u32 naddr; 268c2ecf20Sopenharmony_ci 278c2ecf20Sopenharmony_ci size = getprop(soc, "#address-cells", prop_buf, MAX_PROP_LEN); 288c2ecf20Sopenharmony_ci if (size == 4) 298c2ecf20Sopenharmony_ci naddr = prop_buf[0]; 308c2ecf20Sopenharmony_ci else 318c2ecf20Sopenharmony_ci naddr = 2; 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_ci if (naddr != 1 && naddr != 2) 348c2ecf20Sopenharmony_ci goto err; 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_ci size = getprop(soc, "ranges", prop_buf, MAX_PROP_LEN); 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_ci if (size < 12) 398c2ecf20Sopenharmony_ci goto err; 408c2ecf20Sopenharmony_ci if (prop_buf[0] != 0) 418c2ecf20Sopenharmony_ci goto err; 428c2ecf20Sopenharmony_ci if (naddr == 2 && prop_buf[1] != 0) 438c2ecf20Sopenharmony_ci goto err; 448c2ecf20Sopenharmony_ci 458c2ecf20Sopenharmony_ci if (!dt_xlate_addr(soc, prop_buf + naddr, 8, &ret)) 468c2ecf20Sopenharmony_ci ret = 0; 478c2ecf20Sopenharmony_ci } 488c2ecf20Sopenharmony_ci 498c2ecf20Sopenharmony_cierr: 508c2ecf20Sopenharmony_ci if (!ret) 518c2ecf20Sopenharmony_ci printf("fsl_get_immr: Failed to find immr base\r\n"); 528c2ecf20Sopenharmony_ci 538c2ecf20Sopenharmony_ci return (u32 *)ret; 548c2ecf20Sopenharmony_ci} 55