[PATCH 10/12] drm/ast: POST code for the new AST2500
Joel Stanley
joel at jms.id.au
Fri Feb 24 13:21:27 AEDT 2017
On Fri, Feb 24, 2017 at 9:23 AM, Benjamin Herrenschmidt
<benh at kernel.crashing.org> wrote:
> From: "Y.C. Chen" <yc_chen at aspeedtech.com>
>
> 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 at aspeedtech.com>
> Signed-off-by: Benjamin Herrenschmidt <benh at kernel.crashing.org>
Acked-by: Joel Stanley <joel at jms.id.au>
> --
>
> 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
>
More information about the Linuxppc-dev
mailing list