[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH v2 00/22] ADB: fix autopoll issues and rework mac_via state m
From: |
Mark Cave-Ayland |
Subject: |
Re: [PATCH v2 00/22] ADB: fix autopoll issues and rework mac_via state machine |
Date: |
Fri, 26 Jun 2020 08:50:17 +0100 |
User-agent: |
Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.9.0 |
On 26/06/2020 08:14, Laurent Vivier wrote:
> Le 23/06/2020 à 22:49, Mark Cave-Ayland a écrit :
>> This patchset is something I have been chipping away at for a while since
>> spending some time over the Christmas holidays trying to boot the MacOS
>> toolbox ROM on the new q800 machine.
>>
>> Initially I discovered that there were some problems when the MacOS ROM was
>> enumerating ADB devices due to multiple meanings of the vADBInt bit. After
>> fixing this there were still issues with keys being dropped during autopoll
>> which were eventually traced back to the autopoll timer re-firing before
>> the host had managed to read back the previous response.
>>
>> At this point I noticed that CUDA/PMU/mac_via all had their own
>> implementations
>> of ADB autopoll, and that it would make sense to consolidate the autopoll
>> timer,
>> mask, interval and locking into the ADB bus. This would allow the logic to be
>> removed from each separate device and managed in just one place.
>>
>> Finally I updated the trace-events to allow separate tracing of bus requests
>> and device responses which makes it easier to follow the ADB enumeration
>> process.
>>
>> The breakdown of the patchset is as follows:
>>
>> - Patch 1 keeps checkpatch happy for the remainder of the patchset whilst
>> patch
>> 2 is the proper fix for a spurious ADB register 3 write during enumeration
>> caused by ignoring the request length which I had tried to work around
>> earlier.
>>
>> - Patches 3 to 10 are part of the autopoll consolidation process which moves
>> the
>> separate autopoll implementations into a single implementation within
>> ADBBusState.
>>
>> - Patches 11 to 13 update the ADB implementation to hold a status variable
>> indicating the result of the last request and allow devices to indicate
>> whether they have data to send. This extra information is required by the
>> upcoming mac_via state machine changes.
>>
>> - Patches 14 to 17 add a variable and functions to block and unblock ADB
>> autopoll at bus level, adding the functions at the correct places within
>> CUDA and PMU.
>>
>> - Patches 18 and 19 rework the mac_via ADB state machine so that the bus
>> can be enumerated correctly, and both explicit and autopoll requests work
>> under both MacOS and Linux.
>>
>> - Patch 20 enforces the blocking and unblocking of autopoll at the ADB
>> level, including adding an assert() to prevent developers from trying to
>> make an ADB request whilst autopoll is in progress.
>>
>> - Patches 21 and 22 update the trace-events to separate out ADB device and
>> ADB bus events.
>>
>> The patch has been tested by myself and a couple of others during the
>> development
>> process across the PPC g3beige/mac99 and 68K q800 machine so it should be
>> quite
>> solid.
>>
>> One thing to indicate is that the patchset bumps the VMState versions for the
>> affected devices but does not allow older versions to load. This is a
>> conscious
>> decision given that for the mac_via device used in the q800 machine it would
>> be
>> just about impossible to map this in a way that would work for all cases.
>> Similarly
>> for the Mac PPC machines migration is already hit/miss due to timebase
>> issues so
>> I don't see this as being a big loss.
>>
>> To finish off I'd also like to say a big thank-you to both Laurent Vivier and
>> Finn Thain who both took time to answer my questions, dump information from a
>> real q800, and analyse it in very fine detail. Without them this patchset
>> would
>> still be several months away.
>>
>> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
>>
>>
>> v2:
>> - Rebased onto master
>> - Added R-B tags from Philippe
>> - Fixed byte discrepency at end of bus timeout spotted by Finn
>> - Added Tested-by tag from Finn
>>
>>
>> Mark Cave-Ayland (22):
>> adb: coding style update to fix checkpatch errors
>> adb: fix adb-mouse read length and revert disable-reg3-direct-writes
>> workaround
>> cuda: convert ADB autopoll timer from ns to ms
>> pmu: fix duplicate autopoll mask variable
>> pmu: honour autopoll_rate_ms when rearming the ADB autopoll timer
>> adb: introduce realize/unrealize and VMStateDescription for ADB bus
>> adb: create autopoll variables directly within ADBBusState
>> cuda: convert to use ADBBusState internal autopoll variables
>> pmu: convert to use ADBBusState internal autopoll variables
>> mac_via: convert to use ADBBusState internal autopoll variables
>> adb: introduce new ADBDeviceHasData method to ADBDeviceClass
>> adb: keep track of devices with pending data
>> adb: add status field for holding information about the last ADB
>> request
>> adb: use adb_request() only for explicit requests
>> adb: add autopoll_blocked variable to block autopoll
>> cuda: add adb_autopoll_block() and adb_autopoll_unblock() functions
>> pmu: add adb_autopoll_block() and adb_autopoll_unblock() functions
>> mac_via: move VIA1 portB write logic into mos6522_q800_via1_write()
>> mac_via: rework ADB state machine to be compatible with both MacOS and
>> Linux
>> adb: only call autopoll callbacks when autopoll is not blocked
>> adb: use adb_device prefix for ADB device trace events
>> adb: add ADB bus trace events
>>
>> hw/input/adb-kbd.c | 42 ++--
>> hw/input/adb-mouse.c | 65 ++++--
>> hw/input/adb.c | 210 ++++++++++++++++--
>> hw/input/trace-events | 27 ++-
>> hw/misc/mac_via.c | 411 +++++++++++++++++++++++------------
>> hw/misc/macio/cuda.c | 60 +++--
>> hw/misc/macio/pmu.c | 47 ++--
>> hw/misc/trace-events | 3 +
>> hw/ppc/mac_newworld.c | 2 -
>> include/hw/input/adb.h | 26 ++-
>> include/hw/misc/mac_via.h | 2 +-
>> include/hw/misc/macio/cuda.h | 4 -
>> include/hw/misc/macio/pmu.h | 4 -
>> 13 files changed, 620 insertions(+), 283 deletions(-)
>>
>
> Acked-by: Laurent Vivier <laurent@vivier.eu>
Thanks Laurent! I know David is busy at the moment, but he's fine with the Mac
PPC
changes so I'll add your A-B tag and send a PR shortly.
ATB,
Mark.
- [PATCH v2 14/22] adb: use adb_request() only for explicit requests, (continued)
- [PATCH v2 14/22] adb: use adb_request() only for explicit requests, Mark Cave-Ayland, 2020/06/23
- [PATCH v2 15/22] adb: add autopoll_blocked variable to block autopoll, Mark Cave-Ayland, 2020/06/23
- [PATCH v2 16/22] cuda: add adb_autopoll_block() and adb_autopoll_unblock() functions, Mark Cave-Ayland, 2020/06/23
- [PATCH v2 17/22] pmu: add adb_autopoll_block() and adb_autopoll_unblock() functions, Mark Cave-Ayland, 2020/06/23
- [PATCH v2 18/22] mac_via: move VIA1 portB write logic into mos6522_q800_via1_write(), Mark Cave-Ayland, 2020/06/23
- [PATCH v2 19/22] mac_via: rework ADB state machine to be compatible with both MacOS and Linux, Mark Cave-Ayland, 2020/06/23
- [PATCH v2 20/22] adb: only call autopoll callbacks when autopoll is not blocked, Mark Cave-Ayland, 2020/06/23
- [PATCH v2 21/22] adb: use adb_device prefix for ADB device trace events, Mark Cave-Ayland, 2020/06/23
- [PATCH v2 22/22] adb: add ADB bus trace events, Mark Cave-Ayland, 2020/06/23
- Re: [PATCH v2 00/22] ADB: fix autopoll issues and rework mac_via state machine, Laurent Vivier, 2020/06/26
- Re: [PATCH v2 00/22] ADB: fix autopoll issues and rework mac_via state machine,
Mark Cave-Ayland <=