/* Special print used by PPCDBG() macro */ void udbg_ppcdbg(unsigned long debug_flags, const char *fmt, ...) { unsigned long active_debugs = debug_flags & naca->debug_switch; if (active_debugs) { va_list ap; unsigned char buf[UDBG_BUFSIZE]; unsigned long i, len = 0; for (i=0; i < PPCDBG_NUM_FLAGS; i++) { if (((1U << i) & active_debugs) && trace_names[i]) { len += strlen(trace_names[i]); udbg_puts(trace_names[i]); break; } } snprintf(buf, UDBG_BUFSIZE, " [%s]: ", current->comm); len += strlen(buf); udbg_puts(buf); while (len < 18) { udbg_puts(" "); len++; } va_start(ap, fmt); vsnprintf(buf, UDBG_BUFSIZE, fmt, ap); udbg_puts(buf); va_end(ap); } }
static void __init pmac_progress(char *s, unsigned short hex) { if (sccdbg) { udbg_puts(s); udbg_puts("\n"); } #ifdef CONFIG_BOOTX_TEXT else if (boot_text_mapped) { btext_drawstring(s); btext_drawstring("\n"); } #endif /* CONFIG_BOOTX_TEXT */ }
void udbg_printf(const char *fmt, ...) { char buf[UDBG_BUFSIZE]; va_list args; va_start(args, fmt); vsnprintf(buf, UDBG_BUFSIZE, fmt, args); udbg_puts(buf); va_end(args); }
void udbg_init_scc(struct device_node *np) { u32 *reg; unsigned long addr; int i, x; if (np == NULL) np = of_find_node_by_name(NULL, "escc"); if (np == NULL || np->parent == NULL) return; udbg_printf("found SCC...\n"); /* Get address within mac-io ASIC */ reg = (u32 *)get_property(np, "reg", NULL); if (reg == NULL) return; addr = reg[0]; udbg_printf("local addr: %lx\n", addr); /* Get address of mac-io PCI itself */ reg = (u32 *)get_property(np->parent, "assigned-addresses", NULL); if (reg == NULL) return; addr += reg[2]; udbg_printf("final addr: %lx\n", addr); /* Setup for 57600 8N1 */ addr += 0x20; sccc = (volatile u8 *) ioremap(addr & PAGE_MASK, PAGE_SIZE) ; sccc += addr & ~PAGE_MASK; sccd = sccc + 0x10; udbg_printf("ioremap result sccc: %p\n", sccc); mb(); for (i = 20000; i != 0; --i) x = *sccc; eieio(); *sccc = 9; eieio(); /* reset A or B side */ *sccc = 0xc0; eieio(); for (i = 0; i < sizeof(scc_inittab); ++i) { *sccc = scc_inittab[i]; eieio(); } ppc_md.udbg_putc = udbg_putc; ppc_md.udbg_getc = udbg_getc; ppc_md.udbg_getc_poll = udbg_getc_poll; udbg_puts("Hello World !\n"); }
void __init udbg_progress(char *s, unsigned short hex) { udbg_puts(s); udbg_puts("\n"); }
void udbg_scc_init(int force_scc) { const u32 *reg; unsigned long addr; struct device_node *stdout = NULL, *escc = NULL, *macio = NULL; struct device_node *ch, *ch_def = NULL, *ch_a = NULL; const char *path; int i, x; escc = of_find_node_by_name(NULL, "escc"); if (escc == NULL) goto bail; macio = of_get_parent(escc); if (macio == NULL) goto bail; path = of_get_property(of_chosen, "linux,stdout-path", NULL); if (path != NULL) stdout = of_find_node_by_path(path); for (ch = NULL; (ch = of_get_next_child(escc, ch)) != NULL;) { if (ch == stdout) ch_def = of_node_get(ch); if (strcmp(ch->name, "ch-a") == 0) ch_a = of_node_get(ch); } if (ch_def == NULL && !force_scc) goto bail; ch = ch_def ? ch_def : ch_a; /* Get address within mac-io ASIC */ reg = of_get_property(escc, "reg", NULL); if (reg == NULL) goto bail; addr = reg[0]; /* Get address of mac-io PCI itself */ reg = of_get_property(macio, "assigned-addresses", NULL); if (reg == NULL) goto bail; addr += reg[2]; /* Lock the serial port */ pmac_call_feature(PMAC_FTR_SCC_ENABLE, ch, PMAC_SCC_ASYNC | PMAC_SCC_FLAG_XMON, 1); if (ch == ch_a) addr += 0x20; sccc = ioremap(addr & PAGE_MASK, PAGE_SIZE) ; sccc += addr & ~PAGE_MASK; sccd = sccc + 0x10; mb(); for (i = 20000; i != 0; --i) x = in_8(sccc); out_8(sccc, 0x09); /* reset A or B side */ out_8(sccc, 0xc0); /* If SCC was the OF output port, read the BRG value, else * Setup for 38400 or 57600 8N1 depending on the machine */ if (ch_def != NULL) { out_8(sccc, 13); scc_inittab[1] = in_8(sccc); out_8(sccc, 12); scc_inittab[3] = in_8(sccc); } else if (machine_is_compatible("RackMac1,1") || machine_is_compatible("RackMac1,2") || machine_is_compatible("MacRISC4")) { /* Xserves and G5s default to 57600 */ scc_inittab[1] = 0; scc_inittab[3] = 0; } else { /* Others default to 38400 */ scc_inittab[1] = 0; scc_inittab[3] = 1; } for (i = 0; i < sizeof(scc_inittab); ++i) out_8(sccc, scc_inittab[i]); udbg_putc = udbg_scc_putc; udbg_getc = udbg_scc_getc; udbg_getc_poll = udbg_scc_getc_poll; udbg_puts("Hello World !\n"); bail: of_node_put(macio); of_node_put(escc); of_node_put(stdout); of_node_put(ch_def); of_node_put(ch_a); }