X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=arch%2Farm%2Fmach-bcm283x%2Fmbox.c;h=ec3f417f40f4356669570245d1c4ecaefcaffb5d;hb=3e9f8f2f5101ee66804c29683fba90b8e307a314;hp=3b17a31eacfd6e5ab092e53bca87c4d0d408ca92;hpb=1d2f74690cace803844bce198a6d5fa1b6cd11f9;p=u-boot diff --git a/arch/arm/mach-bcm283x/mbox.c b/arch/arm/mach-bcm283x/mbox.c index 3b17a31eac..ec3f417f40 100644 --- a/arch/arm/mach-bcm283x/mbox.c +++ b/arch/arm/mach-bcm283x/mbox.c @@ -7,6 +7,7 @@ #include #include #include +#include #define TIMEOUT 1000 /* ms */ @@ -110,10 +111,21 @@ int bcm2835_mbox_call_prop(u32 chan, struct bcm2835_mbox_hdr *buffer) dump_buf(buffer); #endif - ret = bcm2835_mbox_call_raw(chan, (u32)buffer, &rbuffer); + flush_dcache_range((unsigned long)buffer, + (unsigned long)((void *)buffer + + roundup(buffer->buf_size, ARCH_DMA_MINALIGN))); + + ret = bcm2835_mbox_call_raw(chan, + phys_to_bus((unsigned long)buffer), + &rbuffer); if (ret) return ret; - if (rbuffer != (u32)buffer) { + + invalidate_dcache_range((unsigned long)buffer, + (unsigned long)((void *)buffer + + roundup(buffer->buf_size, ARCH_DMA_MINALIGN))); + + if (rbuffer != phys_to_bus((unsigned long)buffer)) { printf("mbox: Response buffer mismatch\n"); return -1; }