[U-Boot] [PATCH] video: ipu_disp: squash clang warning

Since &rgb2ycbcr_coeff and friends are declared const, but assigned to a void pointer, clang will warn that the const is implicity casted away. Add const to indicate the pointer points to const data to get rid of these warnings.
Cc: Stefano Babic sbabic@denx.de Signed-off-by: Jeroen Hofstee jeroen@myspectrum.nl --- drivers/video/ipu_disp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/video/ipu_disp.c b/drivers/video/ipu_disp.c index cefd2dc..31b5a10 100644 --- a/drivers/video/ipu_disp.c +++ b/drivers/video/ipu_disp.c @@ -33,7 +33,7 @@ enum csc_type_t {
struct dp_csc_param_t { int mode; - void *coeff; + void * const coeff; };
#define SYNC_WAVE 0

On 6/16/2014 12:41 PM, Jeroen Hofstee wrote:
Since &rgb2ycbcr_coeff and friends are declared const, but assigned to a void pointer, clang will warn that the const is implicity casted away. Add const to indicate the pointer points to const data to get rid of these warnings.
Cc: Stefano Babic sbabic@denx.de Signed-off-by: Jeroen Hofstee jeroen@myspectrum.nl
drivers/video/ipu_disp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/video/ipu_disp.c b/drivers/video/ipu_disp.c index cefd2dc..31b5a10 100644 --- a/drivers/video/ipu_disp.c +++ b/drivers/video/ipu_disp.c @@ -33,7 +33,7 @@ enum csc_type_t {
struct dp_csc_param_t { int mode;
- void *coeff;
- void * const coeff;
};
#define SYNC_WAVE 0
Doesn't this says the pointer is constant, not that it points to constant data? So, commit log needs updated or const void *coeff;
Troy

Hello Troy,
On ma, 2014-06-16 at 12:52 -0700, Troy Kisky wrote:
On 6/16/2014 12:41 PM, Jeroen Hofstee wrote:
Since &rgb2ycbcr_coeff and friends are declared const, but assigned to a void pointer, clang will warn that the const is implicity casted away. Add const to indicate the pointer points to const data to get rid of these warnings.
Cc: Stefano Babic sbabic@denx.de Signed-off-by: Jeroen Hofstee jeroen@myspectrum.nl
drivers/video/ipu_disp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/video/ipu_disp.c b/drivers/video/ipu_disp.c index cefd2dc..31b5a10 100644 --- a/drivers/video/ipu_disp.c +++ b/drivers/video/ipu_disp.c @@ -33,7 +33,7 @@ enum csc_type_t {
struct dp_csc_param_t { int mode;
- void *coeff;
- void * const coeff;
};
#define SYNC_WAVE 0
Doesn't this says the pointer is constant, not that it points to constant data? So, commit log needs updated or const void *coeff;
yup, it does. Thanks. The patch should be updated actually.
Regards, Jeroen

On ma, 2014-06-16 at 12:52 -0700, Troy Kisky wrote:
On 6/16/2014 12:41 PM, Jeroen Hofstee wrote:
Since &rgb2ycbcr_coeff and friends are declared const, but assigned to a void pointer, clang will warn that the const is implicity casted away. Add const to indicate the pointer points to const data to get rid of these warnings.
Cc: Stefano Babic sbabic@denx.de Signed-off-by: Jeroen Hofstee jeroen@myspectrum.nl
drivers/video/ipu_disp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/video/ipu_disp.c b/drivers/video/ipu_disp.c index cefd2dc..31b5a10 100644 --- a/drivers/video/ipu_disp.c +++ b/drivers/video/ipu_disp.c @@ -33,7 +33,7 @@ enum csc_type_t {
struct dp_csc_param_t { int mode;
- void *coeff;
- void * const coeff;
};
#define SYNC_WAVE 0
Doesn't this says the pointer is constant, not that it points to constant data? So, commit log needs updated or const void *coeff;
The reason I wrongly changed it from void const * to void * const was to circumvent gcc complaining with:
drivers/video/ipu_disp.c: In function ‘ipu_dp_csc_setup’: drivers/video/ipu_disp.c:393:8: warning: assignment discards ‘const’ qualifier from pointer target type [enabled by default]
This can be solved with:
@@ -390,7 +390,7 @@ void ipu_dp_csc_setup(int dp, struct dp_csc_param_t dp_csc_param, __raw_writel(reg, DP_COM_CONF()); } - coeff = dp_csc_param.coeff; + coeff = (const int (*)[5][3]) dp_csc_param.coeff;
if (coeff) { __raw_writel(mask_a((*coeff)[0][0]) |
But I am not too happy with that. Happen to know a better way?
Regards, Jeroen

On 6/16/2014 1:37 PM, Jeroen Hofstee wrote:
On ma, 2014-06-16 at 12:52 -0700, Troy Kisky wrote:
On 6/16/2014 12:41 PM, Jeroen Hofstee wrote:
Since &rgb2ycbcr_coeff and friends are declared const, but assigned to a void pointer, clang will warn that the const is implicity casted away. Add const to indicate the pointer points to const data to get rid of these warnings.
Cc: Stefano Babic sbabic@denx.de Signed-off-by: Jeroen Hofstee jeroen@myspectrum.nl
drivers/video/ipu_disp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/video/ipu_disp.c b/drivers/video/ipu_disp.c index cefd2dc..31b5a10 100644 --- a/drivers/video/ipu_disp.c +++ b/drivers/video/ipu_disp.c @@ -33,7 +33,7 @@ enum csc_type_t {
struct dp_csc_param_t { int mode;
- void *coeff;
- void * const coeff;
};
#define SYNC_WAVE 0
Doesn't this says the pointer is constant, not that it points to constant data? So, commit log needs updated or const void *coeff;
The reason I wrongly changed it from void const * to void * const was to circumvent gcc complaining with:
drivers/video/ipu_disp.c: In function ‘ipu_dp_csc_setup’: drivers/video/ipu_disp.c:393:8: warning: assignment discards ‘const’ qualifier from pointer target type [enabled by default]
This can be solved with:
@@ -390,7 +390,7 @@ void ipu_dp_csc_setup(int dp, struct dp_csc_param_t dp_csc_param, __raw_writel(reg, DP_COM_CONF()); }
coeff = dp_csc_param.coeff;
coeff = (const int (*)[5][3]) dp_csc_param.coeff; if (coeff) { __raw_writel(mask_a((*coeff)[0][0]) |
But I am not too happy with that. Happen to know a better way?
Regards, Jeroen
I don't know why it gets that warning. The following doesn't.
diff --git a/drivers/video/ipu_disp.c b/drivers/video/ipu_disp.c index cefd2dc..209374f 100644 --- a/drivers/video/ipu_disp.c +++ b/drivers/video/ipu_disp.c @@ -31,9 +31,11 @@ enum csc_type_t { CSC_NUM };
+typedef int coeff_t[5][3]; + struct dp_csc_param_t { int mode; - void *coeff; + const coeff_t *coeff; };
#define SYNC_WAVE 0 @@ -381,7 +383,7 @@ void ipu_dp_csc_setup(int dp, struct dp_csc_param_t dp_csc_param, unsigned char srm_mode_update) { u32 reg; - const int (*coeff)[5][3]; + const coeff_t *coeff;
if (dp_csc_param.mode >= 0) { reg = __raw_readl(DP_COM_CONF());

Since rgb2ycbcr_coeff and friends are declared const, but assigned to a void pointer, clang will warn that the const is implicity casted away. If the pointer is changed to void const * gcc will warn when it is implicitly casted to a const int array. Just add a correctly typed pointer instead to prevent these casts and hence the warnings.
Cc: Troy Kisky troy.kisky@boundarydevices.com Cc: Stefano Babic sbabic@denx.de Signed-off-by: Jeroen Hofstee jeroen@myspectrum.nl
--- changes since v1: Do actually fix the warning. As pointed out by Troy Kisky the patch was doing something different then the commit message said. --- drivers/video/ipu_disp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/video/ipu_disp.c b/drivers/video/ipu_disp.c index cefd2dc..d5e857c 100644 --- a/drivers/video/ipu_disp.c +++ b/drivers/video/ipu_disp.c @@ -33,7 +33,7 @@ enum csc_type_t {
struct dp_csc_param_t { int mode; - void *coeff; + const int (*coeff)[5][3]; };
#define SYNC_WAVE 0

Since rgb2ycbcr_coeff and friends are declared const, but assigned to a void pointer, clang will warn that the const is implicity casted away. If the pointer is changed to void const * gcc will warn when it is implicitly casted to a const int array. Just add a correctly typed pointer instead to prevent these casts and hence the warnings.
Cc: Troy Kisky troy.kisky@boundarydevices.com Cc: Stefano Babic sbabic@denx.de Signed-off-by: Jeroen Hofstee jeroen@myspectrum.nl
--- changes since v1: Do actually fix the warning. As pointed out by Troy Kisky the patch was doing something different then the commit message said.
... and prefix subject with v2 --- drivers/video/ipu_disp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/video/ipu_disp.c b/drivers/video/ipu_disp.c index cefd2dc..d5e857c 100644 --- a/drivers/video/ipu_disp.c +++ b/drivers/video/ipu_disp.c @@ -33,7 +33,7 @@ enum csc_type_t {
struct dp_csc_param_t { int mode; - void *coeff; + const int (*coeff)[5][3]; };
#define SYNC_WAVE 0

Hi,
On Tue, 17 Jun 2014 19:20:27 +0200 Jeroen Hofstee jeroen@myspectrum.nl wrote:
Since rgb2ycbcr_coeff and friends are declared const, but assigned to a void pointer, clang will warn that the const is implicity casted away. If the pointer is changed to void const * gcc will warn when it is implicitly casted to a const int array. Just add a correctly typed pointer instead to prevent these casts and hence the warnings.
Cc: Troy Kisky troy.kisky@boundarydevices.com Cc: Stefano Babic sbabic@denx.de Signed-off-by: Jeroen Hofstee jeroen@myspectrum.nl
changes since v1: Do actually fix the warning. As pointed out by Troy Kisky the patch was doing something different then the commit message said.
... and prefix subject with v2
drivers/video/ipu_disp.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
applied to u-boot-video/master. Thanks!
Anatolij
participants (3)
-
Anatolij Gustschin
-
Jeroen Hofstee
-
Troy Kisky