Re: [PATCH] sh: maple: fix empty port handling
Artur Rojek <[email protected]>
| Newsgroups | gmane.linux.kernel,gmane.linux.ports.sh.devel |
|---|---|
| Message-ID | <[email protected]> |
On 2025-11-12 22:31, John Paul Adrian Glaubitz wrote: > Hi Florian. > > On Wed, 2025-11-12 at 20:04 +0100, Florian Fuchs wrote: >> Handle timeout response from empty ports of the maple bus to prevent a >> stuck maple_sentq and a blocked maple bus. >> >> When only some ports are used, e.g. if only keyboard is connected and >> the >> other ports are empty, the device tends to timeout and return 0xff for >> the empty port. This needs to be handled, just like the >> MAPLE_RESPONSE_NONE response, to detect empty ports and to have usable >> peripherals, if not all of the ports are utilized. Previously, an >> empty >> port resulted in a never cleared maple_sentq which totally blocked the >> maple bus to be used. >> >> Signed-off-by: Florian Fuchs <[email protected]> >> --- >> Note: This patch was tested on real Sega Dreamcast hardware and >> resulted >> in a usable keyboard, even when only 1 or 2 ports where populated. The >> hot-plugging of the keyboard does also work fine. >> >> The description of the timeout response can be obtained on the bottom >> of >> of the page: https://mc.pp.se/dc/maplebus.html: "If no response is >> received before the timeout, a word with all bits set (FFFFFFFF) is >> written at the Result address." >> >> drivers/sh/maple/maple.c | 1 + >> include/linux/maple.h | 3 ++- >> 2 files changed, 3 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/sh/maple/maple.c b/drivers/sh/maple/maple.c >> index 6dc0549f7900..3d6c716cfc98 100644 >> --- a/drivers/sh/maple/maple.c >> +++ b/drivers/sh/maple/maple.c >> @@ -649,6 +649,7 @@ static void maple_dma_handler(struct work_struct >> *work) >> list_del_init(&mq->list); >> switch (code) { >> case MAPLE_RESPONSE_NONE: >> + case MAPLE_RESPONSE_TIMEOUT: >> maple_response_none(mdev); >> break; >> >> diff --git a/include/linux/maple.h b/include/linux/maple.h >> index 3be4e567473c..4ae3cc6678a8 100644 >> --- a/include/linux/maple.h >> +++ b/include/linux/maple.h >> @@ -27,7 +27,8 @@ enum maple_code { >> MAPLE_COMMAND_BWRITE, >> MAPLE_COMMAND_BSYNC, >> MAPLE_COMMAND_SETCOND, >> - MAPLE_COMMAND_MICCONTROL >> + MAPLE_COMMAND_MICCONTROL, >> + MAPLE_RESPONSE_TIMEOUT = 255 >> }; >> >> enum maple_file_errors { >> >> base-commit: 24172e0d79900908cf5ebf366600616d29c9b417 > > Thanks for your patch! I'll try to get it reviewed in the weekend. > > In the meantime, I'll like to add Artur Rojek who did some work for > Linux on the > Dreamcast as well if I remember correctly. Maybe he could test your > patch as I > currently don't have my Dreamcast set up for testing. Hi Adrian, I indeed did some minor work to restore Dreamcast support in Linux. Will give this patch a try once I find some free time. Florian, thanks for the patch! Can this be tested with just regular controllers? I don't own a Dreamcast keyboard. Cheers, Artur > > Adrian