cp500.c 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989
  1. // SPDX-License-Identifier: GPL-2.0
  2. /*
  3. * Copyright (C) KEBA Industrial Automation Gmbh 2024
  4. *
  5. * Driver for KEBA system FPGA
  6. *
  7. * The KEBA system FPGA implements various devices. This driver registers
  8. * auxiliary devices for every device within the FPGA.
  9. */
  10. #include <linux/device.h>
  11. #include <linux/i2c.h>
  12. #include <linux/misc/keba.h>
  13. #include <linux/module.h>
  14. #include <linux/mtd/partitions.h>
  15. #include <linux/nvmem-consumer.h>
  16. #include <linux/nvmem-provider.h>
  17. #include <linux/pci.h>
  18. #include <linux/spi/flash.h>
  19. #include <linux/spi/spi.h>
  20. #define CP500 "cp500"
  21. #define PCI_VENDOR_ID_KEBA 0xCEBA
  22. #define PCI_DEVICE_ID_KEBA_CP035 0x2706
  23. #define PCI_DEVICE_ID_KEBA_CP505 0x2703
  24. #define PCI_DEVICE_ID_KEBA_CP520 0x2696
  25. #define CP500_SYS_BAR 0
  26. #define CP500_ECM_BAR 1
  27. /* BAR 0 registers */
  28. #define CP500_VERSION_REG 0x00
  29. #define CP500_RECONFIG_REG 0x11 /* upper 8-bits of STARTUP register */
  30. #define CP500_PRESENT_REG 0x20
  31. #define CP500_AXI_REG 0x40
  32. /* Bits in BUILD_REG */
  33. #define CP500_BUILD_TEST 0x8000 /* FPGA test version */
  34. /* Bits in RECONFIG_REG */
  35. #define CP500_RECFG_REQ 0x01 /* reconfigure FPGA on next reset */
  36. /* Bits in PRESENT_REG */
  37. #define CP500_PRESENT_FAN0 0x01
  38. /* MSIX */
  39. #define CP500_AXI_MSIX 3
  40. #define CP500_RFB_UART_MSIX 4
  41. #define CP500_DEBUG_UART_MSIX 5
  42. #define CP500_SI1_UART_MSIX 6
  43. #define CP500_NUM_MSIX 8
  44. #define CP500_NUM_MSIX_NO_MMI 2
  45. #define CP500_NUM_MSIX_NO_AXI 3
  46. /* EEPROM */
  47. #define CP500_EEPROM_DA_OFFSET 0x016F
  48. #define CP500_EEPROM_DA_ESC_TYPE_MASK 0x01
  49. #define CP500_EEPROM_ESC_LAN9252 0x00
  50. #define CP500_EEPROM_ESC_ET1100 0x01
  51. #define CP500_EEPROM_CPU_NAME "cpu_eeprom"
  52. #define CP500_EEPROM_CPU_OFFSET 0
  53. #define CP500_EEPROM_CPU_SIZE 3072
  54. #define CP500_EEPROM_USER_NAME "user_eeprom"
  55. #define CP500_EEPROM_USER_OFFSET 3072
  56. #define CP500_EEPROM_USER_SIZE 1024
  57. /* SPI flash running at full speed */
  58. #define CP500_FLASH_HZ (33 * 1000 * 1000)
  59. /* LAN9252 */
  60. #define CP500_LAN9252_HZ (10 * 1000 * 1000)
  61. #define CP500_IS_CP035(dev) ((dev)->pci_dev->device == PCI_DEVICE_ID_KEBA_CP035)
  62. #define CP500_IS_CP505(dev) ((dev)->pci_dev->device == PCI_DEVICE_ID_KEBA_CP505)
  63. #define CP500_IS_CP520(dev) ((dev)->pci_dev->device == PCI_DEVICE_ID_KEBA_CP520)
  64. struct cp500_dev_info {
  65. off_t offset;
  66. size_t size;
  67. unsigned int msix;
  68. };
  69. struct cp500_devs {
  70. struct cp500_dev_info startup;
  71. struct cp500_dev_info spi;
  72. struct cp500_dev_info i2c;
  73. struct cp500_dev_info fan;
  74. struct cp500_dev_info batt;
  75. struct cp500_dev_info uart0_rfb;
  76. struct cp500_dev_info uart1_dbg;
  77. struct cp500_dev_info uart2_si1;
  78. };
  79. /* list of devices within FPGA of CP035 family (CP035, CP056, CP057) */
  80. static struct cp500_devs cp035_devices = {
  81. .startup = { 0x0000, SZ_4K },
  82. .spi = { 0x1000, SZ_4K },
  83. .i2c = { 0x4000, SZ_4K },
  84. .fan = { 0x9000, SZ_4K },
  85. .batt = { 0xA000, SZ_4K },
  86. .uart0_rfb = { 0xB000, SZ_4K, CP500_RFB_UART_MSIX },
  87. .uart2_si1 = { 0xD000, SZ_4K, CP500_SI1_UART_MSIX },
  88. };
  89. /* list of devices within FPGA of CP505 family (CP503, CP505, CP507) */
  90. static struct cp500_devs cp505_devices = {
  91. .startup = { 0x0000, SZ_4K },
  92. .spi = { 0x4000, SZ_4K },
  93. .i2c = { 0x5000, SZ_4K },
  94. .fan = { 0x9000, SZ_4K },
  95. .batt = { 0xA000, SZ_4K },
  96. .uart0_rfb = { 0xB000, SZ_4K, CP500_RFB_UART_MSIX },
  97. .uart2_si1 = { 0xD000, SZ_4K, CP500_SI1_UART_MSIX },
  98. };
  99. /* list of devices within FPGA of CP520 family (CP520, CP530) */
  100. static struct cp500_devs cp520_devices = {
  101. .startup = { 0x0000, SZ_4K },
  102. .spi = { 0x4000, SZ_4K },
  103. .i2c = { 0x5000, SZ_4K },
  104. .fan = { 0x8000, SZ_4K },
  105. .batt = { 0x9000, SZ_4K },
  106. .uart0_rfb = { 0xC000, SZ_4K, CP500_RFB_UART_MSIX },
  107. .uart1_dbg = { 0xD000, SZ_4K, CP500_DEBUG_UART_MSIX },
  108. };
  109. struct cp500_nvmem {
  110. struct nvmem_device *base_nvmem;
  111. unsigned int offset;
  112. struct nvmem_device *nvmem;
  113. };
  114. struct cp500 {
  115. struct pci_dev *pci_dev;
  116. struct cp500_devs *devs;
  117. int msix_num;
  118. struct {
  119. int major;
  120. int minor;
  121. int build;
  122. } version;
  123. struct notifier_block nvmem_notifier;
  124. atomic_t nvmem_notified;
  125. /* system FPGA BAR */
  126. resource_size_t sys_hwbase;
  127. struct keba_spi_auxdev *spi;
  128. struct keba_i2c_auxdev *i2c;
  129. struct keba_fan_auxdev *fan;
  130. struct keba_batt_auxdev *batt;
  131. struct keba_uart_auxdev *uart0_rfb;
  132. struct keba_uart_auxdev *uart1_dbg;
  133. struct keba_uart_auxdev *uart2_si1;
  134. /* ECM EtherCAT BAR */
  135. resource_size_t ecm_hwbase;
  136. /* NVMEM devices */
  137. struct cp500_nvmem nvmem_cpu;
  138. struct cp500_nvmem nvmem_user;
  139. void __iomem *system_startup_addr;
  140. };
  141. /* I2C devices */
  142. #define CP500_EEPROM_ADDR 0x50
  143. static struct i2c_board_info cp500_i2c_info[] = {
  144. { /* temperature sensor */
  145. I2C_BOARD_INFO("emc1403", 0x4c),
  146. },
  147. { /*
  148. * CPU EEPROM
  149. * CP035 family: CPU board
  150. * CP505 family: bridge board
  151. * CP520 family: carrier board
  152. */
  153. I2C_BOARD_INFO("24c32", CP500_EEPROM_ADDR),
  154. },
  155. { /* interface board EEPROM */
  156. I2C_BOARD_INFO("24c32", CP500_EEPROM_ADDR + 1),
  157. },
  158. { /*
  159. * EEPROM (optional)
  160. * CP505 family: CPU board
  161. * CP520 family: MMI board
  162. */
  163. I2C_BOARD_INFO("24c32", CP500_EEPROM_ADDR + 2),
  164. },
  165. { /* extension module 0 EEPROM (optional) */
  166. I2C_BOARD_INFO("24c32", CP500_EEPROM_ADDR + 3),
  167. },
  168. { /* extension module 1 EEPROM (optional) */
  169. I2C_BOARD_INFO("24c32", CP500_EEPROM_ADDR + 4),
  170. },
  171. { /* extension module 2 EEPROM (optional) */
  172. I2C_BOARD_INFO("24c32", CP500_EEPROM_ADDR + 5),
  173. },
  174. { /* extension module 3 EEPROM (optional) */
  175. I2C_BOARD_INFO("24c32", CP500_EEPROM_ADDR + 6),
  176. }
  177. };
  178. /* SPI devices */
  179. static struct mtd_partition cp500_partitions[] = {
  180. {
  181. .name = "system-flash-parts",
  182. .size = MTDPART_SIZ_FULL,
  183. .offset = 0,
  184. .mask_flags = 0
  185. }
  186. };
  187. static const struct flash_platform_data cp500_w25q32 = {
  188. .type = "w25q32",
  189. .name = "system-flash",
  190. .parts = cp500_partitions,
  191. .nr_parts = ARRAY_SIZE(cp500_partitions),
  192. };
  193. static const struct flash_platform_data cp500_m25p16 = {
  194. .type = "m25p16",
  195. .name = "system-flash",
  196. .parts = cp500_partitions,
  197. .nr_parts = ARRAY_SIZE(cp500_partitions),
  198. };
  199. static struct spi_board_info cp500_spi_info[] = {
  200. { /* system FPGA configuration bitstream flash */
  201. .modalias = "m25p80",
  202. .platform_data = &cp500_m25p16,
  203. .max_speed_hz = CP500_FLASH_HZ,
  204. .chip_select = 0,
  205. .mode = SPI_MODE_3,
  206. }, { /* LAN9252 EtherCAT slave controller */
  207. .modalias = "lan9252",
  208. .platform_data = NULL,
  209. .max_speed_hz = CP500_LAN9252_HZ,
  210. .chip_select = 1,
  211. .mode = SPI_MODE_3,
  212. }
  213. };
  214. static ssize_t cp500_get_fpga_version(struct cp500 *cp500, char *buf,
  215. size_t max_len)
  216. {
  217. int n;
  218. if (CP500_IS_CP035(cp500))
  219. n = scnprintf(buf, max_len, "CP035");
  220. else if (CP500_IS_CP505(cp500))
  221. n = scnprintf(buf, max_len, "CP505");
  222. else
  223. n = scnprintf(buf, max_len, "CP500");
  224. n += scnprintf(buf + n, max_len - n, "_FPGA_%d.%02d",
  225. cp500->version.major, cp500->version.minor);
  226. /* test versions have test bit set */
  227. if (cp500->version.build & CP500_BUILD_TEST)
  228. n += scnprintf(buf + n, max_len - n, "Test%d",
  229. cp500->version.build & ~CP500_BUILD_TEST);
  230. n += scnprintf(buf + n, max_len - n, "\n");
  231. return n;
  232. }
  233. static ssize_t version_show(struct device *dev, struct device_attribute *attr,
  234. char *buf)
  235. {
  236. struct cp500 *cp500 = dev_get_drvdata(dev);
  237. return cp500_get_fpga_version(cp500, buf, PAGE_SIZE);
  238. }
  239. static DEVICE_ATTR_RO(version);
  240. static ssize_t keep_cfg_show(struct device *dev, struct device_attribute *attr,
  241. char *buf)
  242. {
  243. struct cp500 *cp500 = dev_get_drvdata(dev);
  244. unsigned long keep_cfg = 1;
  245. /*
  246. * FPGA configuration stream is kept during reset when RECONFIG bit is
  247. * zero
  248. */
  249. if (ioread8(cp500->system_startup_addr + CP500_RECONFIG_REG) &
  250. CP500_RECFG_REQ)
  251. keep_cfg = 0;
  252. return sysfs_emit(buf, "%lu\n", keep_cfg);
  253. }
  254. static ssize_t keep_cfg_store(struct device *dev, struct device_attribute *attr,
  255. const char *buf, size_t count)
  256. {
  257. struct cp500 *cp500 = dev_get_drvdata(dev);
  258. unsigned long keep_cfg;
  259. if (kstrtoul(buf, 10, &keep_cfg) < 0)
  260. return -EINVAL;
  261. /*
  262. * In normal operation "keep_cfg" is "1". This means that the FPGA keeps
  263. * its configuration stream during a reset.
  264. * In case of a firmware update of the FPGA, the configuration stream
  265. * needs to be reloaded. This can be done without a powercycle by
  266. * writing a "0" into the "keep_cfg" attribute. After a reset/reboot th
  267. * new configuration stream will be loaded.
  268. */
  269. if (keep_cfg)
  270. iowrite8(0, cp500->system_startup_addr + CP500_RECONFIG_REG);
  271. else
  272. iowrite8(CP500_RECFG_REQ,
  273. cp500->system_startup_addr + CP500_RECONFIG_REG);
  274. return count;
  275. }
  276. static DEVICE_ATTR_RW(keep_cfg);
  277. static struct attribute *cp500_attrs[] = {
  278. &dev_attr_version.attr,
  279. &dev_attr_keep_cfg.attr,
  280. NULL
  281. };
  282. ATTRIBUTE_GROUPS(cp500);
  283. static void cp500_i2c_release(struct device *dev)
  284. {
  285. struct keba_i2c_auxdev *i2c =
  286. container_of(dev, struct keba_i2c_auxdev, auxdev.dev);
  287. kfree(i2c);
  288. }
  289. static int cp500_register_i2c(struct cp500 *cp500)
  290. {
  291. int ret;
  292. cp500->i2c = kzalloc_obj(*cp500->i2c);
  293. if (!cp500->i2c)
  294. return -ENOMEM;
  295. cp500->i2c->auxdev.name = "i2c";
  296. cp500->i2c->auxdev.id = 0;
  297. cp500->i2c->auxdev.dev.release = cp500_i2c_release;
  298. cp500->i2c->auxdev.dev.parent = &cp500->pci_dev->dev;
  299. cp500->i2c->io = (struct resource) {
  300. /* I2C register area */
  301. .start = (resource_size_t) cp500->sys_hwbase +
  302. cp500->devs->i2c.offset,
  303. .end = (resource_size_t) cp500->sys_hwbase +
  304. cp500->devs->i2c.offset +
  305. cp500->devs->i2c.size - 1,
  306. .flags = IORESOURCE_MEM,
  307. };
  308. cp500->i2c->info_size = ARRAY_SIZE(cp500_i2c_info);
  309. cp500->i2c->info = cp500_i2c_info;
  310. ret = auxiliary_device_init(&cp500->i2c->auxdev);
  311. if (ret) {
  312. kfree(cp500->i2c);
  313. cp500->i2c = NULL;
  314. return ret;
  315. }
  316. ret = __auxiliary_device_add(&cp500->i2c->auxdev, "keba");
  317. if (ret) {
  318. auxiliary_device_uninit(&cp500->i2c->auxdev);
  319. cp500->i2c = NULL;
  320. return ret;
  321. }
  322. return 0;
  323. }
  324. static void cp500_spi_release(struct device *dev)
  325. {
  326. struct keba_spi_auxdev *spi =
  327. container_of(dev, struct keba_spi_auxdev, auxdev.dev);
  328. kfree(spi);
  329. }
  330. static int cp500_register_spi(struct cp500 *cp500, u8 esc_type)
  331. {
  332. int info_size;
  333. int ret;
  334. cp500->spi = kzalloc_obj(*cp500->spi);
  335. if (!cp500->spi)
  336. return -ENOMEM;
  337. if (CP500_IS_CP035(cp500))
  338. cp500_spi_info[0].platform_data = &cp500_w25q32;
  339. if (esc_type == CP500_EEPROM_ESC_LAN9252)
  340. info_size = ARRAY_SIZE(cp500_spi_info);
  341. else
  342. info_size = ARRAY_SIZE(cp500_spi_info) - 1;
  343. cp500->spi->auxdev.name = "spi";
  344. cp500->spi->auxdev.id = 0;
  345. cp500->spi->auxdev.dev.release = cp500_spi_release;
  346. cp500->spi->auxdev.dev.parent = &cp500->pci_dev->dev;
  347. cp500->spi->io = (struct resource) {
  348. /* SPI register area */
  349. .start = (resource_size_t) cp500->sys_hwbase +
  350. cp500->devs->spi.offset,
  351. .end = (resource_size_t) cp500->sys_hwbase +
  352. cp500->devs->spi.offset +
  353. cp500->devs->spi.size - 1,
  354. .flags = IORESOURCE_MEM,
  355. };
  356. cp500->spi->info_size = info_size;
  357. cp500->spi->info = cp500_spi_info;
  358. ret = auxiliary_device_init(&cp500->spi->auxdev);
  359. if (ret) {
  360. kfree(cp500->spi);
  361. cp500->spi = NULL;
  362. return ret;
  363. }
  364. ret = __auxiliary_device_add(&cp500->spi->auxdev, "keba");
  365. if (ret) {
  366. auxiliary_device_uninit(&cp500->spi->auxdev);
  367. cp500->spi = NULL;
  368. return ret;
  369. }
  370. return 0;
  371. }
  372. static void cp500_fan_release(struct device *dev)
  373. {
  374. struct keba_fan_auxdev *fan =
  375. container_of(dev, struct keba_fan_auxdev, auxdev.dev);
  376. kfree(fan);
  377. }
  378. static int cp500_register_fan(struct cp500 *cp500)
  379. {
  380. int ret;
  381. cp500->fan = kzalloc_obj(*cp500->fan);
  382. if (!cp500->fan)
  383. return -ENOMEM;
  384. cp500->fan->auxdev.name = "fan";
  385. cp500->fan->auxdev.id = 0;
  386. cp500->fan->auxdev.dev.release = cp500_fan_release;
  387. cp500->fan->auxdev.dev.parent = &cp500->pci_dev->dev;
  388. cp500->fan->io = (struct resource) {
  389. /* fan register area */
  390. .start = (resource_size_t) cp500->sys_hwbase +
  391. cp500->devs->fan.offset,
  392. .end = (resource_size_t) cp500->sys_hwbase +
  393. cp500->devs->fan.offset +
  394. cp500->devs->fan.size - 1,
  395. .flags = IORESOURCE_MEM,
  396. };
  397. ret = auxiliary_device_init(&cp500->fan->auxdev);
  398. if (ret) {
  399. kfree(cp500->fan);
  400. cp500->fan = NULL;
  401. return ret;
  402. }
  403. ret = __auxiliary_device_add(&cp500->fan->auxdev, "keba");
  404. if (ret) {
  405. auxiliary_device_uninit(&cp500->fan->auxdev);
  406. cp500->fan = NULL;
  407. return ret;
  408. }
  409. return 0;
  410. }
  411. static void cp500_batt_release(struct device *dev)
  412. {
  413. struct keba_batt_auxdev *fan =
  414. container_of(dev, struct keba_batt_auxdev, auxdev.dev);
  415. kfree(fan);
  416. }
  417. static int cp500_register_batt(struct cp500 *cp500)
  418. {
  419. int ret;
  420. cp500->batt = kzalloc_obj(*cp500->batt);
  421. if (!cp500->batt)
  422. return -ENOMEM;
  423. cp500->batt->auxdev.name = "batt";
  424. cp500->batt->auxdev.id = 0;
  425. cp500->batt->auxdev.dev.release = cp500_batt_release;
  426. cp500->batt->auxdev.dev.parent = &cp500->pci_dev->dev;
  427. cp500->batt->io = (struct resource) {
  428. /* battery register area */
  429. .start = (resource_size_t) cp500->sys_hwbase +
  430. cp500->devs->batt.offset,
  431. .end = (resource_size_t) cp500->sys_hwbase +
  432. cp500->devs->batt.offset +
  433. cp500->devs->batt.size - 1,
  434. .flags = IORESOURCE_MEM,
  435. };
  436. ret = auxiliary_device_init(&cp500->batt->auxdev);
  437. if (ret) {
  438. kfree(cp500->batt);
  439. cp500->batt = NULL;
  440. return ret;
  441. }
  442. ret = __auxiliary_device_add(&cp500->batt->auxdev, "keba");
  443. if (ret) {
  444. auxiliary_device_uninit(&cp500->batt->auxdev);
  445. cp500->batt = NULL;
  446. return ret;
  447. }
  448. return 0;
  449. }
  450. static void cp500_uart_release(struct device *dev)
  451. {
  452. struct keba_uart_auxdev *uart =
  453. container_of(dev, struct keba_uart_auxdev, auxdev.dev);
  454. kfree(uart);
  455. }
  456. static int cp500_register_uart(struct cp500 *cp500,
  457. struct keba_uart_auxdev **uart, const char *name,
  458. struct cp500_dev_info *info, unsigned int irq)
  459. {
  460. int ret;
  461. *uart = kzalloc_obj(**uart);
  462. if (!*uart)
  463. return -ENOMEM;
  464. (*uart)->auxdev.name = name;
  465. (*uart)->auxdev.id = 0;
  466. (*uart)->auxdev.dev.release = cp500_uart_release;
  467. (*uart)->auxdev.dev.parent = &cp500->pci_dev->dev;
  468. (*uart)->io = (struct resource) {
  469. /* UART register area */
  470. .start = (resource_size_t) cp500->sys_hwbase + info->offset,
  471. .end = (resource_size_t) cp500->sys_hwbase + info->offset +
  472. info->size - 1,
  473. .flags = IORESOURCE_MEM,
  474. };
  475. (*uart)->irq = irq;
  476. ret = auxiliary_device_init(&(*uart)->auxdev);
  477. if (ret) {
  478. kfree(*uart);
  479. *uart = NULL;
  480. return ret;
  481. }
  482. ret = __auxiliary_device_add(&(*uart)->auxdev, "keba");
  483. if (ret) {
  484. auxiliary_device_uninit(&(*uart)->auxdev);
  485. *uart = NULL;
  486. return ret;
  487. }
  488. return 0;
  489. }
  490. static int cp500_nvmem_read(void *priv, unsigned int offset, void *val,
  491. size_t bytes)
  492. {
  493. struct cp500_nvmem *nvmem = priv;
  494. int ret;
  495. ret = nvmem_device_read(nvmem->base_nvmem, nvmem->offset + offset,
  496. bytes, val);
  497. if (ret != bytes)
  498. return ret;
  499. return 0;
  500. }
  501. static int cp500_nvmem_write(void *priv, unsigned int offset, void *val,
  502. size_t bytes)
  503. {
  504. struct cp500_nvmem *nvmem = priv;
  505. int ret;
  506. ret = nvmem_device_write(nvmem->base_nvmem, nvmem->offset + offset,
  507. bytes, val);
  508. if (ret != bytes)
  509. return ret;
  510. return 0;
  511. }
  512. static int cp500_nvmem_register(struct cp500 *cp500,
  513. struct nvmem_device *base_nvmem)
  514. {
  515. struct device *dev = &cp500->pci_dev->dev;
  516. struct nvmem_config nvmem_config = {};
  517. struct nvmem_device *tmp;
  518. /*
  519. * The main EEPROM of CP500 devices is logically split into two EEPROMs.
  520. * The first logical EEPROM with 3 kB contains the type label which is
  521. * programmed during production of the device. The second logical EEPROM
  522. * with 1 kB is not programmed during production and can be used for
  523. * arbitrary user data.
  524. */
  525. nvmem_config.dev = dev;
  526. nvmem_config.owner = THIS_MODULE;
  527. nvmem_config.id = NVMEM_DEVID_NONE;
  528. nvmem_config.type = NVMEM_TYPE_EEPROM;
  529. nvmem_config.root_only = true;
  530. nvmem_config.reg_read = cp500_nvmem_read;
  531. nvmem_config.reg_write = cp500_nvmem_write;
  532. cp500->nvmem_cpu.base_nvmem = base_nvmem;
  533. cp500->nvmem_cpu.offset = CP500_EEPROM_CPU_OFFSET;
  534. nvmem_config.name = CP500_EEPROM_CPU_NAME;
  535. nvmem_config.size = CP500_EEPROM_CPU_SIZE;
  536. nvmem_config.priv = &cp500->nvmem_cpu;
  537. tmp = nvmem_register(&nvmem_config);
  538. if (IS_ERR(tmp))
  539. return PTR_ERR(tmp);
  540. cp500->nvmem_cpu.nvmem = tmp;
  541. cp500->nvmem_user.base_nvmem = base_nvmem;
  542. cp500->nvmem_user.offset = CP500_EEPROM_USER_OFFSET;
  543. nvmem_config.name = CP500_EEPROM_USER_NAME;
  544. nvmem_config.size = CP500_EEPROM_USER_SIZE;
  545. nvmem_config.priv = &cp500->nvmem_user;
  546. tmp = nvmem_register(&nvmem_config);
  547. if (IS_ERR(tmp)) {
  548. nvmem_unregister(cp500->nvmem_cpu.nvmem);
  549. cp500->nvmem_cpu.nvmem = NULL;
  550. return PTR_ERR(tmp);
  551. }
  552. cp500->nvmem_user.nvmem = tmp;
  553. return 0;
  554. }
  555. static void cp500_nvmem_unregister(struct cp500 *cp500)
  556. {
  557. int notified;
  558. if (cp500->nvmem_user.nvmem) {
  559. nvmem_unregister(cp500->nvmem_user.nvmem);
  560. cp500->nvmem_user.nvmem = NULL;
  561. }
  562. if (cp500->nvmem_cpu.nvmem) {
  563. nvmem_unregister(cp500->nvmem_cpu.nvmem);
  564. cp500->nvmem_cpu.nvmem = NULL;
  565. }
  566. /* CPU and user nvmem use the same base_nvmem, put only once */
  567. notified = atomic_read(&cp500->nvmem_notified);
  568. if (notified)
  569. nvmem_device_put(cp500->nvmem_cpu.base_nvmem);
  570. }
  571. static int cp500_nvmem_match(struct device *dev, const void *data)
  572. {
  573. const struct cp500 *cp500 = data;
  574. struct i2c_client *client;
  575. /* match only CPU EEPROM below the cp500 device */
  576. dev = dev->parent;
  577. client = i2c_verify_client(dev);
  578. if (!client || client->addr != CP500_EEPROM_ADDR)
  579. return 0;
  580. while ((dev = dev->parent))
  581. if (dev == &cp500->pci_dev->dev)
  582. return 1;
  583. return 0;
  584. }
  585. static int cp500_nvmem(struct notifier_block *nb, unsigned long action,
  586. void *data)
  587. {
  588. struct nvmem_device *nvmem;
  589. struct cp500 *cp500;
  590. struct device *dev;
  591. int notified;
  592. u8 esc_type;
  593. int ret;
  594. if (action != NVMEM_ADD)
  595. return NOTIFY_DONE;
  596. cp500 = container_of(nb, struct cp500, nvmem_notifier);
  597. dev = &cp500->pci_dev->dev;
  598. /* process CPU EEPROM content only once */
  599. notified = atomic_read(&cp500->nvmem_notified);
  600. if (notified)
  601. return NOTIFY_DONE;
  602. nvmem = nvmem_device_find(cp500, cp500_nvmem_match);
  603. if (IS_ERR_OR_NULL(nvmem))
  604. return NOTIFY_DONE;
  605. if (!atomic_try_cmpxchg_relaxed(&cp500->nvmem_notified, &notified, 1)) {
  606. nvmem_device_put(nvmem);
  607. return NOTIFY_DONE;
  608. }
  609. ret = cp500_nvmem_register(cp500, nvmem);
  610. if (ret)
  611. return ret;
  612. ret = nvmem_device_read(nvmem, CP500_EEPROM_DA_OFFSET, sizeof(esc_type),
  613. (void *)&esc_type);
  614. if (ret != sizeof(esc_type)) {
  615. dev_warn(dev, "Failed to read device assembly!\n");
  616. return NOTIFY_DONE;
  617. }
  618. esc_type &= CP500_EEPROM_DA_ESC_TYPE_MASK;
  619. if (cp500_register_spi(cp500, esc_type))
  620. dev_warn(dev, "Failed to register SPI!\n");
  621. return NOTIFY_OK;
  622. }
  623. static void cp500_register_auxiliary_devs(struct cp500 *cp500)
  624. {
  625. struct device *dev = &cp500->pci_dev->dev;
  626. u8 present = ioread8(cp500->system_startup_addr + CP500_PRESENT_REG);
  627. if (cp500_register_i2c(cp500))
  628. dev_warn(dev, "Failed to register I2C!\n");
  629. if (present & CP500_PRESENT_FAN0)
  630. if (cp500_register_fan(cp500))
  631. dev_warn(dev, "Failed to register fan!\n");
  632. if (cp500_register_batt(cp500))
  633. dev_warn(dev, "Failed to register battery!\n");
  634. if (cp500->devs->uart0_rfb.size &&
  635. cp500->devs->uart0_rfb.msix < cp500->msix_num) {
  636. int irq = pci_irq_vector(cp500->pci_dev,
  637. cp500->devs->uart0_rfb.msix);
  638. if (cp500_register_uart(cp500, &cp500->uart0_rfb, "rs485-uart",
  639. &cp500->devs->uart0_rfb, irq))
  640. dev_warn(dev, "Failed to register RFB UART!\n");
  641. }
  642. if (cp500->devs->uart1_dbg.size &&
  643. cp500->devs->uart1_dbg.msix < cp500->msix_num) {
  644. int irq = pci_irq_vector(cp500->pci_dev,
  645. cp500->devs->uart1_dbg.msix);
  646. if (cp500_register_uart(cp500, &cp500->uart1_dbg, "rs232-uart",
  647. &cp500->devs->uart1_dbg, irq))
  648. dev_warn(dev, "Failed to register debug UART!\n");
  649. }
  650. if (cp500->devs->uart2_si1.size &&
  651. cp500->devs->uart2_si1.msix < cp500->msix_num) {
  652. int irq = pci_irq_vector(cp500->pci_dev,
  653. cp500->devs->uart2_si1.msix);
  654. if (cp500_register_uart(cp500, &cp500->uart2_si1, "uart",
  655. &cp500->devs->uart2_si1, irq))
  656. dev_warn(dev, "Failed to register SI1 UART!\n");
  657. }
  658. }
  659. static void cp500_unregister_dev(struct auxiliary_device *auxdev)
  660. {
  661. auxiliary_device_delete(auxdev);
  662. auxiliary_device_uninit(auxdev);
  663. }
  664. static void cp500_unregister_auxiliary_devs(struct cp500 *cp500)
  665. {
  666. if (cp500->spi) {
  667. cp500_unregister_dev(&cp500->spi->auxdev);
  668. cp500->spi = NULL;
  669. }
  670. if (cp500->i2c) {
  671. cp500_unregister_dev(&cp500->i2c->auxdev);
  672. cp500->i2c = NULL;
  673. }
  674. if (cp500->fan) {
  675. cp500_unregister_dev(&cp500->fan->auxdev);
  676. cp500->fan = NULL;
  677. }
  678. if (cp500->batt) {
  679. cp500_unregister_dev(&cp500->batt->auxdev);
  680. cp500->batt = NULL;
  681. }
  682. if (cp500->uart0_rfb) {
  683. cp500_unregister_dev(&cp500->uart0_rfb->auxdev);
  684. cp500->uart0_rfb = NULL;
  685. }
  686. if (cp500->uart1_dbg) {
  687. cp500_unregister_dev(&cp500->uart1_dbg->auxdev);
  688. cp500->uart1_dbg = NULL;
  689. }
  690. if (cp500->uart2_si1) {
  691. cp500_unregister_dev(&cp500->uart2_si1->auxdev);
  692. cp500->uart2_si1 = NULL;
  693. }
  694. }
  695. static irqreturn_t cp500_axi_handler(int irq, void *dev)
  696. {
  697. struct cp500 *cp500 = dev;
  698. u32 axi_address = ioread32(cp500->system_startup_addr + CP500_AXI_REG);
  699. /*
  700. * FPGA signals AXI response error, print AXI address to indicate which
  701. * IP core was affected
  702. */
  703. dev_err(&cp500->pci_dev->dev, "AXI response error at 0x%08x\n",
  704. axi_address);
  705. return IRQ_HANDLED;
  706. }
  707. static int cp500_enable(struct cp500 *cp500)
  708. {
  709. int axi_irq = -1;
  710. int ret;
  711. if (cp500->msix_num > CP500_NUM_MSIX_NO_AXI) {
  712. axi_irq = pci_irq_vector(cp500->pci_dev, CP500_AXI_MSIX);
  713. ret = request_irq(axi_irq, cp500_axi_handler, 0,
  714. CP500, cp500);
  715. if (ret != 0) {
  716. dev_err(&cp500->pci_dev->dev,
  717. "Failed to register AXI response error!\n");
  718. return ret;
  719. }
  720. }
  721. return 0;
  722. }
  723. static void cp500_disable(struct cp500 *cp500)
  724. {
  725. int axi_irq;
  726. if (cp500->msix_num > CP500_NUM_MSIX_NO_AXI) {
  727. axi_irq = pci_irq_vector(cp500->pci_dev, CP500_AXI_MSIX);
  728. free_irq(axi_irq, cp500);
  729. }
  730. }
  731. static int cp500_probe(struct pci_dev *pci_dev, const struct pci_device_id *id)
  732. {
  733. struct device *dev = &pci_dev->dev;
  734. struct resource startup;
  735. struct cp500 *cp500;
  736. u32 cp500_vers;
  737. char buf[64];
  738. int ret;
  739. cp500 = devm_kzalloc(dev, sizeof(*cp500), GFP_KERNEL);
  740. if (!cp500)
  741. return -ENOMEM;
  742. cp500->pci_dev = pci_dev;
  743. cp500->sys_hwbase = pci_resource_start(pci_dev, CP500_SYS_BAR);
  744. cp500->ecm_hwbase = pci_resource_start(pci_dev, CP500_ECM_BAR);
  745. if (!cp500->sys_hwbase || !cp500->ecm_hwbase)
  746. return -ENODEV;
  747. if (CP500_IS_CP035(cp500))
  748. cp500->devs = &cp035_devices;
  749. else if (CP500_IS_CP505(cp500))
  750. cp500->devs = &cp505_devices;
  751. else if (CP500_IS_CP520(cp500))
  752. cp500->devs = &cp520_devices;
  753. else
  754. return -ENODEV;
  755. ret = pci_enable_device(pci_dev);
  756. if (ret)
  757. return ret;
  758. pci_set_master(pci_dev);
  759. startup = *pci_resource_n(pci_dev, CP500_SYS_BAR);
  760. startup.end = startup.start + cp500->devs->startup.size - 1;
  761. cp500->system_startup_addr = devm_ioremap_resource(&pci_dev->dev,
  762. &startup);
  763. if (IS_ERR(cp500->system_startup_addr)) {
  764. ret = PTR_ERR(cp500->system_startup_addr);
  765. goto out_disable;
  766. }
  767. cp500->msix_num = pci_alloc_irq_vectors(pci_dev, CP500_NUM_MSIX_NO_MMI,
  768. CP500_NUM_MSIX, PCI_IRQ_MSIX);
  769. if (cp500->msix_num < CP500_NUM_MSIX_NO_MMI) {
  770. dev_err(&pci_dev->dev,
  771. "Hardware does not support enough MSI-X interrupts\n");
  772. ret = -ENODEV;
  773. goto out_disable;
  774. }
  775. cp500_vers = ioread32(cp500->system_startup_addr + CP500_VERSION_REG);
  776. cp500->version.major = (cp500_vers & 0xff);
  777. cp500->version.minor = (cp500_vers >> 8) & 0xff;
  778. cp500->version.build = (cp500_vers >> 16) & 0xffff;
  779. cp500_get_fpga_version(cp500, buf, sizeof(buf));
  780. dev_info(&pci_dev->dev, "FPGA version %s", buf);
  781. pci_set_drvdata(pci_dev, cp500);
  782. cp500->nvmem_notifier.notifier_call = cp500_nvmem;
  783. ret = nvmem_register_notifier(&cp500->nvmem_notifier);
  784. if (ret != 0)
  785. goto out_free_irq;
  786. ret = cp500_enable(cp500);
  787. if (ret != 0)
  788. goto out_unregister_nvmem;
  789. cp500_register_auxiliary_devs(cp500);
  790. return 0;
  791. out_unregister_nvmem:
  792. nvmem_unregister_notifier(&cp500->nvmem_notifier);
  793. out_free_irq:
  794. pci_free_irq_vectors(pci_dev);
  795. out_disable:
  796. pci_clear_master(pci_dev);
  797. pci_disable_device(pci_dev);
  798. return ret;
  799. }
  800. static void cp500_remove(struct pci_dev *pci_dev)
  801. {
  802. struct cp500 *cp500 = pci_get_drvdata(pci_dev);
  803. /*
  804. * unregister CPU and user nvmem and put base_nvmem before parent
  805. * auxiliary device of base_nvmem is unregistered
  806. */
  807. nvmem_unregister_notifier(&cp500->nvmem_notifier);
  808. cp500_nvmem_unregister(cp500);
  809. cp500_unregister_auxiliary_devs(cp500);
  810. cp500_disable(cp500);
  811. pci_set_drvdata(pci_dev, 0);
  812. pci_free_irq_vectors(pci_dev);
  813. pci_clear_master(pci_dev);
  814. pci_disable_device(pci_dev);
  815. }
  816. static struct pci_device_id cp500_ids[] = {
  817. { PCI_DEVICE(PCI_VENDOR_ID_KEBA, PCI_DEVICE_ID_KEBA_CP035) },
  818. { PCI_DEVICE(PCI_VENDOR_ID_KEBA, PCI_DEVICE_ID_KEBA_CP505) },
  819. { PCI_DEVICE(PCI_VENDOR_ID_KEBA, PCI_DEVICE_ID_KEBA_CP520) },
  820. { }
  821. };
  822. MODULE_DEVICE_TABLE(pci, cp500_ids);
  823. static struct pci_driver cp500_driver = {
  824. .name = CP500,
  825. .id_table = cp500_ids,
  826. .probe = cp500_probe,
  827. .remove = cp500_remove,
  828. .dev_groups = cp500_groups,
  829. };
  830. module_pci_driver(cp500_driver);
  831. MODULE_AUTHOR("Gerhard Engleder <eg@keba.com>");
  832. MODULE_DESCRIPTION("KEBA CP500 system FPGA driver");
  833. MODULE_LICENSE("GPL");