From 01d36b492d0963ec9cfd231058e566d4a39ee8e1 Mon Sep 17 00:00:00 2001 From: "Yann E. MORIN" Date: Wed, 18 Feb 2015 12:46:07 +0100 Subject: [PATCH] char/vc_cma: fix build with LPAE enabled MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit LPAE is required for virtualisation on ARM. However, enabling LPAE results in an unbuildable configuration, due to improper formats used in vc_cma: CC drivers/char/broadcom/vc_cma/vc_cma.o drivers/char/broadcom/vc_cma/vc_cma.c: In function ‘vc_cma_alloc_chunks’: drivers/char/broadcom/vc_cma/vc_cma.c:547:4: error: format ‘%x’ expects argument of type ‘unsigned int’, but argument 4 has type ‘phys_addr_t’ [-Werror=format=] LOG_ERR("%s: chunk phys %x, vc_cma %x-%x - " ^ drivers/char/broadcom/vc_cma/vc_cma.c:547:4: error: format ‘%x’ expects argument of type ‘unsigned int’, but argument 5 has type ‘phys_addr_t’ [-Werror=format=] drivers/char/broadcom/vc_cma/vc_cma.c: In function ‘cma_worker_proc’: drivers/char/broadcom/vc_cma/vc_cma.c:677:7: error: format ‘%x’ expects argument of type ‘unsigned int’, but argument 3 has type ‘long long unsigned int’ [-Werror=format=] LOG_ERR ^ drivers/char/broadcom/vc_cma/vc_cma.c: In function ‘vc_cma_init’: drivers/char/broadcom/vc_cma/vc_cma.c:1027:2: error: format ‘%x’ expects argument of type ‘unsigned int’, but argument 2 has type ‘phys_addr_t’ [-Werror=format=] printk(KERN_INFO "vc-cma: vc_cma_base = 0x%08x\n", vc_cma_base); ^ cc1: all warnings being treated as errors make[6]: *** [drivers/char/broadcom/vc_cma/vc_cma.o] Error 1 As explained in Documentation/printk-formats.txt, printing a physical address phys_addr_t should be done using the %pa[p] format, which expects a "reference" to the value. Even if virtualisation is currently not possible (due to the bootloader starting the kernel in SVC, not HYP, mode), fix the printk formats nonetheless, it will anyway give better-looking code! ;-) Signed-off-by: "Yann E. MORIN" --- drivers/char/broadcom/vc_cma/vc_cma.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/drivers/char/broadcom/vc_cma/vc_cma.c b/drivers/char/broadcom/vc_cma/vc_cma.c index a635f9f9c5cd32..36857e85773b67 100644 --- a/drivers/char/broadcom/vc_cma/vc_cma.c +++ b/drivers/char/broadcom/vc_cma/vc_cma.c @@ -542,12 +542,13 @@ static int vc_cma_alloc_chunks(int num_chunks, struct cma_msg *reply) BUG_ON(((page_to_phys(chunk) - vc_cma_base) % VC_CMA_CHUNK_SIZE) != 0); if (chunk_num >= vc_cma_chunks) { + phys_addr_t _pa = vc_cma_base + vc_cma_size - 1; LOG_ERR("%s: ===============================", __func__); - LOG_ERR("%s: chunk phys %x, vc_cma %x-%x - " + LOG_ERR("%s: chunk phys %x, vc_cma %pa-%pa - " "bad SPARSEMEM configuration?", __func__, (unsigned int)page_to_phys(chunk), - vc_cma_base, vc_cma_base + vc_cma_size - 1); + &vc_cma_base, &_pa); LOG_ERR("%s: dev->cma_area = %p\n", __func__, (void*)0/*vc_cma_device.dev.cma_area*/); LOG_ERR("%s: ===============================", @@ -674,11 +675,12 @@ static int cma_worker_proc(void *param) if (!dma_release_from_contiguous (NULL /*&vc_cma_device.dev*/, page, PAGES_PER_CHUNK)) { + phys_addr_t _pa = page_to_phys(page); LOG_ERR ("CMA_MSG_FREE - failed to " - "release chunk %d (phys %x, " + "release chunk %d (phys %pa, " "page %x)", chunk_num, - page_to_phys(page), + &_pa, (unsigned int)page); } vc_cma_chunks_used--; @@ -1024,7 +1026,7 @@ static int vc_cma_init(void) goto out_release; printk(KERN_INFO "vc-cma: Videocore CMA driver\n"); - printk(KERN_INFO "vc-cma: vc_cma_base = 0x%08x\n", vc_cma_base); + printk(KERN_INFO "vc-cma: vc_cma_base = 0x%pa\n", &vc_cma_base); printk(KERN_INFO "vc-cma: vc_cma_size = 0x%08x (%u MiB)\n", vc_cma_size, vc_cma_size / (1024 * 1024)); printk(KERN_INFO "vc-cma: vc_cma_initial = 0x%08x (%u MiB)\n",