Message ID | 20220307080925.54131-2-krzysztof.kozlowski@canonical.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | tty: serial: samsung: minor fixes/cleanups | expand |
On 07. 03. 22, 9:09, Krzysztof Kozlowski wrote: > The driver data (struct s3c24xx_serial_drv_data) is only used to > initialize the driver properly and is not modified. Make it const. ... > @@ -2755,9 +2755,9 @@ static struct s3c24xx_serial_drv_data s5pv210_serial_drv_data = { > }, > .fifosize = { 256, 64, 16, 16 }, > }; > -#define S5PV210_SERIAL_DRV_DATA ((kernel_ulong_t)&s5pv210_serial_drv_data) > +#define S5PV210_SERIAL_DRV_DATA (&s5pv210_serial_drv_data) > #else > -#define S5PV210_SERIAL_DRV_DATA (kernel_ulong_t)NULL > +#define S5PV210_SERIAL_DRV_DATA NULL Yet, I still don't see why the switch from ulong->ptr happens in this "constify it" patch? thanks,
On 07/03/2022 09:33, Jiri Slaby wrote: > On 07. 03. 22, 9:09, Krzysztof Kozlowski wrote: >> The driver data (struct s3c24xx_serial_drv_data) is only used to >> initialize the driver properly and is not modified. Make it const. > ... >> @@ -2755,9 +2755,9 @@ static struct s3c24xx_serial_drv_data s5pv210_serial_drv_data = { >> }, >> .fifosize = { 256, 64, 16, 16 }, >> }; >> -#define S5PV210_SERIAL_DRV_DATA ((kernel_ulong_t)&s5pv210_serial_drv_data) >> +#define S5PV210_SERIAL_DRV_DATA (&s5pv210_serial_drv_data) >> #else >> -#define S5PV210_SERIAL_DRV_DATA (kernel_ulong_t)NULL >> +#define S5PV210_SERIAL_DRV_DATA NULL > > Yet, I still don't see why the switch from ulong->ptr happens in this > "constify it" patch? All these defines S5PV210_SERIAL_DRV_DATA and so on are now const and are assigned to of_device_id.data (s3c24xx_uart_dt_match). Before, these were assigned with a cast: static const struct of_device_id s3c24xx_uart_dt_match[] = { { .compatible = "samsung,s5pv210-uart", .data = (void *)S5PV210_SERIAL_DRV_DATA } but since the actual data structure is const, I want to drop the cast. Casting const via (void *) might hide some possible issues, e.g. if of_device_id.data becomes actually non-const. There is no particular issue here, because of_device_id.data and S5PV210_SERIAL_DRV_DATA are const. But also because they are both const now, I want to drop the cast via void *. When (void *) is dropped, the S5PV210_SERIAL_DRV_DATA cannot be kernel_ulong_t: ../drivers/tty/serial/samsung_tty.c:2753:33: warning: initialization of ‘const void *’ from ‘long unsigned int’ makes pointer from integer without a cast [-Wint-conversion] 2753 | #define S5PV210_SERIAL_DRV_DATA (kernel_ulong_t)NULL Best regards, Krzysztof
>-----Original Message----- >From: Krzysztof Kozlowski [mailto:krzysztof.kozlowski@canonical.com] >Sent: Monday, March 7, 2022 1:39 PM >To: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com>; Alim Akhtar ><alim.akhtar@samsung.com>; Greg Kroah-Hartman ><gregkh@linuxfoundation.org>; Jiri Slaby <jirislaby@kernel.org>; linux-arm- >kernel@lists.infradead.org; linux-samsung-soc@vger.kernel.org; linux- >serial@vger.kernel.org; linux-kernel@vger.kernel.org >Subject: [PATCH v2 3/7] tty: serial: samsung: constify s3c24xx_serial_drv_data > >The driver data (struct s3c24xx_serial_drv_data) is only used to initialize the >driver properly and is not modified. Make it const. > >Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com> >--- Reviewed-by: Alim Akhtar <alim.akhtar@samsung.com> > drivers/tty/serial/samsung_tty.c | 130 +++++++++++++++---------------- > 1 file changed, 65 insertions(+), 65 deletions(-) > >diff --git a/drivers/tty/serial/samsung_tty.c >b/drivers/tty/serial/samsung_tty.c >index a9a75b5b9705..c4b13f2d6e26 100644 >--- a/drivers/tty/serial/samsung_tty.c >+++ b/drivers/tty/serial/samsung_tty.c >@@ -136,14 +136,14 @@ struct s3c24xx_uart_port { > unsigned int tx_mode; > unsigned int rx_mode; > >- struct s3c24xx_uart_info *info; >+ const struct s3c24xx_uart_info *info; > struct clk *clk; > struct clk *baudclk; > struct uart_port port; >- struct s3c24xx_serial_drv_data *drv_data; >+ const struct s3c24xx_serial_drv_data *drv_data; > > /* reference to platform data */ >- struct s3c2410_uartcfg *cfg; >+ const struct s3c2410_uartcfg *cfg; > > struct s3c24xx_uart_dma *dma; > >@@ -221,7 +221,7 @@ static inline void s3c24xx_clear_bit(struct uart_port >*port, int idx, > local_irq_restore(flags); > } > >-static inline struct s3c24xx_uart_port *to_ourport(struct uart_port *port) >+static inline struct s3c24xx_uart_port *to_ourport(const struct >+uart_port *port) > { > return container_of(port, struct s3c24xx_uart_port, port); } @@ - >573,13 +573,13 @@ static void s3c24xx_serial_stop_rx(struct uart_port *port) > } > } > >-static inline struct s3c24xx_uart_info >+static inline const struct s3c24xx_uart_info > *s3c24xx_port_to_info(struct uart_port *port) { > return to_ourport(port)->info; > } > >-static inline struct s3c2410_uartcfg >+static inline const struct s3c2410_uartcfg > *s3c24xx_port_to_cfg(struct uart_port *port) { > struct s3c24xx_uart_port *ourport; >@@ -594,7 +594,7 @@ static inline struct s3c2410_uartcfg static int >s3c24xx_serial_rx_fifocnt(struct s3c24xx_uart_port *ourport, > unsigned long ufstat) > { >- struct s3c24xx_uart_info *info = ourport->info; >+ const struct s3c24xx_uart_info *info = ourport->info; > > if (ufstat & info->rx_fifofull) > return ourport->port.fifosize; >@@ -986,7 +986,7 @@ static irqreturn_t apple_serial_handle_irq(int irq, void >*id) > > static unsigned int s3c24xx_serial_tx_empty(struct uart_port *port) { >- struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); >+ const struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); > unsigned long ufstat = rd_regl(port, S3C2410_UFSTAT); > unsigned long ufcon = rd_regl(port, S3C2410_UFCON); > >@@ -1405,7 +1405,7 @@ static void s3c24xx_serial_pm(struct uart_port >*port, unsigned int level, > > static inline int s3c24xx_serial_getsource(struct uart_port *port) { >- struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); >+ const struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); > unsigned int ucon; > > if (info->num_clks == 1) >@@ -1419,7 +1419,7 @@ static inline int s3c24xx_serial_getsource(struct >uart_port *port) static void s3c24xx_serial_setsource(struct uart_port *port, > unsigned int clk_sel) > { >- struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); >+ const struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); > unsigned int ucon; > > if (info->num_clks == 1) >@@ -1438,7 +1438,7 @@ static unsigned int s3c24xx_serial_getclk(struct >s3c24xx_uart_port *ourport, > unsigned int req_baud, struct clk **best_clk, > unsigned int *clk_num) > { >- struct s3c24xx_uart_info *info = ourport->info; >+ const struct s3c24xx_uart_info *info = ourport->info; > struct clk *clk; > unsigned long rate; > unsigned int cnt, baud, quot, best_quot = 0; @@ -1522,7 +1522,7 @@ >static void s3c24xx_serial_set_termios(struct uart_port *port, > struct ktermios *termios, > struct ktermios *old) > { >- struct s3c2410_uartcfg *cfg = s3c24xx_port_to_cfg(port); >+ const struct s3c2410_uartcfg *cfg = s3c24xx_port_to_cfg(port); > struct s3c24xx_uart_port *ourport = to_ourport(port); > struct clk *clk = ERR_PTR(-EINVAL); > unsigned long flags; >@@ -1691,7 +1691,7 @@ static const char *s3c24xx_serial_type(struct >uart_port *port) > > static void s3c24xx_serial_config_port(struct uart_port *port, int flags) { >- struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); >+ const struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); > > if (flags & UART_CONFIG_TYPE) > port->type = info->port_type; >@@ -1703,7 +1703,7 @@ static void s3c24xx_serial_config_port(struct >uart_port *port, int flags) static int s3c24xx_serial_verify_port(struct >uart_port *port, struct serial_struct *ser) { >- struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); >+ const struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); > > if (ser->type != PORT_UNKNOWN && ser->type != info->port_type) > return -EINVAL; >@@ -1873,9 +1873,9 @@ >s3c24xx_serial_ports[CONFIG_SERIAL_SAMSUNG_UARTS] = { > */ > > static void s3c24xx_serial_resetport(struct uart_port *port, >- struct s3c2410_uartcfg *cfg) >+ const struct s3c2410_uartcfg *cfg) > { >- struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); >+ const struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); > unsigned long ucon = rd_regl(port, S3C2410_UCON); > > ucon &= (info->clksel_mask | info->ucon_mask); @@ -1979,7 +1979,7 >@@ s3c24xx_serial_cpufreq_deregister(struct s3c24xx_uart_port *port) >static int s3c24xx_serial_enable_baudclk(struct s3c24xx_uart_port *ourport) >{ > struct device *dev = ourport->port.dev; >- struct s3c24xx_uart_info *info = ourport->info; >+ const struct s3c24xx_uart_info *info = ourport->info; > char clk_name[MAX_CLK_NAME_LENGTH]; > unsigned int clk_sel; > struct clk *clk; >@@ -2021,7 +2021,7 @@ static int s3c24xx_serial_init_port(struct >s3c24xx_uart_port *ourport, > struct platform_device *platdev) { > struct uart_port *port = &ourport->port; >- struct s3c2410_uartcfg *cfg = ourport->cfg; >+ const struct s3c2410_uartcfg *cfg = ourport->cfg; > struct resource *res; > int ret; > >@@ -2156,7 +2156,7 @@ static const struct of_device_id >s3c24xx_uart_dt_match[]; > > static int probe_index; > >-static inline struct s3c24xx_serial_drv_data * >+static inline const struct s3c24xx_serial_drv_data * > s3c24xx_get_driver_data(struct platform_device *pdev) { #ifdef >CONFIG_OF @@ -2419,7 +2419,7 @@ static struct uart_port *cons_uart; >static int s3c24xx_serial_console_txrdy(struct uart_port *port, unsigned int >ufcon) { >- struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); >+ const struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); > unsigned long ufstat, utrstat; > > if (ufcon & S3C2410_UFCON_FIFOMODE) { >@@ -2615,7 +2615,7 @@ static struct console s3c24xx_serial_console = { >#endif /* CONFIG_SERIAL_SAMSUNG_CONSOLE */ > > #ifdef CONFIG_CPU_S3C2410 >-static struct s3c24xx_serial_drv_data s3c2410_serial_drv_data = { >+static const struct s3c24xx_serial_drv_data s3c2410_serial_drv_data = { > .info = { > .name = "Samsung S3C2410 UART", > .type = TYPE_S3C24XX, >@@ -2637,13 +2637,13 @@ static struct s3c24xx_serial_drv_data >s3c2410_serial_drv_data = { > .ufcon = S3C2410_UFCON_DEFAULT, > }, > }; >-#define S3C2410_SERIAL_DRV_DATA >((kernel_ulong_t)&s3c2410_serial_drv_data) >+#define S3C2410_SERIAL_DRV_DATA (&s3c2410_serial_drv_data) > #else >-#define S3C2410_SERIAL_DRV_DATA (kernel_ulong_t)NULL >+#define S3C2410_SERIAL_DRV_DATA NULL > #endif > > #ifdef CONFIG_CPU_S3C2412 >-static struct s3c24xx_serial_drv_data s3c2412_serial_drv_data = { >+static const struct s3c24xx_serial_drv_data s3c2412_serial_drv_data = { > .info = { > .name = "Samsung S3C2412 UART", > .type = TYPE_S3C24XX, >@@ -2666,14 +2666,14 @@ static struct s3c24xx_serial_drv_data >s3c2412_serial_drv_data = { > .ufcon = S3C2410_UFCON_DEFAULT, > }, > }; >-#define S3C2412_SERIAL_DRV_DATA >((kernel_ulong_t)&s3c2412_serial_drv_data) >+#define S3C2412_SERIAL_DRV_DATA (&s3c2412_serial_drv_data) > #else >-#define S3C2412_SERIAL_DRV_DATA (kernel_ulong_t)NULL >+#define S3C2412_SERIAL_DRV_DATA NULL > #endif > > #if defined(CONFIG_CPU_S3C2440) || defined(CONFIG_CPU_S3C2416) || \ > defined(CONFIG_CPU_S3C2443) || defined(CONFIG_CPU_S3C2442) - >static struct s3c24xx_serial_drv_data s3c2440_serial_drv_data = { >+static const struct s3c24xx_serial_drv_data s3c2440_serial_drv_data = { > .info = { > .name = "Samsung S3C2440 UART", > .type = TYPE_S3C24XX, >@@ -2697,13 +2697,13 @@ static struct s3c24xx_serial_drv_data >s3c2440_serial_drv_data = { > .ufcon = S3C2410_UFCON_DEFAULT, > }, > }; >-#define S3C2440_SERIAL_DRV_DATA >((kernel_ulong_t)&s3c2440_serial_drv_data) >+#define S3C2440_SERIAL_DRV_DATA (&s3c2440_serial_drv_data) > #else >-#define S3C2440_SERIAL_DRV_DATA (kernel_ulong_t)NULL >+#define S3C2440_SERIAL_DRV_DATA NULL > #endif > > #if defined(CONFIG_CPU_S3C6400) || defined(CONFIG_CPU_S3C6410) - >static struct s3c24xx_serial_drv_data s3c6400_serial_drv_data = { >+static const struct s3c24xx_serial_drv_data s3c6400_serial_drv_data = { > .info = { > .name = "Samsung S3C6400 UART", > .type = TYPE_S3C6400, >@@ -2726,13 +2726,13 @@ static struct s3c24xx_serial_drv_data >s3c6400_serial_drv_data = { > .ufcon = S3C2410_UFCON_DEFAULT, > }, > }; >-#define S3C6400_SERIAL_DRV_DATA >((kernel_ulong_t)&s3c6400_serial_drv_data) >+#define S3C6400_SERIAL_DRV_DATA (&s3c6400_serial_drv_data) > #else >-#define S3C6400_SERIAL_DRV_DATA (kernel_ulong_t)NULL >+#define S3C6400_SERIAL_DRV_DATA NULL > #endif > > #ifdef CONFIG_CPU_S5PV210 >-static struct s3c24xx_serial_drv_data s5pv210_serial_drv_data = { >+static const struct s3c24xx_serial_drv_data s5pv210_serial_drv_data = { > .info = { > .name = "Samsung S5PV210 UART", > .type = TYPE_S3C6400, >@@ -2755,9 +2755,9 @@ static struct s3c24xx_serial_drv_data >s5pv210_serial_drv_data = { > }, > .fifosize = { 256, 64, 16, 16 }, > }; >-#define S5PV210_SERIAL_DRV_DATA >((kernel_ulong_t)&s5pv210_serial_drv_data) >+#define S5PV210_SERIAL_DRV_DATA (&s5pv210_serial_drv_data) > #else >-#define S5PV210_SERIAL_DRV_DATA (kernel_ulong_t)NULL >+#define S5PV210_SERIAL_DRV_DATA NULL > #endif > > #if defined(CONFIG_ARCH_EXYNOS) >@@ -2784,33 +2784,33 @@ static struct s3c24xx_serial_drv_data >s5pv210_serial_drv_data = { > .has_fracval = 1, \ > } \ > >-static struct s3c24xx_serial_drv_data exynos4210_serial_drv_data = { >+static const struct s3c24xx_serial_drv_data exynos4210_serial_drv_data >+= { > EXYNOS_COMMON_SERIAL_DRV_DATA(), > .fifosize = { 256, 64, 16, 16 }, > }; > >-static struct s3c24xx_serial_drv_data exynos5433_serial_drv_data = { >+static const struct s3c24xx_serial_drv_data exynos5433_serial_drv_data >+= { > EXYNOS_COMMON_SERIAL_DRV_DATA(), > .fifosize = { 64, 256, 16, 256 }, > }; > >-static struct s3c24xx_serial_drv_data exynos850_serial_drv_data = { >+static const struct s3c24xx_serial_drv_data exynos850_serial_drv_data = >+{ > EXYNOS_COMMON_SERIAL_DRV_DATA(), > .fifosize = { 256, 64, 64, 64 }, > }; > >-#define EXYNOS4210_SERIAL_DRV_DATA >((kernel_ulong_t)&exynos4210_serial_drv_data) >-#define EXYNOS5433_SERIAL_DRV_DATA >((kernel_ulong_t)&exynos5433_serial_drv_data) >-#define EXYNOS850_SERIAL_DRV_DATA >((kernel_ulong_t)&exynos850_serial_drv_data) >+#define EXYNOS4210_SERIAL_DRV_DATA (&exynos4210_serial_drv_data) >+#define EXYNOS5433_SERIAL_DRV_DATA (&exynos5433_serial_drv_data) >+#define EXYNOS850_SERIAL_DRV_DATA (&exynos850_serial_drv_data) > > #else >-#define EXYNOS4210_SERIAL_DRV_DATA ((kernel_ulong_t)NULL) -#define >EXYNOS5433_SERIAL_DRV_DATA ((kernel_ulong_t)NULL) -#define >EXYNOS850_SERIAL_DRV_DATA ((kernel_ulong_t)NULL) >+#define EXYNOS4210_SERIAL_DRV_DATA NULL #define >+EXYNOS5433_SERIAL_DRV_DATA NULL #define >EXYNOS850_SERIAL_DRV_DATA NULL > #endif > > #ifdef CONFIG_ARCH_APPLE >-static struct s3c24xx_serial_drv_data s5l_serial_drv_data = { >+static const struct s3c24xx_serial_drv_data s5l_serial_drv_data = { > .info = { > .name = "Apple S5L UART", > .type = TYPE_APPLE_S5L, >@@ -2832,39 +2832,39 @@ static struct s3c24xx_serial_drv_data >s5l_serial_drv_data = { > .ufcon = S3C2410_UFCON_DEFAULT, > }, > }; >-#define S5L_SERIAL_DRV_DATA ((kernel_ulong_t)&s5l_serial_drv_data) >+#define S5L_SERIAL_DRV_DATA (&s5l_serial_drv_data) > #else >-#define S5L_SERIAL_DRV_DATA ((kernel_ulong_t)NULL) >+#define S5L_SERIAL_DRV_DATA NULL > #endif > > static const struct platform_device_id s3c24xx_serial_driver_ids[] = { > { > .name = "s3c2410-uart", >- .driver_data = S3C2410_SERIAL_DRV_DATA, >+ .driver_data = >(kernel_ulong_t)S3C2410_SERIAL_DRV_DATA, > }, { > .name = "s3c2412-uart", >- .driver_data = S3C2412_SERIAL_DRV_DATA, >+ .driver_data = >(kernel_ulong_t)S3C2412_SERIAL_DRV_DATA, > }, { > .name = "s3c2440-uart", >- .driver_data = S3C2440_SERIAL_DRV_DATA, >+ .driver_data = >(kernel_ulong_t)S3C2440_SERIAL_DRV_DATA, > }, { > .name = "s3c6400-uart", >- .driver_data = S3C6400_SERIAL_DRV_DATA, >+ .driver_data = >(kernel_ulong_t)S3C6400_SERIAL_DRV_DATA, > }, { > .name = "s5pv210-uart", >- .driver_data = S5PV210_SERIAL_DRV_DATA, >+ .driver_data = >(kernel_ulong_t)S5PV210_SERIAL_DRV_DATA, > }, { > .name = "exynos4210-uart", >- .driver_data = EXYNOS4210_SERIAL_DRV_DATA, >+ .driver_data = >(kernel_ulong_t)EXYNOS4210_SERIAL_DRV_DATA, > }, { > .name = "exynos5433-uart", >- .driver_data = EXYNOS5433_SERIAL_DRV_DATA, >+ .driver_data = >(kernel_ulong_t)EXYNOS5433_SERIAL_DRV_DATA, > }, { > .name = "s5l-uart", >- .driver_data = S5L_SERIAL_DRV_DATA, >+ .driver_data = (kernel_ulong_t)S5L_SERIAL_DRV_DATA, > }, { > .name = "exynos850-uart", >- .driver_data = EXYNOS850_SERIAL_DRV_DATA, >+ .driver_data = >(kernel_ulong_t)EXYNOS850_SERIAL_DRV_DATA, > }, > { }, > }; >@@ -2873,23 +2873,23 @@ MODULE_DEVICE_TABLE(platform, >s3c24xx_serial_driver_ids); #ifdef CONFIG_OF static const struct >of_device_id s3c24xx_uart_dt_match[] = { > { .compatible = "samsung,s3c2410-uart", >- .data = (void *)S3C2410_SERIAL_DRV_DATA }, >+ .data = S3C2410_SERIAL_DRV_DATA }, > { .compatible = "samsung,s3c2412-uart", >- .data = (void *)S3C2412_SERIAL_DRV_DATA }, >+ .data = S3C2412_SERIAL_DRV_DATA }, > { .compatible = "samsung,s3c2440-uart", >- .data = (void *)S3C2440_SERIAL_DRV_DATA }, >+ .data = S3C2440_SERIAL_DRV_DATA }, > { .compatible = "samsung,s3c6400-uart", >- .data = (void *)S3C6400_SERIAL_DRV_DATA }, >+ .data = S3C6400_SERIAL_DRV_DATA }, > { .compatible = "samsung,s5pv210-uart", >- .data = (void *)S5PV210_SERIAL_DRV_DATA }, >+ .data = S5PV210_SERIAL_DRV_DATA }, > { .compatible = "samsung,exynos4210-uart", >- .data = (void *)EXYNOS4210_SERIAL_DRV_DATA }, >+ .data = EXYNOS4210_SERIAL_DRV_DATA }, > { .compatible = "samsung,exynos5433-uart", >- .data = (void *)EXYNOS5433_SERIAL_DRV_DATA }, >+ .data = EXYNOS5433_SERIAL_DRV_DATA }, > { .compatible = "apple,s5l-uart", >- .data = (void *)S5L_SERIAL_DRV_DATA }, >+ .data = S5L_SERIAL_DRV_DATA }, > { .compatible = "samsung,exynos850-uart", >- .data = (void *)EXYNOS850_SERIAL_DRV_DATA }, >+ .data = EXYNOS850_SERIAL_DRV_DATA }, > {}, > }; > MODULE_DEVICE_TABLE(of, s3c24xx_uart_dt_match); >-- >2.32.0
On 07/03/2022 09:40, Krzysztof Kozlowski wrote: > On 07/03/2022 09:33, Jiri Slaby wrote: >> On 07. 03. 22, 9:09, Krzysztof Kozlowski wrote: >>> The driver data (struct s3c24xx_serial_drv_data) is only used to >>> initialize the driver properly and is not modified. Make it const. >> ... >>> @@ -2755,9 +2755,9 @@ static struct s3c24xx_serial_drv_data s5pv210_serial_drv_data = { >>> }, >>> .fifosize = { 256, 64, 16, 16 }, >>> }; >>> -#define S5PV210_SERIAL_DRV_DATA ((kernel_ulong_t)&s5pv210_serial_drv_data) >>> +#define S5PV210_SERIAL_DRV_DATA (&s5pv210_serial_drv_data) >>> #else >>> -#define S5PV210_SERIAL_DRV_DATA (kernel_ulong_t)NULL >>> +#define S5PV210_SERIAL_DRV_DATA NULL >> >> Yet, I still don't see why the switch from ulong->ptr happens in this >> "constify it" patch? > > All these defines S5PV210_SERIAL_DRV_DATA and so on are now const and > are assigned to of_device_id.data (s3c24xx_uart_dt_match). Before, these > were assigned with a cast: > > static const struct of_device_id s3c24xx_uart_dt_match[] = { > { .compatible = "samsung,s5pv210-uart", > > .data = (void *)S5PV210_SERIAL_DRV_DATA } > > but since the actual data structure is const, I want to drop the cast. > Casting const via (void *) might hide some possible issues, e.g. if > of_device_id.data becomes actually non-const. There is no particular > issue here, because of_device_id.data and S5PV210_SERIAL_DRV_DATA are > const. But also because they are both const now, I want to drop the cast > via void *. > > When (void *) is dropped, the S5PV210_SERIAL_DRV_DATA cannot be > kernel_ulong_t: > > ../drivers/tty/serial/samsung_tty.c:2753:33: warning: initialization of > ‘const void *’ from ‘long unsigned int’ makes pointer from integer > without a cast [-Wint-conversion] > > 2753 | #define S5PV210_SERIAL_DRV_DATA (kernel_ulong_t)NULL > I will split the casts removal to separate patch. I hope this clarifies a bit. Best regards, Krzysztof
diff --git a/drivers/tty/serial/samsung_tty.c b/drivers/tty/serial/samsung_tty.c index a9a75b5b9705..c4b13f2d6e26 100644 --- a/drivers/tty/serial/samsung_tty.c +++ b/drivers/tty/serial/samsung_tty.c @@ -136,14 +136,14 @@ struct s3c24xx_uart_port { unsigned int tx_mode; unsigned int rx_mode; - struct s3c24xx_uart_info *info; + const struct s3c24xx_uart_info *info; struct clk *clk; struct clk *baudclk; struct uart_port port; - struct s3c24xx_serial_drv_data *drv_data; + const struct s3c24xx_serial_drv_data *drv_data; /* reference to platform data */ - struct s3c2410_uartcfg *cfg; + const struct s3c2410_uartcfg *cfg; struct s3c24xx_uart_dma *dma; @@ -221,7 +221,7 @@ static inline void s3c24xx_clear_bit(struct uart_port *port, int idx, local_irq_restore(flags); } -static inline struct s3c24xx_uart_port *to_ourport(struct uart_port *port) +static inline struct s3c24xx_uart_port *to_ourport(const struct uart_port *port) { return container_of(port, struct s3c24xx_uart_port, port); } @@ -573,13 +573,13 @@ static void s3c24xx_serial_stop_rx(struct uart_port *port) } } -static inline struct s3c24xx_uart_info +static inline const struct s3c24xx_uart_info *s3c24xx_port_to_info(struct uart_port *port) { return to_ourport(port)->info; } -static inline struct s3c2410_uartcfg +static inline const struct s3c2410_uartcfg *s3c24xx_port_to_cfg(struct uart_port *port) { struct s3c24xx_uart_port *ourport; @@ -594,7 +594,7 @@ static inline struct s3c2410_uartcfg static int s3c24xx_serial_rx_fifocnt(struct s3c24xx_uart_port *ourport, unsigned long ufstat) { - struct s3c24xx_uart_info *info = ourport->info; + const struct s3c24xx_uart_info *info = ourport->info; if (ufstat & info->rx_fifofull) return ourport->port.fifosize; @@ -986,7 +986,7 @@ static irqreturn_t apple_serial_handle_irq(int irq, void *id) static unsigned int s3c24xx_serial_tx_empty(struct uart_port *port) { - struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); + const struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); unsigned long ufstat = rd_regl(port, S3C2410_UFSTAT); unsigned long ufcon = rd_regl(port, S3C2410_UFCON); @@ -1405,7 +1405,7 @@ static void s3c24xx_serial_pm(struct uart_port *port, unsigned int level, static inline int s3c24xx_serial_getsource(struct uart_port *port) { - struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); + const struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); unsigned int ucon; if (info->num_clks == 1) @@ -1419,7 +1419,7 @@ static inline int s3c24xx_serial_getsource(struct uart_port *port) static void s3c24xx_serial_setsource(struct uart_port *port, unsigned int clk_sel) { - struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); + const struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); unsigned int ucon; if (info->num_clks == 1) @@ -1438,7 +1438,7 @@ static unsigned int s3c24xx_serial_getclk(struct s3c24xx_uart_port *ourport, unsigned int req_baud, struct clk **best_clk, unsigned int *clk_num) { - struct s3c24xx_uart_info *info = ourport->info; + const struct s3c24xx_uart_info *info = ourport->info; struct clk *clk; unsigned long rate; unsigned int cnt, baud, quot, best_quot = 0; @@ -1522,7 +1522,7 @@ static void s3c24xx_serial_set_termios(struct uart_port *port, struct ktermios *termios, struct ktermios *old) { - struct s3c2410_uartcfg *cfg = s3c24xx_port_to_cfg(port); + const struct s3c2410_uartcfg *cfg = s3c24xx_port_to_cfg(port); struct s3c24xx_uart_port *ourport = to_ourport(port); struct clk *clk = ERR_PTR(-EINVAL); unsigned long flags; @@ -1691,7 +1691,7 @@ static const char *s3c24xx_serial_type(struct uart_port *port) static void s3c24xx_serial_config_port(struct uart_port *port, int flags) { - struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); + const struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); if (flags & UART_CONFIG_TYPE) port->type = info->port_type; @@ -1703,7 +1703,7 @@ static void s3c24xx_serial_config_port(struct uart_port *port, int flags) static int s3c24xx_serial_verify_port(struct uart_port *port, struct serial_struct *ser) { - struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); + const struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); if (ser->type != PORT_UNKNOWN && ser->type != info->port_type) return -EINVAL; @@ -1873,9 +1873,9 @@ s3c24xx_serial_ports[CONFIG_SERIAL_SAMSUNG_UARTS] = { */ static void s3c24xx_serial_resetport(struct uart_port *port, - struct s3c2410_uartcfg *cfg) + const struct s3c2410_uartcfg *cfg) { - struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); + const struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); unsigned long ucon = rd_regl(port, S3C2410_UCON); ucon &= (info->clksel_mask | info->ucon_mask); @@ -1979,7 +1979,7 @@ s3c24xx_serial_cpufreq_deregister(struct s3c24xx_uart_port *port) static int s3c24xx_serial_enable_baudclk(struct s3c24xx_uart_port *ourport) { struct device *dev = ourport->port.dev; - struct s3c24xx_uart_info *info = ourport->info; + const struct s3c24xx_uart_info *info = ourport->info; char clk_name[MAX_CLK_NAME_LENGTH]; unsigned int clk_sel; struct clk *clk; @@ -2021,7 +2021,7 @@ static int s3c24xx_serial_init_port(struct s3c24xx_uart_port *ourport, struct platform_device *platdev) { struct uart_port *port = &ourport->port; - struct s3c2410_uartcfg *cfg = ourport->cfg; + const struct s3c2410_uartcfg *cfg = ourport->cfg; struct resource *res; int ret; @@ -2156,7 +2156,7 @@ static const struct of_device_id s3c24xx_uart_dt_match[]; static int probe_index; -static inline struct s3c24xx_serial_drv_data * +static inline const struct s3c24xx_serial_drv_data * s3c24xx_get_driver_data(struct platform_device *pdev) { #ifdef CONFIG_OF @@ -2419,7 +2419,7 @@ static struct uart_port *cons_uart; static int s3c24xx_serial_console_txrdy(struct uart_port *port, unsigned int ufcon) { - struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); + const struct s3c24xx_uart_info *info = s3c24xx_port_to_info(port); unsigned long ufstat, utrstat; if (ufcon & S3C2410_UFCON_FIFOMODE) { @@ -2615,7 +2615,7 @@ static struct console s3c24xx_serial_console = { #endif /* CONFIG_SERIAL_SAMSUNG_CONSOLE */ #ifdef CONFIG_CPU_S3C2410 -static struct s3c24xx_serial_drv_data s3c2410_serial_drv_data = { +static const struct s3c24xx_serial_drv_data s3c2410_serial_drv_data = { .info = { .name = "Samsung S3C2410 UART", .type = TYPE_S3C24XX, @@ -2637,13 +2637,13 @@ static struct s3c24xx_serial_drv_data s3c2410_serial_drv_data = { .ufcon = S3C2410_UFCON_DEFAULT, }, }; -#define S3C2410_SERIAL_DRV_DATA ((kernel_ulong_t)&s3c2410_serial_drv_data) +#define S3C2410_SERIAL_DRV_DATA (&s3c2410_serial_drv_data) #else -#define S3C2410_SERIAL_DRV_DATA (kernel_ulong_t)NULL +#define S3C2410_SERIAL_DRV_DATA NULL #endif #ifdef CONFIG_CPU_S3C2412 -static struct s3c24xx_serial_drv_data s3c2412_serial_drv_data = { +static const struct s3c24xx_serial_drv_data s3c2412_serial_drv_data = { .info = { .name = "Samsung S3C2412 UART", .type = TYPE_S3C24XX, @@ -2666,14 +2666,14 @@ static struct s3c24xx_serial_drv_data s3c2412_serial_drv_data = { .ufcon = S3C2410_UFCON_DEFAULT, }, }; -#define S3C2412_SERIAL_DRV_DATA ((kernel_ulong_t)&s3c2412_serial_drv_data) +#define S3C2412_SERIAL_DRV_DATA (&s3c2412_serial_drv_data) #else -#define S3C2412_SERIAL_DRV_DATA (kernel_ulong_t)NULL +#define S3C2412_SERIAL_DRV_DATA NULL #endif #if defined(CONFIG_CPU_S3C2440) || defined(CONFIG_CPU_S3C2416) || \ defined(CONFIG_CPU_S3C2443) || defined(CONFIG_CPU_S3C2442) -static struct s3c24xx_serial_drv_data s3c2440_serial_drv_data = { +static const struct s3c24xx_serial_drv_data s3c2440_serial_drv_data = { .info = { .name = "Samsung S3C2440 UART", .type = TYPE_S3C24XX, @@ -2697,13 +2697,13 @@ static struct s3c24xx_serial_drv_data s3c2440_serial_drv_data = { .ufcon = S3C2410_UFCON_DEFAULT, }, }; -#define S3C2440_SERIAL_DRV_DATA ((kernel_ulong_t)&s3c2440_serial_drv_data) +#define S3C2440_SERIAL_DRV_DATA (&s3c2440_serial_drv_data) #else -#define S3C2440_SERIAL_DRV_DATA (kernel_ulong_t)NULL +#define S3C2440_SERIAL_DRV_DATA NULL #endif #if defined(CONFIG_CPU_S3C6400) || defined(CONFIG_CPU_S3C6410) -static struct s3c24xx_serial_drv_data s3c6400_serial_drv_data = { +static const struct s3c24xx_serial_drv_data s3c6400_serial_drv_data = { .info = { .name = "Samsung S3C6400 UART", .type = TYPE_S3C6400, @@ -2726,13 +2726,13 @@ static struct s3c24xx_serial_drv_data s3c6400_serial_drv_data = { .ufcon = S3C2410_UFCON_DEFAULT, }, }; -#define S3C6400_SERIAL_DRV_DATA ((kernel_ulong_t)&s3c6400_serial_drv_data) +#define S3C6400_SERIAL_DRV_DATA (&s3c6400_serial_drv_data) #else -#define S3C6400_SERIAL_DRV_DATA (kernel_ulong_t)NULL +#define S3C6400_SERIAL_DRV_DATA NULL #endif #ifdef CONFIG_CPU_S5PV210 -static struct s3c24xx_serial_drv_data s5pv210_serial_drv_data = { +static const struct s3c24xx_serial_drv_data s5pv210_serial_drv_data = { .info = { .name = "Samsung S5PV210 UART", .type = TYPE_S3C6400, @@ -2755,9 +2755,9 @@ static struct s3c24xx_serial_drv_data s5pv210_serial_drv_data = { }, .fifosize = { 256, 64, 16, 16 }, }; -#define S5PV210_SERIAL_DRV_DATA ((kernel_ulong_t)&s5pv210_serial_drv_data) +#define S5PV210_SERIAL_DRV_DATA (&s5pv210_serial_drv_data) #else -#define S5PV210_SERIAL_DRV_DATA (kernel_ulong_t)NULL +#define S5PV210_SERIAL_DRV_DATA NULL #endif #if defined(CONFIG_ARCH_EXYNOS) @@ -2784,33 +2784,33 @@ static struct s3c24xx_serial_drv_data s5pv210_serial_drv_data = { .has_fracval = 1, \ } \ -static struct s3c24xx_serial_drv_data exynos4210_serial_drv_data = { +static const struct s3c24xx_serial_drv_data exynos4210_serial_drv_data = { EXYNOS_COMMON_SERIAL_DRV_DATA(), .fifosize = { 256, 64, 16, 16 }, }; -static struct s3c24xx_serial_drv_data exynos5433_serial_drv_data = { +static const struct s3c24xx_serial_drv_data exynos5433_serial_drv_data = { EXYNOS_COMMON_SERIAL_DRV_DATA(), .fifosize = { 64, 256, 16, 256 }, }; -static struct s3c24xx_serial_drv_data exynos850_serial_drv_data = { +static const struct s3c24xx_serial_drv_data exynos850_serial_drv_data = { EXYNOS_COMMON_SERIAL_DRV_DATA(), .fifosize = { 256, 64, 64, 64 }, }; -#define EXYNOS4210_SERIAL_DRV_DATA ((kernel_ulong_t)&exynos4210_serial_drv_data) -#define EXYNOS5433_SERIAL_DRV_DATA ((kernel_ulong_t)&exynos5433_serial_drv_data) -#define EXYNOS850_SERIAL_DRV_DATA ((kernel_ulong_t)&exynos850_serial_drv_data) +#define EXYNOS4210_SERIAL_DRV_DATA (&exynos4210_serial_drv_data) +#define EXYNOS5433_SERIAL_DRV_DATA (&exynos5433_serial_drv_data) +#define EXYNOS850_SERIAL_DRV_DATA (&exynos850_serial_drv_data) #else -#define EXYNOS4210_SERIAL_DRV_DATA ((kernel_ulong_t)NULL) -#define EXYNOS5433_SERIAL_DRV_DATA ((kernel_ulong_t)NULL) -#define EXYNOS850_SERIAL_DRV_DATA ((kernel_ulong_t)NULL) +#define EXYNOS4210_SERIAL_DRV_DATA NULL +#define EXYNOS5433_SERIAL_DRV_DATA NULL +#define EXYNOS850_SERIAL_DRV_DATA NULL #endif #ifdef CONFIG_ARCH_APPLE -static struct s3c24xx_serial_drv_data s5l_serial_drv_data = { +static const struct s3c24xx_serial_drv_data s5l_serial_drv_data = { .info = { .name = "Apple S5L UART", .type = TYPE_APPLE_S5L, @@ -2832,39 +2832,39 @@ static struct s3c24xx_serial_drv_data s5l_serial_drv_data = { .ufcon = S3C2410_UFCON_DEFAULT, }, }; -#define S5L_SERIAL_DRV_DATA ((kernel_ulong_t)&s5l_serial_drv_data) +#define S5L_SERIAL_DRV_DATA (&s5l_serial_drv_data) #else -#define S5L_SERIAL_DRV_DATA ((kernel_ulong_t)NULL) +#define S5L_SERIAL_DRV_DATA NULL #endif static const struct platform_device_id s3c24xx_serial_driver_ids[] = { { .name = "s3c2410-uart", - .driver_data = S3C2410_SERIAL_DRV_DATA, + .driver_data = (kernel_ulong_t)S3C2410_SERIAL_DRV_DATA, }, { .name = "s3c2412-uart", - .driver_data = S3C2412_SERIAL_DRV_DATA, + .driver_data = (kernel_ulong_t)S3C2412_SERIAL_DRV_DATA, }, { .name = "s3c2440-uart", - .driver_data = S3C2440_SERIAL_DRV_DATA, + .driver_data = (kernel_ulong_t)S3C2440_SERIAL_DRV_DATA, }, { .name = "s3c6400-uart", - .driver_data = S3C6400_SERIAL_DRV_DATA, + .driver_data = (kernel_ulong_t)S3C6400_SERIAL_DRV_DATA, }, { .name = "s5pv210-uart", - .driver_data = S5PV210_SERIAL_DRV_DATA, + .driver_data = (kernel_ulong_t)S5PV210_SERIAL_DRV_DATA, }, { .name = "exynos4210-uart", - .driver_data = EXYNOS4210_SERIAL_DRV_DATA, + .driver_data = (kernel_ulong_t)EXYNOS4210_SERIAL_DRV_DATA, }, { .name = "exynos5433-uart", - .driver_data = EXYNOS5433_SERIAL_DRV_DATA, + .driver_data = (kernel_ulong_t)EXYNOS5433_SERIAL_DRV_DATA, }, { .name = "s5l-uart", - .driver_data = S5L_SERIAL_DRV_DATA, + .driver_data = (kernel_ulong_t)S5L_SERIAL_DRV_DATA, }, { .name = "exynos850-uart", - .driver_data = EXYNOS850_SERIAL_DRV_DATA, + .driver_data = (kernel_ulong_t)EXYNOS850_SERIAL_DRV_DATA, }, { }, }; @@ -2873,23 +2873,23 @@ MODULE_DEVICE_TABLE(platform, s3c24xx_serial_driver_ids); #ifdef CONFIG_OF static const struct of_device_id s3c24xx_uart_dt_match[] = { { .compatible = "samsung,s3c2410-uart", - .data = (void *)S3C2410_SERIAL_DRV_DATA }, + .data = S3C2410_SERIAL_DRV_DATA }, { .compatible = "samsung,s3c2412-uart", - .data = (void *)S3C2412_SERIAL_DRV_DATA }, + .data = S3C2412_SERIAL_DRV_DATA }, { .compatible = "samsung,s3c2440-uart", - .data = (void *)S3C2440_SERIAL_DRV_DATA }, + .data = S3C2440_SERIAL_DRV_DATA }, { .compatible = "samsung,s3c6400-uart", - .data = (void *)S3C6400_SERIAL_DRV_DATA }, + .data = S3C6400_SERIAL_DRV_DATA }, { .compatible = "samsung,s5pv210-uart", - .data = (void *)S5PV210_SERIAL_DRV_DATA }, + .data = S5PV210_SERIAL_DRV_DATA }, { .compatible = "samsung,exynos4210-uart", - .data = (void *)EXYNOS4210_SERIAL_DRV_DATA }, + .data = EXYNOS4210_SERIAL_DRV_DATA }, { .compatible = "samsung,exynos5433-uart", - .data = (void *)EXYNOS5433_SERIAL_DRV_DATA }, + .data = EXYNOS5433_SERIAL_DRV_DATA }, { .compatible = "apple,s5l-uart", - .data = (void *)S5L_SERIAL_DRV_DATA }, + .data = S5L_SERIAL_DRV_DATA }, { .compatible = "samsung,exynos850-uart", - .data = (void *)EXYNOS850_SERIAL_DRV_DATA }, + .data = EXYNOS850_SERIAL_DRV_DATA }, {}, }; MODULE_DEVICE_TABLE(of, s3c24xx_uart_dt_match);
The driver data (struct s3c24xx_serial_drv_data) is only used to initialize the driver properly and is not modified. Make it const. Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@canonical.com> --- drivers/tty/serial/samsung_tty.c | 130 +++++++++++++++---------------- 1 file changed, 65 insertions(+), 65 deletions(-)