Browse Source
Add thermal driver for A8K SoC family. The termal unit data is used by Marvell DRAM initialization code for optimizing the memory controller configuration Change-Id: Iad92689fa6e4224a89d872e9aa015393abd9cf73 Signed-off-by: Hanna Hawa <hannah@marvell.com> Signed-off-by: Konstantin Porotchkin <kostap@marvell.com>pull/1450/head
Konstantin Porotchkin
7 years ago
2 changed files with 85 additions and 0 deletions
@ -0,0 +1,54 @@ |
|||
/*
|
|||
* Copyright (C) 2018 Marvell International Ltd. |
|||
* |
|||
* SPDX-License-Identifier: BSD-3-Clause |
|||
* https://spdx.org/licenses
|
|||
*/ |
|||
|
|||
/* Driver for thermal unit located in Marvell ARMADA 8K and compatible SoCs */ |
|||
|
|||
#include <debug.h> |
|||
#include <thermal.h> |
|||
|
|||
int marvell_thermal_init(struct tsen_config *tsen_cfg) |
|||
{ |
|||
if (tsen_cfg->tsen_ready == 1) { |
|||
INFO("thermal sensor is already initialized\n"); |
|||
return 0; |
|||
} |
|||
|
|||
if (tsen_cfg->ptr_tsen_probe == NULL) { |
|||
ERROR("initial thermal sensor configuration is missing\n"); |
|||
return -1; |
|||
} |
|||
|
|||
if (tsen_cfg->ptr_tsen_probe(tsen_cfg)) { |
|||
ERROR("thermal sensor initialization failed\n"); |
|||
return -1; |
|||
} |
|||
|
|||
VERBOSE("thermal sensor was initialized\n"); |
|||
|
|||
return 0; |
|||
} |
|||
|
|||
int marvell_thermal_read(struct tsen_config *tsen_cfg, int *temp) |
|||
{ |
|||
if (temp == NULL) { |
|||
ERROR("NULL pointer for temperature read\n"); |
|||
return -1; |
|||
} |
|||
|
|||
if (tsen_cfg->ptr_tsen_read == NULL || |
|||
tsen_cfg->tsen_ready == 0) { |
|||
ERROR("thermal sensor was not initialized\n"); |
|||
return -1; |
|||
} |
|||
|
|||
if (tsen_cfg->ptr_tsen_read(tsen_cfg, temp)) { |
|||
ERROR("temperature read failed\n"); |
|||
return -1; |
|||
} |
|||
|
|||
return 0; |
|||
} |
@ -0,0 +1,31 @@ |
|||
/*
|
|||
* Copyright (C) 2018 Marvell International Ltd. |
|||
* |
|||
* SPDX-License-Identifier: BSD-3-Clause |
|||
* https://spdx.org/licenses
|
|||
*/ |
|||
|
|||
/* Driver for thermal unit located in Marvell ARMADA 8K and compatible SoCs */ |
|||
|
|||
#ifndef _THERMAL_H |
|||
#define _THERMAL_H |
|||
|
|||
struct tsen_config { |
|||
/* thermal temperature parameters */ |
|||
int tsen_offset; |
|||
int tsen_gain; |
|||
int tsen_divisor; |
|||
/* thermal data */ |
|||
int tsen_ready; |
|||
void *regs_base; |
|||
/* thermal functionality */ |
|||
int (*ptr_tsen_probe)(struct tsen_config *cfg); |
|||
int (*ptr_tsen_read)(struct tsen_config *cfg, int *temp); |
|||
}; |
|||
|
|||
/* Thermal driver APIs */ |
|||
int marvell_thermal_init(struct tsen_config *tsen_cfg); |
|||
int marvell_thermal_read(struct tsen_config *tsen_cfg, int *temp); |
|||
struct tsen_config *marvell_thermal_config_get(void); |
|||
|
|||
#endif /* _THERMAL_H */ |
Loading…
Reference in new issue