aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNicolas Royer <nroyer@baylibre.com>2020-09-27 17:38:46 +0200
committernicola-mazzucato-arm <42373140+nicola-mazzucato-arm@users.noreply.github.com>2020-10-15 17:45:38 +0100
commit0e88b081024ac6b9dc1ef0560521d77ac5d6bec3 (patch)
treee5d1e4c5e7b0af9e7df3d6bf96d7cbb040773191
parent482732a38c153d98d4fd2360fefcae99e745e2f1 (diff)
rcar/module: add rcar mock_pmic module and config data
Change-Id: I5c9e5c41af22725d70bf57fd84b83138b07d61f7 Signed-off-by: Tsutomu Muroya <tsutomu.muroya.jy@bp.renesas.com> Signed-off-by: Nicolas Royer <nroyer@baylibre.com>
-rw-r--r--product/rcar/module/rcar_mock_pmic/include/mod_rcar_mock_pmic.h71
-rw-r--r--product/rcar/module/rcar_mock_pmic/src/Makefile13
-rw-r--r--product/rcar/module/rcar_mock_pmic/src/mod_rcar_mock_pmic_driver_api.c89
-rw-r--r--product/rcar/module/rcar_mock_pmic/src/mod_rcar_mock_pmic_driver_api_private.h28
-rw-r--r--product/rcar/module/rcar_mock_pmic/src/mod_rcar_mock_pmic_module.c83
-rw-r--r--product/rcar/module/rcar_mock_pmic/src/mod_rcar_mock_pmic_module_private.h23
-rw-r--r--product/rcar/module/rcar_mock_pmic/src/mod_rcar_mock_pmic_private.h19
-rw-r--r--product/rcar/scp_ramfw/config_rcar_mock_pmic.c57
8 files changed, 383 insertions, 0 deletions
diff --git a/product/rcar/module/rcar_mock_pmic/include/mod_rcar_mock_pmic.h b/product/rcar/module/rcar_mock_pmic/include/mod_rcar_mock_pmic.h
new file mode 100644
index 00000000..62ef4881
--- /dev/null
+++ b/product/rcar/module/rcar_mock_pmic/include/mod_rcar_mock_pmic.h
@@ -0,0 +1,71 @@
+/*
+ * Renesas SCP/MCP Software
+ * Copyright (c) 2020, Renesas Electronics Corporation. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef MOD_RCAR_MOCK_PMIC_H
+#define MOD_RCAR_MOCK_PMIC_H
+
+#include <fwk_module_idx.h>
+
+#include <stdbool.h>
+#include <stdint.h>
+
+/*!
+ * \ingroup GroupRCARModule
+ * \defgroup GroupRCARMockPmic Mock Power Supply Driver
+ * \{
+ */
+
+/*!
+ * \defgroup GroupRCARMockPmicConfig Configuration
+ * \{
+ */
+
+/*!
+ * \brief Element configuration.
+ */
+struct mod_rcar_mock_pmic_device_config {
+ /*! Default state of the mock device's supply (enabled or disabled) */
+ bool default_enabled;
+
+ /*! Default voltage, in millivolts (mV), of the device's supply */
+ uint64_t default_voltage;
+};
+
+/*!
+ * \}
+ */
+
+/*!
+ * \defgroup GroupRCARMockPmicIds Identifiers
+ * \{
+ */
+
+/*!
+ * \brief API indices.
+ */
+enum mod_rcar_mock_pmic_api_idx {
+ /*! API index for PSU driver API */
+ MOD_RCAR_MOCK_PMIC_API_IDX_PSU_DRIVER,
+
+ /*! Number of defined APIs */
+ MOD_RCAR_MOCK_PMIC_API_COUNT
+};
+
+/*! Driver API identifier */
+static const fwk_id_t mod_rcar_mock_pmic_api_id_psu_driver = FWK_ID_API_INIT(
+ FWK_MODULE_IDX_RCAR_MOCK_PMIC,
+ MOD_RCAR_MOCK_PMIC_API_IDX_PSU_DRIVER);
+
+/*!
+ * \}
+ */
+
+/*!
+ * \}
+ */
+
+#endif /* MOD_RCAR_MOCK_PMIC_H */
diff --git a/product/rcar/module/rcar_mock_pmic/src/Makefile b/product/rcar/module/rcar_mock_pmic/src/Makefile
new file mode 100644
index 00000000..36e5b9ff
--- /dev/null
+++ b/product/rcar/module/rcar_mock_pmic/src/Makefile
@@ -0,0 +1,13 @@
+#
+# Renesas SCP/MCP Software
+# Copyright (c) 2020, Renesas Electronics Corporation. All rights reserved.
+#
+# SPDX-License-Identifier: BSD-3-Clause
+#
+
+BS_LIB_NAME := rcar_mock_pmic
+BS_LIB_SOURCES := \
+ mod_rcar_mock_pmic_module.c \
+ mod_rcar_mock_pmic_driver_api.c
+
+include $(BS_DIR)/lib.mk
diff --git a/product/rcar/module/rcar_mock_pmic/src/mod_rcar_mock_pmic_driver_api.c b/product/rcar/module/rcar_mock_pmic/src/mod_rcar_mock_pmic_driver_api.c
new file mode 100644
index 00000000..e95909e5
--- /dev/null
+++ b/product/rcar/module/rcar_mock_pmic/src/mod_rcar_mock_pmic_driver_api.c
@@ -0,0 +1,89 @@
+/*
+ * Renesas SCP/MCP Software
+ * Copyright (c) 2020, Renesas Electronics Corporation. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include <mod_rcar_mock_pmic_private.h>
+
+#include <fwk_id.h>
+
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+
+static int api_set_enabled(fwk_id_t device_id, bool enable)
+{
+ struct mod_rcar_mock_pmic_device_ctx *ctx;
+
+ ctx = __mod_rcar_mock_pmic_get_valid_device_ctx(device_id);
+ if (ctx == NULL)
+ return FWK_E_PARAM;
+
+ ctx->enabled = enable;
+
+ return FWK_SUCCESS;
+}
+
+static int api_get_enabled(fwk_id_t device_id, bool *enabled)
+{
+ struct mod_rcar_mock_pmic_device_ctx *ctx;
+
+ ctx = __mod_rcar_mock_pmic_get_valid_device_ctx(device_id);
+ if (ctx == NULL)
+ return FWK_E_PARAM;
+
+ *enabled = ctx->enabled;
+
+ return FWK_SUCCESS;
+}
+
+static int api_set_voltage(fwk_id_t device_id, uint64_t voltage)
+{
+ struct mod_rcar_mock_pmic_device_ctx *ctx;
+ uint8_t val;
+
+ ctx = __mod_rcar_mock_pmic_get_valid_device_ctx(device_id);
+ if (ctx == NULL) {
+ return FWK_E_PARAM;
+ }
+
+ if (voltage < BD9571MWV_MIN_MV * 1000 || voltage > BD9571MWV_MAX_MV * 1000)
+ return -1;
+
+ val = DIV_ROUND(voltage, BD9571MWV_STEP_MV * 1000);
+ val &= REG_DATA_DVFS_SetVID_MASK;
+
+#if 0
+ int ret;
+ /* Not supported because I2C used in kernel */
+ ret = rcar_iic_dvfs_send(SLAVE_ADDR_PMIC, REG_ADDR_DVFS_SetVID, val);
+ if (ret) {
+ return ret;
+ }
+#endif
+
+ ctx->voltage = voltage;
+ return FWK_SUCCESS;
+}
+
+static int api_get_voltage(fwk_id_t device_id, uint64_t *voltage)
+{
+ struct mod_rcar_mock_pmic_device_ctx *ctx;
+
+ ctx = __mod_rcar_mock_pmic_get_valid_device_ctx(device_id);
+ if (ctx == NULL)
+ return FWK_E_PARAM;
+
+ *voltage = ctx->voltage;
+
+ return FWK_SUCCESS;
+}
+
+const struct mod_rcar_pmic_driver_api __mod_rcar_mock_pmic_driver_api = {
+ .set_enabled = api_set_enabled,
+ .get_enabled = api_get_enabled,
+ .set_voltage = api_set_voltage,
+ .get_voltage = api_get_voltage,
+};
diff --git a/product/rcar/module/rcar_mock_pmic/src/mod_rcar_mock_pmic_driver_api_private.h b/product/rcar/module/rcar_mock_pmic/src/mod_rcar_mock_pmic_driver_api_private.h
new file mode 100644
index 00000000..5033e389
--- /dev/null
+++ b/product/rcar/module/rcar_mock_pmic/src/mod_rcar_mock_pmic_driver_api_private.h
@@ -0,0 +1,28 @@
+/*
+ * Renesas SCP/MCP Software
+ * Copyright (c) 2020, Renesas Electronics Corporation. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef MOD_RCAR_MOCK_PMIC_DRIVER_API_PRIVATE_H
+#define MOD_RCAR_MOCK_PMIC_DRIVER_API_PRIVATE_H
+
+#include <mod_rcar_pmic.h>
+
+extern const struct mod_rcar_pmic_driver_api __mod_rcar_mock_pmic_driver_api;
+
+/* Default limits measured in millivolts and milliamps */
+#define BD9571MWV_MIN_MV 750
+#define BD9571MWV_MAX_MV 1030
+#define BD9571MWV_STEP_MV 10
+
+/* Define Register */
+#define REG_DATA_DVFS_SetVID_MASK (0x7EU)
+#define REG_ADDR_DVFS_SetVID (0x54U)
+#define SLAVE_ADDR_PMIC (0x30U)
+#define DIV_ROUND(n, d) (((n) + (d) / 2) / (d))
+
+extern int32_t rcar_iic_dvfs_send(uint8_t slave, uint8_t regr, uint8_t data);
+
+#endif /* MOD_RCAR_MOCK_PMIC_DRIVER_API_PRIVATE_H */
diff --git a/product/rcar/module/rcar_mock_pmic/src/mod_rcar_mock_pmic_module.c b/product/rcar/module/rcar_mock_pmic/src/mod_rcar_mock_pmic_module.c
new file mode 100644
index 00000000..bec36621
--- /dev/null
+++ b/product/rcar/module/rcar_mock_pmic/src/mod_rcar_mock_pmic_module.c
@@ -0,0 +1,83 @@
+/*
+ * Renesas SCP/MCP Software
+ * Copyright (c) 2020, Renesas Electronics Corporation. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include <mod_rcar_mock_pmic_private.h>
+
+#include <mod_rcar_mock_pmic.h>
+
+#include <fwk_assert.h>
+#include <fwk_macros.h>
+#include <fwk_mm.h>
+#include <fwk_module.h>
+#include <fwk_module_idx.h>
+
+static struct mod_rcar_mock_pmic_device_ctx (*device_ctx)[];
+
+static struct mod_rcar_mock_pmic_device_ctx *get_device_ctx(fwk_id_t device_id)
+{
+ return &(*device_ctx)[fwk_id_get_element_idx(device_id)];
+}
+
+static int mock_psu_init(
+ fwk_id_t module_id,
+ unsigned int element_count,
+ const void *data)
+{
+ device_ctx = fwk_mm_calloc(element_count, sizeof((*device_ctx)[0]));
+ if (device_ctx == NULL)
+ return FWK_E_NOMEM;
+
+ return FWK_SUCCESS;
+}
+
+static int mock_psu_element_init(
+ fwk_id_t device_id,
+ unsigned int sub_element_count,
+ const void *data)
+{
+ struct mod_rcar_mock_pmic_device_ctx *ctx;
+ const struct mod_rcar_mock_pmic_device_config *config = data;
+
+ assert(sub_element_count == 0);
+
+ ctx = get_device_ctx(device_id);
+ ctx->enabled = config->default_enabled;
+ ctx->voltage = config->default_voltage;
+
+ return FWK_SUCCESS;
+}
+
+static int mock_psu_process_bind_request(
+ fwk_id_t source_id,
+ fwk_id_t target_id,
+ fwk_id_t api_id,
+ const void **api)
+{
+ /* Only accept binds to the elements */
+ if (!fwk_id_is_type(target_id, FWK_ID_TYPE_ELEMENT))
+ return FWK_E_PARAM;
+
+ *api = &__mod_rcar_mock_pmic_driver_api;
+
+ return FWK_SUCCESS;
+}
+
+struct mod_rcar_mock_pmic_device_ctx *__mod_rcar_mock_pmic_get_valid_device_ctx(
+ fwk_id_t device_id)
+{
+ return get_device_ctx(device_id);
+}
+
+/* Module description */
+const struct fwk_module module_rcar_mock_pmic = {
+ .name = "MOCK_PSU",
+ .type = FWK_MODULE_TYPE_DRIVER,
+ .api_count = MOD_RCAR_MOCK_PMIC_API_COUNT,
+ .init = mock_psu_init,
+ .element_init = mock_psu_element_init,
+ .process_bind_request = mock_psu_process_bind_request,
+};
diff --git a/product/rcar/module/rcar_mock_pmic/src/mod_rcar_mock_pmic_module_private.h b/product/rcar/module/rcar_mock_pmic/src/mod_rcar_mock_pmic_module_private.h
new file mode 100644
index 00000000..ebc6d3cf
--- /dev/null
+++ b/product/rcar/module/rcar_mock_pmic/src/mod_rcar_mock_pmic_module_private.h
@@ -0,0 +1,23 @@
+/*
+ * Renesas SCP/MCP Software
+ * Copyright (c) 2020, Renesas Electronics Corporation. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef MOD_RCAR_MOCK_PMIC_MODULE_PRIVATE_H
+#define MOD_RCAR_MOCK_PMIC_MODULE_PRIVATE_H
+
+#include <fwk_id.h>
+
+#include <stdbool.h>
+
+struct mod_rcar_mock_pmic_device_ctx {
+ bool enabled; /* Current enabled state */
+ uint64_t voltage; /* Current voltage (in mV) */
+};
+
+struct mod_rcar_mock_pmic_device_ctx *__mod_rcar_mock_pmic_get_valid_device_ctx(
+ fwk_id_t device_id);
+
+#endif /* MOD_RCAR_MOCK_PMIC_MODULE_PRIVATE_H */
diff --git a/product/rcar/module/rcar_mock_pmic/src/mod_rcar_mock_pmic_private.h b/product/rcar/module/rcar_mock_pmic/src/mod_rcar_mock_pmic_private.h
new file mode 100644
index 00000000..49c982d4
--- /dev/null
+++ b/product/rcar/module/rcar_mock_pmic/src/mod_rcar_mock_pmic_private.h
@@ -0,0 +1,19 @@
+/*
+ * Renesas SCP/MCP Software
+ * Copyright (c) 2020, Renesas Electronics Corporation. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#ifndef MOD_RCAR_MOCK_PMIC_PRIVATE_H
+#define MOD_RCAR_MOCK_PMIC_PRIVATE_H
+
+#include <mod_rcar_mock_pmic_driver_api_private.h>
+#include <mod_rcar_mock_pmic_module_private.h>
+
+#include <mod_rcar_mock_pmic.h>
+
+#include <stdbool.h>
+#include <stdint.h>
+
+#endif /* MOD_RCAR_MOCK_PMIC_PRIVATE_H */
diff --git a/product/rcar/scp_ramfw/config_rcar_mock_pmic.c b/product/rcar/scp_ramfw/config_rcar_mock_pmic.c
new file mode 100644
index 00000000..5fe98881
--- /dev/null
+++ b/product/rcar/scp_ramfw/config_rcar_mock_pmic.c
@@ -0,0 +1,57 @@
+/*
+ * Renesas SCP/MCP Software
+ * Copyright (c) 2020, Renesas Electronics Corporation. All rights reserved.
+ *
+ * SPDX-License-Identifier: BSD-3-Clause
+ */
+
+#include <mod_rcar_mock_pmic.h>
+
+#include <fwk_element.h>
+#include <fwk_module.h>
+
+static const struct fwk_element element_table[] = {
+ {
+ .name = "CPU_GROUP_LITTLE",
+ .data =
+ &(const struct mod_rcar_mock_pmic_device_config){
+ .default_enabled = true,
+ .default_voltage = 820000,
+ },
+ },
+ {
+ .name = "CPU_GROUP_BIG",
+ .data =
+ &(const struct mod_rcar_mock_pmic_device_config){
+ .default_enabled = true,
+ .default_voltage = 830000,
+ },
+ },
+ {
+ .name = "GPU",
+ .data =
+ &(const struct mod_rcar_mock_pmic_device_config){
+ .default_enabled = true,
+ .default_voltage = 100,
+ },
+ },
+ {
+ .name = "VPU",
+ .data =
+ &(const struct mod_rcar_mock_pmic_device_config){
+ .default_enabled = true,
+ .default_voltage = 100,
+ },
+ },
+ { 0 }
+};
+
+static const struct fwk_element *get_element_table(fwk_id_t module_id)
+{
+ return element_table;
+}
+
+struct fwk_module_config config_rcar_mock_pmic = {
+ .elements = FWK_MODULE_DYNAMIC_ELEMENTS(get_element_table),
+ .data = NULL,
+};