Author: bonefish Date: 2010-06-22 00:02:31 +0200 (Tue, 22 Jun 2010) New Revision: 37215 Changeset: http://dev.haiku-os.org/changeset/37215/haiku Modified: haiku/trunk/src/add-ons/kernel/drivers/graphics/nvidia/driver.c haiku/trunk/src/add-ons/kernel/drivers/graphics/nvidia_gpgpu/driver.c haiku/trunk/src/add-ons/kernel/drivers/graphics/radeon/PCI_GART.c Log: Force 32 bit physical addresses. Added TODOs. Modified: haiku/trunk/src/add-ons/kernel/drivers/graphics/nvidia/driver.c =================================================================== --- haiku/trunk/src/add-ons/kernel/drivers/graphics/nvidia/driver.c 2010-06-21 21:48:02 UTC (rev 37214) +++ haiku/trunk/src/add-ons/kernel/drivers/graphics/nvidia/driver.c 2010-06-21 22:02:31 UTC (rev 37215) @@ -906,8 +906,10 @@ (void **)&unaligned_dma_buffer, B_ANY_KERNEL_ADDRESS, 2 * net_buf_size, /* take twice the net size so we can have MTRR-WC even on old systems */ - B_CONTIGUOUS, /* GPU always needs access */ + B_32_BIT_MEMORY, /* GPU always needs access */ B_USER_CLONEABLE_AREA | B_READ_AREA | B_WRITE_AREA); + // TODO: Physical aligning can be done without waste using the + // private create_area_etc(). /* on error, abort */ if (si->unaligned_dma_area < 0) { Modified: haiku/trunk/src/add-ons/kernel/drivers/graphics/nvidia_gpgpu/driver.c =================================================================== --- haiku/trunk/src/add-ons/kernel/drivers/graphics/nvidia_gpgpu/driver.c 2010-06-21 21:48:02 UTC (rev 37214) +++ haiku/trunk/src/add-ons/kernel/drivers/graphics/nvidia_gpgpu/driver.c 2010-06-21 22:02:31 UTC (rev 37215) @@ -662,8 +662,10 @@ (void **)&unaligned_dma_buffer, B_ANY_KERNEL_ADDRESS, 2 * net_buf_size, /* take twice the net size so we can have MTRR-WC even on old systems */ - B_CONTIGUOUS, /* GPU always needs access */ + B_32_BIT_MEMORY, /* GPU always needs access */ B_USER_CLONEABLE_AREA | B_READ_AREA | B_WRITE_AREA); + // TODO: Physical aligning can be done without waste using the + // private create_area_etc(). /* on error, abort */ if (si->unaligned_dma_area < 0) { Modified: haiku/trunk/src/add-ons/kernel/drivers/graphics/radeon/PCI_GART.c =================================================================== --- haiku/trunk/src/add-ons/kernel/drivers/graphics/radeon/PCI_GART.c 2010-06-21 21:48:02 UTC (rev 37214) +++ haiku/trunk/src/add-ons/kernel/drivers/graphics/radeon/PCI_GART.c 2010-06-21 22:02:31 UTC (rev 37215) @@ -90,6 +90,8 @@ gart->buffer.unaligned_area = create_area( "Radeon PCI GART buffer", &unaligned_addr, B_ANY_KERNEL_ADDRESS, 2 * size, B_CONTIGUOUS/*B_FULL_LOCK*/, B_READ_AREA | B_WRITE_AREA | B_USER_CLONEABLE_AREA ); + // TODO: Physical aligning can be done without waste using the + // private create_area_etc(). if (gart->buffer.unaligned_area < 0) { SHOW_ERROR( 1, "cannot create PCI GART buffer (%s)", strerror( gart->buffer.unaligned_area )); @@ -146,11 +148,13 @@ num_pages = (gart->buffer.size + B_PAGE_SIZE - 1) & ~(B_PAGE_SIZE - 1); - // GART must be contignuous + // GART must be contiguous gart->GATT.area = create_area("Radeon GATT", (void **)&gart->GATT.ptr, B_ANY_KERNEL_ADDRESS, (num_pages * sizeof( uint32 ) + B_PAGE_SIZE - 1) & ~(B_PAGE_SIZE - 1), - B_CONTIGUOUS, + B_32_BIT_MEMORY, + // TODO: Physical address is cast to 32 bit below! Use B_CONTIGUOUS, + // when that is (/can be) fixed! #ifdef HAIKU_TARGET_PLATFORM_HAIKU // TODO: really user read/write? B_READ_AREA | B_WRITE_AREA | B_USER_CLONEABLE_AREA @@ -182,7 +186,10 @@ map_area_size = ((map_area_size / B_PAGE_SIZE) + 1) * B_PAGE_SIZE; // temporary area where we fill in the memory map (deleted below) - map_area = create_area("pci_gart_map_area", (void **)&map, B_ANY_ADDRESS, map_area_size, B_FULL_LOCK, B_READ_AREA | B_WRITE_AREA); + map_area = create_area("pci_gart_map_area", (void **)&map, B_ANY_ADDRESS, + map_area_size, B_32_BIT_MEMORY, B_READ_AREA | B_WRITE_AREA); + // TODO: Physical addresses are cast to 32 bit below! Use B_FULL_LOCK, + // when that is (/can be) fixed! dprintf("pci_gart_map_area: %ld\n", map_area); get_memory_map( gart->buffer.ptr, gart->buffer.size, map, map_count );