blob: 052b01f5d935ac44b310362e7b6f90e921529687 [file] [log] [blame]
Greg Kroah-Hartmanb2441312017-11-01 15:07:57 +01001// SPDX-License-Identifier: GPL-2.0
Linus Torvalds1da177e2005-04-16 15:20:36 -07002/*
3 * Reset a Jazz machine.
4 *
5 * We don't trust the firmware so we do it the classic way by poking and
6 * stabbing at the keyboard controller ...
7 */
8#include <linux/jiffies.h>
9#include <asm/jazz.h>
Linus Torvalds1da177e2005-04-16 15:20:36 -070010
11#define KBD_STAT_IBF 0x02 /* Keyboard input buffer full */
12
13static void jazz_write_output(unsigned char val)
14{
15 int status;
16
17 do {
18 status = jazz_kh->command;
19 } while (status & KBD_STAT_IBF);
20 jazz_kh->data = val;
21}
22
23static void jazz_write_command(unsigned char val)
24{
25 int status;
26
27 do {
28 status = jazz_kh->command;
29 } while (status & KBD_STAT_IBF);
30 jazz_kh->command = val;
31}
32
33static unsigned char jazz_read_status(void)
34{
35 return jazz_kh->command;
36}
37
38static inline void kb_wait(void)
39{
40 unsigned long start = jiffies;
41 unsigned long timeout = start + HZ/2;
42
43 do {
44 if (! (jazz_read_status() & 0x02))
45 return;
46 } while (time_before_eq(jiffies, timeout));
47}
48
49void jazz_machine_restart(char *command)
50{
51 while(1) {
52 kb_wait();
Ralf Baechle49a89ef2007-10-11 23:46:15 +010053 jazz_write_command(0xd1);
Linus Torvalds1da177e2005-04-16 15:20:36 -070054 kb_wait();
Ralf Baechle49a89ef2007-10-11 23:46:15 +010055 jazz_write_output(0x00);
Linus Torvalds1da177e2005-04-16 15:20:36 -070056 }
57}