xref: /linux/lib/raid/xor/alpha/xor_arch.h (revision 440d6635b20037bc9ad46b20817d7b61cef0fc1b)
1*e20043b4SChristoph Hellwig /* SPDX-License-Identifier: GPL-2.0-or-later */
2*e20043b4SChristoph Hellwig 
3*e20043b4SChristoph Hellwig #include <asm/special_insns.h>
4*e20043b4SChristoph Hellwig 
5*e20043b4SChristoph Hellwig extern struct xor_block_template xor_block_alpha;
6*e20043b4SChristoph Hellwig extern struct xor_block_template xor_block_alpha_prefetch;
7*e20043b4SChristoph Hellwig 
8*e20043b4SChristoph Hellwig /*
9*e20043b4SChristoph Hellwig  * Force the use of alpha_prefetch if EV6, as it is significantly faster in the
10*e20043b4SChristoph Hellwig  * cold cache case.
11*e20043b4SChristoph Hellwig  */
12*e20043b4SChristoph Hellwig static __always_inline void __init arch_xor_init(void)
13*e20043b4SChristoph Hellwig {
14*e20043b4SChristoph Hellwig 	if (implver() == IMPLVER_EV6) {
15*e20043b4SChristoph Hellwig 		xor_force(&xor_block_alpha_prefetch);
16*e20043b4SChristoph Hellwig 	} else {
17*e20043b4SChristoph Hellwig 		xor_register(&xor_block_8regs);
18*e20043b4SChristoph Hellwig 		xor_register(&xor_block_32regs);
19*e20043b4SChristoph Hellwig 		xor_register(&xor_block_alpha);
20*e20043b4SChristoph Hellwig 		xor_register(&xor_block_alpha_prefetch);
21*e20043b4SChristoph Hellwig 	}
22*e20043b4SChristoph Hellwig }
23