|
@@ -499,34 +499,24 @@ struct pl08x_lli_build_data {
|
|
|
* byte data), slave is still not aligned, then its width will be reduced to
|
|
|
* BYTE.
|
|
|
* - prefers the destination bus if both available
|
|
|
- * - if fixed address on one bus the other will be chosen
|
|
|
+ * - prefers bus with fixed address (i.e. peripheral)
|
|
|
*/
|
|
|
static void pl08x_choose_master_bus(struct pl08x_lli_build_data *bd,
|
|
|
struct pl08x_bus_data **mbus, struct pl08x_bus_data **sbus, u32 cctl)
|
|
|
{
|
|
|
if (!(cctl & PL080_CONTROL_DST_INCR)) {
|
|
|
- *mbus = &bd->srcbus;
|
|
|
- *sbus = &bd->dstbus;
|
|
|
- } else if (!(cctl & PL080_CONTROL_SRC_INCR)) {
|
|
|
*mbus = &bd->dstbus;
|
|
|
*sbus = &bd->srcbus;
|
|
|
+ } else if (!(cctl & PL080_CONTROL_SRC_INCR)) {
|
|
|
+ *mbus = &bd->srcbus;
|
|
|
+ *sbus = &bd->dstbus;
|
|
|
} else {
|
|
|
- if (bd->dstbus.buswidth == 4) {
|
|
|
- *mbus = &bd->dstbus;
|
|
|
- *sbus = &bd->srcbus;
|
|
|
- } else if (bd->srcbus.buswidth == 4) {
|
|
|
- *mbus = &bd->srcbus;
|
|
|
- *sbus = &bd->dstbus;
|
|
|
- } else if (bd->dstbus.buswidth == 2) {
|
|
|
+ if (bd->dstbus.buswidth >= bd->srcbus.buswidth) {
|
|
|
*mbus = &bd->dstbus;
|
|
|
*sbus = &bd->srcbus;
|
|
|
- } else if (bd->srcbus.buswidth == 2) {
|
|
|
+ } else {
|
|
|
*mbus = &bd->srcbus;
|
|
|
*sbus = &bd->dstbus;
|
|
|
- } else {
|
|
|
- /* bd->srcbus.buswidth == 1 */
|
|
|
- *mbus = &bd->dstbus;
|
|
|
- *sbus = &bd->srcbus;
|
|
|
}
|
|
|
}
|
|
|
}
|