Merge branch 'akpm' (patches from Andrew)
[linux-2.6-microblaze.git] / kernel / dma / swiotlb.c
index 781b9dc..7c42df6 100644 (file)
@@ -152,8 +152,6 @@ void swiotlb_set_max_segment(unsigned int val)
                max_segment = rounddown(val, PAGE_SIZE);
 }
 
-/* default to 64MB */
-#define IO_TLB_DEFAULT_SIZE (64UL<<20)
 unsigned long swiotlb_size_or_default(void)
 {
        unsigned long size;
@@ -163,6 +161,24 @@ unsigned long swiotlb_size_or_default(void)
        return size ? size : (IO_TLB_DEFAULT_SIZE);
 }
 
+void __init swiotlb_adjust_size(unsigned long new_size)
+{
+       unsigned long size;
+
+       /*
+        * If swiotlb parameter has not been specified, give a chance to
+        * architectures such as those supporting memory encryption to
+        * adjust/expand SWIOTLB size for their use.
+        */
+       if (!io_tlb_nslabs) {
+               size = ALIGN(new_size, 1 << IO_TLB_SHIFT);
+               io_tlb_nslabs = size >> IO_TLB_SHIFT;
+               io_tlb_nslabs = ALIGN(io_tlb_nslabs, IO_TLB_SEGSIZE);
+
+               pr_info("SWIOTLB bounce buffer size adjusted to %luMB", size >> 20);
+       }
+}
+
 void swiotlb_print_info(void)
 {
        unsigned long bytes = io_tlb_nslabs << IO_TLB_SHIFT;