/* MS this is Microblaze specifig function */ static int __init early_init_dt_scan_serial_full(unsigned long node, const char *uname, int depth, void *data) { unsigned long l; char *p; unsigned int addr; pr_debug("search \"chosen\", depth: %d, uname: %s\n", depth, uname); /* find all serial nodes */ if (strncmp(uname, "serial", 6) != 0) return 0; early_init_dt_check_for_initrd(node); /* find compatible node with uartlite */ p = of_get_flat_dt_prop(node, "compatible", &l); if ((strncmp(p, "xlnx,xps-uart16550", 18) != 0) && (strncmp(p, "xlnx,axi-uart16550", 18) != 0)) return 0; addr = *(u32 *)of_get_flat_dt_prop(node, "reg", &l); addr += *(u32 *)of_get_flat_dt_prop(node, "reg-offset", &l); return be32_to_cpu(addr); /* return address */ }
int __init early_init_dt_scan_chosen(unsigned long node, const char *uname, int depth, void *data) { int l; const char *p = NULL; char *cmdline = data; pr_debug("search \"chosen\", depth: %d, uname: %s\n", depth, uname); if (depth != 1 || !cmdline || (strcmp(uname, "chosen") != 0 && strcmp(uname, "chosen@0") != 0)) return 0; early_init_dt_check_for_initrd(node); /* Put CONFIG_CMDLINE in if forced or if data had nothing in it to start */ if (overwrite_incoming_cmdline || !cmdline[0]) strlcpy(cmdline, config_cmdline, COMMAND_LINE_SIZE); /* Retrieve command line unless forcing */ if (read_dt_cmdline) p = of_get_flat_dt_prop(node, "bootargs", &l); if (p != NULL && l > 0) { if (concat_cmdline) { int cmdline_len; int copy_len; strlcat(cmdline, " ", COMMAND_LINE_SIZE); cmdline_len = strlen(cmdline); copy_len = COMMAND_LINE_SIZE - cmdline_len - 1; copy_len = min((int)l, copy_len); strncpy(cmdline + cmdline_len, p, copy_len); cmdline[cmdline_len + copy_len] = '\0'; } else { strlcpy(cmdline, p, min((int)l, COMMAND_LINE_SIZE)); } } pr_debug("Command line is: %s\n", (char*)data); /* break now */ return 1; }
/* MS this is Microblaze specifig function */ static int __init early_init_dt_scan_serial(unsigned long node, const char *uname, int depth, void *data) { unsigned long l; char *p; int *addr; pr_debug("search \"chosen\", depth: %d, uname: %s\n", depth, uname); /* find all serial nodes */ if (strncmp(uname, "serial", 6) != 0) return 0; early_init_dt_check_for_initrd(node); /* find compatible node with uartlite */ p = of_get_flat_dt_prop(node, "compatible", &l); if ((strncmp(p, "xlnx,xps-uartlite", 17) != 0) && (strncmp(p, "xlnx,opb-uartlite", 17) != 0)) return 0; addr = of_get_flat_dt_prop(node, "reg", &l); return *addr; /* return address */ }