static void __init ixdp425_map_io(void) { ixp4xx_map_io(); #ifdef CONFIG_KGDB_8250 kgdb8250_add_platform_port(0, &ixdp425_uart_data[0]); kgdb8250_add_platform_port(1, &ixdp425_uart_data[1]); #endif }
/*! * Board specific fixup function. It is called by \b setup_arch() in * setup.c file very early on during kernel starts. It allows the user to * statically fill in the proper values for the passed-in parameters. None of * the parameters is used currently. * * @param desc pointer to \b struct \b machine_desc * @param tags pointer to \b struct \b tag * @param cmdline pointer to the command line * @param mi pointer to \b struct \b meminfo */ static void __init fixup_mxc_board(struct machine_desc *desc, struct tag *tags, char **cmdline, struct meminfo *mi) { struct tag *t; #ifdef CONFIG_KGDB_8250 int i; for (i = 0; i < (sizeof(serial_platform_data) / sizeof(serial_platform_data[0])); i += 1) kgdb8250_add_platform_port(i, &serial_platform_data[i]); #endif mxc_cpu_init(); for_each_tag(t, tags) { if (t->hdr.tag == ATAG_MEM) { t->u.mem.size = MEM_SIZE; break; } } if (t->hdr.size == 0) { printk("%s: no mem tag found\n", __FUNCTION__); } #ifdef CONFIG_DISCONTIGMEM do { int nid; mi->nr_banks = MXC_NUMNODES; for (nid = 0; nid < mi->nr_banks; nid++) { SET_NODE(mi, nid); } } while (0); #endif }
/* * This is called as an arch initcall, hopefully before the PCI bus is * probed and/or the 8250 driver loaded since we need to register our * platform devices before 8250 PCI ones are detected as some of them * must properly "override" the platform ones. * * This function fixes up the interrupt value for platform ports as it * couldn't be done earlier before interrupt maps have been parsed. It * also "corrects" the IO address for PIO ports for the same reason, * since earlier, the PHBs virtual IO space wasn't assigned yet. It then * registers all those platform ports for use by the 8250 driver when it * finally loads. */ static int __init serial_dev_init(void) { int i; if (legacy_serial_count == 0) return -ENODEV; /* * Before we register the platfrom serial devices, we need * to fixup their interrutps and their IO ports. */ DBG("Fixing serial ports interrupts and IO ports ...\n"); for (i = 0; i < legacy_serial_count; i++) { struct plat_serial8250_port *port = &legacy_serial_ports[i]; struct device_node *np = legacy_serial_infos[i].np; if (port->irq == NO_IRQ) fixup_port_irq(i, np, port); if (port->iotype == UPIO_PORT) fixup_port_pio(i, np, port); if ((port->iotype == UPIO_MEM) || (port->iotype == UPIO_TSI)) fixup_port_mmio(i, np, port); #ifdef CONFIG_KGDB_8250 kgdb8250_add_platform_port(i, port); #endif } DBG("Registering platform serial ports\n"); return platform_device_register(&serial_device); }
void __init ixp2000_uart_init(void) { platform_device_register(&ixp2000_serial_device); #ifdef CONFIG_KGDB_8250 kgdb8250_add_platform_port(0, &ixp2000_serial_port); #endif }
/*! * Board specific fixup function. It is called by \b setup_arch() in * setup.c file very early on during kernel starts. It allows the user to * statically fill in the proper values for the passed-in parameters. None of * the parameters is used currently. * * @param desc pointer to \b struct \b machine_desc * @param tags pointer to \b struct \b tag * @param cmdline pointer to the command line * @param mi pointer to \b struct \b meminfo */ static void __init fixup_mxc_board(struct machine_desc *desc, struct tag *tags, char **cmdline, struct meminfo *mi) { #ifdef CONFIG_KGDB_8250 int i; for (i = 0; i < (sizeof(serial_platform_data) / sizeof(serial_platform_data[0])); i += 1) kgdb8250_add_platform_port(i, &serial_platform_data[i]); #endif mxc_cpu_init(); /* Store command line for use on mxc_board_init */ strcpy(command_line, *cmdline); #ifdef CONFIG_DISCONTIGMEM do { int nid; mi->nr_banks = MXC_NUMNODES; for (nid = 0; nid < mi->nr_banks; nid++) { SET_NODE(mi, nid); } } while (0); #endif }
static void __init davinci_evm_map_io(void) { davinci_map_common_io(); #ifdef CONFIG_KGDB_8250 kgdb8250_add_platform_port(CONFIG_KGDB_PORT_NUM, &serial_platform_data[CONFIG_KGDB_PORT_NUM]); #endif }
static void __init pnx4008_init(void) { /*disable all START interrupt sources, and clear all START interrupt flags */ __raw_writel(0, START_INT_ER_REG(SE_PIN_BASE_INT)); __raw_writel(0, START_INT_ER_REG(SE_INT_BASE_INT)); __raw_writel(0xffffffff, START_INT_RSR_REG(SE_PIN_BASE_INT)); __raw_writel(0xffffffff, START_INT_RSR_REG(SE_INT_BASE_INT)); platform_add_devices(devices, ARRAY_SIZE(devices)); spi_register_board_info(spi_board_info, ARRAY_SIZE(spi_board_info)); /* Switch on the UART clocks */ pnx4008_uart_init(); #ifdef CONFIG_KGDB_8250 kgdb8250_add_platform_port(0, &platform_serial_ports[0]); kgdb8250_add_platform_port(1, &platform_serial_ports[1]); #endif }
static void __init davinci_map_io(void) { davinci_map_common_io(); #ifdef CONFIG_KGDB_8250 early_serial_setup((struct uart_port *)&serial_platform_data[kgdb8250_ttyS]); kgdb8250_add_platform_port(kgdb8250_ttyS, &serial_platform_data[kgdb8250_ttyS]); #endif /* Board-specific initialization */ board_init (); }
/* * Note that on Innovator-1510 UART2 pins conflict with USB2. * By default UART2 does not work on Innovator-1510 if you have * USB OHCI enabled. To use UART2, you must disable USB2 first. */ void __init omap_serial_init(void) { int i; const struct omap_uart_config *info; if (cpu_is_omap730()) { serial_platform_data[0].regshift = 0; serial_platform_data[1].regshift = 0; serial_platform_data[0].irq = INT_730_UART_MODEM_1; serial_platform_data[1].irq = INT_730_UART_MODEM_IRDA_2; } if (cpu_is_omap15xx()) { serial_platform_data[0].uartclk = OMAP1510_BASE_BAUD * 16; serial_platform_data[1].uartclk = OMAP1510_BASE_BAUD * 16; serial_platform_data[2].uartclk = OMAP1510_BASE_BAUD * 16; } info = omap_get_config(OMAP_TAG_UART, struct omap_uart_config); if (info == NULL) return; for (i = 0; i < OMAP_MAX_NR_PORTS; i++) { unsigned char reg; if (!((1 << i) & info->enabled_uarts)) { serial_platform_data[i].membase = NULL; serial_platform_data[i].mapbase = 0; continue; } switch (i) { case 0: uart1_ck = clk_get(NULL, "uart1_ck"); if (IS_ERR(uart1_ck)) printk("Could not get uart1_ck\n"); else { clk_enable(uart1_ck); if (cpu_is_omap15xx()) clk_set_rate(uart1_ck, 12000000); } if (cpu_is_omap15xx()) { omap_cfg_reg(UART1_TX); omap_cfg_reg(UART1_RTS); if (machine_is_omap_innovator()) { reg = fpga_read(OMAP1510_FPGA_POWER); reg |= OMAP1510_FPGA_PCR_COM1_EN; fpga_write(reg, OMAP1510_FPGA_POWER); udelay(10); } } break; case 1: uart2_ck = clk_get(NULL, "uart2_ck"); if (IS_ERR(uart2_ck)) printk("Could not get uart2_ck\n"); else { clk_enable(uart2_ck); if (cpu_is_omap15xx()) clk_set_rate(uart2_ck, 12000000); else clk_set_rate(uart2_ck, 48000000); } if (cpu_is_omap15xx()) { omap_cfg_reg(UART2_TX); omap_cfg_reg(UART2_RTS); if (machine_is_omap_innovator()) { reg = fpga_read(OMAP1510_FPGA_POWER); reg |= OMAP1510_FPGA_PCR_COM2_EN; fpga_write(reg, OMAP1510_FPGA_POWER); udelay(10); } } break; case 2: uart3_ck = clk_get(NULL, "uart3_ck"); if (IS_ERR(uart3_ck)) printk("Could not get uart3_ck\n"); else { clk_enable(uart3_ck); if (cpu_is_omap15xx()) clk_set_rate(uart3_ck, 12000000); } if (cpu_is_omap15xx()) { omap_cfg_reg(UART3_TX); omap_cfg_reg(UART3_RX); } break; } omap_serial_reset(&serial_platform_data[i]); #ifdef CONFIG_KGDB_8250 kgdb8250_add_platform_port(i, &serial_platform_data[i]); #endif } }