Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 494fd07a authored by Stephen Rothwell's avatar Stephen Rothwell Committed by Benjamin Herrenschmidt
Browse files

powerpc/ps3: Use dma_addr_t down through the stack



Push the dma_addr_t type usage all the way down to where the actual
values are manipulated.

Now that u64 is "unsigned long long", this removes warnings like:

arch/powerpc/platforms/ps3/system-bus.c:532: warning: passing argument 4 of 'ps3_dma_map' from incompatible pointer type
arch/powerpc/platforms/ps3/system-bus.c:649: warning: passing argument 4 of 'ps3_dma_map' from incompatible pointer type

Signed-off-by: default avatarStephen Rothwell <sfr@canb.auug.org.au>
Acked-by: default avatarGeoff Levand <geoffrey.levand@am.sony.com>
Signed-off-by: default avatarBenjamin Herrenschmidt <benh@kernel.crashing.org>
parent c52fe6b6
Loading
Loading
Loading
Loading
+4 −4
Original line number Original line Diff line number Diff line
@@ -103,10 +103,10 @@ struct ps3_dma_region_ops {
	int (*map)(struct ps3_dma_region *,
	int (*map)(struct ps3_dma_region *,
		   unsigned long virt_addr,
		   unsigned long virt_addr,
		   unsigned long len,
		   unsigned long len,
		   unsigned long *bus_addr,
		   dma_addr_t *bus_addr,
		   u64 iopte_pp);
		   u64 iopte_pp);
	int (*unmap)(struct ps3_dma_region *,
	int (*unmap)(struct ps3_dma_region *,
		     unsigned long bus_addr,
		     dma_addr_t bus_addr,
		     unsigned long len);
		     unsigned long len);
};
};
/**
/**
@@ -124,9 +124,9 @@ int ps3_dma_region_init(struct ps3_system_bus_device *dev,
int ps3_dma_region_create(struct ps3_dma_region *r);
int ps3_dma_region_create(struct ps3_dma_region *r);
int ps3_dma_region_free(struct ps3_dma_region *r);
int ps3_dma_region_free(struct ps3_dma_region *r);
int ps3_dma_map(struct ps3_dma_region *r, unsigned long virt_addr,
int ps3_dma_map(struct ps3_dma_region *r, unsigned long virt_addr,
	unsigned long len, unsigned long *bus_addr,
	unsigned long len, dma_addr_t *bus_addr,
	u64 iopte_pp);
	u64 iopte_pp);
int ps3_dma_unmap(struct ps3_dma_region *r, unsigned long bus_addr,
int ps3_dma_unmap(struct ps3_dma_region *r, dma_addr_t bus_addr,
	unsigned long len);
	unsigned long len);


/* mmio routines */
/* mmio routines */
+17 −15
Original line number Original line Diff line number Diff line
@@ -777,7 +777,7 @@ static int dma_ioc0_region_free(struct ps3_dma_region *r)
 */
 */


static int dma_sb_map_area(struct ps3_dma_region *r, unsigned long virt_addr,
static int dma_sb_map_area(struct ps3_dma_region *r, unsigned long virt_addr,
	   unsigned long len, unsigned long *bus_addr,
	   unsigned long len, dma_addr_t *bus_addr,
	   u64 iopte_flag)
	   u64 iopte_flag)
{
{
	int result;
	int result;
@@ -800,7 +800,7 @@ static int dma_sb_map_area(struct ps3_dma_region *r, unsigned long virt_addr,
		DBG("%s:%d lpar_addr %lxh\n", __func__, __LINE__,
		DBG("%s:%d lpar_addr %lxh\n", __func__, __LINE__,
			lpar_addr);
			lpar_addr);
		DBG("%s:%d len       %lxh\n", __func__, __LINE__, len);
		DBG("%s:%d len       %lxh\n", __func__, __LINE__, len);
		DBG("%s:%d bus_addr  %lxh (%lxh)\n", __func__, __LINE__,
		DBG("%s:%d bus_addr  %llxh (%lxh)\n", __func__, __LINE__,
		*bus_addr, len);
		*bus_addr, len);
	}
	}


@@ -832,7 +832,7 @@ static int dma_sb_map_area(struct ps3_dma_region *r, unsigned long virt_addr,
}
}


static int dma_ioc0_map_area(struct ps3_dma_region *r, unsigned long virt_addr,
static int dma_ioc0_map_area(struct ps3_dma_region *r, unsigned long virt_addr,
	     unsigned long len, unsigned long *bus_addr,
	     unsigned long len, dma_addr_t *bus_addr,
	     u64 iopte_flag)
	     u64 iopte_flag)
{
{
	int result;
	int result;
@@ -872,7 +872,7 @@ static int dma_ioc0_map_area(struct ps3_dma_region *r, unsigned long virt_addr,
		return result;
		return result;
	}
	}
	*bus_addr = c->bus_addr + phys_addr - aligned_phys;
	*bus_addr = c->bus_addr + phys_addr - aligned_phys;
	DBG("%s: va=%#lx pa=%#lx a_pa=%#lx bus=%#lx\n", __func__,
	DBG("%s: va=%#lx pa=%#lx a_pa=%#lx bus=%#llx\n", __func__,
	    virt_addr, phys_addr, aligned_phys, *bus_addr);
	    virt_addr, phys_addr, aligned_phys, *bus_addr);
	c->usage_count = 1;
	c->usage_count = 1;


@@ -889,7 +889,7 @@ static int dma_ioc0_map_area(struct ps3_dma_region *r, unsigned long virt_addr,
 * This is the common dma unmap routine.
 * This is the common dma unmap routine.
 */
 */


static int dma_sb_unmap_area(struct ps3_dma_region *r, unsigned long bus_addr,
static int dma_sb_unmap_area(struct ps3_dma_region *r, dma_addr_t bus_addr,
	unsigned long len)
	unsigned long len)
{
{
	unsigned long flags;
	unsigned long flags;
@@ -903,7 +903,7 @@ static int dma_sb_unmap_area(struct ps3_dma_region *r, unsigned long bus_addr,
			1 << r->page_size);
			1 << r->page_size);
		unsigned long aligned_len = _ALIGN_UP(len + bus_addr
		unsigned long aligned_len = _ALIGN_UP(len + bus_addr
			- aligned_bus, 1 << r->page_size);
			- aligned_bus, 1 << r->page_size);
		DBG("%s:%d: not found: bus_addr %lxh\n",
		DBG("%s:%d: not found: bus_addr %llxh\n",
			__func__, __LINE__, bus_addr);
			__func__, __LINE__, bus_addr);
		DBG("%s:%d: not found: len %lxh\n",
		DBG("%s:%d: not found: len %lxh\n",
			__func__, __LINE__, len);
			__func__, __LINE__, len);
@@ -926,12 +926,12 @@ static int dma_sb_unmap_area(struct ps3_dma_region *r, unsigned long bus_addr,
}
}


static int dma_ioc0_unmap_area(struct ps3_dma_region *r,
static int dma_ioc0_unmap_area(struct ps3_dma_region *r,
			unsigned long bus_addr, unsigned long len)
			dma_addr_t bus_addr, unsigned long len)
{
{
	unsigned long flags;
	unsigned long flags;
	struct dma_chunk *c;
	struct dma_chunk *c;


	DBG("%s: start a=%#lx l=%#lx\n", __func__, bus_addr, len);
	DBG("%s: start a=%#llx l=%#lx\n", __func__, bus_addr, len);
	spin_lock_irqsave(&r->chunk_list.lock, flags);
	spin_lock_irqsave(&r->chunk_list.lock, flags);
	c = dma_find_chunk(r, bus_addr, len);
	c = dma_find_chunk(r, bus_addr, len);


@@ -941,7 +941,7 @@ static int dma_ioc0_unmap_area(struct ps3_dma_region *r,
		unsigned long aligned_len = _ALIGN_UP(len + bus_addr
		unsigned long aligned_len = _ALIGN_UP(len + bus_addr
						      - aligned_bus,
						      - aligned_bus,
						      1 << r->page_size);
						      1 << r->page_size);
		DBG("%s:%d: not found: bus_addr %lxh\n",
		DBG("%s:%d: not found: bus_addr %llxh\n",
		    __func__, __LINE__, bus_addr);
		    __func__, __LINE__, bus_addr);
		DBG("%s:%d: not found: len %lxh\n",
		DBG("%s:%d: not found: len %lxh\n",
		    __func__, __LINE__, len);
		    __func__, __LINE__, len);
@@ -975,7 +975,8 @@ static int dma_ioc0_unmap_area(struct ps3_dma_region *r,
static int dma_sb_region_create_linear(struct ps3_dma_region *r)
static int dma_sb_region_create_linear(struct ps3_dma_region *r)
{
{
	int result;
	int result;
	unsigned long virt_addr, len, tmp;
	unsigned long virt_addr, len;
	dma_addr_t tmp;


	if (r->len > 16*1024*1024) {	/* FIXME: need proper fix */
	if (r->len > 16*1024*1024) {	/* FIXME: need proper fix */
		/* force 16M dma pages for linear mapping */
		/* force 16M dma pages for linear mapping */
@@ -1027,7 +1028,8 @@ static int dma_sb_region_create_linear(struct ps3_dma_region *r)
static int dma_sb_region_free_linear(struct ps3_dma_region *r)
static int dma_sb_region_free_linear(struct ps3_dma_region *r)
{
{
	int result;
	int result;
	unsigned long bus_addr, len, lpar_addr;
	dma_addr_t bus_addr;
	unsigned long len, lpar_addr;


	if (r->offset < map.rm.size) {
	if (r->offset < map.rm.size) {
		/* Unmap (part of) 1st RAM chunk */
		/* Unmap (part of) 1st RAM chunk */
@@ -1072,7 +1074,7 @@ static int dma_sb_region_free_linear(struct ps3_dma_region *r)
 */
 */


static int dma_sb_map_area_linear(struct ps3_dma_region *r,
static int dma_sb_map_area_linear(struct ps3_dma_region *r,
	unsigned long virt_addr, unsigned long len, unsigned long *bus_addr,
	unsigned long virt_addr, unsigned long len, dma_addr_t *bus_addr,
	u64 iopte_flag)
	u64 iopte_flag)
{
{
	unsigned long phys_addr = is_kernel_addr(virt_addr) ? __pa(virt_addr)
	unsigned long phys_addr = is_kernel_addr(virt_addr) ? __pa(virt_addr)
@@ -1091,7 +1093,7 @@ static int dma_sb_map_area_linear(struct ps3_dma_region *r,
 */
 */


static int dma_sb_unmap_area_linear(struct ps3_dma_region *r,
static int dma_sb_unmap_area_linear(struct ps3_dma_region *r,
	unsigned long bus_addr, unsigned long len)
	dma_addr_t bus_addr, unsigned long len)
{
{
	return 0;
	return 0;
};
};
@@ -1169,13 +1171,13 @@ int ps3_dma_region_free(struct ps3_dma_region *r)
EXPORT_SYMBOL(ps3_dma_region_free);
EXPORT_SYMBOL(ps3_dma_region_free);


int ps3_dma_map(struct ps3_dma_region *r, unsigned long virt_addr,
int ps3_dma_map(struct ps3_dma_region *r, unsigned long virt_addr,
	unsigned long len, unsigned long *bus_addr,
	unsigned long len, dma_addr_t *bus_addr,
	u64 iopte_flag)
	u64 iopte_flag)
{
{
	return r->region_ops->map(r, virt_addr, len, bus_addr, iopte_flag);
	return r->region_ops->map(r, virt_addr, len, bus_addr, iopte_flag);
}
}


int ps3_dma_unmap(struct ps3_dma_region *r, unsigned long bus_addr,
int ps3_dma_unmap(struct ps3_dma_region *r, dma_addr_t bus_addr,
	unsigned long len)
	unsigned long len)
{
{
	return r->region_ops->unmap(r, bus_addr, len);
	return r->region_ops->unmap(r, bus_addr, len);
+2 −2
Original line number Original line Diff line number Diff line
@@ -568,7 +568,7 @@ static dma_addr_t ps3_sb_map_page(struct device *_dev, struct page *page,
{
{
	struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev);
	struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev);
	int result;
	int result;
	unsigned long bus_addr;
	dma_addr_t bus_addr;
	void *ptr = page_address(page) + offset;
	void *ptr = page_address(page) + offset;


	result = ps3_dma_map(dev->d_region, (unsigned long)ptr, size,
	result = ps3_dma_map(dev->d_region, (unsigned long)ptr, size,
@@ -590,7 +590,7 @@ static dma_addr_t ps3_ioc0_map_page(struct device *_dev, struct page *page,
{
{
	struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev);
	struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev);
	int result;
	int result;
	unsigned long bus_addr;
	dma_addr_t bus_addr;
	u64 iopte_flag;
	u64 iopte_flag;
	void *ptr = page_address(page) + offset;
	void *ptr = page_address(page) + offset;