aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/char/ipmi/ipmi_dmi.c70
-rw-r--r--drivers/char/ipmi/ipmi_dmi.h8
-rw-r--r--drivers/char/ipmi/ipmi_msghandler.c2
-rw-r--r--drivers/char/ipmi/ipmi_si_intf.c2
-rw-r--r--drivers/char/ipmi/ipmi_si_platform.c101
-rw-r--r--drivers/char/ipmi/ipmi_si_sm.h2
-rw-r--r--drivers/char/ipmi/ipmi_ssif.c12
-rw-r--r--include/linux/ipmi.h2
8 files changed, 104 insertions, 95 deletions
diff --git a/drivers/char/ipmi/ipmi_dmi.c b/drivers/char/ipmi/ipmi_dmi.c
index 2a84401dea05..d08d41903b0f 100644
--- a/drivers/char/ipmi/ipmi_dmi.c
+++ b/drivers/char/ipmi/ipmi_dmi.c
@@ -8,10 +8,16 @@
8#include <linux/dmi.h> 8#include <linux/dmi.h>
9#include <linux/platform_device.h> 9#include <linux/platform_device.h>
10#include <linux/property.h> 10#include <linux/property.h>
11#include "ipmi_si_sm.h"
11#include "ipmi_dmi.h" 12#include "ipmi_dmi.h"
12 13
14#define IPMI_DMI_TYPE_KCS 0x01
15#define IPMI_DMI_TYPE_SMIC 0x02
16#define IPMI_DMI_TYPE_BT 0x03
17#define IPMI_DMI_TYPE_SSIF 0x04
18
13struct ipmi_dmi_info { 19struct ipmi_dmi_info {
14 int type; 20 enum si_type si_type;
15 u32 flags; 21 u32 flags;
16 unsigned long addr; 22 unsigned long addr;
17 u8 slave_addr; 23 u8 slave_addr;
@@ -22,6 +28,15 @@ static struct ipmi_dmi_info *ipmi_dmi_infos;
22 28
23static int ipmi_dmi_nr __initdata; 29static int ipmi_dmi_nr __initdata;
24 30
31#define set_prop_entry(_p_, _name_, type, val) \
32do { \
33 struct property_entry *_p = &_p_; \
34 _p->name = _name_; \
35 _p->length = sizeof(type); \
36 _p->is_string = false; \
37 _p->value.type##_data = val; \
38} while(0)
39
25static void __init dmi_add_platform_ipmi(unsigned long base_addr, 40static void __init dmi_add_platform_ipmi(unsigned long base_addr,
26 u32 flags, 41 u32 flags,
27 u8 slave_addr, 42 u8 slave_addr,
@@ -32,27 +47,14 @@ static void __init dmi_add_platform_ipmi(unsigned long base_addr,
32 struct platform_device *pdev; 47 struct platform_device *pdev;
33 struct resource r[4]; 48 struct resource r[4];
34 unsigned int num_r = 1, size; 49 unsigned int num_r = 1, size;
35 struct property_entry p[4] = { 50 struct property_entry p[5];
36 PROPERTY_ENTRY_U8("slave-addr", slave_addr), 51 unsigned int pidx = 0;
37 PROPERTY_ENTRY_U8("ipmi-type", type),
38 PROPERTY_ENTRY_U16("i2c-addr", base_addr),
39 { }
40 };
41 char *name, *override; 52 char *name, *override;
42 int rv; 53 int rv;
54 enum si_type si_type;
43 struct ipmi_dmi_info *info; 55 struct ipmi_dmi_info *info;
44 56
45 info = kmalloc(sizeof(*info), GFP_KERNEL); 57 memset(p, 0, sizeof(p));
46 if (!info) {
47 pr_warn("ipmi:dmi: Could not allocate dmi info\n");
48 } else {
49 info->type = type;
50 info->flags = flags;
51 info->addr = base_addr;
52 info->slave_addr = slave_addr;
53 info->next = ipmi_dmi_infos;
54 ipmi_dmi_infos = info;
55 }
56 58
57 name = "dmi-ipmi-si"; 59 name = "dmi-ipmi-si";
58 override = "ipmi_si"; 60 override = "ipmi_si";
@@ -62,19 +64,42 @@ static void __init dmi_add_platform_ipmi(unsigned long base_addr,
62 override = "ipmi_ssif"; 64 override = "ipmi_ssif";
63 offset = 1; 65 offset = 1;
64 size = 1; 66 size = 1;
67 si_type = SI_TYPE_INVALID;
65 break; 68 break;
66 case IPMI_DMI_TYPE_BT: 69 case IPMI_DMI_TYPE_BT:
67 size = 3; 70 size = 3;
71 si_type = SI_BT;
68 break; 72 break;
69 case IPMI_DMI_TYPE_KCS: 73 case IPMI_DMI_TYPE_KCS:
74 size = 2;
75 si_type = SI_KCS;
76 break;
70 case IPMI_DMI_TYPE_SMIC: 77 case IPMI_DMI_TYPE_SMIC:
71 size = 2; 78 size = 2;
79 si_type = SI_SMIC;
72 break; 80 break;
73 default: 81 default:
74 pr_err("ipmi:dmi: Invalid IPMI type: %d", type); 82 pr_err("ipmi:dmi: Invalid IPMI type: %d", type);
75 return; 83 return;
76 } 84 }
77 85
86 if (si_type != SI_TYPE_INVALID)
87 set_prop_entry(p[pidx++], "ipmi-type", u8, si_type);
88 set_prop_entry(p[pidx++], "slave-addr", u8, slave_addr);
89 set_prop_entry(p[pidx++], "addr-source", u8, SI_SMBIOS);
90
91 info = kmalloc(sizeof(*info), GFP_KERNEL);
92 if (!info) {
93 pr_warn("ipmi:dmi: Could not allocate dmi info\n");
94 } else {
95 info->si_type = si_type;
96 info->flags = flags;
97 info->addr = base_addr;
98 info->slave_addr = slave_addr;
99 info->next = ipmi_dmi_infos;
100 ipmi_dmi_infos = info;
101 }
102
78 pdev = platform_device_alloc(name, ipmi_dmi_nr); 103 pdev = platform_device_alloc(name, ipmi_dmi_nr);
79 if (!pdev) { 104 if (!pdev) {
80 pr_err("ipmi:dmi: Error allocation IPMI platform device"); 105 pr_err("ipmi:dmi: Error allocation IPMI platform device");
@@ -82,8 +107,10 @@ static void __init dmi_add_platform_ipmi(unsigned long base_addr,
82 } 107 }
83 pdev->driver_override = override; 108 pdev->driver_override = override;
84 109
85 if (type == IPMI_DMI_TYPE_SSIF) 110 if (type == IPMI_DMI_TYPE_SSIF) {
111 set_prop_entry(p[pidx++], "i2c-addr", u16, base_addr);
86 goto add_properties; 112 goto add_properties;
113 }
87 114
88 memset(r, 0, sizeof(r)); 115 memset(r, 0, sizeof(r));
89 116
@@ -151,12 +178,13 @@ err:
151 * This function allows an ACPI-specified IPMI device to look up the 178 * This function allows an ACPI-specified IPMI device to look up the
152 * slave address from the DMI table. 179 * slave address from the DMI table.
153 */ 180 */
154int ipmi_dmi_get_slave_addr(int type, u32 flags, unsigned long base_addr) 181int ipmi_dmi_get_slave_addr(enum si_type si_type, u32 flags,
182 unsigned long base_addr)
155{ 183{
156 struct ipmi_dmi_info *info = ipmi_dmi_infos; 184 struct ipmi_dmi_info *info = ipmi_dmi_infos;
157 185
158 while (info) { 186 while (info) {
159 if (info->type == type && 187 if (info->si_type == si_type &&
160 info->flags == flags && 188 info->flags == flags &&
161 info->addr == base_addr) 189 info->addr == base_addr)
162 return info->slave_addr; 190 return info->slave_addr;
diff --git a/drivers/char/ipmi/ipmi_dmi.h b/drivers/char/ipmi/ipmi_dmi.h
index 0a1afe5ceb1e..062015b8f520 100644
--- a/drivers/char/ipmi/ipmi_dmi.h
+++ b/drivers/char/ipmi/ipmi_dmi.h
@@ -2,11 +2,7 @@
2 * DMI defines for use by IPMI 2 * DMI defines for use by IPMI
3 */ 3 */
4 4
5#define IPMI_DMI_TYPE_KCS 0x01
6#define IPMI_DMI_TYPE_SMIC 0x02
7#define IPMI_DMI_TYPE_BT 0x03
8#define IPMI_DMI_TYPE_SSIF 0x04
9
10#ifdef CONFIG_IPMI_DMI_DECODE 5#ifdef CONFIG_IPMI_DMI_DECODE
11int ipmi_dmi_get_slave_addr(int type, u32 flags, unsigned long base_addr); 6int ipmi_dmi_get_slave_addr(enum si_type si_type, u32 flags,
7 unsigned long base_addr);
12#endif 8#endif
diff --git a/drivers/char/ipmi/ipmi_msghandler.c b/drivers/char/ipmi/ipmi_msghandler.c
index fd3ac6b50412..9d1eaf70f406 100644
--- a/drivers/char/ipmi/ipmi_msghandler.c
+++ b/drivers/char/ipmi/ipmi_msghandler.c
@@ -594,7 +594,7 @@ static DEFINE_MUTEX(smi_watchers_mutex);
594 594
595static const char * const addr_src_to_str[] = { 595static const char * const addr_src_to_str[] = {
596 "invalid", "hotmod", "hardcoded", "SPMI", "ACPI", "SMBIOS", "PCI", 596 "invalid", "hotmod", "hardcoded", "SPMI", "ACPI", "SMBIOS", "PCI",
597 "device-tree" 597 "device-tree", "platform"
598}; 598};
599 599
600const char *ipmi_addr_src_to_str(enum ipmi_addr_src src) 600const char *ipmi_addr_src_to_str(enum ipmi_addr_src src)
diff --git a/drivers/char/ipmi/ipmi_si_intf.c b/drivers/char/ipmi/ipmi_si_intf.c
index efc8ee9b5071..55e0c42bee4d 100644
--- a/drivers/char/ipmi/ipmi_si_intf.c
+++ b/drivers/char/ipmi/ipmi_si_intf.c
@@ -89,7 +89,7 @@ enum si_intf_state {
89#define IPMI_BT_INTMASK_CLEAR_IRQ_BIT 2 89#define IPMI_BT_INTMASK_CLEAR_IRQ_BIT 2
90#define IPMI_BT_INTMASK_ENABLE_IRQ_BIT 1 90#define IPMI_BT_INTMASK_ENABLE_IRQ_BIT 1
91 91
92static const char * const si_to_str[] = { "kcs", "smic", "bt" }; 92static const char * const si_to_str[] = { "invalid", "kcs", "smic", "bt" };
93 93
94static int initialized; 94static int initialized;
95 95
diff --git a/drivers/char/ipmi/ipmi_si_platform.c b/drivers/char/ipmi/ipmi_si_platform.c
index cf5c3e5e72e2..9573f1116450 100644
--- a/drivers/char/ipmi/ipmi_si_platform.c
+++ b/drivers/char/ipmi/ipmi_si_platform.c
@@ -6,14 +6,13 @@
6 */ 6 */
7#include <linux/types.h> 7#include <linux/types.h>
8#include <linux/module.h> 8#include <linux/module.h>
9#include "ipmi_dmi.h"
10#include <linux/dmi.h>
11#include <linux/of_device.h> 9#include <linux/of_device.h>
12#include <linux/of_platform.h> 10#include <linux/of_platform.h>
13#include <linux/of_address.h> 11#include <linux/of_address.h>
14#include <linux/of_irq.h> 12#include <linux/of_irq.h>
15#include <linux/acpi.h> 13#include <linux/acpi.h>
16#include "ipmi_si.h" 14#include "ipmi_si.h"
15#include "ipmi_dmi.h"
17 16
18#define PFX "ipmi_platform: " 17#define PFX "ipmi_platform: "
19 18
@@ -21,19 +20,29 @@ static bool si_tryplatform = true;
21#ifdef CONFIG_ACPI 20#ifdef CONFIG_ACPI
22static bool si_tryacpi = true; 21static bool si_tryacpi = true;
23#endif 22#endif
23#ifdef CONFIG_OF
24static bool si_tryopenfirmware = true;
25#endif
24#ifdef CONFIG_DMI 26#ifdef CONFIG_DMI
25static bool si_trydmi = true; 27static bool si_trydmi = true;
28#else
29static bool si_trydmi = false;
26#endif 30#endif
27 31
28module_param_named(tryplatform, si_tryplatform, bool, 0); 32module_param_named(tryplatform, si_tryplatform, bool, 0);
29MODULE_PARM_DESC(tryplatform, "Setting this to zero will disable the" 33MODULE_PARM_DESC(tryplatform, "Setting this to zero will disable the"
30 " default scan of the interfaces identified via platform" 34 " default scan of the interfaces identified via platform"
31 " interfaces like openfirmware"); 35 " interfaces besides ACPI, OpenFirmware, and DMI");
32#ifdef CONFIG_ACPI 36#ifdef CONFIG_ACPI
33module_param_named(tryacpi, si_tryacpi, bool, 0); 37module_param_named(tryacpi, si_tryacpi, bool, 0);
34MODULE_PARM_DESC(tryacpi, "Setting this to zero will disable the" 38MODULE_PARM_DESC(tryacpi, "Setting this to zero will disable the"
35 " default scan of the interfaces identified via ACPI"); 39 " default scan of the interfaces identified via ACPI");
36#endif 40#endif
41#ifdef CONFIG_OF
42module_param_named(tryopenfirmware, si_tryopenfirmware, bool, 0);
43MODULE_PARM_DESC(tryacpi, "Setting this to zero will disable the"
44 " default scan of the interfaces identified via OpenFirmware");
45#endif
37#ifdef CONFIG_DMI 46#ifdef CONFIG_DMI
38module_param_named(trydmi, si_trydmi, bool, 0); 47module_param_named(trydmi, si_trydmi, bool, 0);
39MODULE_PARM_DESC(trydmi, "Setting this to zero will disable the" 48MODULE_PARM_DESC(trydmi, "Setting this to zero will disable the"
@@ -235,7 +244,6 @@ static void spmi_find_bmc(void)
235} 244}
236#endif 245#endif
237 246
238#if defined(CONFIG_DMI) || defined(CONFIG_ACPI)
239static struct resource * 247static struct resource *
240ipmi_get_info_from_resources(struct platform_device *pdev, 248ipmi_get_info_from_resources(struct platform_device *pdev,
241 struct si_sm_io *io) 249 struct si_sm_io *io)
@@ -271,48 +279,52 @@ ipmi_get_info_from_resources(struct platform_device *pdev,
271 return res; 279 return res;
272} 280}
273 281
274#endif 282static int platform_ipmi_probe(struct platform_device *pdev)
275
276#ifdef CONFIG_DMI
277static int dmi_ipmi_probe(struct platform_device *pdev)
278{ 283{
279 struct si_sm_io io; 284 struct si_sm_io io;
280 u8 type, slave_addr; 285 u8 type, slave_addr, addr_source;
281 int rv; 286 int rv;
282 287
283 if (!si_trydmi) 288 rv = device_property_read_u8(&pdev->dev, "addr-source", &addr_source);
284 return -ENODEV; 289 if (rv)
290 addr_source = SI_PLATFORM;
291 if (addr_source >= SI_LAST)
292 return -EINVAL;
293
294 if (addr_source == SI_SMBIOS) {
295 if (!si_trydmi)
296 return -ENODEV;
297 } else {
298 if (!si_tryplatform)
299 return -ENODEV;
300 }
285 301
286 rv = device_property_read_u8(&pdev->dev, "ipmi-type", &type); 302 rv = device_property_read_u8(&pdev->dev, "ipmi-type", &type);
287 if (rv) 303 if (rv)
288 return -ENODEV; 304 return -ENODEV;
289 305
290 memset(&io, 0, sizeof(io)); 306 memset(&io, 0, sizeof(io));
291 io.addr_source = SI_SMBIOS; 307 io.addr_source = addr_source;
292 pr_info(PFX "probing via SMBIOS\n"); 308 dev_info(&pdev->dev, PFX "probing via %s\n",
309 ipmi_addr_src_to_str(addr_source));
293 310
294 switch (type) { 311 switch (type) {
295 case IPMI_DMI_TYPE_KCS: 312 case SI_KCS:
296 io.si_type = SI_KCS; 313 case SI_SMIC:
297 break; 314 case SI_BT:
298 case IPMI_DMI_TYPE_SMIC: 315 io.si_type = type;
299 io.si_type = SI_SMIC;
300 break;
301 case IPMI_DMI_TYPE_BT:
302 io.si_type = SI_BT;
303 break; 316 break;
304 default: 317 default:
318 dev_err(&pdev->dev, "ipmi-type property is invalid\n");
305 return -EINVAL; 319 return -EINVAL;
306 } 320 }
307 321
308 if (!ipmi_get_info_from_resources(pdev, &io)) { 322 if (!ipmi_get_info_from_resources(pdev, &io))
309 rv = -EINVAL; 323 return -EINVAL;
310 goto err_free;
311 }
312 324
313 rv = device_property_read_u8(&pdev->dev, "slave-addr", &slave_addr); 325 rv = device_property_read_u8(&pdev->dev, "slave-addr", &slave_addr);
314 if (rv) { 326 if (rv) {
315 dev_warn(&pdev->dev, "device has no slave-addr property"); 327 dev_warn(&pdev->dev, "device has no slave-addr property\n");
316 io.slave_addr = 0x20; 328 io.slave_addr = 0x20;
317 } else { 329 } else {
318 io.slave_addr = slave_addr; 330 io.slave_addr = slave_addr;
@@ -333,16 +345,7 @@ static int dmi_ipmi_probe(struct platform_device *pdev)
333 ipmi_si_add_smi(&io); 345 ipmi_si_add_smi(&io);
334 346
335 return 0; 347 return 0;
336
337err_free:
338 return rv;
339} 348}
340#else
341static int dmi_ipmi_probe(struct platform_device *pdev)
342{
343 return -ENODEV;
344}
345#endif /* CONFIG_DMI */
346 349
347#ifdef CONFIG_OF 350#ifdef CONFIG_OF
348static const struct of_device_id of_ipmi_match[] = { 351static const struct of_device_id of_ipmi_match[] = {
@@ -366,6 +369,9 @@ static int of_ipmi_probe(struct platform_device *pdev)
366 int ret; 369 int ret;
367 int proplen; 370 int proplen;
368 371
372 if (!si_tryopenfirmware)
373 return -ENODEV;
374
369 dev_info(&pdev->dev, "probing via device tree\n"); 375 dev_info(&pdev->dev, "probing via device tree\n");
370 376
371 match = of_match_device(of_ipmi_match, &pdev->dev); 377 match = of_match_device(of_ipmi_match, &pdev->dev);
@@ -436,25 +442,12 @@ static int find_slave_address(struct si_sm_io *io, int slave_addr)
436{ 442{
437#ifdef CONFIG_IPMI_DMI_DECODE 443#ifdef CONFIG_IPMI_DMI_DECODE
438 if (!slave_addr) { 444 if (!slave_addr) {
439 int type = -1;
440 u32 flags = IORESOURCE_IO; 445 u32 flags = IORESOURCE_IO;
441 446
442 switch (io->si_type) {
443 case SI_KCS:
444 type = IPMI_DMI_TYPE_KCS;
445 break;
446 case SI_BT:
447 type = IPMI_DMI_TYPE_BT;
448 break;
449 case SI_SMIC:
450 type = IPMI_DMI_TYPE_SMIC;
451 break;
452 }
453
454 if (io->addr_type == IPMI_MEM_ADDR_SPACE) 447 if (io->addr_type == IPMI_MEM_ADDR_SPACE)
455 flags = IORESOURCE_MEM; 448 flags = IORESOURCE_MEM;
456 449
457 slave_addr = ipmi_dmi_get_slave_addr(type, flags, 450 slave_addr = ipmi_dmi_get_slave_addr(io->si_type, flags,
458 io->addr_data); 451 io->addr_data);
459 } 452 }
460#endif 453#endif
@@ -563,7 +556,7 @@ static int ipmi_probe(struct platform_device *pdev)
563 if (acpi_ipmi_probe(pdev) == 0) 556 if (acpi_ipmi_probe(pdev) == 0)
564 return 0; 557 return 0;
565 558
566 return dmi_ipmi_probe(pdev); 559 return platform_ipmi_probe(pdev);
567} 560}
568 561
569static int ipmi_remove(struct platform_device *pdev) 562static int ipmi_remove(struct platform_device *pdev)
@@ -583,11 +576,9 @@ struct platform_driver ipmi_platform_driver = {
583 576
584void ipmi_si_platform_init(void) 577void ipmi_si_platform_init(void)
585{ 578{
586 if (si_tryplatform) { 579 int rv = platform_driver_register(&ipmi_platform_driver);
587 int rv = platform_driver_register(&ipmi_platform_driver); 580 if (rv)
588 if (rv) 581 pr_err(PFX "Unable to register driver: %d\n", rv);
589 pr_err(PFX "Unable to register driver: %d\n", rv);
590 }
591 582
592#ifdef CONFIG_ACPI 583#ifdef CONFIG_ACPI
593 if (si_tryacpi) 584 if (si_tryacpi)
diff --git a/drivers/char/ipmi/ipmi_si_sm.h b/drivers/char/ipmi/ipmi_si_sm.h
index fbf5bfccde2e..aa8d88ab4433 100644
--- a/drivers/char/ipmi/ipmi_si_sm.h
+++ b/drivers/char/ipmi/ipmi_si_sm.h
@@ -43,7 +43,7 @@
43struct si_sm_data; 43struct si_sm_data;
44 44
45enum si_type { 45enum si_type {
46 SI_KCS, SI_SMIC, SI_BT 46 SI_TYPE_INVALID, SI_KCS, SI_SMIC, SI_BT
47}; 47};
48 48
49/* 49/*
diff --git a/drivers/char/ipmi/ipmi_ssif.c b/drivers/char/ipmi/ipmi_ssif.c
index aadec879d052..466b3a1c0adf 100644
--- a/drivers/char/ipmi/ipmi_ssif.c
+++ b/drivers/char/ipmi/ipmi_ssif.c
@@ -53,6 +53,7 @@
53#include <linux/acpi.h> 53#include <linux/acpi.h>
54#include <linux/ctype.h> 54#include <linux/ctype.h>
55#include <linux/time64.h> 55#include <linux/time64.h>
56#include "ipmi_si_sm.h"
56#include "ipmi_dmi.h" 57#include "ipmi_dmi.h"
57 58
58#define PFX "ipmi_ssif: " 59#define PFX "ipmi_ssif: "
@@ -1482,7 +1483,7 @@ static int find_slave_address(struct i2c_client *client, int slave_addr)
1482#ifdef CONFIG_IPMI_DMI_DECODE 1483#ifdef CONFIG_IPMI_DMI_DECODE
1483 if (!slave_addr) 1484 if (!slave_addr)
1484 slave_addr = ipmi_dmi_get_slave_addr( 1485 slave_addr = ipmi_dmi_get_slave_addr(
1485 IPMI_DMI_TYPE_SSIF, 1486 SI_TYPE_INVALID,
1486 i2c_adapter_id(client->adapter), 1487 i2c_adapter_id(client->adapter),
1487 client->addr); 1488 client->addr);
1488#endif 1489#endif
@@ -2013,20 +2014,13 @@ static void spmi_find_bmc(void) { }
2013#ifdef CONFIG_DMI 2014#ifdef CONFIG_DMI
2014static int dmi_ipmi_probe(struct platform_device *pdev) 2015static int dmi_ipmi_probe(struct platform_device *pdev)
2015{ 2016{
2016 u8 type, slave_addr = 0; 2017 u8 slave_addr = 0;
2017 u16 i2c_addr; 2018 u16 i2c_addr;
2018 int rv; 2019 int rv;
2019 2020
2020 if (!ssif_trydmi) 2021 if (!ssif_trydmi)
2021 return -ENODEV; 2022 return -ENODEV;
2022 2023
2023 rv = device_property_read_u8(&pdev->dev, "ipmi-type", &type);
2024 if (rv)
2025 return -ENODEV;
2026
2027 if (type != IPMI_DMI_TYPE_SSIF)
2028 return -ENODEV;
2029
2030 rv = device_property_read_u16(&pdev->dev, "i2c-addr", &i2c_addr); 2024 rv = device_property_read_u16(&pdev->dev, "i2c-addr", &i2c_addr);
2031 if (rv) { 2025 if (rv) {
2032 dev_warn(&pdev->dev, PFX "No i2c-addr property\n"); 2026 dev_warn(&pdev->dev, PFX "No i2c-addr property\n");
diff --git a/include/linux/ipmi.h b/include/linux/ipmi.h
index 80fc3f798984..f4ffacf4fe9d 100644
--- a/include/linux/ipmi.h
+++ b/include/linux/ipmi.h
@@ -277,7 +277,7 @@ int ipmi_validate_addr(struct ipmi_addr *addr, int len);
277 */ 277 */
278enum ipmi_addr_src { 278enum ipmi_addr_src {
279 SI_INVALID = 0, SI_HOTMOD, SI_HARDCODED, SI_SPMI, SI_ACPI, SI_SMBIOS, 279 SI_INVALID = 0, SI_HOTMOD, SI_HARDCODED, SI_SPMI, SI_ACPI, SI_SMBIOS,
280 SI_PCI, SI_DEVICETREE, SI_LAST 280 SI_PCI, SI_DEVICETREE, SI_PLATFORM, SI_LAST
281}; 281};
282const char *ipmi_addr_src_to_str(enum ipmi_addr_src src); 282const char *ipmi_addr_src_to_str(enum ipmi_addr_src src);
283 283