@@ -551,18 +551,20 @@ static void ps3_free_coherent(struct device *_dev, size_t size, void *vaddr,
551551
552552/* Creates TCEs for a user provided buffer. The user buffer must be
553553 * contiguous real kernel storage (not vmalloc). The address passed here
554- * comprises a page address and offset into that page. The dma_addr_t
555- * returned will point to the same byte within the page as was passed in.
554+ * is physical address to that hat page. The dma_addr_t returned will point
555+ * to the same byte within the page as was passed in.
556556 */
557557
558- static dma_addr_t ps3_sb_map_page (struct device * _dev , struct page * page ,
559- unsigned long offset , size_t size , enum dma_data_direction direction ,
560- unsigned long attrs )
558+ static dma_addr_t ps3_sb_map_phys (struct device * _dev , phys_addr_t phys ,
559+ size_t size , enum dma_data_direction direction , unsigned long attrs )
561560{
562561 struct ps3_system_bus_device * dev = ps3_dev_to_system_bus_dev (_dev );
563562 int result ;
564563 dma_addr_t bus_addr ;
565- void * ptr = page_address (page ) + offset ;
564+ void * ptr = phys_to_virt (phys );
565+
566+ if (unlikely (attrs & DMA_ATTR_MMIO ))
567+ return DMA_MAPPING_ERROR ;
566568
567569 result = ps3_dma_map (dev -> d_region , (unsigned long )ptr , size ,
568570 & bus_addr ,
@@ -577,16 +579,19 @@ static dma_addr_t ps3_sb_map_page(struct device *_dev, struct page *page,
577579 return bus_addr ;
578580}
579581
580- static dma_addr_t ps3_ioc0_map_page (struct device * _dev , struct page * page ,
581- unsigned long offset , size_t size ,
582+ static dma_addr_t ps3_ioc0_map_phys (struct device * _dev , phys_addr_t phys ,
583+ size_t size ,
582584 enum dma_data_direction direction ,
583585 unsigned long attrs )
584586{
585587 struct ps3_system_bus_device * dev = ps3_dev_to_system_bus_dev (_dev );
586588 int result ;
587589 dma_addr_t bus_addr ;
588590 u64 iopte_flag ;
589- void * ptr = page_address (page ) + offset ;
591+ void * ptr = phys_to_virt (phys );
592+
593+ if (unlikely (attrs & DMA_ATTR_MMIO ))
594+ return DMA_MAPPING_ERROR ;
590595
591596 iopte_flag = CBE_IOPTE_M ;
592597 switch (direction ) {
@@ -613,7 +618,7 @@ static dma_addr_t ps3_ioc0_map_page(struct device *_dev, struct page *page,
613618 return bus_addr ;
614619}
615620
616- static void ps3_unmap_page (struct device * _dev , dma_addr_t dma_addr ,
621+ static void ps3_unmap_phys (struct device * _dev , dma_addr_t dma_addr ,
617622 size_t size , enum dma_data_direction direction , unsigned long attrs )
618623{
619624 struct ps3_system_bus_device * dev = ps3_dev_to_system_bus_dev (_dev );
@@ -690,8 +695,8 @@ static const struct dma_map_ops ps3_sb_dma_ops = {
690695 .map_sg = ps3_sb_map_sg ,
691696 .unmap_sg = ps3_sb_unmap_sg ,
692697 .dma_supported = ps3_dma_supported ,
693- .map_page = ps3_sb_map_page ,
694- .unmap_page = ps3_unmap_page ,
698+ .map_phys = ps3_sb_map_phys ,
699+ .unmap_phys = ps3_unmap_phys ,
695700 .mmap = dma_common_mmap ,
696701 .get_sgtable = dma_common_get_sgtable ,
697702 .alloc_pages_op = dma_common_alloc_pages ,
@@ -704,8 +709,8 @@ static const struct dma_map_ops ps3_ioc0_dma_ops = {
704709 .map_sg = ps3_ioc0_map_sg ,
705710 .unmap_sg = ps3_ioc0_unmap_sg ,
706711 .dma_supported = ps3_dma_supported ,
707- .map_page = ps3_ioc0_map_page ,
708- .unmap_page = ps3_unmap_page ,
712+ .map_phys = ps3_ioc0_map_phys ,
713+ .unmap_phys = ps3_unmap_phys ,
709714 .mmap = dma_common_mmap ,
710715 .get_sgtable = dma_common_get_sgtable ,
711716 .alloc_pages_op = dma_common_alloc_pages ,
0 commit comments