Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
U
u-boot-2015.04
Manage
Activity
Members
Code
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Deploy
Releases
Container Registry
Model registry
Analyze
Contributor analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
vesta
u-boot-2015.04
Commits
a7323bba
Commit
a7323bba
authored
16 years ago
by
TsiChung Liew
Committed by
John Rigby
16 years ago
Browse files
Options
Downloads
Patches
Plain Diff
ColdFire: Add SSPI feature for MCF5445x
Signed-off-by:
TsiChung Liew
<
Tsi-Chung.Liew@freescale.com
>
parent
b2d022d1
No related branches found
Branches containing commit
No related tags found
No related merge requests found
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
cpu/mcf5445x/dspi.c
+172
-6
172 additions, 6 deletions
cpu/mcf5445x/dspi.c
include/configs/M54455EVB.h
+15
-1
15 additions, 1 deletion
include/configs/M54455EVB.h
lib_m68k/board.c
+17
-0
17 additions, 0 deletions
lib_m68k/board.c
with
204 additions
and
7 deletions
cpu/mcf5445x/dspi.c
+
172
−
6
View file @
a7323bba
...
@@ -27,9 +27,11 @@
...
@@ -27,9 +27,11 @@
#include
<common.h>
#include
<common.h>
#include
<spi.h>
#include
<spi.h>
#include
<malloc.h>
#if defined(CONFIG_CF_DSPI)
#if defined(CONFIG_CF_DSPI)
#include
<asm/immap.h>
#include
<asm/immap.h>
void
dspi_init
(
void
)
void
dspi_init
(
void
)
{
{
volatile
gpio_t
*
gpio
=
(
gpio_t
*
)
MMAP_GPIO
;
volatile
gpio_t
*
gpio
=
(
gpio_t
*
)
MMAP_GPIO
;
...
@@ -45,11 +47,30 @@ void dspi_init(void)
...
@@ -45,11 +47,30 @@ void dspi_init(void)
DSPI_DMCR_CSIS2
|
DSPI_DMCR_CSIS1
|
DSPI_DMCR_CSIS0
|
DSPI_DMCR_CSIS2
|
DSPI_DMCR_CSIS1
|
DSPI_DMCR_CSIS0
|
DSPI_DMCR_CRXF
|
DSPI_DMCR_CTXF
;
DSPI_DMCR_CRXF
|
DSPI_DMCR_CTXF
;
dspi
->
dctar0
=
DSPI_DCTAR_TRSZ
(
7
)
|
DSPI_DCTAR_CPOL
|
DSPI_DCTAR_CPHA
|
#ifdef CFG_DSPI_DCTAR0
DSPI_DCTAR_PCSSCK_1CLK
|
DSPI_DCTAR_PASC
(
0
)
|
dspi
->
dctar0
=
CFG_DSPI_DCTAR0
;
DSPI_DCTAR_PDT
(
0
)
|
DSPI_DCTAR_CSSCK
(
0
)
|
#endif
DSPI_DCTAR_ASC
(
0
)
|
DSPI_DCTAR_PBR
(
0
)
|
#ifdef CFG_DSPI_DCTAR1
DSPI_DCTAR_DT
(
1
)
|
DSPI_DCTAR_BR
(
1
);
dspi
->
dctar1
=
CFG_DSPI_DCTAR1
;
#endif
#ifdef CFG_DSPI_DCTAR2
dspi
->
dctar2
=
CFG_DSPI_DCTAR2
;
#endif
#ifdef CFG_DSPI_DCTAR3
dspi
->
dctar3
=
CFG_DSPI_DCTAR3
;
#endif
#ifdef CFG_DSPI_DCTAR4
dspi
->
dctar4
=
CFG_DSPI_DCTAR4
;
#endif
#ifdef CFG_DSPI_DCTAR5
dspi
->
dctar5
=
CFG_DSPI_DCTAR5
;
#endif
#ifdef CFG_DSPI_DCTAR6
dspi
->
dctar6
=
CFG_DSPI_DCTAR6
;
#endif
#ifdef CFG_DSPI_DCTAR7
dspi
->
dctar7
=
CFG_DSPI_DCTAR7
;
#endif
}
}
void
dspi_tx
(
int
chipsel
,
u8
attrib
,
u16
data
)
void
dspi_tx
(
int
chipsel
,
u8
attrib
,
u16
data
)
...
@@ -70,4 +91,149 @@ u16 dspi_rx(void)
...
@@ -70,4 +91,149 @@ u16 dspi_rx(void)
return
(
dspi
->
drfr
&
0xFFFF
);
return
(
dspi
->
drfr
&
0xFFFF
);
}
}
#endif
/* CONFIG_HARD_SPI */
#if defined(CONFIG_CMD_SPI)
void
spi_init_f
(
void
)
{
}
void
spi_init_r
(
void
)
{
}
void
spi_init
(
void
)
{
dspi_init
();
}
struct
spi_slave
*
spi_setup_slave
(
unsigned
int
bus
,
unsigned
int
cs
,
unsigned
int
max_hz
,
unsigned
int
mode
)
{
struct
spi_slave
*
slave
;
slave
=
malloc
(
sizeof
(
struct
spi_slave
));
if
(
!
slave
)
return
NULL
;
slave
->
bus
=
bus
;
slave
->
cs
=
cs
;
return
slave
;
}
void
spi_free_slave
(
struct
spi_slave
*
slave
)
{
free
(
slave
);
}
int
spi_claim_bus
(
struct
spi_slave
*
slave
)
{
return
0
;
}
void
spi_release_bus
(
struct
spi_slave
*
slave
)
{
}
int
spi_xfer
(
struct
spi_slave
*
slave
,
unsigned
int
bitlen
,
const
void
*
dout
,
void
*
din
,
unsigned
long
flags
)
{
static
int
bWrite
=
0
;
u8
*
spi_rd
,
*
spi_wr
;
int
len
=
bitlen
>>
3
;
spi_rd
=
(
u8
*
)
din
;
spi_wr
=
(
u8
*
)
dout
;
/* command handling */
if
(((
len
==
4
)
||
(
len
==
1
)
||
(
len
==
5
))
&&
(
dout
!=
NULL
))
{
switch
(
*
spi_wr
)
{
case
0x02
:
/* Page Prog */
bWrite
=
1
;
dspi_tx
(
slave
->
cs
,
0x80
,
spi_wr
[
0
]);
dspi_rx
();
dspi_tx
(
slave
->
cs
,
0x80
,
spi_wr
[
1
]);
dspi_rx
();
dspi_tx
(
slave
->
cs
,
0x80
,
spi_wr
[
2
]);
dspi_rx
();
dspi_tx
(
slave
->
cs
,
0x80
,
spi_wr
[
3
]);
dspi_rx
();
return
0
;
case
0x05
:
/* Read Status */
if
(
len
==
4
)
if
((
spi_wr
[
1
]
==
0xFF
)
&&
(
spi_wr
[
2
]
==
0xFF
)
&&
(
spi_wr
[
3
]
==
0xFF
))
{
dspi_tx
(
slave
->
cs
,
0x80
,
*
spi_wr
);
dspi_rx
();
}
return
0
;
case
0x06
:
/* WREN */
dspi_tx
(
slave
->
cs
,
0x00
,
*
spi_wr
);
dspi_rx
();
return
0
;
case
0x0B
:
/* Fast read */
if
((
len
==
5
)
&&
(
spi_wr
[
4
]
==
0
))
{
dspi_tx
(
slave
->
cs
,
0x80
,
spi_wr
[
0
]);
dspi_rx
();
dspi_tx
(
slave
->
cs
,
0x80
,
spi_wr
[
1
]);
dspi_rx
();
dspi_tx
(
slave
->
cs
,
0x80
,
spi_wr
[
2
]);
dspi_rx
();
dspi_tx
(
slave
->
cs
,
0x80
,
spi_wr
[
3
]);
dspi_rx
();
dspi_tx
(
slave
->
cs
,
0x80
,
spi_wr
[
4
]);
dspi_rx
();
}
return
0
;
case
0x9F
:
/* RDID */
dspi_tx
(
slave
->
cs
,
0x80
,
*
spi_wr
);
dspi_rx
();
return
0
;
case
0xD8
:
/* Sector erase */
if
(
len
==
4
)
if
((
spi_wr
[
2
]
==
0
)
&&
(
spi_wr
[
3
]
==
0
))
{
dspi_tx
(
slave
->
cs
,
0x80
,
spi_wr
[
0
]);
dspi_rx
();
dspi_tx
(
slave
->
cs
,
0x80
,
spi_wr
[
1
]);
dspi_rx
();
dspi_tx
(
slave
->
cs
,
0x80
,
spi_wr
[
2
]);
dspi_rx
();
dspi_tx
(
slave
->
cs
,
0x00
,
spi_wr
[
3
]);
dspi_rx
();
}
return
0
;
}
}
if
(
bWrite
)
len
--
;
while
(
len
--
)
{
if
(
dout
!=
NULL
)
{
dspi_tx
(
slave
->
cs
,
0x80
,
*
spi_wr
);
dspi_rx
();
spi_wr
++
;
}
if
(
din
!=
NULL
)
{
dspi_tx
(
slave
->
cs
,
0x80
,
0
);
*
spi_rd
=
dspi_rx
();
spi_rd
++
;
}
}
if
(
flags
==
SPI_XFER_END
)
{
if
(
bWrite
)
{
dspi_tx
(
slave
->
cs
,
0x00
,
*
spi_wr
);
dspi_rx
();
bWrite
=
0
;
}
else
{
dspi_tx
(
slave
->
cs
,
0x00
,
0
);
dspi_rx
();
}
}
return
0
;
}
#endif
/* CONFIG_CMD_SPI */
#endif
/* CONFIG_CF_DSPI */
This diff is collapsed.
Click to expand it.
include/configs/M54455EVB.h
+
15
−
1
View file @
a7323bba
...
@@ -76,6 +76,7 @@
...
@@ -76,6 +76,7 @@
#undef CONFIG_CMD_PCI
#undef CONFIG_CMD_PCI
#define CONFIG_CMD_PING
#define CONFIG_CMD_PING
#define CONFIG_CMD_REGINFO
#define CONFIG_CMD_REGINFO
#define CONFIG_CMD_SPI
#undef CONFIG_CMD_LOADB
#undef CONFIG_CMD_LOADB
#undef CONFIG_CMD_LOADS
#undef CONFIG_CMD_LOADS
...
@@ -173,7 +174,20 @@
...
@@ -173,7 +174,20 @@
/* DSPI and Serial Flash */
/* DSPI and Serial Flash */
#define CONFIG_CF_DSPI
#define CONFIG_CF_DSPI
#define CONFIG_SERIAL_FLASH
#define CONFIG_HARD_SPI
#ifdef CONFIG_CMD_SPI
# define CFG_DSPI_DCTAR0 (DSPI_DCTAR_TRSZ(7) | \
DSPI_DCTAR_CPOL | \
DSPI_DCTAR_CPHA | \
DSPI_DCTAR_PCSSCK_1CLK | \
DSPI_DCTAR_PASC(0) | \
DSPI_DCTAR_PDT(0) | \
DSPI_DCTAR_CSSCK(0) | \
DSPI_DCTAR_ASC(0) | \
DSPI_DCTAR_PBR(0) | \
DSPI_DCTAR_DT(1) | \
DSPI_DCTAR_BR(1))
#endif
/* PCI */
/* PCI */
#ifdef CONFIG_CMD_PCI
#ifdef CONFIG_CMD_PCI
...
...
This diff is collapsed.
Click to expand it.
lib_m68k/board.c
+
17
−
0
View file @
a7323bba
...
@@ -59,6 +59,10 @@
...
@@ -59,6 +59,10 @@
#include
<i2c.h>
#include
<i2c.h>
#endif
#endif
#ifdef CONFIG_CMD_SPI
#include
<spi.h>
#endif
DECLARE_GLOBAL_DATA_PTR
;
DECLARE_GLOBAL_DATA_PTR
;
static
char
*
failed
=
"*** failed ***
\n
"
;
static
char
*
failed
=
"*** failed ***
\n
"
;
...
@@ -212,6 +216,16 @@ static int init_func_i2c (void)
...
@@ -212,6 +216,16 @@ static int init_func_i2c (void)
}
}
#endif
#endif
#if defined(CONFIG_HARD_SPI)
static
int
init_func_spi
(
void
)
{
puts
(
"SPI: "
);
spi_init
();
puts
(
"ready
\n
"
);
return
(
0
);
}
#endif
/***********************************************************************/
/***********************************************************************/
/************************************************************************
/************************************************************************
...
@@ -230,6 +244,9 @@ init_fnc_t *init_sequence[] = {
...
@@ -230,6 +244,9 @@ init_fnc_t *init_sequence[] = {
checkboard
,
checkboard
,
#if defined(CONFIG_HARD_I2C) || defined(CONFIG_SOFT_I2C)
#if defined(CONFIG_HARD_I2C) || defined(CONFIG_SOFT_I2C)
init_func_i2c
,
init_func_i2c
,
#endif
#if defined(CONFIG_HARD_SPI)
init_func_spi
,
#endif
#endif
init_func_ram
,
init_func_ram
,
#if defined(CFG_DRAM_TEST)
#if defined(CFG_DRAM_TEST)
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment