[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <999e3970e1580def5ddbf1921a9ef4a4@artur-rojek.eu>
Date: Wed, 12 Nov 2025 22:46:01 +0100
From: Artur Rojek <contact@...ur-rojek.eu>
To: John Paul Adrian Glaubitz <glaubitz@...sik.fu-berlin.de>
Cc: Florian Fuchs <fuchsfl@...il.com>, Yoshinori Sato
<ysato@...rs.sourceforge.jp>, Rich Felker <dalias@...c.org>,
linux-sh@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH] sh: maple: fix empty port handling
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 <fuchsfl@...il.com>
>> ---
>> 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
Powered by blists - more mailing lists