Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OS
U-Boot.Mirror
提交
15ef8a5d
U
U-Boot.Mirror
项目概览
OS
/
U-Boot.Mirror
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
U-Boot.Mirror
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
15ef8a5d
编写于
6月 18, 2003
作者:
W
wdenk
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add support for DS12887 RTC; add RTC support for ATC board
上级
2abbe075
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
323 addition
and
11 deletion
+323
-11
CHANGELOG
CHANGELOG
+3
-1
board/atc/atc.c
board/atc/atc.c
+54
-0
board/atc/config.mk
board/atc/config.mk
+1
-6
cpu/mpc8260/pci.c
cpu/mpc8260/pci.c
+7
-1
include/configs/atc.h
include/configs/atc.h
+18
-2
rtc/Makefile
rtc/Makefile
+2
-1
rtc/ds12887.c
rtc/ds12887.c
+238
-0
未找到文件。
CHANGELOG
浏览文件 @
15ef8a5d
...
...
@@ -2,6 +2,8 @@
Changes since U-Boot 0.3.1:
======================================================================
* Add support for DS12887 RTC; add RTC support for ATC board
* Patch by Nicolas Lacressonniere, 11 Jun 2003:
Modifications for Atmel AT91RM9200DK ARM920T based development kit
- Add Atmel DataFlash support for reading and writing.
...
...
@@ -419,7 +421,7 @@ Changes for U-Boot 0.3.0:
* TRAB fixes / extensions:
- Restore VFD brightness as saved in environment
- add support for F
G
ujitsu flashes
- add support for Fujitsu flashes
- make sure both buzzers are turned off (drive low level)
* Patches by Robert Schwebel, 06 Mar 2003:
...
...
board/atc/atc.c
浏览文件 @
15ef8a5d
...
...
@@ -203,6 +203,49 @@ const iop_conf_t iop_conf_tab[4][32] = {
}
};
/*
* UPMB initialization table
*/
#define _NOT_USED_ 0xFFFFFFFF
static
const
uint
rtc_table
[]
=
{
/*
* Single Read. (Offset 0 in UPMA RAM)
*/
0xfffec00
,
0xfffac00
,
0xfff2d00
,
0xfef2800
,
0xfaf2080
,
0xfaf2080
,
0xfff2400
,
0x1fff6c05
,
/* last */
/*
* Burst Read. (Offset 8 in UPMA RAM)
*/
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
/*
* Single Write. (Offset 18 in UPMA RAM)
*/
0xfffec00
,
0xfffac00
,
0xfff2d00
,
0xfef2800
,
0xfaf2080
,
0xfaf2080
,
0xfaf2400
,
0x1fbf6c05
,
/* last */
/*
* Burst Write. (Offset 20 in UPMA RAM)
*/
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
/*
* Refresh (Offset 30 in UPMA RAM)
*/
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
/*
* Exception. (Offset 3c in UPMA RAM)
*/
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
_NOT_USED_
,
};
/* ------------------------------------------------------------------------- */
/* Check Board Identity:
...
...
@@ -319,6 +362,17 @@ static long int try_init (volatile memctl8260_t * memctl, ulong sdmr,
return
(
maxsize
);
}
int
misc_init_r
(
void
)
{
volatile
immap_t
*
immap
=
(
immap_t
*
)
CFG_IMMR
;
volatile
memctl8260_t
*
memctl
=
&
immap
->
im_memctl
;
upmconfig
(
UPMA
,
(
uint
*
)
rtc_table
,
sizeof
(
rtc_table
)
/
sizeof
(
uint
));
memctl
->
memc_mamr
=
MxMR_RLFx_6X
|
MxMR_WLFx_6X
|
MxMR_OP_NORM
;
return
(
0
);
}
long
int
initdram
(
int
board_type
)
{
volatile
immap_t
*
immap
=
(
immap_t
*
)
CFG_IMMR
;
...
...
board/atc/config.mk
浏览文件 @
15ef8a5d
...
...
@@ -30,12 +30,7 @@
# in RAM where U-Boot is loaded at for debugging.
#
ifeq
($(CONFIG_BOOT_ROM),y)
TEXT_BASE
:=
0xFF800000
PLATFORM_CPPFLAGS
+=
-DCONFIG_BOOT_ROM
else
TEXT_BASE
:=
0xFF000000
endif
TEXT_BASE
:=
0xFF000000
# RAM version
#TEXT_BASE := 0x100000
...
...
cpu/mpc8260/pci.c
浏览文件 @
15ef8a5d
...
...
@@ -252,7 +252,13 @@ void pci_mpc8250_init(struct pci_controller *hose)
* Setting required to enable IRQ1-IRQ7 (SIUMCR [DPPC]),
* and local bus for PCI (SIUMCR [LBPC]).
*/
immap
->
im_siu_conf
.
sc_siumcr
=
0x00640000
;
immap
->
im_siu_conf
.
sc_siumcr
=
(
immap
->
im_siu_conf
.
sc_siumcr
&
~
SIUMCR_LBPC11
&
~
SIUMCR_CS10PC11
&
~
SIUMCR_LBPC11
)
|
SIUMCR_LBPC01
|
SIUMCR_CS10PC01
|
SIUMCR_LBPC01
;
#endif
/* Make PCI lowest priority */
...
...
include/configs/atc.h
浏览文件 @
15ef8a5d
...
...
@@ -129,7 +129,10 @@
CFG_CMD_EEPROM | \
CFG_CMD_PCI | \
CFG_CMD_PCMCIA | \
CFG_CMD_DATE | \
CFG_CMD_IDE)
#define CONFIG_DOS_PARTITION
/* this must be included AFTER the definition of CONFIG_COMMANDS (if any) */
...
...
@@ -168,6 +171,14 @@
#define CONFIG_SPI
#define CONFIG_RTC_DS12887
#define RTC_BASE_ADDR 0x02800000
#define RTC_PORT_ADDR RTC_BASE_ADDR + 0x800
#define RTC_PORT_DATA RTC_BASE_ADDR + 0x808
#define CONFIG_MISC_INIT_R
/*
* For booting Linux, the board info and command line data
* have to be in the first 8 MB of memory, since this is
...
...
@@ -179,8 +190,6 @@
* Flash configuration
*/
#define CFG_BOOTROM_BASE 0xFF800000
#define CFG_BOOTROM_SIZE 0x00080000
#define CFG_FLASH_BASE 0xFF000000
#define CFG_FLASH_SIZE 0x00800000
...
...
@@ -452,6 +461,13 @@
#define CFG_PSDMR CFG_PSDMR_8COL
#endif
/* CFG_RAMBOOT */
#define CFG_BR4_PRELIM ((RTC_BASE_ADDR & BRx_BA_MSK) |\
BRx_PS_8 |\
BRx_MS_UPMA |\
BRx_V)
#define CFG_OR4_PRELIM (ORxU_AM_MSK | ORxU_BI)
/*-----------------------------------------------------------------------
* PCMCIA stuff
*-----------------------------------------------------------------------
...
...
rtc/Makefile
浏览文件 @
15ef8a5d
...
...
@@ -28,7 +28,8 @@ include $(TOPDIR)/config.mk
LIB
=
librtc.a
OBJS
=
date.o
\
ds1302.o ds1306.o ds1307.o ds1337.o ds1556.o ds164x.o ds174x.o
\
ds12887.o ds1302.o ds1306.o ds1307.o ds1337.o
\
ds1556.o ds164x.o ds174x.o
\
m41t11.o m48t35ax.o mc146818.o mk48t59.o
\
mpc8xx.o pcf8563.o
...
...
rtc/ds12887.c
0 → 100644
浏览文件 @
15ef8a5d
/*
* (C) Copyright 2003
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*/
/*
* Date & Time support for the DS12887 RTC
*/
#undef RTC_DEBUG
#include <common.h>
#include <command.h>
#include <config.h>
#include <rtc.h>
#if defined(CONFIG_RTC_DS12887) && (CONFIG_COMMANDS & CFG_CMD_DATE)
#define RTC_SECONDS 0x00
#define RTC_SECONDS_ALARM 0x01
#define RTC_MINUTES 0x02
#define RTC_MINUTES_ALARM 0x03
#define RTC_HOURS 0x04
#define RTC_HOURS_ALARM 0x05
#define RTC_DAY_OF_WEEK 0x06
#define RTC_DATE_OF_MONTH 0x07
#define RTC_MONTH 0x08
#define RTC_YEAR 0x09
#define RTC_CONTROL_A 0x0A
#define RTC_CONTROL_B 0x0B
#define RTC_CONTROL_C 0x0C
#define RTC_CONTROL_D 0x0D
#define RTC_CA_UIP 0x80
#define RTC_CB_DM 0x04
#define RTC_CB_24_12 0x02
#define RTC_CB_SET 0x80
#if defined(CONFIG_ATC)
static
uchar
rtc_read
(
uchar
reg
)
{
uchar
val
;
*
(
volatile
unsigned
char
*
)(
RTC_PORT_ADDR
)
=
reg
;
__asm__
__volatile__
(
"sync"
);
val
=
*
(
volatile
unsigned
char
*
)(
RTC_PORT_DATA
);
return
(
val
);
}
static
void
rtc_write
(
uchar
reg
,
uchar
val
)
{
*
(
volatile
unsigned
char
*
)(
RTC_PORT_ADDR
)
=
reg
;
__asm__
__volatile__
(
"sync"
);
*
(
volatile
unsigned
char
*
)(
RTC_PORT_DATA
)
=
val
;
__asm__
__volatile__
(
"sync"
);
}
#else
# error Board specific rtc access functions should be supplied
#endif
static
unsigned
bcd2bin
(
uchar
n
)
{
return
((((
n
>>
4
)
&
0x0F
)
*
10
)
+
(
n
&
0x0F
));
}
static
unsigned
char
bin2bcd
(
unsigned
int
n
)
{
return
(((
n
/
10
)
<<
4
)
|
(
n
%
10
));
}
/* ------------------------------------------------------------------------- */
void
rtc_get
(
struct
rtc_time
*
tmp
)
{
uchar
sec
,
min
,
hour
,
mday
,
wday
,
mon
,
year
;
/* check if rtc is available for access */
while
(
rtc_read
(
RTC_CONTROL_A
)
&
RTC_CA_UIP
)
;
sec
=
rtc_read
(
RTC_SECONDS
);
min
=
rtc_read
(
RTC_MINUTES
);
hour
=
rtc_read
(
RTC_HOURS
);
mday
=
rtc_read
(
RTC_DATE_OF_MONTH
);
wday
=
rtc_read
(
RTC_DAY_OF_WEEK
);
mon
=
rtc_read
(
RTC_MONTH
);
year
=
rtc_read
(
RTC_YEAR
);
#ifdef RTC_DEBUG
printf
(
"Get RTC year: %d; mon: %d; mday: %d; wday: %d; "
"hr: %d; min: %d; sec: %d
\n
"
,
year
,
mon
,
mday
,
wday
,
hour
,
min
,
sec
);
printf
(
"Alarms: hour: %02x min: %02x sec: %02x
\n
"
,
rtc_read
(
RTC_HOURS_ALARM
),
rtc_read
(
RTC_MINUTES_ALARM
),
rtc_read
(
RTC_SECONDS_ALARM
)
);
#endif
if
(
!
(
rtc_read
(
RTC_CONTROL_B
)
&
RTC_CB_DM
))
{
/* Information is in BCD format */
printf
(
" Get: Convert BSD to BIN
\n
"
);
tmp
->
tm_sec
=
bcd2bin
(
sec
&
0x7F
);
tmp
->
tm_min
=
bcd2bin
(
min
&
0x7F
);
tmp
->
tm_hour
=
bcd2bin
(
hour
&
0x3F
);
tmp
->
tm_mday
=
bcd2bin
(
mday
&
0x3F
);
tmp
->
tm_mon
=
bcd2bin
(
mon
&
0x1F
);
tmp
->
tm_year
=
bcd2bin
(
year
);
tmp
->
tm_wday
=
bcd2bin
(
wday
&
0x07
);
}
else
{
tmp
->
tm_sec
=
sec
&
0x7F
;
tmp
->
tm_min
=
min
&
0x7F
;
tmp
->
tm_hour
=
hour
&
0x3F
;
tmp
->
tm_mday
=
mday
&
0x3F
;
tmp
->
tm_mon
=
mon
&
0x1F
;
tmp
->
tm_year
=
year
;
tmp
->
tm_wday
=
wday
&
0x07
;
}
if
(
tmp
->
tm_year
<
70
)
tmp
->
tm_year
+=
2000
;
else
tmp
->
tm_year
+=
1900
;
tmp
->
tm_yday
=
0
;
tmp
->
tm_isdst
=
0
;
#ifdef RTC_DEBUG
printf
(
"Get DATE: %4d-%02d-%02d (wday=%d) TIME: %2d:%02d:%02d
\n
"
,
tmp
->
tm_year
,
tmp
->
tm_mon
,
tmp
->
tm_mday
,
tmp
->
tm_wday
,
tmp
->
tm_hour
,
tmp
->
tm_min
,
tmp
->
tm_sec
);
#endif
}
void
rtc_set
(
struct
rtc_time
*
tmp
)
{
uchar
save_ctrl_b
;
uchar
sec
,
min
,
hour
,
mday
,
wday
,
mon
,
year
;
#ifdef RTC_DEBUG
printf
(
"Set DATE: %4d-%02d-%02d (wday=%d) TIME: %2d:%02d:%02d
\n
"
,
tmp
->
tm_year
,
tmp
->
tm_mon
,
tmp
->
tm_mday
,
tmp
->
tm_wday
,
tmp
->
tm_hour
,
tmp
->
tm_min
,
tmp
->
tm_sec
);
#endif
if
(
!
(
rtc_read
(
RTC_CONTROL_B
)
&
RTC_CB_DM
))
{
/* Information is in BCD format */
year
=
bin2bcd
(
tmp
->
tm_year
%
100
);
mon
=
bin2bcd
(
tmp
->
tm_mon
);
wday
=
bin2bcd
(
tmp
->
tm_wday
);
mday
=
bin2bcd
(
tmp
->
tm_mday
);
hour
=
bin2bcd
(
tmp
->
tm_hour
);
min
=
bin2bcd
(
tmp
->
tm_min
);
sec
=
bin2bcd
(
tmp
->
tm_sec
);
}
else
{
year
=
tmp
->
tm_year
%
100
;
mon
=
tmp
->
tm_mon
;
wday
=
tmp
->
tm_wday
;
mday
=
tmp
->
tm_mday
;
hour
=
tmp
->
tm_hour
;
min
=
tmp
->
tm_min
;
sec
=
tmp
->
tm_sec
;
}
/* disables the RTC to update the regs */
save_ctrl_b
=
rtc_read
(
RTC_CONTROL_B
);
save_ctrl_b
|=
RTC_CB_SET
;
rtc_write
(
RTC_CONTROL_B
,
save_ctrl_b
);
rtc_write
(
RTC_YEAR
,
year
);
rtc_write
(
RTC_MONTH
,
mon
);
rtc_write
(
RTC_DAY_OF_WEEK
,
wday
);
rtc_write
(
RTC_DATE_OF_MONTH
,
mday
);
rtc_write
(
RTC_HOURS
,
hour
);
rtc_write
(
RTC_MINUTES
,
min
);
rtc_write
(
RTC_SECONDS
,
sec
);
/* enables the RTC to update the regs */
save_ctrl_b
&=
~
RTC_CB_SET
;
rtc_write
(
RTC_CONTROL_B
,
save_ctrl_b
);
}
void
rtc_reset
(
void
)
{
struct
rtc_time
tmp
;
uchar
ctrl_rg
;
ctrl_rg
=
RTC_CB_SET
;
rtc_write
(
RTC_CONTROL_B
,
ctrl_rg
);
tmp
.
tm_year
=
1970
%
100
;
tmp
.
tm_mon
=
1
;
tmp
.
tm_mday
=
1
;
tmp
.
tm_hour
=
0
;
tmp
.
tm_min
=
0
;
tmp
.
tm_sec
=
0
;
#ifdef RTC_DEBUG
printf
(
"RTC: %4d-%02d-%02d %2d:%02d:%02d UTC
\n
"
,
tmp
.
tm_year
,
tmp
.
tm_mon
,
tmp
.
tm_mday
,
tmp
.
tm_hour
,
tmp
.
tm_min
,
tmp
.
tm_sec
);
#endif
ctrl_rg
=
RTC_CB_SET
|
RTC_CB_24_12
|
RTC_CB_DM
;
rtc_write
(
RTC_CONTROL_B
,
ctrl_rg
);
rtc_set
(
&
tmp
);
rtc_write
(
RTC_HOURS_ALARM
,
0
),
rtc_write
(
RTC_MINUTES_ALARM
,
0
),
rtc_write
(
RTC_SECONDS_ALARM
,
0
);
ctrl_rg
=
RTC_CB_24_12
|
RTC_CB_DM
;
rtc_write
(
RTC_CONTROL_B
,
ctrl_rg
);
}
#endif
/* (CONFIG_RTC_DS12887) && (CONFIG_COMMANDS & CFG_CMD_DATE) */
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录