Re: [RFC PATCH] fbdev: maxinefb: fix build issues

Randy Dunlap <[email protected]>
Newsgroups org.kernel.vger.linux-fbdev,org.freedesktop.lists.dri-devel,org.kernel.vger.linux-kernel,org.kernel.vger.linux-mips
Message-ID <[email protected]>
Hi,

On 8/9/26 8:24 PM, Philippe Mathieu-Daudé wrote:
> Hi Randy,
> 
> On 10/8/26 01:48, Randy Dunlap wrote:
>> This is all ancient source code from the beginning of git time.
>> Now builds cleanly on 32-bit and 64-bit MACH_DECSTATION.
>>
>> Fixes these build errors/warnings:
>>
>> ../drivers/video/fbdev/maxinefb.c:64:6: warning: no previous prototype for 'maxinefb_ims332_write_register' [-Wmissing-prototypes]
>>     64 | void maxinefb_ims332_write_register(int regno, register unsigned int val)
>>        |      ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>
>> In file included from ../drivers/video/fbdev/maxinefb.c:34:
>> ../drivers/video/fbdev/maxinefb.c: In function 'maxinefb_ims332_write_register':
>> ../include/video/maxinefb.h:16:41: error: implicit declaration of function 'KSEG1ADDR'; did you mean 'CKSEG1ADDR'? [-Wimplicit-function-declaration]
>>     16 | #define MAXINEFB_IMS332_ADDRESS         KSEG1ADDR(0x1c140000)
>>        |                                         ^~~~~~~~~
>> ../drivers/video/fbdev/maxinefb.c:66:49: note: in expansion of macro 'MAXINEFB_IMS332_ADDRESS'
>>     66 |         register unsigned char *regs = (char *) MAXINEFB_IMS332_ADDRESS;
>>        |                                                 ^~~~~~~~~~~~~~~~~~~~~~~
>> ../drivers/video/fbdev/maxinefb.c:66:40: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
>>     66 |         register unsigned char *regs = (char *) MAXINEFB_IMS332_ADDRESS;
>>        |                                        ^
>> ../drivers/video/fbdev/maxinefb.c: At top level:
>> ../drivers/video/fbdev/maxinefb.c:74:14: warning: no previous prototype for 'maxinefb_ims332_read_register' [-Wmissing-prototypes]
>>     74 | unsigned int maxinefb_ims332_read_register(int regno)
>>        |              ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> ../drivers/video/fbdev/maxinefb.c: At top level:
>> ../drivers/video/fbdev/maxinefb.c:74:21: warning: 'maxinefb_ims332_read_register' defined but not used [-Wunused-function]
>>     74 | static unsigned int maxinefb_ims332_read_register(int regno)
>>        |                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>> ../drivers/video/fbdev/maxinefb.c: In function 'maxinefb_ims332_read_register':
>> ../drivers/video/fbdev/maxinefb.c:76:40: warning: cast to pointer from integer of different size [-Wint-to-pointer-cast]
>>     76 |         register unsigned char *regs = (char *) MAXINEFB_IMS332_ADDRESS;
>>        |                                        ^
>> ../drivers/video/fbdev/maxinefb.c: At top level:
>> ../drivers/video/fbdev/maxinefb.c:114:12: warning: no previous prototype for 'maxinefb_init' [-Wmissing-prototypes]
>>    114 | int __init maxinefb_init(void)
>>        |            ^~~~~~~~~~~~~
>> In file included from ../drivers/video/fbdev/maxinefb.c:34:
>> ../drivers/video/fbdev/maxinefb.c: In function 'maxinefb_init':
>> ../include/video/maxinefb.h:22:41: error: implicit declaration of function 'KSEG1ADDR'; did you mean 'CKSEG1ADDR'? [-Wimplicit-function-declaration]
>>     22 | #define DS5000_xx_ONBOARD_FBMEM_START   KSEG1ADDR(0x0a000000)
>>        |                                         ^~~~~~~~~
>> ../drivers/video/fbdev/maxinefb.c:119:20: note: in expansion of macro 'DS5000_xx_ONBOARD_FBMEM_START'
>>    119 |         fb_start = DS5000_xx_ONBOARD_FBMEM_START;
>>        |                    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>>
>> Suggested-by: "Maciej W. Rozycki" <[email protected]> # for s/KSEG1ADDR/CKSEG1ADDR/
>> Signed-off-by: Randy Dunlap <[email protected]>
>> ---
>> Cc: "Maciej W. Rozycki" <[email protected]>
>> Cc: Helge Deller <[email protected]>
>> Cc: [email protected]
>> Cc: [email protected]
>> Cc: Thomas Bogendoerfer <[email protected]>
>> Cc: [email protected]
>>
>>   drivers/video/fbdev/maxinefb.c |   17 ++---------------
>>   include/video/maxinefb.h       |    4 ++--
>>   2 files changed, 4 insertions(+), 17 deletions(-)
>>
>> --- linux-next-20260807.orig/drivers/video/fbdev/maxinefb.c
>> +++ linux-next-20260807/drivers/video/fbdev/maxinefb.c
>> @@ -61,7 +61,7 @@ static struct fb_fix_screeninfo maxinefb
>>     /* Handle the funny Inmos RamDAC/video controller ... */
>>   -void maxinefb_ims332_write_register(int regno, register unsigned int val)
>> +static void maxinefb_ims332_write_register(int regno, register unsigned int val)
>>   {
>>       register unsigned char *regs = (char *) MAXINEFB_IMS332_ADDRESS;
>>       unsigned char *wptr;
>> @@ -71,19 +71,6 @@ void maxinefb_ims332_write_register(int
>>       *((volatile unsigned short *) (wptr)) = val;
>>   }
>>   -unsigned int maxinefb_ims332_read_register(int regno)
>> -{
>> -    register unsigned char *regs = (char *) MAXINEFB_IMS332_ADDRESS;
>> -    unsigned char *rptr;
>> -    register unsigned int j, k;
>> -
>> -    rptr = regs + 0x80000 + (regno << 4);
>> -    j = *((volatile unsigned short *) rptr);
>> -    k = *((volatile unsigned short *) regs);
>> -
>> -    return (j & 0xffff) | ((k & 0xff00) << 8);
>> -}
>> -
>>   /* Set the palette */
>>   static int maxinefb_setcolreg(unsigned regno, unsigned red, unsigned green,
>>                     unsigned blue, unsigned transp, struct fb_info *info)
>> @@ -111,7 +98,7 @@ static const struct fb_ops maxinefb_ops
>>       .fb_setcolreg    = maxinefb_setcolreg,
>>   };
>>   -int __init maxinefb_init(void)
>> +static int __init maxinefb_init(void)
>>   {
>>       unsigned long fboff;
>>       unsigned long fb_start;
>> --- linux-next-20260807.orig/include/video/maxinefb.h
>> +++ linux-next-20260807/include/video/maxinefb.h
>> @@ -13,13 +13,13 @@
>>   /*
>>    * IMS332 video controller register base address
>>    */
>> -#define MAXINEFB_IMS332_ADDRESS        KSEG1ADDR(0x1c140000)
>> +#define MAXINEFB_IMS332_ADDRESS        CKSEG1ADDR(0x1c140000)
>>     /*
>>    * Begin of DECstation 5000/xx onboard framebuffer memory, default resolution
>>    * is 1024x768x8
>>    */
>> -#define DS5000_xx_ONBOARD_FBMEM_START    KSEG1ADDR(0x0a000000)
>> +#define DS5000_xx_ONBOARD_FBMEM_START    CKSEG1ADDR(0x0a000000)
> 
> The change looks correct, but clearly this has never been tested
> on a 64-bit DECstation, so I'm not sure having this code being
> now built is an improvement.
> 
> What about:
> 
> -- >8 --
> diff --git a/drivers/video/fbdev/Kconfig b/drivers/video/fbdev/Kconfig
> index ac9ac4287c6a..ff17afe6b8b3 100644
> --- a/drivers/video/fbdev/Kconfig
> +++ b/drivers/video/fbdev/Kconfig
> @@ -1436,7 +1436,7 @@ config FB_PMAGB_B
> 
>  config FB_MAXINE
>         bool "Maxine (Personal DECstation) onboard framebuffer support"
> -       depends on (FB = y) && MACH_DECSTATION
> +       depends on (FB = y) && MACH_DECSTATION && 32BIT
>         select FB_IOMEM_HELPERS
>         help
>           Support for the onboard framebuffer (1024x768x8) in the Personal
> ---
> 
> ?

I guess I'm OK with that. I'm even OK with removing the driver completely.

Maciej did say in https://lore.kernel.org/all/[email protected]/
that: "the proper way would be by using `ioremap' really.  I'll make a patch."
[That was 15.Aug.2023.]


-- 
~Randy
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.