162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Routines common to most mpc86xx-based boards. 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#include <linux/init.h> 762306a36Sopenharmony_ci#include <linux/mod_devicetable.h> 862306a36Sopenharmony_ci#include <linux/of_platform.h> 962306a36Sopenharmony_ci#include <asm/reg.h> 1062306a36Sopenharmony_ci#include <asm/synch.h> 1162306a36Sopenharmony_ci 1262306a36Sopenharmony_ci#include "mpc86xx.h" 1362306a36Sopenharmony_ci 1462306a36Sopenharmony_cistatic const struct of_device_id mpc86xx_common_ids[] __initconst = { 1562306a36Sopenharmony_ci { .type = "soc", }, 1662306a36Sopenharmony_ci { .compatible = "soc", }, 1762306a36Sopenharmony_ci { .compatible = "simple-bus", }, 1862306a36Sopenharmony_ci { .name = "localbus", }, 1962306a36Sopenharmony_ci { .compatible = "gianfar", }, 2062306a36Sopenharmony_ci { .compatible = "fsl,mpc8641-pcie", }, 2162306a36Sopenharmony_ci {}, 2262306a36Sopenharmony_ci}; 2362306a36Sopenharmony_ci 2462306a36Sopenharmony_ciint __init mpc86xx_common_publish_devices(void) 2562306a36Sopenharmony_ci{ 2662306a36Sopenharmony_ci return of_platform_bus_probe(NULL, mpc86xx_common_ids, NULL); 2762306a36Sopenharmony_ci} 2862306a36Sopenharmony_ci 2962306a36Sopenharmony_cilong __init mpc86xx_time_init(void) 3062306a36Sopenharmony_ci{ 3162306a36Sopenharmony_ci unsigned int temp; 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci /* Set the time base to zero */ 3462306a36Sopenharmony_ci mtspr(SPRN_TBWL, 0); 3562306a36Sopenharmony_ci mtspr(SPRN_TBWU, 0); 3662306a36Sopenharmony_ci 3762306a36Sopenharmony_ci temp = mfspr(SPRN_HID0); 3862306a36Sopenharmony_ci temp |= HID0_TBEN; 3962306a36Sopenharmony_ci mtspr(SPRN_HID0, temp); 4062306a36Sopenharmony_ci isync(); 4162306a36Sopenharmony_ci 4262306a36Sopenharmony_ci return 0; 4362306a36Sopenharmony_ci} 44