* [Qemu-devel] [PATCH v2 0/4] ARM: exynos4210 PMU modifications @ 2012-07-12 16:54 Maksim Kozlov 2012-07-12 16:54 ` [Qemu-devel] [PATCH v2 1/4] ARM: exynos4210_pmu: just formatting changes Maksim Kozlov ` (3 more replies) 0 siblings, 4 replies; 9+ messages in thread From: Maksim Kozlov @ 2012-07-12 16:54 UTC (permalink / raw) To: qemu-devel; +Cc: peter.maydell, kyungmin.park, e.voevodin This patchset created mainly to add software reset support, but includes some other things. 1. fix formatting of the exynos4210_pmu_regs structure 2. fix PRINT_DEBUG macro set to be able to enable extend and non-extend output independently of each other 3. introduce new function to get register's index 4. add software reset First three patches are standalone, but the fourth depends on the third. Changelog: v1->v2: Deleted the irrelevant comment Maksim Kozlov (4): ARM: exynos4210_pmu: just formatting changes ARM: exynos4210_pmu: changes in PRINT_DEBUG macro set. ARM: exynos4210_pmu: Introduced exynos4210_pmu_get_register_index ARM: exynos4210_pmu: Add software reset support hw/exynos4210_pmu.c | 439 +++++++++++++++++++++++++++++---------------------- 1 files changed, 248 insertions(+), 191 deletions(-) -- 1.7.5.4 ^ permalink raw reply [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH v2 1/4] ARM: exynos4210_pmu: just formatting changes 2012-07-12 16:54 [Qemu-devel] [PATCH v2 0/4] ARM: exynos4210 PMU modifications Maksim Kozlov @ 2012-07-12 16:54 ` Maksim Kozlov 2012-07-12 16:54 ` [Qemu-devel] [PATCH v2 2/4] ARM: exynos4210_pmu: changes in PRINT_DEBUG macro set Maksim Kozlov ` (2 subsequent siblings) 3 siblings, 0 replies; 9+ messages in thread From: Maksim Kozlov @ 2012-07-12 16:54 UTC (permalink / raw) To: qemu-devel; +Cc: peter.maydell, kyungmin.park, Maksim Kozlov, e.voevodin Mainly to make 'exynos4210_pmu_regs' array more readable. Signed-off-by: Maksim Kozlov <m.kozlov@samsung.com> --- hw/exynos4210_pmu.c | 324 ++++++++++++++++++++++++++------------------------- 1 files changed, 164 insertions(+), 160 deletions(-) diff --git a/hw/exynos4210_pmu.c b/hw/exynos4210_pmu.c index c12d750..2be7e08 100644 --- a/hw/exynos4210_pmu.c +++ b/hw/exynos4210_pmu.c @@ -226,170 +226,174 @@ typedef struct Exynos4210PmuReg { } Exynos4210PmuReg; static const Exynos4210PmuReg exynos4210_pmu_regs[] = { - {"OM_STAT", OM_STAT, 0x00000000}, - {"RTC_CLKO_SEL", RTC_CLKO_SEL, 0x00000000}, - {"GNSS_RTC_OUT_CTRL", GNSS_RTC_OUT_CTRL, 0x00000001}, - {"SYSTEM_POWER_DOWN_CTRL", SYSTEM_POWER_DOWN_CTRL, 0x00010000}, - {"SYSTEM_POWER_DOWN_OPTION", SYSTEM_POWER_DOWN_OPTION, 0x03030000}, - {"SWRESET", SWRESET, 0x00000000}, - {"RST_STAT", RST_STAT, 0x00000000}, - {"WAKEUP_STAT", WAKEUP_STAT, 0x00000000}, - {"EINT_WAKEUP_MASK", EINT_WAKEUP_MASK, 0x00000000}, - {"WAKEUP_MASK", WAKEUP_MASK, 0x00000000}, - {"HDMI_PHY_CONTROL", HDMI_PHY_CONTROL, 0x00960000}, - {"USBDEVICE_PHY_CONTROL", USBDEVICE_PHY_CONTROL, 0x00000000}, - {"USBHOST_PHY_CONTROL", USBHOST_PHY_CONTROL, 0x00000000}, - {"DAC_PHY_CONTROL", DAC_PHY_CONTROL, 0x00000000}, - {"MIPI_PHY0_CONTROL", MIPI_PHY0_CONTROL, 0x00000000}, - {"MIPI_PHY1_CONTROL", MIPI_PHY1_CONTROL, 0x00000000}, - {"ADC_PHY_CONTROL", ADC_PHY_CONTROL, 0x00000001}, - {"PCIe_PHY_CONTROL", PCIe_PHY_CONTROL, 0x00000000}, - {"SATA_PHY_CONTROL", SATA_PHY_CONTROL, 0x00000000}, - {"INFORM0", INFORM0, 0x00000000}, - {"INFORM1", INFORM1, 0x00000000}, - {"INFORM2", INFORM2, 0x00000000}, - {"INFORM3", INFORM3, 0x00000000}, - {"INFORM4", INFORM4, 0x00000000}, - {"INFORM5", INFORM5, 0x00000000}, - {"INFORM6", INFORM6, 0x00000000}, - {"INFORM7", INFORM7, 0x00000000}, - {"PMU_DEBUG", PMU_DEBUG, 0x00000000}, - {"ARM_CORE0_SYS_PWR_REG", ARM_CORE0_SYS_PWR_REG, 0xFFFFFFFF}, - {"ARM_CORE1_SYS_PWR_REG", ARM_CORE1_SYS_PWR_REG, 0xFFFFFFFF}, - {"ARM_COMMON_SYS_PWR_REG", ARM_COMMON_SYS_PWR_REG, 0xFFFFFFFF}, - {"ARM_CPU_L2_0_SYS_PWR_REG", ARM_CPU_L2_0_SYS_PWR_REG, 0xFFFFFFFF}, - {"ARM_CPU_L2_1_SYS_PWR_REG", ARM_CPU_L2_1_SYS_PWR_REG, 0xFFFFFFFF}, - {"CMU_ACLKSTOP_SYS_PWR_REG", CMU_ACLKSTOP_SYS_PWR_REG, 0xFFFFFFFF}, - {"CMU_SCLKSTOP_SYS_PWR_REG", CMU_SCLKSTOP_SYS_PWR_REG, 0xFFFFFFFF}, - {"CMU_RESET_SYS_PWR_REG", CMU_RESET_SYS_PWR_REG, 0xFFFFFFFF}, - {"APLL_SYSCLK_SYS_PWR_REG", APLL_SYSCLK_SYS_PWR_REG, 0xFFFFFFFF}, - {"MPLL_SYSCLK_SYS_PWR_REG", MPLL_SYSCLK_SYS_PWR_REG, 0xFFFFFFFF}, - {"VPLL_SYSCLK_SYS_PWR_REG", VPLL_SYSCLK_SYS_PWR_REG, 0xFFFFFFFF}, - {"EPLL_SYSCLK_SYS_PWR_REG", EPLL_SYSCLK_SYS_PWR_REG, 0xFFFFFFFF}, - {"CMU_CLKSTOP_GPS_ALIVE_SYS_PWR_REG", CMU_CLKSTOP_GPS_ALIVE_SYS_PWR_REG, - 0xFFFFFFFF}, - {"CMU_RESET_GPS_ALIVE_SYS_PWR_REG", CMU_RESET_GPS_ALIVE_SYS_PWR_REG, - 0xFFFFFFFF}, - {"CMU_CLKSTOP_CAM_SYS_PWR_REG", CMU_CLKSTOP_CAM_SYS_PWR_REG, 0xFFFFFFFF}, - {"CMU_CLKSTOP_TV_SYS_PWR_REG", CMU_CLKSTOP_TV_SYS_PWR_REG, 0xFFFFFFFF}, - {"CMU_CLKSTOP_MFC_SYS_PWR_REG", CMU_CLKSTOP_MFC_SYS_PWR_REG, 0xFFFFFFFF}, - {"CMU_CLKSTOP_G3D_SYS_PWR_REG", CMU_CLKSTOP_G3D_SYS_PWR_REG, 0xFFFFFFFF}, - {"CMU_CLKSTOP_LCD0_SYS_PWR_REG", CMU_CLKSTOP_LCD0_SYS_PWR_REG, 0xFFFFFFFF}, - {"CMU_CLKSTOP_LCD1_SYS_PWR_REG", CMU_CLKSTOP_LCD1_SYS_PWR_REG, 0xFFFFFFFF}, - {"CMU_CLKSTOP_MAUDIO_SYS_PWR_REG", CMU_CLKSTOP_MAUDIO_SYS_PWR_REG, - 0xFFFFFFFF}, - {"CMU_CLKSTOP_GPS_SYS_PWR_REG", CMU_CLKSTOP_GPS_SYS_PWR_REG, 0xFFFFFFFF}, - {"CMU_RESET_CAM_SYS_PWR_REG", CMU_RESET_CAM_SYS_PWR_REG, 0xFFFFFFFF}, - {"CMU_RESET_TV_SYS_PWR_REG", CMU_RESET_TV_SYS_PWR_REG, 0xFFFFFFFF}, - {"CMU_RESET_MFC_SYS_PWR_REG", CMU_RESET_MFC_SYS_PWR_REG, 0xFFFFFFFF}, - {"CMU_RESET_G3D_SYS_PWR_REG", CMU_RESET_G3D_SYS_PWR_REG, 0xFFFFFFFF}, - {"CMU_RESET_LCD0_SYS_PWR_REG", CMU_RESET_LCD0_SYS_PWR_REG, 0xFFFFFFFF}, - {"CMU_RESET_LCD1_SYS_PWR_REG", CMU_RESET_LCD1_SYS_PWR_REG, 0xFFFFFFFF}, - {"CMU_RESET_MAUDIO_SYS_PWR_REG", CMU_RESET_MAUDIO_SYS_PWR_REG, 0xFFFFFFFF}, - {"CMU_RESET_GPS_SYS_PWR_REG", CMU_RESET_GPS_SYS_PWR_REG, 0xFFFFFFFF}, - {"TOP_BUS_SYS_PWR_REG", TOP_BUS_SYS_PWR_REG, 0xFFFFFFFF}, - {"TOP_RETENTION_SYS_PWR_REG", TOP_RETENTION_SYS_PWR_REG, 0xFFFFFFFF}, - {"TOP_PWR_SYS_PWR_REG", TOP_PWR_SYS_PWR_REG, 0xFFFFFFFF}, - {"LOGIC_RESET_SYS_PWR_REG", LOGIC_RESET_SYS_PWR_REG, 0xFFFFFFFF}, - {"OneNANDXL_MEM_SYS_PWR_REG", OneNANDXL_MEM_SYS_PWR_REG, 0xFFFFFFFF}, - {"MODEMIF_MEM_SYS_PWR_REG", MODEMIF_MEM_SYS_PWR_REG, 0xFFFFFFFF}, - {"USBDEVICE_MEM_SYS_PWR_REG", USBDEVICE_MEM_SYS_PWR_REG, 0xFFFFFFFF}, - {"SDMMC_MEM_SYS_PWR_REG", SDMMC_MEM_SYS_PWR_REG, 0xFFFFFFFF}, - {"CSSYS_MEM_SYS_PWR_REG", CSSYS_MEM_SYS_PWR_REG, 0xFFFFFFFF}, - {"SECSS_MEM_SYS_PWR_REG", SECSS_MEM_SYS_PWR_REG, 0xFFFFFFFF}, - {"PCIe_MEM_SYS_PWR_REG", PCIe_MEM_SYS_PWR_REG, 0xFFFFFFFF}, - {"SATA_MEM_SYS_PWR_REG", SATA_MEM_SYS_PWR_REG, 0xFFFFFFFF}, - {"PAD_RETENTION_DRAM_SYS_PWR_REG", PAD_RETENTION_DRAM_SYS_PWR_REG, - 0xFFFFFFFF}, - {"PAD_RETENTION_MAUDIO_SYS_PWR_REG", PAD_RETENTION_MAUDIO_SYS_PWR_REG, - 0xFFFFFFFF}, - {"PAD_RETENTION_GPIO_SYS_PWR_REG", PAD_RETENTION_GPIO_SYS_PWR_REG, - 0xFFFFFFFF}, - {"PAD_RETENTION_UART_SYS_PWR_REG", PAD_RETENTION_UART_SYS_PWR_REG, - 0xFFFFFFFF}, - {"PAD_RETENTION_MMCA_SYS_PWR_REG", PAD_RETENTION_MMCA_SYS_PWR_REG, - 0xFFFFFFFF}, - {"PAD_RETENTION_MMCB_SYS_PWR_REG", PAD_RETENTION_MMCB_SYS_PWR_REG, - 0xFFFFFFFF}, - {"PAD_RETENTION_EBIA_SYS_PWR_REG", PAD_RETENTION_EBIA_SYS_PWR_REG, - 0xFFFFFFFF}, - {"PAD_RETENTION_EBIB_SYS_PWR_REG", PAD_RETENTION_EBIB_SYS_PWR_REG, - 0xFFFFFFFF}, - {"PAD_ISOLATION_SYS_PWR_REG", PAD_ISOLATION_SYS_PWR_REG, 0xFFFFFFFF}, - {"PAD_ALV_SEL_SYS_PWR_REG", PAD_ALV_SEL_SYS_PWR_REG, 0xFFFFFFFF}, - {"XUSBXTI_SYS_PWR_REG", XUSBXTI_SYS_PWR_REG, 0xFFFFFFFF}, - {"XXTI_SYS_PWR_REG", XXTI_SYS_PWR_REG, 0xFFFFFFFF}, - {"EXT_REGULATOR_SYS_PWR_REG", EXT_REGULATOR_SYS_PWR_REG, 0xFFFFFFFF}, - {"GPIO_MODE_SYS_PWR_REG", GPIO_MODE_SYS_PWR_REG, 0xFFFFFFFF}, - {"GPIO_MODE_MAUDIO_SYS_PWR_REG", GPIO_MODE_MAUDIO_SYS_PWR_REG, 0xFFFFFFFF}, - {"CAM_SYS_PWR_REG", CAM_SYS_PWR_REG, 0xFFFFFFFF}, - {"TV_SYS_PWR_REG", TV_SYS_PWR_REG, 0xFFFFFFFF}, - {"MFC_SYS_PWR_REG", MFC_SYS_PWR_REG, 0xFFFFFFFF}, - {"G3D_SYS_PWR_REG", G3D_SYS_PWR_REG, 0xFFFFFFFF}, - {"LCD0_SYS_PWR_REG", LCD0_SYS_PWR_REG, 0xFFFFFFFF}, - {"LCD1_SYS_PWR_REG", LCD1_SYS_PWR_REG, 0xFFFFFFFF}, - {"MAUDIO_SYS_PWR_REG", MAUDIO_SYS_PWR_REG, 0xFFFFFFFF}, - {"GPS_SYS_PWR_REG", GPS_SYS_PWR_REG, 0xFFFFFFFF}, - {"GPS_ALIVE_SYS_PWR_REG", GPS_ALIVE_SYS_PWR_REG, 0xFFFFFFFF}, - {"ARM_CORE0_CONFIGURATION", ARM_CORE0_CONFIGURATION, 0x00000003}, - {"ARM_CORE0_STATUS", ARM_CORE0_STATUS, 0x00030003}, - {"ARM_CORE0_OPTION", ARM_CORE0_OPTION, 0x01010001}, - {"ARM_CORE1_CONFIGURATION", ARM_CORE1_CONFIGURATION, 0x00000003}, - {"ARM_CORE1_STATUS", ARM_CORE1_STATUS, 0x00030003}, - {"ARM_CORE1_OPTION", ARM_CORE1_OPTION, 0x01010001}, - {"ARM_COMMON_OPTION", ARM_COMMON_OPTION, 0x00000001}, - {"ARM_CPU_L2_0_CONFIGURATION", ARM_CPU_L2_0_CONFIGURATION, 0x00000003}, - {"ARM_CPU_L2_0_STATUS", ARM_CPU_L2_0_STATUS, 0x00000003}, - {"ARM_CPU_L2_1_CONFIGURATION", ARM_CPU_L2_1_CONFIGURATION, 0x00000003}, - {"ARM_CPU_L2_1_STATUS", ARM_CPU_L2_1_STATUS, 0x00000003}, - {"PAD_RETENTION_MAUDIO_OPTION", PAD_RETENTION_MAUDIO_OPTION, 0x00000000}, - {"PAD_RETENTION_GPIO_OPTION", PAD_RETENTION_GPIO_OPTION, 0x00000000}, - {"PAD_RETENTION_UART_OPTION", PAD_RETENTION_UART_OPTION, 0x00000000}, - {"PAD_RETENTION_MMCA_OPTION", PAD_RETENTION_MMCA_OPTION, 0x00000000}, - {"PAD_RETENTION_MMCB_OPTION", PAD_RETENTION_MMCB_OPTION, 0x00000000}, - {"PAD_RETENTION_EBIA_OPTION", PAD_RETENTION_EBIA_OPTION, 0x00000000}, - {"PAD_RETENTION_EBIB_OPTION", PAD_RETENTION_EBIB_OPTION, 0x00000000}, - {"PS_HOLD_CONTROL", PS_HOLD_CONTROL, 0x00005200}, - {"XUSBXTI_CONFIGURATION", XUSBXTI_CONFIGURATION, 0x00000001}, - {"XUSBXTI_STATUS", XUSBXTI_STATUS, 0x00000001}, - {"XUSBXTI_DURATION", XUSBXTI_DURATION, 0xFFF00000}, - {"XXTI_CONFIGURATION", XXTI_CONFIGURATION, 0x00000001}, - {"XXTI_STATUS", XXTI_STATUS, 0x00000001}, - {"XXTI_DURATION", XXTI_DURATION, 0xFFF00000}, - {"EXT_REGULATOR_DURATION", EXT_REGULATOR_DURATION, 0xFFF03FFF}, - {"CAM_CONFIGURATION", CAM_CONFIGURATION, 0x00000007}, - {"CAM_STATUS", CAM_STATUS, 0x00060007}, - {"CAM_OPTION", CAM_OPTION, 0x00000001}, - {"TV_CONFIGURATION", TV_CONFIGURATION, 0x00000007}, - {"TV_STATUS", TV_STATUS, 0x00060007}, - {"TV_OPTION", TV_OPTION, 0x00000001}, - {"MFC_CONFIGURATION", MFC_CONFIGURATION, 0x00000007}, - {"MFC_STATUS", MFC_STATUS, 0x00060007}, - {"MFC_OPTION", MFC_OPTION, 0x00000001}, - {"G3D_CONFIGURATION", G3D_CONFIGURATION, 0x00000007}, - {"G3D_STATUS", G3D_STATUS, 0x00060007}, - {"G3D_OPTION", G3D_OPTION, 0x00000001}, - {"LCD0_CONFIGURATION", LCD0_CONFIGURATION, 0x00000007}, - {"LCD0_STATUS", LCD0_STATUS, 0x00060007}, - {"LCD0_OPTION", LCD0_OPTION, 0x00000001}, - {"LCD1_CONFIGURATION", LCD1_CONFIGURATION, 0x00000007}, - {"LCD1_STATUS", LCD1_STATUS, 0x00060007}, - {"LCD1_OPTION", LCD1_OPTION, 0x00000001}, - {"GPS_CONFIGURATION", GPS_CONFIGURATION, 0x00000007}, - {"GPS_STATUS", GPS_STATUS, 0x00060007}, - {"GPS_OPTION", GPS_OPTION, 0x00000001}, - {"GPS_ALIVE_CONFIGURATION", GPS_ALIVE_CONFIGURATION, 0x00000007}, - {"GPS_ALIVE_STATUS", GPS_ALIVE_STATUS, 0x00060007}, - {"GPS_ALIVE_OPTION", GPS_ALIVE_OPTION, 0x00000001}, + { "OM_STAT", OM_STAT, 0x00000000 }, + { "RTC_CLKO_SEL", RTC_CLKO_SEL, 0x00000000 }, + { "GNSS_RTC_OUT_CTRL", GNSS_RTC_OUT_CTRL, 0x00000001 }, + { "SYSTEM_POWER_DOWN_CTRL", SYSTEM_POWER_DOWN_CTRL, 0x00010000 }, + { "SYSTEM_POWER_DOWN_OPTION", SYSTEM_POWER_DOWN_OPTION, 0x03030000 }, + { "SWRESET", SWRESET, 0x00000000 }, + { "RST_STAT", RST_STAT, 0x00000000 }, + { "WAKEUP_STAT", WAKEUP_STAT, 0x00000000 }, + { "EINT_WAKEUP_MASK", EINT_WAKEUP_MASK, 0x00000000 }, + { "WAKEUP_MASK", WAKEUP_MASK, 0x00000000 }, + { "HDMI_PHY_CONTROL", HDMI_PHY_CONTROL, 0x00960000 }, + { "USBDEVICE_PHY_CONTROL", USBDEVICE_PHY_CONTROL, 0x00000000 }, + { "USBHOST_PHY_CONTROL", USBHOST_PHY_CONTROL, 0x00000000 }, + { "DAC_PHY_CONTROL", DAC_PHY_CONTROL, 0x00000000 }, + { "MIPI_PHY0_CONTROL", MIPI_PHY0_CONTROL, 0x00000000 }, + { "MIPI_PHY1_CONTROL", MIPI_PHY1_CONTROL, 0x00000000 }, + { "ADC_PHY_CONTROL", ADC_PHY_CONTROL, 0x00000001 }, + { "PCIe_PHY_CONTROL", PCIe_PHY_CONTROL, 0x00000000 }, + { "SATA_PHY_CONTROL", SATA_PHY_CONTROL, 0x00000000 }, + { "INFORM0", INFORM0, 0x00000000 }, + { "INFORM1", INFORM1, 0x00000000 }, + { "INFORM2", INFORM2, 0x00000000 }, + { "INFORM3", INFORM3, 0x00000000 }, + { "INFORM4", INFORM4, 0x00000000 }, + { "INFORM5", INFORM5, 0x00000000 }, + { "INFORM6", INFORM6, 0x00000000 }, + { "INFORM7", INFORM7, 0x00000000 }, + { "PMU_DEBUG", PMU_DEBUG, 0x00000000 }, + { "ARM_CORE0_SYS_PWR_REG", ARM_CORE0_SYS_PWR_REG, 0xFFFFFFFF }, + { "ARM_CORE1_SYS_PWR_REG", ARM_CORE1_SYS_PWR_REG, 0xFFFFFFFF }, + { "ARM_COMMON_SYS_PWR_REG", ARM_COMMON_SYS_PWR_REG, 0xFFFFFFFF }, + { "ARM_CPU_L2_0_SYS_PWR_REG", ARM_CPU_L2_0_SYS_PWR_REG, 0xFFFFFFFF }, + { "ARM_CPU_L2_1_SYS_PWR_REG", ARM_CPU_L2_1_SYS_PWR_REG, 0xFFFFFFFF }, + { "CMU_ACLKSTOP_SYS_PWR_REG", CMU_ACLKSTOP_SYS_PWR_REG, 0xFFFFFFFF }, + { "CMU_SCLKSTOP_SYS_PWR_REG", CMU_SCLKSTOP_SYS_PWR_REG, 0xFFFFFFFF }, + { "CMU_RESET_SYS_PWR_REG", CMU_RESET_SYS_PWR_REG, 0xFFFFFFFF }, + { "APLL_SYSCLK_SYS_PWR_REG", APLL_SYSCLK_SYS_PWR_REG, 0xFFFFFFFF }, + { "MPLL_SYSCLK_SYS_PWR_REG", MPLL_SYSCLK_SYS_PWR_REG, 0xFFFFFFFF }, + { "VPLL_SYSCLK_SYS_PWR_REG", VPLL_SYSCLK_SYS_PWR_REG, 0xFFFFFFFF }, + { "EPLL_SYSCLK_SYS_PWR_REG", EPLL_SYSCLK_SYS_PWR_REG, 0xFFFFFFFF }, + { "CMU_CLKSTOP_GPS_ALIVE_SYS_PWR_REG", CMU_CLKSTOP_GPS_ALIVE_SYS_PWR_REG, + 0xFFFFFFFF }, + { "CMU_RESET_GPS_ALIVE_SYS_PWR_REG", CMU_RESET_GPS_ALIVE_SYS_PWR_REG, + 0xFFFFFFFF }, + { "CMU_CLKSTOP_CAM_SYS_PWR_REG", CMU_CLKSTOP_CAM_SYS_PWR_REG, 0xFFFFFFFF }, + { "CMU_CLKSTOP_TV_SYS_PWR_REG", CMU_CLKSTOP_TV_SYS_PWR_REG, 0xFFFFFFFF }, + { "CMU_CLKSTOP_MFC_SYS_PWR_REG", CMU_CLKSTOP_MFC_SYS_PWR_REG, 0xFFFFFFFF }, + { "CMU_CLKSTOP_G3D_SYS_PWR_REG", CMU_CLKSTOP_G3D_SYS_PWR_REG, 0xFFFFFFFF }, + { "CMU_CLKSTOP_LCD0_SYS_PWR_REG", CMU_CLKSTOP_LCD0_SYS_PWR_REG, + 0xFFFFFFFF }, + { "CMU_CLKSTOP_LCD1_SYS_PWR_REG", CMU_CLKSTOP_LCD1_SYS_PWR_REG, + 0xFFFFFFFF }, + { "CMU_CLKSTOP_MAUDIO_SYS_PWR_REG", CMU_CLKSTOP_MAUDIO_SYS_PWR_REG, + 0xFFFFFFFF }, + { "CMU_CLKSTOP_GPS_SYS_PWR_REG", CMU_CLKSTOP_GPS_SYS_PWR_REG, 0xFFFFFFFF }, + { "CMU_RESET_CAM_SYS_PWR_REG", CMU_RESET_CAM_SYS_PWR_REG, 0xFFFFFFFF }, + { "CMU_RESET_TV_SYS_PWR_REG", CMU_RESET_TV_SYS_PWR_REG, 0xFFFFFFFF }, + { "CMU_RESET_MFC_SYS_PWR_REG", CMU_RESET_MFC_SYS_PWR_REG, 0xFFFFFFFF }, + { "CMU_RESET_G3D_SYS_PWR_REG", CMU_RESET_G3D_SYS_PWR_REG, 0xFFFFFFFF }, + { "CMU_RESET_LCD0_SYS_PWR_REG", CMU_RESET_LCD0_SYS_PWR_REG, 0xFFFFFFFF }, + { "CMU_RESET_LCD1_SYS_PWR_REG", CMU_RESET_LCD1_SYS_PWR_REG, 0xFFFFFFFF }, + { "CMU_RESET_MAUDIO_SYS_PWR_REG", CMU_RESET_MAUDIO_SYS_PWR_REG, + 0xFFFFFFFF }, + { "CMU_RESET_GPS_SYS_PWR_REG", CMU_RESET_GPS_SYS_PWR_REG, 0xFFFFFFFF }, + { "TOP_BUS_SYS_PWR_REG", TOP_BUS_SYS_PWR_REG, 0xFFFFFFFF }, + { "TOP_RETENTION_SYS_PWR_REG", TOP_RETENTION_SYS_PWR_REG, 0xFFFFFFFF }, + { "TOP_PWR_SYS_PWR_REG", TOP_PWR_SYS_PWR_REG, 0xFFFFFFFF }, + { "LOGIC_RESET_SYS_PWR_REG", LOGIC_RESET_SYS_PWR_REG, 0xFFFFFFFF }, + { "OneNANDXL_MEM_SYS_PWR_REG", OneNANDXL_MEM_SYS_PWR_REG, 0xFFFFFFFF }, + { "MODEMIF_MEM_SYS_PWR_REG", MODEMIF_MEM_SYS_PWR_REG, 0xFFFFFFFF }, + { "USBDEVICE_MEM_SYS_PWR_REG", USBDEVICE_MEM_SYS_PWR_REG, 0xFFFFFFFF }, + { "SDMMC_MEM_SYS_PWR_REG", SDMMC_MEM_SYS_PWR_REG, 0xFFFFFFFF }, + { "CSSYS_MEM_SYS_PWR_REG", CSSYS_MEM_SYS_PWR_REG, 0xFFFFFFFF }, + { "SECSS_MEM_SYS_PWR_REG", SECSS_MEM_SYS_PWR_REG, 0xFFFFFFFF }, + { "PCIe_MEM_SYS_PWR_REG", PCIe_MEM_SYS_PWR_REG, 0xFFFFFFFF }, + { "SATA_MEM_SYS_PWR_REG", SATA_MEM_SYS_PWR_REG, 0xFFFFFFFF }, + { "PAD_RETENTION_DRAM_SYS_PWR_REG", PAD_RETENTION_DRAM_SYS_PWR_REG, + 0xFFFFFFFF }, + { "PAD_RETENTION_MAUDIO_SYS_PWR_REG", PAD_RETENTION_MAUDIO_SYS_PWR_REG, + 0xFFFFFFFF }, + { "PAD_RETENTION_GPIO_SYS_PWR_REG", PAD_RETENTION_GPIO_SYS_PWR_REG, + 0xFFFFFFFF }, + { "PAD_RETENTION_UART_SYS_PWR_REG", PAD_RETENTION_UART_SYS_PWR_REG, + 0xFFFFFFFF }, + { "PAD_RETENTION_MMCA_SYS_PWR_REG", PAD_RETENTION_MMCA_SYS_PWR_REG, + 0xFFFFFFFF }, + { "PAD_RETENTION_MMCB_SYS_PWR_REG", PAD_RETENTION_MMCB_SYS_PWR_REG, + 0xFFFFFFFF }, + { "PAD_RETENTION_EBIA_SYS_PWR_REG", PAD_RETENTION_EBIA_SYS_PWR_REG, + 0xFFFFFFFF }, + { "PAD_RETENTION_EBIB_SYS_PWR_REG", PAD_RETENTION_EBIB_SYS_PWR_REG, + 0xFFFFFFFF }, + { "PAD_ISOLATION_SYS_PWR_REG", PAD_ISOLATION_SYS_PWR_REG, 0xFFFFFFFF }, + { "PAD_ALV_SEL_SYS_PWR_REG", PAD_ALV_SEL_SYS_PWR_REG, 0xFFFFFFFF }, + { "XUSBXTI_SYS_PWR_REG", XUSBXTI_SYS_PWR_REG, 0xFFFFFFFF }, + { "XXTI_SYS_PWR_REG", XXTI_SYS_PWR_REG, 0xFFFFFFFF }, + { "EXT_REGULATOR_SYS_PWR_REG", EXT_REGULATOR_SYS_PWR_REG, 0xFFFFFFFF }, + { "GPIO_MODE_SYS_PWR_REG", GPIO_MODE_SYS_PWR_REG, 0xFFFFFFFF }, + { "GPIO_MODE_MAUDIO_SYS_PWR_REG", GPIO_MODE_MAUDIO_SYS_PWR_REG, + 0xFFFFFFFF }, + { "CAM_SYS_PWR_REG", CAM_SYS_PWR_REG, 0xFFFFFFFF }, + { "TV_SYS_PWR_REG", TV_SYS_PWR_REG, 0xFFFFFFFF }, + { "MFC_SYS_PWR_REG", MFC_SYS_PWR_REG, 0xFFFFFFFF }, + { "G3D_SYS_PWR_REG", G3D_SYS_PWR_REG, 0xFFFFFFFF }, + { "LCD0_SYS_PWR_REG", LCD0_SYS_PWR_REG, 0xFFFFFFFF }, + { "LCD1_SYS_PWR_REG", LCD1_SYS_PWR_REG, 0xFFFFFFFF }, + { "MAUDIO_SYS_PWR_REG", MAUDIO_SYS_PWR_REG, 0xFFFFFFFF }, + { "GPS_SYS_PWR_REG", GPS_SYS_PWR_REG, 0xFFFFFFFF }, + { "GPS_ALIVE_SYS_PWR_REG", GPS_ALIVE_SYS_PWR_REG, 0xFFFFFFFF }, + { "ARM_CORE0_CONFIGURATION", ARM_CORE0_CONFIGURATION, 0x00000003 }, + { "ARM_CORE0_STATUS", ARM_CORE0_STATUS, 0x00030003 }, + { "ARM_CORE0_OPTION", ARM_CORE0_OPTION, 0x01010001 }, + { "ARM_CORE1_CONFIGURATION", ARM_CORE1_CONFIGURATION, 0x00000003 }, + { "ARM_CORE1_STATUS", ARM_CORE1_STATUS, 0x00030003 }, + { "ARM_CORE1_OPTION", ARM_CORE1_OPTION, 0x01010001 }, + { "ARM_COMMON_OPTION", ARM_COMMON_OPTION, 0x00000001 }, + { "ARM_CPU_L2_0_CONFIGURATION", ARM_CPU_L2_0_CONFIGURATION, 0x00000003 }, + { "ARM_CPU_L2_0_STATUS", ARM_CPU_L2_0_STATUS, 0x00000003 }, + { "ARM_CPU_L2_1_CONFIGURATION", ARM_CPU_L2_1_CONFIGURATION, 0x00000003 }, + { "ARM_CPU_L2_1_STATUS", ARM_CPU_L2_1_STATUS, 0x00000003 }, + { "PAD_RETENTION_MAUDIO_OPTION", PAD_RETENTION_MAUDIO_OPTION, 0x00000000 }, + { "PAD_RETENTION_GPIO_OPTION", PAD_RETENTION_GPIO_OPTION, 0x00000000 }, + { "PAD_RETENTION_UART_OPTION", PAD_RETENTION_UART_OPTION, 0x00000000 }, + { "PAD_RETENTION_MMCA_OPTION", PAD_RETENTION_MMCA_OPTION, 0x00000000 }, + { "PAD_RETENTION_MMCB_OPTION", PAD_RETENTION_MMCB_OPTION, 0x00000000 }, + { "PAD_RETENTION_EBIA_OPTION", PAD_RETENTION_EBIA_OPTION, 0x00000000 }, + { "PAD_RETENTION_EBIB_OPTION", PAD_RETENTION_EBIB_OPTION, 0x00000000 }, + { "PS_HOLD_CONTROL", PS_HOLD_CONTROL, 0x00005200 }, + { "XUSBXTI_CONFIGURATION", XUSBXTI_CONFIGURATION, 0x00000001 }, + { "XUSBXTI_STATUS", XUSBXTI_STATUS, 0x00000001 }, + { "XUSBXTI_DURATION", XUSBXTI_DURATION, 0xFFF00000 }, + { "XXTI_CONFIGURATION", XXTI_CONFIGURATION, 0x00000001 }, + { "XXTI_STATUS", XXTI_STATUS, 0x00000001 }, + { "XXTI_DURATION", XXTI_DURATION, 0xFFF00000 }, + { "EXT_REGULATOR_DURATION", EXT_REGULATOR_DURATION, 0xFFF03FFF }, + { "CAM_CONFIGURATION", CAM_CONFIGURATION, 0x00000007 }, + { "CAM_STATUS", CAM_STATUS, 0x00060007 }, + { "CAM_OPTION", CAM_OPTION, 0x00000001 }, + { "TV_CONFIGURATION", TV_CONFIGURATION, 0x00000007 }, + { "TV_STATUS", TV_STATUS, 0x00060007 }, + { "TV_OPTION", TV_OPTION, 0x00000001 }, + { "MFC_CONFIGURATION", MFC_CONFIGURATION, 0x00000007 }, + { "MFC_STATUS", MFC_STATUS, 0x00060007 }, + { "MFC_OPTION", MFC_OPTION, 0x00000001 }, + { "G3D_CONFIGURATION", G3D_CONFIGURATION, 0x00000007 }, + { "G3D_STATUS", G3D_STATUS, 0x00060007 }, + { "G3D_OPTION", G3D_OPTION, 0x00000001 }, + { "LCD0_CONFIGURATION", LCD0_CONFIGURATION, 0x00000007 }, + { "LCD0_STATUS", LCD0_STATUS, 0x00060007 }, + { "LCD0_OPTION", LCD0_OPTION, 0x00000001 }, + { "LCD1_CONFIGURATION", LCD1_CONFIGURATION, 0x00000007 }, + { "LCD1_STATUS", LCD1_STATUS, 0x00060007 }, + { "LCD1_OPTION", LCD1_OPTION, 0x00000001 }, + { "GPS_CONFIGURATION", GPS_CONFIGURATION, 0x00000007 }, + { "GPS_STATUS", GPS_STATUS, 0x00060007 }, + { "GPS_OPTION", GPS_OPTION, 0x00000001 }, + { "GPS_ALIVE_CONFIGURATION", GPS_ALIVE_CONFIGURATION, 0x00000007 }, + { "GPS_ALIVE_STATUS", GPS_ALIVE_STATUS, 0x00060007 }, + { "GPS_ALIVE_OPTION", GPS_ALIVE_OPTION, 0x00000001 }, }; -#define PMU_NUM_OF_REGISTERS \ +#define PMU_NUM_OF_REGISTERS \ (sizeof(exynos4210_pmu_regs) / sizeof(Exynos4210PmuReg)) typedef struct Exynos4210PmuState { SysBusDevice busdev; MemoryRegion iomem; - uint32_t reg[PMU_NUM_OF_REGISTERS]; + uint32_t reg[PMU_NUM_OF_REGISTERS]; } Exynos4210PmuState; static uint64_t exynos4210_pmu_read(void *opaque, target_phys_addr_t offset, @@ -468,7 +472,7 @@ static const VMStateDescription exynos4210_pmu_vmstate = { .name = "exynos4210.pmu", .version_id = 1, .minimum_version_id = 1, - .fields = (VMStateField[]) { + .fields = (VMStateField[]) { VMSTATE_UINT32_ARRAY(reg, Exynos4210PmuState, PMU_NUM_OF_REGISTERS), VMSTATE_END_OF_LIST() } @@ -479,9 +483,9 @@ static void exynos4210_pmu_class_init(ObjectClass *klass, void *data) DeviceClass *dc = DEVICE_CLASS(klass); SysBusDeviceClass *k = SYS_BUS_DEVICE_CLASS(klass); - k->init = exynos4210_pmu_init; + k->init = exynos4210_pmu_init; dc->reset = exynos4210_pmu_reset; - dc->vmsd = &exynos4210_pmu_vmstate; + dc->vmsd = &exynos4210_pmu_vmstate; } static TypeInfo exynos4210_pmu_info = { -- 1.7.5.4 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH v2 2/4] ARM: exynos4210_pmu: changes in PRINT_DEBUG macro set. 2012-07-12 16:54 [Qemu-devel] [PATCH v2 0/4] ARM: exynos4210 PMU modifications Maksim Kozlov 2012-07-12 16:54 ` [Qemu-devel] [PATCH v2 1/4] ARM: exynos4210_pmu: just formatting changes Maksim Kozlov @ 2012-07-12 16:54 ` Maksim Kozlov 2012-07-12 16:54 ` [Qemu-devel] [PATCH v2 3/4] ARM: exynos4210_pmu: Introduced exynos4210_pmu_get_register_index Maksim Kozlov 2012-07-12 16:54 ` [Qemu-devel] [PATCH v2 4/4] ARM: exynos4210_pmu: Add software reset support Maksim Kozlov 3 siblings, 0 replies; 9+ messages in thread From: Maksim Kozlov @ 2012-07-12 16:54 UTC (permalink / raw) To: qemu-devel; +Cc: peter.maydell, kyungmin.park, Maksim Kozlov, e.voevodin It make possible to set DEBUG_PMU and DEBUG_PMU_EXTEND independently of each other Signed-off-by: Maksim Kozlov <m.kozlov@samsung.com> --- hw/exynos4210_pmu.c | 23 +++++++++++++++++------ 1 files changed, 17 insertions(+), 6 deletions(-) diff --git a/hw/exynos4210_pmu.c b/hw/exynos4210_pmu.c index 2be7e08..26a726f 100644 --- a/hw/exynos4210_pmu.c +++ b/hw/exynos4210_pmu.c @@ -34,26 +34,37 @@ #define DEBUG_PMU_EXTEND 0 #endif -#if DEBUG_PMU -#define PRINT_DEBUG(fmt, args...) \ +#if DEBUG_PMU || DEBUG_PMU_EXTEND + + #define PRINT_DEBUG(fmt, args...) \ do { \ fprintf(stderr, " [%s:%d] "fmt, __func__, __LINE__, ##args); \ } while (0) #if DEBUG_PMU_EXTEND -#define PRINT_DEBUG_EXTEND(fmt, args...) \ + + #define PRINT_DEBUG_EXTEND(fmt, args...) \ do { \ fprintf(stderr, " [%s:%d] "fmt, __func__, __LINE__, ##args); \ } while (0) #else -#define PRINT_DEBUG_EXTEND(fmt, args...) do {} while (0) + #define PRINT_DEBUG_EXTEND(fmt, args...) \ + do {} while (0) #endif /* EXTEND */ #else -#define PRINT_DEBUG(fmt, args...) do {} while (0) -#define PRINT_DEBUG_EXTEND(fmt, args...) do {} while (0) + #define PRINT_DEBUG(fmt, args...) \ + do {} while (0) + #define PRINT_DEBUG_EXTEND(fmt, args...) \ + do {} while (0) #endif +#define PRINT_ERROR(fmt, args...) \ + do { \ + fprintf(stderr, " [%s:%d] "fmt, __func__, __LINE__, ##args); \ + } while (0) + + /* * Offsets for PMU registers */ -- 1.7.5.4 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH v2 3/4] ARM: exynos4210_pmu: Introduced exynos4210_pmu_get_register_index 2012-07-12 16:54 [Qemu-devel] [PATCH v2 0/4] ARM: exynos4210 PMU modifications Maksim Kozlov 2012-07-12 16:54 ` [Qemu-devel] [PATCH v2 1/4] ARM: exynos4210_pmu: just formatting changes Maksim Kozlov 2012-07-12 16:54 ` [Qemu-devel] [PATCH v2 2/4] ARM: exynos4210_pmu: changes in PRINT_DEBUG macro set Maksim Kozlov @ 2012-07-12 16:54 ` Maksim Kozlov 2012-07-12 16:54 ` [Qemu-devel] [PATCH v2 4/4] ARM: exynos4210_pmu: Add software reset support Maksim Kozlov 3 siblings, 0 replies; 9+ messages in thread From: Maksim Kozlov @ 2012-07-12 16:54 UTC (permalink / raw) To: qemu-devel; +Cc: peter.maydell, kyungmin.park, Maksim Kozlov, e.voevodin This patch just introduces exynos4210_pmu_get_register_index function to get index of the register's value in the array on its offset. And functions _read and _write were modified accordingly. Signed-off-by: Maksim Kozlov <m.kozlov@samsung.com> --- hw/exynos4210_pmu.c | 56 ++++++++++++++++++++++++++++++++------------------ 1 files changed, 36 insertions(+), 20 deletions(-) diff --git a/hw/exynos4210_pmu.c b/hw/exynos4210_pmu.c index 26a726f..7f09c79 100644 --- a/hw/exynos4210_pmu.c +++ b/hw/exynos4210_pmu.c @@ -401,48 +401,64 @@ static const Exynos4210PmuReg exynos4210_pmu_regs[] = { #define PMU_NUM_OF_REGISTERS \ (sizeof(exynos4210_pmu_regs) / sizeof(Exynos4210PmuReg)) +#define PMU_UNKNOWN_OFFSET 0xFFFFFFFF + typedef struct Exynos4210PmuState { SysBusDevice busdev; MemoryRegion iomem; uint32_t reg[PMU_NUM_OF_REGISTERS]; } Exynos4210PmuState; -static uint64_t exynos4210_pmu_read(void *opaque, target_phys_addr_t offset, - unsigned size) +static uint32_t exynos4210_pmu_get_register_index(Exynos4210PmuState *s, + uint32_t offset) { - Exynos4210PmuState *s = (Exynos4210PmuState *)opaque; - unsigned i; const Exynos4210PmuReg *reg_p = exynos4210_pmu_regs; + uint32_t i; for (i = 0; i < PMU_NUM_OF_REGISTERS; i++) { if (reg_p->offset == offset) { - PRINT_DEBUG_EXTEND("%s [0x%04x] -> 0x%04x\n", reg_p->name, - (uint32_t)offset, s->reg[i]); - return s->reg[i]; + return i; } reg_p++; } - PRINT_DEBUG("QEMU PMU ERROR: bad read offset 0x%04x\n", (uint32_t)offset); - return 0; + + return PMU_UNKNOWN_OFFSET; +} + +static uint64_t exynos4210_pmu_read(void *opaque, target_phys_addr_t offset, + unsigned size) +{ + Exynos4210PmuState *s = (Exynos4210PmuState *)opaque; + uint32_t index = exynos4210_pmu_get_register_index(s, offset); + + if (index == PMU_UNKNOWN_OFFSET) { + PRINT_DEBUG("QEMU PMU ERROR: bad read offset 0x%04x\n", + (uint32_t)offset); + return 0; + } + + PRINT_DEBUG_EXTEND("%s [0x%04x] -> 0x%04x\n", + exynos4210_pmu_regs[index].name, (uint32_t)offset, s->reg[index]); + + return s->reg[index]; } static void exynos4210_pmu_write(void *opaque, target_phys_addr_t offset, uint64_t val, unsigned size) { Exynos4210PmuState *s = (Exynos4210PmuState *)opaque; - unsigned i; - const Exynos4210PmuReg *reg_p = exynos4210_pmu_regs; + uint32_t index = exynos4210_pmu_get_register_index(s, offset); - for (i = 0; i < PMU_NUM_OF_REGISTERS; i++) { - if (reg_p->offset == offset) { - PRINT_DEBUG_EXTEND("%s <0x%04x> <- 0x%04x\n", reg_p->name, - (uint32_t)offset, (uint32_t)val); - s->reg[i] = val; - return; - } - reg_p++; + if (index == PMU_UNKNOWN_OFFSET) { + PRINT_DEBUG("QEMU PMU ERROR: bad write offset 0x%04x\n", + (uint32_t)offset); + return; } - PRINT_DEBUG("QEMU PMU ERROR: bad write offset 0x%04x\n", (uint32_t)offset); + + PRINT_DEBUG_EXTEND("%s [0x%04x] <- 0x%04x\n", + exynos4210_pmu_regs[index].name, (uint32_t)offset, (uint32_t)val); + + s->reg[index] = val; } static const MemoryRegionOps exynos4210_pmu_ops = { -- 1.7.5.4 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* [Qemu-devel] [PATCH v2 4/4] ARM: exynos4210_pmu: Add software reset support 2012-07-12 16:54 [Qemu-devel] [PATCH v2 0/4] ARM: exynos4210 PMU modifications Maksim Kozlov ` (2 preceding siblings ...) 2012-07-12 16:54 ` [Qemu-devel] [PATCH v2 3/4] ARM: exynos4210_pmu: Introduced exynos4210_pmu_get_register_index Maksim Kozlov @ 2012-07-12 16:54 ` Maksim Kozlov 2012-07-20 14:32 ` Peter Maydell 3 siblings, 1 reply; 9+ messages in thread From: Maksim Kozlov @ 2012-07-12 16:54 UTC (permalink / raw) To: qemu-devel; +Cc: peter.maydell, kyungmin.park, Maksim Kozlov, e.voevodin Signed-off-by: Maksim Kozlov <m.kozlov@samsung.com> --- hw/exynos4210_pmu.c | 40 +++++++++++++++++++++++++++++++++------- 1 files changed, 33 insertions(+), 7 deletions(-) diff --git a/hw/exynos4210_pmu.c b/hw/exynos4210_pmu.c index 7f09c79..96588d9 100644 --- a/hw/exynos4210_pmu.c +++ b/hw/exynos4210_pmu.c @@ -18,13 +18,8 @@ * with this program; if not, see <http://www.gnu.org/licenses/>. */ -/* - * This model implements PMU registers just as a bulk of memory. Currently, - * the only reason this device exists is that secondary CPU boot loader - * uses PMU INFORM5 register as a holding pen. - */ - #include "sysbus.h" +#include "sysemu.h" #ifndef DEBUG_PMU #define DEBUG_PMU 0 @@ -230,6 +225,8 @@ #define EXYNOS4210_PMU_REGS_MEM_SIZE 0x3d0c +#define SWRESET_SYSTEM_MASK 0x00000001 + typedef struct Exynos4210PmuReg { const char *name; /* for debug only */ uint32_t offset; @@ -458,7 +455,17 @@ static void exynos4210_pmu_write(void *opaque, target_phys_addr_t offset, PRINT_DEBUG_EXTEND("%s [0x%04x] <- 0x%04x\n", exynos4210_pmu_regs[index].name, (uint32_t)offset, (uint32_t)val); - s->reg[index] = val; + switch (offset) { + case SWRESET: + if (val & SWRESET_SYSTEM_MASK) { + s->reg[index] = val; + qemu_system_reset_request(); + } + break; + default: + s->reg[index] = val; + break; + } } static const MemoryRegionOps exynos4210_pmu_ops = { @@ -477,9 +484,28 @@ static void exynos4210_pmu_reset(DeviceState *dev) Exynos4210PmuState *s = container_of(dev, Exynos4210PmuState, busdev.qdev); unsigned i; + uint32_t index = exynos4210_pmu_get_register_index(s, SWRESET); + uint32_t swreset = s->reg[index]; /* Set default values for registers */ for (i = 0; i < PMU_NUM_OF_REGISTERS; i++) { + if (swreset) { + switch (exynos4210_pmu_regs[i].offset) { + case INFORM0: + case INFORM1: + case INFORM2: + case INFORM3: + case INFORM4: + case INFORM5: + case INFORM6: + case INFORM7: + case PS_HOLD_CONTROL: + /* keep these registers during SW reset */ + continue; + default: + break; + } + } s->reg[i] = exynos4210_pmu_regs[i].reset_value; } } -- 1.7.5.4 ^ permalink raw reply related [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] [PATCH v2 4/4] ARM: exynos4210_pmu: Add software reset support 2012-07-12 16:54 ` [Qemu-devel] [PATCH v2 4/4] ARM: exynos4210_pmu: Add software reset support Maksim Kozlov @ 2012-07-20 14:32 ` Peter Maydell 2012-07-23 6:38 ` Maksim Kozlov 2012-07-23 11:01 ` Maksim Kozlov 0 siblings, 2 replies; 9+ messages in thread From: Peter Maydell @ 2012-07-20 14:32 UTC (permalink / raw) To: Maksim Kozlov; +Cc: kyungmin.park, qemu-devel, e.voevodin On 12 July 2012 17:54, Maksim Kozlov <m.kozlov@samsung.com> wrote: > Signed-off-by: Maksim Kozlov <m.kozlov@samsung.com> > --- > hw/exynos4210_pmu.c | 40 +++++++++++++++++++++++++++++++++------- > 1 files changed, 33 insertions(+), 7 deletions(-) > > diff --git a/hw/exynos4210_pmu.c b/hw/exynos4210_pmu.c > index 7f09c79..96588d9 100644 > --- a/hw/exynos4210_pmu.c > +++ b/hw/exynos4210_pmu.c > @@ -18,13 +18,8 @@ > * with this program; if not, see <http://www.gnu.org/licenses/>. > */ > > -/* > - * This model implements PMU registers just as a bulk of memory. Currently, > - * the only reason this device exists is that secondary CPU boot loader > - * uses PMU INFORM5 register as a holding pen. > - */ > - > #include "sysbus.h" > +#include "sysemu.h" > > #ifndef DEBUG_PMU > #define DEBUG_PMU 0 > @@ -230,6 +225,8 @@ > > #define EXYNOS4210_PMU_REGS_MEM_SIZE 0x3d0c > > +#define SWRESET_SYSTEM_MASK 0x00000001 > + > typedef struct Exynos4210PmuReg { > const char *name; /* for debug only */ > uint32_t offset; > @@ -458,7 +455,17 @@ static void exynos4210_pmu_write(void *opaque, target_phys_addr_t offset, > PRINT_DEBUG_EXTEND("%s [0x%04x] <- 0x%04x\n", > exynos4210_pmu_regs[index].name, (uint32_t)offset, (uint32_t)val); > > - s->reg[index] = val; > + switch (offset) { > + case SWRESET: > + if (val & SWRESET_SYSTEM_MASK) { > + s->reg[index] = val; > + qemu_system_reset_request(); > + } > + break; > + default: > + s->reg[index] = val; > + break; > + } > } > > static const MemoryRegionOps exynos4210_pmu_ops = { > @@ -477,9 +484,28 @@ static void exynos4210_pmu_reset(DeviceState *dev) > Exynos4210PmuState *s = > container_of(dev, Exynos4210PmuState, busdev.qdev); > unsigned i; > + uint32_t index = exynos4210_pmu_get_register_index(s, SWRESET); > + uint32_t swreset = s->reg[index]; > > /* Set default values for registers */ > for (i = 0; i < PMU_NUM_OF_REGISTERS; i++) { > + if (swreset) { > + switch (exynos4210_pmu_regs[i].offset) { > + case INFORM0: > + case INFORM1: > + case INFORM2: > + case INFORM3: > + case INFORM4: > + case INFORM5: > + case INFORM6: > + case INFORM7: > + case PS_HOLD_CONTROL: > + /* keep these registers during SW reset */ > + continue; > + default: > + break; > + } > + } > s->reg[i] = exynos4210_pmu_regs[i].reset_value; > } > } This patch seems to be trying to make a distinction that QEMU doesn't support, ie between system wide "software reset" and system wide "hard reset". I'm not convinced about the wisdom of trying to paper over this lack with a single-device workaround. -- PMM ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] [PATCH v2 4/4] ARM: exynos4210_pmu: Add software reset support 2012-07-20 14:32 ` Peter Maydell @ 2012-07-23 6:38 ` Maksim Kozlov 2012-07-23 11:01 ` Maksim Kozlov 1 sibling, 0 replies; 9+ messages in thread From: Maksim Kozlov @ 2012-07-23 6:38 UTC (permalink / raw) To: Peter Maydell; +Cc: kyungmin.park, qemu-devel, e.voevodin 20.07.2012 18:32, Peter Maydell пишет: > On 12 July 2012 17:54, Maksim Kozlov<m.kozlov@samsung.com> wrote: >> Signed-off-by: Maksim Kozlov<m.kozlov@samsung.com> >> --- >> hw/exynos4210_pmu.c | 40 +++++++++++++++++++++++++++++++++------- >> 1 files changed, 33 insertions(+), 7 deletions(-) >> >> diff --git a/hw/exynos4210_pmu.c b/hw/exynos4210_pmu.c >> index 7f09c79..96588d9 100644 >> --- a/hw/exynos4210_pmu.c >> +++ b/hw/exynos4210_pmu.c >> @@ -18,13 +18,8 @@ >> * with this program; if not, see<http://www.gnu.org/licenses/>. >> */ >> >> -/* >> - * This model implements PMU registers just as a bulk of memory. Currently, >> - * the only reason this device exists is that secondary CPU boot loader >> - * uses PMU INFORM5 register as a holding pen. >> - */ >> - >> #include "sysbus.h" >> +#include "sysemu.h" >> >> #ifndef DEBUG_PMU >> #define DEBUG_PMU 0 >> @@ -230,6 +225,8 @@ >> >> #define EXYNOS4210_PMU_REGS_MEM_SIZE 0x3d0c >> >> +#define SWRESET_SYSTEM_MASK 0x00000001 >> + >> typedef struct Exynos4210PmuReg { >> const char *name; /* for debug only */ >> uint32_t offset; >> @@ -458,7 +455,17 @@ static void exynos4210_pmu_write(void *opaque, target_phys_addr_t offset, >> PRINT_DEBUG_EXTEND("%s [0x%04x]<- 0x%04x\n", >> exynos4210_pmu_regs[index].name, (uint32_t)offset, (uint32_t)val); >> >> - s->reg[index] = val; >> + switch (offset) { >> + case SWRESET: >> + if (val& SWRESET_SYSTEM_MASK) { >> + s->reg[index] = val; >> + qemu_system_reset_request(); >> + } >> + break; >> + default: >> + s->reg[index] = val; >> + break; >> + } >> } >> >> static const MemoryRegionOps exynos4210_pmu_ops = { >> @@ -477,9 +484,28 @@ static void exynos4210_pmu_reset(DeviceState *dev) >> Exynos4210PmuState *s = >> container_of(dev, Exynos4210PmuState, busdev.qdev); >> unsigned i; >> + uint32_t index = exynos4210_pmu_get_register_index(s, SWRESET); >> + uint32_t swreset = s->reg[index]; >> >> /* Set default values for registers */ >> for (i = 0; i< PMU_NUM_OF_REGISTERS; i++) { >> + if (swreset) { >> + switch (exynos4210_pmu_regs[i].offset) { >> + case INFORM0: >> + case INFORM1: >> + case INFORM2: >> + case INFORM3: >> + case INFORM4: >> + case INFORM5: >> + case INFORM6: >> + case INFORM7: >> + case PS_HOLD_CONTROL: >> + /* keep these registers during SW reset */ >> + continue; >> + default: >> + break; >> + } >> + } >> s->reg[i] = exynos4210_pmu_regs[i].reset_value; >> } >> } > > This patch seems to be trying to make a distinction that QEMU doesn't > support, ie between system wide "software reset" and system wide > "hard reset". I'm not convinced about the wisdom of trying to paper > over this lack with a single-device workaround. Ok. Thank for review And I found out that this patch contains a mistake, therefore it should be rejected in any case > > -- PMM > > ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] [PATCH v2 4/4] ARM: exynos4210_pmu: Add software reset support 2012-07-20 14:32 ` Peter Maydell 2012-07-23 6:38 ` Maksim Kozlov @ 2012-07-23 11:01 ` Maksim Kozlov 2012-07-23 11:05 ` Peter Maydell 1 sibling, 1 reply; 9+ messages in thread From: Maksim Kozlov @ 2012-07-23 11:01 UTC (permalink / raw) To: Peter Maydell; +Cc: kyungmin.park, qemu-devel, e.voevodin 20.07.2012 18:32, Peter Maydell пишет: > On 12 July 2012 17:54, Maksim Kozlov<m.kozlov@samsung.com> wrote: >> Signed-off-by: Maksim Kozlov<m.kozlov@samsung.com> >> --- >> hw/exynos4210_pmu.c | 40 +++++++++++++++++++++++++++++++++------- >> 1 files changed, 33 insertions(+), 7 deletions(-) >> >> diff --git a/hw/exynos4210_pmu.c b/hw/exynos4210_pmu.c >> index 7f09c79..96588d9 100644 >> --- a/hw/exynos4210_pmu.c >> +++ b/hw/exynos4210_pmu.c >> @@ -18,13 +18,8 @@ >> * with this program; if not, see<http://www.gnu.org/licenses/>. >> */ >> >> -/* >> - * This model implements PMU registers just as a bulk of memory. Currently, >> - * the only reason this device exists is that secondary CPU boot loader >> - * uses PMU INFORM5 register as a holding pen. >> - */ >> - >> #include "sysbus.h" >> +#include "sysemu.h" >> >> #ifndef DEBUG_PMU >> #define DEBUG_PMU 0 >> @@ -230,6 +225,8 @@ >> >> #define EXYNOS4210_PMU_REGS_MEM_SIZE 0x3d0c >> >> +#define SWRESET_SYSTEM_MASK 0x00000001 >> + >> typedef struct Exynos4210PmuReg { >> const char *name; /* for debug only */ >> uint32_t offset; >> @@ -458,7 +455,17 @@ static void exynos4210_pmu_write(void *opaque, target_phys_addr_t offset, >> PRINT_DEBUG_EXTEND("%s [0x%04x]<- 0x%04x\n", >> exynos4210_pmu_regs[index].name, (uint32_t)offset, (uint32_t)val); >> >> - s->reg[index] = val; >> + switch (offset) { >> + case SWRESET: >> + if (val& SWRESET_SYSTEM_MASK) { >> + s->reg[index] = val; >> + qemu_system_reset_request(); >> + } >> + break; >> + default: >> + s->reg[index] = val; >> + break; >> + } >> } >> >> static const MemoryRegionOps exynos4210_pmu_ops = { >> @@ -477,9 +484,28 @@ static void exynos4210_pmu_reset(DeviceState *dev) >> Exynos4210PmuState *s = >> container_of(dev, Exynos4210PmuState, busdev.qdev); >> unsigned i; >> + uint32_t index = exynos4210_pmu_get_register_index(s, SWRESET); >> + uint32_t swreset = s->reg[index]; >> >> /* Set default values for registers */ >> for (i = 0; i< PMU_NUM_OF_REGISTERS; i++) { >> + if (swreset) { >> + switch (exynos4210_pmu_regs[i].offset) { >> + case INFORM0: >> + case INFORM1: >> + case INFORM2: >> + case INFORM3: >> + case INFORM4: >> + case INFORM5: >> + case INFORM6: >> + case INFORM7: >> + case PS_HOLD_CONTROL: >> + /* keep these registers during SW reset */ >> + continue; >> + default: >> + break; >> + } >> + } >> s->reg[i] = exynos4210_pmu_regs[i].reset_value; >> } >> } > This patch seems to be trying to make a distinction that QEMU doesn't > support, ie between system wide "software reset" and system wide > "hard reset". I'm not convinced about the wisdom of trying to paper > over this lack with a single-device workaround. Peter, if we add callback (*swreset)() into DeviceClass, whether it will be an acceptable solution? And devices which have different behavior during swreset can register different function for that. What do you think about this? > > -- PMM > -- Best regards, Maksim Kozlov Leading Engineer Advanced Software Group, Samsung Moscow Research Center e-mail: m.kozlov@samsung.com Tel: 7(495) 797-25-00 ext. 3949 ^ permalink raw reply [flat|nested] 9+ messages in thread
* Re: [Qemu-devel] [PATCH v2 4/4] ARM: exynos4210_pmu: Add software reset support 2012-07-23 11:01 ` Maksim Kozlov @ 2012-07-23 11:05 ` Peter Maydell 0 siblings, 0 replies; 9+ messages in thread From: Peter Maydell @ 2012-07-23 11:05 UTC (permalink / raw) To: Maksim Kozlov Cc: Anthony Liguori, Evgeny Voevodin, qemu-devel, kyungmin.park, Paolo Bonzini, Andreas Färber On 23 July 2012 12:01, Maksim Kozlov <m.kozlov@samsung.com> wrote: > 20.07.2012 18:32, Peter Maydell пишет: >> This patch seems to be trying to make a distinction that QEMU doesn't >> support, ie between system wide "software reset" and system wide >> "hard reset". I'm not convinced about the wisdom of trying to paper >> over this lack with a single-device workaround. > > Peter, if we add callback (*swreset)() into DeviceClass, whether it will be > an acceptable solution? And devices which have different behavior during > swreset can register different function for that. What do you think about > this? I think reset is a key part of device lifecycle and adding support for 'warm reset' or whatever needs general discussion so we can get the semantics right... cc'ing a couple of people who might have opinions. -- PMM ^ permalink raw reply [flat|nested] 9+ messages in thread
end of thread, other threads:[~2012-07-23 11:06 UTC | newest] Thread overview: 9+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-07-12 16:54 [Qemu-devel] [PATCH v2 0/4] ARM: exynos4210 PMU modifications Maksim Kozlov 2012-07-12 16:54 ` [Qemu-devel] [PATCH v2 1/4] ARM: exynos4210_pmu: just formatting changes Maksim Kozlov 2012-07-12 16:54 ` [Qemu-devel] [PATCH v2 2/4] ARM: exynos4210_pmu: changes in PRINT_DEBUG macro set Maksim Kozlov 2012-07-12 16:54 ` [Qemu-devel] [PATCH v2 3/4] ARM: exynos4210_pmu: Introduced exynos4210_pmu_get_register_index Maksim Kozlov 2012-07-12 16:54 ` [Qemu-devel] [PATCH v2 4/4] ARM: exynos4210_pmu: Add software reset support Maksim Kozlov 2012-07-20 14:32 ` Peter Maydell 2012-07-23 6:38 ` Maksim Kozlov 2012-07-23 11:01 ` Maksim Kozlov 2012-07-23 11:05 ` Peter Maydell
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).