Home | History | Annotate | Line # | Download | only in board
smdk2410.c revision 1.1
      1 /* $NetBSD: smdk2410.c,v 1.1 2003/09/03 03:18:30 mycroft Exp $ */
      2 
      3 /*
      4  * Copyright (c) 2003 By Noon Software, Inc.  All rights reserved.
      5  *
      6  * Redistribution and use in source and binary forms, with or without
      7  * modification, are permitted provided that the following conditions
      8  * are met:
      9  * 1. Redistributions of source code must retain the above copyright
     10  *    notice, this list of conditions and the following disclaimer.
     11  * 2. Redistributions in binary form must reproduce the above copyright
     12  *    notice, this list of conditions and the following disclaimer in the
     13  *    documentation and/or other materials provided with the distribution.
     14  * 3. The names of the authors may not be used to endorse or promote products
     15  *    derived from this software without specific prior written permission.
     16  *
     17  * THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS OR
     18  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     19  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     20  * IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY DIRECT, INDIRECT,
     21  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     22  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     23  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     24  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     25  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     26  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     27  */
     28 
     29 /*
     30  * Board initialization routines for the Samsung's SMDK2410.
     31  */
     32 
     33 #include <sys/types.h>
     34 #include <lib/libsa/stand.h>
     35 #include <arch/arm/s3c2xx0/s3c2410reg.h>
     36 
     37 #include "board.h"
     38 
     39 void
     40 board_init(void)
     41 {
     42 
     43 	mem_init();
     44 }
     45 
     46 void
     47 board_fini(void)
     48 {
     49 
     50 }
     51 
     52 void
     53 mem_init(void)
     54 {
     55 	uint32_t start, size, heap;
     56 
     57 	start = S3C2410_SDRAM_START;
     58 	size = SDRAM_SIZE;
     59 
     60 	heap = (start + size) - HEAP_SIZE;
     61 
     62 	printf(">> RAM 0x%x - 0x%x, heap at 0x%x\n",
     63 	    start, (start + size) - 1, heap);
     64 	setheap((void *)heap, (void *)(heap + HEAP_SIZE - 1));
     65 }
     66 
     67 long get_com_freq(void);
     68 long
     69 get_com_freq(void)
     70 {
     71 	long clk;
     72 	uint32_t pllcon = *(volatile uint32_t *)(S3C2410_CLKMAN_BASE+CLKMAN_MPLLCON);
     73 	uint32_t clkdivn = *(volatile uint32_t *)(S3C2410_CLKMAN_BASE+CLKMAN_CLKDIVN);
     74 
     75 	int mdiv = (pllcon & PLLCON_MDIV_MASK) >> PLLCON_MDIV_SHIFT;
     76 	int pdiv = (pllcon & PLLCON_PDIV_MASK) >> PLLCON_PDIV_SHIFT;
     77 	int sdiv = (pllcon & PLLCON_SDIV_MASK) >> PLLCON_SDIV_SHIFT;
     78 
     79 #if XTAL_CLK < 1000   /* in MHz */
     80 	clk = (XTAL_CLK * 1000000 * (8 + mdiv)) / ((pdiv + 2) << sdiv);
     81 #else /* in Hz */
     82 	clk = (XTAL_CLK * (8 + mdiv)) / ((pdiv + 2) << sdiv);
     83 #endif
     84 
     85 	if (clkdivn & CLKDIVN_HDIVN)
     86 		clk /= 2;
     87 	if (clkdivn & CLKDIVN_PDIVN)
     88 		clk /= 2;
     89 
     90 	return clk;
     91 }
     92