1*ad1d7d7cSThomas Gleixner // SPDX-License-Identifier: GPL-2.0-only 24f9d6e95SAlessio Igor Bogani /* 34f9d6e95SAlessio Igor Bogani * Routines common to most mpc86xx-based boards. 44f9d6e95SAlessio Igor Bogani */ 54f9d6e95SAlessio Igor Bogani 64f9d6e95SAlessio Igor Bogani #include <linux/of_platform.h> 74f9d6e95SAlessio Igor Bogani #include <asm/synch.h> 84f9d6e95SAlessio Igor Bogani 94f9d6e95SAlessio Igor Bogani #include "mpc86xx.h" 104f9d6e95SAlessio Igor Bogani 114f9d6e95SAlessio Igor Bogani static const struct of_device_id mpc86xx_common_ids[] __initconst = { 124f9d6e95SAlessio Igor Bogani { .type = "soc", }, 134f9d6e95SAlessio Igor Bogani { .compatible = "soc", }, 144f9d6e95SAlessio Igor Bogani { .compatible = "simple-bus", }, 154f9d6e95SAlessio Igor Bogani { .name = "localbus", }, 164f9d6e95SAlessio Igor Bogani { .compatible = "gianfar", }, 174f9d6e95SAlessio Igor Bogani { .compatible = "fsl,mpc8641-pcie", }, 184f9d6e95SAlessio Igor Bogani {}, 194f9d6e95SAlessio Igor Bogani }; 204f9d6e95SAlessio Igor Bogani 214f9d6e95SAlessio Igor Bogani int __init mpc86xx_common_publish_devices(void) 224f9d6e95SAlessio Igor Bogani { 234f9d6e95SAlessio Igor Bogani return of_platform_bus_probe(NULL, mpc86xx_common_ids, NULL); 244f9d6e95SAlessio Igor Bogani } 254f9d6e95SAlessio Igor Bogani 264f9d6e95SAlessio Igor Bogani long __init mpc86xx_time_init(void) 274f9d6e95SAlessio Igor Bogani { 284f9d6e95SAlessio Igor Bogani unsigned int temp; 294f9d6e95SAlessio Igor Bogani 304f9d6e95SAlessio Igor Bogani /* Set the time base to zero */ 314f9d6e95SAlessio Igor Bogani mtspr(SPRN_TBWL, 0); 324f9d6e95SAlessio Igor Bogani mtspr(SPRN_TBWU, 0); 334f9d6e95SAlessio Igor Bogani 344f9d6e95SAlessio Igor Bogani temp = mfspr(SPRN_HID0); 354f9d6e95SAlessio Igor Bogani temp |= HID0_TBEN; 364f9d6e95SAlessio Igor Bogani mtspr(SPRN_HID0, temp); 374f9d6e95SAlessio Igor Bogani isync(); 384f9d6e95SAlessio Igor Bogani 394f9d6e95SAlessio Igor Bogani return 0; 404f9d6e95SAlessio Igor Bogani } 41