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