1 | // SPDX-License-Identifier: GPL-2.0-only |
---|---|
2 | /* |
3 | * PS3 time and rtc routines. |
4 | * |
5 | * Copyright (C) 2006 Sony Computer Entertainment Inc. |
6 | * Copyright 2006 Sony Corp. |
7 | */ |
8 | |
9 | #include <linux/kernel.h> |
10 | #include <linux/platform_device.h> |
11 | #include <linux/rtc.h> |
12 | |
13 | #include <asm/firmware.h> |
14 | #include <asm/lv1call.h> |
15 | #include <asm/ps3.h> |
16 | |
17 | #include "platform.h" |
18 | |
19 | void __init ps3_calibrate_decr(void) |
20 | { |
21 | int result; |
22 | u64 tmp; |
23 | |
24 | result = ps3_repository_read_be_tb_freq(be_index: 0, tb_freq: &tmp); |
25 | BUG_ON(result); |
26 | |
27 | ppc_tb_freq = tmp; |
28 | ppc_proc_freq = ppc_tb_freq * 40; |
29 | } |
30 | |
31 | static u64 read_rtc(void) |
32 | { |
33 | int result; |
34 | u64 rtc_val; |
35 | u64 tb_val; |
36 | |
37 | result = lv1_get_rtc(&rtc_val, &tb_val); |
38 | BUG_ON(result); |
39 | |
40 | return rtc_val; |
41 | } |
42 | |
43 | time64_t __init ps3_get_boot_time(void) |
44 | { |
45 | return read_rtc() + ps3_os_area_get_rtc_diff(); |
46 | } |
47 | |
48 | static int __init ps3_rtc_init(void) |
49 | { |
50 | struct platform_device *pdev; |
51 | |
52 | if (!firmware_has_feature(FW_FEATURE_PS3_LV1)) |
53 | return -ENODEV; |
54 | |
55 | pdev = platform_device_register_simple(name: "rtc-ps3", id: -1, NULL, num: 0); |
56 | |
57 | return PTR_ERR_OR_ZERO(ptr: pdev); |
58 | } |
59 | device_initcall(ps3_rtc_init); |
60 |