Re: [PATCH 10/12] drm/ast: POST code for the new AST2500

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Feb 24, 2017 at 9:23 AM, Benjamin Herrenschmidt
<benh@xxxxxxxxxxxxxxxxxxx> wrote:
> From: "Y.C. Chen" <yc_chen@xxxxxxxxxxxxxx>
>
> This is used when the BMC isn't running any code and thus has
> to be initialized by the host.
>
> The code originates from Aspeed (Y.C. Chen) and has been cleaned
> up for coding style purposes by BenH.
>
> Signed-off-by: Y.C. Chen <yc_chen@xxxxxxxxxxxxxx>
> Signed-off-by: Benjamin Herrenschmidt <benh@xxxxxxxxxxxxxxxxxxx>

Acked-by: Joel Stanley <joel@xxxxxxxxx>

> --
>
> v2. - Fix bug in ddr_test_2500 reported by Emil Velikov
>     - Rebase on updated mmc_test factoring patch
>     - Fix missing else statement in 2500 POST code
> ---
>  drivers/gpu/drm/ast/ast_dram_tables.h |  62 +++++
>  drivers/gpu/drm/ast/ast_post.c        | 417 +++++++++++++++++++++++++++++++++-
>  2 files changed, 476 insertions(+), 3 deletions(-)
>

> +void ast_post_chip_2500(struct drm_device *dev)
> +{
> +       struct ast_private *ast = dev->dev_private;
> +       u32 temp;
> +       u8 reg;
> +
> +       reg = ast_get_index_reg_mask(ast, AST_IO_CRTC_PORT, 0xd0, 0xff);
> +       if ((reg & 0x80) == 0) {/* vga only */
> +               /* Clear bus lock condition */
> +               ast_moutdwm(ast, 0x1e600000, 0xAEED1A03);
> +               ast_moutdwm(ast, 0x1e600084, 0x00010000);
> +               ast_moutdwm(ast, 0x1e600088, 0x00000000);
> +               ast_moutdwm(ast, 0x1e6e2000, 0x1688A8A8);
> +               ast_write32(ast, 0xf004, 0x1e6e0000);
> +               ast_write32(ast, 0xf000, 0x1);
> +               ast_write32(ast, 0x12000, 0x1688a8a8);
> +               while (ast_read32(ast, 0x12000) != 0x1)
> +                       ;
> +
> +               ast_write32(ast, 0x10000, 0xfc600309);
> +               while (ast_read32(ast, 0x10000) != 0x1)
> +                       ;
> +
> +               /* Slow down CPU/AHB CLK in VGA only mode */
> +               temp = ast_read32(ast, 0x12008);
> +               temp |= 0x73;
> +               ast_write32(ast, 0x12008, temp);
> +
> +               /* Reset USB port to patch USB unknown device issue */

Really?!

> +               ast_moutdwm(ast, 0x1e6e2090, 0x20000000);
> +               temp  = ast_mindwm(ast, 0x1e6e2094);
> +               temp |= 0x00004000;
> +               ast_moutdwm(ast, 0x1e6e2094, temp);
> +               temp  = ast_mindwm(ast, 0x1e6e2070);
> +               if (temp & 0x00800000) {
> +                       ast_moutdwm(ast, 0x1e6e207c, 0x00800000);
> +                       mdelay(100);
> +                       ast_moutdwm(ast, 0x1e6e2070, 0x00800000);
> +               }
> +
> +               if (!ast_dram_init_2500(ast))
> +                       DRM_ERROR("DRAM init failed !\n");
> +
> +               temp = ast_mindwm(ast, 0x1e6e2040);
> +               ast_moutdwm(ast, 0x1e6e2040, temp | 0x40);
> +       }
> +
> +       /* wait ready */
> +       do {
> +               reg = ast_get_index_reg_mask(ast, AST_IO_CRTC_PORT, 0xd0, 0xff);
> +       } while ((reg & 0x40) == 0);
> +}
> --
> 2.9.3
>
_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/dri-devel




[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux