.. | .. |
---|
72 | 72 | { |
---|
73 | 73 | int in, out, align; |
---|
74 | 74 | |
---|
| 75 | + /* The last piece has no need for length alignment */ |
---|
75 | 76 | in = IS_ALIGNED((u32)sg_src->offset, 4) && |
---|
76 | | - IS_ALIGNED((u32)sg_src->length, align_mask) && |
---|
| 77 | + (!sg_next(sg_src) || |
---|
| 78 | + IS_ALIGNED((u32)sg_src->length, align_mask)) && |
---|
77 | 79 | (sg_phys(sg_src) < SZ_4G); |
---|
78 | 80 | if (!sg_dst) |
---|
79 | 81 | return in; |
---|
80 | 82 | |
---|
| 83 | + /* The last piece has no need for length alignment */ |
---|
81 | 84 | out = IS_ALIGNED((u32)sg_dst->offset, 4) && |
---|
82 | | - IS_ALIGNED((u32)sg_dst->length, align_mask) && |
---|
| 85 | + (!sg_next(sg_dst) || |
---|
| 86 | + IS_ALIGNED((u32)sg_dst->length, align_mask)) && |
---|
83 | 87 | (sg_phys(sg_dst) < SZ_4G); |
---|
84 | 88 | align = in && out; |
---|
85 | 89 | |
---|