Rework code related with CPU reset, plus minor fixes
authorPiotr Dymacz <pepe2k@gmail.com>
Sat, 14 Nov 2015 20:43:00 +0000 (21:43 +0100)
committerPiotr Dymacz <pepe2k@gmail.com>
Sat, 14 Nov 2015 20:43:00 +0000 (21:43 +0100)
u-boot/board/ar7240/common/common.c
u-boot/cpu/mips/ar7240/qca_common.c
u-boot/cpu/mips/cpu.c
u-boot/include/common.h

index 1f1e2dfd7c49356b6d021cded37dababc16ff58c..ffb9949e1ee0f961d538f733a746032b52ed370f 100644 (file)
@@ -126,3 +126,11 @@ u32 main_cpu_clk(void)
 
        return cpu_clk;
 }
+
+/*
+ * Calls full chip reset
+ */
+void full_reset(void)
+{
+       qca_full_chip_reset();
+}
index 6e106205a504e108462dcb75489f473e312f1ea4..e1f9d9af5d23fe73e3d21bdf62336c627318de45 100644 (file)
@@ -41,6 +41,9 @@ void qca_soc_name_rev(char *buf)
        u32 major;
        u32 rev = 0;
 
+       if (buf == NULL)
+               return;
+
        /* Get revision ID value */
        id = qca_soc_reg_read(QCA_RST_REVISION_ID_REG);
 
@@ -84,3 +87,17 @@ void qca_soc_name_rev(char *buf)
                break;
        }
 }
+
+/*
+ * Performs full chip reset
+ */
+void qca_full_chip_reset(void)
+{
+       volatile u32 i = 1;
+
+       do {
+               qca_soc_reg_write(QCA_RST_RST_REG,
+                                                 QCA_RST_RESET_FULL_CHIP_RST_MASK
+                                                 | QCA_RST_RESET_DDR_RST_MASK);
+       } while (i);
+}
index 12e16ccb320c0ce48d4745cab8da7da63bb36b87..f8eeec80823e781342f00bd1c53ed60094ea8c54 100644 (file)
@@ -1,75 +1,31 @@
 /*
- * (C) Copyright 2003
- * Wolfgang Denk, DENX Software Engineering, <wd@denx.de>
+ * Copyright (C) 2015 Piotr Dymacz <piotr@dymacz.pl>
+ * Copyright (C) 2003 Wolfgang Denk, DENX Software Engineering, <wd@denx.de>
  *
- * See file CREDITS for list of people who contributed to this
- * project.
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License as
- * published by the Free Software Foundation; either version 2 of
- * the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
- * MA 02111-1307 USA
+ * SPDX-License-Identifier:GPL-2.0
  */
 
 #include <common.h>
 #include <command.h>
 #include <asm/mipsregs.h>
 
-#if defined(CONFIG_AR7100)
-#include <asm/addrspace.h>
-#include <ar7100_soc.h>
-#endif
-
-#if defined(CONFIG_AR7240)
-#include <asm/addrspace.h>
-#include <ar7240_soc.h>
-#endif
+extern void dcache_flush_range(u32 a, u32 end);
 
-int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[]){
-#if defined(CONFIG_AR7100)
-       for(;;){
-               ar7100_reg_wr(AR7100_RESET, (AR7100_RESET_FULL_CHIP | AR7100_RESET_DDR));
-       }
-#elif defined(CONFIG_AR7240)
-#ifndef COMPRESSED_UBOOT
-       fprintf(stdout, "\nResetting the board...\n");
+int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char *argv[])
+{
+       printf("Resetting the board...");
        milisecdelay(500);
-#endif  /* #ifndef COMPRESSED_UBOOT */
-       for(;;){
-       #ifdef CONFIG_WASP
-               if(ar7240_reg_rd(AR7240_REV_ID) & 0xf){
-                       ar7240_reg_wr(AR7240_RESET, (AR7240_RESET_FULL_CHIP | AR7240_RESET_DDR));
-               } else {
-       /*
-       * WAR for full chip reset spi vs. boot-rom selection
-       * bug in wasp 1.0
-       */
-                       ar7240_reg_wr(AR7240_GPIO_OE, ar7240_reg_rd(AR7240_GPIO_OE) & (~(1 << 17)));
-               }
-       #else
-               ar7240_reg_wr(AR7240_RESET, (AR7240_RESET_FULL_CHIP | AR7240_RESET_DDR));
-       #endif
-       }
-#endif
-#ifndef COMPRESSED_UBOOT
-       fprintf(stderr, "\n*** ERROR: RESET FAILED! ***\n");
-#endif  /* #ifndef COMPRESSED_UBOOT */
-       return(0);
-}
 
-extern void dcache_flush_range(u32 a, u32 end);
+       full_reset();
 
-void flush_cache(ulong start_addr, ulong size){
+       /* After full chip reset we should not reach next step... */
+       printf("\n## Error: RESET FAILED!\n");
+
+       return 0;
+}
+
+void flush_cache(ulong start_addr, ulong size)
+{
        u32 end, a;
 
        a = start_addr & ~(CFG_CACHELINE_SIZE - 1);
@@ -88,6 +44,9 @@ void cpu_name(char *name)
 {
        u32 cpu_id = read_c0_prid();
 
+       if (name == NULL)
+               return;
+
        switch (cpu_id & PRID_IMP_MASK) {
        case PRID_IMP_24K:
                sprintf(name, "MIPS 24Kc");
index f601b4af92ba0d4a765e4c4635833923c6eeba2b..a8a4440a7dd14f3cfe039a6e800f56cd2589d7d6 100644 (file)
@@ -167,6 +167,7 @@ void hang(void) __attribute__ ((noreturn));
 long int dram_init(void);
 int      timer_init(void);
 int      gpio_init(void);
+void     full_reset(void);
 void     all_led_on(void);
 void     all_led_off(void);
 void     print_size(ulong, const char *);