1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Intel Merrifield legacy RTC initialization file
4  *
5  * (C) Copyright 2017 Intel Corporation
6  *
7  * Author: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
8  */
9 
10 #include <linux/init.h>
11 
12 #include <asm/hw_irq.h>
13 #include <asm/intel-mid.h>
14 #include <asm/io_apic.h>
15 #include <asm/time.h>
16 #include <asm/x86_init.h>
17 
mrfld_legacy_rtc_alloc_irq(void)18 static int __init mrfld_legacy_rtc_alloc_irq(void)
19 {
20 	struct irq_alloc_info info;
21 	int ret;
22 
23 	if (!x86_platform.legacy.rtc)
24 		return -ENODEV;
25 
26 	ioapic_set_alloc_attr(&info, NUMA_NO_NODE, 1, 0);
27 	ret = mp_map_gsi_to_irq(RTC_IRQ, IOAPIC_MAP_ALLOC, &info);
28 	if (ret < 0) {
29 		pr_info("Failed to allocate RTC interrupt. Disabling RTC\n");
30 		x86_platform.legacy.rtc = 0;
31 		return ret;
32 	}
33 
34 	return 0;
35 }
36 
mrfld_legacy_rtc_init(void)37 static int __init mrfld_legacy_rtc_init(void)
38 {
39 	if (intel_mid_identify_cpu() != INTEL_MID_CPU_CHIP_TANGIER)
40 		return -ENODEV;
41 
42 	return mrfld_legacy_rtc_alloc_irq();
43 }
44 arch_initcall(mrfld_legacy_rtc_init);
45