1/* 2 * s6105 control routines 3 * 4 * Copyright (c) 2009 emlix GmbH 5 */ 6#include <linux/irq.h> 7#include <linux/io.h> 8#include <linux/gpio.h> 9 10#include <asm/bootparam.h> 11 12#include <variant/hardware.h> 13#include <variant/gpio.h> 14 15#include <platform/gpio.h> 16 17void platform_halt(void) 18{ 19 local_irq_disable(); 20 while (1) 21 ; 22} 23 24void platform_power_off(void) 25{ 26 platform_halt(); 27} 28 29void platform_restart(void) 30{ 31 platform_halt(); 32} 33 34void __init platform_setup(char **cmdline) 35{ 36 unsigned long reg; 37 38 reg = readl(S6_REG_GREG1 + S6_GREG1_PLLSEL); 39 reg &= ~(S6_GREG1_PLLSEL_GMAC_MASK << S6_GREG1_PLLSEL_GMAC | 40 S6_GREG1_PLLSEL_GMII_MASK << S6_GREG1_PLLSEL_GMII); 41 reg |= S6_GREG1_PLLSEL_GMAC_125MHZ << S6_GREG1_PLLSEL_GMAC | 42 S6_GREG1_PLLSEL_GMII_125MHZ << S6_GREG1_PLLSEL_GMII; 43 writel(reg, S6_REG_GREG1 + S6_GREG1_PLLSEL); 44 45 reg = readl(S6_REG_GREG1 + S6_GREG1_CLKGATE); 46 reg &= ~(1 << S6_GREG1_BLOCK_SB); 47 reg &= ~(1 << S6_GREG1_BLOCK_GMAC); 48 writel(reg, S6_REG_GREG1 + S6_GREG1_CLKGATE); 49 50 reg = readl(S6_REG_GREG1 + S6_GREG1_BLOCKENA); 51 reg |= 1 << S6_GREG1_BLOCK_SB; 52 reg |= 1 << S6_GREG1_BLOCK_GMAC; 53 writel(reg, S6_REG_GREG1 + S6_GREG1_BLOCKENA); 54 55 printk(KERN_NOTICE "S6105 on Stretch S6000 - " 56 "Copyright (C) 2009 emlix GmbH <info@emlix.com>\n"); 57} 58 59void __init platform_init(bp_tag_t *first) 60{ 61 s6_gpio_init(0); 62 gpio_request(GPIO_LED1_NGREEN, "led1_green"); 63 gpio_request(GPIO_LED1_RED, "led1_red"); 64 gpio_direction_output(GPIO_LED1_NGREEN, 1); 65} 66 67void platform_heartbeat(void) 68{ 69 static unsigned int c; 70 71 if (!(++c & 0x4F)) 72 gpio_direction_output(GPIO_LED1_RED, !(c & 0x10)); 73} 74