diff options
| author | Stephen Rothwell <sfr@canb.auug.org.au> | 2009-01-13 14:58:10 -0500 |
|---|---|---|
| committer | Benjamin Herrenschmidt <benh@kernel.crashing.org> | 2009-01-16 00:15:11 -0500 |
| commit | 494fd07a88ea561e1bea73516d7e92c4c2d1f223 (patch) | |
| tree | d597647b6037ab2c2a31a80c97bd8cc5877c9019 | |
| parent | c52fe6b620e9c7a52b296ec478bd24b91b4e7634 (diff) | |
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: Stephen Rothwell <sfr@canb.auug.org.au>
Acked-by: Geoff Levand <geoffrey.levand@am.sony.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
| -rw-r--r-- | arch/powerpc/include/asm/ps3.h | 8 | ||||
| -rw-r--r-- | arch/powerpc/platforms/ps3/mm.c | 32 | ||||
| -rw-r--r-- | arch/powerpc/platforms/ps3/system-bus.c | 4 |
3 files changed, 23 insertions, 21 deletions
diff --git a/arch/powerpc/include/asm/ps3.h b/arch/powerpc/include/asm/ps3.h index eead5c67197a..67f1812698d2 100644 --- a/arch/powerpc/include/asm/ps3.h +++ b/arch/powerpc/include/asm/ps3.h | |||
| @@ -103,10 +103,10 @@ struct ps3_dma_region_ops { | |||
| 103 | int (*map)(struct ps3_dma_region *, | 103 | int (*map)(struct ps3_dma_region *, |
| 104 | unsigned long virt_addr, | 104 | unsigned long virt_addr, |
| 105 | unsigned long len, | 105 | unsigned long len, |
| 106 | unsigned long *bus_addr, | 106 | dma_addr_t *bus_addr, |
| 107 | u64 iopte_pp); | 107 | u64 iopte_pp); |
| 108 | int (*unmap)(struct ps3_dma_region *, | 108 | int (*unmap)(struct ps3_dma_region *, |
| 109 | unsigned long bus_addr, | 109 | dma_addr_t bus_addr, |
| 110 | unsigned long len); | 110 | unsigned long len); |
| 111 | }; | 111 | }; |
| 112 | /** | 112 | /** |
| @@ -124,9 +124,9 @@ int ps3_dma_region_init(struct ps3_system_bus_device *dev, | |||
| 124 | int ps3_dma_region_create(struct ps3_dma_region *r); | 124 | int ps3_dma_region_create(struct ps3_dma_region *r); |
| 125 | int ps3_dma_region_free(struct ps3_dma_region *r); | 125 | int ps3_dma_region_free(struct ps3_dma_region *r); |
| 126 | int ps3_dma_map(struct ps3_dma_region *r, unsigned long virt_addr, | 126 | int ps3_dma_map(struct ps3_dma_region *r, unsigned long virt_addr, |
| 127 | unsigned long len, unsigned long *bus_addr, | 127 | unsigned long len, dma_addr_t *bus_addr, |
| 128 | u64 iopte_pp); | 128 | u64 iopte_pp); |
| 129 | int ps3_dma_unmap(struct ps3_dma_region *r, unsigned long bus_addr, | 129 | int ps3_dma_unmap(struct ps3_dma_region *r, dma_addr_t bus_addr, |
| 130 | unsigned long len); | 130 | unsigned long len); |
| 131 | 131 | ||
| 132 | /* mmio routines */ | 132 | /* mmio routines */ |
diff --git a/arch/powerpc/platforms/ps3/mm.c b/arch/powerpc/platforms/ps3/mm.c index a4d49dd9e8a9..4761e2dcf3e0 100644 --- a/arch/powerpc/platforms/ps3/mm.c +++ b/arch/powerpc/platforms/ps3/mm.c | |||
| @@ -777,7 +777,7 @@ static int dma_ioc0_region_free(struct ps3_dma_region *r) | |||
| 777 | */ | 777 | */ |
| 778 | 778 | ||
| 779 | static int dma_sb_map_area(struct ps3_dma_region *r, unsigned long virt_addr, | 779 | static int dma_sb_map_area(struct ps3_dma_region *r, unsigned long virt_addr, |
| 780 | unsigned long len, unsigned long *bus_addr, | 780 | unsigned long len, dma_addr_t *bus_addr, |
| 781 | u64 iopte_flag) | 781 | u64 iopte_flag) |
| 782 | { | 782 | { |
| 783 | int result; | 783 | int result; |
| @@ -800,7 +800,7 @@ static int dma_sb_map_area(struct ps3_dma_region *r, unsigned long virt_addr, | |||
| 800 | DBG("%s:%d lpar_addr %lxh\n", __func__, __LINE__, | 800 | DBG("%s:%d lpar_addr %lxh\n", __func__, __LINE__, |
| 801 | lpar_addr); | 801 | lpar_addr); |
| 802 | DBG("%s:%d len %lxh\n", __func__, __LINE__, len); | 802 | DBG("%s:%d len %lxh\n", __func__, __LINE__, len); |
| 803 | DBG("%s:%d bus_addr %lxh (%lxh)\n", __func__, __LINE__, | 803 | DBG("%s:%d bus_addr %llxh (%lxh)\n", __func__, __LINE__, |
| 804 | *bus_addr, len); | 804 | *bus_addr, len); |
| 805 | } | 805 | } |
| 806 | 806 | ||
| @@ -832,7 +832,7 @@ static int dma_sb_map_area(struct ps3_dma_region *r, unsigned long virt_addr, | |||
| 832 | } | 832 | } |
| 833 | 833 | ||
| 834 | static int dma_ioc0_map_area(struct ps3_dma_region *r, unsigned long virt_addr, | 834 | static int dma_ioc0_map_area(struct ps3_dma_region *r, unsigned long virt_addr, |
| 835 | unsigned long len, unsigned long *bus_addr, | 835 | unsigned long len, dma_addr_t *bus_addr, |
| 836 | u64 iopte_flag) | 836 | u64 iopte_flag) |
| 837 | { | 837 | { |
| 838 | int result; | 838 | int result; |
| @@ -872,7 +872,7 @@ static int dma_ioc0_map_area(struct ps3_dma_region *r, unsigned long virt_addr, | |||
| 872 | return result; | 872 | return result; |
| 873 | } | 873 | } |
| 874 | *bus_addr = c->bus_addr + phys_addr - aligned_phys; | 874 | *bus_addr = c->bus_addr + phys_addr - aligned_phys; |
| 875 | DBG("%s: va=%#lx pa=%#lx a_pa=%#lx bus=%#lx\n", __func__, | 875 | DBG("%s: va=%#lx pa=%#lx a_pa=%#lx bus=%#llx\n", __func__, |
| 876 | virt_addr, phys_addr, aligned_phys, *bus_addr); | 876 | virt_addr, phys_addr, aligned_phys, *bus_addr); |
| 877 | c->usage_count = 1; | 877 | c->usage_count = 1; |
| 878 | 878 | ||
| @@ -889,7 +889,7 @@ static int dma_ioc0_map_area(struct ps3_dma_region *r, unsigned long virt_addr, | |||
| 889 | * This is the common dma unmap routine. | 889 | * This is the common dma unmap routine. |
| 890 | */ | 890 | */ |
| 891 | 891 | ||
| 892 | static int dma_sb_unmap_area(struct ps3_dma_region *r, unsigned long bus_addr, | 892 | static int dma_sb_unmap_area(struct ps3_dma_region *r, dma_addr_t bus_addr, |
| 893 | unsigned long len) | 893 | unsigned long len) |
| 894 | { | 894 | { |
| 895 | unsigned long flags; | 895 | unsigned long flags; |
| @@ -903,7 +903,7 @@ static int dma_sb_unmap_area(struct ps3_dma_region *r, unsigned long bus_addr, | |||
| 903 | 1 << r->page_size); | 903 | 1 << r->page_size); |
| 904 | unsigned long aligned_len = _ALIGN_UP(len + bus_addr | 904 | unsigned long aligned_len = _ALIGN_UP(len + bus_addr |
| 905 | - aligned_bus, 1 << r->page_size); | 905 | - aligned_bus, 1 << r->page_size); |
| 906 | DBG("%s:%d: not found: bus_addr %lxh\n", | 906 | DBG("%s:%d: not found: bus_addr %llxh\n", |
| 907 | __func__, __LINE__, bus_addr); | 907 | __func__, __LINE__, bus_addr); |
| 908 | DBG("%s:%d: not found: len %lxh\n", | 908 | DBG("%s:%d: not found: len %lxh\n", |
| 909 | __func__, __LINE__, len); | 909 | __func__, __LINE__, len); |
| @@ -926,12 +926,12 @@ static int dma_sb_unmap_area(struct ps3_dma_region *r, unsigned long bus_addr, | |||
| 926 | } | 926 | } |
| 927 | 927 | ||
| 928 | static int dma_ioc0_unmap_area(struct ps3_dma_region *r, | 928 | static int dma_ioc0_unmap_area(struct ps3_dma_region *r, |
| 929 | unsigned long bus_addr, unsigned long len) | 929 | dma_addr_t bus_addr, unsigned long len) |
| 930 | { | 930 | { |
| 931 | unsigned long flags; | 931 | unsigned long flags; |
| 932 | struct dma_chunk *c; | 932 | struct dma_chunk *c; |
| 933 | 933 | ||
| 934 | DBG("%s: start a=%#lx l=%#lx\n", __func__, bus_addr, len); | 934 | DBG("%s: start a=%#llx l=%#lx\n", __func__, bus_addr, len); |
| 935 | spin_lock_irqsave(&r->chunk_list.lock, flags); | 935 | spin_lock_irqsave(&r->chunk_list.lock, flags); |
| 936 | c = dma_find_chunk(r, bus_addr, len); | 936 | c = dma_find_chunk(r, bus_addr, len); |
| 937 | 937 | ||
| @@ -941,7 +941,7 @@ static int dma_ioc0_unmap_area(struct ps3_dma_region *r, | |||
| 941 | unsigned long aligned_len = _ALIGN_UP(len + bus_addr | 941 | unsigned long aligned_len = _ALIGN_UP(len + bus_addr |
| 942 | - aligned_bus, | 942 | - aligned_bus, |
| 943 | 1 << r->page_size); | 943 | 1 << r->page_size); |
| 944 | DBG("%s:%d: not found: bus_addr %lxh\n", | 944 | DBG("%s:%d: not found: bus_addr %llxh\n", |
| 945 | __func__, __LINE__, bus_addr); | 945 | __func__, __LINE__, bus_addr); |
| 946 | DBG("%s:%d: not found: len %lxh\n", | 946 | DBG("%s:%d: not found: len %lxh\n", |
| 947 | __func__, __LINE__, len); | 947 | __func__, __LINE__, len); |
| @@ -975,7 +975,8 @@ static int dma_ioc0_unmap_area(struct ps3_dma_region *r, | |||
| 975 | static int dma_sb_region_create_linear(struct ps3_dma_region *r) | 975 | static int dma_sb_region_create_linear(struct ps3_dma_region *r) |
| 976 | { | 976 | { |
| 977 | int result; | 977 | int result; |
| 978 | unsigned long virt_addr, len, tmp; | 978 | unsigned long virt_addr, len; |
| 979 | dma_addr_t tmp; | ||
| 979 | 980 | ||
| 980 | if (r->len > 16*1024*1024) { /* FIXME: need proper fix */ | 981 | if (r->len > 16*1024*1024) { /* FIXME: need proper fix */ |
| 981 | /* force 16M dma pages for linear mapping */ | 982 | /* force 16M dma pages for linear mapping */ |
| @@ -1027,7 +1028,8 @@ static int dma_sb_region_create_linear(struct ps3_dma_region *r) | |||
| 1027 | static int dma_sb_region_free_linear(struct ps3_dma_region *r) | 1028 | static int dma_sb_region_free_linear(struct ps3_dma_region *r) |
| 1028 | { | 1029 | { |
| 1029 | int result; | 1030 | int result; |
| 1030 | unsigned long bus_addr, len, lpar_addr; | 1031 | dma_addr_t bus_addr; |
| 1032 | unsigned long len, lpar_addr; | ||
| 1031 | 1033 | ||
| 1032 | if (r->offset < map.rm.size) { | 1034 | if (r->offset < map.rm.size) { |
| 1033 | /* Unmap (part of) 1st RAM chunk */ | 1035 | /* Unmap (part of) 1st RAM chunk */ |
| @@ -1072,7 +1074,7 @@ static int dma_sb_region_free_linear(struct ps3_dma_region *r) | |||
| 1072 | */ | 1074 | */ |
| 1073 | 1075 | ||
| 1074 | static int dma_sb_map_area_linear(struct ps3_dma_region *r, | 1076 | static int dma_sb_map_area_linear(struct ps3_dma_region *r, |
| 1075 | unsigned long virt_addr, unsigned long len, unsigned long *bus_addr, | 1077 | unsigned long virt_addr, unsigned long len, dma_addr_t *bus_addr, |
| 1076 | u64 iopte_flag) | 1078 | u64 iopte_flag) |
| 1077 | { | 1079 | { |
| 1078 | unsigned long phys_addr = is_kernel_addr(virt_addr) ? __pa(virt_addr) | 1080 | 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, | |||
| 1091 | */ | 1093 | */ |
| 1092 | 1094 | ||
| 1093 | static int dma_sb_unmap_area_linear(struct ps3_dma_region *r, | 1095 | static int dma_sb_unmap_area_linear(struct ps3_dma_region *r, |
| 1094 | unsigned long bus_addr, unsigned long len) | 1096 | dma_addr_t bus_addr, unsigned long len) |
| 1095 | { | 1097 | { |
| 1096 | return 0; | 1098 | return 0; |
| 1097 | }; | 1099 | }; |
| @@ -1169,13 +1171,13 @@ int ps3_dma_region_free(struct ps3_dma_region *r) | |||
| 1169 | EXPORT_SYMBOL(ps3_dma_region_free); | 1171 | EXPORT_SYMBOL(ps3_dma_region_free); |
| 1170 | 1172 | ||
| 1171 | int ps3_dma_map(struct ps3_dma_region *r, unsigned long virt_addr, | 1173 | int ps3_dma_map(struct ps3_dma_region *r, unsigned long virt_addr, |
| 1172 | unsigned long len, unsigned long *bus_addr, | 1174 | unsigned long len, dma_addr_t *bus_addr, |
| 1173 | u64 iopte_flag) | 1175 | u64 iopte_flag) |
| 1174 | { | 1176 | { |
| 1175 | return r->region_ops->map(r, virt_addr, len, bus_addr, iopte_flag); | 1177 | return r->region_ops->map(r, virt_addr, len, bus_addr, iopte_flag); |
| 1176 | } | 1178 | } |
| 1177 | 1179 | ||
| 1178 | int ps3_dma_unmap(struct ps3_dma_region *r, unsigned long bus_addr, | 1180 | int ps3_dma_unmap(struct ps3_dma_region *r, dma_addr_t bus_addr, |
| 1179 | unsigned long len) | 1181 | unsigned long len) |
| 1180 | { | 1182 | { |
| 1181 | return r->region_ops->unmap(r, bus_addr, len); | 1183 | return r->region_ops->unmap(r, bus_addr, len); |
diff --git a/arch/powerpc/platforms/ps3/system-bus.c b/arch/powerpc/platforms/ps3/system-bus.c index ee0d22911621..70ef793e5565 100644 --- a/arch/powerpc/platforms/ps3/system-bus.c +++ b/arch/powerpc/platforms/ps3/system-bus.c | |||
| @@ -568,7 +568,7 @@ static dma_addr_t ps3_sb_map_page(struct device *_dev, struct page *page, | |||
| 568 | { | 568 | { |
| 569 | struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev); | 569 | struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev); |
| 570 | int result; | 570 | int result; |
| 571 | unsigned long bus_addr; | 571 | dma_addr_t bus_addr; |
| 572 | void *ptr = page_address(page) + offset; | 572 | void *ptr = page_address(page) + offset; |
| 573 | 573 | ||
| 574 | result = ps3_dma_map(dev->d_region, (unsigned long)ptr, size, | 574 | 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, | |||
| 590 | { | 590 | { |
| 591 | struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev); | 591 | struct ps3_system_bus_device *dev = ps3_dev_to_system_bus_dev(_dev); |
| 592 | int result; | 592 | int result; |
| 593 | unsigned long bus_addr; | 593 | dma_addr_t bus_addr; |
| 594 | u64 iopte_flag; | 594 | u64 iopte_flag; |
| 595 | void *ptr = page_address(page) + offset; | 595 | void *ptr = page_address(page) + offset; |
| 596 | 596 | ||
