cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

csrc-bcm1480.c (1198B)


      1// SPDX-License-Identifier: GPL-2.0-or-later
      2/*
      3 * Copyright (C) 2000,2001,2004 Broadcom Corporation
      4 */
      5#include <linux/clocksource.h>
      6#include <linux/sched_clock.h>
      7
      8#include <asm/addrspace.h>
      9#include <asm/io.h>
     10#include <asm/time.h>
     11
     12#include <asm/sibyte/bcm1480_regs.h>
     13#include <asm/sibyte/sb1250_regs.h>
     14#include <asm/sibyte/bcm1480_int.h>
     15#include <asm/sibyte/bcm1480_scd.h>
     16
     17#include <asm/sibyte/sb1250.h>
     18
     19static u64 bcm1480_hpt_read(struct clocksource *cs)
     20{
     21	return (u64) __raw_readq(IOADDR(A_SCD_ZBBUS_CYCLE_COUNT));
     22}
     23
     24struct clocksource bcm1480_clocksource = {
     25	.name	= "zbbus-cycles",
     26	.rating = 200,
     27	.read	= bcm1480_hpt_read,
     28	.mask	= CLOCKSOURCE_MASK(64),
     29	.flags	= CLOCK_SOURCE_IS_CONTINUOUS,
     30};
     31
     32static u64 notrace sb1480_read_sched_clock(void)
     33{
     34	return __raw_readq(IOADDR(A_SCD_ZBBUS_CYCLE_COUNT));
     35}
     36
     37void __init sb1480_clocksource_init(void)
     38{
     39	struct clocksource *cs = &bcm1480_clocksource;
     40	unsigned int plldiv;
     41	unsigned long zbbus;
     42
     43	plldiv = G_BCM1480_SYS_PLL_DIV(__raw_readq(IOADDR(A_SCD_SYSTEM_CFG)));
     44	zbbus = ((plldiv >> 1) * 50000000) + ((plldiv & 1) * 25000000);
     45	clocksource_register_hz(cs, zbbus);
     46
     47	sched_clock_register(sb1480_read_sched_clock, 64, zbbus);
     48}