public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Ard Biesheuvel <ard.biesheuvel@linaro.org>
To: Evan Lloyd <evan.lloyd@arm.com>
Cc: "edk2-devel@lists.01.org" <edk2-devel@lists.01.org>,
	<"ard.biesheuvel@linaro.org"@arm.com>,
	 <"leif.lindholm@linaro.org"@arm.com>,
	<"Matteo.Carlini@arm.com"@arm.com>,  <"nd@arm.com"@arm.com>
Subject: Re: [PATCH v2 07/13] ArmPlatformPkg: Redefine LcdPlatformGetTimings function
Date: Sat, 23 Dec 2017 13:27:29 +0000	[thread overview]
Message-ID: <CAKv+Gu8HzkiME4PcFWeixZcJPE0HqTLG=0WVvyLE-_BqV86oFQ@mail.gmail.com> (raw)
In-Reply-To: <20171222183418.8616-8-evan.lloyd@arm.com>

On 22 December 2017 at 18:34,  <evan.lloyd@arm.com> wrote:
> From: Girish Pathak <girish.pathak at arm.com>
>
> The LcdPlatformGetTimings interface function takes similar sets of
> multiple parameters for horizontal and vertical timings which can be
> aggregated in a common data type. This change defines a structure
> SCAN_TIMINGS for this which can be used to describe both horizontal and
> vertical scan timings, and accordingly redefines the
> LcdPlatformGetTiming interface, greatly reducing the amount of data
> passed about.
>
> Contributed-under: TianoCore Contribution Agreement 1.1
> Signed-off-by: Girish Pathak <girish.pathak@arm.com>
> Signed-off-by: Evan Lloyd <evan.lloyd@arm.com>
> ---
>  ArmPlatformPkg/Include/Library/LcdPlatformLib.h | 31 ++++++-----
>  ArmPlatformPkg/Library/HdLcd/HdLcd.c            | 56 +++++++++-----------
>  ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.c      | 49 +++++++++--------
>  3 files changed, 68 insertions(+), 68 deletions(-)
>
> diff --git a/ArmPlatformPkg/Include/Library/LcdPlatformLib.h b/ArmPlatformPkg/Include/Library/LcdPlatformLib.h
> index 2a70307031fc21c8fb0d655d358ca9a102a95920..0943f28a19133e7bc558f9d529bb8ac8f66ba3fd 100644
> --- a/ArmPlatformPkg/Include/Library/LcdPlatformLib.h
> +++ b/ArmPlatformPkg/Include/Library/LcdPlatformLib.h
> @@ -153,6 +153,14 @@ typedef enum {
>    LCD_BITS_PER_PIXEL_12_444
>  } LCD_BPP;
>
> +// Display timing settings.
> +typedef struct {
> +  UINT32                      Resolution;
> +  UINT32                      Sync;
> +  UINT32                      BackPorch;
> +  UINT32                      FrontPorch;
> +} SCAN_TIMINGS;
> +
>  /** Platform related initialization function.
>
>    @param[in] Handle              Handle to the LCD device instance.
> @@ -228,14 +236,11 @@ LcdPlatformQueryMode (
>
>    @param[in]  ModeNumber          Mode Number.
>
> -  @param[out] HRes                Pointer to horizontal resolution.
> -  @param[out] HSync               Pointer to horizontal sync width.
> -  @param[out] HBackPorch          Pointer to horizontal back porch.
> -  @param[out] HFrontPorch         Pointer to horizontal front porch.
> -  @param[out] VRes                Pointer to vertical resolution.
> -  @param[out] VSync               Pointer to vertical sync width.
> -  @param[out] VBackPorch          Pointer to vertical back porch.
> -  @param[out] VFrontPorch         Pointer to vertical front porch.
> +  @param[out] Horizontal          Pointer to horizontal timing parameters.
> +                                  (Resolution, Sync, Back porch, Front porch)
> +  @param[out] Vertical            Pointer to vertical timing parameters.
> +                                  (Resolution, Sync, Back porch, Front porch)
> +
>
>    @retval EFI_SUCCESS             Display timing information for the requested
>                                    mode returned successfully.
> @@ -244,14 +249,8 @@ LcdPlatformQueryMode (
>  EFI_STATUS
>  LcdPlatformGetTimings (
>    IN  UINT32                              ModeNumber,
> -  OUT UINT32*                             HRes,
> -  OUT UINT32*                             HSync,
> -  OUT UINT32*                             HBackPorch,
> -  OUT UINT32*                             HFrontPorch,
> -  OUT UINT32*                             VRes,
> -  OUT UINT32*                             VSync,
> -  OUT UINT32*                             VBackPorch,
> -  OUT UINT32*                             VFrontPorch
> +  OUT CONST SCAN_TIMINGS                  **Horizontal,
> +  OUT CONST SCAN_TIMINGS                  **Vertical
>    );
>
>  /** Return bits per pixel information for a mode number.
> diff --git a/ArmPlatformPkg/Library/HdLcd/HdLcd.c b/ArmPlatformPkg/Library/HdLcd/HdLcd.c
> index b2779af041fae58d712270002cc7d6d277360311..1fc04c2d14d8185370454be459a23bdec41f6602 100644
> --- a/ArmPlatformPkg/Library/HdLcd/HdLcd.c
> +++ b/ArmPlatformPkg/Library/HdLcd/HdLcd.c
> @@ -98,35 +98,26 @@ LcdSetMode (
>    IN CONST UINT32  ModeNumber
>    )
>  {
> -  EFI_STATUS        Status;
> -  UINT32            HRes;
> -  UINT32            HSync;
> -  UINT32            HBackPorch;
> -  UINT32            HFrontPorch;
> -  UINT32            VRes;
> -  UINT32            VSync;
> -  UINT32            VBackPorch;
> -  UINT32            VFrontPorch;
> -  UINT32            BytesPerPixel;
> -  LCD_BPP           LcdBpp;
> +  EFI_STATUS          Status;
> +  CONST SCAN_TIMINGS *Horizontal;
> +  CONST SCAN_TIMINGS *Vertical;

Please align the * with the 'S' in Status.

With that fixed,
Reviewed-by: Ard Biesheuvel <ard.biesheuvel@linaro.org>

> +  UINT32              BytesPerPixel;
> +  LCD_BPP             LcdBpp;
>
>    // Set the video mode timings and other relevant information
>    Status = LcdPlatformGetTimings (
>               ModeNumber,
> -             &HRes,
> -             &HSync,
> -             &HBackPorch,
> -             &HFrontPorch,
> -             &VRes,
> -             &VSync,
> -             &VBackPorch,
> -             &VFrontPorch
> +             &Horizontal,
> +             &Vertical
>               );
>    if (EFI_ERROR (Status)) {
>      ASSERT (FALSE);
>      return Status;
>    }
>
> +  ASSERT (Horizontal != NULL);
> +  ASSERT (Vertical != NULL);
> +
>    Status = LcdPlatformGetBpp (ModeNumber, &LcdBpp);
>    if (EFI_ERROR (Status)) {
>      ASSERT (FALSE);
> @@ -139,21 +130,26 @@ LcdSetMode (
>    MmioWrite32 (HDLCD_REG_COMMAND, HDLCD_DISABLE);
>
>    // Update the frame buffer information with the new settings
> -  MmioWrite32 (HDLCD_REG_FB_LINE_LENGTH, HRes * BytesPerPixel);
> -  MmioWrite32 (HDLCD_REG_FB_LINE_PITCH,  HRes * BytesPerPixel);
> -  MmioWrite32 (HDLCD_REG_FB_LINE_COUNT,  VRes - 1);
> +  MmioWrite32 (
> +    HDLCD_REG_FB_LINE_LENGTH,
> +    Horizontal->Resolution * BytesPerPixel
> +    );
> +
> +  MmioWrite32 (HDLCD_REG_FB_LINE_PITCH, Horizontal->Resolution * BytesPerPixel);
> +
> +  MmioWrite32 (HDLCD_REG_FB_LINE_COUNT, Vertical->Resolution - 1);
>
>    // Set the vertical timing information
> -  MmioWrite32 (HDLCD_REG_V_SYNC,         VSync);
> -  MmioWrite32 (HDLCD_REG_V_BACK_PORCH,   VBackPorch);
> -  MmioWrite32 (HDLCD_REG_V_DATA,         VRes - 1);
> -  MmioWrite32 (HDLCD_REG_V_FRONT_PORCH,  VFrontPorch);
> +  MmioWrite32 (HDLCD_REG_V_SYNC,        Vertical->Sync);
> +  MmioWrite32 (HDLCD_REG_V_BACK_PORCH,  Vertical->BackPorch);
> +  MmioWrite32 (HDLCD_REG_V_DATA,        Vertical->Resolution - 1);
> +  MmioWrite32 (HDLCD_REG_V_FRONT_PORCH, Vertical->FrontPorch);
>
>    // Set the horizontal timing information
> -  MmioWrite32 (HDLCD_REG_H_SYNC,         HSync);
> -  MmioWrite32 (HDLCD_REG_H_BACK_PORCH,   HBackPorch);
> -  MmioWrite32 (HDLCD_REG_H_DATA,         HRes - 1);
> -  MmioWrite32 (HDLCD_REG_H_FRONT_PORCH,  HFrontPorch);
> +  MmioWrite32 (HDLCD_REG_H_SYNC,        Horizontal->Sync);
> +  MmioWrite32 (HDLCD_REG_H_BACK_PORCH,  Horizontal->BackPorch);
> +  MmioWrite32 (HDLCD_REG_H_DATA,        Horizontal->Resolution - 1);
> +  MmioWrite32 (HDLCD_REG_H_FRONT_PORCH, Horizontal->FrontPorch);
>
>    // Enable the controller
>    MmioWrite32 (HDLCD_REG_COMMAND, HDLCD_ENABLE);
> diff --git a/ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.c b/ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.c
> index b236cbfcfffadd6fa7610dcae5c5bc748aac0f69..d1aba083fdc2ee4a7c25294955c4413465dca1e8 100644
> --- a/ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.c
> +++ b/ArmPlatformPkg/Library/PL111Lcd/PL111Lcd.c
> @@ -81,35 +81,26 @@ LcdSetMode (
>    IN CONST UINT32  ModeNumber
>    )
>  {
> -  EFI_STATUS        Status;
> -  UINT32            HRes;
> -  UINT32            HSync;
> -  UINT32            HBackPorch;
> -  UINT32            HFrontPorch;
> -  UINT32            VRes;
> -  UINT32            VSync;
> -  UINT32            VBackPorch;
> -  UINT32            VFrontPorch;
> -  UINT32            LcdControl;
> -  LCD_BPP           LcdBpp;
> +  EFI_STATUS          Status;
> +  CONST SCAN_TIMINGS *Horizontal;
> +  CONST SCAN_TIMINGS *Vertical;
> +  UINT32              LcdControl;
> +  LCD_BPP             LcdBpp;
>
>    // Set the video mode timings and other relevant information
>    Status = LcdPlatformGetTimings (
>               ModeNumber,
> -             &HRes,
> -             &HSync,
> -             &HBackPorch,
> -             &HFrontPorch,
> -             &VRes,
> -             &VSync,
> -             &VBackPorch,
> -             &VFrontPorch
> +             &Horizontal,
> +             &Vertical
>               );
>    if (EFI_ERROR (Status)) {
>      ASSERT (FALSE);
>      return Status;
>    }
>
> +  ASSERT (Horizontal != NULL);
> +  ASSERT (Vertical != NULL);
> +
>    Status = LcdPlatformGetBpp (ModeNumber, &LcdBpp);
>    if (EFI_ERROR (Status)) {
>      ASSERT (FALSE);
> @@ -122,15 +113,29 @@ LcdSetMode (
>    // Set Timings
>    MmioWrite32 (
>      PL111_REG_LCD_TIMING_0,
> -    HOR_AXIS_PANEL (HBackPorch, HFrontPorch, HSync, HRes)
> +    HOR_AXIS_PANEL (
> +      Horizontal->BackPorch,
> +      Horizontal->FrontPorch,
> +      Horizontal->Sync,
> +      Horizontal->Resolution
> +      )
>      );
>
>    MmioWrite32 (
>      PL111_REG_LCD_TIMING_1,
> -    VER_AXIS_PANEL (VBackPorch, VFrontPorch, VSync, VRes)
> +    VER_AXIS_PANEL (
> +      Vertical->BackPorch,
> +      Vertical->FrontPorch,
> +      Vertical->Sync,
> +      Vertical->Resolution
> +      )
> +    );
> +
> +  MmioWrite32 (
> +    PL111_REG_LCD_TIMING_2,
> +    CLK_SIG_POLARITY (Horizontal->Resolution)
>      );
>
> -  MmioWrite32 (PL111_REG_LCD_TIMING_2, CLK_SIG_POLARITY (HRes));
>    MmioWrite32 (PL111_REG_LCD_TIMING_3, 0);
>
>    // PL111_REG_LCD_CONTROL
> --
> Guid("CE165669-3EF3-493F-B85D-6190EE5B9759")
>


  reply	other threads:[~2017-12-23 13:22 UTC|newest]

Thread overview: 30+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-12-22 18:34 [PATCH v2 00/13] ArmPlatformPkg: Update GOP evan.lloyd
2017-12-22 18:34 ` [PATCH v2 01/13] ArmPlatformPkg: Tidy Lcd code: Coding standard evan.lloyd
2017-12-23 13:19   ` Ard Biesheuvel
2018-01-02 15:11     ` Evan Lloyd
2018-01-02 15:21       ` Ard Biesheuvel
2018-01-02 15:21         ` Ard Biesheuvel
2018-01-03 16:06         ` Evan Lloyd
2017-12-22 18:34 ` [PATCH v2 02/13] ArmPlatformPkg: Tidy Lcd code: Updated comments evan.lloyd
2017-12-22 18:34 ` [PATCH v2 03/13] ArmPlatformPkg: PL111 and HDLCD: add const qualifier evan.lloyd
2017-12-23 13:21   ` Ard Biesheuvel
2017-12-22 18:34 ` [PATCH v2 04/13] ArmPlatformPkg: HDLCD and PL111: Update debug ASSERTS evan.lloyd
2017-12-23 13:22   ` Ard Biesheuvel
2017-12-22 18:34 ` [PATCH v2 05/13] ArmPlatformPkg: PL111Lcd: Replace magic number with macro evan.lloyd
2017-12-23 13:24   ` Ard Biesheuvel
2017-12-22 18:34 ` [PATCH v2 06/13] ArmPlatformPkg: Implement LcdIdentify function for HDLCD GOP evan.lloyd
2017-12-23 13:24   ` Ard Biesheuvel
2017-12-22 18:34 ` [PATCH v2 07/13] ArmPlatformPkg: Redefine LcdPlatformGetTimings function evan.lloyd
2017-12-23 13:27   ` Ard Biesheuvel [this message]
2017-12-22 18:34 ` [PATCH v2 08/13] ArmPlatformPkg: Add PCD to select pixel format evan.lloyd
2017-12-23 13:29   ` Ard Biesheuvel
2017-12-22 18:34 ` [PATCH v2 09/13] ArmPlatformPkg: PCD to swap red/blue format for HDLCD evan.lloyd
2017-12-23 13:34   ` Ard Biesheuvel
2017-12-22 18:34 ` [PATCH v2 10/13] ArmPlatformPkg: Additional display modes evan.lloyd
2017-12-23 13:35   ` Ard Biesheuvel
2017-12-22 18:34 ` [PATCH v2 11/13] ArmPlatformPkg: Reserving framebuffer at build evan.lloyd
2017-12-23 13:36   ` Ard Biesheuvel
2017-12-22 18:34 ` [PATCH v2 12/13] ArmPlatformPkg: New DP500/DP550/DP650 GOP driver evan.lloyd
2017-12-23 13:44   ` Ard Biesheuvel
2017-12-22 18:34 ` [PATCH v2 13/13] ArmPlatformPkg: Introduce SCMI protocol evan.lloyd
2017-12-23 14:05   ` Ard Biesheuvel

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAKv+Gu8HzkiME4PcFWeixZcJPE0HqTLG=0WVvyLE-_BqV86oFQ@mail.gmail.com' \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox