From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: From: Krzysztof Kozlowski To: Kukjin Kim , Krzysztof Kozlowski , Rob Herring , Mark Rutland , Tejun Heo , Sylwester Nawrocki , Tomasz Figa , Chanwoo Choi , Michael Turquette , Stephen Boyd , "Rafael J. Wysocki" , Viresh Kumar , Zhang Rui , Eduardo Valentin , Russell King , Hans de Goede , Linus Walleij , Andi Shyti , Mark Brown , Bartlomiej Zolnierkiewicz , Alan Stern , Greg Kroah-Hartman , linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-ide@vger.kernel.org, linux-clk@vger.kernel.org, linux-pm@vger.kernel.org, linux-i2c@vger.kernel.org, linux-gpio@vger.kernel.org, linux-spi@vger.kernel.org, linux-usb@vger.kernel.org Cc: Marek Szyprowski , Arnd Bergmann , Olof Johansson , Jaehoon Chung Subject: [RFC 06/10] thermal: samsung: Remove support for Exynos5440 Date: Tue, 24 Apr 2018 22:32:35 +0200 Message-Id: <20180424203239.21885-7-krzk@kernel.org> In-Reply-To: <20180424203239.21885-1-krzk@kernel.org> References: <20180424203239.21885-1-krzk@kernel.org> List-ID: The Exynos5440 is not actively developed, there are no development boards available and probably there are no real products with it. Remove wide-tree support for Exynos5440. Signed-off-by: Krzysztof Kozlowski --- .../devicetree/bindings/thermal/exynos-thermal.txt | 14 +- drivers/thermal/samsung/exynos_tmu.c | 155 +-------------------- drivers/thermal/samsung/exynos_tmu.h | 1 - 3 files changed, 4 insertions(+), 166 deletions(-) diff --git a/Documentation/devicetree/bindings/thermal/exynos-thermal.txt b/Documentation/devicetree/bindings/thermal/exynos-thermal.txt index b957acff57aa..ad648d93d961 100644 --- a/Documentation/devicetree/bindings/thermal/exynos-thermal.txt +++ b/Documentation/devicetree/bindings/thermal/exynos-thermal.txt @@ -12,7 +12,6 @@ "samsung,exynos5420-tmu-ext-triminfo" for TMU channels 2, 3 and 4 Exynos5420 (Must pass triminfo base and triminfo clock) "samsung,exynos5433-tmu" - "samsung,exynos5440-tmu" "samsung,exynos7-tmu" - interrupt-parent : The phandle for the interrupt controller - reg : Address range of the thermal registers. For soc's which has multiple @@ -68,18 +67,7 @@ Example 1): #thermal-sensor-cells = <0>; }; -Example 2): - - tmuctrl_0: tmuctrl@160118 { - compatible = "samsung,exynos5440-tmu"; - reg = <0x160118 0x230>, <0x160368 0x10>; - interrupts = <0 58 0>; - clocks = <&clock 21>; - clock-names = "tmu_apbif"; - #thermal-sensor-cells = <0>; - }; - -Example 3): (In case of Exynos5420 "with misplaced TRIMINFO register") +Example 2): (In case of Exynos5420 "with misplaced TRIMINFO register") tmu_cpu2: tmu@10068000 { compatible = "samsung,exynos5420-tmu-ext-triminfo"; reg = <0x10068000 0x100>, <0x1006c000 0x4>; diff --git a/drivers/thermal/samsung/exynos_tmu.c b/drivers/thermal/samsung/exynos_tmu.c index ed805c7c5ace..f92f470bce21 100644 --- a/drivers/thermal/samsung/exynos_tmu.c +++ b/drivers/thermal/samsung/exynos_tmu.c @@ -123,28 +123,6 @@ #define EXYNOS5433_PD_DET_EN 1 -/*exynos5440 specific registers*/ -#define EXYNOS5440_TMU_S0_7_TRIM 0x000 -#define EXYNOS5440_TMU_S0_7_CTRL 0x020 -#define EXYNOS5440_TMU_S0_7_DEBUG 0x040 -#define EXYNOS5440_TMU_S0_7_TEMP 0x0f0 -#define EXYNOS5440_TMU_S0_7_TH0 0x110 -#define EXYNOS5440_TMU_S0_7_TH1 0x130 -#define EXYNOS5440_TMU_S0_7_TH2 0x150 -#define EXYNOS5440_TMU_S0_7_IRQEN 0x210 -#define EXYNOS5440_TMU_S0_7_IRQ 0x230 -/* exynos5440 common registers */ -#define EXYNOS5440_TMU_IRQ_STATUS 0x000 -#define EXYNOS5440_TMU_PMIN 0x004 - -#define EXYNOS5440_TMU_INTEN_RISE0_SHIFT 0 -#define EXYNOS5440_TMU_INTEN_RISE1_SHIFT 1 -#define EXYNOS5440_TMU_INTEN_RISE2_SHIFT 2 -#define EXYNOS5440_TMU_INTEN_RISE3_SHIFT 3 -#define EXYNOS5440_TMU_INTEN_FALL0_SHIFT 4 -#define EXYNOS5440_TMU_TH_RISE4_SHIFT 24 -#define EXYNOS5440_EFUSE_SWAP_OFFSET 8 - /* Exynos7 specific registers */ #define EXYNOS7_THD_TEMP_RISE7_6 0x50 #define EXYNOS7_THD_TEMP_FALL7_6 0x60 @@ -614,57 +592,6 @@ static int exynos5433_tmu_initialize(struct platform_device *pdev) return ret; } -static int exynos5440_tmu_initialize(struct platform_device *pdev) -{ - struct exynos_tmu_data *data = platform_get_drvdata(pdev); - unsigned int trim_info = 0, con, rising_threshold; - int threshold_code; - int crit_temp = 0; - - /* - * For exynos5440 soc triminfo value is swapped between TMU0 and - * TMU2, so the below logic is needed. - */ - switch (data->id) { - case 0: - trim_info = readl(data->base + EXYNOS5440_EFUSE_SWAP_OFFSET + - EXYNOS5440_TMU_S0_7_TRIM); - break; - case 1: - trim_info = readl(data->base + EXYNOS5440_TMU_S0_7_TRIM); - break; - case 2: - trim_info = readl(data->base - EXYNOS5440_EFUSE_SWAP_OFFSET + - EXYNOS5440_TMU_S0_7_TRIM); - } - sanitize_temp_error(data, trim_info); - - /* Write temperature code for rising and falling threshold */ - rising_threshold = readl(data->base + EXYNOS5440_TMU_S0_7_TH0); - rising_threshold = get_th_reg(data, rising_threshold, false); - writel(rising_threshold, data->base + EXYNOS5440_TMU_S0_7_TH0); - writel(0, data->base + EXYNOS5440_TMU_S0_7_TH1); - - data->tmu_clear_irqs(data); - - /* if last threshold limit is also present */ - if (!data->tzd->ops->get_crit_temp(data->tzd, &crit_temp)) { - threshold_code = temp_to_code(data, crit_temp / MCELSIUS); - /* 5th level to be assigned in th2 reg */ - rising_threshold = - threshold_code << EXYNOS5440_TMU_TH_RISE4_SHIFT; - writel(rising_threshold, data->base + EXYNOS5440_TMU_S0_7_TH2); - con = readl(data->base + EXYNOS5440_TMU_S0_7_CTRL); - con |= (1 << EXYNOS_TMU_THERM_TRIP_EN_SHIFT); - writel(con, data->base + EXYNOS5440_TMU_S0_7_CTRL); - } - /* Clear the PMIN in the common TMU register */ - if (!data->id) - writel(0, data->base_second + EXYNOS5440_TMU_PMIN); - - return 0; -} - static int exynos7_tmu_initialize(struct platform_device *pdev) { struct exynos_tmu_data *data = platform_get_drvdata(pdev); @@ -816,35 +743,6 @@ static void exynos5433_tmu_control(struct platform_device *pdev, bool on) writel(con, data->base + EXYNOS_TMU_REG_CONTROL); } -static void exynos5440_tmu_control(struct platform_device *pdev, bool on) -{ - struct exynos_tmu_data *data = platform_get_drvdata(pdev); - struct thermal_zone_device *tz = data->tzd; - unsigned int con, interrupt_en; - - con = get_con_reg(data, readl(data->base + EXYNOS5440_TMU_S0_7_CTRL)); - - if (on) { - con |= (1 << EXYNOS_TMU_CORE_EN_SHIFT); - interrupt_en = - (of_thermal_is_trip_valid(tz, 3) - << EXYNOS5440_TMU_INTEN_RISE3_SHIFT) | - (of_thermal_is_trip_valid(tz, 2) - << EXYNOS5440_TMU_INTEN_RISE2_SHIFT) | - (of_thermal_is_trip_valid(tz, 1) - << EXYNOS5440_TMU_INTEN_RISE1_SHIFT) | - (of_thermal_is_trip_valid(tz, 0) - << EXYNOS5440_TMU_INTEN_RISE0_SHIFT); - interrupt_en |= - interrupt_en << EXYNOS5440_TMU_INTEN_FALL0_SHIFT; - } else { - con &= ~(1 << EXYNOS_TMU_CORE_EN_SHIFT); - interrupt_en = 0; /* Disable all interrupts */ - } - writel(interrupt_en, data->base + EXYNOS5440_TMU_S0_7_IRQEN); - writel(con, data->base + EXYNOS5440_TMU_S0_7_CTRL); -} - static void exynos7_tmu_control(struct platform_device *pdev, bool on) { struct exynos_tmu_data *data = platform_get_drvdata(pdev); @@ -911,10 +809,8 @@ static u32 get_emul_con_reg(struct exynos_tmu_data *data, unsigned int val, if (temp) { temp /= MCELSIUS; - if (data->soc != SOC_ARCH_EXYNOS5440) { - val &= ~(EXYNOS_EMUL_TIME_MASK << EXYNOS_EMUL_TIME_SHIFT); - val |= (EXYNOS_EMUL_TIME << EXYNOS_EMUL_TIME_SHIFT); - } + val &= ~(EXYNOS_EMUL_TIME_MASK << EXYNOS_EMUL_TIME_SHIFT); + val |= (EXYNOS_EMUL_TIME << EXYNOS_EMUL_TIME_SHIFT); if (data->soc == SOC_ARCH_EXYNOS7) { val &= ~(EXYNOS7_EMUL_DATA_MASK << EXYNOS7_EMUL_DATA_SHIFT); @@ -955,16 +851,6 @@ static void exynos4412_tmu_set_emulation(struct exynos_tmu_data *data, writel(val, data->base + emul_con); } -static void exynos5440_tmu_set_emulation(struct exynos_tmu_data *data, - int temp) -{ - unsigned int val; - - val = readl(data->base + EXYNOS5440_TMU_S0_7_DEBUG); - val = get_emul_con_reg(data, val, temp); - writel(val, data->base + EXYNOS5440_TMU_S0_7_DEBUG); -} - static int exynos_tmu_set_emulation(void *drv_data, int temp) { struct exynos_tmu_data *data = drv_data; @@ -987,7 +873,6 @@ static int exynos_tmu_set_emulation(void *drv_data, int temp) } #else #define exynos4412_tmu_set_emulation NULL -#define exynos5440_tmu_set_emulation NULL static int exynos_tmu_set_emulation(void *drv_data, int temp) { return -EINVAL; } #endif /* CONFIG_THERMAL_EMULATION */ @@ -1005,11 +890,6 @@ static int exynos4412_tmu_read(struct exynos_tmu_data *data) return readb(data->base + EXYNOS_TMU_REG_CURRENT_TEMP); } -static int exynos5440_tmu_read(struct exynos_tmu_data *data) -{ - return readb(data->base + EXYNOS5440_TMU_S0_7_TEMP); -} - static int exynos7_tmu_read(struct exynos_tmu_data *data) { return readw(data->base + EXYNOS_TMU_REG_CURRENT_TEMP) & @@ -1020,16 +900,9 @@ static void exynos_tmu_work(struct work_struct *work) { struct exynos_tmu_data *data = container_of(work, struct exynos_tmu_data, irq_work); - unsigned int val_type; if (!IS_ERR(data->clk_sec)) clk_enable(data->clk_sec); - /* Find which sensor generated this interrupt */ - if (data->soc == SOC_ARCH_EXYNOS5440) { - val_type = readl(data->base_second + EXYNOS5440_TMU_IRQ_STATUS); - if (!((val_type >> data->id) & 0x1)) - goto out; - } if (!IS_ERR(data->clk_sec)) clk_disable(data->clk_sec); @@ -1042,7 +915,6 @@ static void exynos_tmu_work(struct work_struct *work) clk_disable(data->clk); mutex_unlock(&data->lock); -out: enable_irq(data->irq); } @@ -1077,15 +949,6 @@ static void exynos4210_tmu_clear_irqs(struct exynos_tmu_data *data) writel(val_irq, data->base + tmu_intclear); } -static void exynos5440_tmu_clear_irqs(struct exynos_tmu_data *data) -{ - unsigned int val_irq; - - val_irq = readl(data->base + EXYNOS5440_TMU_S0_7_IRQ); - /* clear the interrupts */ - writel(val_irq, data->base + EXYNOS5440_TMU_S0_7_IRQ); -} - static irqreturn_t exynos_tmu_irq(int irq, void *id) { struct exynos_tmu_data *data = id; @@ -1105,7 +968,6 @@ static const struct of_device_id exynos_tmu_match[] = { { .compatible = "samsung,exynos5420-tmu", }, { .compatible = "samsung,exynos5420-tmu-ext-triminfo", }, { .compatible = "samsung,exynos5433-tmu", }, - { .compatible = "samsung,exynos5440-tmu", }, { .compatible = "samsung,exynos7-tmu", }, { /* sentinel */ }, }; @@ -1130,8 +992,6 @@ static int exynos_of_get_soc_type(struct device_node *np) return SOC_ARCH_EXYNOS5420_TRIMINFO; else if (of_device_is_compatible(np, "samsung,exynos5433-tmu")) return SOC_ARCH_EXYNOS5433; - else if (of_device_is_compatible(np, "samsung,exynos5440-tmu")) - return SOC_ARCH_EXYNOS5440; else if (of_device_is_compatible(np, "samsung,exynos7-tmu")) return SOC_ARCH_EXYNOS7; @@ -1242,14 +1102,6 @@ static int exynos_map_dt_data(struct platform_device *pdev) data->tmu_clear_irqs = exynos4210_tmu_clear_irqs; data->ntrip = 8; break; - case SOC_ARCH_EXYNOS5440: - data->tmu_initialize = exynos5440_tmu_initialize; - data->tmu_control = exynos5440_tmu_control; - data->tmu_read = exynos5440_tmu_read; - data->tmu_set_emulation = exynos5440_tmu_set_emulation; - data->tmu_clear_irqs = exynos5440_tmu_clear_irqs; - data->ntrip = 4; - break; case SOC_ARCH_EXYNOS7: data->tmu_initialize = exynos7_tmu_initialize; data->tmu_control = exynos7_tmu_control; @@ -1267,8 +1119,7 @@ static int exynos_map_dt_data(struct platform_device *pdev) * Check if the TMU shares some registers and then try to map the * memory of common registers. */ - if (data->soc != SOC_ARCH_EXYNOS5420_TRIMINFO && - data->soc != SOC_ARCH_EXYNOS5440) + if (data->soc != SOC_ARCH_EXYNOS5420_TRIMINFO) return 0; if (of_address_to_resource(pdev->dev.of_node, 1, &res)) { diff --git a/drivers/thermal/samsung/exynos_tmu.h b/drivers/thermal/samsung/exynos_tmu.h index 5149c2a3030c..f3f830edd79a 100644 --- a/drivers/thermal/samsung/exynos_tmu.h +++ b/drivers/thermal/samsung/exynos_tmu.h @@ -34,7 +34,6 @@ enum soc_type { SOC_ARCH_EXYNOS5420, SOC_ARCH_EXYNOS5420_TRIMINFO, SOC_ARCH_EXYNOS5433, - SOC_ARCH_EXYNOS5440, SOC_ARCH_EXYNOS7, }; -- 2.14.1 From mboxrd@z Thu Jan 1 00:00:00 1970 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: base64 Subject: [RFC,06/10] thermal: samsung: Remove support for Exynos5440 From: Krzysztof Kozlowski Message-Id: <20180424203239.21885-7-krzk@kernel.org> Date: Tue, 24 Apr 2018 22:32:35 +0200 To: Kukjin Kim , Krzysztof Kozlowski , Rob Herring , Mark Rutland , Tejun Heo , Sylwester Nawrocki , Tomasz Figa , Chanwoo Choi , Michael Turquette , Stephen Boyd , "Rafael J. Wysocki" , Viresh Kumar , Zhang Rui , Eduardo Valentin , Russell King , Hans de Goede , Linus Walleij , Andi Shyti , Mark Brown , Bartlomiej Zolnierkiewicz , Alan Stern , Greg Kroah-Hartman , linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-ide@vger.kernel.org, linux-clk@vger.kernel.org, linux-pm@vger.kernel.org, linux-i2c@vger.kernel.org, linux-gpio@vger.kernel.org, linux-spi@vger.kernel.org, linux-usb@vger.kernel.org Cc: Marek Szyprowski , Arnd Bergmann , Olof Johansson , Jaehoon Chung List-ID: VGhlIEV4eW5vczU0NDAgaXMgbm90IGFjdGl2ZWx5IGRldmVsb3BlZCwgdGhlcmUgYXJlIG5vIGRl dmVsb3BtZW50CmJvYXJkcyBhdmFpbGFibGUgYW5kIHByb2JhYmx5IHRoZXJlIGFyZSBubyByZWFs IHByb2R1Y3RzIHdpdGggaXQuClJlbW92ZSB3aWRlLXRyZWUgc3VwcG9ydCBmb3IgRXh5bm9zNTQ0 MC4KClNpZ25lZC1vZmYtYnk6IEtyenlzenRvZiBLb3psb3dza2kgPGtyemtAa2VybmVsLm9yZz4K LS0tCiAuLi4vZGV2aWNldHJlZS9iaW5kaW5ncy90aGVybWFsL2V4eW5vcy10aGVybWFsLnR4dCB8 ICAxNCArLQogZHJpdmVycy90aGVybWFsL3NhbXN1bmcvZXh5bm9zX3RtdS5jICAgICAgICAgICAg ICAgfCAxNTUgKy0tLS0tLS0tLS0tLS0tLS0tLS0tCiBkcml2ZXJzL3RoZXJtYWwvc2Ftc3VuZy9l eHlub3NfdG11LmggICAgICAgICAgICAgICB8ICAgMSAtCiAzIGZpbGVzIGNoYW5nZWQsIDQgaW5z ZXJ0aW9ucygrKSwgMTY2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24v ZGV2aWNldHJlZS9iaW5kaW5ncy90aGVybWFsL2V4eW5vcy10aGVybWFsLnR4dCBiL0RvY3VtZW50 YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy90aGVybWFsL2V4eW5vcy10aGVybWFsLnR4dAppbmRl eCBiOTU3YWNmZjU3YWEuLmFkNjQ4ZDkzZDk2MSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9k ZXZpY2V0cmVlL2JpbmRpbmdzL3RoZXJtYWwvZXh5bm9zLXRoZXJtYWwudHh0CisrKyBiL0RvY3Vt ZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy90aGVybWFsL2V4eW5vcy10aGVybWFsLnR4dApA QCAtMTIsNyArMTIsNiBAQAogCSAgICAgICAic2Ftc3VuZyxleHlub3M1NDIwLXRtdS1leHQtdHJp bWluZm8iIGZvciBUTVUgY2hhbm5lbHMgMiwgMyBhbmQgNAogCQkJRXh5bm9zNTQyMCAoTXVzdCBw YXNzIHRyaW1pbmZvIGJhc2UgYW5kIHRyaW1pbmZvIGNsb2NrKQogICAgICAgICAgICAgICAgInNh bXN1bmcsZXh5bm9zNTQzMy10bXUiCi0JICAgICAgICJzYW1zdW5nLGV4eW5vczU0NDAtdG11Igog CSAgICAgICAic2Ftc3VuZyxleHlub3M3LXRtdSIKIC0gaW50ZXJydXB0LXBhcmVudCA6IFRoZSBw aGFuZGxlIGZvciB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIKIC0gcmVnIDogQWRkcmVzcyByYW5n ZSBvZiB0aGUgdGhlcm1hbCByZWdpc3RlcnMuIEZvciBzb2MncyB3aGljaCBoYXMgbXVsdGlwbGUK QEAgLTY4LDE4ICs2Nyw3IEBAIEV4YW1wbGUgMSk6CiAJCSN0aGVybWFsLXNlbnNvci1jZWxscyA9 IDwwPjsKIAl9OwogCi1FeGFtcGxlIDIpOgotCi0JdG11Y3RybF8wOiB0bXVjdHJsQDE2MDExOCB7 Ci0JCWNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1NDQwLXRtdSI7Ci0JCXJlZyA9IDwweDE2 MDExOCAweDIzMD4sIDwweDE2MDM2OCAweDEwPjsKLQkJaW50ZXJydXB0cyA9IDwwIDU4IDA+Owot CQljbG9ja3MgPSA8JmNsb2NrIDIxPjsKLQkJY2xvY2stbmFtZXMgPSAidG11X2FwYmlmIjsKLQkJ I3RoZXJtYWwtc2Vuc29yLWNlbGxzID0gPDA+OwotCX07Ci0KLUV4YW1wbGUgMyk6IChJbiBjYXNl IG9mIEV4eW5vczU0MjAgIndpdGggbWlzcGxhY2VkIFRSSU1JTkZPIHJlZ2lzdGVyIikKK0V4YW1w bGUgMik6IChJbiBjYXNlIG9mIEV4eW5vczU0MjAgIndpdGggbWlzcGxhY2VkIFRSSU1JTkZPIHJl Z2lzdGVyIikKIAl0bXVfY3B1MjogdG11QDEwMDY4MDAwIHsKIAkJY29tcGF0aWJsZSA9ICJzYW1z dW5nLGV4eW5vczU0MjAtdG11LWV4dC10cmltaW5mbyI7CiAJCXJlZyA9IDwweDEwMDY4MDAwIDB4 MTAwPiwgPDB4MTAwNmMwMDAgMHg0PjsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhlcm1hbC9zYW1z dW5nL2V4eW5vc190bXUuYyBiL2RyaXZlcnMvdGhlcm1hbC9zYW1zdW5nL2V4eW5vc190bXUuYwpp bmRleCBlZDgwNWM3YzVhY2UuLmY5MmY0NzBiY2UyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy90aGVy bWFsL3NhbXN1bmcvZXh5bm9zX3RtdS5jCisrKyBiL2RyaXZlcnMvdGhlcm1hbC9zYW1zdW5nL2V4 eW5vc190bXUuYwpAQCAtMTIzLDI4ICsxMjMsNiBAQAogCiAjZGVmaW5lIEVYWU5PUzU0MzNfUERf REVUX0VOCQkJMQogCi0vKmV4eW5vczU0NDAgc3BlY2lmaWMgcmVnaXN0ZXJzKi8KLSNkZWZpbmUg RVhZTk9TNTQ0MF9UTVVfUzBfN19UUklNCQkweDAwMAotI2RlZmluZSBFWFlOT1M1NDQwX1RNVV9T MF83X0NUUkwJCTB4MDIwCi0jZGVmaW5lIEVYWU5PUzU0NDBfVE1VX1MwXzdfREVCVUcJCTB4MDQw Ci0jZGVmaW5lIEVYWU5PUzU0NDBfVE1VX1MwXzdfVEVNUAkJMHgwZjAKLSNkZWZpbmUgRVhZTk9T NTQ0MF9UTVVfUzBfN19USDAJCQkweDExMAotI2RlZmluZSBFWFlOT1M1NDQwX1RNVV9TMF83X1RI MQkJCTB4MTMwCi0jZGVmaW5lIEVYWU5PUzU0NDBfVE1VX1MwXzdfVEgyCQkJMHgxNTAKLSNkZWZp bmUgRVhZTk9TNTQ0MF9UTVVfUzBfN19JUlFFTgkJMHgyMTAKLSNkZWZpbmUgRVhZTk9TNTQ0MF9U TVVfUzBfN19JUlEJCQkweDIzMAotLyogZXh5bm9zNTQ0MCBjb21tb24gcmVnaXN0ZXJzICovCi0j ZGVmaW5lIEVYWU5PUzU0NDBfVE1VX0lSUV9TVEFUVVMJCTB4MDAwCi0jZGVmaW5lIEVYWU5PUzU0 NDBfVE1VX1BNSU4JCQkweDAwNAotCi0jZGVmaW5lIEVYWU5PUzU0NDBfVE1VX0lOVEVOX1JJU0Uw X1NISUZUCTAKLSNkZWZpbmUgRVhZTk9TNTQ0MF9UTVVfSU5URU5fUklTRTFfU0hJRlQJMQotI2Rl ZmluZSBFWFlOT1M1NDQwX1RNVV9JTlRFTl9SSVNFMl9TSElGVAkyCi0jZGVmaW5lIEVYWU5PUzU0 NDBfVE1VX0lOVEVOX1JJU0UzX1NISUZUCTMKLSNkZWZpbmUgRVhZTk9TNTQ0MF9UTVVfSU5URU5f RkFMTDBfU0hJRlQJNAotI2RlZmluZSBFWFlOT1M1NDQwX1RNVV9USF9SSVNFNF9TSElGVAkJMjQK LSNkZWZpbmUgRVhZTk9TNTQ0MF9FRlVTRV9TV0FQX09GRlNFVAkJOAotCiAvKiBFeHlub3M3IHNw ZWNpZmljIHJlZ2lzdGVycyAqLwogI2RlZmluZSBFWFlOT1M3X1RIRF9URU1QX1JJU0U3XzYJCTB4 NTAKICNkZWZpbmUgRVhZTk9TN19USERfVEVNUF9GQUxMN182CQkweDYwCkBAIC02MTQsNTcgKzU5 Miw2IEBAIHN0YXRpYyBpbnQgZXh5bm9zNTQzM190bXVfaW5pdGlhbGl6ZShzdHJ1Y3QgcGxhdGZv cm1fZGV2aWNlICpwZGV2KQogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZXh5bm9zNTQ0 MF90bXVfaW5pdGlhbGl6ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQotewotCXN0cnVj dCBleHlub3NfdG11X2RhdGEgKmRhdGEgPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQl1 bnNpZ25lZCBpbnQgdHJpbV9pbmZvID0gMCwgY29uLCByaXNpbmdfdGhyZXNob2xkOwotCWludCB0 aHJlc2hvbGRfY29kZTsKLQlpbnQgY3JpdF90ZW1wID0gMDsKLQotCS8qCi0JICogRm9yIGV4eW5v czU0NDAgc29jIHRyaW1pbmZvIHZhbHVlIGlzIHN3YXBwZWQgYmV0d2VlbiBUTVUwIGFuZAotCSAq IFRNVTIsIHNvIHRoZSBiZWxvdyBsb2dpYyBpcyBuZWVkZWQuCi0JICovCi0Jc3dpdGNoIChkYXRh LT5pZCkgewotCWNhc2UgMDoKLQkJdHJpbV9pbmZvID0gcmVhZGwoZGF0YS0+YmFzZSArIEVYWU5P UzU0NDBfRUZVU0VfU1dBUF9PRkZTRVQgKwotCQkJCSBFWFlOT1M1NDQwX1RNVV9TMF83X1RSSU0p OwotCQlicmVhazsKLQljYXNlIDE6Ci0JCXRyaW1faW5mbyA9IHJlYWRsKGRhdGEtPmJhc2UgKyBF WFlOT1M1NDQwX1RNVV9TMF83X1RSSU0pOwotCQlicmVhazsKLQljYXNlIDI6Ci0JCXRyaW1faW5m byA9IHJlYWRsKGRhdGEtPmJhc2UgLSBFWFlOT1M1NDQwX0VGVVNFX1NXQVBfT0ZGU0VUICsKLQkJ CQkgIEVYWU5PUzU0NDBfVE1VX1MwXzdfVFJJTSk7Ci0JfQotCXNhbml0aXplX3RlbXBfZXJyb3Io ZGF0YSwgdHJpbV9pbmZvKTsKLQotCS8qIFdyaXRlIHRlbXBlcmF0dXJlIGNvZGUgZm9yIHJpc2lu ZyBhbmQgZmFsbGluZyB0aHJlc2hvbGQgKi8KLQlyaXNpbmdfdGhyZXNob2xkID0gcmVhZGwoZGF0 YS0+YmFzZSArIEVYWU5PUzU0NDBfVE1VX1MwXzdfVEgwKTsKLQlyaXNpbmdfdGhyZXNob2xkID0g Z2V0X3RoX3JlZyhkYXRhLCByaXNpbmdfdGhyZXNob2xkLCBmYWxzZSk7Ci0Jd3JpdGVsKHJpc2lu Z190aHJlc2hvbGQsIGRhdGEtPmJhc2UgKyBFWFlOT1M1NDQwX1RNVV9TMF83X1RIMCk7Ci0Jd3Jp dGVsKDAsIGRhdGEtPmJhc2UgKyBFWFlOT1M1NDQwX1RNVV9TMF83X1RIMSk7Ci0KLQlkYXRhLT50 bXVfY2xlYXJfaXJxcyhkYXRhKTsKLQotCS8qIGlmIGxhc3QgdGhyZXNob2xkIGxpbWl0IGlzIGFs c28gcHJlc2VudCAqLwotCWlmICghZGF0YS0+dHpkLT5vcHMtPmdldF9jcml0X3RlbXAoZGF0YS0+ dHpkLCAmY3JpdF90ZW1wKSkgewotCQl0aHJlc2hvbGRfY29kZSA9IHRlbXBfdG9fY29kZShkYXRh LCBjcml0X3RlbXAgLyBNQ0VMU0lVUyk7Ci0JCS8qIDV0aCBsZXZlbCB0byBiZSBhc3NpZ25lZCBp biB0aDIgcmVnICovCi0JCXJpc2luZ190aHJlc2hvbGQgPQotCQkJdGhyZXNob2xkX2NvZGUgPDwg RVhZTk9TNTQ0MF9UTVVfVEhfUklTRTRfU0hJRlQ7Ci0JCXdyaXRlbChyaXNpbmdfdGhyZXNob2xk LCBkYXRhLT5iYXNlICsgRVhZTk9TNTQ0MF9UTVVfUzBfN19USDIpOwotCQljb24gPSByZWFkbChk YXRhLT5iYXNlICsgRVhZTk9TNTQ0MF9UTVVfUzBfN19DVFJMKTsKLQkJY29uIHw9ICgxIDw8IEVY WU5PU19UTVVfVEhFUk1fVFJJUF9FTl9TSElGVCk7Ci0JCXdyaXRlbChjb24sIGRhdGEtPmJhc2Ug KyBFWFlOT1M1NDQwX1RNVV9TMF83X0NUUkwpOwotCX0KLQkvKiBDbGVhciB0aGUgUE1JTiBpbiB0 aGUgY29tbW9uIFRNVSByZWdpc3RlciAqLwotCWlmICghZGF0YS0+aWQpCi0JCXdyaXRlbCgwLCBk YXRhLT5iYXNlX3NlY29uZCArIEVYWU5PUzU0NDBfVE1VX1BNSU4pOwotCi0JcmV0dXJuIDA7Ci19 Ci0KIHN0YXRpYyBpbnQgZXh5bm9zN190bXVfaW5pdGlhbGl6ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2 aWNlICpwZGV2KQogewogCXN0cnVjdCBleHlub3NfdG11X2RhdGEgKmRhdGEgPSBwbGF0Zm9ybV9n ZXRfZHJ2ZGF0YShwZGV2KTsKQEAgLTgxNiwzNSArNzQzLDYgQEAgc3RhdGljIHZvaWQgZXh5bm9z NTQzM190bXVfY29udHJvbChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2LCBib29sIG9uKQog CXdyaXRlbChjb24sIGRhdGEtPmJhc2UgKyBFWFlOT1NfVE1VX1JFR19DT05UUk9MKTsKIH0KIAot c3RhdGljIHZvaWQgZXh5bm9zNTQ0MF90bXVfY29udHJvbChzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNl ICpwZGV2LCBib29sIG9uKQotewotCXN0cnVjdCBleHlub3NfdG11X2RhdGEgKmRhdGEgPSBwbGF0 Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKLQlzdHJ1Y3QgdGhlcm1hbF96b25lX2RldmljZSAqdHog PSBkYXRhLT50emQ7Ci0JdW5zaWduZWQgaW50IGNvbiwgaW50ZXJydXB0X2VuOwotCi0JY29uID0g Z2V0X2Nvbl9yZWcoZGF0YSwgcmVhZGwoZGF0YS0+YmFzZSArIEVYWU5PUzU0NDBfVE1VX1MwXzdf Q1RSTCkpOwotCi0JaWYgKG9uKSB7Ci0JCWNvbiB8PSAoMSA8PCBFWFlOT1NfVE1VX0NPUkVfRU5f U0hJRlQpOwotCQlpbnRlcnJ1cHRfZW4gPQotCQkJKG9mX3RoZXJtYWxfaXNfdHJpcF92YWxpZCh0 eiwgMykKLQkJCSA8PCBFWFlOT1M1NDQwX1RNVV9JTlRFTl9SSVNFM19TSElGVCkgfAotCQkJKG9m X3RoZXJtYWxfaXNfdHJpcF92YWxpZCh0eiwgMikKLQkJCSA8PCBFWFlOT1M1NDQwX1RNVV9JTlRF Tl9SSVNFMl9TSElGVCkgfAotCQkJKG9mX3RoZXJtYWxfaXNfdHJpcF92YWxpZCh0eiwgMSkKLQkJ CSA8PCBFWFlOT1M1NDQwX1RNVV9JTlRFTl9SSVNFMV9TSElGVCkgfAotCQkJKG9mX3RoZXJtYWxf aXNfdHJpcF92YWxpZCh0eiwgMCkKLQkJCSA8PCBFWFlOT1M1NDQwX1RNVV9JTlRFTl9SSVNFMF9T SElGVCk7Ci0JCWludGVycnVwdF9lbiB8PQotCQkJaW50ZXJydXB0X2VuIDw8IEVYWU5PUzU0NDBf VE1VX0lOVEVOX0ZBTEwwX1NISUZUOwotCX0gZWxzZSB7Ci0JCWNvbiAmPSB+KDEgPDwgRVhZTk9T X1RNVV9DT1JFX0VOX1NISUZUKTsKLQkJaW50ZXJydXB0X2VuID0gMDsgLyogRGlzYWJsZSBhbGwg aW50ZXJydXB0cyAqLwotCX0KLQl3cml0ZWwoaW50ZXJydXB0X2VuLCBkYXRhLT5iYXNlICsgRVhZ Tk9TNTQ0MF9UTVVfUzBfN19JUlFFTik7Ci0Jd3JpdGVsKGNvbiwgZGF0YS0+YmFzZSArIEVYWU5P UzU0NDBfVE1VX1MwXzdfQ1RSTCk7Ci19Ci0KIHN0YXRpYyB2b2lkIGV4eW5vczdfdG11X2NvbnRy b2woc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldiwgYm9vbCBvbikKIHsKIAlzdHJ1Y3QgZXh5 bm9zX3RtdV9kYXRhICpkYXRhID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7CkBAIC05MTEs MTAgKzgwOSw4IEBAIHN0YXRpYyB1MzIgZ2V0X2VtdWxfY29uX3JlZyhzdHJ1Y3QgZXh5bm9zX3Rt dV9kYXRhICpkYXRhLCB1bnNpZ25lZCBpbnQgdmFsLAogCWlmICh0ZW1wKSB7CiAJCXRlbXAgLz0g TUNFTFNJVVM7CiAKLQkJaWYgKGRhdGEtPnNvYyAhPSBTT0NfQVJDSF9FWFlOT1M1NDQwKSB7Ci0J CQl2YWwgJj0gfihFWFlOT1NfRU1VTF9USU1FX01BU0sgPDwgRVhZTk9TX0VNVUxfVElNRV9TSElG VCk7Ci0JCQl2YWwgfD0gKEVYWU5PU19FTVVMX1RJTUUgPDwgRVhZTk9TX0VNVUxfVElNRV9TSElG VCk7Ci0JCX0KKwkJdmFsICY9IH4oRVhZTk9TX0VNVUxfVElNRV9NQVNLIDw8IEVYWU5PU19FTVVM X1RJTUVfU0hJRlQpOworCQl2YWwgfD0gKEVYWU5PU19FTVVMX1RJTUUgPDwgRVhZTk9TX0VNVUxf VElNRV9TSElGVCk7CiAJCWlmIChkYXRhLT5zb2MgPT0gU09DX0FSQ0hfRVhZTk9TNykgewogCQkJ dmFsICY9IH4oRVhZTk9TN19FTVVMX0RBVEFfTUFTSyA8PAogCQkJCUVYWU5PUzdfRU1VTF9EQVRB X1NISUZUKTsKQEAgLTk1NSwxNiArODUxLDYgQEAgc3RhdGljIHZvaWQgZXh5bm9zNDQxMl90bXVf c2V0X2VtdWxhdGlvbihzdHJ1Y3QgZXh5bm9zX3RtdV9kYXRhICpkYXRhLAogCXdyaXRlbCh2YWws IGRhdGEtPmJhc2UgKyBlbXVsX2Nvbik7CiB9CiAKLXN0YXRpYyB2b2lkIGV4eW5vczU0NDBfdG11 X3NldF9lbXVsYXRpb24oc3RydWN0IGV4eW5vc190bXVfZGF0YSAqZGF0YSwKLQkJCQkJIGludCB0 ZW1wKQotewotCXVuc2lnbmVkIGludCB2YWw7Ci0KLQl2YWwgPSByZWFkbChkYXRhLT5iYXNlICsg RVhZTk9TNTQ0MF9UTVVfUzBfN19ERUJVRyk7Ci0JdmFsID0gZ2V0X2VtdWxfY29uX3JlZyhkYXRh LCB2YWwsIHRlbXApOwotCXdyaXRlbCh2YWwsIGRhdGEtPmJhc2UgKyBFWFlOT1M1NDQwX1RNVV9T MF83X0RFQlVHKTsKLX0KLQogc3RhdGljIGludCBleHlub3NfdG11X3NldF9lbXVsYXRpb24odm9p ZCAqZHJ2X2RhdGEsIGludCB0ZW1wKQogewogCXN0cnVjdCBleHlub3NfdG11X2RhdGEgKmRhdGEg PSBkcnZfZGF0YTsKQEAgLTk4Nyw3ICs4NzMsNiBAQCBzdGF0aWMgaW50IGV4eW5vc190bXVfc2V0 X2VtdWxhdGlvbih2b2lkICpkcnZfZGF0YSwgaW50IHRlbXApCiB9CiAjZWxzZQogI2RlZmluZSBl eHlub3M0NDEyX3RtdV9zZXRfZW11bGF0aW9uIE5VTEwKLSNkZWZpbmUgZXh5bm9zNTQ0MF90bXVf c2V0X2VtdWxhdGlvbiBOVUxMCiBzdGF0aWMgaW50IGV4eW5vc190bXVfc2V0X2VtdWxhdGlvbih2 b2lkICpkcnZfZGF0YSwgaW50IHRlbXApCiAJeyByZXR1cm4gLUVJTlZBTDsgfQogI2VuZGlmIC8q IENPTkZJR19USEVSTUFMX0VNVUxBVElPTiAqLwpAQCAtMTAwNSwxMSArODkwLDYgQEAgc3RhdGlj IGludCBleHlub3M0NDEyX3RtdV9yZWFkKHN0cnVjdCBleHlub3NfdG11X2RhdGEgKmRhdGEpCiAJ cmV0dXJuIHJlYWRiKGRhdGEtPmJhc2UgKyBFWFlOT1NfVE1VX1JFR19DVVJSRU5UX1RFTVApOwog fQogCi1zdGF0aWMgaW50IGV4eW5vczU0NDBfdG11X3JlYWQoc3RydWN0IGV4eW5vc190bXVfZGF0 YSAqZGF0YSkKLXsKLQlyZXR1cm4gcmVhZGIoZGF0YS0+YmFzZSArIEVYWU5PUzU0NDBfVE1VX1Mw XzdfVEVNUCk7Ci19Ci0KIHN0YXRpYyBpbnQgZXh5bm9zN190bXVfcmVhZChzdHJ1Y3QgZXh5bm9z X3RtdV9kYXRhICpkYXRhKQogewogCXJldHVybiByZWFkdyhkYXRhLT5iYXNlICsgRVhZTk9TX1RN VV9SRUdfQ1VSUkVOVF9URU1QKSAmCkBAIC0xMDIwLDE2ICs5MDAsOSBAQCBzdGF0aWMgdm9pZCBl eHlub3NfdG11X3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewogCXN0cnVjdCBleHlu b3NfdG11X2RhdGEgKmRhdGEgPSBjb250YWluZXJfb2Yod29yaywKIAkJCXN0cnVjdCBleHlub3Nf dG11X2RhdGEsIGlycV93b3JrKTsKLQl1bnNpZ25lZCBpbnQgdmFsX3R5cGU7CiAKIAlpZiAoIUlT X0VSUihkYXRhLT5jbGtfc2VjKSkKIAkJY2xrX2VuYWJsZShkYXRhLT5jbGtfc2VjKTsKLQkvKiBG aW5kIHdoaWNoIHNlbnNvciBnZW5lcmF0ZWQgdGhpcyBpbnRlcnJ1cHQgKi8KLQlpZiAoZGF0YS0+ c29jID09IFNPQ19BUkNIX0VYWU5PUzU0NDApIHsKLQkJdmFsX3R5cGUgPSByZWFkbChkYXRhLT5i YXNlX3NlY29uZCArIEVYWU5PUzU0NDBfVE1VX0lSUV9TVEFUVVMpOwotCQlpZiAoISgodmFsX3R5 cGUgPj4gZGF0YS0+aWQpICYgMHgxKSkKLQkJCWdvdG8gb3V0OwotCX0KIAlpZiAoIUlTX0VSUihk YXRhLT5jbGtfc2VjKSkKIAkJY2xrX2Rpc2FibGUoZGF0YS0+Y2xrX3NlYyk7CiAKQEAgLTEwNDIs NyArOTE1LDYgQEAgc3RhdGljIHZvaWQgZXh5bm9zX3RtdV93b3JrKHN0cnVjdCB3b3JrX3N0cnVj dCAqd29yaykKIAogCWNsa19kaXNhYmxlKGRhdGEtPmNsayk7CiAJbXV0ZXhfdW5sb2NrKCZkYXRh LT5sb2NrKTsKLW91dDoKIAllbmFibGVfaXJxKGRhdGEtPmlycSk7CiB9CiAKQEAgLTEwNzcsMTUg Kzk0OSw2IEBAIHN0YXRpYyB2b2lkIGV4eW5vczQyMTBfdG11X2NsZWFyX2lycXMoc3RydWN0IGV4 eW5vc190bXVfZGF0YSAqZGF0YSkKIAl3cml0ZWwodmFsX2lycSwgZGF0YS0+YmFzZSArIHRtdV9p bnRjbGVhcik7CiB9CiAKLXN0YXRpYyB2b2lkIGV4eW5vczU0NDBfdG11X2NsZWFyX2lycXMoc3Ry dWN0IGV4eW5vc190bXVfZGF0YSAqZGF0YSkKLXsKLQl1bnNpZ25lZCBpbnQgdmFsX2lycTsKLQot CXZhbF9pcnEgPSByZWFkbChkYXRhLT5iYXNlICsgRVhZTk9TNTQ0MF9UTVVfUzBfN19JUlEpOwot CS8qIGNsZWFyIHRoZSBpbnRlcnJ1cHRzICovCi0Jd3JpdGVsKHZhbF9pcnEsIGRhdGEtPmJhc2Ug KyBFWFlOT1M1NDQwX1RNVV9TMF83X0lSUSk7Ci19Ci0KIHN0YXRpYyBpcnFyZXR1cm5fdCBleHlu b3NfdG11X2lycShpbnQgaXJxLCB2b2lkICppZCkKIHsKIAlzdHJ1Y3QgZXh5bm9zX3RtdV9kYXRh ICpkYXRhID0gaWQ7CkBAIC0xMTA1LDcgKzk2OCw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgb2Zf ZGV2aWNlX2lkIGV4eW5vc190bXVfbWF0Y2hbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gInNhbXN1 bmcsZXh5bm9zNTQyMC10bXUiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlub3M1 NDIwLXRtdS1leHQtdHJpbWluZm8iLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic2Ftc3VuZyxleHlu b3M1NDMzLXRtdSIsIH0sCi0JeyAuY29tcGF0aWJsZSA9ICJzYW1zdW5nLGV4eW5vczU0NDAtdG11 IiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNhbXN1bmcsZXh5bm9zNy10bXUiLCB9LAogCXsgLyog c2VudGluZWwgKi8gfSwKIH07CkBAIC0xMTMwLDggKzk5Miw2IEBAIHN0YXRpYyBpbnQgZXh5bm9z X29mX2dldF9zb2NfdHlwZShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wKQogCQlyZXR1cm4gU09DX0FS Q0hfRVhZTk9TNTQyMF9UUklNSU5GTzsKIAllbHNlIGlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJs ZShucCwgInNhbXN1bmcsZXh5bm9zNTQzMy10bXUiKSkKIAkJcmV0dXJuIFNPQ19BUkNIX0VYWU5P UzU0MzM7Ci0JZWxzZSBpZiAob2ZfZGV2aWNlX2lzX2NvbXBhdGlibGUobnAsICJzYW1zdW5nLGV4 eW5vczU0NDAtdG11IikpCi0JCXJldHVybiBTT0NfQVJDSF9FWFlOT1M1NDQwOwogCWVsc2UgaWYg KG9mX2RldmljZV9pc19jb21wYXRpYmxlKG5wLCAic2Ftc3VuZyxleHlub3M3LXRtdSIpKQogCQly ZXR1cm4gU09DX0FSQ0hfRVhZTk9TNzsKIApAQCAtMTI0MiwxNCArMTEwMiw2IEBAIHN0YXRpYyBp bnQgZXh5bm9zX21hcF9kdF9kYXRhKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCiAJCWRh dGEtPnRtdV9jbGVhcl9pcnFzID0gZXh5bm9zNDIxMF90bXVfY2xlYXJfaXJxczsKIAkJZGF0YS0+ bnRyaXAgPSA4OwogCQlicmVhazsKLQljYXNlIFNPQ19BUkNIX0VYWU5PUzU0NDA6Ci0JCWRhdGEt PnRtdV9pbml0aWFsaXplID0gZXh5bm9zNTQ0MF90bXVfaW5pdGlhbGl6ZTsKLQkJZGF0YS0+dG11 X2NvbnRyb2wgPSBleHlub3M1NDQwX3RtdV9jb250cm9sOwotCQlkYXRhLT50bXVfcmVhZCA9IGV4 eW5vczU0NDBfdG11X3JlYWQ7Ci0JCWRhdGEtPnRtdV9zZXRfZW11bGF0aW9uID0gZXh5bm9zNTQ0 MF90bXVfc2V0X2VtdWxhdGlvbjsKLQkJZGF0YS0+dG11X2NsZWFyX2lycXMgPSBleHlub3M1NDQw X3RtdV9jbGVhcl9pcnFzOwotCQlkYXRhLT5udHJpcCA9IDQ7Ci0JCWJyZWFrOwogCWNhc2UgU09D X0FSQ0hfRVhZTk9TNzoKIAkJZGF0YS0+dG11X2luaXRpYWxpemUgPSBleHlub3M3X3RtdV9pbml0 aWFsaXplOwogCQlkYXRhLT50bXVfY29udHJvbCA9IGV4eW5vczdfdG11X2NvbnRyb2w7CkBAIC0x MjY3LDggKzExMTksNyBAQCBzdGF0aWMgaW50IGV4eW5vc19tYXBfZHRfZGF0YShzdHJ1Y3QgcGxh dGZvcm1fZGV2aWNlICpwZGV2KQogCSAqIENoZWNrIGlmIHRoZSBUTVUgc2hhcmVzIHNvbWUgcmVn aXN0ZXJzIGFuZCB0aGVuIHRyeSB0byBtYXAgdGhlCiAJICogbWVtb3J5IG9mIGNvbW1vbiByZWdp c3RlcnMuCiAJICovCi0JaWYgKGRhdGEtPnNvYyAhPSBTT0NfQVJDSF9FWFlOT1M1NDIwX1RSSU1J TkZPICYmCi0JICAgIGRhdGEtPnNvYyAhPSBTT0NfQVJDSF9FWFlOT1M1NDQwKQorCWlmIChkYXRh LT5zb2MgIT0gU09DX0FSQ0hfRVhZTk9TNTQyMF9UUklNSU5GTykKIAkJcmV0dXJuIDA7CiAKIAlp ZiAob2ZfYWRkcmVzc190b19yZXNvdXJjZShwZGV2LT5kZXYub2Zfbm9kZSwgMSwgJnJlcykpIHsK ZGlmZiAtLWdpdCBhL2RyaXZlcnMvdGhlcm1hbC9zYW1zdW5nL2V4eW5vc190bXUuaCBiL2RyaXZl cnMvdGhlcm1hbC9zYW1zdW5nL2V4eW5vc190bXUuaAppbmRleCA1MTQ5YzJhMzAzMGMuLmYzZjgz MGVkZDc5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy90aGVybWFsL3NhbXN1bmcvZXh5bm9zX3RtdS5o CisrKyBiL2RyaXZlcnMvdGhlcm1hbC9zYW1zdW5nL2V4eW5vc190bXUuaApAQCAtMzQsNyArMzQs NiBAQCBlbnVtIHNvY190eXBlIHsKIAlTT0NfQVJDSF9FWFlOT1M1NDIwLAogCVNPQ19BUkNIX0VY WU5PUzU0MjBfVFJJTUlORk8sCiAJU09DX0FSQ0hfRVhZTk9TNTQzMywKLQlTT0NfQVJDSF9FWFlO T1M1NDQwLAogCVNPQ19BUkNIX0VYWU5PUzcsCiB9OwogCg== From mboxrd@z Thu Jan 1 00:00:00 1970 From: krzk@kernel.org (Krzysztof Kozlowski) Date: Tue, 24 Apr 2018 22:32:35 +0200 Subject: [RFC 06/10] thermal: samsung: Remove support for Exynos5440 In-Reply-To: <20180424203239.21885-1-krzk@kernel.org> References: <20180424203239.21885-1-krzk@kernel.org> Message-ID: <20180424203239.21885-7-krzk@kernel.org> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org The Exynos5440 is not actively developed, there are no development boards available and probably there are no real products with it. Remove wide-tree support for Exynos5440. Signed-off-by: Krzysztof Kozlowski --- .../devicetree/bindings/thermal/exynos-thermal.txt | 14 +- drivers/thermal/samsung/exynos_tmu.c | 155 +-------------------- drivers/thermal/samsung/exynos_tmu.h | 1 - 3 files changed, 4 insertions(+), 166 deletions(-) diff --git a/Documentation/devicetree/bindings/thermal/exynos-thermal.txt b/Documentation/devicetree/bindings/thermal/exynos-thermal.txt index b957acff57aa..ad648d93d961 100644 --- a/Documentation/devicetree/bindings/thermal/exynos-thermal.txt +++ b/Documentation/devicetree/bindings/thermal/exynos-thermal.txt @@ -12,7 +12,6 @@ "samsung,exynos5420-tmu-ext-triminfo" for TMU channels 2, 3 and 4 Exynos5420 (Must pass triminfo base and triminfo clock) "samsung,exynos5433-tmu" - "samsung,exynos5440-tmu" "samsung,exynos7-tmu" - interrupt-parent : The phandle for the interrupt controller - reg : Address range of the thermal registers. For soc's which has multiple @@ -68,18 +67,7 @@ Example 1): #thermal-sensor-cells = <0>; }; -Example 2): - - tmuctrl_0: tmuctrl at 160118 { - compatible = "samsung,exynos5440-tmu"; - reg = <0x160118 0x230>, <0x160368 0x10>; - interrupts = <0 58 0>; - clocks = <&clock 21>; - clock-names = "tmu_apbif"; - #thermal-sensor-cells = <0>; - }; - -Example 3): (In case of Exynos5420 "with misplaced TRIMINFO register") +Example 2): (In case of Exynos5420 "with misplaced TRIMINFO register") tmu_cpu2: tmu at 10068000 { compatible = "samsung,exynos5420-tmu-ext-triminfo"; reg = <0x10068000 0x100>, <0x1006c000 0x4>; diff --git a/drivers/thermal/samsung/exynos_tmu.c b/drivers/thermal/samsung/exynos_tmu.c index ed805c7c5ace..f92f470bce21 100644 --- a/drivers/thermal/samsung/exynos_tmu.c +++ b/drivers/thermal/samsung/exynos_tmu.c @@ -123,28 +123,6 @@ #define EXYNOS5433_PD_DET_EN 1 -/*exynos5440 specific registers*/ -#define EXYNOS5440_TMU_S0_7_TRIM 0x000 -#define EXYNOS5440_TMU_S0_7_CTRL 0x020 -#define EXYNOS5440_TMU_S0_7_DEBUG 0x040 -#define EXYNOS5440_TMU_S0_7_TEMP 0x0f0 -#define EXYNOS5440_TMU_S0_7_TH0 0x110 -#define EXYNOS5440_TMU_S0_7_TH1 0x130 -#define EXYNOS5440_TMU_S0_7_TH2 0x150 -#define EXYNOS5440_TMU_S0_7_IRQEN 0x210 -#define EXYNOS5440_TMU_S0_7_IRQ 0x230 -/* exynos5440 common registers */ -#define EXYNOS5440_TMU_IRQ_STATUS 0x000 -#define EXYNOS5440_TMU_PMIN 0x004 - -#define EXYNOS5440_TMU_INTEN_RISE0_SHIFT 0 -#define EXYNOS5440_TMU_INTEN_RISE1_SHIFT 1 -#define EXYNOS5440_TMU_INTEN_RISE2_SHIFT 2 -#define EXYNOS5440_TMU_INTEN_RISE3_SHIFT 3 -#define EXYNOS5440_TMU_INTEN_FALL0_SHIFT 4 -#define EXYNOS5440_TMU_TH_RISE4_SHIFT 24 -#define EXYNOS5440_EFUSE_SWAP_OFFSET 8 - /* Exynos7 specific registers */ #define EXYNOS7_THD_TEMP_RISE7_6 0x50 #define EXYNOS7_THD_TEMP_FALL7_6 0x60 @@ -614,57 +592,6 @@ static int exynos5433_tmu_initialize(struct platform_device *pdev) return ret; } -static int exynos5440_tmu_initialize(struct platform_device *pdev) -{ - struct exynos_tmu_data *data = platform_get_drvdata(pdev); - unsigned int trim_info = 0, con, rising_threshold; - int threshold_code; - int crit_temp = 0; - - /* - * For exynos5440 soc triminfo value is swapped between TMU0 and - * TMU2, so the below logic is needed. - */ - switch (data->id) { - case 0: - trim_info = readl(data->base + EXYNOS5440_EFUSE_SWAP_OFFSET + - EXYNOS5440_TMU_S0_7_TRIM); - break; - case 1: - trim_info = readl(data->base + EXYNOS5440_TMU_S0_7_TRIM); - break; - case 2: - trim_info = readl(data->base - EXYNOS5440_EFUSE_SWAP_OFFSET + - EXYNOS5440_TMU_S0_7_TRIM); - } - sanitize_temp_error(data, trim_info); - - /* Write temperature code for rising and falling threshold */ - rising_threshold = readl(data->base + EXYNOS5440_TMU_S0_7_TH0); - rising_threshold = get_th_reg(data, rising_threshold, false); - writel(rising_threshold, data->base + EXYNOS5440_TMU_S0_7_TH0); - writel(0, data->base + EXYNOS5440_TMU_S0_7_TH1); - - data->tmu_clear_irqs(data); - - /* if last threshold limit is also present */ - if (!data->tzd->ops->get_crit_temp(data->tzd, &crit_temp)) { - threshold_code = temp_to_code(data, crit_temp / MCELSIUS); - /* 5th level to be assigned in th2 reg */ - rising_threshold = - threshold_code << EXYNOS5440_TMU_TH_RISE4_SHIFT; - writel(rising_threshold, data->base + EXYNOS5440_TMU_S0_7_TH2); - con = readl(data->base + EXYNOS5440_TMU_S0_7_CTRL); - con |= (1 << EXYNOS_TMU_THERM_TRIP_EN_SHIFT); - writel(con, data->base + EXYNOS5440_TMU_S0_7_CTRL); - } - /* Clear the PMIN in the common TMU register */ - if (!data->id) - writel(0, data->base_second + EXYNOS5440_TMU_PMIN); - - return 0; -} - static int exynos7_tmu_initialize(struct platform_device *pdev) { struct exynos_tmu_data *data = platform_get_drvdata(pdev); @@ -816,35 +743,6 @@ static void exynos5433_tmu_control(struct platform_device *pdev, bool on) writel(con, data->base + EXYNOS_TMU_REG_CONTROL); } -static void exynos5440_tmu_control(struct platform_device *pdev, bool on) -{ - struct exynos_tmu_data *data = platform_get_drvdata(pdev); - struct thermal_zone_device *tz = data->tzd; - unsigned int con, interrupt_en; - - con = get_con_reg(data, readl(data->base + EXYNOS5440_TMU_S0_7_CTRL)); - - if (on) { - con |= (1 << EXYNOS_TMU_CORE_EN_SHIFT); - interrupt_en = - (of_thermal_is_trip_valid(tz, 3) - << EXYNOS5440_TMU_INTEN_RISE3_SHIFT) | - (of_thermal_is_trip_valid(tz, 2) - << EXYNOS5440_TMU_INTEN_RISE2_SHIFT) | - (of_thermal_is_trip_valid(tz, 1) - << EXYNOS5440_TMU_INTEN_RISE1_SHIFT) | - (of_thermal_is_trip_valid(tz, 0) - << EXYNOS5440_TMU_INTEN_RISE0_SHIFT); - interrupt_en |= - interrupt_en << EXYNOS5440_TMU_INTEN_FALL0_SHIFT; - } else { - con &= ~(1 << EXYNOS_TMU_CORE_EN_SHIFT); - interrupt_en = 0; /* Disable all interrupts */ - } - writel(interrupt_en, data->base + EXYNOS5440_TMU_S0_7_IRQEN); - writel(con, data->base + EXYNOS5440_TMU_S0_7_CTRL); -} - static void exynos7_tmu_control(struct platform_device *pdev, bool on) { struct exynos_tmu_data *data = platform_get_drvdata(pdev); @@ -911,10 +809,8 @@ static u32 get_emul_con_reg(struct exynos_tmu_data *data, unsigned int val, if (temp) { temp /= MCELSIUS; - if (data->soc != SOC_ARCH_EXYNOS5440) { - val &= ~(EXYNOS_EMUL_TIME_MASK << EXYNOS_EMUL_TIME_SHIFT); - val |= (EXYNOS_EMUL_TIME << EXYNOS_EMUL_TIME_SHIFT); - } + val &= ~(EXYNOS_EMUL_TIME_MASK << EXYNOS_EMUL_TIME_SHIFT); + val |= (EXYNOS_EMUL_TIME << EXYNOS_EMUL_TIME_SHIFT); if (data->soc == SOC_ARCH_EXYNOS7) { val &= ~(EXYNOS7_EMUL_DATA_MASK << EXYNOS7_EMUL_DATA_SHIFT); @@ -955,16 +851,6 @@ static void exynos4412_tmu_set_emulation(struct exynos_tmu_data *data, writel(val, data->base + emul_con); } -static void exynos5440_tmu_set_emulation(struct exynos_tmu_data *data, - int temp) -{ - unsigned int val; - - val = readl(data->base + EXYNOS5440_TMU_S0_7_DEBUG); - val = get_emul_con_reg(data, val, temp); - writel(val, data->base + EXYNOS5440_TMU_S0_7_DEBUG); -} - static int exynos_tmu_set_emulation(void *drv_data, int temp) { struct exynos_tmu_data *data = drv_data; @@ -987,7 +873,6 @@ static int exynos_tmu_set_emulation(void *drv_data, int temp) } #else #define exynos4412_tmu_set_emulation NULL -#define exynos5440_tmu_set_emulation NULL static int exynos_tmu_set_emulation(void *drv_data, int temp) { return -EINVAL; } #endif /* CONFIG_THERMAL_EMULATION */ @@ -1005,11 +890,6 @@ static int exynos4412_tmu_read(struct exynos_tmu_data *data) return readb(data->base + EXYNOS_TMU_REG_CURRENT_TEMP); } -static int exynos5440_tmu_read(struct exynos_tmu_data *data) -{ - return readb(data->base + EXYNOS5440_TMU_S0_7_TEMP); -} - static int exynos7_tmu_read(struct exynos_tmu_data *data) { return readw(data->base + EXYNOS_TMU_REG_CURRENT_TEMP) & @@ -1020,16 +900,9 @@ static void exynos_tmu_work(struct work_struct *work) { struct exynos_tmu_data *data = container_of(work, struct exynos_tmu_data, irq_work); - unsigned int val_type; if (!IS_ERR(data->clk_sec)) clk_enable(data->clk_sec); - /* Find which sensor generated this interrupt */ - if (data->soc == SOC_ARCH_EXYNOS5440) { - val_type = readl(data->base_second + EXYNOS5440_TMU_IRQ_STATUS); - if (!((val_type >> data->id) & 0x1)) - goto out; - } if (!IS_ERR(data->clk_sec)) clk_disable(data->clk_sec); @@ -1042,7 +915,6 @@ static void exynos_tmu_work(struct work_struct *work) clk_disable(data->clk); mutex_unlock(&data->lock); -out: enable_irq(data->irq); } @@ -1077,15 +949,6 @@ static void exynos4210_tmu_clear_irqs(struct exynos_tmu_data *data) writel(val_irq, data->base + tmu_intclear); } -static void exynos5440_tmu_clear_irqs(struct exynos_tmu_data *data) -{ - unsigned int val_irq; - - val_irq = readl(data->base + EXYNOS5440_TMU_S0_7_IRQ); - /* clear the interrupts */ - writel(val_irq, data->base + EXYNOS5440_TMU_S0_7_IRQ); -} - static irqreturn_t exynos_tmu_irq(int irq, void *id) { struct exynos_tmu_data *data = id; @@ -1105,7 +968,6 @@ static const struct of_device_id exynos_tmu_match[] = { { .compatible = "samsung,exynos5420-tmu", }, { .compatible = "samsung,exynos5420-tmu-ext-triminfo", }, { .compatible = "samsung,exynos5433-tmu", }, - { .compatible = "samsung,exynos5440-tmu", }, { .compatible = "samsung,exynos7-tmu", }, { /* sentinel */ }, }; @@ -1130,8 +992,6 @@ static int exynos_of_get_soc_type(struct device_node *np) return SOC_ARCH_EXYNOS5420_TRIMINFO; else if (of_device_is_compatible(np, "samsung,exynos5433-tmu")) return SOC_ARCH_EXYNOS5433; - else if (of_device_is_compatible(np, "samsung,exynos5440-tmu")) - return SOC_ARCH_EXYNOS5440; else if (of_device_is_compatible(np, "samsung,exynos7-tmu")) return SOC_ARCH_EXYNOS7; @@ -1242,14 +1102,6 @@ static int exynos_map_dt_data(struct platform_device *pdev) data->tmu_clear_irqs = exynos4210_tmu_clear_irqs; data->ntrip = 8; break; - case SOC_ARCH_EXYNOS5440: - data->tmu_initialize = exynos5440_tmu_initialize; - data->tmu_control = exynos5440_tmu_control; - data->tmu_read = exynos5440_tmu_read; - data->tmu_set_emulation = exynos5440_tmu_set_emulation; - data->tmu_clear_irqs = exynos5440_tmu_clear_irqs; - data->ntrip = 4; - break; case SOC_ARCH_EXYNOS7: data->tmu_initialize = exynos7_tmu_initialize; data->tmu_control = exynos7_tmu_control; @@ -1267,8 +1119,7 @@ static int exynos_map_dt_data(struct platform_device *pdev) * Check if the TMU shares some registers and then try to map the * memory of common registers. */ - if (data->soc != SOC_ARCH_EXYNOS5420_TRIMINFO && - data->soc != SOC_ARCH_EXYNOS5440) + if (data->soc != SOC_ARCH_EXYNOS5420_TRIMINFO) return 0; if (of_address_to_resource(pdev->dev.of_node, 1, &res)) { diff --git a/drivers/thermal/samsung/exynos_tmu.h b/drivers/thermal/samsung/exynos_tmu.h index 5149c2a3030c..f3f830edd79a 100644 --- a/drivers/thermal/samsung/exynos_tmu.h +++ b/drivers/thermal/samsung/exynos_tmu.h @@ -34,7 +34,6 @@ enum soc_type { SOC_ARCH_EXYNOS5420, SOC_ARCH_EXYNOS5420_TRIMINFO, SOC_ARCH_EXYNOS5433, - SOC_ARCH_EXYNOS5440, SOC_ARCH_EXYNOS7, }; -- 2.14.1