• Geert Uytterhoeven's avatar
    serial: sh-sci: Use the correct register for overrun checks · 2e0842a1
    Geert Uytterhoeven authored
    The various SCI implementations use 3 different methods to signal
    overrun errors:
      - Bit SCI_ORER in register SCxSR on SCI,
      - Bit SCIFA_ORER in register SCxSR on SCIFA and SCIFB, and SCIF on
        SH7705/SH7720/SH7721,
      - Bit SCLSR_ORER in (optional!) register SCLSR on (H)SCIF.
    
    However:
      1. sci_handle_fifo_overrun()
           a. handles (H)SCIF and SCIFA/SCIFB only,
           b. treats SCIF on SH7705/SH7720/SH7721 incorrectly,
      2. sci_mpxed_interrupt()
           a. treats SCIF on SH7705/SH7720/SH7721 incorrectly,
           b. ignores that not all SCIFs have the SCLSR register, causing
    	  "Invalid register access" WARN()ings.
    
    To fix the above:
      1. Determine and store the correct register enum during
         initialization,
      2. Replace the duplicated buggy switch statements by using the stored
         register enum,
      3. Add the missing existence check to  sci_mpxed_interrupt().
    Signed-off-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    2e0842a1
sh-sci.c 64.1 KB