hw/misc/macio/gpio: Add constants for register bits
Add named constants for register bit values that should make it easier to understand what these mean. Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu> Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Reviewed-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk> Message-ID: <20250224141026.3B36C4E6010@zero.eik.bme.hu> Signed-off-by: Philippe Mathieu-Daudé <philmd@linaro.org>
This commit is contained in:
parent
70f98ae150
commit
d9bf3cec67
@ -34,6 +34,11 @@
|
|||||||
#include "qemu/module.h"
|
#include "qemu/module.h"
|
||||||
#include "trace.h"
|
#include "trace.h"
|
||||||
|
|
||||||
|
enum MacioGPIORegisterBits {
|
||||||
|
OUT_DATA = 1,
|
||||||
|
IN_DATA = 2,
|
||||||
|
OUT_ENABLE = 4,
|
||||||
|
};
|
||||||
|
|
||||||
void macio_set_gpio(MacIOGPIOState *s, uint32_t gpio, bool state)
|
void macio_set_gpio(MacIOGPIOState *s, uint32_t gpio, bool state)
|
||||||
{
|
{
|
||||||
@ -41,14 +46,14 @@ void macio_set_gpio(MacIOGPIOState *s, uint32_t gpio, bool state)
|
|||||||
|
|
||||||
trace_macio_set_gpio(gpio, state);
|
trace_macio_set_gpio(gpio, state);
|
||||||
|
|
||||||
if (s->gpio_regs[gpio] & 4) {
|
if (s->gpio_regs[gpio] & OUT_ENABLE) {
|
||||||
qemu_log_mask(LOG_GUEST_ERROR,
|
qemu_log_mask(LOG_GUEST_ERROR,
|
||||||
"GPIO: Setting GPIO %d while it's an output\n", gpio);
|
"GPIO: Setting GPIO %d while it's an output\n", gpio);
|
||||||
}
|
}
|
||||||
|
|
||||||
new_reg = s->gpio_regs[gpio] & ~2;
|
new_reg = s->gpio_regs[gpio] & ~IN_DATA;
|
||||||
if (state) {
|
if (state) {
|
||||||
new_reg |= 2;
|
new_reg |= IN_DATA;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (new_reg == s->gpio_regs[gpio]) {
|
if (new_reg == s->gpio_regs[gpio]) {
|
||||||
@ -107,12 +112,12 @@ static void macio_gpio_write(void *opaque, hwaddr addr, uint64_t value,
|
|||||||
|
|
||||||
addr -= 8;
|
addr -= 8;
|
||||||
if (addr < 36) {
|
if (addr < 36) {
|
||||||
value &= ~2;
|
value &= ~IN_DATA;
|
||||||
|
|
||||||
if (value & 4) {
|
if (value & OUT_ENABLE) {
|
||||||
ibit = (value & 1) << 1;
|
ibit = (value & OUT_DATA) << 1;
|
||||||
} else {
|
} else {
|
||||||
ibit = s->gpio_regs[addr] & 2;
|
ibit = s->gpio_regs[addr] & IN_DATA;
|
||||||
}
|
}
|
||||||
|
|
||||||
s->gpio_regs[addr] = value | ibit;
|
s->gpio_regs[addr] = value | ibit;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user