diff options
author | Holmes Chou <holmeschou@google.com> | 2023-03-22 05:05:58 +0000 |
---|---|---|
committer | Holmes Chou <holmeschou@google.com> | 2023-04-14 13:32:24 +0000 |
commit | ff2dd0ff9b8c6a9995a832dedcd8ccf111d5b672 (patch) | |
tree | 4ab9051c199487bf64d52f711390d84fadd8501c | |
parent | c3eb56d948ff0f46c8ad23ff7471aa6740906c4d (diff) | |
download | lwis-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.c | 5 | ||||
-rw-r--r-- | lwis_device.h | 5 | ||||
-rw-r--r-- | lwis_dt.c | 2 | ||||
-rw-r--r-- | platform/anchorage/lwis_platform_anchorage.c | 55 | ||||
-rw-r--r-- | platform/busan/lwis_platform_busan.c | 52 |
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 */ @@ -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; } |