1# SPDX-License-Identifier: GPL-2.0-only 2menu "Clock Source drivers" 3 depends on GENERIC_CLOCKEVENTS 4 5config TIMER_OF 6 bool 7 select TIMER_PROBE 8 9config TIMER_ACPI 10 bool 11 select TIMER_PROBE 12 13config TIMER_PROBE 14 bool 15 16config CLKSRC_I8253 17 bool 18 19config CLKEVT_I8253 20 bool 21 22config I8253_LOCK 23 bool 24 25config OMAP_DM_TIMER 26 bool 27 28config CLKBLD_I8253 29 def_bool y if CLKSRC_I8253 || CLKEVT_I8253 || I8253_LOCK 30 31config CLKSRC_MMIO 32 bool 33 34config BCM2835_TIMER 35 bool "BCM2835 timer driver" if COMPILE_TEST 36 select CLKSRC_MMIO 37 help 38 Enables the support for the BCM2835 timer driver. 39 40config BCM_KONA_TIMER 41 bool "BCM mobile timer driver" if COMPILE_TEST 42 select CLKSRC_MMIO 43 help 44 Enables the support for the BCM Kona mobile timer driver. 45 46config DAVINCI_TIMER 47 bool "Texas Instruments DaVinci timer driver" if COMPILE_TEST 48 help 49 Enables the support for the TI DaVinci timer driver. 50 51config DIGICOLOR_TIMER 52 bool "Digicolor timer driver" if COMPILE_TEST 53 select CLKSRC_MMIO 54 depends on HAS_IOMEM 55 help 56 Enables the support for the digicolor timer driver. 57 58config DW_APB_TIMER 59 bool "DW APB timer driver" if COMPILE_TEST 60 help 61 Enables the support for the dw_apb timer. 62 63config DW_APB_TIMER_OF 64 bool 65 select DW_APB_TIMER 66 select TIMER_OF 67 68config FTTMR010_TIMER 69 bool "Faraday Technology timer driver" if COMPILE_TEST 70 depends on HAS_IOMEM 71 select CLKSRC_MMIO 72 select TIMER_OF 73 select MFD_SYSCON 74 help 75 Enables support for the Faraday Technology timer block 76 FTTMR010. 77 78config IXP4XX_TIMER 79 bool "Intel XScale IXP4xx timer driver" if COMPILE_TEST 80 depends on HAS_IOMEM 81 select CLKSRC_MMIO 82 select TIMER_OF if OF 83 help 84 Enables support for the Intel XScale IXP4xx SoC timer. 85 86config ROCKCHIP_TIMER 87 bool "Rockchip timer driver" if COMPILE_TEST 88 depends on ARM || ARM64 89 select TIMER_OF 90 select CLKSRC_MMIO 91 help 92 Enables the support for the Rockchip timer driver. 93 94config ARMADA_370_XP_TIMER 95 bool "Armada 370 and XP timer driver" if COMPILE_TEST 96 depends on ARM 97 select TIMER_OF 98 select CLKSRC_MMIO 99 help 100 Enables the support for the Armada 370 and XP timer driver. 101 102config MESON6_TIMER 103 bool "Meson6 timer driver" if COMPILE_TEST 104 select CLKSRC_MMIO 105 help 106 Enables the support for the Meson6 timer driver. 107 108config ORION_TIMER 109 bool "Orion timer driver" if COMPILE_TEST 110 depends on ARM 111 select TIMER_OF 112 select CLKSRC_MMIO 113 help 114 Enables the support for the Orion timer driver 115 116config OWL_TIMER 117 bool "Owl timer driver" if COMPILE_TEST 118 select CLKSRC_MMIO 119 help 120 Enables the support for the Actions Semi Owl timer driver. 121 122config RDA_TIMER 123 bool "RDA timer driver" if COMPILE_TEST 124 select CLKSRC_MMIO 125 select TIMER_OF 126 help 127 Enables the support for the RDA Micro timer driver. 128 129config SUN4I_TIMER 130 bool "Sun4i timer driver" if COMPILE_TEST 131 depends on HAS_IOMEM 132 select CLKSRC_MMIO 133 select TIMER_OF 134 help 135 Enables support for the Sun4i timer. 136 137config SUN5I_HSTIMER 138 bool "Sun5i timer driver" if COMPILE_TEST 139 select CLKSRC_MMIO 140 depends on COMMON_CLK 141 help 142 Enables support the Sun5i timer. 143 144config TEGRA_TIMER 145 bool "Tegra timer driver" if COMPILE_TEST 146 select CLKSRC_MMIO 147 select TIMER_OF 148 depends on ARCH_TEGRA || COMPILE_TEST 149 help 150 Enables support for the Tegra driver. 151 152config VT8500_TIMER 153 bool "VT8500 timer driver" if COMPILE_TEST 154 depends on HAS_IOMEM 155 help 156 Enables support for the VT8500 driver. 157 158config NPCM7XX_TIMER 159 bool "NPCM7xx timer driver" if COMPILE_TEST 160 depends on HAS_IOMEM 161 select TIMER_OF 162 select CLKSRC_MMIO 163 help 164 Enable 24-bit TIMER0 and TIMER1 counters in the NPCM7xx architecture, 165 where TIMER0 serves as clockevent and TIMER1 serves as clocksource. 166 167config CADENCE_TTC_TIMER 168 bool "Cadence TTC timer driver" if COMPILE_TEST 169 depends on COMMON_CLK 170 help 171 Enables support for the Cadence TTC driver. 172 173config ASM9260_TIMER 174 bool "ASM9260 timer driver" if COMPILE_TEST 175 select CLKSRC_MMIO 176 select TIMER_OF 177 help 178 Enables support for the ASM9260 timer. 179 180config CLKSRC_NOMADIK_MTU 181 bool "Nomakdik clocksource driver" if COMPILE_TEST 182 depends on ARM 183 select CLKSRC_MMIO 184 help 185 Support for Multi Timer Unit. MTU provides access 186 to multiple interrupt generating programmable 187 32-bit free running decrementing counters. 188 189config CLKSRC_DBX500_PRCMU 190 bool "Clocksource PRCMU Timer" if COMPILE_TEST 191 depends on HAS_IOMEM 192 help 193 Use the always on PRCMU Timer as clocksource. 194 195config CLPS711X_TIMER 196 bool "Cirrus Logic timer driver" if COMPILE_TEST 197 select CLKSRC_MMIO 198 help 199 Enables support for the Cirrus Logic PS711 timer. 200 201config MXS_TIMER 202 bool "MXS timer driver" if COMPILE_TEST 203 select CLKSRC_MMIO 204 select STMP_DEVICE 205 help 206 Enables support for the MXS timer. 207 208config NSPIRE_TIMER 209 bool "NSpire timer driver" if COMPILE_TEST 210 select CLKSRC_MMIO 211 help 212 Enables support for the Nspire timer. 213 214config KEYSTONE_TIMER 215 bool "Keystone timer driver" if COMPILE_TEST 216 depends on ARM || ARM64 217 select CLKSRC_MMIO 218 help 219 Enables support for the Keystone timer. 220 221config INTEGRATOR_AP_TIMER 222 bool "Integrator-AP timer driver" if COMPILE_TEST 223 select CLKSRC_MMIO 224 help 225 Enables support for the Integrator-AP timer. 226 227config CLKSRC_LPC32XX 228 bool "Clocksource for LPC32XX" if COMPILE_TEST 229 depends on HAS_IOMEM 230 depends on ARM 231 select CLKSRC_MMIO 232 select TIMER_OF 233 help 234 Support for the LPC32XX clocksource. 235 236config CLKSRC_PISTACHIO 237 bool "Clocksource for Pistachio SoC" if COMPILE_TEST 238 depends on HAS_IOMEM 239 select TIMER_OF 240 help 241 Enables the clocksource for the Pistachio SoC. 242 243config CLKSRC_TI_32K 244 bool "Texas Instruments 32.768 Hz Clocksource" if COMPILE_TEST 245 depends on GENERIC_SCHED_CLOCK 246 select TIMER_OF if OF 247 help 248 This option enables support for Texas Instruments 32.768 Hz clocksource 249 available on many OMAP-like platforms. 250 251config CLKSRC_STM32 252 bool "Clocksource for STM32 SoCs" if !ARCH_STM32 253 depends on OF && ARM && (ARCH_STM32 || COMPILE_TEST) 254 select CLKSRC_MMIO 255 select TIMER_OF 256 257config CLKSRC_STM32_LP 258 bool "Low power clocksource for STM32 SoCs" 259 depends on MFD_STM32_LPTIMER || COMPILE_TEST 260 261config CLKSRC_MPS2 262 bool "Clocksource for MPS2 SoCs" if COMPILE_TEST 263 depends on GENERIC_SCHED_CLOCK 264 select CLKSRC_MMIO 265 select TIMER_OF 266 267config ARC_TIMERS 268 bool "Support for 32-bit TIMERn counters in ARC Cores" if COMPILE_TEST 269 depends on GENERIC_SCHED_CLOCK 270 select TIMER_OF 271 help 272 These are legacy 32-bit TIMER0 and TIMER1 counters found on all ARC cores 273 (ARC700 as well as ARC HS38). 274 TIMER0 serves as clockevent while TIMER1 provides clocksource. 275 276config ARC_TIMERS_64BIT 277 bool "Support for 64-bit counters in ARC HS38 cores" if COMPILE_TEST 278 depends on ARC_TIMERS 279 select TIMER_OF 280 help 281 This enables 2 different 64-bit timers: RTC (for UP) and GFRC (for SMP). 282 RTC is implemented inside the core, while GFRC sits outside the core in 283 ARConnect IP block. Driver automatically picks one of them for clocksource 284 as appropriate. 285 286config ARM_ARCH_TIMER 287 bool 288 select TIMER_OF if OF 289 select TIMER_ACPI if ACPI 290 291config ARM_ARCH_TIMER_EVTSTREAM 292 bool "Enable ARM architected timer event stream generation by default" 293 default y if ARM_ARCH_TIMER 294 depends on ARM_ARCH_TIMER 295 help 296 This option enables support by default for event stream generation 297 based on the ARM architected timer. It is used for waking up CPUs 298 executing the wfe instruction at a frequency represented as a 299 power-of-2 divisor of the clock rate. The behaviour can also be 300 overridden on the command line using the 301 clocksource.arm_arch_timer.evtstream parameter. 302 The main use of the event stream is wfe-based timeouts of userspace 303 locking implementations. It might also be useful for imposing timeout 304 on wfe to safeguard against any programming errors in case an expected 305 event is not generated. 306 This must be disabled for hardware validation purposes to detect any 307 hardware anomalies of missing events. 308 309config ARM_ARCH_TIMER_OOL_WORKAROUND 310 bool 311 312config FSL_ERRATUM_A008585 313 bool "Workaround for Freescale/NXP Erratum A-008585" 314 default y 315 depends on ARM_ARCH_TIMER && ARM64 316 select ARM_ARCH_TIMER_OOL_WORKAROUND 317 help 318 This option enables a workaround for Freescale/NXP Erratum 319 A-008585 ("ARM generic timer may contain an erroneous 320 value"). The workaround will only be active if the 321 fsl,erratum-a008585 property is found in the timer node. 322 323config HISILICON_ERRATUM_161010101 324 bool "Workaround for Hisilicon Erratum 161010101" 325 default y 326 select ARM_ARCH_TIMER_OOL_WORKAROUND 327 depends on ARM_ARCH_TIMER && ARM64 328 help 329 This option enables a workaround for Hisilicon Erratum 330 161010101. The workaround will be active if the hisilicon,erratum-161010101 331 property is found in the timer node. 332 333config ARM64_ERRATUM_858921 334 bool "Workaround for Cortex-A73 erratum 858921" 335 default y 336 select ARM_ARCH_TIMER_OOL_WORKAROUND 337 depends on ARM_ARCH_TIMER && ARM64 338 help 339 This option enables a workaround applicable to Cortex-A73 340 (all versions), whose counter may return incorrect values. 341 The workaround will be dynamically enabled when an affected 342 core is detected. 343 344config SUN50I_ERRATUM_UNKNOWN1 345 bool "Workaround for Allwinner A64 erratum UNKNOWN1" 346 default y 347 depends on ARM_ARCH_TIMER && ARM64 && ARCH_SUNXI 348 select ARM_ARCH_TIMER_OOL_WORKAROUND 349 help 350 This option enables a workaround for instability in the timer on 351 the Allwinner A64 SoC. The workaround will only be active if the 352 allwinner,erratum-unknown1 property is found in the timer node. 353 354config ARM_GLOBAL_TIMER 355 bool "Support for the ARM global timer" if COMPILE_TEST 356 select TIMER_OF if OF 357 depends on ARM 358 help 359 This option enables support for the ARM global timer unit. 360 361config ARM_TIMER_SP804 362 bool "Support for Dual Timer SP804 module" if COMPILE_TEST 363 depends on GENERIC_SCHED_CLOCK && CLKDEV_LOOKUP 364 select CLKSRC_MMIO 365 select TIMER_OF if OF 366 367config CLKSRC_ARM_GLOBAL_TIMER_SCHED_CLOCK 368 bool 369 depends on ARM_GLOBAL_TIMER 370 default y 371 help 372 Use ARM global timer clock source as sched_clock. 373 374config ARMV7M_SYSTICK 375 bool "Support for the ARMv7M system time" if COMPILE_TEST 376 select TIMER_OF if OF 377 select CLKSRC_MMIO 378 help 379 This option enables support for the ARMv7M system timer unit. 380 381config ATMEL_PIT 382 bool "Atmel PIT support" if COMPILE_TEST 383 depends on HAS_IOMEM 384 select TIMER_OF if OF 385 help 386 Support for the Periodic Interval Timer found on Atmel SoCs. 387 388config ATMEL_ST 389 bool "Atmel ST timer support" if COMPILE_TEST 390 depends on HAS_IOMEM 391 select TIMER_OF 392 select MFD_SYSCON 393 help 394 Support for the Atmel ST timer. 395 396config ATMEL_TCB_CLKSRC 397 bool "Atmel TC Block timer driver" if COMPILE_TEST 398 depends on ARM && HAS_IOMEM 399 select TIMER_OF if OF 400 help 401 Support for Timer Counter Blocks on Atmel SoCs. 402 403config CLKSRC_EXYNOS_MCT 404 bool "Exynos multi core timer driver" if COMPILE_TEST 405 depends on ARM || ARM64 406 help 407 Support for Multi Core Timer controller on Exynos SoCs. 408 409config CLKSRC_SAMSUNG_PWM 410 bool "PWM timer driver for Samsung S3C, S5P" if COMPILE_TEST 411 depends on HAS_IOMEM 412 help 413 This is a new clocksource driver for the PWM timer found in 414 Samsung S3C, S5P and Exynos SoCs, replacing an earlier driver 415 for all devicetree enabled platforms. This driver will be 416 needed only on systems that do not have the Exynos MCT available. 417 418config FSL_FTM_TIMER 419 bool "Freescale FlexTimer Module driver" if COMPILE_TEST 420 depends on HAS_IOMEM 421 select CLKSRC_MMIO 422 help 423 Support for Freescale FlexTimer Module (FTM) timer. 424 425config VF_PIT_TIMER 426 bool 427 select CLKSRC_MMIO 428 help 429 Support for Periodic Interrupt Timer on Freescale Vybrid Family SoCs. 430 431config OXNAS_RPS_TIMER 432 bool "Oxford Semiconductor OXNAS RPS Timers driver" if COMPILE_TEST 433 select TIMER_OF 434 select CLKSRC_MMIO 435 help 436 This enables support for the Oxford Semiconductor OXNAS RPS timers. 437 438config SYS_SUPPORTS_SH_CMT 439 bool 440 441config MTK_TIMER 442 bool "Mediatek timer driver" if COMPILE_TEST 443 depends on HAS_IOMEM 444 select TIMER_OF 445 select CLKSRC_MMIO 446 help 447 Support for Mediatek timer driver. 448 449config SPRD_TIMER 450 bool "Spreadtrum timer driver" if EXPERT 451 depends on HAS_IOMEM 452 depends on (ARCH_SPRD || COMPILE_TEST) 453 default ARCH_SPRD 454 select TIMER_OF 455 help 456 Enables support for the Spreadtrum timer driver. 457 458config SYS_SUPPORTS_SH_MTU2 459 bool 460 461config SYS_SUPPORTS_SH_TMU 462 bool 463 464config SYS_SUPPORTS_EM_STI 465 bool 466 467config CLKSRC_JCORE_PIT 468 bool "J-Core PIT timer driver" if COMPILE_TEST 469 depends on OF 470 depends on HAS_IOMEM 471 select CLKSRC_MMIO 472 help 473 This enables build of clocksource and clockevent driver for 474 the integrated PIT in the J-Core synthesizable, open source SoC. 475 476config SH_TIMER_CMT 477 bool "Renesas CMT timer driver" if COMPILE_TEST 478 depends on HAS_IOMEM 479 default SYS_SUPPORTS_SH_CMT 480 help 481 This enables build of a clocksource and clockevent driver for 482 the Compare Match Timer (CMT) hardware available in 16/32/48-bit 483 variants on a wide range of Mobile and Automotive SoCs from Renesas. 484 485config SH_TIMER_MTU2 486 bool "Renesas MTU2 timer driver" if COMPILE_TEST 487 depends on HAS_IOMEM 488 default SYS_SUPPORTS_SH_MTU2 489 help 490 This enables build of a clockevent driver for the Multi-Function 491 Timer Pulse Unit 2 (MTU2) hardware available on SoCs from Renesas. 492 This hardware comes with 16-bit timer registers. 493 494config RENESAS_OSTM 495 bool "Renesas OSTM timer driver" if COMPILE_TEST 496 select CLKSRC_MMIO 497 select TIMER_OF 498 help 499 Enables the support for the Renesas OSTM. 500 501config SH_TIMER_TMU 502 bool "Renesas TMU timer driver" if COMPILE_TEST 503 depends on HAS_IOMEM 504 default SYS_SUPPORTS_SH_TMU 505 help 506 This enables build of a clocksource and clockevent driver for 507 the 32-bit Timer Unit (TMU) hardware available on a wide range 508 SoCs from Renesas. 509 510config EM_TIMER_STI 511 bool "Renesas STI timer driver" if COMPILE_TEST 512 depends on HAS_IOMEM 513 default SYS_SUPPORTS_EM_STI 514 help 515 This enables build of a clocksource and clockevent driver for 516 the 48-bit System Timer (STI) hardware available on a SoCs 517 such as EMEV2 from former NEC Electronics. 518 519config CLKSRC_QCOM 520 bool "Qualcomm MSM timer" if COMPILE_TEST 521 depends on ARM 522 select TIMER_OF 523 help 524 This enables the clocksource and the per CPU clockevent driver for the 525 Qualcomm SoCs. 526 527config CLKSRC_VERSATILE 528 bool "ARM Versatile (Express) reference platforms clock source" if COMPILE_TEST 529 depends on GENERIC_SCHED_CLOCK 530 select TIMER_OF 531 default y if (ARCH_VEXPRESS || ARCH_VERSATILE) && ARM 532 help 533 This option enables clock source based on free running 534 counter available in the "System Registers" block of 535 ARM Versatile and Versatile Express reference platforms. 536 537config CLKSRC_MIPS_GIC 538 bool 539 depends on MIPS_GIC 540 select CLOCKSOURCE_WATCHDOG 541 select TIMER_OF 542 543config CLKSRC_PXA 544 bool "Clocksource for PXA or SA-11x0 platform" if COMPILE_TEST 545 depends on HAS_IOMEM 546 select CLKSRC_MMIO 547 help 548 This enables OST0 support available on PXA and SA-11x0 549 platforms. 550 551config H8300_TMR8 552 bool "Clockevent timer for the H8300 platform" if COMPILE_TEST 553 depends on HAS_IOMEM 554 help 555 This enables the 8 bits timer for the H8300 platform. 556 557config H8300_TMR16 558 bool "Clockevent timer for the H83069 platform" if COMPILE_TEST 559 depends on HAS_IOMEM 560 help 561 This enables the 16 bits timer for the H8300 platform with the 562 H83069 CPU. 563 564config H8300_TPU 565 bool "Clocksource for the H8300 platform" if COMPILE_TEST 566 depends on HAS_IOMEM 567 help 568 This enables the clocksource for the H8300 platform with the 569 H8S2678 CPU. 570 571config CLKSRC_IMX_GPT 572 bool "Clocksource using i.MX GPT" if COMPILE_TEST 573 depends on (ARM || ARM64) && CLKDEV_LOOKUP 574 select CLKSRC_MMIO 575 576config CLKSRC_IMX_TPM 577 bool "Clocksource using i.MX TPM" if COMPILE_TEST 578 depends on (ARM || ARM64) && CLKDEV_LOOKUP 579 select CLKSRC_MMIO 580 select TIMER_OF 581 help 582 Enable this option to use IMX Timer/PWM Module (TPM) timer as 583 clocksource. 584 585config TIMER_IMX_SYS_CTR 586 bool "i.MX system counter timer" if COMPILE_TEST 587 select TIMER_OF 588 help 589 Enable this option to use i.MX system counter timer as a 590 clockevent. 591 592config CLKSRC_ST_LPC 593 bool "Low power clocksource found in the LPC" if COMPILE_TEST 594 select TIMER_OF if OF 595 depends on HAS_IOMEM 596 select CLKSRC_MMIO 597 help 598 Enable this option to use the Low Power controller timer 599 as clocksource. 600 601config ATCPIT100_TIMER 602 bool "ATCPIT100 timer driver" 603 depends on NDS32 || COMPILE_TEST 604 depends on HAS_IOMEM 605 select TIMER_OF 606 default NDS32 607 help 608 This option enables support for the Andestech ATCPIT100 timers. 609 610config RISCV_TIMER 611 bool "Timer for the RISC-V platform" if COMPILE_TEST 612 depends on GENERIC_SCHED_CLOCK && RISCV && RISCV_SBI 613 select TIMER_PROBE 614 select TIMER_OF 615 help 616 This enables the per-hart timer built into all RISC-V systems, which 617 is accessed via both the SBI and the rdcycle instruction. This is 618 required for all RISC-V systems. 619 620config CLINT_TIMER 621 bool "CLINT Timer for the RISC-V platform" if COMPILE_TEST 622 depends on GENERIC_SCHED_CLOCK && RISCV 623 select TIMER_PROBE 624 select TIMER_OF 625 help 626 This option enables the CLINT timer for RISC-V systems. The CLINT 627 driver is usually used for NoMMU RISC-V systems. 628 629config CSKY_MP_TIMER 630 bool "SMP Timer for the C-SKY platform" if COMPILE_TEST 631 depends on CSKY 632 select TIMER_OF 633 help 634 Say yes here to enable C-SKY SMP timer driver used for C-SKY SMP 635 system. 636 csky,mptimer is not only used in SMP system, it also could be used in 637 single core system. It's not a mmio reg and it uses mtcr/mfcr instruction. 638 639config GX6605S_TIMER 640 bool "Gx6605s SOC system timer driver" if COMPILE_TEST 641 depends on CSKY 642 select CLKSRC_MMIO 643 select TIMER_OF 644 help 645 This option enables support for gx6605s SOC's timer. 646 647config MILBEAUT_TIMER 648 bool "Milbeaut timer driver" if COMPILE_TEST 649 depends on OF 650 depends on ARM 651 select TIMER_OF 652 select CLKSRC_MMIO 653 help 654 Enables the support for Milbeaut timer driver. 655 656config INGENIC_TIMER 657 bool "Clocksource/timer using the TCU in Ingenic JZ SoCs" 658 default MACH_INGENIC 659 depends on MIPS || COMPILE_TEST 660 depends on COMMON_CLK 661 select MFD_SYSCON 662 select TIMER_OF 663 select IRQ_DOMAIN 664 help 665 Support for the timer/counter unit of the Ingenic JZ SoCs. 666 667config INGENIC_SYSOST 668 bool "Clocksource/timer using the SYSOST in Ingenic X SoCs" 669 depends on MIPS || COMPILE_TEST 670 depends on COMMON_CLK 671 select MFD_SYSCON 672 select TIMER_OF 673 select IRQ_DOMAIN 674 help 675 Support for the SYSOST of the Ingenic X Series SoCs. 676 677config INGENIC_OST 678 bool "Clocksource using the OST in Ingenic JZ SoCs" 679 depends on MIPS || COMPILE_TEST 680 depends on COMMON_CLK 681 select MFD_SYSCON 682 help 683 Support for the Operating System Timer of the Ingenic JZ SoCs. 684 685config MICROCHIP_PIT64B 686 bool "Microchip PIT64B support" 687 depends on OF || COMPILE_TEST 688 select CLKSRC_MMIO 689 select TIMER_OF 690 help 691 This option enables Microchip PIT64B timer for Atmel 692 based system. It supports the oneshot, the periodic 693 modes and high resolution. It is used as a clocksource 694 and a clockevent. 695 696endmenu 697