> >> And the loop can be turned into ndelay: > >> > >> /* > >> * Force at least 170ns delay before clearing > >> * reset bit. Each read from LCR takes at least > >> * 30ns so 10 times for 300ns to be safe. > >> */ > >> for(i=0;i<10;i++) > >> readval = *MiscCtrl; > > > > Again, since I can't test this, I do not want this patch to contain > > any functional changes. AFAIC, the 10 register reads must still > > happen after this patch is applied.
You can't use ndelay(); the writes can get posted so can appear much closer together by the time they get to the actual hardware. Multiple volatile reads don't need a target variable. (Shouldn't they also real readl()?) Deleting the driver works... David - Registered Address Lakeside, Bramley Road, Mount Farm, Milton Keynes, MK1 1PT, UK Registration No: 1397386 (Wales)