mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/chenhuacai/linux-loongson
synced 2025-08-27 15:36:48 +00:00

Andy reported: Debian clang version 19.1.7 is not happy when compiled with `make W=1` (note, CONFIG_WERROR=y is the default): ipmi_si_platform.c:268:15: error: cast to smaller integer type 'enum si_type' from 'const void *' [-Werror,-Wvoid-pointer-to-enum-cast] 268 | io.si_type = (enum si_type)device_get_match_data(&pdev->dev); The IPMI SI type is an enum that was cast into a pointer that was then cast into an enum again. That's not the greatest style, so instead create an info structure to hold the data and use that. Reported-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Closes: https://lore.kernel.org/lkml/20250415085156.446430-1-andriy.shevchenko@linux.intel.com/ Suggested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Tested-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: Corey Minyard <corey@minyard.net>
62 lines
1.3 KiB
C
62 lines
1.3 KiB
C
// SPDX-License-Identifier: GPL-2.0+
|
|
|
|
#include <linux/module.h>
|
|
#include <asm/hardware.h> /* for register_parisc_driver() stuff */
|
|
#include <asm/parisc-device.h>
|
|
#include "ipmi_si.h"
|
|
|
|
static bool parisc_registered;
|
|
|
|
static int __init ipmi_parisc_probe(struct parisc_device *dev)
|
|
{
|
|
struct si_sm_io io;
|
|
|
|
memset(&io, 0, sizeof(io));
|
|
|
|
io.si_info = &ipmi_kcs_si_info;
|
|
io.addr_source = SI_DEVICETREE;
|
|
io.addr_space = IPMI_MEM_ADDR_SPACE;
|
|
io.addr_data = dev->hpa.start;
|
|
io.regsize = 1;
|
|
io.regspacing = 1;
|
|
io.regshift = 0;
|
|
io.irq = 0; /* no interrupt */
|
|
io.irq_setup = NULL;
|
|
io.dev = &dev->dev;
|
|
|
|
dev_dbg(&dev->dev, "addr 0x%lx\n", io.addr_data);
|
|
|
|
return ipmi_si_add_smi(&io);
|
|
}
|
|
|
|
static void __exit ipmi_parisc_remove(struct parisc_device *dev)
|
|
{
|
|
ipmi_si_remove_by_dev(&dev->dev);
|
|
}
|
|
|
|
static const struct parisc_device_id ipmi_parisc_tbl[] __initconst = {
|
|
{ HPHW_MC, HVERSION_REV_ANY_ID, 0x004, 0xC0 },
|
|
{ 0, }
|
|
};
|
|
|
|
MODULE_DEVICE_TABLE(parisc, ipmi_parisc_tbl);
|
|
|
|
static struct parisc_driver ipmi_parisc_driver __refdata = {
|
|
.name = "ipmi",
|
|
.id_table = ipmi_parisc_tbl,
|
|
.probe = ipmi_parisc_probe,
|
|
.remove = __exit_p(ipmi_parisc_remove),
|
|
};
|
|
|
|
void ipmi_si_parisc_init(void)
|
|
{
|
|
register_parisc_driver(&ipmi_parisc_driver);
|
|
parisc_registered = true;
|
|
}
|
|
|
|
void ipmi_si_parisc_shutdown(void)
|
|
{
|
|
if (parisc_registered)
|
|
unregister_parisc_driver(&ipmi_parisc_driver);
|
|
}
|