Skip to content

Commit e8d201d

Browse files
committed
display rtc gpio pullup and pulldown for rtc gpios
1 parent a181423 commit e8d201d

2 files changed

Lines changed: 61 additions & 4 deletions

File tree

hw/gpio/esp32_gpio.c

Lines changed: 45 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -317,6 +317,49 @@ static const uint8_t GPIO_PIN_MUX_REG_OFFSET[] = {
317317
0x1c,0x20,0x14,0x18,0x04,0x08,0x0c,0x10,
318318
};
319319

320+
static uint32_t get_pull_up(Esp32GpioState *s, int gpio_no) {
321+
int rtc_gpio=io_mux_pins[gpio_no].rtc_gpio;
322+
323+
if(rtc_gpio>5) {
324+
switch(rtc_gpio) {
325+
case 6:
326+
return FIELD_EX32(s->rtc_pad_cfg[2],RTCIO_PAD_DAC1,RUE);
327+
case 7:
328+
return FIELD_EX32(s->rtc_pad_cfg[3],RTCIO_PAD_DAC2,RUE);
329+
case 8:
330+
return FIELD_EX32(s->rtc_pad_cfg[4],RTCIO_XTAL_32K_PAD,X32N_RUE);
331+
case 9:
332+
return FIELD_EX32(s->rtc_pad_cfg[4],RTCIO_XTAL_32K_PAD,X32P_RUE);
333+
default:
334+
return FIELD_EX32(s->rtc_pad_cfg[6+rtc_gpio-10],RTCIO_TOUCH_PAD0,RUE);
335+
}
336+
}
337+
int io_mux=GPIO_PIN_MUX_REG_OFFSET[gpio_no]/4;
338+
return FIELD_EX32(s->iomux_regs[io_mux],IO_MUX,FUN_WPU);
339+
}
340+
341+
static uint32_t get_pull_down(Esp32GpioState *s, int gpio_no) {
342+
int rtc_gpio=io_mux_pins[gpio_no].rtc_gpio;
343+
344+
if(rtc_gpio>5) {
345+
switch(rtc_gpio) {
346+
case 6:
347+
return FIELD_EX32(s->rtc_pad_cfg[2],RTCIO_PAD_DAC1,RDE);
348+
case 7:
349+
return FIELD_EX32(s->rtc_pad_cfg[3],RTCIO_PAD_DAC2,RDE);
350+
case 8:
351+
return FIELD_EX32(s->rtc_pad_cfg[4],RTCIO_XTAL_32K_PAD,X32N_RDE);
352+
case 9:
353+
return FIELD_EX32(s->rtc_pad_cfg[4],RTCIO_XTAL_32K_PAD,X32P_RDE);
354+
default:
355+
return FIELD_EX32(s->rtc_pad_cfg[6+rtc_gpio-10],RTCIO_TOUCH_PAD0,RDE);
356+
}
357+
}
358+
int io_mux=GPIO_PIN_MUX_REG_OFFSET[gpio_no]/4;
359+
return FIELD_EX32(s->iomux_regs[io_mux],IO_MUX,FUN_WPD);
360+
}
361+
362+
320363
#define N_RTC_GPIOS 18
321364
// mapping from rtc gpios to iomux gpios
322365
int gpio_map[N_RTC_GPIOS]={36,37,38,39,34,35,25,26,33,32,4,0,2,15,13,12,14,27};
@@ -555,8 +598,8 @@ static void text_console_update(void *obj) {
555598
uint32_t oen_sel=FIELD_EX32(s->gpio_out_sel[i],GPIO_FUNC_OUT,OEN_SEL);
556599
uint32_t mux_ie=FIELD_EX32(s->iomux_regs[io_mux],IO_MUX,FUN_IE);
557600
uint32_t mux_func=FIELD_EX32(s->iomux_regs[io_mux],IO_MUX,MCU_SEL);
558-
uint32_t pullup=FIELD_EX32(s->iomux_regs[io_mux],IO_MUX,FUN_WPU);
559-
uint32_t pulldown=FIELD_EX32(s->iomux_regs[io_mux],IO_MUX,FUN_WPD);
601+
uint32_t pullup=get_pull_up(s,i);
602+
uint32_t pulldown=get_pull_down(s,i);
560603
uint32_t int_type=FIELD_EX32(s->gpio_pin[i],GPIO_PIN,INT_TYPE);
561604
uint32_t int_enable=FIELD_EX32(s->gpio_pin[i],GPIO_PIN,INT_ENABLE);
562605

include/hw/gpio/esp32_gpio.h

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,21 @@ REG32(RTC_GPIO_PIN,0x28)
7676
REG32(RTC_PAD_CFG,0x7c)
7777
REG32(RTC_DIG_PAD_HOLD,0x74)
7878
REG32(RTC_EXT_WAKEUP0,0xbc)
79-
FIELD(RTC_EXT_WAKEUP0,SEL,27,5)
79+
FIELD(RTC_EXT_WAKEUP0,SEL,27,5)
80+
REG32(RTCIO_PAD_DAC1,0x84)
81+
FIELD(RTCIO_PAD_DAC1,RUE,27,1)
82+
FIELD(RTCIO_PAD_DAC1,RDE,28,1)
83+
REG32(RTCIO_PAD_DAC2,0x88)
84+
FIELD(RTCIO_PAD_DAC2,RUE,27,1)
85+
FIELD(RTCIO_PAD_DAC2,RDE,28,1)
86+
REG32(RTCIO_XTAL_32K_PAD,0x8c)
87+
FIELD(RTCIO_XTAL_32K_PAD,X32N_RUE,27,1)
88+
FIELD(RTCIO_XTAL_32K_PAD,X32N_RDE,28,1)
89+
FIELD(RTCIO_XTAL_32K_PAD,X32P_RUE,22,1)
90+
FIELD(RTCIO_XTAL_32K_PAD,X32P_RDE,23,1)
91+
REG32(RTCIO_TOUCH_PAD0,0x94)
92+
FIELD(RTCIO_TOUCH_PAD0,RUE,27,1)
93+
FIELD(RTCIO_TOUCH_PAD0,RDE,28,1)
8094

8195
#define ESP32_STRAP_MODE_FLASH_BOOT 0x12
8296
#define ESP32_STRAP_MODE_UART_BOOT 0x0f
@@ -106,7 +120,6 @@ typedef struct Esp32GpioState {
106120
uint32_t gpio_out_sel[40];
107121
qemu_irq gpios[40];
108122
uint32_t iomux_regs[41];
109-
// uint32_t rtcio_regs[64];
110123
uint32_t rtc_gpio_out;
111124
uint32_t rtc_gpio_in;
112125
uint32_t rtc_gpio_status;
@@ -115,6 +128,7 @@ typedef struct Esp32GpioState {
115128
uint32_t rtc_pad_cfg[16];
116129
uint32_t rtc_dig_pad_hold;
117130
uint32_t rtc_ext_wakeup0;
131+
118132
QemuConsole *con;
119133
uint32_t *data;
120134
uint32_t redraw;

0 commit comments

Comments
 (0)