]> git.proxmox.com Git - mirror_ubuntu-zesty-kernel.git/commitdiff
drm/ast: Fix AST2400 POST failure without BMC FW or VBIOS
authorY.C. Chen <yc_chen@aspeedtech.com>
Thu, 23 Feb 2017 07:52:33 +0000 (15:52 +0800)
committerTim Gardner <tim.gardner@canonical.com>
Wed, 15 Mar 2017 15:32:11 +0000 (10:32 -0500)
BugLink: http://bugs.launchpad.net/bugs/1673118
commit 3856081eede297b617560b85e948cfb00bb395ec upstream.

The current POST code for the AST2300/2400 family doesn't work properly
if the chip hasn't been initialized previously by either the BMC own FW
or the VBIOS. This fixes it.

Signed-off-by: Y.C. Chen <yc_chen@aspeedtech.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Tested-by: Y.C. Chen <yc_chen@aspeedtech.com>
Acked-by: Joel Stanley <joel@jms.id.au>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: Tim Gardner <tim.gardner@canonical.com>
drivers/gpu/drm/ast/ast_post.c

index 75a7c65474a36ae528adcdcf1500d4f3b534b1ab..f7d421359d564756ff86d78c64293e37eea74c7e 100644 (file)
@@ -1621,12 +1621,44 @@ static void ast_post_chip_2300(struct drm_device *dev)
                temp |= 0x73;
                ast_write32(ast, 0x12008, temp);
 
+               param.dram_freq = 396;
                param.dram_type = AST_DDR3;
+               temp = ast_mindwm(ast, 0x1e6e2070);
                if (temp & 0x01000000)
                        param.dram_type = AST_DDR2;
-               param.dram_chipid = ast->dram_type;
-               param.dram_freq = ast->mclk;
-               param.vram_size = ast->vram_size;
+                switch (temp & 0x18000000) {
+               case 0:
+                       param.dram_chipid = AST_DRAM_512Mx16;
+                       break;
+               default:
+               case 0x08000000:
+                       param.dram_chipid = AST_DRAM_1Gx16;
+                       break;
+               case 0x10000000:
+                       param.dram_chipid = AST_DRAM_2Gx16;
+                       break;
+               case 0x18000000:
+                       param.dram_chipid = AST_DRAM_4Gx16;
+                       break;
+               }
+                switch (temp & 0x0c) {
+                default:
+               case 0x00:
+                       param.vram_size = AST_VIDMEM_SIZE_8M;
+                       break;
+
+               case 0x04:
+                       param.vram_size = AST_VIDMEM_SIZE_16M;
+                       break;
+
+               case 0x08:
+                       param.vram_size = AST_VIDMEM_SIZE_32M;
+                       break;
+
+               case 0x0c:
+                       param.vram_size = AST_VIDMEM_SIZE_64M;
+                       break;
+               }
 
                if (param.dram_type == AST_DDR3) {
                        get_ddr3_info(ast, &param);