blob: f13f98bd5f6bed3c7c5fa7762c47dd01dd359ebe [file] [log] [blame]
Zheng Bao9db833b2009-12-28 09:59:44 +00001/*
2 * This file is part of the coreboot project.
3 *
4 * Copyright (C) 2000 AG Electronics Ltd.
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
Zheng Bao9db833b2009-12-28 09:59:44 +000015 */
16
Stefan Reinauer24d1d4b2013-03-21 11:51:41 -070017#include <arch/io.h>
Edward O'Callaghanfc4e8552015-01-04 16:05:59 +110018#include <device/pnp.h>
19#include <stdint.h>
arch import user (historical)577f1852005-07-06 17:11:02 +000020#include "pc97317.h"
21
22#define PM_DEV PNP_DEV(0x2e, PC97317_PM)
23#define PM_BASE 0xe8
24
Uwe Hermanna69d9782010-11-15 19:35:14 +000025/* The PC97317 needs clocks to be set up before the serial port will operate. */
Edward O'Callaghanfc4e8552015-01-04 16:05:59 +110026void pc97317_enable_serial(pnp_devfn_t dev, u16 iobase)
arch import user (historical)577f1852005-07-06 17:11:02 +000027{
Uwe Hermanna69d9782010-11-15 19:35:14 +000028 /* Set base address of power management unit. */
arch import user (historical)577f1852005-07-06 17:11:02 +000029 pnp_set_logical_device(PM_DEV);
30 pnp_set_enable(dev, 0);
31 pnp_set_iobase(dev, PNP_IDX_IO0, PM_BASE);
32 pnp_set_enable(dev, 1);
33
Uwe Hermanna69d9782010-11-15 19:35:14 +000034 /* Use on-chip clock multiplier. */
arch import user (historical)577f1852005-07-06 17:11:02 +000035 outb(0x03, PM_BASE);
36 outb(inb(PM_BASE + 1) | 0x07, PM_BASE + 1);
Zheng Bao9db833b2009-12-28 09:59:44 +000037
Uwe Hermanna69d9782010-11-15 19:35:14 +000038 /* Wait for the clock to stabilise. */
Stefan Reinauer30a4a932010-02-15 23:27:48 +000039 while(!(inb(PM_BASE + 1) & 0x80))
arch import user (historical)577f1852005-07-06 17:11:02 +000040 ;
41
Uwe Hermanna69d9782010-11-15 19:35:14 +000042 /* Set the base address of the port. */
arch import user (historical)577f1852005-07-06 17:11:02 +000043 pnp_set_logical_device(dev);
44 pnp_set_enable(dev, 0);
45 pnp_set_iobase(dev, PNP_IDX_IO0, iobase);
46 pnp_set_enable(dev, 1);
47}