|
26 | 26 |
|
27 | 27 | #define DMC_MAX_CHANNELS 2
|
28 | 28 |
|
| 29 | +#define HIWORD_UPDATE(val, mask) ((val) | (mask) << 16) |
| 30 | + |
29 | 31 | /* DDRMON_CTRL */
|
30 | 32 | #define DDRMON_CTRL 0x04
|
31 |
| -#define CLR_DDRMON_CTRL (0x1f0000 << 0) |
32 |
| -#define LPDDR4_EN (0x10001 << 4) |
33 |
| -#define HARDWARE_EN (0x10001 << 3) |
34 |
| -#define LPDDR3_EN (0x10001 << 2) |
35 |
| -#define SOFTWARE_EN (0x10001 << 1) |
36 |
| -#define SOFTWARE_DIS (0x10000 << 1) |
37 |
| -#define TIME_CNT_EN (0x10001 << 0) |
| 33 | +#define DDRMON_CTRL_DDR4 BIT(5) |
| 34 | +#define DDRMON_CTRL_LPDDR4 BIT(4) |
| 35 | +#define DDRMON_CTRL_HARDWARE_EN BIT(3) |
| 36 | +#define DDRMON_CTRL_LPDDR23 BIT(2) |
| 37 | +#define DDRMON_CTRL_SOFTWARE_EN BIT(1) |
| 38 | +#define DDRMON_CTRL_TIMER_CNT_EN BIT(0) |
| 39 | +#define DDRMON_CTRL_DDR_TYPE_MASK (DDRMON_CTRL_DDR4 | \ |
| 40 | + DDRMON_CTRL_LPDDR4 | \ |
| 41 | + DDRMON_CTRL_LPDDR23) |
38 | 42 |
|
39 | 43 | #define DDRMON_CH0_COUNT_NUM 0x28
|
40 | 44 | #define DDRMON_CH0_DFI_ACCESS_NUM 0x2c
|
@@ -74,24 +78,29 @@ static void rockchip_dfi_start_hardware_counter(struct devfreq_event_dev *edev)
|
74 | 78 | void __iomem *dfi_regs = dfi->regs;
|
75 | 79 |
|
76 | 80 | /* clear DDRMON_CTRL setting */
|
77 |
| - writel_relaxed(CLR_DDRMON_CTRL, dfi_regs + DDRMON_CTRL); |
| 81 | + writel_relaxed(HIWORD_UPDATE(0, DDRMON_CTRL_TIMER_CNT_EN | DDRMON_CTRL_SOFTWARE_EN | |
| 82 | + DDRMON_CTRL_HARDWARE_EN), dfi_regs + DDRMON_CTRL); |
78 | 83 |
|
79 | 84 | /* set ddr type to dfi */
|
80 | 85 | if (dfi->ddr_type == ROCKCHIP_DDRTYPE_LPDDR3)
|
81 |
| - writel_relaxed(LPDDR3_EN, dfi_regs + DDRMON_CTRL); |
| 86 | + writel_relaxed(HIWORD_UPDATE(DDRMON_CTRL_LPDDR23, DDRMON_CTRL_DDR_TYPE_MASK), |
| 87 | + dfi_regs + DDRMON_CTRL); |
82 | 88 | else if (dfi->ddr_type == ROCKCHIP_DDRTYPE_LPDDR4)
|
83 |
| - writel_relaxed(LPDDR4_EN, dfi_regs + DDRMON_CTRL); |
| 89 | + writel_relaxed(HIWORD_UPDATE(DDRMON_CTRL_LPDDR4, DDRMON_CTRL_DDR_TYPE_MASK), |
| 90 | + dfi_regs + DDRMON_CTRL); |
84 | 91 |
|
85 | 92 | /* enable count, use software mode */
|
86 |
| - writel_relaxed(SOFTWARE_EN, dfi_regs + DDRMON_CTRL); |
| 93 | + writel_relaxed(HIWORD_UPDATE(DDRMON_CTRL_SOFTWARE_EN, DDRMON_CTRL_SOFTWARE_EN), |
| 94 | + dfi_regs + DDRMON_CTRL); |
87 | 95 | }
|
88 | 96 |
|
89 | 97 | static void rockchip_dfi_stop_hardware_counter(struct devfreq_event_dev *edev)
|
90 | 98 | {
|
91 | 99 | struct rockchip_dfi *dfi = devfreq_event_get_drvdata(edev);
|
92 | 100 | void __iomem *dfi_regs = dfi->regs;
|
93 | 101 |
|
94 |
| - writel_relaxed(SOFTWARE_DIS, dfi_regs + DDRMON_CTRL); |
| 102 | + writel_relaxed(HIWORD_UPDATE(0, DDRMON_CTRL_SOFTWARE_EN), |
| 103 | + dfi_regs + DDRMON_CTRL); |
95 | 104 | }
|
96 | 105 |
|
97 | 106 | static void rockchip_dfi_read_counters(struct devfreq_event_dev *edev, struct dmc_count *count)
|
|
0 commit comments