1e7300d04SMaxime Bizon /* 2e7300d04SMaxime Bizon * This file is subject to the terms and conditions of the GNU General Public 3e7300d04SMaxime Bizon * License. See the file "COPYING" in the main directory of this archive 4e7300d04SMaxime Bizon * for more details. 5e7300d04SMaxime Bizon * 6e7300d04SMaxime Bizon * Copyright (C) 2008 Maxime Bizon <mbizon@freebox.fr> 7e7300d04SMaxime Bizon */ 8e7300d04SMaxime Bizon 9e7300d04SMaxime Bizon #include <linux/init.h> 10e7300d04SMaxime Bizon #include <linux/bootmem.h> 11e7300d04SMaxime Bizon #include <asm/bootinfo.h> 12e7300d04SMaxime Bizon #include <bcm63xx_board.h> 13e7300d04SMaxime Bizon #include <bcm63xx_cpu.h> 14e7300d04SMaxime Bizon #include <bcm63xx_io.h> 15e7300d04SMaxime Bizon #include <bcm63xx_regs.h> 16e7300d04SMaxime Bizon #include <bcm63xx_gpio.h> 17e7300d04SMaxime Bizon 18e7300d04SMaxime Bizon void __init prom_init(void) 19e7300d04SMaxime Bizon { 20e7300d04SMaxime Bizon u32 reg, mask; 21e7300d04SMaxime Bizon 22e7300d04SMaxime Bizon bcm63xx_cpu_init(); 23e7300d04SMaxime Bizon 24e7300d04SMaxime Bizon /* stop any running watchdog */ 25e7300d04SMaxime Bizon bcm_wdt_writel(WDT_STOP_1, WDT_CTL_REG); 26e7300d04SMaxime Bizon bcm_wdt_writel(WDT_STOP_2, WDT_CTL_REG); 27e7300d04SMaxime Bizon 28e7300d04SMaxime Bizon /* disable all hardware blocks clock for now */ 297b933421SFlorian Fainelli if (BCMCPU_IS_3368()) 307b933421SFlorian Fainelli mask = CKCTL_3368_ALL_SAFE_EN; 317b933421SFlorian Fainelli else if (BCMCPU_IS_6328()) 32e5766aeaSJonas Gorski mask = CKCTL_6328_ALL_SAFE_EN; 33e5766aeaSJonas Gorski else if (BCMCPU_IS_6338()) 34e7300d04SMaxime Bizon mask = CKCTL_6338_ALL_SAFE_EN; 35e7300d04SMaxime Bizon else if (BCMCPU_IS_6345()) 36e7300d04SMaxime Bizon mask = CKCTL_6345_ALL_SAFE_EN; 37e7300d04SMaxime Bizon else if (BCMCPU_IS_6348()) 38e7300d04SMaxime Bizon mask = CKCTL_6348_ALL_SAFE_EN; 3904712f3fSMaxime Bizon else if (BCMCPU_IS_6358()) 40e7300d04SMaxime Bizon mask = CKCTL_6358_ALL_SAFE_EN; 412c8aaf71SJonas Gorski else if (BCMCPU_IS_6362()) 422c8aaf71SJonas Gorski mask = CKCTL_6362_ALL_SAFE_EN; 4304712f3fSMaxime Bizon else if (BCMCPU_IS_6368()) 4404712f3fSMaxime Bizon mask = CKCTL_6368_ALL_SAFE_EN; 4504712f3fSMaxime Bizon else 4604712f3fSMaxime Bizon mask = 0; 47e7300d04SMaxime Bizon 48e7300d04SMaxime Bizon reg = bcm_perf_readl(PERF_CKCTL_REG); 49e7300d04SMaxime Bizon reg &= ~mask; 50e7300d04SMaxime Bizon bcm_perf_writel(reg, PERF_CKCTL_REG); 51e7300d04SMaxime Bizon 52e7300d04SMaxime Bizon /* register gpiochip */ 53e7300d04SMaxime Bizon bcm63xx_gpio_init(); 54e7300d04SMaxime Bizon 55e7300d04SMaxime Bizon /* do low level board init */ 56e7300d04SMaxime Bizon board_prom_init(); 57e7300d04SMaxime Bizon } 58e7300d04SMaxime Bizon 59e7300d04SMaxime Bizon void __init prom_free_prom_memory(void) 60e7300d04SMaxime Bizon { 61e7300d04SMaxime Bizon } 62