1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /* 3 * i2c-smbus.c - SMBus extensions to the I2C protocol 4 * 5 * Copyright (C) 2008 David Brownell 6 * Copyright (C) 2010-2019 Jean Delvare <jdelvare@suse.de> 7 */ 8 9 #include <linux/device.h> 10 #include <linux/dmi.h> 11 #include <linux/i2c.h> 12 #include <linux/i2c-smbus.h> 13 #include <linux/interrupt.h> 14 #include <linux/kernel.h> 15 #include <linux/module.h> 16 #include <linux/property.h> 17 #include <linux/slab.h> 18 #include <linux/workqueue.h> 19 20 struct i2c_smbus_alert { 21 struct work_struct alert; 22 struct i2c_client *ara; /* Alert response address */ 23 }; 24 25 struct alert_data { 26 unsigned short addr; 27 enum i2c_alert_protocol type; 28 unsigned int data; 29 }; 30 31 /* If this is the alerting device, notify its driver */ 32 static int smbus_do_alert(struct device *dev, void *addrp) 33 { 34 struct i2c_client *client = i2c_verify_client(dev); 35 struct alert_data *data = addrp; 36 struct i2c_driver *driver; 37 int ret; 38 39 if (!client || client->addr != data->addr) 40 return 0; 41 if (client->flags & I2C_CLIENT_TEN) 42 return 0; 43 44 /* 45 * Drivers should either disable alerts, or provide at least 46 * a minimal handler. Lock so the driver won't change. 47 */ 48 device_lock(dev); 49 if (client->dev.driver) { 50 driver = to_i2c_driver(client->dev.driver); 51 if (driver->alert) { 52 /* Stop iterating after we find the device */ 53 driver->alert(client, data->type, data->data); 54 ret = -EBUSY; 55 } else { 56 dev_warn(&client->dev, "no driver alert()!\n"); 57 ret = -EOPNOTSUPP; 58 } 59 } else { 60 dev_dbg(&client->dev, "alert with no driver\n"); 61 ret = -ENODEV; 62 } 63 device_unlock(dev); 64 65 return ret; 66 } 67 68 /* Same as above, but call back all drivers with alert handler */ 69 70 static int smbus_do_alert_force(struct device *dev, void *addrp) 71 { 72 struct i2c_client *client = i2c_verify_client(dev); 73 struct alert_data *data = addrp; 74 struct i2c_driver *driver; 75 76 if (!client || (client->flags & I2C_CLIENT_TEN)) 77 return 0; 78 79 /* 80 * Drivers should either disable alerts, or provide at least 81 * a minimal handler. Lock so the driver won't change. 82 */ 83 device_lock(dev); 84 if (client->dev.driver) { 85 driver = to_i2c_driver(client->dev.driver); 86 if (driver->alert) 87 driver->alert(client, data->type, data->data); 88 } 89 device_unlock(dev); 90 91 return 0; 92 } 93 94 /* 95 * The alert IRQ handler needs to hand work off to a task which can issue 96 * SMBus calls, because those sleeping calls can't be made in IRQ context. 97 */ 98 static irqreturn_t smbus_alert(int irq, void *d) 99 { 100 struct i2c_smbus_alert *alert = d; 101 struct i2c_client *ara; 102 unsigned short prev_addr = I2C_CLIENT_END; /* Not a valid address */ 103 104 ara = alert->ara; 105 106 for (;;) { 107 s32 status; 108 struct alert_data data; 109 110 /* 111 * Devices with pending alerts reply in address order, low 112 * to high, because of slave transmit arbitration. After 113 * responding, an SMBus device stops asserting SMBALERT#. 114 * 115 * Note that SMBus 2.0 reserves 10-bit addresses for future 116 * use. We neither handle them, nor try to use PEC here. 117 */ 118 status = i2c_smbus_read_byte(ara); 119 if (status < 0) 120 break; 121 122 data.data = status & 1; 123 data.addr = status >> 1; 124 data.type = I2C_PROTOCOL_SMBUS_ALERT; 125 126 dev_dbg(&ara->dev, "SMBALERT# from dev 0x%02x, flag %d\n", 127 data.addr, data.data); 128 129 /* Notify driver for the device which issued the alert */ 130 status = device_for_each_child(&ara->adapter->dev, &data, 131 smbus_do_alert); 132 /* 133 * If we read the same address more than once, and the alert 134 * was not handled by a driver, it won't do any good to repeat 135 * the loop because it will never terminate. Try again, this 136 * time calling the alert handlers of all devices connected to 137 * the bus, and abort the loop afterwards. If this helps, we 138 * are all set. If it doesn't, there is nothing else we can do, 139 * so we might as well abort the loop. 140 * Note: This assumes that a driver with alert handler handles 141 * the alert properly and clears it if necessary. 142 */ 143 if (data.addr == prev_addr && status != -EBUSY) { 144 device_for_each_child(&ara->adapter->dev, &data, 145 smbus_do_alert_force); 146 break; 147 } 148 prev_addr = data.addr; 149 } 150 151 return IRQ_HANDLED; 152 } 153 154 static void smbalert_work(struct work_struct *work) 155 { 156 struct i2c_smbus_alert *alert; 157 158 alert = container_of(work, struct i2c_smbus_alert, alert); 159 160 smbus_alert(0, alert); 161 162 } 163 164 /* Setup SMBALERT# infrastructure */ 165 static int smbalert_probe(struct i2c_client *ara) 166 { 167 struct i2c_smbus_alert_setup *setup = dev_get_platdata(&ara->dev); 168 struct i2c_smbus_alert *alert; 169 struct i2c_adapter *adapter = ara->adapter; 170 int res, irq; 171 172 alert = devm_kzalloc(&ara->dev, sizeof(struct i2c_smbus_alert), 173 GFP_KERNEL); 174 if (!alert) 175 return -ENOMEM; 176 177 if (setup) { 178 irq = setup->irq; 179 } else { 180 irq = fwnode_irq_get_byname(dev_fwnode(adapter->dev.parent), 181 "smbus_alert"); 182 if (irq <= 0) 183 return irq; 184 } 185 186 INIT_WORK(&alert->alert, smbalert_work); 187 alert->ara = ara; 188 189 if (irq > 0) { 190 res = devm_request_threaded_irq(&ara->dev, irq, 191 NULL, smbus_alert, 192 IRQF_SHARED | IRQF_ONESHOT, 193 "smbus_alert", alert); 194 if (res) 195 return res; 196 } 197 198 i2c_set_clientdata(ara, alert); 199 dev_info(&adapter->dev, "supports SMBALERT#\n"); 200 201 return 0; 202 } 203 204 /* IRQ and memory resources are managed so they are freed automatically */ 205 static void smbalert_remove(struct i2c_client *ara) 206 { 207 struct i2c_smbus_alert *alert = i2c_get_clientdata(ara); 208 209 cancel_work_sync(&alert->alert); 210 } 211 212 static const struct i2c_device_id smbalert_ids[] = { 213 { "smbus_alert", 0 }, 214 { /* LIST END */ } 215 }; 216 MODULE_DEVICE_TABLE(i2c, smbalert_ids); 217 218 static struct i2c_driver smbalert_driver = { 219 .driver = { 220 .name = "smbus_alert", 221 }, 222 .probe = smbalert_probe, 223 .remove = smbalert_remove, 224 .id_table = smbalert_ids, 225 }; 226 227 /** 228 * i2c_handle_smbus_alert - Handle an SMBus alert 229 * @ara: the ARA client on the relevant adapter 230 * Context: can't sleep 231 * 232 * Helper function to be called from an I2C bus driver's interrupt 233 * handler. It will schedule the alert work, in turn calling the 234 * corresponding I2C device driver's alert function. 235 * 236 * It is assumed that ara is a valid i2c client previously returned by 237 * i2c_new_smbus_alert_device(). 238 */ 239 int i2c_handle_smbus_alert(struct i2c_client *ara) 240 { 241 struct i2c_smbus_alert *alert = i2c_get_clientdata(ara); 242 243 return schedule_work(&alert->alert); 244 } 245 EXPORT_SYMBOL_GPL(i2c_handle_smbus_alert); 246 247 module_i2c_driver(smbalert_driver); 248 249 #if IS_ENABLED(CONFIG_I2C_SLAVE) 250 #define SMBUS_HOST_NOTIFY_LEN 3 251 struct i2c_slave_host_notify_status { 252 u8 index; 253 u8 addr; 254 }; 255 256 static int i2c_slave_host_notify_cb(struct i2c_client *client, 257 enum i2c_slave_event event, u8 *val) 258 { 259 struct i2c_slave_host_notify_status *status = client->dev.platform_data; 260 261 switch (event) { 262 case I2C_SLAVE_WRITE_RECEIVED: 263 /* We only retrieve the first byte received (addr) 264 * since there is currently no support to retrieve the data 265 * parameter from the client. 266 */ 267 if (status->index == 0) 268 status->addr = *val; 269 if (status->index < U8_MAX) 270 status->index++; 271 break; 272 case I2C_SLAVE_STOP: 273 if (status->index == SMBUS_HOST_NOTIFY_LEN) 274 i2c_handle_smbus_host_notify(client->adapter, 275 status->addr); 276 fallthrough; 277 case I2C_SLAVE_WRITE_REQUESTED: 278 status->index = 0; 279 break; 280 case I2C_SLAVE_READ_REQUESTED: 281 case I2C_SLAVE_READ_PROCESSED: 282 *val = 0xff; 283 break; 284 } 285 286 return 0; 287 } 288 289 /** 290 * i2c_new_slave_host_notify_device - get a client for SMBus host-notify support 291 * @adapter: the target adapter 292 * Context: can sleep 293 * 294 * Setup handling of the SMBus host-notify protocol on a given I2C bus segment. 295 * 296 * Handling is done by creating a device and its callback and handling data 297 * received via the SMBus host-notify address (0x8) 298 * 299 * This returns the client, which should be ultimately freed using 300 * i2c_free_slave_host_notify_device(); or an ERRPTR to indicate an error. 301 */ 302 struct i2c_client *i2c_new_slave_host_notify_device(struct i2c_adapter *adapter) 303 { 304 struct i2c_board_info host_notify_board_info = { 305 I2C_BOARD_INFO("smbus_host_notify", 0x08), 306 .flags = I2C_CLIENT_SLAVE, 307 }; 308 struct i2c_slave_host_notify_status *status; 309 struct i2c_client *client; 310 int ret; 311 312 status = kzalloc(sizeof(struct i2c_slave_host_notify_status), 313 GFP_KERNEL); 314 if (!status) 315 return ERR_PTR(-ENOMEM); 316 317 host_notify_board_info.platform_data = status; 318 319 client = i2c_new_client_device(adapter, &host_notify_board_info); 320 if (IS_ERR(client)) { 321 kfree(status); 322 return client; 323 } 324 325 ret = i2c_slave_register(client, i2c_slave_host_notify_cb); 326 if (ret) { 327 i2c_unregister_device(client); 328 kfree(status); 329 return ERR_PTR(ret); 330 } 331 332 return client; 333 } 334 EXPORT_SYMBOL_GPL(i2c_new_slave_host_notify_device); 335 336 /** 337 * i2c_free_slave_host_notify_device - free the client for SMBus host-notify 338 * support 339 * @client: the client to free 340 * Context: can sleep 341 * 342 * Free the i2c_client allocated via i2c_new_slave_host_notify_device 343 */ 344 void i2c_free_slave_host_notify_device(struct i2c_client *client) 345 { 346 if (IS_ERR_OR_NULL(client)) 347 return; 348 349 i2c_slave_unregister(client); 350 kfree(client->dev.platform_data); 351 i2c_unregister_device(client); 352 } 353 EXPORT_SYMBOL_GPL(i2c_free_slave_host_notify_device); 354 #endif 355 356 /* 357 * SPD is not part of SMBus but we include it here for convenience as the 358 * target systems are the same. 359 * Restrictions to automatic SPD instantiation: 360 * - Only works if all filled slots have the same memory type 361 * - Only works for DDR2, DDR3 and DDR4 for now 362 * - Only works on systems with 1 to 4 memory slots 363 */ 364 #if IS_ENABLED(CONFIG_DMI) 365 void i2c_register_spd(struct i2c_adapter *adap) 366 { 367 int n, slot_count = 0, dimm_count = 0; 368 u16 handle; 369 u8 common_mem_type = 0x0, mem_type; 370 u64 mem_size; 371 const char *name; 372 373 while ((handle = dmi_memdev_handle(slot_count)) != 0xffff) { 374 slot_count++; 375 376 /* Skip empty slots */ 377 mem_size = dmi_memdev_size(handle); 378 if (!mem_size) 379 continue; 380 381 /* Skip undefined memory type */ 382 mem_type = dmi_memdev_type(handle); 383 if (mem_type <= 0x02) /* Invalid, Other, Unknown */ 384 continue; 385 386 if (!common_mem_type) { 387 /* First filled slot */ 388 common_mem_type = mem_type; 389 } else { 390 /* Check that all filled slots have the same type */ 391 if (mem_type != common_mem_type) { 392 dev_warn(&adap->dev, 393 "Different memory types mixed, not instantiating SPD\n"); 394 return; 395 } 396 } 397 dimm_count++; 398 } 399 400 /* No useful DMI data, bail out */ 401 if (!dimm_count) 402 return; 403 404 dev_info(&adap->dev, "%d/%d memory slots populated (from DMI)\n", 405 dimm_count, slot_count); 406 407 if (slot_count > 4) { 408 dev_warn(&adap->dev, 409 "Systems with more than 4 memory slots not supported yet, not instantiating SPD\n"); 410 return; 411 } 412 413 /* 414 * Memory types could be found at section 7.18.2 (Memory Device — Type), table 78 415 * https://www.dmtf.org/sites/default/files/standards/documents/DSP0134_3.6.0.pdf 416 */ 417 switch (common_mem_type) { 418 case 0x12: /* DDR */ 419 case 0x13: /* DDR2 */ 420 case 0x18: /* DDR3 */ 421 case 0x1B: /* LPDDR */ 422 case 0x1C: /* LPDDR2 */ 423 case 0x1D: /* LPDDR3 */ 424 name = "spd"; 425 break; 426 case 0x1A: /* DDR4 */ 427 case 0x1E: /* LPDDR4 */ 428 name = "ee1004"; 429 break; 430 default: 431 dev_info(&adap->dev, 432 "Memory type 0x%02x not supported yet, not instantiating SPD\n", 433 common_mem_type); 434 return; 435 } 436 437 /* 438 * We don't know in which slots the memory modules are. We could 439 * try to guess from the slot names, but that would be rather complex 440 * and unreliable, so better probe all possible addresses until we 441 * have found all memory modules. 442 */ 443 for (n = 0; n < slot_count && dimm_count; n++) { 444 struct i2c_board_info info; 445 unsigned short addr_list[2]; 446 447 memset(&info, 0, sizeof(struct i2c_board_info)); 448 strscpy(info.type, name, I2C_NAME_SIZE); 449 addr_list[0] = 0x50 + n; 450 addr_list[1] = I2C_CLIENT_END; 451 452 if (!IS_ERR(i2c_new_scanned_device(adap, &info, addr_list, NULL))) { 453 dev_info(&adap->dev, 454 "Successfully instantiated SPD at 0x%hx\n", 455 addr_list[0]); 456 dimm_count--; 457 } 458 } 459 } 460 EXPORT_SYMBOL_GPL(i2c_register_spd); 461 #endif 462 463 MODULE_AUTHOR("Jean Delvare <jdelvare@suse.de>"); 464 MODULE_DESCRIPTION("SMBus protocol extensions support"); 465 MODULE_LICENSE("GPL"); 466