18c2ecf20Sopenharmony_ci/* 28c2ecf20Sopenharmony_ci * Copyright (C) 2012-2014 Broadcom Corporation 38c2ecf20Sopenharmony_ci * 48c2ecf20Sopenharmony_ci * This program is free software; you can redistribute it and/or 58c2ecf20Sopenharmony_ci * modify it under the terms of the GNU General Public License as 68c2ecf20Sopenharmony_ci * published by the Free Software Foundation version 2. 78c2ecf20Sopenharmony_ci * 88c2ecf20Sopenharmony_ci * This program is distributed "as is" WITHOUT ANY WARRANTY of any 98c2ecf20Sopenharmony_ci * kind, whether express or implied; without even the implied warranty 108c2ecf20Sopenharmony_ci * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 118c2ecf20Sopenharmony_ci * GNU General Public License for more details. 128c2ecf20Sopenharmony_ci */ 138c2ecf20Sopenharmony_ci 148c2ecf20Sopenharmony_ci#include <linux/clocksource.h> 158c2ecf20Sopenharmony_ci#include <linux/of_address.h> 168c2ecf20Sopenharmony_ci 178c2ecf20Sopenharmony_ci#include <asm/mach/arch.h> 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ci#include "kona_l2_cache.h" 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_ci#define SECWDOG_OFFSET 0x00000000 228c2ecf20Sopenharmony_ci#define SECWDOG_RESERVED_MASK 0xe2000000 238c2ecf20Sopenharmony_ci#define SECWDOG_WD_LOAD_FLAG_MASK 0x10000000 248c2ecf20Sopenharmony_ci#define SECWDOG_EN_MASK 0x08000000 258c2ecf20Sopenharmony_ci#define SECWDOG_SRSTEN_MASK 0x04000000 268c2ecf20Sopenharmony_ci#define SECWDOG_CLKS_SHIFT 20 278c2ecf20Sopenharmony_ci#define SECWDOG_COUNT_SHIFT 0 288c2ecf20Sopenharmony_ci 298c2ecf20Sopenharmony_cistatic void bcm281xx_restart(enum reboot_mode mode, const char *cmd) 308c2ecf20Sopenharmony_ci{ 318c2ecf20Sopenharmony_ci uint32_t val; 328c2ecf20Sopenharmony_ci void __iomem *base; 338c2ecf20Sopenharmony_ci struct device_node *np_wdog; 348c2ecf20Sopenharmony_ci 358c2ecf20Sopenharmony_ci np_wdog = of_find_compatible_node(NULL, NULL, "brcm,kona-wdt"); 368c2ecf20Sopenharmony_ci if (!np_wdog) { 378c2ecf20Sopenharmony_ci pr_emerg("Couldn't find brcm,kona-wdt\n"); 388c2ecf20Sopenharmony_ci return; 398c2ecf20Sopenharmony_ci } 408c2ecf20Sopenharmony_ci base = of_iomap(np_wdog, 0); 418c2ecf20Sopenharmony_ci of_node_put(np_wdog); 428c2ecf20Sopenharmony_ci if (!base) { 438c2ecf20Sopenharmony_ci pr_emerg("Couldn't map brcm,kona-wdt\n"); 448c2ecf20Sopenharmony_ci return; 458c2ecf20Sopenharmony_ci } 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_ci /* Enable watchdog with short timeout (244us). */ 488c2ecf20Sopenharmony_ci val = readl(base + SECWDOG_OFFSET); 498c2ecf20Sopenharmony_ci val &= SECWDOG_RESERVED_MASK | SECWDOG_WD_LOAD_FLAG_MASK; 508c2ecf20Sopenharmony_ci val |= SECWDOG_EN_MASK | SECWDOG_SRSTEN_MASK | 518c2ecf20Sopenharmony_ci (0x15 << SECWDOG_CLKS_SHIFT) | 528c2ecf20Sopenharmony_ci (0x8 << SECWDOG_COUNT_SHIFT); 538c2ecf20Sopenharmony_ci writel(val, base + SECWDOG_OFFSET); 548c2ecf20Sopenharmony_ci 558c2ecf20Sopenharmony_ci /* Wait for reset */ 568c2ecf20Sopenharmony_ci while (1); 578c2ecf20Sopenharmony_ci} 588c2ecf20Sopenharmony_ci 598c2ecf20Sopenharmony_cistatic void __init bcm281xx_init(void) 608c2ecf20Sopenharmony_ci{ 618c2ecf20Sopenharmony_ci kona_l2_cache_init(); 628c2ecf20Sopenharmony_ci} 638c2ecf20Sopenharmony_ci 648c2ecf20Sopenharmony_cistatic const char * const bcm281xx_dt_compat[] = { 658c2ecf20Sopenharmony_ci "brcm,bcm11351", /* Have to use the first number upstreamed */ 668c2ecf20Sopenharmony_ci NULL, 678c2ecf20Sopenharmony_ci}; 688c2ecf20Sopenharmony_ci 698c2ecf20Sopenharmony_ciDT_MACHINE_START(BCM281XX_DT, "BCM281xx Broadcom Application Processor") 708c2ecf20Sopenharmony_ci .init_machine = bcm281xx_init, 718c2ecf20Sopenharmony_ci .restart = bcm281xx_restart, 728c2ecf20Sopenharmony_ci .dt_compat = bcm281xx_dt_compat, 738c2ecf20Sopenharmony_ciMACHINE_END 74