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