1210284Sjmallett/***********************license start*************** 2232812Sjmallett * Copyright (c) 2003-2010 Cavium Inc. (support@cavium.com). All rights 3215990Sjmallett * reserved. 4210284Sjmallett * 5210284Sjmallett * 6215990Sjmallett * Redistribution and use in source and binary forms, with or without 7215990Sjmallett * modification, are permitted provided that the following conditions are 8215990Sjmallett * met: 9210284Sjmallett * 10215990Sjmallett * * Redistributions of source code must retain the above copyright 11215990Sjmallett * notice, this list of conditions and the following disclaimer. 12210284Sjmallett * 13215990Sjmallett * * Redistributions in binary form must reproduce the above 14215990Sjmallett * copyright notice, this list of conditions and the following 15215990Sjmallett * disclaimer in the documentation and/or other materials provided 16215990Sjmallett * with the distribution. 17215990Sjmallett 18232812Sjmallett * * Neither the name of Cavium Inc. nor the names of 19215990Sjmallett * its contributors may be used to endorse or promote products 20215990Sjmallett * derived from this software without specific prior written 21215990Sjmallett * permission. 22215990Sjmallett 23215990Sjmallett * This Software, including technical data, may be subject to U.S. export control 24215990Sjmallett * laws, including the U.S. Export Administration Act and its associated 25215990Sjmallett * regulations, and may be subject to export or import regulations in other 26215990Sjmallett * countries. 27215990Sjmallett 28215990Sjmallett * TO THE MAXIMUM EXTENT PERMITTED BY LAW, THE SOFTWARE IS PROVIDED "AS IS" 29232812Sjmallett * AND WITH ALL FAULTS AND CAVIUM INC. MAKES NO PROMISES, REPRESENTATIONS OR 30215990Sjmallett * WARRANTIES, EITHER EXPRESS, IMPLIED, STATUTORY, OR OTHERWISE, WITH RESPECT TO 31215990Sjmallett * THE SOFTWARE, INCLUDING ITS CONDITION, ITS CONFORMITY TO ANY REPRESENTATION OR 32215990Sjmallett * DESCRIPTION, OR THE EXISTENCE OF ANY LATENT OR PATENT DEFECTS, AND CAVIUM 33215990Sjmallett * SPECIFICALLY DISCLAIMS ALL IMPLIED (IF ANY) WARRANTIES OF TITLE, 34215990Sjmallett * MERCHANTABILITY, NONINFRINGEMENT, FITNESS FOR A PARTICULAR PURPOSE, LACK OF 35215990Sjmallett * VIRUSES, ACCURACY OR COMPLETENESS, QUIET ENJOYMENT, QUIET POSSESSION OR 36215990Sjmallett * CORRESPONDENCE TO DESCRIPTION. THE ENTIRE RISK ARISING OUT OF USE OR 37215990Sjmallett * PERFORMANCE OF THE SOFTWARE LIES WITH YOU. 38210284Sjmallett ***********************license end**************************************/ 39210284Sjmallett 40210284Sjmallett 41210284Sjmallett 42210284Sjmallett 43210284Sjmallett 44210284Sjmallett 45215990Sjmallett 46210284Sjmallett/** 47210284Sjmallett * @file 48210284Sjmallett * 49210284Sjmallett * This file provides support for real time clocks on some boards 50210284Sjmallett * 51232812Sjmallett * <hr>$Revision: 70030 $<hr> 52210284Sjmallett * 53210284Sjmallett */ 54210284Sjmallett 55210284Sjmallett 56210284Sjmallett#ifndef __CVMX_RTC_H__ 57210284Sjmallett#define __CVMX_RTC_H__ 58210284Sjmallett 59210284Sjmallett#include "cvmx-sysinfo.h" 60210284Sjmallett#include "cvmx-thunder.h" 61210284Sjmallett#include "cvmx-cn3010-evb-hs5.h" 62210284Sjmallett 63210284Sjmallett/** 64210284Sjmallett * Supported RTC options 65210284Sjmallett */ 66210284Sjmalletttypedef enum 67210284Sjmallett{ 68210284Sjmallett CVMX_RTC_READ = 0x1, /**< Device supports read access */ 69210284Sjmallett CVMX_RTC_WRITE = 0x2, /**< Device supports write access */ 70210284Sjmallett CVMX_RTC_TIME_EPOCH = 0x10, /**< Time stored as seconds from epoch */ 71210284Sjmallett CVMX_RTC_TIME_CAL = 0x20, /**< Time stored as calendar */ 72210284Sjmallett} cvmx_rtc_options_t; 73210284Sjmallett 74210284Sjmallett/** 75210284Sjmallett * Return options supported by the RTC device 76210284Sjmallett * 77210284Sjmallett * @return Supported options, or 0 if RTC is not supported 78210284Sjmallett */ 79210311Sjmallettstatic inline cvmx_rtc_options_t cvmx_rtc_supported(void) 80210284Sjmallett{ 81210284Sjmallett static int supported = -1; 82210284Sjmallett 83210284Sjmallett if (supported < 0) { 84210284Sjmallett switch (cvmx_sysinfo_get()->board_type) 85210284Sjmallett { 86210284Sjmallett case CVMX_BOARD_TYPE_THUNDER: 87210284Sjmallett supported = CVMX_RTC_READ | CVMX_RTC_WRITE | CVMX_RTC_TIME_EPOCH; 88210284Sjmallett break; 89210284Sjmallett 90250434Simp case CVMX_BOARD_TYPE_EBH3000: 91250434Simp case CVMX_BOARD_TYPE_CN3010_EVB_HS5: 92250434Simp case CVMX_BOARD_TYPE_EBH5200: 93210284Sjmallett supported = CVMX_RTC_READ | CVMX_RTC_WRITE | CVMX_RTC_TIME_CAL; 94210284Sjmallett break; 95250434Simp 96250434Simp default: 97250434Simp supported = 0; 98250434Simp break; 99210284Sjmallett } 100210284Sjmallett 101210284Sjmallett#ifdef CVMX_RTC_DEBUG 102210284Sjmallett cvmx_dprintf("Board type: %s, RTC support: 0x%x\n", 103210284Sjmallett cvmx_board_type_to_string(cvmx_sysinfo_get()->board_type), 104210284Sjmallett supported); 105210284Sjmallett#endif 106210284Sjmallett } 107210284Sjmallett 108210284Sjmallett return (cvmx_rtc_options_t) supported; 109210284Sjmallett} 110210284Sjmallett 111210284Sjmallett/** 112210284Sjmallett * Read time from RTC device. 113210284Sjmallett * 114210284Sjmallett * Time is expressed in seconds from epoch (Jan 1 1970 at 00:00:00 UTC) 115210284Sjmallett * 116210284Sjmallett * @return Time in seconds or 0 if RTC is not supported 117210284Sjmallett */ 118210284Sjmallettstatic inline uint32_t cvmx_rtc_read(void) 119210284Sjmallett{ 120210284Sjmallett switch (cvmx_sysinfo_get()->board_type) 121210284Sjmallett { 122210284Sjmallett case CVMX_BOARD_TYPE_THUNDER: 123210284Sjmallett return cvmx_rtc_ds1374_read(); 124210284Sjmallett break; 125210284Sjmallett 126250436Simp default: 127210284Sjmallett return cvmx_rtc_ds1337_read(); 128210284Sjmallett break; 129210284Sjmallett } 130210284Sjmallett} 131210284Sjmallett 132210284Sjmallett/** 133210284Sjmallett * Write time to the RTC device 134210284Sjmallett * 135210284Sjmallett * @param time Number of seconds from epoch (Jan 1 1970 at 00:00:00 UTC) 136210284Sjmallett * 137210284Sjmallett * @return Zero on success or device-specific error on failure. 138210284Sjmallett */ 139210284Sjmallettstatic inline uint32_t cvmx_rtc_write(uint32_t time) 140210284Sjmallett{ 141210284Sjmallett switch (cvmx_sysinfo_get()->board_type) 142210284Sjmallett { 143210284Sjmallett case CVMX_BOARD_TYPE_THUNDER: 144210284Sjmallett return cvmx_rtc_ds1374_write(time); 145210284Sjmallett break; 146210284Sjmallett 147250436Simp default: 148210284Sjmallett return cvmx_rtc_ds1337_write(time); 149210284Sjmallett break; 150210284Sjmallett } 151210284Sjmallett} 152210284Sjmallett 153210284Sjmallett#endif /* __CVMX_RTC_H__ */ 154