Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
Commits
3e48e656
Commit
3e48e656
authored
Sep 08, 2009
by
Dan Williams
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'iop-raid6' into async-tx-next
parents
a6417dd5
f6dbf651
Changes
4
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
577 additions
and
44 deletions
+577
-44
arch/arm/include/asm/hardware/iop3xx-adma.h
arch/arm/include/asm/hardware/iop3xx-adma.h
+76
-0
arch/arm/include/asm/hardware/iop_adma.h
arch/arm/include/asm/hardware/iop_adma.h
+1
-0
arch/arm/mach-iop13xx/include/mach/adma.h
arch/arm/mach-iop13xx/include/mach/adma.h
+107
-0
drivers/dma/iop-adma.c
drivers/dma/iop-adma.c
+393
-44
No files found.
arch/arm/include/asm/hardware/iop3xx-adma.h
View file @
3e48e656
...
@@ -187,11 +187,74 @@ union iop3xx_desc {
...
@@ -187,11 +187,74 @@ union iop3xx_desc {
void
*
ptr
;
void
*
ptr
;
};
};
/* No support for p+q operations */
static
inline
int
iop_chan_pq_slot_count
(
size_t
len
,
int
src_cnt
,
int
*
slots_per_op
)
{
BUG
();
return
0
;
}
static
inline
void
iop_desc_init_pq
(
struct
iop_adma_desc_slot
*
desc
,
int
src_cnt
,
unsigned
long
flags
)
{
BUG
();
}
static
inline
void
iop_desc_set_pq_addr
(
struct
iop_adma_desc_slot
*
desc
,
dma_addr_t
*
addr
)
{
BUG
();
}
static
inline
void
iop_desc_set_pq_src_addr
(
struct
iop_adma_desc_slot
*
desc
,
int
src_idx
,
dma_addr_t
addr
,
unsigned
char
coef
)
{
BUG
();
}
static
inline
int
iop_chan_pq_zero_sum_slot_count
(
size_t
len
,
int
src_cnt
,
int
*
slots_per_op
)
{
BUG
();
return
0
;
}
static
inline
void
iop_desc_init_pq_zero_sum
(
struct
iop_adma_desc_slot
*
desc
,
int
src_cnt
,
unsigned
long
flags
)
{
BUG
();
}
static
inline
void
iop_desc_set_pq_zero_sum_byte_count
(
struct
iop_adma_desc_slot
*
desc
,
u32
len
)
{
BUG
();
}
#define iop_desc_set_pq_zero_sum_src_addr iop_desc_set_pq_src_addr
static
inline
void
iop_desc_set_pq_zero_sum_addr
(
struct
iop_adma_desc_slot
*
desc
,
int
pq_idx
,
dma_addr_t
*
src
)
{
BUG
();
}
static
inline
int
iop_adma_get_max_xor
(
void
)
static
inline
int
iop_adma_get_max_xor
(
void
)
{
{
return
32
;
return
32
;
}
}
static
inline
int
iop_adma_get_max_pq
(
void
)
{
BUG
();
return
0
;
}
static
inline
u32
iop_chan_get_current_descriptor
(
struct
iop_adma_chan
*
chan
)
static
inline
u32
iop_chan_get_current_descriptor
(
struct
iop_adma_chan
*
chan
)
{
{
int
id
=
chan
->
device
->
id
;
int
id
=
chan
->
device
->
id
;
...
@@ -332,6 +395,11 @@ static inline int iop_chan_zero_sum_slot_count(size_t len, int src_cnt,
...
@@ -332,6 +395,11 @@ static inline int iop_chan_zero_sum_slot_count(size_t len, int src_cnt,
return
slot_cnt
;
return
slot_cnt
;
}
}
static
inline
int
iop_desc_is_pq
(
struct
iop_adma_desc_slot
*
desc
)
{
return
0
;
}
static
inline
u32
iop_desc_get_dest_addr
(
struct
iop_adma_desc_slot
*
desc
,
static
inline
u32
iop_desc_get_dest_addr
(
struct
iop_adma_desc_slot
*
desc
,
struct
iop_adma_chan
*
chan
)
struct
iop_adma_chan
*
chan
)
{
{
...
@@ -349,6 +417,14 @@ static inline u32 iop_desc_get_dest_addr(struct iop_adma_desc_slot *desc,
...
@@ -349,6 +417,14 @@ static inline u32 iop_desc_get_dest_addr(struct iop_adma_desc_slot *desc,
return
0
;
return
0
;
}
}
static
inline
u32
iop_desc_get_qdest_addr
(
struct
iop_adma_desc_slot
*
desc
,
struct
iop_adma_chan
*
chan
)
{
BUG
();
return
0
;
}
static
inline
u32
iop_desc_get_byte_count
(
struct
iop_adma_desc_slot
*
desc
,
static
inline
u32
iop_desc_get_byte_count
(
struct
iop_adma_desc_slot
*
desc
,
struct
iop_adma_chan
*
chan
)
struct
iop_adma_chan
*
chan
)
{
{
...
...
arch/arm/include/asm/hardware/iop_adma.h
View file @
3e48e656
...
@@ -106,6 +106,7 @@ struct iop_adma_desc_slot {
...
@@ -106,6 +106,7 @@ struct iop_adma_desc_slot {
union
{
union
{
u32
*
xor_check_result
;
u32
*
xor_check_result
;
u32
*
crc32_result
;
u32
*
crc32_result
;
u32
*
pq_check_result
;
};
};
};
};
...
...
arch/arm/mach-iop13xx/include/mach/adma.h
View file @
3e48e656
...
@@ -150,6 +150,8 @@ static inline int iop_adma_get_max_xor(void)
...
@@ -150,6 +150,8 @@ static inline int iop_adma_get_max_xor(void)
return
16
;
return
16
;
}
}
#define iop_adma_get_max_pq iop_adma_get_max_xor
static
inline
u32
iop_chan_get_current_descriptor
(
struct
iop_adma_chan
*
chan
)
static
inline
u32
iop_chan_get_current_descriptor
(
struct
iop_adma_chan
*
chan
)
{
{
return
__raw_readl
(
ADMA_ADAR
(
chan
));
return
__raw_readl
(
ADMA_ADAR
(
chan
));
...
@@ -211,7 +213,10 @@ iop_chan_xor_slot_count(size_t len, int src_cnt, int *slots_per_op)
...
@@ -211,7 +213,10 @@ iop_chan_xor_slot_count(size_t len, int src_cnt, int *slots_per_op)
#define IOP_ADMA_MAX_BYTE_COUNT ADMA_MAX_BYTE_COUNT
#define IOP_ADMA_MAX_BYTE_COUNT ADMA_MAX_BYTE_COUNT
#define IOP_ADMA_ZERO_SUM_MAX_BYTE_COUNT ADMA_MAX_BYTE_COUNT
#define IOP_ADMA_ZERO_SUM_MAX_BYTE_COUNT ADMA_MAX_BYTE_COUNT
#define IOP_ADMA_XOR_MAX_BYTE_COUNT ADMA_MAX_BYTE_COUNT
#define IOP_ADMA_XOR_MAX_BYTE_COUNT ADMA_MAX_BYTE_COUNT
#define IOP_ADMA_PQ_MAX_BYTE_COUNT ADMA_MAX_BYTE_COUNT
#define iop_chan_zero_sum_slot_count(l, s, o) iop_chan_xor_slot_count(l, s, o)
#define iop_chan_zero_sum_slot_count(l, s, o) iop_chan_xor_slot_count(l, s, o)
#define iop_chan_pq_slot_count iop_chan_xor_slot_count
#define iop_chan_pq_zero_sum_slot_count iop_chan_xor_slot_count
static
inline
u32
iop_desc_get_dest_addr
(
struct
iop_adma_desc_slot
*
desc
,
static
inline
u32
iop_desc_get_dest_addr
(
struct
iop_adma_desc_slot
*
desc
,
struct
iop_adma_chan
*
chan
)
struct
iop_adma_chan
*
chan
)
...
@@ -220,6 +225,13 @@ static inline u32 iop_desc_get_dest_addr(struct iop_adma_desc_slot *desc,
...
@@ -220,6 +225,13 @@ static inline u32 iop_desc_get_dest_addr(struct iop_adma_desc_slot *desc,
return
hw_desc
->
dest_addr
;
return
hw_desc
->
dest_addr
;
}
}
static
inline
u32
iop_desc_get_qdest_addr
(
struct
iop_adma_desc_slot
*
desc
,
struct
iop_adma_chan
*
chan
)
{
struct
iop13xx_adma_desc_hw
*
hw_desc
=
desc
->
hw_desc
;
return
hw_desc
->
q_dest_addr
;
}
static
inline
u32
iop_desc_get_byte_count
(
struct
iop_adma_desc_slot
*
desc
,
static
inline
u32
iop_desc_get_byte_count
(
struct
iop_adma_desc_slot
*
desc
,
struct
iop_adma_chan
*
chan
)
struct
iop_adma_chan
*
chan
)
{
{
...
@@ -319,6 +331,58 @@ iop_desc_init_zero_sum(struct iop_adma_desc_slot *desc, int src_cnt,
...
@@ -319,6 +331,58 @@ iop_desc_init_zero_sum(struct iop_adma_desc_slot *desc, int src_cnt,
return
1
;
return
1
;
}
}
static
inline
void
iop_desc_init_pq
(
struct
iop_adma_desc_slot
*
desc
,
int
src_cnt
,
unsigned
long
flags
)
{
struct
iop13xx_adma_desc_hw
*
hw_desc
=
desc
->
hw_desc
;
union
{
u32
value
;
struct
iop13xx_adma_desc_ctrl
field
;
}
u_desc_ctrl
;
u_desc_ctrl
.
value
=
0
;
u_desc_ctrl
.
field
.
src_select
=
src_cnt
-
1
;
u_desc_ctrl
.
field
.
xfer_dir
=
3
;
/* local to internal bus */
u_desc_ctrl
.
field
.
pq_xfer_en
=
1
;
u_desc_ctrl
.
field
.
p_xfer_dis
=
!!
(
flags
&
DMA_PREP_PQ_DISABLE_P
);
u_desc_ctrl
.
field
.
int_en
=
flags
&
DMA_PREP_INTERRUPT
;
hw_desc
->
desc_ctrl
=
u_desc_ctrl
.
value
;
}
static
inline
int
iop_desc_is_pq
(
struct
iop_adma_desc_slot
*
desc
)
{
struct
iop13xx_adma_desc_hw
*
hw_desc
=
desc
->
hw_desc
;
union
{
u32
value
;
struct
iop13xx_adma_desc_ctrl
field
;
}
u_desc_ctrl
;
u_desc_ctrl
.
value
=
hw_desc
->
desc_ctrl
;
return
u_desc_ctrl
.
field
.
pq_xfer_en
;
}
static
inline
void
iop_desc_init_pq_zero_sum
(
struct
iop_adma_desc_slot
*
desc
,
int
src_cnt
,
unsigned
long
flags
)
{
struct
iop13xx_adma_desc_hw
*
hw_desc
=
desc
->
hw_desc
;
union
{
u32
value
;
struct
iop13xx_adma_desc_ctrl
field
;
}
u_desc_ctrl
;
u_desc_ctrl
.
value
=
0
;
u_desc_ctrl
.
field
.
src_select
=
src_cnt
-
1
;
u_desc_ctrl
.
field
.
xfer_dir
=
3
;
/* local to internal bus */
u_desc_ctrl
.
field
.
zero_result
=
1
;
u_desc_ctrl
.
field
.
status_write_back_en
=
1
;
u_desc_ctrl
.
field
.
pq_xfer_en
=
1
;
u_desc_ctrl
.
field
.
p_xfer_dis
=
!!
(
flags
&
DMA_PREP_PQ_DISABLE_P
);
u_desc_ctrl
.
field
.
int_en
=
flags
&
DMA_PREP_INTERRUPT
;
hw_desc
->
desc_ctrl
=
u_desc_ctrl
.
value
;
}
static
inline
void
iop_desc_set_byte_count
(
struct
iop_adma_desc_slot
*
desc
,
static
inline
void
iop_desc_set_byte_count
(
struct
iop_adma_desc_slot
*
desc
,
struct
iop_adma_chan
*
chan
,
struct
iop_adma_chan
*
chan
,
u32
byte_count
)
u32
byte_count
)
...
@@ -351,6 +415,7 @@ iop_desc_set_zero_sum_byte_count(struct iop_adma_desc_slot *desc, u32 len)
...
@@ -351,6 +415,7 @@ iop_desc_set_zero_sum_byte_count(struct iop_adma_desc_slot *desc, u32 len)
}
}
}
}
#define iop_desc_set_pq_zero_sum_byte_count iop_desc_set_zero_sum_byte_count
static
inline
void
iop_desc_set_dest_addr
(
struct
iop_adma_desc_slot
*
desc
,
static
inline
void
iop_desc_set_dest_addr
(
struct
iop_adma_desc_slot
*
desc
,
struct
iop_adma_chan
*
chan
,
struct
iop_adma_chan
*
chan
,
...
@@ -361,6 +426,16 @@ static inline void iop_desc_set_dest_addr(struct iop_adma_desc_slot *desc,
...
@@ -361,6 +426,16 @@ static inline void iop_desc_set_dest_addr(struct iop_adma_desc_slot *desc,
hw_desc
->
upper_dest_addr
=
0
;
hw_desc
->
upper_dest_addr
=
0
;
}
}
static
inline
void
iop_desc_set_pq_addr
(
struct
iop_adma_desc_slot
*
desc
,
dma_addr_t
*
addr
)
{
struct
iop13xx_adma_desc_hw
*
hw_desc
=
desc
->
hw_desc
;
hw_desc
->
dest_addr
=
addr
[
0
];
hw_desc
->
q_dest_addr
=
addr
[
1
];
hw_desc
->
upper_dest_addr
=
0
;
}
static
inline
void
iop_desc_set_memcpy_src_addr
(
struct
iop_adma_desc_slot
*
desc
,
static
inline
void
iop_desc_set_memcpy_src_addr
(
struct
iop_adma_desc_slot
*
desc
,
dma_addr_t
addr
)
dma_addr_t
addr
)
{
{
...
@@ -388,6 +463,29 @@ static inline void iop_desc_set_xor_src_addr(struct iop_adma_desc_slot *desc,
...
@@ -388,6 +463,29 @@ static inline void iop_desc_set_xor_src_addr(struct iop_adma_desc_slot *desc,
}
while
(
slot_cnt
);
}
while
(
slot_cnt
);
}
}
static
inline
void
iop_desc_set_pq_src_addr
(
struct
iop_adma_desc_slot
*
desc
,
int
src_idx
,
dma_addr_t
addr
,
unsigned
char
coef
)
{
int
slot_cnt
=
desc
->
slot_cnt
,
slots_per_op
=
desc
->
slots_per_op
;
struct
iop13xx_adma_desc_hw
*
hw_desc
=
desc
->
hw_desc
,
*
iter
;
struct
iop13xx_adma_src
*
src
;
int
i
=
0
;
do
{
iter
=
iop_hw_desc_slot_idx
(
hw_desc
,
i
);
src
=
&
iter
->
src
[
src_idx
];
src
->
src_addr
=
addr
;
src
->
pq_upper_src_addr
=
0
;
src
->
pq_dmlt
=
coef
;
slot_cnt
-=
slots_per_op
;
if
(
slot_cnt
)
{
i
+=
slots_per_op
;
addr
+=
IOP_ADMA_PQ_MAX_BYTE_COUNT
;
}
}
while
(
slot_cnt
);
}
static
inline
void
static
inline
void
iop_desc_init_interrupt
(
struct
iop_adma_desc_slot
*
desc
,
iop_desc_init_interrupt
(
struct
iop_adma_desc_slot
*
desc
,
struct
iop_adma_chan
*
chan
)
struct
iop_adma_chan
*
chan
)
...
@@ -399,6 +497,15 @@ iop_desc_init_interrupt(struct iop_adma_desc_slot *desc,
...
@@ -399,6 +497,15 @@ iop_desc_init_interrupt(struct iop_adma_desc_slot *desc,
}
}
#define iop_desc_set_zero_sum_src_addr iop_desc_set_xor_src_addr
#define iop_desc_set_zero_sum_src_addr iop_desc_set_xor_src_addr
#define iop_desc_set_pq_zero_sum_src_addr iop_desc_set_pq_src_addr
static
inline
void
iop_desc_set_pq_zero_sum_addr
(
struct
iop_adma_desc_slot
*
desc
,
int
pq_idx
,
dma_addr_t
*
src
)
{
iop_desc_set_xor_src_addr
(
desc
,
pq_idx
,
src
[
pq_idx
]);
iop_desc_set_xor_src_addr
(
desc
,
pq_idx
+
1
,
src
[
pq_idx
+
1
]);
}
static
inline
void
iop_desc_set_next_desc
(
struct
iop_adma_desc_slot
*
desc
,
static
inline
void
iop_desc_set_next_desc
(
struct
iop_adma_desc_slot
*
desc
,
u32
next_desc_addr
)
u32
next_desc_addr
)
...
...
drivers/dma/iop-adma.c
View file @
3e48e656
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment