[PATCH] tpm: tpm_infineon updated to latest interface changes

Apply the latest changes in the TPM interface to the Infineon TPM-driver.

Signed-off-by: Marcel Selhorst <selhorst@crypto.rub.de>
Acked-by: Kylie Hall <kjhall@us.ibm.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>

authored by Marcel Selhorst and committed by Linus Torvalds e496f540 10685a95

+29 -29
+29 -29
drivers/char/tpm/tpm_infineon.c
··· 104 105 if (clear_wrfifo) { 106 for (i = 0; i < 4096; i++) { 107 - status = inb(chip->vendor->base + WRFIFO); 108 if (status == 0xff) { 109 if (check == 5) 110 break; ··· 124 */ 125 i = 0; 126 do { 127 - status = inb(chip->vendor->base + RDFIFO); 128 - status = inb(chip->vendor->base + STAT); 129 i++; 130 if (i == TPM_MAX_TRIES) 131 return -EIO; ··· 138 int status; 139 int i; 140 for (i = 0; i < TPM_MAX_TRIES; i++) { 141 - status = inb(chip->vendor->base + STAT); 142 /* check the status-register if wait_for_bit is set */ 143 if (status & 1 << wait_for_bit) 144 break; ··· 157 static void wait_and_send(struct tpm_chip *chip, u8 sendbyte) 158 { 159 wait(chip, STAT_XFE); 160 - outb(sendbyte, chip->vendor->base + WRFIFO); 161 } 162 163 /* Note: WTX means Waiting-Time-Extension. Whenever the TPM needs more ··· 204 ret = wait(chip, STAT_RDA); 205 if (ret) 206 return -EIO; 207 - buf[i] = inb(chip->vendor->base + RDFIFO); 208 } 209 210 if (buf[0] != TPM_VL_VER) { ··· 219 220 for (i = 0; i < size; i++) { 221 wait(chip, STAT_RDA); 222 - buf[i] = inb(chip->vendor->base + RDFIFO); 223 } 224 225 if ((size == 0x6D00) && (buf[1] == 0x80)) { ··· 268 u8 count_high, count_low, count_4, count_3, count_2, count_1; 269 270 /* Disabling Reset, LP and IRQC */ 271 - outb(RESET_LP_IRQC_DISABLE, chip->vendor->base + CMD); 272 273 ret = empty_fifo(chip, 1); 274 if (ret) { ··· 319 320 static u8 tpm_inf_status(struct tpm_chip *chip) 321 { 322 - return inb(chip->vendor->base + STAT); 323 } 324 325 static DEVICE_ATTR(pubek, S_IRUGO, tpm_show_pubek, NULL); ··· 346 .release = tpm_release, 347 }; 348 349 - static struct tpm_vendor_specific tpm_inf = { 350 .recv = tpm_inf_recv, 351 .send = tpm_inf_send, 352 .cancel = tpm_inf_cancel, ··· 375 int version[2]; 376 int productid[2]; 377 char chipname[20]; 378 379 /* read IO-ports through PnP */ 380 if (pnp_port_valid(dev, 0) && pnp_port_valid(dev, 1) && ··· 396 goto err_last; 397 } 398 /* publish my base address and request region */ 399 - tpm_inf.base = TPM_INF_BASE; 400 if (request_region 401 - (tpm_inf.base, TPM_INF_PORT_LEN, "tpm_infineon0") == NULL) { 402 rc = -EINVAL; 403 goto err_last; 404 } 405 - if (request_region(TPM_INF_ADDR, TPM_INF_ADDR_LEN, 406 - "tpm_infineon0") == NULL) { 407 rc = -EINVAL; 408 goto err_last; 409 } ··· 442 443 /* configure TPM with IO-ports */ 444 outb(IOLIMH, TPM_INF_ADDR); 445 - outb(((tpm_inf.base >> 8) & 0xff), TPM_INF_DATA); 446 outb(IOLIML, TPM_INF_ADDR); 447 - outb((tpm_inf.base & 0xff), TPM_INF_DATA); 448 449 /* control if IO-ports are set correctly */ 450 outb(IOLIMH, TPM_INF_ADDR); ··· 452 outb(IOLIML, TPM_INF_ADDR); 453 iol = inb(TPM_INF_DATA); 454 455 - if ((ioh << 8 | iol) != tpm_inf.base) { 456 dev_err(&dev->dev, 457 - "Could not set IO-ports to 0x%lx\n", 458 - tpm_inf.base); 459 rc = -EIO; 460 goto err_release_region; 461 } ··· 466 outb(DISABLE_REGISTER_PAIR, TPM_INF_ADDR); 467 468 /* disable RESET, LP and IRQC */ 469 - outb(RESET_LP_IRQC_DISABLE, tpm_inf.base + CMD); 470 471 /* Finally, we're done, print some infos */ 472 dev_info(&dev->dev, "TPM found: " 473 "config base 0x%x, " 474 "io base 0x%x, " 475 - "chip version %02x%02x, " 476 - "vendor id %x%x (Infineon), " 477 - "product id %02x%02x" 478 "%s\n", 479 TPM_INF_ADDR, 480 TPM_INF_BASE, ··· 482 vendorid[0], vendorid[1], 483 productid[0], productid[1], chipname); 484 485 - rc = tpm_register_hardware(&dev->dev, &tpm_inf); 486 - if (rc < 0) { 487 - rc = -ENODEV; 488 goto err_release_region; 489 } 490 return 0; 491 } else { 492 rc = -ENODEV; ··· 493 } 494 495 err_release_region: 496 - release_region(tpm_inf.base, TPM_INF_PORT_LEN); 497 release_region(TPM_INF_ADDR, TPM_INF_ADDR_LEN); 498 499 err_last: ··· 505 struct tpm_chip *chip = pnp_get_drvdata(dev); 506 507 if (chip) { 508 - release_region(chip->vendor->base, TPM_INF_PORT_LEN); 509 tpm_remove_hardware(chip->dev); 510 } 511 } ··· 538 539 MODULE_AUTHOR("Marcel Selhorst <selhorst@crypto.rub.de>"); 540 MODULE_DESCRIPTION("Driver for Infineon TPM SLD 9630 TT 1.1 / SLB 9635 TT 1.2"); 541 - MODULE_VERSION("1.7"); 542 MODULE_LICENSE("GPL");
··· 104 105 if (clear_wrfifo) { 106 for (i = 0; i < 4096; i++) { 107 + status = inb(chip->vendor.base + WRFIFO); 108 if (status == 0xff) { 109 if (check == 5) 110 break; ··· 124 */ 125 i = 0; 126 do { 127 + status = inb(chip->vendor.base + RDFIFO); 128 + status = inb(chip->vendor.base + STAT); 129 i++; 130 if (i == TPM_MAX_TRIES) 131 return -EIO; ··· 138 int status; 139 int i; 140 for (i = 0; i < TPM_MAX_TRIES; i++) { 141 + status = inb(chip->vendor.base + STAT); 142 /* check the status-register if wait_for_bit is set */ 143 if (status & 1 << wait_for_bit) 144 break; ··· 157 static void wait_and_send(struct tpm_chip *chip, u8 sendbyte) 158 { 159 wait(chip, STAT_XFE); 160 + outb(sendbyte, chip->vendor.base + WRFIFO); 161 } 162 163 /* Note: WTX means Waiting-Time-Extension. Whenever the TPM needs more ··· 204 ret = wait(chip, STAT_RDA); 205 if (ret) 206 return -EIO; 207 + buf[i] = inb(chip->vendor.base + RDFIFO); 208 } 209 210 if (buf[0] != TPM_VL_VER) { ··· 219 220 for (i = 0; i < size; i++) { 221 wait(chip, STAT_RDA); 222 + buf[i] = inb(chip->vendor.base + RDFIFO); 223 } 224 225 if ((size == 0x6D00) && (buf[1] == 0x80)) { ··· 268 u8 count_high, count_low, count_4, count_3, count_2, count_1; 269 270 /* Disabling Reset, LP and IRQC */ 271 + outb(RESET_LP_IRQC_DISABLE, chip->vendor.base + CMD); 272 273 ret = empty_fifo(chip, 1); 274 if (ret) { ··· 319 320 static u8 tpm_inf_status(struct tpm_chip *chip) 321 { 322 + return inb(chip->vendor.base + STAT); 323 } 324 325 static DEVICE_ATTR(pubek, S_IRUGO, tpm_show_pubek, NULL); ··· 346 .release = tpm_release, 347 }; 348 349 + static const struct tpm_vendor_specific tpm_inf = { 350 .recv = tpm_inf_recv, 351 .send = tpm_inf_send, 352 .cancel = tpm_inf_cancel, ··· 375 int version[2]; 376 int productid[2]; 377 char chipname[20]; 378 + struct tpm_chip *chip; 379 380 /* read IO-ports through PnP */ 381 if (pnp_port_valid(dev, 0) && pnp_port_valid(dev, 1) && ··· 395 goto err_last; 396 } 397 /* publish my base address and request region */ 398 if (request_region 399 + (TPM_INF_BASE, TPM_INF_PORT_LEN, "tpm_infineon0") == NULL) { 400 rc = -EINVAL; 401 goto err_last; 402 } 403 + if (request_region 404 + (TPM_INF_ADDR, TPM_INF_ADDR_LEN, "tpm_infineon0") == NULL) { 405 rc = -EINVAL; 406 goto err_last; 407 } ··· 442 443 /* configure TPM with IO-ports */ 444 outb(IOLIMH, TPM_INF_ADDR); 445 + outb(((TPM_INF_BASE >> 8) & 0xff), TPM_INF_DATA); 446 outb(IOLIML, TPM_INF_ADDR); 447 + outb((TPM_INF_BASE & 0xff), TPM_INF_DATA); 448 449 /* control if IO-ports are set correctly */ 450 outb(IOLIMH, TPM_INF_ADDR); ··· 452 outb(IOLIML, TPM_INF_ADDR); 453 iol = inb(TPM_INF_DATA); 454 455 + if ((ioh << 8 | iol) != TPM_INF_BASE) { 456 dev_err(&dev->dev, 457 + "Could not set IO-ports to 0x%x\n", 458 + TPM_INF_BASE); 459 rc = -EIO; 460 goto err_release_region; 461 } ··· 466 outb(DISABLE_REGISTER_PAIR, TPM_INF_ADDR); 467 468 /* disable RESET, LP and IRQC */ 469 + outb(RESET_LP_IRQC_DISABLE, TPM_INF_BASE + CMD); 470 471 /* Finally, we're done, print some infos */ 472 dev_info(&dev->dev, "TPM found: " 473 "config base 0x%x, " 474 "io base 0x%x, " 475 + "chip version 0x%02x%02x, " 476 + "vendor id 0x%x%x (Infineon), " 477 + "product id 0x%02x%02x" 478 "%s\n", 479 TPM_INF_ADDR, 480 TPM_INF_BASE, ··· 482 vendorid[0], vendorid[1], 483 productid[0], productid[1], chipname); 484 485 + if (!(chip = tpm_register_hardware(&dev->dev, &tpm_inf))) { 486 goto err_release_region; 487 } 488 + chip->vendor.base = TPM_INF_BASE; 489 return 0; 490 } else { 491 rc = -ENODEV; ··· 494 } 495 496 err_release_region: 497 + release_region(TPM_INF_BASE, TPM_INF_PORT_LEN); 498 release_region(TPM_INF_ADDR, TPM_INF_ADDR_LEN); 499 500 err_last: ··· 506 struct tpm_chip *chip = pnp_get_drvdata(dev); 507 508 if (chip) { 509 + release_region(TPM_INF_BASE, TPM_INF_PORT_LEN); 510 + release_region(TPM_INF_ADDR, TPM_INF_ADDR_LEN); 511 tpm_remove_hardware(chip->dev); 512 } 513 } ··· 538 539 MODULE_AUTHOR("Marcel Selhorst <selhorst@crypto.rub.de>"); 540 MODULE_DESCRIPTION("Driver for Infineon TPM SLD 9630 TT 1.1 / SLB 9635 TT 1.2"); 541 + MODULE_VERSION("1.8"); 542 MODULE_LICENSE("GPL");