uboot/arch/m68k/cpu/mcf523x/cpu.c
<<
>>
Prefs
   1/*
   2 *
   3 * (C) Copyright 2000-2003
   4 * Wolfgang Denk, DENX Software Engineering, wd@denx.de.
   5 *
   6 * Copyright (C) 2004-2007, 2012 Freescale Semiconductor, Inc.
   7 * TsiChung Liew (Tsi-Chung.Liew@freescale.com)
   8 *
   9 * SPDX-License-Identifier:     GPL-2.0+
  10 */
  11
  12#include <common.h>
  13#include <watchdog.h>
  14#include <command.h>
  15#include <netdev.h>
  16
  17#include <asm/immap.h>
  18#include <asm/io.h>
  19
  20DECLARE_GLOBAL_DATA_PTR;
  21
  22int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
  23{
  24        ccm_t *ccm = (ccm_t *) MMAP_CCM;
  25
  26        out_8(&ccm->rcr, CCM_RCR_SOFTRST);
  27        /* we don't return! */
  28        return 0;
  29}
  30
  31int checkcpu(void)
  32{
  33        ccm_t *ccm = (ccm_t *) MMAP_CCM;
  34        u16 msk;
  35        u16 id = 0;
  36        u8 ver;
  37
  38        puts("CPU:   ");
  39        msk = (in_be16(&ccm->cir) >> 6);
  40        ver = (in_be16(&ccm->cir) & 0x003f);
  41        switch (msk) {
  42        case 0x31:
  43                id = 5235;
  44                break;
  45        }
  46
  47        if (id) {
  48                char buf1[32], buf2[32];
  49
  50                printf("Freescale MCF%d (Mask:%01x Version:%x)\n", id, msk,
  51                       ver);
  52                printf("       CPU CLK %s MHz BUS CLK %s MHz\n",
  53                       strmhz(buf1, gd->cpu_clk),
  54                       strmhz(buf2, gd->bus_clk));
  55        }
  56
  57        return 0;
  58};
  59
  60#if defined(CONFIG_WATCHDOG)
  61/* Called by macro WATCHDOG_RESET */
  62void watchdog_reset(void)
  63{
  64        wdog_t *wdp = (wdog_t *) (MMAP_WDOG);
  65
  66        /* Count register */
  67        out_be16(&wdp->sr, 0x5555);
  68        asm("nop");
  69        out_be16(&wdp->sr, 0xaaaa);
  70}
  71
  72int watchdog_disable(void)
  73{
  74        wdog_t *wdp = (wdog_t *) (MMAP_WDOG);
  75
  76        /* UserManual, once the wdog is disabled, wdog cannot be re-enabled */
  77        /* halted watchdog timer */
  78        setbits_be16(&wdp->cr, WTM_WCR_HALTED);
  79
  80        puts("WATCHDOG:disabled\n");
  81        return (0);
  82}
  83
  84int watchdog_init(void)
  85{
  86        wdog_t *wdp = (wdog_t *) (MMAP_WDOG);
  87        u32 wdog_module = 0;
  88
  89        /* set timeout and enable watchdog */
  90        wdog_module = ((CONFIG_SYS_CLK / CONFIG_SYS_HZ) * CONFIG_WATCHDOG_TIMEOUT);
  91        wdog_module |= (wdog_module / 8192);
  92        out_be16(&wdp->mr, wdog_module);
  93
  94        out_be16(&wdp->cr, WTM_WCR_EN);
  95        puts("WATCHDOG:enabled\n");
  96
  97        return (0);
  98}
  99#endif                          /* CONFIG_WATCHDOG */
 100
 101#if defined(CONFIG_MCFFEC)
 102/* Default initializations for MCFFEC controllers.  To override,
 103 * create a board-specific function called:
 104 *      int board_eth_init(bd_t *bis)
 105 */
 106
 107int cpu_eth_init(bd_t *bis)
 108{
 109        return mcffec_initialize(bis);
 110}
 111#endif
 112