Re: [PATCH 9/9] drm/verisilicon: Add starfive hdmi driver
yes I tested modetest -M starfive -D 0 -s 116@31:1280x720-59.94 -v modetest -M starfive -D 0 -s 116@31:1920x1080 -v and the second command will repeat the problem as you advise at the beginning I call the "starfive_hdmi_setup" function in the "starfive_hdmi_encoder_enable" instead of "starfive_hdmi_encoder_mode_set" resolve the problem i will add this modify in my next patch Thank you Hoegeun On 2023/6/23 10:38, Hoegeun Kwon wrote: > Hi Keith, > > There is a problem with stopping when changing modes. > > Below test log > > root:~> modetest -Mstarfive -c > Connectors: > id encoder status namesize (mm) modes > encoders > 116 115 connected HDMI-A-1320x180 51 115 > modes: > index name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot > #0 1280x800 59.91 1280 1328 1360 1440 800 803 809 823 71000 flags: phsync, > pvsync; type: preferred, driver > #1 1920x1080 60.00 1920 2008 2052 2200 1080 1084 1089 1125 148500 flags: > phsync, pvsync; type: driver > [...] > > root:~> modetest -Mstarfive -s 116:#0 -v > setting mode 1280x800-59.91Hz on connectors 116, crtc 31 > freq: 60.65Hz > freq: 59.91Hz > freq: 59.91Hz > > root:~> modetest -Mstarfive -s 116:#1 -v > setting mode 1920x1080-60.00Hz on connectors 116, crtc 31 > [ 94.535626] rcu: INFO: rcu_sched detected stalls on CPUs/tasks: > [ 94.560985] rcu: 1-...0: (20 ticks this GP) > idle=c9bc/1/0x4000 softirq=3869/3871 fqs=1120 > [ 94.589532] rcu: (detected by 3, t=5264 jiffies, g=4645, q=63 > ncpus=4) > [ 94.615335] Task dump for CPU 1: > [ 94.637723] task:modeteststate:R running task stack:0 > pid:407 ppid:397flags:0x0008 > [ 94.667299] Call Trace: > [ 94.689297] [] __schedule+0x2a8/0xa52 > [ 94.714221] [] schedule+0x5a/0xdc > [ 94.738626] [] schedule_timeout+0x220/0x2a6 > [ 94.763762] [] wait_for_completion+0xfe/0x126 > [ 94.789073] [] kthread_flush_worker+0x82/0xa0 > > >> -Original Message- >> From: dri-devel On Behalf Of >> Keith Zhao >> Sent: Friday, June 2, 2023 4:41 PM >> To: dri-devel@lists.freedesktop.org; devicet...@vger.kernel.org; linux- >> ker...@vger.kernel.org; linux-ri...@lists.infradead.org; linux- >> me...@vger.kernel.org; linaro-mm-...@lists.linaro.org >> Cc: Krzysztof Kozlowski ; Sumit Semwal >> ; Emil Renner Berthing ; >> Shengyang Chen ; Conor Dooley >> ; Albert Ou ; Thomas >> Zimmermann ; Jagan Teki ; Rob >> Herring ; Chris Morgan ; Paul >> Walmsley ; Keith Zhao >> ; Bjorn Andersson ; >> Changhuang Liang ; Jack Zhu >> ; Palmer Dabbelt ; Shawn >> Guo ; christian.koe...@amd.com >> Subject: [PATCH 9/9] drm/verisilicon: Add starfive hdmi driver >> >> Add HDMI dirver for StarFive SoC JH7110. >> >> Signed-off-by: Keith Zhao >> --- >> drivers/gpu/drm/verisilicon/Kconfig | 11 + >> drivers/gpu/drm/verisilicon/Makefile| 1 + >> drivers/gpu/drm/verisilicon/starfive_hdmi.c | 928 >> drivers/gpu/drm/verisilicon/starfive_hdmi.h | 296 +++ >> drivers/gpu/drm/verisilicon/vs_drv.c| 6 + >> drivers/gpu/drm/verisilicon/vs_drv.h| 4 + >> 6 files changed, 1246 insertions(+) >> create mode 100644 drivers/gpu/drm/verisilicon/starfive_hdmi.c >> create mode 100644 drivers/gpu/drm/verisilicon/starfive_hdmi.h > > [...] > >> diff --git a/drivers/gpu/drm/verisilicon/starfive_hdmi.c >> b/drivers/gpu/drm/verisilicon/starfive_hdmi.c >> new file mode 100644 >> index ..128ecca03309 >> --- /dev/null >> +++ b/drivers/gpu/drm/verisilicon/starfive_hdmi.c >> @@ -0,0 +1,928 @@ > > [...] > >> +static int starfive_hdmi_setup(struct starfive_hdmi *hdmi, >> + struct drm_display_mode *mode) { > > [...] > >> +return 0; >> +} >> + >> +static void starfive_hdmi_encoder_mode_set(struct drm_encoder *encoder, >> + struct drm_display_mode *mode, >> + struct drm_display_mode > *adj_mode) { >> +struct starfive_hdmi *hdmi = encoder_to_hdmi(encoder); >> + >> +starfive_hdmi_setup(hdmi, adj_mode); > > When starfive_hdmi_setup runs here, > when changing the mode, a problem occurs because try to write a value to reg > in a state that is not resumed after suspend. > >> + >> +memcpy(>previous_mode, adj_mode, sizeof(hdmi- >> >previous_mode)); } >> + >> +static void starfive_hdmi_encoder_enable(struct drm_encoder *encoder) { >> +struct starfive_hdmi *hdmi = encoder_to_hdmi(encoder); >> + >> +pm_runtime_get_sync(hdmi->dev); > > So if move the call point of starfive_hdmi_setup here, it works normally. > >> +} > > Best regards, > Hoegeun > >
RE: [PATCH 9/9] drm/verisilicon: Add starfive hdmi driver
Hi Keith, There is a problem with stopping when changing modes. Below test log root:~> modetest -Mstarfive -c Connectors: id encoder status namesize (mm) modes encoders 116 115 connected HDMI-A-1320x180 51 115 modes: index name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot #0 1280x800 59.91 1280 1328 1360 1440 800 803 809 823 71000 flags: phsync, pvsync; type: preferred, driver #1 1920x1080 60.00 1920 2008 2052 2200 1080 1084 1089 1125 148500 flags: phsync, pvsync; type: driver [...] root:~> modetest -Mstarfive -s 116:#0 -v setting mode 1280x800-59.91Hz on connectors 116, crtc 31 freq: 60.65Hz freq: 59.91Hz freq: 59.91Hz root:~> modetest -Mstarfive -s 116:#1 -v setting mode 1920x1080-60.00Hz on connectors 116, crtc 31 [ 94.535626] rcu: INFO: rcu_sched detected stalls on CPUs/tasks: [ 94.560985] rcu: 1-...0: (20 ticks this GP) idle=c9bc/1/0x4000 softirq=3869/3871 fqs=1120 [ 94.589532] rcu: (detected by 3, t=5264 jiffies, g=4645, q=63 ncpus=4) [ 94.615335] Task dump for CPU 1: [ 94.637723] task:modeteststate:R running task stack:0 pid:407 ppid:397flags:0x0008 [ 94.667299] Call Trace: [ 94.689297] [] __schedule+0x2a8/0xa52 [ 94.714221] [] schedule+0x5a/0xdc [ 94.738626] [] schedule_timeout+0x220/0x2a6 [ 94.763762] [] wait_for_completion+0xfe/0x126 [ 94.789073] [] kthread_flush_worker+0x82/0xa0 > -Original Message- > From: dri-devel On Behalf Of > Keith Zhao > Sent: Friday, June 2, 2023 4:41 PM > To: dri-devel@lists.freedesktop.org; devicet...@vger.kernel.org; linux- > ker...@vger.kernel.org; linux-ri...@lists.infradead.org; linux- > me...@vger.kernel.org; linaro-mm-...@lists.linaro.org > Cc: Krzysztof Kozlowski ; Sumit Semwal > ; Emil Renner Berthing ; > Shengyang Chen ; Conor Dooley > ; Albert Ou ; Thomas > Zimmermann ; Jagan Teki ; Rob > Herring ; Chris Morgan ; Paul > Walmsley ; Keith Zhao > ; Bjorn Andersson ; > Changhuang Liang ; Jack Zhu > ; Palmer Dabbelt ; Shawn > Guo ; christian.koe...@amd.com > Subject: [PATCH 9/9] drm/verisilicon: Add starfive hdmi driver > > Add HDMI dirver for StarFive SoC JH7110. > > Signed-off-by: Keith Zhao > --- > drivers/gpu/drm/verisilicon/Kconfig | 11 + > drivers/gpu/drm/verisilicon/Makefile| 1 + > drivers/gpu/drm/verisilicon/starfive_hdmi.c | 928 > drivers/gpu/drm/verisilicon/starfive_hdmi.h | 296 +++ > drivers/gpu/drm/verisilicon/vs_drv.c| 6 + > drivers/gpu/drm/verisilicon/vs_drv.h| 4 + > 6 files changed, 1246 insertions(+) > create mode 100644 drivers/gpu/drm/verisilicon/starfive_hdmi.c > create mode 100644 drivers/gpu/drm/verisilicon/starfive_hdmi.h [...] > diff --git a/drivers/gpu/drm/verisilicon/starfive_hdmi.c > b/drivers/gpu/drm/verisilicon/starfive_hdmi.c > new file mode 100644 > index ..128ecca03309 > --- /dev/null > +++ b/drivers/gpu/drm/verisilicon/starfive_hdmi.c > @@ -0,0 +1,928 @@ [...] > +static int starfive_hdmi_setup(struct starfive_hdmi *hdmi, > +struct drm_display_mode *mode) { [...] > + return 0; > +} > + > +static void starfive_hdmi_encoder_mode_set(struct drm_encoder *encoder, > +struct drm_display_mode *mode, > +struct drm_display_mode *adj_mode) { > + struct starfive_hdmi *hdmi = encoder_to_hdmi(encoder); > + > + starfive_hdmi_setup(hdmi, adj_mode); When starfive_hdmi_setup runs here, when changing the mode, a problem occurs because try to write a value to reg in a state that is not resumed after suspend. > + > + memcpy(>previous_mode, adj_mode, sizeof(hdmi- > >previous_mode)); } > + > +static void starfive_hdmi_encoder_enable(struct drm_encoder *encoder) { > + struct starfive_hdmi *hdmi = encoder_to_hdmi(encoder); > + > + pm_runtime_get_sync(hdmi->dev); So if move the call point of starfive_hdmi_setup here, it works normally. > +} Best regards, Hoegeun
Re: [PATCH 9/9] drm/verisilicon: Add starfive hdmi driver
Hi, On Fri, Jun 02, 2023 at 03:40:43PM +0800, Keith Zhao wrote: > Add HDMI dirver for StarFive SoC JH7110. > > Signed-off-by: Keith Zhao I have a few high level comments: > +static int starfive_hdmi_setup(struct starfive_hdmi *hdmi, > +struct drm_display_mode *mode) > +{ > + hdmi_modb(hdmi, STARFIVE_BIAS_CONTROL, STARFIVE_BIAS_ENABLE, > STARFIVE_BIAS_ENABLE); > + hdmi_writeb(hdmi, STARFIVE_RX_CONTROL, STARFIVE_RX_ENABLE); > + hdmi->hdmi_data.vic = drm_match_cea_mode(mode); > + > + hdmi->tmds_rate = mode->clock * 1000; > + starfive_hdmi_phy_clk_set_rate(hdmi); > + > + while (!(hdmi_readb(hdmi, STARFIVE_PRE_PLL_LOCK_STATUS) & 0x1)) > + continue; > + while (!(hdmi_readb(hdmi, STARFIVE_POST_PLL_LOCK_STATUS) & 0x1)) > + continue; > + > + /*turn on LDO*/ > + hdmi_writeb(hdmi, STARFIVE_LDO_CONTROL, STARFIVE_LDO_ENABLE); > + /*turn on serializer*/ > + hdmi_writeb(hdmi, STARFIVE_SERIALIER_CONTROL, > STARFIVE_SERIALIER_ENABLE); > + > + starfive_hdmi_tx_phy_power_down(hdmi); > + starfive_hdmi_config_video_timing(hdmi, mode); > + starfive_hdmi_tx_phy_power_on(hdmi); > + > + starfive_hdmi_tmds_driver_on(hdmi); > + starfive_hdmi_sync_tmds(hdmi); > + > + return 0; > +} The PHY PLL supports rate until 594MHz, but I don't see any scrambler setup here? > +static void starfive_hdmi_encoder_mode_set(struct drm_encoder *encoder, > +struct drm_display_mode *mode, > +struct drm_display_mode *adj_mode) > +{ > + struct starfive_hdmi *hdmi = encoder_to_hdmi(encoder); > + > + starfive_hdmi_setup(hdmi, adj_mode); You should put that call into the enable callback, there's no need to power it up at that point. > + memcpy(>previous_mode, adj_mode, sizeof(hdmi->previous_mode)); You don't seem to be using that anywhere, and it's not the previous but the current mode. > +} > + > +static void starfive_hdmi_encoder_enable(struct drm_encoder *encoder) > +{ > + struct starfive_hdmi *hdmi = encoder_to_hdmi(encoder); > + > + pm_runtime_get_sync(hdmi->dev); > +} > + > +static void starfive_hdmi_encoder_disable(struct drm_encoder *encoder) > +{ > + struct starfive_hdmi *hdmi = encoder_to_hdmi(encoder); > + > + pm_runtime_put(hdmi->dev); > +} > + > +static bool starfive_hdmi_encoder_mode_fixup(struct drm_encoder *encoder, > + const struct drm_display_mode > *mode, > + struct drm_display_mode *adj_mode) > +{ > + return true; > +} You can drop that one > +static int > +starfive_hdmi_encoder_atomic_check(struct drm_encoder *encoder, > +struct drm_crtc_state *crtc_state, > +struct drm_connector_state *conn_state) > +{ > + return 0; > +} Ditto > +static int starfive_hdmi_connector_get_modes(struct drm_connector *connector) > +{ > + struct starfive_hdmi *hdmi = connector_to_hdmi(connector); > + struct edid *edid; > + int ret = 0; > + > + if (!hdmi->ddc) > + return 0; > + > + edid = drm_get_edid(connector, hdmi->ddc); > + if (edid) { > + hdmi->hdmi_data.sink_is_hdmi = drm_detect_hdmi_monitor(edid); > + hdmi->hdmi_data.sink_has_audio = drm_detect_monitor_audio(edid); > + drm_connector_update_edid_property(connector, edid); > + ret = drm_add_edid_modes(connector, edid); > + kfree(edid); > + } > + > + return ret; > +} get_modes can be called while the connector is inactive, you need to call pm_runtime_get_sync / pm_runtime_put here > +static enum drm_mode_status > +starfive_hdmi_connector_mode_valid(struct drm_connector *connector, > +struct drm_display_mode *mode) > +{ > + const struct pre_pll_config *cfg = pre_pll_cfg_table; > + int pclk = mode->clock * 1000; > + bool valid = false; > + int i; > + > + for (i = 0; cfg[i].pixclock != (~0UL); i++) { > + if (pclk == cfg[i].pixclock) { > + if (pclk > 29700) > + continue; > + > + valid = true; > + break; > + } > + } > + > + return (valid) ? MODE_OK : MODE_BAD; > +} So I guess that's why you don't bother with the scrambler, you filter all the modes > 297MHz? If so, you also need to make sure it happens in atomic_check. mode_valid will only filter the modes exposed to userspace, but the userspace is free to send any mode it wants and that's checked by atomic_check. > + > +static int > +starfive_hdmi_probe_single_connector_modes(struct drm_connector *connector, > +u32 maxX, u32 maxY) > +{ > + struct starfive_hdmi *hdmi = connector_to_hdmi(connector); > + int ret; > + > +
Re: [PATCH 9/9] drm/verisilicon: Add starfive hdmi driver
Hi Keith, On Fri, Jun 02, 2023 at 03:40:43PM +0800, Keith Zhao wrote: > Add HDMI dirver for StarFive SoC JH7110. > > Signed-off-by: Keith Zhao > --- > drivers/gpu/drm/verisilicon/Kconfig | 11 + > drivers/gpu/drm/verisilicon/Makefile| 1 + > drivers/gpu/drm/verisilicon/starfive_hdmi.c | 928 > drivers/gpu/drm/verisilicon/starfive_hdmi.h | 296 +++ > drivers/gpu/drm/verisilicon/vs_drv.c| 6 + > drivers/gpu/drm/verisilicon/vs_drv.h| 4 + > 6 files changed, 1246 insertions(+) > create mode 100644 drivers/gpu/drm/verisilicon/starfive_hdmi.c > create mode 100644 drivers/gpu/drm/verisilicon/starfive_hdmi.h > [...] > diff --git a/drivers/gpu/drm/verisilicon/starfive_hdmi.c > b/drivers/gpu/drm/verisilicon/starfive_hdmi.c > new file mode 100644 > index ..128ecca03309 > --- /dev/null > +++ b/drivers/gpu/drm/verisilicon/starfive_hdmi.c > @@ -0,0 +1,928 @@ [...] > +static int starfive_hdmi_enable_clk_deassert_rst(struct device *dev, struct > starfive_hdmi *hdmi) > +{ > + int ret; > + > + ret = clk_prepare_enable(hdmi->sys_clk); > + if (ret) { > + DRM_DEV_ERROR(dev, "Cannot enable HDMI sys clock: %d\n", ret); > + return ret; > + } > + > + ret = clk_prepare_enable(hdmi->mclk); > + if (ret) { > + DRM_DEV_ERROR(dev, "Cannot enable HDMI mclk clock: %d\n", ret); > + return ret; > + } > + ret = clk_prepare_enable(hdmi->bclk); > + if (ret) { > + DRM_DEV_ERROR(dev, "Cannot enable HDMI bclk clock: %d\n", ret); > + return ret; > + } > + ret = reset_control_deassert(hdmi->tx_rst); > + if (ret < 0) { > + dev_err(dev, "failed to deassert tx_rst\n"); The error paths should clk_disable_unprepare() enabled clocks. > + return ret; > + } > + return 0; > +} > + [...] > +static int starfive_hdmi_get_clk_rst(struct device *dev, struct > starfive_hdmi *hdmi) > +{ > + hdmi->sys_clk = devm_clk_get(dev, "sysclk"); > + if (IS_ERR(hdmi->sys_clk)) { > + DRM_DEV_ERROR(dev, "Unable to get HDMI sysclk clk\n"); > + return PTR_ERR(hdmi->sys_clk); > + } > + hdmi->mclk = devm_clk_get(dev, "mclk"); > + if (IS_ERR(hdmi->mclk)) { > + DRM_DEV_ERROR(dev, "Unable to get HDMI mclk clk\n"); > + return PTR_ERR(hdmi->mclk); > + } > + hdmi->bclk = devm_clk_get(dev, "bclk"); > + if (IS_ERR(hdmi->bclk)) { > + DRM_DEV_ERROR(dev, "Unable to get HDMI bclk clk\n"); > + return PTR_ERR(hdmi->bclk); > + } > + hdmi->tx_rst = reset_control_get_shared(dev, "hdmi_tx"); Use devm_reset_control_get_shared() for consistency, otherwise this is missing a reset_control_put() somewhere. regards Philipp
[PATCH 9/9] drm/verisilicon: Add starfive hdmi driver
Add HDMI dirver for StarFive SoC JH7110. Signed-off-by: Keith Zhao --- drivers/gpu/drm/verisilicon/Kconfig | 11 + drivers/gpu/drm/verisilicon/Makefile| 1 + drivers/gpu/drm/verisilicon/starfive_hdmi.c | 928 drivers/gpu/drm/verisilicon/starfive_hdmi.h | 296 +++ drivers/gpu/drm/verisilicon/vs_drv.c| 6 + drivers/gpu/drm/verisilicon/vs_drv.h| 4 + 6 files changed, 1246 insertions(+) create mode 100644 drivers/gpu/drm/verisilicon/starfive_hdmi.c create mode 100644 drivers/gpu/drm/verisilicon/starfive_hdmi.h diff --git a/drivers/gpu/drm/verisilicon/Kconfig b/drivers/gpu/drm/verisilicon/Kconfig index 89d12185f73b..35e85ac41b10 100644 --- a/drivers/gpu/drm/verisilicon/Kconfig +++ b/drivers/gpu/drm/verisilicon/Kconfig @@ -11,3 +11,14 @@ config DRM_VERISILICON This driver provides VeriSilicon kernel mode setting and buffer management. It does not provide 2D or 3D acceleration. + +config STARFIVE_HDMI + bool "Starfive specific extensions HDMI" + help + This selects support for StarFive SoC specific extensions + for the Innosilicon HDMI driver. If you want to enable + HDMI on JH7110 based SoC, you should select this option. + + To compile this driver as a module, choose M here. + + diff --git a/drivers/gpu/drm/verisilicon/Makefile b/drivers/gpu/drm/verisilicon/Makefile index 0ed25b5e3062..ebe2c94f529a 100644 --- a/drivers/gpu/drm/verisilicon/Makefile +++ b/drivers/gpu/drm/verisilicon/Makefile @@ -8,5 +8,6 @@ vs_drm-objs := vs_dc_hw.o \ vs_gem.o \ vs_plane.o +vs_drm-$(CONFIG_STARFIVE_HDMI) += starfive_hdmi.o obj-$(CONFIG_DRM_VERISILICON) += vs_drm.o diff --git a/drivers/gpu/drm/verisilicon/starfive_hdmi.c b/drivers/gpu/drm/verisilicon/starfive_hdmi.c new file mode 100644 index ..128ecca03309 --- /dev/null +++ b/drivers/gpu/drm/verisilicon/starfive_hdmi.c @@ -0,0 +1,928 @@ +// SPDX-License-Identifier: GPL-2.0-only +/* + * Copyright (C) 2023 StarFive Technology Co., Ltd. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include + +#include "starfive_hdmi.h" +#include "vs_drv.h" + +static struct starfive_hdmi *encoder_to_hdmi(struct drm_encoder *encoder) +{ + return container_of(encoder, struct starfive_hdmi, encoder); +} + +static struct starfive_hdmi *connector_to_hdmi(struct drm_connector *connector) +{ + return container_of(connector, struct starfive_hdmi, connector); +} + +struct starfive_hdmi_i2c { + struct i2c_adapter adap; + + u8 ddc_addr; + u8 segment_addr; + /* protects the edid data when use i2c cmd to read edid */ + struct mutex lock; + struct completion cmp; +}; + +static const struct pre_pll_config pre_pll_cfg_table[] = { + { 25175000, 25175000, 1, 100, 2, 3, 3, 12, 3, 3, 4, 0, 0xf5}, + { 2520, 2520, 1, 100, 2, 3, 3, 12, 3, 3, 4, 0, 0}, + { 2700, 2700, 1, 90, 3, 2, 2, 10, 3, 3, 4, 0, 0}, + { 27027000, 27027000, 1, 90, 3, 2, 2, 10, 3, 3, 4, 0, 0x170a3d}, + { 2832, 2832, 1, 28, 2, 1, 1, 3, 0, 3, 4, 0, 0x51eb85}, + { 3024, 3024, 1, 30, 2, 1, 1, 3, 0, 3, 4, 0, 0x3d70a3}, + { 3150, 3150, 1, 31, 2, 1, 1, 3, 0, 3, 4, 0, 0x7f}, + { 3375, 3375, 1, 33, 2, 1, 1, 3, 0, 3, 4, 0, 0xcf}, + { 3600, 3600, 1, 36, 2, 1, 1, 3, 0, 3, 4, 0, 0}, + { 4000, 4000, 1, 80, 2, 2, 2, 12, 2, 2, 2, 0, 0}, + { 4697, 4697, 1, 46, 2, 1, 1, 3, 0, 3, 4, 0, 0xf851eb}, + { 4950, 4950, 1, 49, 2, 1, 1, 3, 0, 3, 4, 0, 0x7f}, + { 4900, 4900, 1, 49, 2, 1, 1, 3, 0, 3, 4, 0, 0}, + { 5000, 5000, 1, 50, 2, 1, 1, 3, 0, 3, 4, 0, 0}, + { 5400, 5400, 1, 54, 2, 1, 1, 3, 0, 3, 4, 0, 0}, + { 54054000, 54054000, 1, 54, 2, 1, 1, 3, 0, 3, 4, 0, 0x0dd2f1}, + { 57284000, 57284000, 1, 57, 2, 1, 1, 3, 0, 3, 4, 0, 0x48b439}, + { 5823, 5823, 1, 58, 2, 1, 1, 3, 0, 3, 4, 0, 0x3ae147}, + { 59341000, 59341000, 1, 59, 2, 1, 1, 3, 0, 3, 4, 0, 0x574bc6}, + { 5940, 5940, 1, 99, 3, 1, 1, 1, 3, 3, 4, 0, 0}, + { 6500, 6500, 1, 130, 2, 2, 2, 12, 0, 2, 2, 0, 0}, + { 6825, 6825, 1, 68, 2, 1, 1, 3, 0, 3, 4, 0, 0x3f}, + { 7100, 7100, 1, 71, 2, 1, 1, 3, 0, 3, 4, 0, 0}, + { 74176000, 74176000, 1, 98, 1, 2, 2, 1, 2, 3, 4, 0, 0xe6ae6b}, + { 7425, 7425, 1, 99, 1, 2, 2, 1, 2, 3, 4, 0, 0}, + { 7500, 7500, 1, 75, 2, 1, 1, 3, 0, 3, 4, 0, 0}, + { 7875, 7875, 1, 78, 2, 1, 1, 3, 0, 3, 4, 0, 0xcf}, + { 7950, 7950, 1, 79, 2, 1, 1, 3, 0, 3, 4, 0, 0x7f},