]> git.sur5r.net Git - u-boot/blobdiff - board/tqc/tqm8xx/tqm8xx.c
Remove HMI10 board support
[u-boot] / board / tqc / tqm8xx / tqm8xx.c
index d8a19a4ce0ffa3e14019ad48978d44a5c6301ea1..940cc8ff71071f2efdbf41a66ac15623f00ad69d 100644 (file)
  */
 
 #include <common.h>
+#include <hwconfig.h>
 #include <mpc8xx.h>
 #ifdef CONFIG_PS2MULT
 #include <ps2mult.h>
 #endif
 
+#if defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_OF_LIBFDT)
+#include <libfdt.h>
+#endif
+
 extern flash_info_t flash_info[];      /* FLASH chips info */
 
 DECLARE_GLOBAL_DATA_PTR;
@@ -425,35 +430,15 @@ static long int dram_size (long int mamr_value, long int *base, long int maxsize
 
 /* ------------------------------------------------------------------------- */
 
-#ifdef CONFIG_PS2MULT
-
-#ifdef CONFIG_HMI10
-#define BASE_BAUD ( 1843200 / 16 )
-struct serial_state rs_table[] = {
-       { BASE_BAUD, 4,  (void*)0xec140000 },
-       { BASE_BAUD, 2,  (void*)0xec150000 },
-       { BASE_BAUD, 6,  (void*)0xec160000 },
-       { BASE_BAUD, 10, (void*)0xec170000 },
-};
-
-#ifdef CONFIG_BOARD_EARLY_INIT_R
-int board_early_init_r (void)
-{
-       ps2mult_early_init();
-       return (0);
-}
-#endif
-#endif /* CONFIG_HMI10 */
-
-#endif /* CONFIG_PS2MULT */
-
-
 #ifdef CONFIG_MISC_INIT_R
+extern void load_sernum_ethaddr(void);
 int misc_init_r (void)
 {
        volatile immap_t *immap = (immap_t *) CONFIG_SYS_IMMR;
        volatile memctl8xx_t *memctl = &immap->im_memctl;
 
+       load_sernum_ethaddr();
+
 #ifdef CONFIG_SYS_OR_TIMING_FLASH_AT_50MHZ
        int scy, trlx, flash_or_timing, clk_diff;
 
@@ -571,12 +556,13 @@ void ide_led (uchar led, uchar status)
 #ifdef CONFIG_LCD_INFO
 #include <lcd.h>
 #include <version.h>
+#include <timestamp.h>
 
 void lcd_show_board_info(void)
 {
        char temp[32];
 
-       lcd_printf ("%s (%s - %s)\n", U_BOOT_VERSION, __DATE__, __TIME__);
+       lcd_printf ("%s (%s - %s)\n", U_BOOT_VERSION, U_BOOT_DATE, U_BOOT_TIME);
        lcd_printf ("(C) 2008 DENX Software Engineering GmbH\n");
        lcd_printf ("    Wolfgang DENK, wd@denx.de\n");
 #ifdef CONFIG_LCD_INFO_BELOW_LOGO
@@ -595,6 +581,120 @@ void lcd_show_board_info(void)
 }
 #endif /* CONFIG_LCD_INFO */
 
+/*
+ * Device Tree Support
+ */
+#if defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_OF_LIBFDT)
+int fdt_set_node_and_value (void *blob,
+                               char *nodename,
+                               char *regname,
+                               void *var,
+                               int size)
+{
+       int ret = 0;
+       int nodeoffset = 0;
+
+       nodeoffset = fdt_path_offset (blob, nodename);
+       if (nodeoffset >= 0) {
+               ret = fdt_setprop (blob, nodeoffset, regname, var,
+                                       size);
+               if (ret < 0) {
+                       printf("ft_blob_update(): "
+                               "cannot set %s/%s property; err: %s\n",
+                               nodename, regname, fdt_strerror (ret));
+               }
+       } else {
+               printf("ft_blob_update(): "
+                       "cannot find %s node err:%s\n",
+                       nodename, fdt_strerror (nodeoffset));
+       }
+       return ret;
+}
+
+int fdt_del_node_name (void *blob, char *nodename)
+{
+       int ret = 0;
+       int nodeoffset = 0;
+
+       nodeoffset = fdt_path_offset (blob, nodename);
+       if (nodeoffset >= 0) {
+               ret = fdt_del_node (blob, nodeoffset);
+               if (ret < 0) {
+                       printf("%s: cannot delete %s; err: %s\n",
+                               __func__, nodename, fdt_strerror (ret));
+               }
+       } else {
+               printf("%s: cannot find %s node err:%s\n",
+                       __func__, nodename, fdt_strerror (nodeoffset));
+       }
+       return ret;
+}
+
+int fdt_del_prop_name (void *blob, char *nodename, char *propname)
+{
+       int ret = 0;
+       int nodeoffset = 0;
+
+       nodeoffset = fdt_path_offset (blob, nodename);
+       if (nodeoffset >= 0) {
+               ret = fdt_delprop (blob, nodeoffset, propname);
+               if (ret < 0) {
+                       printf("%s: cannot delete %s %s; err: %s\n",
+                               __func__, nodename, propname,
+                               fdt_strerror (ret));
+               }
+       } else {
+               printf("%s: cannot find %s node err:%s\n",
+                       __func__, nodename, fdt_strerror (nodeoffset));
+       }
+       return ret;
+}
+
+/*
+ * update "brg" property in the blob
+ */
+void ft_blob_update (void *blob, bd_t *bd)
+{
+       uchar enetaddr[6];
+       ulong brg_data = 0;
+
+       /* BRG */
+       brg_data = cpu_to_be32(bd->bi_busfreq);
+       fdt_set_node_and_value(blob,
+                               "/soc/cpm", "brg-frequency",
+                               &brg_data, sizeof(brg_data));
+
+       /* MAC addr */
+       if (eth_getenv_enetaddr("ethaddr", enetaddr)) {
+               fdt_set_node_and_value(blob,
+                                       "ethernet0", "local-mac-address",
+                                       enetaddr, sizeof(u8) * 6);
+       }
+
+       if (hwconfig_arg_cmp("fec", "off")) {
+               /* no FEC on this plattform, delete DTS nodes */
+               fdt_del_node_name (blob, "ethernet1");
+               fdt_del_node_name (blob, "mdio1");
+               /* also the aliases entries */
+               fdt_del_prop_name (blob, "/aliases", "ethernet1");
+               fdt_del_prop_name (blob, "/aliases", "mdio1");
+       } else {
+               /* adjust local-mac-address for FEC ethernet */
+               if (eth_getenv_enetaddr("eth1addr", enetaddr)) {
+                       fdt_set_node_and_value(blob,
+                                       "ethernet1", "local-mac-address",
+                                       enetaddr, sizeof(u8) * 6);
+               }
+       }
+}
+
+void ft_board_setup(void *blob, bd_t *bd)
+{
+       ft_cpu_setup(blob, bd);
+       ft_blob_update(blob, bd);
+}
+#endif /* defined(CONFIG_OF_BOARD_SETUP) && defined(CONFIG_OF_LIBFDT) */
+
 /* ---------------------------------------------------------------------------- */
 /* TK885D specific initializaion                                               */
 /* ---------------------------------------------------------------------------- */
@@ -622,13 +722,13 @@ int last_stage_init(void)
                return 0;
 
        for (i = 0; i < 2; i++) {
-               ret = miiphy_read("FEC ETHERNET", phy[i], PHY_BMCR, &reg);
+               ret = miiphy_read("FEC", phy[i], PHY_BMCR, &reg);
                if (ret) {
                        printf("Cannot read BMCR on PHY %d\n", phy[i]);
                        return 0;
                }
                /* Auto-negotiation off, hard set full duplex, 100Mbps */
-               ret = miiphy_write("FEC ETHERNET", phy[i],
+               ret = miiphy_write("FEC", phy[i],
                                   PHY_BMCR, (reg | PHY_BMCR_100MB |
                                              PHY_BMCR_DPLX) & ~PHY_BMCR_AUTON);
                if (ret) {