.. | .. |
---|
20 | 20 | #include <asm/irq.h> |
---|
21 | 21 | #include <asm/io_apic.h> |
---|
22 | 22 | #include <asm/hpet.h> |
---|
23 | | -#include <asm/pat.h> |
---|
| 23 | +#include <asm/memtype.h> |
---|
24 | 24 | #include <asm/tsc.h> |
---|
25 | 25 | #include <asm/iommu.h> |
---|
26 | 26 | #include <asm/mach_traps.h> |
---|
| 27 | +#include <asm/irqdomain.h> |
---|
27 | 28 | |
---|
28 | 29 | void x86_init_noop(void) { } |
---|
29 | 30 | void __init x86_init_uint_noop(unsigned int unused) { } |
---|
30 | 31 | static int __init iommu_init_noop(void) { return 0; } |
---|
31 | 32 | static void iommu_shutdown_noop(void) { } |
---|
32 | | -static bool __init bool_x86_init_noop(void) { return false; } |
---|
33 | | -static void x86_op_int_noop(int cpu) { } |
---|
34 | | -static u64 u64_x86_init_noop(void) { return 0; } |
---|
| 33 | +bool __init bool_x86_init_noop(void) { return false; } |
---|
| 34 | +void x86_op_int_noop(int cpu) { } |
---|
| 35 | +static int set_rtc_noop(const struct timespec64 *now) { return -EINVAL; } |
---|
| 36 | +static void get_rtc_noop(struct timespec64 *now) { } |
---|
| 37 | + |
---|
| 38 | +static __initconst const struct of_device_id of_cmos_match[] = { |
---|
| 39 | + { .compatible = "motorola,mc146818" }, |
---|
| 40 | + {} |
---|
| 41 | +}; |
---|
| 42 | + |
---|
| 43 | +/* |
---|
| 44 | + * Allow devicetree configured systems to disable the RTC by setting the |
---|
| 45 | + * corresponding DT node's status property to disabled. Code is optimized |
---|
| 46 | + * out for CONFIG_OF=n builds. |
---|
| 47 | + */ |
---|
| 48 | +static __init void x86_wallclock_init(void) |
---|
| 49 | +{ |
---|
| 50 | + struct device_node *node = of_find_matching_node(NULL, of_cmos_match); |
---|
| 51 | + |
---|
| 52 | + if (node && !of_device_is_available(node)) { |
---|
| 53 | + x86_platform.get_wallclock = get_rtc_noop; |
---|
| 54 | + x86_platform.set_wallclock = set_rtc_noop; |
---|
| 55 | + } |
---|
| 56 | +} |
---|
35 | 57 | |
---|
36 | 58 | /* |
---|
37 | 59 | * The platform setup functions are preset with the default functions |
---|
.. | .. |
---|
46 | 68 | }, |
---|
47 | 69 | |
---|
48 | 70 | .mpparse = { |
---|
49 | | - .mpc_record = x86_init_uint_noop, |
---|
50 | 71 | .setup_ioapic_ids = x86_init_noop, |
---|
51 | | - .mpc_apic_id = default_mpc_apic_id, |
---|
52 | | - .smp_read_mpc_oem = default_smp_read_mpc_oem, |
---|
53 | | - .mpc_oem_bus_info = default_mpc_oem_bus_info, |
---|
54 | 72 | .find_smp_config = default_find_smp_config, |
---|
55 | 73 | .get_smp_config = default_get_smp_config, |
---|
56 | 74 | }, |
---|
.. | .. |
---|
58 | 76 | .irqs = { |
---|
59 | 77 | .pre_vector_init = init_ISA_irqs, |
---|
60 | 78 | .intr_init = native_init_IRQ, |
---|
61 | | - .trap_init = x86_init_noop, |
---|
62 | | - .intr_mode_init = apic_intr_mode_init |
---|
| 79 | + .intr_mode_select = apic_intr_mode_select, |
---|
| 80 | + .intr_mode_init = apic_intr_mode_init, |
---|
| 81 | + .create_pci_msi_domain = native_create_pci_msi_domain, |
---|
63 | 82 | }, |
---|
64 | 83 | |
---|
65 | 84 | .oem = { |
---|
.. | .. |
---|
74 | 93 | .timers = { |
---|
75 | 94 | .setup_percpu_clockev = setup_boot_APIC_clock, |
---|
76 | 95 | .timer_init = hpet_time_init, |
---|
77 | | - .wallclock_init = x86_init_noop, |
---|
| 96 | + .wallclock_init = x86_wallclock_init, |
---|
78 | 97 | }, |
---|
79 | 98 | |
---|
80 | 99 | .iommu = { |
---|
.. | .. |
---|
96 | 115 | }, |
---|
97 | 116 | |
---|
98 | 117 | .acpi = { |
---|
99 | | - .get_root_pointer = u64_x86_init_noop, |
---|
| 118 | + .set_root_pointer = x86_default_set_root_pointer, |
---|
| 119 | + .get_root_pointer = x86_default_get_root_pointer, |
---|
100 | 120 | .reduced_hw_early_init = acpi_generic_reduced_hw_init, |
---|
101 | 121 | }, |
---|
102 | 122 | }; |
---|
.. | .. |
---|
126 | 146 | |
---|
127 | 147 | #if defined(CONFIG_PCI_MSI) |
---|
128 | 148 | struct x86_msi_ops x86_msi __ro_after_init = { |
---|
129 | | - .setup_msi_irqs = native_setup_msi_irqs, |
---|
130 | | - .teardown_msi_irq = native_teardown_msi_irq, |
---|
131 | | - .teardown_msi_irqs = default_teardown_msi_irqs, |
---|
132 | 149 | .restore_msi_irqs = default_restore_msi_irqs, |
---|
133 | 150 | }; |
---|
134 | 151 | |
---|
135 | 152 | /* MSI arch specific hooks */ |
---|
136 | | -int arch_setup_msi_irqs(struct pci_dev *dev, int nvec, int type) |
---|
137 | | -{ |
---|
138 | | - return x86_msi.setup_msi_irqs(dev, nvec, type); |
---|
139 | | -} |
---|
140 | | - |
---|
141 | | -void arch_teardown_msi_irqs(struct pci_dev *dev) |
---|
142 | | -{ |
---|
143 | | - x86_msi.teardown_msi_irqs(dev); |
---|
144 | | -} |
---|
145 | | - |
---|
146 | | -void arch_teardown_msi_irq(unsigned int irq) |
---|
147 | | -{ |
---|
148 | | - x86_msi.teardown_msi_irq(irq); |
---|
149 | | -} |
---|
150 | | - |
---|
151 | 153 | void arch_restore_msi_irqs(struct pci_dev *dev) |
---|
152 | 154 | { |
---|
153 | 155 | x86_msi.restore_msi_irqs(dev); |
---|