All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
To: "Philippe Mathieu-Daudé" <philmd@linaro.org>,
	laurent@vivier.eu, qemu-devel@nongnu.org
Subject: Re: [PATCH 14/21] mac_via: work around underflow in TimeDBRA timing loop in SETUPTIMEK
Date: Thu, 6 Jul 2023 11:34:09 +0100	[thread overview]
Message-ID: <637ef83e-193d-ba3c-74b5-184f677d4556@ilande.co.uk> (raw)
In-Reply-To: <83711380-73dd-e7a4-d888-3010fe4fb906@linaro.org>

On 06/07/2023 11:10, Philippe Mathieu-Daudé wrote:

> On 5/7/23 21:49, Mark Cave-Ayland wrote:
>> On 03/07/2023 09:30, Philippe Mathieu-Daudé wrote:
>>
>>> On 2/7/23 17:48, Mark Cave-Ayland wrote:
>>>> The MacOS toolbox ROM calculates the number of branches that can be executed
>>>> per millisecond as part of its timer calibration. Since modern hosts are
>>>> considerably quicker than original hardware, the negative counter reaches zero
>>>> before the calibration completes leading to division by zero later in
>>>> CALCULATESLOD.
>>>>
>>>> Instead of trying to fudge the timing loop (which won't work for TimeDBRA/TimeSCCDB
>>>> anyhow), use the pattern of access to the VIA1 registers to detect when SETUPTIMEK
>>>> has finished executing and write some well-known good timer values to TimeDBRA
>>>> and TimeSCCDB taken from real hardware with a suitable scaling factor.
>>>>
>>>> Signed-off-by: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
>>>> ---
>>>>   hw/misc/mac_via.c         | 115 ++++++++++++++++++++++++++++++++++++++
>>>>   hw/misc/trace-events      |   1 +
>>>>   include/hw/misc/mac_via.h |   3 +
>>>>   3 files changed, 119 insertions(+)
>>>>
>>>> diff --git a/hw/misc/mac_via.c b/hw/misc/mac_via.c
>>>> index baeb73eeb3..766a32a95d 100644
>>>> --- a/hw/misc/mac_via.c
>>>> +++ b/hw/misc/mac_via.c
>>>> @@ -16,6 +16,7 @@
>>>>    */
>>>>   #include "qemu/osdep.h"
>>>> +#include "exec/address-spaces.h"
>>>>   #include "migration/vmstate.h"
>>>>   #include "hw/sysbus.h"
>>>>   #include "hw/irq.h"
>>>
>>>
>>>> +/*
>>>> + * Addresses and real values for TimeDBRA/TimeSCCB to allow timer calibration
>>>> + * to succeed (NOTE: both values have been multiplied by 3 to cope with the
>>>> + * speed of QEMU execution on a modern host
>>>> + */
>>>> +#define MACOS_TIMEDBRA        0xd00
>>>> +#define MACOS_TIMESCCB        0xd02
>>>> +
>>>> +#define MACOS_TIMEDBRA_VALUE  (0x2a00 * 3)
>>>> +#define MACOS_TIMESCCB_VALUE  (0x079d * 3)
>>>> +
>>>> +static bool via1_is_toolbox_timer_calibrated(void)
>>>> +{
>>>> +    /*
>>>> +     * Indicate whether the MacOS toolbox has been calibrated by checking
>>>> +     * for the value of our magic constants
>>>> +     */
>>>> +    uint16_t timedbra = lduw_be_phys(&address_space_memory, MACOS_TIMEDBRA);
>>>> +    uint16_t timesccdb = lduw_be_phys(&address_space_memory, MACOS_TIMESCCB);
>>>
>>> Rather than using the global address_space_memory (which we secretly
>>> try to remove entirely), could we pass a MemoryRegion link property
>>> to the VIA1 device?
>>
>> Hmmm good question. It seems to me that we're dispatching a write to the default 
>> address space (which includes all RAM and MMIO etc.) rather than a particular 
>> MemoryRegion so it feels as if AddressSpace is the right approach here. 
>> Unfortunately since AddressSpace is not a QOM type then it isn't possible to pass 
>> it as a link property.
> 
> We pass a MR link.

That could work, but then we'd have to grab the host pointer via 
memory_region_get_ram_ptr() first and switch to using lduw_be_p(). And if we did have 
an MR property then what should it be set to? The obvious candidate would be 
get_system_memory() but should we also be avoiding that for similar reasons? If we 
did use it, then we might as well use get_system_memory() directly rather than having 
to pass in a separate link property.

>> There are existing examples in qtest that use first_cpu->as which seems a better 
>> option unless we want to move away from using first_cpu in the codebase?
> 
> See:
> 
>    $ git grep -E "(PROP.*LINK.*MEMORY_REGION|dma-mr)"
> 
> Anyway I don't object to your patch, we can rework this
> &address_space_memory use later when we'll have discussed the whole
> design.

Agreed. It feels like there are still some discussions needed to understand exactly 
what needs to be done in order to move forward with this (maybe start a separate 
thread?).


ATB,

Mark.



  reply	other threads:[~2023-07-06 10:34 UTC|newest]

Thread overview: 48+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-07-02 15:48 [PATCH 00/21] q800: add support for booting MacOS Classic - part 2 Mark Cave-Ayland
2023-07-02 15:48 ` [PATCH 01/21] q800-glue.c: convert to Resettable interface Mark Cave-Ayland
2023-07-03  7:48   ` Philippe Mathieu-Daudé
2023-07-02 15:48 ` [PATCH 02/21] q800: add djMEMC memory controller Mark Cave-Ayland
2023-07-07  8:17   ` Philippe Mathieu-Daudé
2023-07-02 15:48 ` [PATCH 03/21] q800: add machine id register Mark Cave-Ayland
2023-07-03  7:50   ` Philippe Mathieu-Daudé
2023-07-02 15:48 ` [PATCH 04/21] q800: implement additional machine id bits on VIA1 port A Mark Cave-Ayland
2023-07-07  8:19   ` Philippe Mathieu-Daudé
2023-07-02 15:48 ` [PATCH 05/21] q800: add IOSB subsystem Mark Cave-Ayland
2023-07-07  8:25   ` Philippe Mathieu-Daudé
2023-09-08  6:50     ` Mark Cave-Ayland
2023-07-02 15:48 ` [PATCH 06/21] q800: allow accesses to RAM area even if less memory is available Mark Cave-Ayland
2023-07-03  7:58   ` Philippe Mathieu-Daudé
2023-07-05  7:55   ` Laurent Vivier
2023-07-02 15:48 ` [PATCH 07/21] audio: add Apple Sound Chip (ASC) emulation Mark Cave-Ayland
2023-07-06 19:58   ` Volker Rümelin
2023-07-02 15:48 ` [PATCH 08/21] asc: generate silence if FIFO empty but engine still running Mark Cave-Ayland
2023-07-07  6:24   ` Volker Rümelin
2023-07-10  6:50     ` Mark Cave-Ayland
2023-07-02 15:48 ` [PATCH 09/21] q800: add Apple Sound Chip (ASC) audio to machine Mark Cave-Ayland
2023-07-02 15:48 ` [PATCH 10/21] q800: add easc bool machine class property to switch between ASC and EASC Mark Cave-Ayland
2023-07-07  8:29   ` Philippe Mathieu-Daudé
2023-09-08  6:54     ` Mark Cave-Ayland
2023-09-08  9:42       ` Philippe Mathieu-Daudé
2023-09-08 16:03         ` Mark Cave-Ayland
2023-09-08 16:06           ` Philippe Mathieu-Daudé
2023-09-11  5:15         ` Markus Armbruster
2023-09-20 15:41           ` Mark Cave-Ayland
2023-09-20 18:38             ` Markus Armbruster
2023-07-02 15:48 ` [PATCH 11/21] swim: add trace events for IWM and ISM registers Mark Cave-Ayland
2023-07-03  8:26   ` Philippe Mathieu-Daudé
2023-07-05 19:40     ` Mark Cave-Ayland
2023-07-06 10:05       ` Philippe Mathieu-Daudé
2023-07-02 15:48 ` [PATCH 12/21] swim: split into separate IWM and ISM register blocks Mark Cave-Ayland
2023-07-02 15:48 ` [PATCH 13/21] swim: update IWM/ISM register block decoding Mark Cave-Ayland
2023-07-02 15:48 ` [PATCH 14/21] mac_via: work around underflow in TimeDBRA timing loop in SETUPTIMEK Mark Cave-Ayland
2023-07-03  8:30   ` Philippe Mathieu-Daudé
2023-07-05 19:49     ` Mark Cave-Ayland
2023-07-06 10:10       ` Philippe Mathieu-Daudé
2023-07-06 10:34         ` Mark Cave-Ayland [this message]
2023-07-02 15:48 ` [PATCH 15/21] mac_via: workaround NetBSD ADB bus enumeration issue Mark Cave-Ayland
2023-07-02 15:48 ` [PATCH 16/21] mac_via: implement ADB_STATE_IDLE state if shift register in input mode Mark Cave-Ayland
2023-07-02 15:48 ` [PATCH 17/21] mac_via: always clear ADB interrupt when switching to A/UX mode Mark Cave-Ayland
2023-07-02 15:48 ` [PATCH 18/21] q800: add ESCC alias at 0xc000 Mark Cave-Ayland
2023-07-02 15:48 ` [PATCH 19/21] q800: add alias for MacOS toolbox ROM at 0x40000000 Mark Cave-Ayland
2023-07-02 15:48 ` [PATCH 20/21] mac_via: allow unaligned access to VIA1 registers Mark Cave-Ayland
2023-07-02 15:48 ` [PATCH 21/21] mac_via: extend timer calibration hack to work with A/UX Mark Cave-Ayland

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=637ef83e-193d-ba3c-74b5-184f677d4556@ilande.co.uk \
    --to=mark.cave-ayland@ilande.co.uk \
    --cc=laurent@vivier.eu \
    --cc=philmd@linaro.org \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.