1a5875fd4SAndrew Jones /* 2a5875fd4SAndrew Jones * Delay loops 3a5875fd4SAndrew Jones * 4a5875fd4SAndrew Jones * Copyright (C) 2016, Red Hat Inc, Andrew Jones <drjones@redhat.com> 5a5875fd4SAndrew Jones * 6a5875fd4SAndrew Jones * This work is licensed under the terms of the GNU LGPL, version 2. 7a5875fd4SAndrew Jones */ 8a5875fd4SAndrew Jones #include <libcflat.h> 9a5875fd4SAndrew Jones #include <asm/processor.h> 10a5875fd4SAndrew Jones #include <asm/barrier.h> 11*0df901e0SAndrew Jones #include <asm/delay.h> 12a5875fd4SAndrew Jones delay(u64 cycles)13a5875fd4SAndrew Jonesvoid delay(u64 cycles) 14a5875fd4SAndrew Jones { 15a5875fd4SAndrew Jones u64 start = get_cntvct(); 16a5875fd4SAndrew Jones 17a5875fd4SAndrew Jones while ((get_cntvct() - start) < cycles) 18a5875fd4SAndrew Jones cpu_relax(); 19a5875fd4SAndrew Jones } 20a5875fd4SAndrew Jones udelay(unsigned long usec)21a5875fd4SAndrew Jonesvoid udelay(unsigned long usec) 22a5875fd4SAndrew Jones { 23a5875fd4SAndrew Jones delay((u64)usec * get_cntfrq() / 1000000); 24a5875fd4SAndrew Jones } 25a5875fd4SAndrew Jones mdelay(unsigned long msecs)26a5875fd4SAndrew Jonesvoid mdelay(unsigned long msecs) 27a5875fd4SAndrew Jones { 28a5875fd4SAndrew Jones while (msecs--) 29a5875fd4SAndrew Jones udelay(1000); 30a5875fd4SAndrew Jones } 31