|
@@ -154,6 +154,12 @@ const qe_iop_conf_t qe_iop_conf_tab[] = {
|
|
{5, 10, 2, 0, 3}, /* UART1_CTS_B */
|
|
{5, 10, 2, 0, 3}, /* UART1_CTS_B */
|
|
{5, 11, 1, 0, 2}, /* UART1_RTS_B */
|
|
{5, 11, 1, 0, 2}, /* UART1_RTS_B */
|
|
|
|
|
|
|
|
+ /* QE UART */
|
|
|
|
+ {0, 19, 1, 0, 2}, /* QEUART_TX */
|
|
|
|
+ {1, 17, 2, 0, 3}, /* QEUART_RX */
|
|
|
|
+ {0, 25, 1, 0, 1}, /* QEUART_RTS */
|
|
|
|
+ {1, 23, 2, 0, 1}, /* QEUART_CTS */
|
|
|
|
+
|
|
/* SPI Flash, M25P40 */
|
|
/* SPI Flash, M25P40 */
|
|
{4, 27, 3, 0, 1}, /* SPI_MOSI */
|
|
{4, 27, 3, 0, 1}, /* SPI_MOSI */
|
|
{4, 28, 3, 0, 1}, /* SPI_MISO */
|
|
{4, 28, 3, 0, 1}, /* SPI_MISO */
|
|
@@ -311,7 +317,26 @@ local_bus_init(void)
|
|
out_be32(&lbc->lcrr, (u32)in_be32(&lbc->lcrr)| 0x00030000);
|
|
out_be32(&lbc->lcrr, (u32)in_be32(&lbc->lcrr)| 0x00030000);
|
|
}
|
|
}
|
|
|
|
|
|
-#ifdef CONFIG_FSL_ESDHC
|
|
|
|
|
|
+static void fdt_board_disable_serial(void *blob, bd_t *bd, const char *alias)
|
|
|
|
+{
|
|
|
|
+ const char *status = "disabled";
|
|
|
|
+ int off;
|
|
|
|
+ int err;
|
|
|
|
+
|
|
|
|
+ off = fdt_path_offset(blob, alias);
|
|
|
|
+ if (off < 0) {
|
|
|
|
+ printf("WARNING: could not find %s alias: %s.\n", alias,
|
|
|
|
+ fdt_strerror(off));
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ err = fdt_setprop(blob, off, "status", status, strlen(status) + 1);
|
|
|
|
+ if (err) {
|
|
|
|
+ printf("WARNING: could not set status for serial0: %s.\n",
|
|
|
|
+ fdt_strerror(err));
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
|
|
/*
|
|
/*
|
|
* Because of an erratum in prototype boards it is impossible to use eSDHC
|
|
* Because of an erratum in prototype boards it is impossible to use eSDHC
|
|
@@ -337,6 +362,53 @@ static int esdhc_disables_uart0(void)
|
|
hwconfig_subarg_cmp("esdhc", "mode", "4-bits");
|
|
hwconfig_subarg_cmp("esdhc", "mode", "4-bits");
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+static void fdt_board_fixup_qe_uart(void *blob, bd_t *bd)
|
|
|
|
+{
|
|
|
|
+ u8 *bcsr = (u8 *)CONFIG_SYS_BCSR_BASE;
|
|
|
|
+ const char *devtype = "serial";
|
|
|
|
+ const char *compat = "ucc_uart";
|
|
|
|
+ const char *clk = "brg9";
|
|
|
|
+ u32 portnum = 0;
|
|
|
|
+ int off = -1;
|
|
|
|
+
|
|
|
|
+ if (!hwconfig("qe_uart"))
|
|
|
|
+ return;
|
|
|
|
+
|
|
|
|
+ if (hwconfig("esdhc") && esdhc_disables_uart0()) {
|
|
|
|
+ printf("QE UART: won't enable with esdhc.\n");
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ fdt_board_disable_serial(blob, bd, "serial1");
|
|
|
|
+
|
|
|
|
+ while (1) {
|
|
|
|
+ const u32 *idx;
|
|
|
|
+ int len;
|
|
|
|
+
|
|
|
|
+ off = fdt_node_offset_by_compatible(blob, off, "ucc_geth");
|
|
|
|
+ if (off < 0) {
|
|
|
|
+ printf("WARNING: unable to fixup device tree for "
|
|
|
|
+ "QE UART\n");
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ idx = fdt_getprop(blob, off, "cell-index", &len);
|
|
|
|
+ if (!idx || len != sizeof(*idx) || *idx != fdt32_to_cpu(2))
|
|
|
|
+ continue;
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ fdt_setprop(blob, off, "device_type", devtype, strlen(devtype) + 1);
|
|
|
|
+ fdt_setprop(blob, off, "compatible", compat, strlen(compat) + 1);
|
|
|
|
+ fdt_setprop(blob, off, "tx-clock-name", clk, strlen(clk) + 1);
|
|
|
|
+ fdt_setprop(blob, off, "rx-clock-name", clk, strlen(clk) + 1);
|
|
|
|
+ fdt_setprop(blob, off, "port-number", &portnum, sizeof(portnum));
|
|
|
|
+
|
|
|
|
+ setbits_8(&bcsr[15], BCSR15_QEUART_EN);
|
|
|
|
+}
|
|
|
|
+
|
|
|
|
+#ifdef CONFIG_FSL_ESDHC
|
|
|
|
+
|
|
int board_mmc_init(bd_t *bd)
|
|
int board_mmc_init(bd_t *bd)
|
|
{
|
|
{
|
|
struct ccsr_gur *gur = (struct ccsr_gur *)CONFIG_SYS_MPC85xx_GUTS_ADDR;
|
|
struct ccsr_gur *gur = (struct ccsr_gur *)CONFIG_SYS_MPC85xx_GUTS_ADDR;
|
|
@@ -376,31 +448,14 @@ int board_mmc_init(bd_t *bd)
|
|
static void fdt_board_fixup_esdhc(void *blob, bd_t *bd)
|
|
static void fdt_board_fixup_esdhc(void *blob, bd_t *bd)
|
|
{
|
|
{
|
|
const char *status = "disabled";
|
|
const char *status = "disabled";
|
|
- int off;
|
|
|
|
- int err;
|
|
|
|
|
|
+ int off = -1;
|
|
|
|
|
|
if (!hwconfig("esdhc"))
|
|
if (!hwconfig("esdhc"))
|
|
return;
|
|
return;
|
|
|
|
|
|
- if (!esdhc_disables_uart0())
|
|
|
|
- goto disable_i2c2;
|
|
|
|
-
|
|
|
|
- off = fdt_path_offset(blob, "serial0");
|
|
|
|
- if (off < 0) {
|
|
|
|
- printf("WARNING: could not find serial0 alias: %s.\n",
|
|
|
|
- fdt_strerror(off));
|
|
|
|
- goto disable_i2c2;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- err = fdt_setprop(blob, off, "status", status, strlen(status) + 1);
|
|
|
|
- if (err) {
|
|
|
|
- printf("WARNING: could not set status for serial0: %s.\n",
|
|
|
|
- fdt_strerror(err));
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
|
|
+ if (esdhc_disables_uart0())
|
|
|
|
+ fdt_board_disable_serial(blob, bd, "serial0");
|
|
|
|
|
|
-disable_i2c2:
|
|
|
|
- off = -1;
|
|
|
|
while (1) {
|
|
while (1) {
|
|
const u32 *idx;
|
|
const u32 *idx;
|
|
int len;
|
|
int len;
|
|
@@ -566,5 +621,6 @@ void ft_board_setup(void *blob, bd_t *bd)
|
|
ft_fsl_pci_setup(blob, "pci1", &pcie1_hose);
|
|
ft_fsl_pci_setup(blob, "pci1", &pcie1_hose);
|
|
#endif
|
|
#endif
|
|
fdt_board_fixup_esdhc(blob, bd);
|
|
fdt_board_fixup_esdhc(blob, bd);
|
|
|
|
+ fdt_board_fixup_qe_uart(blob, bd);
|
|
}
|
|
}
|
|
#endif
|
|
#endif
|