summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHolmes Chou <holmeschou@google.com>2023-03-22 05:05:58 +0000
committerHolmes Chou <holmeschou@google.com>2023-04-14 13:32:24 +0000
commitff2dd0ff9b8c6a9995a832dedcd8ccf111d5b672 (patch)
tree4ab9051c199487bf64d52f711390d84fadd8501c
parentc3eb56d948ff0f46c8ad23ff7471aa6740906c4d (diff)
downloadlwis-ff2dd0ff9b8c6a9995a832dedcd8ccf111d5b672.tar.gz
LWIS: Remove partial bts block name enable flag
Remove partial bts block name enable flag to let internal use the same implementation Bug: 272148737 Test: GCA, CTS Change-Id: I8615f56b178469a3e3953b9be3c76b8a62da7ac7 Signed-off-by: Holmes Chou <holmeschou@google.com>
-rw-r--r--lwis_device.c5
-rw-r--r--lwis_device.h5
-rw-r--r--lwis_dt.c2
-rw-r--r--platform/anchorage/lwis_platform_anchorage.c55
-rw-r--r--platform/busan/lwis_platform_busan.c52
5 files changed, 77 insertions, 42 deletions
diff --git a/lwis_device.c b/lwis_device.c
index dde9834..e88eda2 100644
--- a/lwis_device.c
+++ b/lwis_device.c
@@ -260,7 +260,6 @@ static int lwis_release(struct inode *node, struct file *fp)
}
if (lwis_dev->enabled == 0) {
-#ifdef LWIS_BTS_BLOCK_NAME_ENABLED
for (i = 0; i < lwis_dev->bts_block_num; i++) {
if (lwis_dev->bts_indexes[i] != BTS_UNSUPPORTED) {
lwis_platform_update_bts(lwis_dev, i, /*bw_peak=*/0,
@@ -268,10 +267,6 @@ static int lwis_release(struct inode *node, struct file *fp)
/*bw_rt=*/0);
}
}
-#else
- lwis_platform_update_bts(lwis_dev, 0, /*bw_peak=*/0,
- /*bw_read=*/0, /*bw_write=*/0, /*bw_rt=*/0);
-#endif
/* remove voted qos */
lwis_platform_remove_qos(lwis_dev);
/* Release device event states if no more client is using */
diff --git a/lwis_device.h b/lwis_device.h
index 62cb199..393409f 100644
--- a/lwis_device.h
+++ b/lwis_device.h
@@ -254,17 +254,12 @@ struct lwis_device {
/* clock family this device belongs to */
int clock_family;
-#ifdef LWIS_BTS_BLOCK_NAME_ENABLED
/* number of BTS blocks */
int bts_block_num;
/* BTS block names*/
const char *bts_block_names[MAX_BTS_BLOCK_NUM];
/* indexes to bandwidth traffic shaper */
int bts_indexes[MAX_BTS_BLOCK_NUM];
-#else
- /* index to bandwidth traffic shaper */
- int bts_index;
-#endif
/* BTS scenario name */
const char *bts_scenario_name;
/* BTS scenario index */
diff --git a/lwis_dt.c b/lwis_dt.c
index 7dc09f3..85397e8 100644
--- a/lwis_dt.c
+++ b/lwis_dt.c
@@ -333,7 +333,6 @@ static int parse_clocks(struct lwis_device *lwis_dev)
ret = of_property_read_u32(dev_node, "clock-family", &clock_family);
lwis_dev->clock_family = (ret == 0) ? clock_family : CLOCK_FAMILY_INVALID;
-#ifdef LWIS_BTS_BLOCK_NAME_ENABLED
/* Parse the BTS block names */
bts_count = of_property_count_strings(dev_node, "bts-block-names");
if (bts_count > 0) {
@@ -351,7 +350,6 @@ static int parse_clocks(struct lwis_device *lwis_dev)
for (i = 0; i < MAX_BTS_BLOCK_NUM; ++i) {
lwis_dev->bts_indexes[i] = BTS_UNSUPPORTED;
}
-#endif
#ifdef LWIS_DT_DEBUG
pr_info("%s: clock family %d", lwis_dev->name, lwis_dev->clock_family);
diff --git a/platform/anchorage/lwis_platform_anchorage.c b/platform/anchorage/lwis_platform_anchorage.c
index c01b8c6..36fc0ba 100644
--- a/platform/anchorage/lwis_platform_anchorage.c
+++ b/platform/anchorage/lwis_platform_anchorage.c
@@ -27,6 +27,7 @@
int lwis_platform_probe(struct lwis_device *lwis_dev)
{
struct lwis_platform *platform;
+ int i;
if (!lwis_dev) {
return -ENODEV;
@@ -41,16 +42,19 @@ int lwis_platform_probe(struct lwis_device *lwis_dev)
/* Enable runtime power management for the platform device */
pm_runtime_enable(&lwis_dev->plat_dev->dev);
- lwis_dev->bts_index = BTS_UNSUPPORTED;
/* Only IOREG devices will access DMA resources */
if (lwis_dev->type != DEVICE_TYPE_IOREG) {
return 0;
}
+
/* Register to bts */
- lwis_dev->bts_index = bts_get_bwindex(lwis_dev->name);
- if (lwis_dev->bts_index < 0) {
- dev_err(lwis_dev->dev, "Failed to register to BTS, ret: %d\n", lwis_dev->bts_index);
- lwis_dev->bts_index = BTS_UNSUPPORTED;
+ for (i = 0; i < lwis_dev->bts_block_num; i++) {
+ lwis_dev->bts_indexes[i] = bts_get_bwindex(lwis_dev->bts_block_names[i]);
+ if (lwis_dev->bts_indexes[i] < 0) {
+ dev_err(lwis_dev->dev, "Failed to register to BTS, ret: %d\n",
+ lwis_dev->bts_indexes[i]);
+ lwis_dev->bts_indexes[i] = BTS_UNSUPPORTED;
+ }
}
return 0;
@@ -100,6 +104,18 @@ static int lwis_iommu_fault_handler(struct iommu_fault *fault, void *param)
#endif /* ENABLE_PAGE_FAULT_PANIC */
}
+static bool lwis_device_support_bts(struct lwis_device *lwis_dev)
+{
+ int i;
+
+ for (i = 0; i < lwis_dev->bts_block_num; i++) {
+ if (lwis_dev->bts_indexes[i] != BTS_UNSUPPORTED) {
+ return true;
+ }
+ }
+ return false;
+}
+
int lwis_platform_device_enable(struct lwis_device *lwis_dev)
{
int ret;
@@ -165,7 +181,7 @@ int lwis_platform_device_enable(struct lwis_device *lwis_dev)
}
}
- if (lwis_dev->bts_scenario_name) {
+ if (lwis_device_support_bts(lwis_dev) && lwis_dev->bts_scenario_name) {
lwis_dev->bts_scenario = bts_get_scenindex(lwis_dev->bts_scenario_name);
if (!lwis_dev->bts_scenario) {
dev_err(lwis_dev->dev, "Failed to get default camera BTS scenario.\n");
@@ -190,7 +206,7 @@ int lwis_platform_device_disable(struct lwis_device *lwis_dev)
return -ENODEV;
}
- if (lwis_dev->bts_scenario_name) {
+ if (lwis_device_support_bts(lwis_dev) && lwis_dev->bts_scenario_name) {
bts_del_scenario(lwis_dev->bts_scenario);
}
@@ -209,8 +225,7 @@ int lwis_platform_device_disable(struct lwis_device *lwis_dev)
return pm_runtime_put_sync(&lwis_dev->plat_dev->dev);
}
-int lwis_platform_update_qos(struct lwis_device *lwis_dev, int value,
- int32_t clock_family)
+int lwis_platform_update_qos(struct lwis_device *lwis_dev, int value, int32_t clock_family)
{
struct lwis_platform *platform;
struct exynos_pm_qos_request *qos_req;
@@ -309,26 +324,34 @@ int lwis_platform_update_bts(struct lwis_device *lwis_dev, int block, unsigned i
unsigned int bw_kb_read, unsigned int bw_kb_write,
unsigned int bw_kb_rt)
{
- int ret = 0;
+ int ret = 0, bts_index = lwis_dev->bts_indexes[block];
+ const char *block_name = lwis_dev->bts_block_names[block];
struct bts_bw bts_request;
- if (lwis_dev->bts_index == BTS_UNSUPPORTED) {
- dev_info(lwis_dev->dev, "%s doesn't support bts\n", lwis_dev->name);
- return ret;
+ if (block >= lwis_dev->bts_block_num) {
+ dev_err(lwis_dev->dev, "Invalid block index %d, %s only has %d bts blocks\n", block,
+ lwis_dev->name, lwis_dev->bts_block_num);
+ return -EINVAL;
+ }
+
+ if (bts_index == BTS_UNSUPPORTED) {
+ dev_err(lwis_dev->dev, "%s block %s doesn't support bts\n", lwis_dev->name,
+ block_name);
+ return -EINVAL;
}
bts_request.peak = bw_kb_peak;
bts_request.read = bw_kb_read;
bts_request.write = bw_kb_write;
bts_request.rt = bw_kb_rt;
- ret = bts_update_bw(lwis_dev->bts_index, bts_request);
+ ret = bts_update_bw(bts_index, bts_request);
if (ret < 0) {
dev_err(lwis_dev->dev, "Failed to update bandwidth to bts, ret: %d\n", ret);
} else {
dev_info(
lwis_dev->dev,
- "Updated bandwidth to bts for device %s: peak: %u, read: %u, write: %u, rt: %u\n",
- lwis_dev->name, bw_kb_peak, bw_kb_read, bw_kb_write, bw_kb_rt);
+ "Updated bandwidth to bts for device %s block %s: peak: %u, read: %u, write: %u, rt: %u\n",
+ lwis_dev->name, block_name, bw_kb_peak, bw_kb_read, bw_kb_write, bw_kb_rt);
}
return ret;
}
diff --git a/platform/busan/lwis_platform_busan.c b/platform/busan/lwis_platform_busan.c
index 2dd543f..19588a9 100644
--- a/platform/busan/lwis_platform_busan.c
+++ b/platform/busan/lwis_platform_busan.c
@@ -24,6 +24,7 @@
int lwis_platform_probe(struct lwis_device *lwis_dev)
{
struct lwis_platform *platform;
+ int i;
if (!lwis_dev) {
return -ENODEV;
@@ -38,16 +39,19 @@ int lwis_platform_probe(struct lwis_device *lwis_dev)
/* Enable runtime power management for the platform device */
pm_runtime_enable(&lwis_dev->plat_dev->dev);
- lwis_dev->bts_index = BTS_UNSUPPORTED;
/* Only IOREG devices will access DMA resources */
if (lwis_dev->type != DEVICE_TYPE_IOREG) {
return 0;
}
+
/* Register to bts */
- lwis_dev->bts_index = bts_get_bwindex(lwis_dev->name);
- if (lwis_dev->bts_index < 0) {
- dev_err(lwis_dev->dev, "Failed to register to BTS, ret: %d\n", lwis_dev->bts_index);
- lwis_dev->bts_index = BTS_UNSUPPORTED;
+ for (i = 0; i < lwis_dev->bts_block_num; i++) {
+ lwis_dev->bts_indexes[i] = bts_get_bwindex(lwis_dev->bts_block_names[i]);
+ if (lwis_dev->bts_indexes[i] < 0) {
+ dev_err(lwis_dev->dev, "Failed to register to BTS, ret: %d\n",
+ lwis_dev->bts_indexes[i]);
+ lwis_dev->bts_indexes[i] = BTS_UNSUPPORTED;
+ }
}
return 0;
@@ -97,6 +101,18 @@ static int lwis_iommu_fault_handler(struct iommu_fault *fault, void *param)
#endif /* ENABLE_PAGE_FAULT_PANIC */
}
+static bool lwis_device_support_bts(struct lwis_device *lwis_dev)
+{
+ int i;
+
+ for (i = 0; i < lwis_dev->bts_block_num; i++) {
+ if (lwis_dev->bts_indexes[i] != BTS_UNSUPPORTED) {
+ return true;
+ }
+ }
+ return false;
+}
+
int lwis_platform_device_enable(struct lwis_device *lwis_dev)
{
int ret;
@@ -151,7 +167,7 @@ int lwis_platform_device_enable(struct lwis_device *lwis_dev)
}
}
- if (lwis_dev->bts_index != BTS_UNSUPPORTED && lwis_dev->bts_scenario_name) {
+ if (lwis_device_support_bts(lwis_dev) && lwis_dev->bts_scenario_name) {
lwis_dev->bts_scenario = bts_get_scenindex(lwis_dev->bts_scenario_name);
if (!lwis_dev->bts_scenario) {
dev_err(lwis_dev->dev, "Failed to get default camera BTS scenario.\n");
@@ -176,7 +192,7 @@ int lwis_platform_device_disable(struct lwis_device *lwis_dev)
return -ENODEV;
}
- if (lwis_dev->bts_index != BTS_UNSUPPORTED && lwis_dev->bts_scenario_name) {
+ if (lwis_device_support_bts(lwis_dev) && lwis_dev->bts_scenario_name) {
bts_del_scenario(lwis_dev->bts_scenario);
}
@@ -285,26 +301,34 @@ int lwis_platform_update_bts(struct lwis_device *lwis_dev, int block, unsigned i
unsigned int bw_kb_read, unsigned int bw_kb_write,
unsigned int bw_kb_rt)
{
- int ret = 0;
+ int ret = 0, bts_index = lwis_dev->bts_indexes[block];
+ const char *block_name = lwis_dev->bts_block_names[block];
struct bts_bw bts_request;
- if (lwis_dev->bts_index == BTS_UNSUPPORTED) {
- dev_info(lwis_dev->dev, "%s doesn't support bts\n", lwis_dev->name);
- return ret;
+ if (block >= lwis_dev->bts_block_num) {
+ dev_err(lwis_dev->dev, "Invalid block index %d, %s only has %d bts blocks\n", block,
+ lwis_dev->name, lwis_dev->bts_block_num);
+ return -EINVAL;
+ }
+
+ if (bts_index == BTS_UNSUPPORTED) {
+ dev_err(lwis_dev->dev, "%s block %s doesn't support bts\n", lwis_dev->name,
+ block_name);
+ return -EINVAL;
}
bts_request.peak = bw_kb_peak;
bts_request.read = bw_kb_read;
bts_request.write = bw_kb_write;
bts_request.rt = bw_kb_rt;
- ret = bts_update_bw(lwis_dev->bts_index, bts_request);
+ ret = bts_update_bw(bts_index, bts_request);
if (ret < 0) {
dev_err(lwis_dev->dev, "Failed to update bandwidth to bts, ret: %d\n", ret);
} else {
dev_info(
lwis_dev->dev,
- "Updated bandwidth to bts for device %s: peak: %u, read: %u, write: %u, rt: %u\n",
- lwis_dev->name, bw_kb_peak, bw_kb_read, bw_kb_write, bw_kb_rt);
+ "Updated bandwidth to bts for device %s block %s: peak: %u, read: %u, write: %u, rt: %u\n",
+ lwis_dev->name, block_name, bw_kb_peak, bw_kb_read, bw_kb_write, bw_kb_rt);
}
return ret;
}