|
@@ -27,6 +27,7 @@
|
|
|
#include <linux/mutex.h>
|
|
|
#include <linux/goldfish.h>
|
|
|
#include <asm/div64.h>
|
|
|
+#include <linux/dma-mapping.h>
|
|
|
|
|
|
#include "goldfish_nand_reg.h"
|
|
|
|
|
@@ -284,17 +285,18 @@ invalid_arg:
|
|
|
static int nand_setup_cmd_params(struct platform_device *pdev,
|
|
|
struct goldfish_nand *nand)
|
|
|
{
|
|
|
- u64 paddr;
|
|
|
+ dma_addr_t dma_handle;
|
|
|
unsigned char __iomem *base = nand->base;
|
|
|
|
|
|
- nand->cmd_params = devm_kzalloc(&pdev->dev,
|
|
|
- sizeof(struct cmd_params), GFP_KERNEL);
|
|
|
- if (!nand->cmd_params)
|
|
|
- return -1;
|
|
|
-
|
|
|
- paddr = __pa(nand->cmd_params);
|
|
|
- writel((u32)(paddr >> 32), base + NAND_CMD_PARAMS_ADDR_HIGH);
|
|
|
- writel((u32)paddr, base + NAND_CMD_PARAMS_ADDR_LOW);
|
|
|
+ nand->cmd_params = dmam_alloc_coherent(&pdev->dev,
|
|
|
+ sizeof(struct cmd_params),
|
|
|
+ &dma_handle, GFP_KERNEL);
|
|
|
+ if (!nand->cmd_params) {
|
|
|
+ dev_err(&pdev->dev, "allocate buffer failed\n");
|
|
|
+ return -ENOMEM;
|
|
|
+ }
|
|
|
+ writel((u32)((u64)dma_handle >> 32), base + NAND_CMD_PARAMS_ADDR_HIGH);
|
|
|
+ writel((u32)dma_handle, base + NAND_CMD_PARAMS_ADDR_LOW);
|
|
|
return 0;
|
|
|
}
|
|
|
|