Lines Matching +full:pwm +full:- +full:offset
2 * QTests for Nuvoton NPCM7xx PWM Modules.
58 /* MFT (PWM fan) related */
106 typedef struct PWM { struct
111 } PWM; typedef
115 const PWM *pwm; member
129 static const PWM pwm_list[] = {
201 /* Returns the index of the PWM module. */
204 ptrdiff_t diff = module - pwm_module_list; in pwm_module_index()
211 /* Returns the index of the PWM entry. */
212 static int pwm_index(const PWM *pwm) in pwm_index() argument
214 ptrdiff_t diff = pwm - pwm_list; in pwm_index()
229 response = qtest_qmp(qts, "{ 'execute': 'qom-get'," in pwm_qom_get()
244 sprintf(path, "/machine/soc/pwm[%d]", module_index); in pwm_get_freq()
255 sprintf(path, "/machine/soc/pwm[%d]", module_index); in pwm_get_duty()
271 response = qtest_qmp(qts, "{ 'execute': 'qom-set'," in mft_qom_set()
348 /* PWM is stopped. */ in pwm_compute_duty()
357 duty = MAX_DUTY - duty; in pwm_compute_duty()
363 static uint32_t pwm_read(QTestState *qts, const TestData *td, unsigned offset) in pwm_read() argument
365 return qtest_readl(qts, td->module->base_addr + offset); in pwm_read()
368 static void pwm_write(QTestState *qts, const TestData *td, unsigned offset, in pwm_write() argument
371 qtest_writel(qts, td->module->base_addr + offset, value); in pwm_write()
374 static uint8_t mft_readb(QTestState *qts, int index, unsigned offset) in mft_readb() argument
376 return qtest_readb(qts, MFT_BA(index) + offset); in mft_readb()
379 static uint16_t mft_readw(QTestState *qts, int index, unsigned offset) in mft_readw() argument
381 return qtest_readw(qts, MFT_BA(index) + offset); in mft_readw()
384 static void mft_writeb(QTestState *qts, int index, unsigned offset, in mft_writeb() argument
387 qtest_writeb(qts, MFT_BA(index) + offset, value); in mft_writeb()
390 static void mft_writew(QTestState *qts, int index, unsigned offset, in mft_writew() argument
393 return qtest_writew(qts, MFT_BA(index) + offset, value); in mft_writew()
398 return extract32(pwm_read(qts, td, PPR), ppr_base[pwm_index(td->pwm)], 8); in pwm_read_ppr()
403 pwm_write(qts, td, PPR, value << ppr_base[pwm_index(td->pwm)]); in pwm_write_ppr()
408 return extract32(pwm_read(qts, td, CSR), csr_base[pwm_index(td->pwm)], 3); in pwm_read_csr()
413 pwm_write(qts, td, CSR, value << csr_base[pwm_index(td->pwm)]); in pwm_write_csr()
418 return extract32(pwm_read(qts, td, PCR), pcr_base[pwm_index(td->pwm)], 4); in pwm_read_pcr()
423 pwm_write(qts, td, PCR, value << pcr_base[pwm_index(td->pwm)]); in pwm_write_pcr()
428 return pwm_read(qts, td, td->pwm->cnr_offset); in pwm_read_cnr()
433 pwm_write(qts, td, td->pwm->cnr_offset, value); in pwm_write_cnr()
438 return pwm_read(qts, td, td->pwm->cmr_offset); in pwm_read_cmr()
443 pwm_write(qts, td, td->pwm->cmr_offset, value); in pwm_write_cmr()
448 int index = pwm_module_index(td->module) * ARRAY_SIZE(pwm_list) + in mft_compute_index()
449 pwm_index(td->pwm); in mft_compute_index()
463 mft_writew(qts, index, MFT_CPA, MFT_MAX_CNT - MFT_TIMEOUT); in mft_reset_counters()
464 mft_writew(qts, index, MFT_CPB, MFT_MAX_CNT - MFT_TIMEOUT); in mft_reset_counters()
496 return -1; in mft_compute_cnt()
501 return -1; in mft_compute_cnt()
503 return MFT_MAX_CNT - cnt; in mft_compute_cnt()
530 MFT_MAX_CNT - MFT_TIMEOUT); in mft_verify_rpm()
534 if (expected_cnt == -1) { in mft_verify_rpm()
554 /* Check pwm registers can be reset to default value */
558 QTestState *qts = qtest_init("-machine npcm750-evb"); in test_init()
559 int module = pwm_module_index(td->module); in test_init()
560 int pwm = pwm_index(td->pwm); in test_init() local
562 g_assert_cmpuint(pwm_get_freq(qts, module, pwm), ==, 0); in test_init()
563 g_assert_cmpuint(pwm_get_duty(qts, module, pwm), ==, 0); in test_init()
568 /* One-shot mode should not change frequency and duty cycle. */
572 QTestState *qts = qtest_init("-machine npcm750-evb"); in test_oneshot()
573 int module = pwm_module_index(td->module); in test_oneshot()
574 int pwm = pwm_index(td->pwm); in test_oneshot() local
591 g_assert_cmpuint(pwm_get_freq(qts, module, pwm), ==, 0); in test_oneshot()
592 g_assert_cmpuint(pwm_get_duty(qts, module, pwm), ==, 0); in test_oneshot()
599 /* In toggle mode, the PWM generates correct outputs. */
603 QTestState *qts = qtest_init("-machine npcm750-evb"); in test_toggle()
604 int module = pwm_module_index(td->module); in test_toggle()
605 int pwm = pwm_index(td->pwm); in test_toggle() local
638 g_assert_cmpuint(pwm_get_duty(qts, module, pwm), in test_toggle()
642 g_assert_cmpuint(pwm_get_freq(qts, module, pwm), in test_toggle()
653 g_assert_cmpuint(pwm_get_duty(qts, module, pwm), in test_toggle()
657 g_assert_cmpuint(pwm_get_freq(qts, module, pwm), in test_toggle()
673 "npcm7xx_pwm/module[%d]/pwm[%d]/%s", pwm_module_index(td->module), in pwm_add_test()
674 pwm_index(td->pwm), name); in pwm_add_test()
701 td->module = &pwm_module_list[i]; in main()
702 td->pwm = &pwm_list[j]; in main()