summaryrefslogtreecommitdiff
path: root/board/samsung
Commit message (Collapse)AuthorAgeLines
* Move ALLOC_CACHE_ALIGN_BUFFER() to the new memalign.h headerSimon Glass2015-09-11-0/+1
| | | | | | | Now that we have a new header file for cache-aligned allocation, we should move the stack-based allocation macro there also. Signed-off-by: Simon Glass <sjg@chromium.org>
* exynos: Rise ARM voltage to 1.1V for chained bootloadersMisha Komarovskiy2015-08-31-3/+4
| | | | | | | | | If board uses downstream Chrome OS U-Boot as first stage bootloader and upstream version is chained second stage, 1.1V is minimum voltage borderline. Signed-off-by: Misha Komarovskiy <zombah@gmail.com> Acked-by: Simon Glass <sjg@chromium.org>
* exynos: Add support for springSimon Glass2015-08-05-0/+19
| | | | | | | | | | Spring is the first ARM-based HP Chromebook 11. It is similar to snow and it uses the same Samsung Exynos5250 chip. But has some unusual features. Mainline support for it has lagged snow (both in kernel and U-Boot). Now that the exynos5 code is common we can support spring just by adding a device tree and a few lines of configuration. Signed-off-by: Simon Glass <sjg@chromium.org>
* exynos: Drop old exynos5250-specific board codeSimon Glass2015-08-05-310/+0
| | | | | | | Now that most exynos5250 boards can use the generic exynos5 code, switch over to it and remove the old code. Signed-off-by: Simon Glass <sjg@chromium.org>
* exynos: Drop old exynos5420-specific board codeSimon Glass2015-08-05-147/+0
| | | | | | | | Now that exynos5420 boards can use the generic exynos5 code, switch over to it and remove the old code. Signed-off-by: Simon Glass <sjg@chromium.org> Acked-by: Przemyslaw Marczak <p.marczak@samsung.com>
* exynos: Remove unneeded device tree control #ifdefsSimon Glass2015-08-05-9/+8
| | | | | | | Since device tree is used for all exynos5 boards, we can remove the #ifdef and reduce confusion. Signed-off-by: Simon Glass <sjg@chromium.org>
* exynos: Enable new features for exynos5 boardsSimon Glass2015-08-05-1/+1
| | | | | | | Enable PMICs, regulators and the like so that new drivers will be made available. Signed-off-by: Simon Glass <sjg@chromium.org>
* exynos: Add common board code for exynos5 boards that use device treeSimon Glass2015-08-05-0/+363
| | | | | | | | | | Some boards use device tree for almost all board-specific configuration. They therefore do not need their own separate board code, but can all use the same version. Add a common version of the board code. It uses the PMIC, regulator and video bridge uclasses. This will support smdk5250, smdk5420, snow, spring, pit and pi. Signed-off-by: Simon Glass <sjg@chromium.org>
* usb: USB download gadget and functions config options coherent namingPaul Kocialkowski2015-07-22-1/+1
| | | | | | | | | | | | This introduces a coherent scheme for naming USB download gadget and functions config options. The download USB gadget config option is moved to CONFIG_USB_GADGET_DOWNLOAD for better consistency with other gadgets and each function's config option is moved to a CONFIG_USB_FUNCTION_ prefix. Signed-off-by: Paul Kocialkowski <contact@paulk.fr> Tested-by: Lukasz Majewski <l.majewski@samsung.com> Test HW: Odroid_XU3 (Exynos5422), trats (Exynos4210)
* arm: adds the status info for odroid-xu3Minkyu Kang2015-07-10-0/+1
| | | | | | Adds the 'F:' entry for the board's defconfig Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
* fix: samsung: common: autoboot.cmd: Correct itbcfg definitionŁukasz Majewski2015-06-18-1/+1
| | | | | | This fix is necessary to avoid booting the default ITB configuration. Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
* samsung: common: add example boot scriptsPrzemyslaw Marczak2015-06-08-0/+102
| | | | | | | | | | | | | | | | | | | | | | This commit adds example scripts of boot.scr: - bootzimg.cmd - check if dtb exists and boot zImage - autoboot.cmd - check which image exists: Image.itb, zImage or uImage and optionally load fdt file for u/zImage The blank spaces are added to improve readability and can be removed before use mkimage. Required U-Boot environment variables: $boardname, $fdtfile, $console, $mmcbootdev, $mmcbootpart, $mmcrootdev, $mmcrootpart, $rootfstype. Making boot.scr from file.cmd: mkimage -C none -A arm -T script -d file.cmd boot.scr The Odroid XU3 default environment is ready for those boot scripts and the right script can be loaded by DFU. Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com> Cc: Minkyu Kang <mk7.kang@samsung.com>
* smdk5420: board: add functions to init dfu environment settingsInha Song2015-06-08-0/+30
| | | | | | | | | | | | | This commit extends SMDK5420 board's file by adding functions: - get_dfu_alt_system() - get_dfu_alt_boot() This allows setting the DFU environment by function set_dfu_alt_info() from: board/samsung/common/misc.c Signed-off-by: Inha Song <ideal.song@samsung.com> Cc: Akshay Saraswat <akshay.s@samsung.com> Cc: Minkyu Kang <mk7.kang@samsung.com>
* smdk5420: board: add functions required to enable USB DWC3Joonyoung Shim2015-06-08-8/+48
| | | | | | | | | | | | | This commit adds implementation of function calls: - usb_gadget_handle_interrupts() - board_usb_init() Which allow enable USB DWC3 gadget for this board. Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com> Signed-off-by: Lukasz Majewski <l.majewski@samsung.com> Signed-off-by: Inha Song <ideal.song@samsung.com> Cc: Minkyu Kang <mk7.kang@samsung.com>
* dm: regulator: uclass driver code cleanupPrzemyslaw Marczak2015-05-14-5/+4
| | | | | | | | | | | | | | | | | | | This cleanup includes: - remove of the preprocessor macros which pointed to long name functions - update of the names of some regulator uclass driver functions - cleanup of the function regulator_autoset() - reword of some comments of regulator uclass header file - regulator_get_by_platname: check error for uclass_find_* function calls - add function: regulator_name_is_unique - regulator post_bind(): check regulator name uniqueness - fix mistakes in: regulator/Kconfig - regulator.h: update comments - odroid u3: cleanup the regulator calls Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com> Acked-by: Simon Glass <sjg@chromium.org> Tested on sandbox: Tested-by: Simon Glass <sjg@chromium.org>
* odroid: enable driver model pmic/regulator API and MAX77686 driversPrzemyslaw Marczak2015-05-14-32/+46
| | | | | | | | | | | | | | | | | | | | | | | | This change enables the configs required to init and setup max77686 regulator driver, using the new driver model pmic and regulator API. And also changes the old pmic framework calls to the new ones. This commits enables: - CONFIG_ERRNO_STR - CONFIG_DM_PMIC - CONFIG_DM_PMIC_CMD - CONFIG_DM_PMIC_MAX77686 - CONFIG_DM_REGULATOR - CONFIG_DM_REGULATOR_CMD - CONFIG_DM_REGULATOR_MAX77686 And removes the unused: - CONFIG_DM_I2C_COMPAT - CONFIG_POWER - CONFIG_POWER_I2C - CONFIG_POWER_MAX77686 Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com> Acked-by: Simon Glass <sjg@chromium.org>
* dm: board:samsung: power_init_board: add requirement of CONFIG_DM_PMICPrzemyslaw Marczak2015-05-14-2/+2
| | | | | | | | In the power_init_board function call, regulator driver init is called, so before compile, make sure that any power framework is defined. Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com> Acked-by: Simon Glass <sjg@chromium.org>
* dm: select CONFIG_DM* optionsMasahiro Yamada2015-04-18-18/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | As mentioned in the previous commit, adding default values in each Kconfig causes problems because it does not co-exist with the "depends on" syntax. (Please note this is not a bug of Kconfig.) We should not do so unless we have a special reason. Actually, for CONFIG_DM*, we have no good reason to do so. Generally, CONFIG_DM is not a user-configurable option. Once we convert a driver into Driver Model, the board only works with Driver Model, i.e. CONFIG_DM must be always enabled for that board. So, using "select DM" is more suitable rather than allowing users to modify it. Another good thing is, Kconfig warns unmet dependencies for "select" syntax, so we easily notice bugs. Actually, CONFIG_DM and other related options have been added without consistency: some into arch/*/Kconfig, some into board/*/Kconfig, and some into configs/*_defconfig. This commit prefers "select" and cleans up the following issues. [1] Never use "CONFIG_DM=n" in defconfig files It is really rare to add "CONFIG_FOO=n" to disable CONFIG options. It is more common to use "# CONFIG_FOO is not set". But here, we do not even have to do it. Less than half of OMAP3 boards have been converted to Driver Model. Adding the default values to arch/arm/cpu/armv7/omap3/Kconfig is weird. Instead, add "select DM" only to appropriate boards, which eventually eliminates "CONFIG_DM=n", etc. [2] Delete redundant CONFIGs Sandbox sets CONFIG_DM in arch/sandbox/Kconfig and defines it again in configs/sandbox_defconfig. Likewise, OMAP3 sets CONFIG_DM arch/arm/cpu/armv7/omap3/Kconfig and defines it also in omap3_beagle_defconfig and devkit8000_defconfig. Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
* exynos: cros_ec: Drop unnecessary initSimon Glass2015-04-18-12/+0
| | | | | | | Since driver model will probe the EC when it is first used, we do not need to init it explicitly. Signed-off-by: Simon Glass <sjg@chromium.org>
* cros_ec: Drop unused CONFIG_DM_CROS_ECSimon Glass2015-04-18-6/+0
| | | | | | | Since all supported boards enable this option now, we can remove it along with the old code. Signed-off-by: Simon Glass <sjg@chromium.org>
* usb: board: goni: Add default board_usb_cleanup() definition for Goni boardLukasz Majewski2015-04-14-0/+5
| | | | | | This definition is necessary for S5PC110 based GONI board to work properly. Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
* usb: board: samsung: Add default board_usb_cleanup() definition for Exynos SoCsLukasz Majewski2015-04-14-0/+6
| | | | | | This definition is necessary for Exynos based boards to work properly. Signed-off-by: Lukasz Majewski <l.majewski@samsung.com>
* odroid-XU3: update board maintainerPrzemyslaw Marczak2015-04-09-0/+6
| | | | | | | | At present Hyungwon can't take care of this board in U-Boot, so I will keep it working. Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com> Cc: Hyungwon Hwang <human.hwang@samsung.com>
* smdk5420: Remove GPIO enumsAjay Kumar2015-04-06-15/+0
| | | | | | | | | | Remove GPIOs from smdk5420 board file and because the same is already specified via DT. Signed-off-by: Ajay Kumar <ajaykumar.rs@samsung.com> Reviewed-by: Simon Glass <sjg@chromium.org> Tested-by: Simon Glass <sjg@chromium.org> Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
* remove unnecessary version.h includesRob Herring2015-03-24-5/+0
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | Various files are needlessly rebuilt every time due to the version and build time changing. As version.h is not actually needed, remove the include. Signed-off-by: Rob Herring <robh@kernel.org> Cc: Albert Aribaud <albert.u.boot@aribaud.net> Cc: Stefano Babic <sbabic@denx.de> Cc: Minkyu Kang <mk7.kang@samsung.com> Cc: Marek Vasut <marex@denx.de> Cc: Tom Warren <twarren@nvidia.com> Cc: Michal Simek <monstr@monstr.eu> Cc: Macpaul Lin <macpaul@andestech.com> Cc: Wolfgang Denk <wd@denx.de> Cc: York Sun <yorksun@freescale.com> Cc: Stefan Roese <sr@denx.de> Cc: Nobuhiro Iwamatsu <iwamatsu@nigauri.org> Cc: Simon Glass <sjg@chromium.org> Cc: Philippe Reynes <tremyfr@yahoo.fr> Cc: Eric Jarrige <eric.jarrige@armadeus.org> Cc: "David Müller" <d.mueller@elsoft.ch> Cc: Phil Edworthy <phil.edworthy@renesas.com> Cc: Robert Baldyga <r.baldyga@samsung.com> Cc: Torsten Koschorrek <koschorrek@synertronixx.de> Cc: Anatolij Gustschin <agust@denx.de> Reviewed-by: Linus Walleij <linus.walleij@linaro.org> Reviewed-by: Łukasz Majewski <l.majewski@samsung.com>
* Odroid U3: use common code for dram reservationPrzemyslaw Marczak2015-03-04-4/+0
| | | | | | | | | This commit removes the dram reservation from board file, because it is done in a common code. Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com> Cc: Minkyu Kang <mk7.kang@samsung.com> Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
* board: samsung: reserve memory for the secure firmwarePrzemyslaw Marczak2015-03-04-0/+6
| | | | | | | | | | | | | | | | Since more than one board requires memory reservation for the secure firmware, the reservation code can be made in a common code. Now, to reserve some part of the the last bank, board config should define: - CONFIG_TZSW_RESERVED_DRAM - len in bytes - CONFIG_NR_DRAM_BANKS - number of memory banks Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com> Cc: Akshay Saraswat <akshay.s@samsung.com> Cc: Hyungwon Hwang <human.hwang@samsung.com> Cc: Minkyu Kang <mk7.kang@samsung.com> Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
* samsung: board: fix: Define loop iterator as an unsigned int to suppress gcc ↵Łukasz Majewski2015-03-04-2/+2
| | | | | | | | | | | | | | | | 4.8 warning This patch suppress following warning: board/samsung/common/board.c:95:32: warning: iteration 4u invokes undefined behavior [-Waggressive-loop-optimizations] addr = CONFIG_SYS_SDRAM_BASE + (i * SDRAM_BANK_SIZE); ^ board/samsung/common/board.c:94:2: note: containing loop about possible signed integer overflow at gcc 4.8.2 (odroid board) Signed-off-by: Lukasz Majewski <l.majewski@samsung.com> Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
* Merge git://git.denx.de/u-boot-usbTom Rini2015-03-02-20/+20
|\
| * odroid: adjust get_dfu_alt_*() functions to new declarationsInha Song2015-02-25-14/+17
| | | | | | | | | | | | | | | | | | This change is required after updated dfu_alt_system/boot declarations. Signed-off-by: Inha Song <ideal.song@samsung.com> Tested-by: Lukasz Majewski <l.majewski@samsung.com> [Test HW: Odroid U3 (Exynos 4412)] Acked-by: Minkyu Kang <mk7.kang@samsung.com>
| * dfu: samsung: move call to set_dfu_alt_info() to dfu common codePrzemyslaw Marczak2015-02-25-6/+3
| | | | | | | | | | | | | | | | | | | | | | | | | | | | This common call can be used for setting proper entities based on dfu command arguments. The config: CONFIG_SET_DFU_ALT_INFO, was used only for few configs, and now it is common. The board file should implement: - set_dfu_alt_info() function Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com> Tested-by: Lukasz Majewski <l.majewski@samsung.com> [Test HW: Odroid U3 (Exynos 4412)]
* | kconfig: remove unneeded dependency on !SPL_BUILDMasahiro Yamada2015-02-24-6/+6
|/ | | | | | | Now CONFIG_SPL_BUILD is not defined in Kconfig, so "!depends on SPL_BUILD" and "if !SPL_BUILD" are redundant. Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com>
* Merge git://git.denx.de/u-boot-samsungTom Rini2015-02-13-10/+30
|\
| * odroid: fix g2d sclk rateJoonyoung Shim2015-02-13-2/+2
| | | | | | | | | | | | | | G2D core should be provided 200MHz clock rate. Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com> Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
| * samsung: board: support eMMC reset using DTJoonyoung Shim2015-02-13-8/+28
| | | | | | | | | | | | | | | | | | | | | | Some exynos boards require special handling of nRESET_OUT line for eMMC memory to perform complete reboot e.g. Odroid X2/U3/XU3 boards. This will support eMMC reset using DT from reset_misc of samsung common board file. Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com> Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
* | dm: exynos: Move driver model CONFIGs to KconfigSimon Glass2015-02-12-0/+24
|/ | | | | | | Remove driver model CONFIGs from the board config headers and use Kconfig instead. Signed-off-by: Simon Glass <sjg@chromium.org>
* odroid u3: enable dm i2c supportPrzemyslaw Marczak2015-01-29-13/+1
| | | | | | | | | | This patch enables CONFIG_DM_I2C and also CONFIG_DM_I2C_COMPAT. The last one should be removed when the dm pmic framework will be finished. Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com> Acked-by: Simon Glass <sjg@chromium.org> Cc: Minkyu Kang <mk7.kang@samsung.com>
* ARM: remove redudant information from Kconfig filesMasahiro Yamada2015-01-12-3/+0
| | | | | | | | | - "string" type for SYS_* is defined in arch/Kconfig - SYS_CPU "armv7" has been replaced with "select CPU_V7" - SYS_SOC "tegra124" is already defined in tegra124/Kconfig Signed-off-by: Masahiro Yamada <yamada.m@jp.panasonic.com> Acked-by: Bo Shen <voice.shen@atmel.com>
* ARM: exynos5420: Leave VBUS GPIO configuration up to common codeSjoerd Simons2014-12-22-16/+0
| | | | | | | | | | | | Since commit 4a271cb1b4ffdf330 (exynos: usb: Switch USB VBUS GPIOs to be device tree configured) it's not needed for the board specific files to turn on the VBUS GPIO by hand as that gets done based on device tree. So drop the redundant code from the SMDK5420 board file. Signed-off-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk> Acked-by: Simon Glass <sjg@chromium.org> Tested-by: Simon Glass <sjg@chromium.org> Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
* exynos5420: fix compilation without parade videoSjoerd Simons2014-12-22-0/+1
| | | | | | | | | | | | Not all exynos 5420 based devices with an LCD also have a parade LVDS bridge. So make sure compilation doesn't break if CONFIG_LCD is enabled and CONFIG_VIDEO_PARADE is not. As a side-effect move the parade functions from the exynos system header file to its own file. Signed-off-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk> Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
* Odroid-XU3: Add support for Odroid-XU3Hyungwon Hwang2014-12-22-0/+13
| | | | | | | | | | | This patch adds support for Odroid-XU3. Signed-off-by: Hyungwon Hwang <human.hwang@samsung.com> Reviewed-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk> Tested-by: Sjoerd Simons <sjoerd.simons@collabora.co.uk> Acked-by: Simon Glass <sjg@chromium.org> Tested-by: Kevin Hilman <khilman@linaro.org> Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
* odroid: Turn blue LED onSuriyan Ramasami2014-11-24-0/+5
| | | | | | | | To indicate that U-Boot is active, turn on the blue LED. Signed-off-by: Suriyan Ramasami <suriyan.r@gmail.com> Acked-by: Przemyslaw Marczak <p.marczak@samsung.com> Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
* odroid: usbhost - Add missing gpio_request callSuriyan Ramasami2014-11-24-2/+11
| | | | | | | | | | | | | | | | The USB host code was missing gpio_request() calls before using the gpio functions, causing errors to be printed out. As a side note calls to max77686_set_buck_mode(OPMODE_OFF/OPMODE_ON) have been removed, as they did not have any effect. This is as per Przemyslaw: I looked into the documentation and there is a "ENB8" pin in PMIC package. This pin allows steering BUCK8 ON/OFF by the hardware. If ENB8 is set to low then you can do on/off. If high, then you cannot change its state by I2C write, which seems to be the case with the Odroids. Signed-off-by: Suriyan Ramasami <suriyan.r@gmail.com> Acked-by: Przemyslaw Marczak <p.marczak@samsung.com> Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
* arm: odroid: usb: add support for usb host including ethernetSuriyan Ramasami2014-11-17-0/+32
| | | | | | | | | This change adds support for enabling the USB host features of the board. This includes the USB3503A hub and the SMC LAN9730 ethernet controller as well. Signed-off-by: Suriyan Ramasami <suriyan.r@gmail.com> Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
* Config: Exynos5800: Enable build for Peach-PiAkshay Saraswat2014-11-17-0/+18
| | | | | | | | | | | | | This adds following things : - New config and defconfig for Peach-Pi board. - Alterations in Kconfig and MAINTAINERS. - Addition of CONFIG_EXYNOS5800. - ADdition of exynos5800-peach-pi in dts list. Signed-off-by: Akshay Saraswat <akshay.s@samsung.com> Acked-by: Simon Glass <sjg@chromium.org> Tested-by: Simon Glass <sjg@chromium.org> Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
* odroid: adjust gpio calls to dm gpio apiPrzemyslaw Marczak2014-10-30-1/+10
| | | | | | | | | | | | Setting gpio value before dm gpio init has no effect, so now, odroid gpio settings are moved after the gpio uclass init. Using non-requested gpio pin cases printing error messages. To avoid this, gpio_request() is added for those gpios. Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com> Acked-by: Simon Glass <sjg@chromium.org> Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
* kconfig: arm: introduce symbol for ARM CPUsGeorges Savoundararadj2014-10-29-9/+0
| | | | | | | | | | | | | | | | | This commit introduces a Kconfig symbol for each ARM CPU: CPU_ARM720T, CPU_ARM920T, CPU_ARM926EJS, CPU_ARM946ES, CPU_ARM1136, CPU_ARM1176, CPU_V7, CPU_PXA, CPU_SA1100. Also, it adds the CPU feature Kconfig symbol HAS_VBAR which is selected for CPU_ARM1176 and CPU_V7. For each target, the corresponding CPU is selected and the definition of SYS_CPU in the corresponding Kconfig file is removed. Also, it removes redundant "string" type in some Kconfig files. Signed-off-by: Georges Savoundararadj <savoundg@gmail.com> Acked-by: Albert ARIBAUD <albert.u.boot@aribaud.net> Cc: Masahiro Yamada <yamada.m@jp.panasonic.com>
* universal: request soft i2c gpioPrzemyslaw Marczak2014-10-27-0/+9
| | | | | Signed-off-by: Przemyslaw Marczak <p.marczak@samsung.com> Acked-by: Simon Glass <sjg@chromium.org>
* samsung: board: use __weakJeroen Hofstee2014-10-25-6/+2
| | | | Signed-off-by: Jeroen Hofstee <jeroen@myspectrum.nl>
* exynos: universal_c210: Move to driver model soft_spiSimon Glass2014-10-22-52/+0
| | | | | | | Adjust this board to use the driver model soft_spi implementation. Signed-off-by: Simon Glass <sjg@chromium.org> Reviewed-by: Jagannadha Sutradharudu Teki <jagannadh.teki@gmail.com>