Re: [PATCH] drm/ast: Add option to initialize palette on driver load

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

 



On Fri, Feb 02, 2018 at 01:59:51AM -0600, Timothy Pearson wrote:
> 
> Non-x86, such as OpenPOWER and ARM machines, do not execute the ASPEED-provided
> option ROM on system start.  As a result, the VGA palette registers remain
> uninitialized, leading to odd colors and generally hard to read output on the
> VGA port.
> 
> Add a new module option, ast_resetpalette, to enable loading a linear greyscale
> palette into the VGA RAMDAC.  This option is intended for use by the first Linux
> kernel to load after initial power on, such as the skiroot kernel on OpenPOWER
> systems.

Latest kernels already do that with a combination of

commit 24b8ef699e8221d2b7f813adaab13eec053e1507 (tag: drm-for-v4.16)
Author: Daniel Vetter <daniel.vetter@xxxxxxxx>
Date:   Thu Jan 18 16:40:16 2018 +0100

    drm/ast: Load lut in crtc_commit

and

commit cf48e2921ee95011a164dc31e8725022bd008666
Author: Daniel Vetter <daniel.vetter@xxxxxxxx>
Date:   Wed Mar 30 11:51:16 2016 +0200

    drm: Initialize a linear gamma table by default

either way this definitely shouldn't be a driver option, it's just a
driver bug :-)
-Daniel

> 
> Signed-off-by: Timothy Pearson <tpearson@xxxxxxxxxxxxxxxxxxxxx>
> ---
>  drivers/gpu/drm/ast/ast_drv.c  |  4 ++++
>  drivers/gpu/drm/ast/ast_drv.h  | 14 ++++++++++++++
>  drivers/gpu/drm/ast/ast_main.c |  8 ++++++++
>  drivers/gpu/drm/ast/ast_mode.c | 14 --------------
>  4 files changed, 26 insertions(+), 14 deletions(-)
> 
> diff --git a/drivers/gpu/drm/ast/ast_drv.c b/drivers/gpu/drm/ast/ast_drv.c
> index 69dab82a3771..8124eaa92ed3 100644
> --- a/drivers/gpu/drm/ast/ast_drv.c
> +++ b/drivers/gpu/drm/ast/ast_drv.c
> @@ -1,5 +1,6 @@
>  /*
>   * Copyright 2012 Red Hat Inc.
> + * Copyright 2018 Raptor Engineering, LLC.
>   *
>   * Permission is hereby granted, free of charge, to any person obtaining a
>   * copy of this software and associated documentation files (the
> @@ -34,9 +35,12 @@
>  #include "ast_drv.h"
>  
>  int ast_modeset = -1;
> +int ast_resetpalette = -1;
>  
>  MODULE_PARM_DESC(modeset, "Disable/Enable modesetting");
> +MODULE_PARM_DESC(resetpalette, "Disable/Enable palette reset on load");
>  module_param_named(modeset, ast_modeset, int, 0400);
> +module_param_named(resetpalette, ast_resetpalette, int, 0400);
>  
>  #define PCI_VENDOR_ASPEED 0x1a03
>  
> diff --git a/drivers/gpu/drm/ast/ast_drv.h b/drivers/gpu/drm/ast/ast_drv.h
> index e6c4cd3dc50e..5e834e466b65 100644
> --- a/drivers/gpu/drm/ast/ast_drv.h
> +++ b/drivers/gpu/drm/ast/ast_drv.h
> @@ -383,6 +383,20 @@ static inline int ast_bo_reserve(struct ast_bo *bo, bool no_wait)
>  	return 0;
>  }
>  
> +static inline void ast_load_palette_index(struct ast_private *ast,
> +				     u8 index, u8 red, u8 green,
> +				     u8 blue)
> +{
> +	ast_io_write8(ast, AST_IO_DAC_INDEX_WRITE, index);
> +	ast_io_read8(ast, AST_IO_SEQ_PORT);
> +	ast_io_write8(ast, AST_IO_DAC_DATA, red);
> +	ast_io_read8(ast, AST_IO_SEQ_PORT);
> +	ast_io_write8(ast, AST_IO_DAC_DATA, green);
> +	ast_io_read8(ast, AST_IO_SEQ_PORT);
> +	ast_io_write8(ast, AST_IO_DAC_DATA, blue);
> +	ast_io_read8(ast, AST_IO_SEQ_PORT);
> +}
> +
>  static inline void ast_bo_unreserve(struct ast_bo *bo)
>  {
>  	ttm_bo_unreserve(&bo->bo);
> diff --git a/drivers/gpu/drm/ast/ast_main.c b/drivers/gpu/drm/ast/ast_main.c
> index dac355812adc..c15c55f69e38 100644
> --- a/drivers/gpu/drm/ast/ast_main.c
> +++ b/drivers/gpu/drm/ast/ast_main.c
> @@ -1,5 +1,6 @@
>  /*
>   * Copyright 2012 Red Hat Inc.
> + * Copyright 2018 Raptor Engineering, LLC.
>   *
>   * Permission is hereby granted, free of charge, to any person obtaining a
>   * copy of this software and associated documentation files (the
> @@ -32,6 +33,8 @@
>  #include <drm/drm_fb_helper.h>
>  #include <drm/drm_crtc_helper.h>
>  
> +extern int ast_resetpalette;
> +
>  void ast_set_index_reg_mask(struct ast_private *ast,
>  			    uint32_t base, uint8_t index,
>  			    uint8_t mask, uint8_t val)
> @@ -483,6 +486,7 @@ int ast_driver_load(struct drm_device *dev, unsigned long flags)
>  	struct ast_private *ast;
>  	bool need_post;
>  	int ret = 0;
> +	int index = 0;
>  
>  	ast = kzalloc(sizeof(struct ast_private), GFP_KERNEL);
>  	if (!ast)
> @@ -516,6 +520,10 @@ int ast_driver_load(struct drm_device *dev, unsigned long flags)
>  		}
>  	}
>  
> +	if (ast_resetpalette == 1)
> +		for (index = 0x00; index < 0x100; index++)
> +			ast_load_palette_index(ast, index, index, index, index);
> +
>  	ast_detect_chip(dev, &need_post);
>  
>  	if (need_post)
> diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c
> index 9555a3542022..9afc4d53bd60 100644
> --- a/drivers/gpu/drm/ast/ast_mode.c
> +++ b/drivers/gpu/drm/ast/ast_mode.c
> @@ -46,20 +46,6 @@ static int ast_cursor_set(struct drm_crtc *crtc,
>  static int ast_cursor_move(struct drm_crtc *crtc,
>  			   int x, int y);
>  
> -static inline void ast_load_palette_index(struct ast_private *ast,
> -				     u8 index, u8 red, u8 green,
> -				     u8 blue)
> -{
> -	ast_io_write8(ast, AST_IO_DAC_INDEX_WRITE, index);
> -	ast_io_read8(ast, AST_IO_SEQ_PORT);
> -	ast_io_write8(ast, AST_IO_DAC_DATA, red);
> -	ast_io_read8(ast, AST_IO_SEQ_PORT);
> -	ast_io_write8(ast, AST_IO_DAC_DATA, green);
> -	ast_io_read8(ast, AST_IO_SEQ_PORT);
> -	ast_io_write8(ast, AST_IO_DAC_DATA, blue);
> -	ast_io_read8(ast, AST_IO_SEQ_PORT);
> -}
> -
>  static void ast_crtc_load_lut(struct drm_crtc *crtc)
>  {
>  	struct ast_private *ast = crtc->dev->dev_private;
> -- 
> 2.15.1
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@xxxxxxxxxxxxxxxxxxxxx
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
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