| From: Nicholas Piggin <npiggin@gmail.com> |
| Date: Tue, 10 Apr 2018 21:49:31 +1000 |
| Subject: powerpc/powernv: define a standard delay for OPAL_BUSY type retry |
| loops |
| |
| commit 34dd25de9fe3f60bfdb31b473bf04b28262d0896 upstream. |
| |
| This is the start of an effort to tidy up and standardise all the |
| delays. Existing loops have a range of delay/sleep periods from 1ms |
| to 20ms, and some have no delay. They all loop forever except rtc, |
| which times out after 10 retries, and that uses 10ms delays. So use |
| 10ms as our standard delay. The OPAL maintainer agrees 10ms is a |
| reasonable starting point. |
| |
| The idea is to use the same recipe everywhere, once this is proven to |
| work then it will be documented as an OPAL API standard. Then both |
| firmware and OS can agree, and if a particular call needs something |
| else, then that can be documented with reasoning. |
| |
| This is not the end-all of this effort, it's just a relatively easy |
| change that fixes some existing high latency delays. There should be |
| provision for standardising timeouts and/or interruptible loops where |
| possible, so non-fatal firmware errors don't cause hangs. |
| |
| Signed-off-by: Nicholas Piggin <npiggin@gmail.com> |
| Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> |
| Signed-off-by: Ben Hutchings <ben@decadent.org.uk> |
| --- |
| arch/powerpc/include/asm/opal.h | 3 +++ |
| 1 file changed, 3 insertions(+) |
| |
| --- a/arch/powerpc/include/asm/opal.h |
| +++ b/arch/powerpc/include/asm/opal.h |
| @@ -707,6 +707,9 @@ typedef struct oppanel_line { |
| uint64_t line_len; |
| } oppanel_line_t; |
| |
| +/* Default time to sleep or delay between OPAL_BUSY/OPAL_BUSY_EVENT loops */ |
| +#define OPAL_BUSY_DELAY_MS 10 |
| + |
| /* /sys/firmware/opal */ |
| extern struct kobject *opal_kobj; |
| |